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/Doxyfile b/Doxyfile new file mode 100644 index 00000000..7c7e1952 --- /dev/null +++ b/Doxyfile @@ -0,0 +1,1155 @@ +# Doxyfile 1.3.9.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a 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 +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the 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.13 + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# 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 = doc/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 +# cause performance problems for the file system. + +CREATE_SUBDIRS = 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. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, +# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, +# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, +# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, +# Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) 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. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) 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. + +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" "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. + +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. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then 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. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then 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. + +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 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. + +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 +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = YES + +# 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 behaviour. +# 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 behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = YES + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = 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. + +DISTRIBUTE_GROUP_DOC = 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. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# 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 = + +# 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. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources +# only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the SUBGROUPING tag to YES (the default) 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. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# 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 and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +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. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When 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 (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) 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. + +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 (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +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 (the default) these declarations will be included in the +# documentation. + +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 (the default) these blocks will be appended to the +# function's detailed documentation block. + +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 (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +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. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) 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. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = 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 default), 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. + +SORT_BY_SCOPE_NAME = YES + +# 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. + +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. + +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. + +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. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of 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 initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +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. + +SHOW_USED_FILES = YES + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED 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. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR 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. + +WARN_IF_DOC_ERROR = YES + +# 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. + +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 stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be 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. + +INPUT = src + +# If the value of the INPUT tag contains directories, you can use the +# FILE_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 the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp +# *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# 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. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories +# that are symbolic links (a Unix filesystem feature) are excluded from the input. + +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. + +EXCLUDE_PATTERNS = + +# 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. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are 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. + +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 +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# 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 also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = YES + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = NO + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the VERBATIM_HEADERS tag is set to YES (the default) 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. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# 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. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +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 one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +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. If left blank `html' will be used as the default path. + +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). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = doc/header.html + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = doc/footer.html + +# 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 the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, 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. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, 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. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, 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). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, 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. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 1 + +# If the GENERATE_TREEVIEW tag 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 (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = YES + +# 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. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = YES + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_PREDEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = src/headers + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse the +# parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or +# super classes. Setting the tag to NO turns the diagrams off. Note that this +# option is superseded by the HAVE_DOT option below. This is only a fallback. It is +# recommended to install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found on the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes that +# lay further from the root node will be omitted. Note that setting this option to +# 1 or 2 may greatly reduce the computation time needed for large code bases. Also +# note that a graph may be further truncated if the graph's image dimensions are +# not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH and MAX_DOT_GRAPH_HEIGHT). +# If 0 is used for the depth value (the default), the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/LICENSE b/LICENSE index b23b3c86..5d678c5f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,26 +1,5 @@ - The LibTom license +LibTomCrypt is public domain. As should all quality software be. -This is free and unencumbered software released into the public domain. +Tom St Denis -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. -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/TODO b/TODO new file mode 100644 index 00000000..ce7fce10 --- /dev/null +++ b/TODO @@ -0,0 +1,2 @@ +- long term, start moving macros like CTR over to LTC_CTR to make LTC a bit more "drop-in-able". + 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/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/build.sh b/build.sh new file mode 100644 index 00000000..a0486704 --- /dev/null +++ b/build.sh @@ -0,0 +1,20 @@ +#!/bin/bash +echo "$1 ($2, $3)..." +make clean 1>/dev/null 2>/dev/null +echo -n "building..." +CFLAGS="$2 $CFLAGS $4" EXTRALIBS="$5" make -j4 -f $3 test tv_gen 1>gcc_1.txt 2>gcc_2.txt || (echo "build $1 failed see gcc_2.txt for more information" && cat gcc_2.txt && exit 1) +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" && cat test_err.txt && exit 1) + if find *_tv.txt -type f 1>/dev/null 2>/dev/null ; then + for f in *_tv.txt; do if (diff --ignore-case $f notes/$f) then true; else (echo "tv_gen $f failed" && rm -f testok.txt && exit 1); fi; done + fi +fi +if [ -a testok.txt ] && [ -f testok.txt ]; then + exit 0 +fi +exit 1 + +# $Source: /cvs/libtom/libtomcrypt/build.sh,v $ +# $Revision: 1.9 $ +# $Date: 2006/03/18 14:10:55 $ diff --git a/changes b/changes index dc56d08d..2bfe3289 100644 --- a/changes +++ b/changes @@ -1,183 +1,4 @@ -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 +June 17th, 2005 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! @@ -1643,6 +1464,6 @@ v0.02 -- Changed RC5 to only allow 12 to 24 rounds 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 $ */ +/* $Revision: 1.213 $ */ +/* $Date: 2006/06/18 01:42:59 $ */ 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.tex b/crypt.tex new file mode 100644 index 00000000..81ddaae7 --- /dev/null +++ b/crypt.tex @@ -0,0 +1,5245 @@ +\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 1.13} +\author{Tom St Denis \\ +\\ +tomstdenis@gmail.com \\ +http://libtomcrypt.com +} +\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{15cm} + +\begin{flushright}Open Source. Open Academia. Open Minds. + +\mbox{ } + +Tom St Denis, + +Phone: (647)401-8220 + +3330 South Millway, Unit 20 + +Mississauga, Ontario + +L5L 3H4 + +Canada +\end{flushright} +\newpage +\tableofcontents +\chapter{Introduction} +\section{What is the LibTomCrypt?} +LibTomCrypt is a portable ISO C cryptographic library that is meant to be a toolset for cryptographers who are +designing a cryptosystem. It supports symmetric ciphers, one-way hashes, pseudo-random number generators, +public key cryptography (via PKCS \#1 RSA, DH or ECCDH) and a plethora of support +routines. + +The library was designed such that new ciphers/hashes/PRNGs can be added at runtime and the existing API +(and helper API functions) are able to use the new designs automatically. There exists self-check functions for each +block cipher and hash function to ensure that they compile and execute to the published design specifications. The library +also performs extensive parameter error checking to prevent any number of runtime exploits or errors. + +\subsection{What the library IS for?} + +The library serves as a toolkit for developers who have to solve cryptographic problems. Out of the box LibTomCrypt +does not process SSL or OpenPGP messages, it doesn't read x.591 certificates or write PEM encoded data. It does, however, +provide all of the tools required to build such functionality. LibTomCrypt was designed to be a flexible library that +was not tied to any particular cryptographic problem. + +\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. + +Not only did I strive to make a consistent and simple API to work with but I also strived to make the library +configurable in terms of its build options. Out of the box the library will build with any modern version of GCC +without having to use configure scripts. This means that the library will work with platforms where development +tools may be limited (e.g. no autoconf). + +On top of making the build simple and the API approachable I've also strived for a reasonably high level of +robustness and efficiency. LibTomCrypt traps and returns a series of errors ranging from invalid +arguments to buffer overflows/overruns. It is mostly thread safe and has been clocked on various platforms +with ``cycles per byte'' timings that are comparable (and often favourable) to other libraries such as OpenSSL and +Crypto++. + +\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 to do +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}) has been 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 +\end{enumerate} + +`mpi.c'' was originally written by Michael Fromberger (sting@linguist.dartmouth.edu) but has since been replaced with +my LibTomMath library which is public domain. + +``rc2.c'' is based on publicly available code that is not attributed to a person from the given source. + +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 ``tomcrypt\_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{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 ``tomcrypt.h'' like so: +\begin{verbatim} +#include +int main(void) { + return 0; +} +\end{verbatim} + +The header file ``tomcrypt.h'' also includes ``stdio.h'', ``string.h'', ``stdlib.h'', ``time.h'' and ``ctype.h''. + +\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 byte order (32--bits only) \\ + \hline +\end{tabular} +\end{center} +\end{small} + +There are 32 and 64-bit cyclic rotations as well: +\index{ROL} \index{ROR} \index{ROL64} \index{ROR64} \index{ROLc} \index{RORc} \index{ROL64c} \index{ROR64c} +\begin{center} +\begin{tabular}{|c|c|c|} + \hline ROL(x, y) & {\bf unsigned long} x, {\bf unsigned long} y & $x << y, 0 \le y \le 31$ \\ + \hline ROLc(x, y) & {\bf unsigned long} x, {\bf const unsigned long} y & $x << y, 0 \le y \le 31$ \\ + \hline ROR(x, y) & {\bf unsigned long} x, {\bf unsigned long} y & $x >> y, 0 \le y \le 31$ \\ + \hline RORc(x, y) & {\bf unsigned long} x, {\bf const unsigned long} y & $x >> y, 0 \le y \le 31$ \\ + \hline && \\ + \hline ROL64(x, y) & {\bf unsigned long} x, {\bf unsigned long} y & $x << y, 0 \le y \le 63$ \\ + \hline ROL64c(x, y) & {\bf unsigned long} x, {\bf const unsigned long} y & $x << y, 0 \le y \le 63$ \\ + \hline ROR64(x, y) & {\bf unsigned long} x, {\bf unsigned long} y & $x >> y, 0 \le y \le 63$ \\ + \hline ROR64c(x, y) & {\bf unsigned long} x, {\bf const unsigned long} y & $x >> y, 0 \le y \le 63$ \\ + \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 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 return an error code +indicating a buffer overflow would have occurred. If the function succeeds it stores the length of the output +back into ``x'' so that the calling application will know how many bytes were used. + +As of v1.13, most functions will update your length on failure to indicate the size required by the function. Not all functions +support this so please check the source before you rely on it doing that. + +\section{Functions that need a PRNG} +\index{Pseudo Random Number Generator} \index{PRNG} +Certain functions such as ``rsa\_make\_key()'' require a Pseudo Random Number Generator (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. + +Certain PRNG algorithms do not require a ``prng\_state'' argument (sprng for example). The ``prng\_state'' argument +may be passed as \textbf{NULL} in such situations. + +\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 with an ECB block mode interface. It's 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. + +\subsection{Key Scheduling} +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. This also removes the need for dynamic memory +allocation and allows you to allocate a fixed sized buffer for storing scheduled keys. 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. It's 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). + +\subsection{ECB Encryption and Decryption} +To encrypt or decrypt a block in ECB mode there are these two function classes +\index{Cipher Encrypt} \index{Cipher Decrypt} +\begin{verbatim} +int XXX_ecb_encrypt(const unsigned char *pt, unsigned char *ct, + symmetric_key *skey); + +int 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''\footnote{ct stands for ciphertext.} is the output. For the decryption function it's the opposite. They both +return \textbf{CRYPT\_OK} on success. To test a particular +cipher against test vectors\footnote{As published in their design papers.} call the self-test function + +\subsection{Self--Testing} +\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. + +\subsection{Key Sizing} +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. + +\subsection{Cipher Termination} +When you are finished with a cipher you can de--initialize it with the done function. +\begin{verbatim} +void XXX_done(symmetric_key *skey); +\end{verbatim} +For the software based ciphers within LibTomCrypt this function will not do anything. However, user supplied +cipher descriptors may require calls to it for resource management. To be compliant all functions which call a cipher +setup function must also call the respective cipher done function when finished. + +\subsection{Simple Encryption Demonstration} +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 */ + + /* now ct holds the encrypted version of pt */ + + /* decrypt the block */ + blowfish_ecb_decrypt(ct, /* decrypt this 8-byte array */ + pt, /* store decrypted data here */ + &skey); /* our previously scheduled key */ + + /* now we have decrypted ct to the original plaintext in pt */ + + /* Terminate the cipher context */ + blowfish_done(&skey); + + 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. It's 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 and key +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{small} +\begin{verbatim} +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 keylen, int num_rounds, symmetric_key *skey); + int (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); + int (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); + int (*test)(void); + void (*done)(symmetric_key *skey); + int (*keysize)(int *keysize); + + int (*accel_ecb_encrypt)(const unsigned char *pt, + unsigned char *ct, + unsigned long blocks, symmetric_key *skey); + int (*accel_ecb_decrypt)(const unsigned char *ct, + unsigned char *pt, + unsigned long blocks, symmetric_key *skey); + int (*accel_cbc_encrypt)(const unsigned char *pt, + unsigned char *ct, + unsigned long blocks, unsigned char *IV, + symmetric_key *skey); + int (*accel_cbc_decrypt)(const unsigned char *ct, + unsigned char *pt, + unsigned long blocks, unsigned char *IV, + symmetric_key *skey); + int (*accel_ctr_encrypt)(const unsigned char *pt, + unsigned char *ct, + unsigned long blocks, unsigned char *IV, + int mode, symmetric_key *skey); + int (*accel_lrw_encrypt)(const unsigned char *pt, + unsigned char *ct, + unsigned long blocks, + unsigned char *IV, + const unsigned char *tweak, + symmetric_key *skey); + int (*accel_lrw_decrypt)(const unsigned char *ct, + unsigned char *pt, + unsigned long blocks, + unsigned char *IV, + const unsigned char *tweak, + symmetric_key *skey); + int (*accel_ccm_memory)( + const unsigned char *key, unsigned long keylen, + 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); + 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); +}; +\end{verbatim} +\end{small} + +Where ``name'' is the lower case ASCII version of the name. The fields ``min\_key\_length'' and ``max\_key\_length'' +are the minimum and maximum key sizes in bytes. The ``block\_length'' member is the block size of the cipher +in bytes. 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 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 Anubis & anubis\_desc & 16 & 16 $\ldots$ 40 & 12 $\ldots$ 18 \\ + \hline Khazad & khazad\_desc & 8 & 16 & 8 \\ + \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 +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 ``tomcrypt\_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{Initialization} +\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 CTR and ECB mode): +\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 ctr_start( int cipher, + const unsigned char *IV, + const unsigned char *key, int keylen, + int num_rounds, int ctr_mode, + symmetric_CTR *ctr); + +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. + + +In the case of CTR mode there is an additional parameter ``ctr\_mode'' which specifies the mode that the counter is to be used in. +If \textbf{CTR\_COUNTER\_LITTLE\_ENDIAN} was specified then the counter will be treated as a little endian value. Otherwise, if +\textbf{CTR\_COUNTER\_BIG\_ENDIAN} was specified the counter will be treated as a big endian value. + +The routines return {\bf CRYPT\_OK} if the cipher initialized correctly, otherwise they return an error code. + +\subsection{Encryption and Decryption} +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, + unsigned long len, symmetric_YYY *YYY); +int XXX_decrypt(const unsigned char *ct, unsigned char *pt, + unsigned long len, symmetric_YYY *YYY); +\end{verbatim} +Where ``XXX'' is one of $\lbrace ecb, cbc, ctr, cfb, ofb \rbrace$. + +In all cases ``len'' is the size of the buffer (as number of octets) 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. + +In the ECB and CBC cases ``len'' must be a multiple of the ciphers block size. In the CBC case you must manually pad the end of your message (either with +zeroes or with whatever your protocol requires). + +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. + +\subsection{IV Manipulation} +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() functions 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. + +\subsection{Stream Termination} +To terminate an open stream call the done function. + +\index{ecb\_done()} \index{cbc\_done()}\index{cfb\_done()}\index{ofb\_done()} \index{ctr\_done()} +\begin{verbatim} +int XXX_done(symmetric_XXX *XXX); +\end{verbatim} + +This will terminate the stream (by terminating the cipher) and return \textbf{CRYPT\_OK} if successful. + +\subsection{Examples} + +\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_COUNTER_LITTLE_ENDIAN, /* Little endian counter */ + &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; + } + + /* terminate the stream */ + if ((err = ctr_done(&ctr)) != CRYPT_OK) { + printf("ctr_done 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} + +\subsection{LRW Mode} + +LRW mode is a cipher mode which is meant for indexed encryption like used to handle storage media. It is meant to have efficient seeking and overcome the +security problems of ECB mode while not increasing the storage requirements. It is used much like any other chaining mode except with two key differences. + +The key is specified as two strings the first key $K_1$ is the (normally AES) key and can be any length (typically 16, 24 or 32 octets long). The second key +$K_2$ is the ``tweak'' key and is always 16 octets long. The tweak value is \textbf{NOT} a nonce or IV value it must be random and secret. + +To initialize LRW mode use: + +\index{lrw\_start()} +\begin{verbatim} +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); +\end{verbatim} + +This will initialize the LRW context with the given (16 octet) ``IV'', cipher $K_1$ ``key'' of length ``keylen'' octets and the (16 octet) $K_2$ ``tweak''. +While LRW was specified to be used only with AES, LibTomCrypt will allow any 128--bit block cipher to be specified as indexed by ``cipher''. The +number of rounds for the block cipher ``num\_rounds'' can be 0 to use the default number of rounds for the given cipher. + +To process data use the following functions: + +\index{lrw\_encrypt()} \index{lrw\_decrypt()} +\begin{verbatim} +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); +\end{verbatim} + +These will encrypt (or decrypt) the plaintext to the ciphertext buffer (or vice versa). The length is specified by ``len'' in octets but must be a multiple +of 16. + +To manipulate the IV use the following functions: + +\index{lrw\_getiv()} \index{lrw\_setiv()} +\begin{verbatim} +int lrw_getiv(unsigned char *IV, unsigned long *len, symmetric_LRW *lrw); +int lrw_setiv(const unsigned char *IV, unsigned long len, symmetric_LRW *lrw); +\end{verbatim} + +These will get or set the 16--octet IV. Note that setting the IV is the same as ``seeking'' and unlike other modes is not a free operation. It requires +updating the entire tweak which is slower than sequential use. Avoid seeking excessively in performance constrained code. + +To terminate the LRW state use the following: + +\index{lrw\_done()} +\begin{verbatim} +int lrw_done(symmetric_LRW *lrw); +\end{verbatim} + +\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. + +\subsubsection{State Termination} + +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). + +\subsubsection{Packet Functions} +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. + +\subsection{CCM Mode} +CCM is a NIST proposal for Encrypt+Authenticate that is centered around using AES (or any 16--byte cipher) as a primitive. Unlike EAX and OCB mode +it is only meant for ``packet'' mode where the length of the input is known in advance. Since it is a packet mode function CCM only has one +function that performs the protocol. + +\index{ccm\_memory()} +\begin{verbatim} +int ccm_memory(int cipher, + const unsigned char *key, unsigned long keylen, + 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); +\end{verbatim} + +This performs the ``CCM'' operation on the data. The ``cipher'' variable indicates which cipher in the descriptor table to use. It must have a +16--byte block size for CCM. + +The key can be specified in one of two fashions. First it can be passed as an array of octets in ``key'' of length ``keylen''. Alternatively, +it can be passed in as a previously scheduled key in ``uskey''. The latter fashion saves time when the same key is used for multiple packets. If +``uskey'' is not \textbf{NULL} then ``key'' may be \textbf{NULL} (and vice-versa). + +The nonce or salt is ``nonce'' of length ``noncelen'' octets. The header is meta--data you want to send with the message but not have +encrypted, it is stored in ``header'' of length ``headerlen'' octets. The header can be zero octets long (if $headerlen = 0$ then +you can pass ``header'' as \textbf{NULL}). + +The plaintext is stored in ``pt'' and the ciphertext in ``ct''. The length of both are expected to be equal and is passed in as ``ptlen''. It is +allowable that $pt = ct$. The ``direction'' variable indicates whether encryption (direction $=$ \textbf{CCM\_ENCRYPT}) or +decryption (direction $=$ \textbf{CCM\_DECRYPT}) is to be performed. + +As implemented this copy of CCM cannot handle a header or plaintext longer than $2^{32} - 1$ octets long. + +You can test the implementation of CCM with the following function. + +\index{ccm\_test()} +\begin{verbatim} +int ccm_test(void); +\end{verbatim} + +This will return \textbf{CRYPT\_OK} if the CCM routine passes known test vectors. + +\subsection{GCM Mode} +Galois counter mode is an IEEE proposal for authenticated encryption. Like EAX and OCB it can be used in a streaming capacity however, unlike EAX it cannot +accept ``additional authentication data'' (meta--data) after plaintext has been processed. This mode also only works with block ciphers with a sixteen +byte block. + +A GCM stream is meant to be processed in three modes each one sequential serial. First the initial vector (per session) data is processed. This should be +unique to every session. Next the the optional additional authentication data is processed and finally the plaintext. + +\subsubsection{Initialization} +To initialize the GCM context with a secret key call the following function. + +\index{gcm\_init()} +\begin{verbatim} +int gcm_init(gcm_state *gcm, int cipher, + const unsigned char *key, int keylen); +\end{verbatim} +This initializes the GCM state ``gcm'' for the given cipher indexed by ``cipher'' with a secret key ``key'' of length ``keylen'' octets. The cipher chosen +must have a 16--byte block size (e.g. AES). + +\subsubsection{Initial Vector} +After the state has been initialized (or reset) the next step is to add the session (or packet) initial vector. It should be unique per packet encrypted. + +\index{gcm\_add\_iv()} +\begin{verbatim} +int gcm_add_iv(gcm_state *gcm, + const unsigned char *IV, unsigned long IVlen); +\end{verbatim} + +This adds the initial vector octets from ``IV'' of length ``IVlen'' to the GCM state ``gcm''. You can call this function as many times as required +to process the entire IV. + +Note that the GCM protocols provides a ``shortcut'' for 12--byte IVs where no preprocessing is to be done. If you want to minimize per packet latency it's ideal +to only use 12--byte IVs. You can just increment it like a counter for each packet and the CTR [privacy] will be ensured. + +\subsubsection{Additional Authentication Data} +After the entire IV has been processed the additional authentication data can be processed. Unlike the IV a packet/session does not require additional +authentication data (AAD) for security. The AAD is meant to be used as side--channel data you want to be authenticated with the packet. Note that once +you begin adding AAD to the GCM state you cannot return to adding IV data until the state is reset. + +\index{gcm\_add\_aad()} +\begin{verbatim} +int gcm_add_aad(gcm_state *gcm, + const unsigned char *adata, unsigned long adatalen); +\end{verbatim} +This adds the additional authentication data ``adata'' of length ``adatalen'' to the GCM state ``gcm''. + +\subsubsection{Plaintext Processing} +After the AAD has been processed the plaintext (or ciphertext depending on the direction) can be processed. + +\index{gcm\_process()} +\begin{verbatim} +int gcm_process(gcm_state *gcm, + unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + int direction); +\end{verbatim} +This processes message data where ``pt'' is the plaintext and ``ct'' is the ciphertext. The length of both are equal and stored in ``ptlen''. Depending on the +mode ``pt'' is the input and ``ct'' is the output (or vice versa). When ``direction'' equals \textbf{GCM\_ENCRYPT} the plaintext is read, encrypted and stored +in the ciphertext buffer. When ``direction'' equals \textbf{GCM\_DECRYPT} the opposite occurs. + +\subsubsection{State Termination} +To terminate a GCM state and retrieve the message authentication tag call the following function. + +\index{gcm\_done()} +\begin{verbatim} +int gcm_done(gcm_state *gcm, + unsigned char *tag, unsigned long *taglen); +\end{verbatim} +This terminates the GCM state ``gcm'' and stores the tag in ``tag'' of length ``taglen'' octets. + +\subsubsection{State Reset} +The call to gcm\_init() will perform considerable pre--computation (when \textbf{GCM\_TABLES} is defined) and if you're going to be dealing with a lot of packets +it is very costly to have to call it repeatedly. To aid in this endeavour the reset function has been provided. + +\index{gcm\_reset()} +\begin{verbatim} +int gcm_reset(gcm_state *gcm); +\end{verbatim} + +This will reset the GCM state ``gcm'' to the state that gcm\_init() left it. The user would then call gcm\_add\_iv(), gcm\_add\_aad(), etc. + +\subsubsection{One--Shot Packet} +To process a single packet under any given key the following helper function can be used. + +\index{gcm\_memory()} +\begin{verbatim} +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); +\end{verbatim} + +This will initialize the GCM state with the given key, IV and AAD value then proceed to encrypt or decrypt the message text and store the final +message tag. The definition of the variables is the same as it is for all the manual functions. + +If you are processing many packets under the same key you shouldn't use this function as it invokes the pre--computation with each call. + +\subsubsection{Example Usage} +The following is an example usage of how to use GCM over multiple packets with a shared secret key. + +\begin{small} +\begin{verbatim} +#include + +int send_packet(const unsigned char *pt, unsigned long ptlen, + const unsigned char *iv, unsigned long ivlen, + const unsigned char *aad, unsigned long aadlen, + gcm_state *gcm) +{ + int err; + unsigned long taglen; + unsigned char tag[16]; + + /* reset the state */ + if ((err = gcm_reset(gcm)) != CRYPT_OK) { + return err; + } + + /* Add the IV */ + if ((err = gcm_add_iv(gcm, iv, ivlen)) != CRYPT_OK) { + return err; + } + + /* Add the AAD (note: aad can be NULL if aadlen == 0) */ + if ((err = gcm_add_aad(gcm, aad, aadlen)) != CRYPT_OK) { + return err; + } + + /* process the plaintext */ + if ((err = gcm_process(gcm, pt, ptlen, pt, GCM_ENCRYPT)) != CRYPT_OK) { + return err; + } + + /* Finish up and get the MAC tag */ + taglen = sizeof(tag); + if ((err = gcm_done(gcm, tag, &taglen)) != CRYPT_OK) { + return err; + } + + /* ... send a header describing the lengths ... */ + + /* depending on the protocol and how IV is generated you may have to send it too... */ + send(socket, iv, ivlen, 0); + + /* send the aad */ + send(socket, aad, aadlen, 0); + + /* send the ciphertext */ + send(socket, pt, ptlen, 0); + + /* send the tag */ + send(socket, tag, taglen, 0); + + return CRYPT_OK; +} + +int main(void) +{ + gcm_state gcm; + unsigned char key[16], IV[12], pt[PACKET_SIZE]; + int err, x; + unsigned long ptlen; + + /* somehow fill key/IV with random values */ + + /* register AES */ + register_cipher(&aes_desc); + + /* init the GCM state */ + if ((err = gcm_init(&gcm, find_cipher("aes"), key, 16)) != CRYPT_OK) { + whine_and_pout(err); + } + + /* handle us some packets */ + for (;;) { + ptlen = make_packet_we_want_to_send(pt); + + /* use IV as counter (12 byte counter) */ + for (x = 11; x >= 0; x--) { + if (++IV[x]) { + break; + } + } + + if ((err = send_packet(pt, ptlen, iv, 12, NULL, 0, &gcm)) != CRYPT_OK) { + whine_and_pout(err); + } + } + return EXIT_SUCCESS; +} +\end{verbatim} +\end{small} + +\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 inlen); +\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 *hash); + int (*process)(hash_state *hash, + const unsigned char *in, unsigned long inlen); + int (*done) (hash_state *hash, unsigned char *out); + int (*test) (void); +}; +\end{verbatim} + +\index{find\_hash()} +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. + +In addition to find\_hash() there is also find\_hash\_oid() which finds a hash by the ASN.1 OBJECT IDENTIFIER string. +\index {find\_hash\_oid()} +\begin{verbatim} +int find_hash_oid(const unsigned long *ID, unsigned long IDlen); +\end{verbatim} + +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 *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + +int hash_file(int hash, const char *fname, + unsigned char *out, unsigned long *outlen); + +int hash_filehandle(int hash, FILE *in, + unsigned char *out, 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} + +\section{Cipher Hash Construction} +\index{Cipher Hash Construction} +An addition to the suite of hash functions is the ``Cipher Hash Construction'' or ``CHC'' mode. In this mode +applicable block ciphers (such as AES) can be turned into hash functions that other LTC functions can use. In +particular this allows a cryptosystem to be designed using very few moving parts. + +In order to use the CHC system the developer will have to take a few extra steps. First the ``chc\_desc'' hash +descriptor must be registered with register\_hash(). At this point the CHC hash cannot be used to hash +data. While it is in the hash system you still have to tell the CHC code which cipher to use. This is accomplished +via the chc\_register() function. + +\index{chc\_register()} +\begin{verbatim} +int chc_register(int cipher); +\end{verbatim} + +A cipher has to be registered with CHC (and also in the cipher descriptor tables with +register\_cipher()). The chc\_register() function will bind a cipher to the CHC system. Only one cipher can +be bound to the CHC hash at a time. There are additional requirements for the system to work. + +\begin{enumerate} + \item The cipher must have a block size greater than 64--bits. + \item The cipher must allow an input key the size of the block size. +\end{enumerate} + +Example of using CHC with the AES block cipher. + +\begin{verbatim} +#include +int main(void) +{ + int err; + + /* register cipher and hash */ + if (register_cipher(&aes_enc_desc) == -1) { + printf("Could not register cipher\n"); + return EXIT_FAILURE; + } + if (register_hash(&chc_desc) == -1) { + printf("Could not register hash\n"); + return EXIT_FAILURE; + } + + /* start chc with AES */ + if ((err = chc_register(find_cipher("aes"))) != CRYPT_OK) { + printf("Error binding AES to CHC: %s\n", error_to_string(err)); + } + + /* now you can use chc_hash in any LTC function [aside from pkcs...] */ + /* ... */ +\end{verbatim} + + +\section{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 *in, unsigned long inlen); +\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 *out, unsigned long *outlen); +\end{verbatim} +``hmac'' is the HMAC state you are working with. ``out'' 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 *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +\end{verbatim} +This will produce an HMAC code for the array of octets in ``in'' of length ``inlen''. 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 ``out'' and the length in ``outlen''. The value of ``outlen'' 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 *out, unsigned long *outlen); +\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''. ``out'' 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 *in, unsigned long inlen); +\end{verbatim} +This will send ``inlen'' bytes from ``in'' 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 *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +\end{verbatim} +This will compute the OMAC of ``inlen'' bytes of ``in'' 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 *in, unsigned long inlen); +\end{verbatim} +This will process ``inlen'' bytes of ``in'' 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 *in, unsigned long inlen, + 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: +\index{pmac\_test()} +\begin{verbatim} +int pmac_test(void); +\end{verbatim} +Which returns {\bf CRYPT\_OK} if the code passes otherwise it returns an error code. + +\section{Pelican MAC} +Pelican MAC is a new (experimental) MAC by the AES team that uses four rounds of AES as a ``mixing function''. It achieves a very high +rate of processing and is potentially very secure. It requires AES to be enabled to function. You do not have to register\_cipher() AES first though +as it calls AES directly. + +\index{pelican\_init()} +\begin{verbatim} +int pelican_init(pelican_state *pelmac, const unsigned char *key, unsigned long keylen); +\end{verbatim} +This will initialize the Pelican state with the given AES key. Once this has been done you can begin processing data. + +\index{pelican\_process()} +\begin{verbatim} +int pelican_process(pelican_state *pelmac, const unsigned char *in, unsigned long inlen); +\end{verbatim} +This will process ``inlen'' bytes of ``in'' through the Pelican MAC. It's best that you pass in multiples of 16 bytes as it makes the +routine more efficient but you may pass in any length of text. You can call this function as many times as required to process +an entire message. + +\index{pelican\_done()} +\begin{verbatim} +int pelican_done(pelican_state *pelmac, unsigned char *out); +\end{verbatim} +This terminates a Pelican MAC and writes the 16--octet tag to ``out''. + +\subsection{Example} + +\begin{verbatim} +#include +int main(void) +{ + pelican_state pelstate; + unsigned char key[32], tag[16]; + int err; + + /* somehow initialize a key */ + + /* initialize pelican mac */ + if ((err = pelican_init(&pelstate, /* the state */ + key, /* user key */ + 32 /* key length in octets */ + )) != CRYPT_OK) { + printf("Error initializing Pelican: %s", error_to_string(err)); + return EXIT_FAILURE; + } + + /* MAC some data */ + if ((err = pelican_process(&pelstate, /* the state */ + "hello world", /* data to mac */ + 11 /* length of data */ + )) != CRYPT_OK) { + printf("Error processing Pelican: %s", error_to_string(err)); + return EXIT_FAILURE; + } + + /* Terminate the MAC */ + if ((err = pelican_done(&pelstate, /* the state */ + tag /* where to store the tag */ + )) != CRYPT_OK) { + printf("Error terminating Pelican: %s", error_to_string(err)); + return EXIT_FAILURE; + } + + /* tag[0..15] has the MAC output now */ + + return EXIT_SUCCESS; +} +\end{verbatim} + + +\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: +\index{PRNG start} +\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. To add entropy to the PRNG call: +\index{PRNG add\_entropy} +\begin{verbatim} +int XXX_add_entropy(const unsigned char *in, unsigned long inlen, + 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. +\index{PRNG ready} +\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: +\index{PRNG read} +\begin{verbatim} +unsigned long XXX_read(unsigned char *out, unsigned long outlen, + prng_state *prng); +\end{verbatim} + +Which returns the number of bytes read from the PRNG. When you are finished with a PRNG state you call +the following. + +\index{PRNG done} +\begin{verbatim} +void XXX_done(prng_state *prng); +\end{verbatim} + +This will terminate a PRNG state and free any memory (if any) allocated. To export a PRNG state +so that you can later resume the PRNG call the following. + +\index{PRNG export} +\begin{verbatim} +int XXX_export(unsigned char *out, unsigned long *outlen, + prng_state *prng); +\end{verbatim} + +This will write a ``PRNG state'' to the buffer ``out'' of length ``outlen'' bytes. The idea of +the export is meant to be used as a ``seed file''. That is, when the program starts up there will not likely +be that much entropy available. To import a state to seed a PRNG call the following function. + +\index{PRNG import} +\begin{verbatim} +int XXX_import(const unsigned char *in, unsigned long inlen, + prng_state *prng); +\end{verbatim} + +This will call the start and add\_entropy functions of the given PRNG. It will use the state in +``in'' of length ``inlen'' as the initial seed. You must pass the same seed length as was exported +by the corresponding export function. + +Note that importing a state will not ``resume'' the PRNG from where it left off. That is, if you export +a state, emit (say) 8 bytes and then import the previously exported state the next 8 bytes will not +specifically equal the 8 bytes you generated previously. + +When a program is first executed the normal course of operation is + +\begin{enumerate} + \item Gather entropy from your sources for a given period of time or number of events. + \item Start, use your entropy via add\_entropy and ready the PRNG yourself. +\end{enumerate} + +When your program is finished you simply call the export function and save the state to a medium (disk, +flash memory, etc). The next time your application starts up you can detect the state, feed it to the +import function and go on your way. It is ideal that (as soon as possible) after startup you export a +fresh state. This helps in the case that the program aborts or the machine is powered down without +being given a chance to exit properly. + +Note that even if you have a state to import it is important to add new entropy to the state. However, +there is less pressure to do so. + +To test a PRNG for operational conformity call the following functions. + +\index{PRNG test} +\begin{verbatim} +int XXX_test(void); +\end{verbatim} + +This will return \textbf{CRYPT\_OK} if PRNG is operating properly. + +\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 export_size; /* size in bytes of exported state */ + 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 *); + void (*done)(prng_state *); + int (*export)(unsigned char *, unsigned long *, prng_state *); + int (*import)(const unsigned char *, unsigned long, prng_state *); + int (*test)(void); +}; +\end{verbatim} + +\index{find\_prng()} +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} + +\subsection{PRNGs Provided} +\begin{figure}[here] +\begin{center} +\begin{small} +\begin{tabular}{|c|c|l|} +\hline \textbf{Name} & \textbf{Descriptor} & \textbf{Usage} \\ +\hline Yarrow & yarrow\_desc & Fast short-term PRNG \\ +\hline Fortuna & fortuna\_desc & Fast long-term PRNG (recommended) \\ +\hline RC4 & rc4\_desc & Stream Cipher \\ +\hline SOBER-128 & sober128\_desc & Stream Cipher (also very fast PRNG) \\ +\hline +\end{tabular} +\end{small} +\end{center} +\caption{List of Provided PRNGs} +\end{figure} + +\subsubsection{Yarrow} +Yarrow is fast PRNG meant to collect an unspecified amount of entropy from sources +(keyboard, mouse, interrupts, etc) and produce an unbounded string of random bytes. + +\textit{Note:} This PRNG is still secure for most taskings but is no longer recommended. Users +should use Fortuna instead. + +\subsubsection{Fortuna} + +Fortuna is a fast attack tolerant and more thoroughly designed PRNG suitable for long term +usage. It is faster than the default implementation of Yarrow\footnote{Yarrow has been implemented +to work with most cipher and hash combos based on which you have chosen to build into the library.} while +providing more security. + +Fortuna is slightly less flexible than Yarrow in the sense that it only works with the AES block cipher +and SHA--256 hash function. Technically Fortuna will work with any block cipher that accepts a 256--bit +key and any hash that produces at least a 256--bit output. However, to make the implementation simpler +it has been fixed to those choices. + +Fortuna is more secure than Yarrow in the sense that attackers who learn parts of the entropy being +added to the PRNG learn far less about the state than that of Yarrow. Without getting into to many +details Fortuna has the ability to recover from state determination attacks where the attacker starts +to learn information from the PRNGs output about the internal state. Yarrow on the other hand cannot +recover from that problem until new entropy is added to the pool and put to use through the ready() function. + +\subsubsection{RC4} + +RC4 is an old stream cipher that can also double duty as a PRNG in a pinch. You ``key'' it by +calling add\_entropy() and setup the key by calling ready(). You can only add upto 256 bytes via +add\_entropy(). + +When you read from RC4 the output of the RC4 algorithm is XOR'd against your buffer you provide. In this +manner you can use rc4\_read() as an encrypt (and decrypt) function. + +You really shouldn't use RC4 anymore. This isn't because RC4 is weak (though biases are known to exist) just +simply that faster alternatives exist. + +\subsubsection{SOBER-128} + +SOBER-128 is a stream cipher designed by the QUALCOMM Australia team. Like RC4 you ``key'' it by +calling add\_entropy(). There is no need to call ready() for this PRNG as it does not do anything. + +Note that this cipher has several oddities about how it operates. The first time you call +add\_entropy() that sets the cipher's key. Every other time you call the same function it sets +the cipher's IV variable. The IV mechanism allows you to encrypt several messages with the same +key and not re--use the same key material. + +Unlike Yarrow and Fortuna all of the entropy (and hence security) of this algorithm rests in the data +you pass it on the first call to add\_entropy(). All buffers sent to add\_entropy() must have a length +that is a multiple of four bytes. + +Like RC4 the output of SOBER--128 is XOR'ed against the buffer you provide it. In this manner you can use +sober128\_read() as an encrypt (and decrypt) function. + +Since SOBER-128 has a fixed keying scheme and is very fast (faster than RC4) the ideal usage of SOBER-128 is to +key it from the output of Fortuna (or Yarrow) and use it to encrypt messages. It is also ideal for +simulations which need a high quality (and fast) stream of bytes. + +\subsubsection{Example Usage} +\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 the ``v2.1'' algorithms. +To simplify matters a little the v2.1 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. + +\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. + +\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. + +\index{PK\_PRIVATE} \index{PK\_PUBLIC} +There are two types of RSA keys. The types are {\bf PK\_PRIVATE} and {\bf PK\_PUBLIC}. The first type is a private +RSA key which includes the CRT parameters\footnote{As of v0.99 the PK\_PRIVATE\_OPTIMIZED type has been deprecated +and has been replaced by the PK\_PRIVATE type.} in the form of a RSAPrivateKey. The second type is a public RSA key +which only includes the modulus and public exponent. It takes the form of a RSAPublicKey. + +\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 *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, rsa_key *key); +\end{verbatim} +This function will OAEP pad ``in'' of length inlen bytes then RSA encrypt it and store the ciphertext +in ``out'' 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 *out, unsigned long *outlen, + const unsigned char *lparam, unsigned long lparamlen, + int hash_idx, int *stat, + rsa_key *key); +\end{verbatim} +This function will RSA decrypt ``in'' of length ``inlen'' then OAEP depad the resulting data and store it in +``out'' 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 ``stat'' 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 *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int prng_idx, + int hash_idx, unsigned long saltlen, + rsa_key *key); +\end{verbatim} + +This will PSS encode the message hash ``in'' of length ``inlen''. Next the PSS encoded message will be RSA ``signed'' and +the output is stored in ``out'' of length ``outlen''. + + +\index{rsa\_verify\_hash()} +\begin{verbatim} +int rsa_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *msghash, unsigned long msghashlen, + 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; + } + + /* register a math library (in this case TomFastMath) + ltc_mp = tfm_desc; + + 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 */ + 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} + +\subsection{RSA Key Export} +To export a RSA key use the following function. + +\index{rsa\_export()} +\begin{verbatim} +int rsa_export(unsigned char *out, unsigned long *outlen, int type, rsa_key *key); +\end{verbatim} +This will export the RSA key in either a RSAPublicKey or RSAPrivateKey (PKCS \#1 types) depending on the value of ``type''. When it is +set to \textbf{PK\_PRIVATE} the export format will be RSAPrivateKey and otherwise it will be RSAPublicKey. + +\subsection{RSA Key Import} +To import a RSA key use the following function. + +\index{rsa\_import()} +\begin{verbatim} +int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key); +\end{verbatim} + +This will import the key stored in ``inlen'' and import it to ``key''. If the function fails it will automatically free any allocated memory. This +function can import both RSAPublicKey and RSAPrivateKey formats. + +As of v1.06 this function can also import OpenSSL DER formatted public RSA keys. They are essentially encapsulated RSAPublicKeys. LibTomCrypt will +import the key, strip off the additional data (it's the preferred hash) and fill in the rsa\_key structure as if it were a native RSAPublicKey. Note that +there is no function provided to export in this format. + +\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{Fixed Point Optimizations} +\index{Fixed Point ECC} +As of v1.12 of LibTomCrypt, support for Fixed Point ECC point multiplication has been added. It is a generic optimization that is +supported by any conformant math plugin. It is enabled by defining \textbf{MECC\_FP} during the build, such as + +\begin{verbatim} +CFLAGS="-DTFM_DESC -DMECC_FP" make +\end{verbatim} + +which will build LTC using the TFM math library and enabling this new feature. The feature is not enabled by default as it is \textbf{NOT} thread +safe (by default). It supports the LTC locking macros (such as by enabling LTC\_PTHREAD), but by default is not locked. + +\index{FP\_ENTRIES} +The optimization works by using a Fixed Point point multiplier on any base point you use twice or more in a short period of time. It has a limited size +cache (of FP\_ENTRIES entries) which it uses to hold recent bases passed to ltc\_ecc\_mulmod(). Any base detected to be used twice is sent through the +pre--computation phase and then the fixed point algorithm can be used. For example, if you use a NIST base point twice in a row, the 2nd and +all subsequence point multiplications with that point will use the faster algorithm. + +\index{FP\_LUT} +The optimization uses a window on the multiplicand of FP\_LUT bits (default: 8, min: 2, max: 12) and controls the memory/time tradeoff. The larger the +value the faster the algorithm will be but the more memory it will take. The memory usage is $3 \cdot 2^{FP\_LUT}$ integers which by default +with TFM amounts to about 400kB of memory. Tuning TFM (by changing FP\_SIZE) can decrease the usage by a fair amount. Memory is only used by a cache entry +if it is active. Both FP\_ENTRIES and FP\_LUT are definable on the command line if you wish to override them. For instance, + +\begin{verbatim} +CFLAGS="-DTFM_DESC -DMECC_FP -DFP_ENTRIES=8 -DFP_LUT=6" make +\end{verbatim} + +\begin{flushleft} +would define a window of 6 bits and limit the cache to 8 entries. Generally it's better to first tune TFM by adjusting FP\_SIZE (from tfm.h). It defaults +to 4096 bits (512 bytes) which is way more than what is required by ECC. At most, you need 1152 bits to accommodate ECC--521. If you're only using (say) +ECC--256 you will only need 576 bits, which would reduce the memory usage by 700\%. +\end{flushleft} + +\section{Key Format} +LibTomCrypt uses it's own format for ECC public and private keys. While ANSI X9.62 partially specifies key formats (it covers public keys) it does it in a less +than ideally simple manner. In the case of LibTomCrypt it is meant \textbf{solely} for NIST $GF(p)$ curves. The format of the keys is as follows: + +\begin{small} +\begin{verbatim} +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 +} +\end{verbatim} +\end{small} + +The first flags bit denotes whether the key is public (zero) or private (one). + +\section{Core Functions} + +\subsection{ECC Key Generation} +There is a key structure called ``ecc\_key'' used by the ECC 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 24, 28, 32, 48 and 65 bytes which +correspond to key sizes of 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. To free the ram allocated by a ecc\_make\_key() or ecc\_import() call use the following function. + +\index{ecc\_free()} +\begin{verbatim} +void ecc_free(ecc_key *key); +\end{verbatim} + +\subsection{ECC Key Export} +To export an ECC key. +\index{ecc\_export()} +\begin{verbatim} +int ecc_export(unsigned char *out, unsigned long *outlen, + int type, ecc_key *key); +\end{verbatim} +This will export the key with the given ``type'' (\textbf{PK\_PUBLIC} or \textbf{PK\_PRIVATE}) and store it to ``out''. + +\subsection{ECC Key Import} +\index{ecc\_import()} +\begin{verbatim} +int ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key); +\end{verbatim} + +This will import the ECC key from ``in'' and store it in the ecc\_key structure ``key''. If the operation fails it will free +any allocated memory automatically. + +\subsection{ECC Shared Secret} +Finally when you share your public key you can make a shared secret with the following. +\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} +The ``private\_key'' is your own key and ``public\_key'' is the key the other user sent you. Note that this function stores only the +$x$ co-ordinate of the shared elliptic point as described in ANSI X9.63 ECC--DH. + +\section{ECC Diffie-Hellman Encryption} +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()} +\begin{verbatim} +int ecc_encrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, int hash, + ecc_key *key); +\end{verbatim} + +Where ``in'' is an input symmetric key of no more than 64 bytes. This function creates a random public key +and computes the hash of the shared secret. The message digest is then 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. + +The data is encrypted to the public ECC ``key'' such that only the holder of the private key can decrypt the payload. If you want +to have multiple recipients you will have to call this function for each public ECC key you want to encrypt to. + + +\index{ecc\_decrypt\_key()} +\begin{verbatim} +int ecc_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + ecc_key *key); +\end{verbatim} + +This function will decrypt an encrypted payload. The ``key'' provided must be the private key corresponding to the public key +used during encryption. If the wrong key is provided the function won't specifically return an error code. It is important +to use some form of challenge response in that case (e.g. compute a MAC of a known string). + +\subsection{Encrypt Encryption Format} + +The packet format for the encrypted keys is the following ASN.1 SEQUENCE: + +\begin{verbatim} +ECCEncrypt ::= SEQUENCE { + hashID OBJECT IDENTIFIER, -- OID of hash used + pubkey OCTET STRING , -- Encapsulated ECCPublicKey (see above) + skey OCTET STRING -- xor of plaintext and "hash of shared secret" +} +\end{verbatim} + +\section{ECC DSA Signatures} + +There are also functions to sign and verify the hash of a message. +\index{ecc\_sign\_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); +\end{verbatim} + +This function will EC--DSA sign the message digest stored in the buffer ``in'' of length inlen octets. The signature +will be stored in the ``out'' buffer of length ``outlen''. The function requires a properly seeded PRNG and +the ECC ``key'' provided must be a private key. + +\index{ecc\_verify\_hash()} +\begin{verbatim} +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} + +This function will verify the EC-DSA signature in ``sig'' of length ``siglen'' against the message digest ``hash''. +It will store a non--zero value in ``stat'' if the signature is valid. Note that the function will not return +an error if the signature is invalid. It will if the actual signature payload is an invalid format. They ECC ``key'' +must be the public (or private) ECC key corresponding to the key that performed the signature. + +\subsection{Signature Format} +The signature code is an implementation of X9.62 EC--DSA and the output is comformant for GF(p) curves. + +\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 an ECC-192 key in effect +you have 96-bits of security. + +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 Format} +Since no useful public standard for DSA key storage was presented to me during the course of this development I made my own ASN.1 SEQUENCE which I document +now so that others can interoperate with this library. + +\begin{verbatim} +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 +} +\end{verbatim} + +The leading BIT STRING has a single bit in it which is zero for public keys and one for private keys. This makes the structure uniquely decodable and easy +to work with. + +\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} +\subsection{Signature Generation} +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. + +\subsection{Signature Verification} +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{DSA Encrypt and Decrypt} +As of version 1.07 the DSA keys can be used to encrypt and decrypt small payloads. It works similar to the ECC encryption where +a shared key is computed and the hash of the shared key xor'ed against the plaintext forms the ciphertext. + +\subsection{DSA Encryption} +This function will encrypt a small payload with a recipients public DSA key. + +\index{dsa\_encrypt\_key()} +\begin{verbatim} +int dsa_encrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, int hash, + dsa_key *key); +\end{verbatim} + +This will encrypt the payload in ``in'' of length ``inlen'' and store the ciphertext in the output buffer ``out''. The +length of the ciphertext ``outlen'' must be originally set to the length of the output buffer. The DSA ``key'' can be +a public key. + +\subsection{DSA Decryption} + +\index{dsa\_decrypt\_key()} +\begin{verbatim} +int dsa_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + dsa_key *key); +\end{verbatim} +This will decrypt the ciphertext ``in'' of length ``inlen'' and store the original payload in ``out'' of length ``outlen''. The DSA ``key'' must be a private key. + +\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{Standards Support} +\section{ASN.1 Formats} +LibTomCrypt supports a variety of ASN.1 data types encoded with the Distinguished Encoding Rules (DER) suitable for various cryptographic protocols. The data types +are all provided with three basic functions with \textit{similar} prototypes. One function has been dedicated to calculate the length in octets of a given +format and two functions have been dedicated to encoding and decoding the format. + +On top of the basic data types are the SEQUENCE and SET data types which are collections of other ASN.1 types. They are provided +in the same manner as the other data types except they use list of objects known as the \textbf{ltc\_asn1\_list} structure. It is defined as + +\index{ltc\_asn1\_list structure} +\begin{verbatim} +typedef struct { + int type; + void *data; + unsigned long size; + int used; + struct ltc_asn1_list_ *prev, *next, + *child, *parent; +} ltc_asn1_list; +\end{verbatim} + +\index{LTC\_SET\_ASN1 macro} +The ``type'' field is one of the following ASN.1 field definitions. The ``data'' pointer is a void pointer to the data to be encoded (or the destination) and the +``size'' field is specific to what you are encoding (e.g. number of bits in the BIT STRING data type). The ``used'' field is primarily for the CHOICE decoder +and reflects if the particular member of a list was the decoded data type. To help build the lists in an orderly fashion the macro +``LTC\_SET\_ASN1(list, index, Type, Data, Size)'' has been provided. + +It will assign to the ``index''th position in the ``list'' the tripplet (Type, Data, Size). An example usage would be: + +\begin{small} +\begin{verbatim} +... +ltc_asn1_list sequence[3]; +unsigned long three=3; + +LTC_SET_ASN1(sequence, 0, LTC_ASN1_IA5_STRING, "hello", 5); +LTC_SET_ASN1(sequence, 1, LTC_ASN1_SHORT_INTEGER, &three, 1); +LTC_SET_ASN1(sequence, 2, LTC_ASN1_NULL, NULL, 0); +\end{verbatim} +\end{small} + +The macro is relatively safe with respect to modifying variables, for instance the following code is equivalent. + +\begin{small} +\begin{verbatim} +... +ltc_asn1_list sequence[3]; +unsigned long three=3; +int x=0; +LTC_SET_ASN1(sequence, x++, LTC_ASN1_IA5_STRING, "hello", 5); +LTC_SET_ASN1(sequence, x++, LTC_ASN1_SHORT_INTEGER, &three, 1); +LTC_SET_ASN1(sequence, x++, LTC_ASN1_NULL, NULL, 0); +\end{verbatim} +\end{small} + +\begin{figure}[here] +\begin{center} +\begin{small} +\begin{tabular}{|l|l|} +\hline \textbf{Definition} & \textbf{ASN.1 Type} \\ +\hline LTC\_ASN1\_EOL & End of a ASN.1 list structure. \\ +\hline LTC\_ASN1\_BOOLEAN & BOOLEAN type \\ +\hline LTC\_ASN1\_INTEGER & INTEGER (uses mp\_int) \\ +\hline LTC\_ASN1\_SHORT\_INTEGER & INTEGER (32--bit using unsigned long) \\ +\hline LTC\_ASN1\_BIT\_STRING & BIT STRING (one bit per char) \\ +\hline LTC\_ASN1\_OCTET\_STRING & OCTET STRING (one octet per char) \\ +\hline LTC\_ASN1\_NULL & NULL \\ +\hline LTC\_ASN1\_OBJECT\_IDENTIFIER & OBJECT IDENTIFIER (words are in unsigned long) \\ +\hline LTC\_ASN1\_IA5\_STRING & IA5 STRING (one octet per char) \\ +\hline LTC\_ASN1\_PRINTABLE\_STRING & PRINTABLE STIRNG (one octet per char) \\ +\hline LTC\_ASN1\_UTCTIME & UTCTIME (see ltc\_utctime structure) \\ +\hline LTC\_ASN1\_SEQUENCE & SEQUENCE (and SEQUENCE OF) \\ +\hline LTC\_ASN1\_SET & SET \\ +\hline LTC\_ASN1\_SETOF & SET OF \\ +\hline LTC\_ASN1\_CHOICE & CHOICE \\ +\hline +\end{tabular} +\caption{List of ASN.1 Supported Types} +\end{small} +\end{center} +\end{figure} + +\subsection{SEQUENCE Type} +The SEQUENCE data type is a collection of other ASN.1 data types encapsulated with a small header which is a useful way of sending multiple data types in one packet. + +\subsubsection{SEUQNECE Encoding} +To encode a sequence a \textbf{ltc\_asn1\_list} array must be initialized with the members of the sequence and their respective pointers. The encoding is performed +with the following function. + +\index{der\_encode\_sequence()} +\begin{verbatim} +int der_encode_sequence(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +\end{verbatim} +This encodes a sequence of items pointed to by ``list'' where the list has ``inlen'' items in it. The SEQUENCE will be encoded to ``out'' and of length ``outlen''. The +function will terminate when it reads all the items out of the list (upto ``inlen'') or it encounters an item in the list with a type of \textbf{LTC\_ASN1\_EOL}. + +The ``data'' pointer in the list would be the same pointer you would pass to the respective ASN.1 encoder (e.g. der\_encode\_bit\_string()) and it is simply passed on +verbatim to the dependent encoder. The list can contain other SEQUENCE or SET types which enables you to have nested SEQUENCE and SET definitions. In these cases +the ``data'' pointer is simply a pointer to another \textbf{ltc\_asn1\_list}. + +\subsubsection{SEQUENCE Decoding} + +\index{der\_decode\_sequence()} + +Decoding a SEQUENCE is similar to encoding. You set up an array of \textbf{ltc\_asn1\_list} where in this case the ``size'' member is the maximum size +(in certain cases). For types such as IA5 STRING, BIT STRING, OCTET STRING (etc) the ``size'' field is updated after successful decoding to reflect how many +units of the respective type has been loaded. + +\begin{verbatim} +int der_decode_sequence(const unsigned char *in, unsigned long inlen, + ltc_asn1_list *list, unsigned long outlen); +\end{verbatim} + +This will decode upto ``outlen'' items from the input buffer ``in'' of length ``inlen'' octets. The function will stop (gracefully) when it runs out of items to decode. +It will fail (for among other reasons) when it runs out of input bytes to read, a data type is invalid or a heap failure occured. + +For the following types the ``size'' field will be updated to reflect the number of units read of the given type. +\begin{enumerate} + \item BIT STRING + \item OCTET STRING + \item OBJECT IDENTIFIER + \item IA5 STRING + \item PRINTABLE STRING +\end{enumerate} + +\subsubsection{SEQUENCE Length} + +The length of a SEQUENCE can be determined with the following function. + +\index{der\_length\_sequence()} +\begin{verbatim} +int der_length_sequence(ltc_asn1_list *list, unsigned long inlen, + unsigned long *outlen); +\end{verbatim} + +This will get the encoding size for the given ``list'' of length ``inlen'' and store it in ``outlen''. + +\subsubsection{SEQUENCE Multiple Argument Lists} + +For small or simple sequences an encoding or decoding can be performed with one of the following two functions. + +\index{der\_encode\_sequence\_multi()} +\index{der\_decode\_sequence\_multi()} + +\begin{verbatim} +int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...); +int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...); +\end{verbatim} + +These either encode or decode (respectively) a SEQUENCE data type where the items in the sequence are specified after the length parameter. + +The list of items are specified as a triple of the form ``(type, size, data)'' where ``type'' is an \textbf{int}, ``size'' is a \textbf{unsigned long} +and ``data'' is \textbf{void} pointer. The list of items must be terminated with an item with the type \textbf{LTC\_ASN1\_EOL}. + +It's ideal that you cast the ``size'' values to unsigned long to ensure that the proper data type is passed to the function. Constants such as ``1'' without +a cast or prototype are of type \textbf{int} by default. Appending \textit{UL} or prepending \textit{(unsigned long)} is enough to cast it to the correct type. + +\subsection{SET and SET OF} + +\index{SET} \index{SET OF} +SET and SET OF are related to the SEQUENCE type in that they can be pretty much be decoded with the same code. However, they are different and they should +be carefully noted. The SET type is an unordered array of ASN.1 types sorted by the TAG (type identifier) whereas the SET OF type is an ordered array of +a \textbf{single} ASN.1 object sorted in ascending order by the DER their respective encodings. + +\subsubsection{SET Encoding} + +SETs use the same array structure of ltc\_asn1\_list that the SEQUENCE functions use. They are encoded with the following function. + +\index{der\_encode\_set()} +\begin{verbatim} +int der_encode_set(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +\end{verbatim} + +This will encode the list of ASN.1 objects in ``list'' of length ``inlen'' objects and store the output in ``out'' of length ``outlen'' bytes. The function +will make a copy of the list provided and sort it by the TAG. Objects with identical TAGs are additionally sorted on their original placement in the +array (to make the process deterministic). + +This function will \textbf{NOT} recognize ``DEFAULT'' objects and it is the responsibility of the caller to remove them as required. + +\subsubsection{SET Decoding} + +The SET type can be decoded with the following function. + +\index{der\_decode\_set()} +\begin{verbatim} +int der_decode_set(const unsigned char *in, unsigned long inlen, + ltc_asn1_list *list, unsigned long outlen); +\end{verbatim} + +This will decode the SET specified by ``list'' of length ``outlen'' objects from the input buffer ``in'' of length ``inlen'' octets. + +It handles the fact that SETs are not strictly ordered and will make multiple passes (as required) through the list to decode all the objects. + +\subsubsection{SET Length} +The length of a SET can be determined by calling der\_length\_sequence() since they have the same encoding length. + +\subsubsection{SET OF Encoding} +A ``SET OF'' object is an array of identifical objects (e.g. OCTET STRING) sorted in ascending order by the DER encoding of the object. They are +used to store objects deterministically based solely on their encoding. It uses the same array structure of ltc\_asn1\_list that the SEQUENCE functions +use. They are encoded with the following function. + +\index{der\_encode\_setof()} +\begin{verbatim} +int der_encode_setof(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +\end{verbatim} + +This will encode a ``SET OF'' containing the ``list'' of ``inlen'' ASN.1 objects and store the encoding in the output buffer ``out'' of length ``outlen''. + +The routine will first encode the SET OF in an unordered fashion (in a temporary buffer) then sort using the XQSORT macro and copy back to the output buffer. This +means you need at least enough memory to keep an additional copy of the output on the heap. + +\subsubsection{SET OF Decoding} +Since the decoding of a ``SET OF'' object is unambiguous it can be decoded with der\_decode\_sequence(). + +\subsubsection{SET OF Length} +Like the SET type the der\_length\_sequence() function can be used to determine the length of a ``SET OF'' object. + +\subsection{ASN.1 INTEGER} + +To encode or decode INTEGER data types use the following functions. + +\index{der\_encode\_integer()} +\index{der\_decode\_integer()} +\index{der\_length\_integer()} +\begin{verbatim} +int der_encode_integer(mp_int *num, unsigned char *out, unsigned long *outlen); +int der_decode_integer(const unsigned char *in, unsigned long inlen, mp_int *num); +int der_length_integer(mp_int *num, unsigned long *len); +\end{verbatim} + +These will encode or decode a signed INTEGER data type using the ``mp\_int'' data type to store the large INTEGER. To encode smaller values without allocating +an mp\_int to store the value the ``short'' INTEGER functions were made available. + +\index{der\_encode\_short\_integer()} +\index{der\_decode\_short\_integer()} +\index{der\_length\_short\_integer()} +\begin{verbatim} +int der_encode_short_integer(unsigned long num, + unsigned char *out, unsigned long *outlen); + +int der_decode_short_integer(const unsigned char *in, unsigned long inlen, + unsigned long *num); + +int der_length_short_integer(unsigned long num, unsigned long *outlen); +\end{verbatim} + +These will encode or decode an unsigned \textbf{unsigned long} type (only reads upto 32--bits). For values in the range $0 \dots 2^{32} - 1$ the integer +and short integer functions can encode and decode each others outputs. + +\subsection{ASN.1 BIT STRING} + +\index{der\_encode\_bit\_string()} +\index{der\_decode\_bit\_string()} +\index{der\_length\_bit\_string()} +\begin{verbatim} +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_length_bit_string(unsigned long nbits, unsigned long *outlen); +\end{verbatim} + +These will encode or decode a BIT STRING data type. The bits are passed in (or read out) using one \textbf{char} per bit. A non--zero value will be interpretted +as a one bit and a zero value a zero bit. + +\subsection{ASN.1 OCTET STRING} + +\index{der\_encode\_octet\_string()} +\index{der\_decode\_octet\_string()} +\index{der\_length\_octet\_string()} +\begin{verbatim} +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); +\end{verbatim} + +These will encode or decode an OCTET STRING data type. The octets are stored using one \textbf{char} each. + +\subsection{ASN.1 OBJECT IDENTIFIER} + +\index{der\_encode\_object\_identifier()} +\index{der\_decode\_object\_identifier()} +\index{der\_length\_object\_identifier()} +\begin{verbatim} +int der_encode_object_identifier(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(unsigned long *words, unsigned long nwords, + unsigned long *outlen); +\end{verbatim} + +These will encode or decode an OBJECT IDENTIFIER object. The words of the OID are stored in individual \textbf{unsigned long} elements and must be in the range +$0 \ldots 2^{32} - 1$. + +\subsection{ASN.1 IA5 STRING} + +\index{der\_encode\_ia5\_string()} +\index{der\_decode\_ia5\_string()} +\index{der\_length\_ia5\_string()} +\begin{verbatim} +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); +\end{verbatim} + +These will encode or decode an IA5 STRING. The characters are read or stored in individual \textbf{char} elements. This functions performs internal character +to numerical conversions based on the conventions of the compiler being used. For instance, on an x86\_32 machine 'A' == 65 but the same may not be true on +say a SPARC machine. Internally these functions have a table of literal characters and their numerical ASCII values. This provides a stable conversion provided +that the build platform honours the runtime platforms character conventions. + +If you're worried try building the test suite and running it. It has hard coded test vectors to ensure it is operating properly. + +\subsection{ASN.1 PRINTABLE STRING} + +\index{der\_encode\_printable\_string()} +\index{der\_decode\_printable\_string()} +\index{der\_length\_printable\_string()} +\begin{verbatim} +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); +\end{verbatim} + +These will encode or decode an PRINTABLE STRING. The characters are read or stored in individual \textbf{char} elements. This functions performs internal character +to numerical conversions based on the conventions of the compiler being used. For instance, on an x86\_32 machine 'A' == 65 but the same may not be true on +say a SPARC machine. Internally these functions have a table of literal characters and their numerical ASCII values. This provides a stable conversion provided +that the build platform honours the runtime platforms character conventions. + +If you're worried try building the test suite and running it. It has hard coded test vectors to ensure it is operating properly. + +\subsection{ASN.1 UTCTIME} + +The UTCTIME type is to store a date and time in ASN.1 format. It uses the following structure to organize the time. + +\begin{verbatim} +typedef struct { + unsigned YY, /* year 00--99 */ + MM, /* month 01--12 */ + DD, /* day 01--31 */ + hh, /* hour 00--23 */ + mm, /* minute 00--59 */ + ss, /* second 00--59 */ + off_dir, /* timezone offset direction 0 == +, 1 == - */ + off_hh, /* timezone offset hours */ + off_mm; /* timezone offset minutes */ +} ltc_utctime; +\end{verbatim} + +The time can be offset plus or minus a set amount of hours (off\_hh) and minutes (off\_mm). When ``off\_dir'' is zero the time will be added otherwise it +will be subtracted. + +For instance, the array $\lbrace 5, 6, 20, 22, 4, 00, 0, 5, 0 \rbrace$ represents the current time of 2005, June 20th, 22:04:00 with a time offset of +05h00. + +\index{der\_encode\_utctime()} +\index{der\_decode\_utctime()} +\index{der\_length\_utctime()} +\begin{verbatim} +int der_encode_utctime(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(ltc_utctime *utctime, unsigned long *outlen); +\end{verbatim} + +The encoder will store time in one of the two ASN.1 formats, either ``YYMMDDhhmmssZ'' or ``YYMMDDhhmmss$\pm$hhmm'' and perform minimal error checking on the +input. The decoder will read all valid ASN.1 formats and perform range checking on the values (not complete but rational) useful for catching packet errors. + +It is suggested that decoded data be further scrutinized (e.g. days of month in particular). + +\subsection{ASN.1 CHOICE} + +The CHOICE ASN.1 type represents a union of ASN.1 types all of which are stored in a ``ltc\_asn1\_list''. There is no encoder for the CHOICE type, only a +decoder. The decoder will scan through the provided list attempting to use the appropriate decoder on the input packet. The list can contain any ASN.1 data +type\footnote{Except it cannot have LTC\_ASN1\_INTEGER and LTC\_ASN1\_SHORT\_INTEGER simultaneously.} except for other CHOICE types. + +There is no encoder for the CHOICE type as the actual DER encoding is the encoding of the chosen type. + +\index{der\_decode\_choice()} +\begin{verbatim} +int der_decode_choice(const unsigned char *in, unsigned long *inlen, + ltc_asn1_list *list, unsigned long outlen); +\end{verbatim} + +This will decode the input in the ``in'' field of length ``inlen''. It uses the provided ASN.1 list specified in the ``list'' field which has ``outlen'' elements. +The ``inlen'' field will be updated with the length of the decoded data type as well as the respective entry in the ``list'' field will have the ``used'' flag +set to non--zero to reflect it was the data type decoded. + +\subsection{ASN.1 Flexi Decoder} +The ASN.1 ``flexi'' decoder allows the developer to decode arbitrary ASN.1 DER packets (provided they use data types LibTomCrypt supports) without first knowing +the structure of the data. Where der\_decode\_sequence() requires the developer to specify the data types to decode in advance the flexi decoder is entirely +free form. + +The flexi decoder uses the same ``ltc\_asn1\_list'' but instead of being stored in an array it uses the linked list pointers ``prev'', ``next'', ``parent'' +and ``child''. The list works as a ``doubly-linked list'' structure where decoded items at the same level are sibblings (using next and prev) and items +encoded in a SEQUENCE are stored as a child element. + +When a SEQUENCE or SET has been encountered a SEQUENCE (or SET resp.) item will be added as a sibbling (e.g. list.type == LTC\_ASN1\_SEQUENCE) and the child +pointer points to a new list of items contained within the object. + +\index{der\_decode\_sequence\_flexi()} +\begin{verbatim} +int der_decode_sequence_flexi(const unsigned char *in, unsigned long *inlen, + ltc_asn1_list **out); +\end{verbatim} + +This will decode items in the ``in'' buffer of max input length ``inlen'' and store the newly created pointer to the list in ``out''. This function allocates +all required memory for the decoding. It stores the number of octets read back into ``inlen''. + +The function will terminate when either it hits an invalid ASN.1 type octet or it reads ``inlen'' octets. An early terminate is a soft error and returns +normally. The decoded list ``out'' will point to the very first element of the list (e.g. both parent and prev pointers will be \textbf{NULL}). + +An invalid decoding will terminate the process and free the allocated memory automatically. + +\textbf{Note} that the list decoded by this function is \textbf{NOT} in the correct form for der\_encode\_sequence() to use directly. You will have to first +have to convert the list by first storing all of the sibblings in an array then storing all the children as sub-lists of a sequence using the ``.data'' +pointer. Currently no function in LibTomCrypt provides this ability. + +To free the list use the following function. + +\index{der\_sequence\_free()} +\begin{verbatim} +void der_sequence_free(ltc_asn1_list *in); +\end{verbatim} + +This will free all of the memory allocated by der\_decode\_sequence\_flexi(). + +\section{Password Based Cryptography} +\subsection{PKCS \#5} +\index{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. + +\subsection{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''. + +\subsection{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{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{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 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 and Building 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. Each of the classes of functions can be disabled during +the build process to make a smaller library. This is particularly useful for shared libraries. + +As of v1.06 of the library the build process has been moved to two steps for the typical LibTomCrypt application. This is because +LibTomCrypt no longer provides a math API on its own and relies on third party libraries (such as LibTomMath or TomsFastMath). + +The build process now consists of installing a math library first then building and installing LibTomCrypt with a math library +configured. Note that LibTomCrypt can be built with no internal math descriptors. This means that one must be provided at either +build or run time for the application. LibTomCrypt comes with two math descriptors that provide a standard interface to math +libraries. One for LibTomMath and one for TomsFastMath. + +\section{Makefile variables} + +All GNU driven makefiles (including the makefile for ICC) use a set of common variables to control the build and install process. Most of the +settings can be overwritten from the command line which makes custom installation a breeze. + +\index{MAKE} +\index{CC} +\index{AR} +\subsection{MAKE, CC and AR} +The MAKE, CC and AR flags can all be overwritten. They default to ``make'', ``\$CC'' and ``\$AR'' respectively. + +Changing MAKE allows you to change what program will be invoked to handle sub--directories. E.g. + +\begin{verbatim} +MAKE=gmake gmake install +\end{verbatim} + +Will build and install the libraries with the ``gmake'' tool. Similarly + +\begin{verbatim} +CC=arm-gcc AR=arm-ar make +\end{verbatim} + +Will build the library using ``arm--gcc'' as the compiler and ``arm--ar'' as the archiver. + +\subsection{IGNORE\_SPEED} +\index{IGNORE\_SPEED} +When \textbf{IGNORE\_SPEED} has been defined the default optimization flags for CFLAGS will be disabled which allows the developer to specify new +CFLAGS on the command line. E.g. to add debugging + +\begin{verbatim} +CFLAGS="-g3" make IGNORE_SPEED=1 +\end{verbatim} + +This will turn off optimizations and add ``-g3'' to the CFLAGS which enables debugging. + +\subsection{LIBNAME and LIBNAME\_S} +\index{LIBNAME} \index{LIBNAME\_S} +\textbf{LIBNAME} is the name of the output library (archive) to create. It defaults to ``libtomcrypt.a'' for static builds and ``libtomcrypt.la'' for +shared. The \textbf{LIBNAME\_S} variable is the static name while doing shared builds. Ideally they should have the same prefix but don't have to. + +\index{LIBTEST} \index{LIBTEST\_S} +Similarly \textbf{LIBTEST} and \textbf{LIBTEST\_S} are the names for the profiling and testing library. The default is ``libtomcrypt\_prof.a'' for +static and ``libtomcrypt\_prof.la'' for shared. + +\subsection{Installation Directories} +\index{DESTDIR} \index{LIBPATH} \index{INCPATH} \index{DATADIR} +\textbf{DESTDIR} is the prefix for the installation directories. It defaults to an empty string. \textbf{LIBPATH} is the prefix for the library +directory which defaults to ``/usr/lib''. \textbf{INCPATH} is the prefix for the header file directory which defaults to ``/usr/include''. +\textbf{DATADIR} is the prefix for the data (documentation) directory which defaults to ``/usr/share/doc/libtomcrypt/pdf''. + +All four can be used to create custom install locations depending on the nature of the OS and file system in use. + +\begin{verbatim} +make LIBPATH=/home/tom/project/lib INCPATH=/home/tom/project/include \ + DATAPATH=/home/tom/project/docs install +\end{verbatim} + +This will build the library and install it to the directories under ``/home/tom/project/''. e.g. + +\begin{small} +\begin{verbatim} +/home/tom/project/: +total 1 +drwxr-xr-x 2 tom users 80 Jul 30 16:02 docs +drwxr-xr-x 2 tom users 528 Jul 30 16:02 include +drwxr-xr-x 2 tom users 80 Jul 30 16:02 lib + +/home/tom/project/docs: +total 452 +-rwxr-xr-x 1 tom users 459009 Jul 30 16:02 crypt.pdf + +/home/tom/project/include: +total 132 +-rwxr-xr-x 1 tom users 2482 Jul 30 16:02 tomcrypt.h +-rwxr-xr-x 1 tom users 702 Jul 30 16:02 tomcrypt_argchk.h +-rwxr-xr-x 1 tom users 2945 Jul 30 16:02 tomcrypt_cfg.h +-rwxr-xr-x 1 tom users 22763 Jul 30 16:02 tomcrypt_cipher.h +-rwxr-xr-x 1 tom users 5174 Jul 30 16:02 tomcrypt_custom.h +-rwxr-xr-x 1 tom users 11314 Jul 30 16:02 tomcrypt_hash.h +-rwxr-xr-x 1 tom users 11571 Jul 30 16:02 tomcrypt_mac.h +-rwxr-xr-x 1 tom users 13614 Jul 30 16:02 tomcrypt_macros.h +-rwxr-xr-x 1 tom users 14714 Jul 30 16:02 tomcrypt_math.h +-rwxr-xr-x 1 tom users 632 Jul 30 16:02 tomcrypt_misc.h +-rwxr-xr-x 1 tom users 10934 Jul 30 16:02 tomcrypt_pk.h +-rwxr-xr-x 1 tom users 2634 Jul 30 16:02 tomcrypt_pkcs.h +-rwxr-xr-x 1 tom users 7067 Jul 30 16:02 tomcrypt_prng.h +-rwxr-xr-x 1 tom users 1467 Jul 30 16:02 tomcrypt_test.h + +/home/tom/project/lib: +total 1073 +-rwxr-xr-x 1 tom users 1096284 Jul 30 16:02 libtomcrypt.a +\end{verbatim} +\end{small} + +\section{Extra libraries} +\index{EXTRALIBS} +\textbf{EXTRALIBS} specifies any extra libraries required to link the test programs and shared libraries. They are specified in the notation +that GCC expects for global archives. + +\begin{verbatim} +CFLAGS="-DTFM_DESC -DUSE_TFM" EXTRALIBS=-ltfm make install test timing +\end{verbatim} + +This will install the library using the TomsFastMath library and link the ``libtfm.a'' library out of the default library search path. The two +defines are explained below. You can specify multiple archives (say if you want to support two math libraries, or add on additional code) to +the \textbf{EXTRALIBS} variable by separating them by a space. + +Note that \textbf{EXTRALIBS} is not required if you are only making and installing the static library but none of the test programs. + +\section{Building a Static Library} + +Building a static library is fairly trivial as it only requires one invocation of the GNU make command. + +\begin{verbatim} +CFLAGS="-DTFM_DESC" make install +\end{verbatim} + +That will build LibTomCrypt (including the TomsFastMath descriptor) and install it in the default locations indicated previously. You can enable +the built--in LibTomMath descriptor as well (or in place of the TomsFastMath descriptor). Similarly you can build the library with no built--in +math descriptors. + +\begin{verbatim} +make install +\end{verbatim} + +In this case no math descriptors are present in the library and they will have to be made available at build or run time before you can use any of the +public key functions. + +Note that even if you include the built--in descriptors you must link against the source library as well. + +\begin{verbatim} +gcc -DTFM_DESC myprogram.c -ltomcrypt -ltfm -o myprogram +\end{verbatim} + +This will compile ``myprogram'' and link it against the LibTomCrypt library as well as TomsFastMath (which must have been previously installed). Note that +we define \textbf{TFM\_DESC} for compilation. This is so that the TFM descriptor symbol will be defined for the client application to make use of without +giving warnings. + +\section{Building a Shared Library} + +LibTomCrypt can also be built as a shared library through the ``makefile.shared'' make script. It is similar to use as the static script except +that you \textbf{must} specify the \textbf{EXTRALIBS} variable at install time. + +\begin{verbatim} +CFLAGS="-DTFM_DESC" EXTRALIBS=-ltfm make -f makefile.shared install +\end{verbatim} + +This will build and install the library and link the shared object against the TomsFastMath library (which must be installed as a shared object as well). The +shared build process requires libtool to be installed. + +\section{tomcrypt\_cfg.h} +The file ``tomcrypt\_cfg.h'' is what lets you control various high level macros which control the behaviour +of the library. + +\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 the macro will display the error to +stderr then return execution to the caller. This could lead to a segmentation fault (e.g. when a pointer is \textbf{NULL}) but is useful +if you handle signals on your own. When set to 3 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, \textbf{ENDIAN\_LITTLE}. For big endian +platforms define \textbf{ENDIAN\_BIG}. Similarly when the default word size of an ``unsigned long'' is 32-bits define \textbf{ENDIAN\_32BITWORD} +or define \textbf{ENDIAN\_64BITWORD} when its 64-bits. If you do not define any of them the library will automatically use \textbf{ENDIAN\_NEUTRAL} +which will work on all platforms. + +Currently LibTomCrypt will detect x86-32, x86-64, MIPS R5900, SPARC and SPARC64 running GCC as well as x86-32 running MSVC. + +\section{The Configure Script} +There are also options you can specify from the configure script or ``tomcrypt\_custom.h''. + +\subsection{X memory routines} +At the top of tomcrypt\_custom.h are four macros denoted as XMALLOC, XCALLOC, XREALLOC 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. + +\subsection{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. + +\subsection{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\_NOP. This should help resolve any linker errors stemming from a lack of +file I/O on embedded platforms. + +\subsection{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. + +\subsection{LTC\_TEST} +When this has been defined the various self--test functions (for ciphers, hashes, prngs, etc) are included in the build. +When this has been undefined the tests are removed and if called will return CRYPT\_NOP. + +\subsection{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. + +Also see technical note number five for more details. + +\subsection{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. + +\subsection{GCM\_TABLES} +When defined GCM will use a 64KB table (per GCM state) which will greatly speed up the per--packet latency. +It also increases the initialization time and isn't suitable when you are going to use a key a few times only. + +\subsection{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. + +\subsection{LTC\_FAST} +This mode (autodetected with x86\_32,x86\_64 platforms with GCC or MSVC) configures various routines such as ctr\_encrypt() or +cbc\_encrypt() that it can safely XOR multiple octets in one step by using a larger data type. This has the benefit of +cutting down the overhead of the respective functions. + +This mode does have one downside. It can cause unaligned reads from memory if you are not careful with the functions. This is why +it has been enabled by default only for the x86 class of processors where unaligned accesses are allowed. Technically LTC\_FAST +is not ``portable'' since unaligned accesses are not covered by the ISO C specifications. + +In practice however, you can use it on pretty much any platform (even MIPS) with care. + +By design the ``fast'' mode functions won't get unaligned on their own. For instance, if you call ctr\_encrypt() right after calling +ctr\_start() and all the inputs you gave are aligned than ctr\_encrypt() will perform aligned memory operations only. However, if you +call ctr\_encrypt() with an odd amount of plaintext then call it again the CTR pad (the IV) will be partially used. This will +cause the ctr routine to first use up the remaining pad bytes. Then if there are enough plaintext bytes left it will use +whole word XOR operations. These operations will be unaligned. + +The simplest precaution is to make sure you process all data in power of two blocks and handle ``remainder'' at the end. e.g. If you are +CTR'ing a long stream process it in blocks of (say) four kilobytes and handle any remaining incomplete blocks at the end of the stream. + +If you do plan on using the ``LTC\_FAST'' mode you have to also define a ``LTC\_FAST\_TYPE'' macro which resolves to an optimal sized +data type you can perform integer operations with. Ideally it should be four or eight bytes since it must properly divide the size +of your block cipher (e.g. 16 bytes for AES). This means sadly if you're on a platform with 57--bit words (or something) you can't +use this mode. So sad. + +\subsection{LTC\_PTHREAD} +When this is activated all of the descriptor table functions will use pthread locking to ensure thread safe updates to the tables. Note that +it doesn't prevent a thread that is passively using a table from being messed up by another thread that updates the table. + +Generally the rule of thumb is to setup the tables once at startup and then leave them be. This added build flag simply makes updating +the tables safer. + +\subsection{LTC\_ECC\_TIMING\_RESISTANT} +When this has been defined the ECC point multiplier (built--in to the library) will use a timing resistant point multipication +algorithm which prevents leaking key bits of the private key (scalar). It is a slower algorithm but useful for situations +where timing side channels pose a significant threat. + +\subsection{Math Descriptors} +The library comes with two math descriptors that allow you to interface the public key cryptography api to freely available math +libraries. In this case LibTomMath and TomsFastMath. When either of \textbf{LTM\_DESC} or \textbf{TFM\_DESC} are defined +descriptors for the respective library are built and included in the library as ``ltm\_desc'' or ``tfm\_desc'' respectively. + +In the test demos that use the libraries the additional flags \textbf{USE\_LTM} and \textbf{USE\_TFM} can be defined +to tell the program which library to use. They cannot both be defined at once. + +\index{LTM\_DESC} \index{TFM\_DESC} \index{USE\_LTM} \index{USE\_TFM} +\begin{small} +\begin{verbatim} +CFLAGS="-DLTM_DESC -DTFM_DESC -DUSE_TFM" EXTRALIBS="-ltommath -ltfm" + make -f makefile.shared install timing +\end{verbatim} +\end{small} + +That will build and install the library with both descriptors (and link against both) but then only use TomsFastMath in the timing demo. + +\chapter{Optimizations} +\section{Introduction} +The entire API was designed with plug and play in mind at the low level. That is you can swap out any cipher, hash or PRNG and dependent API will not require +updating. This has the nice benefit that I can add ciphers not have to re--write large portions of the API. For the most part LibTomCrypt has also been written +to be highly portable and easy to build out of the box on pretty much any platform. As such there are no assembler inlines throughout the code, I make no assumptions +about the platform, etc... + +That works well for most cases but there are times where time is of the essence. This API also allows optimized routines to be dropped in--place of the existing +portable routines. For instance, hand optimized assembler versions of AES could be provided and any existing function that uses the cipher could automatically use +the optimized code without re--writing. This also paves the way for hardware drivers that can access hardware accelerated cryptographic devices. + +At the heart of this flexibility is the ``descriptor'' system. A descriptor is essentially just a C ``struct'' which describes the algorithm and provides pointers +to functions that do the work. For a given class of operation (e.g. cipher, hash, prng) the functions have identical prototypes which makes development simple. In most +dependent routines all a developer has to do is register\_XXX() the descriptor and they're set. + +\section{Ciphers} +The ciphers in LibTomCrypt are accessed through the ltc\_cipher\_descriptor structure. + +\begin{small} +\begin{verbatim} +struct ltc_cipher_descriptor { + /** name of cipher */ + 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, 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, 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, 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, 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, + 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, + 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, 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, 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, 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, + 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 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 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); +}; +\end{verbatim} +\end{small} + +\subsection{Name} +\index{find\_cipher()} +The ``name'' parameter specifies the name of the cipher. This is what a developer would pass to find\_cipher() to find the cipher in the descriptor +tables. + +\subsection{Internal ID} +This is a single byte Internal ID you can use to distingish ciphers from each other. + +\subsection{Key Lengths} +The minimum key length is ``min\_key\_length'' and is measured in octets. Similarly the maximum key length is ``max\_key\_length''. They can be equal +and both must valid key sizes for the cipher. Values in between are not assumed to be valid though they may be. + +\subsection{Block Length} +The size of the ciphers plaintext or ciphertext is ``block\_length'' and is measured in octets. + +\subsection{Rounds} +Some ciphers allow different number of rounds to be used. Usually you just use the default. The default round count is ``default\_rounds''. + +\subsection{Setup} +To initialize a cipher (for ECB mode) the function setup() was provided. It accepts an array of key octets ``key'' of length ``keylen'' octets. The user +can specify the number of rounds they want through ``num\_rounds'' where $num\_rounds = 0$ means use the default. The destination of a scheduled key is stored +in ``skey''. + +Inside the ``symmetric\_key'' union there is a ``void *data'' which you can use to allocate data if you need a data structure that doesn't fit with the existing +ones provided. Just make sure in your ``done()'' function that you free the allocated memory. + +\subsection{Single block ECB} +To process a single block in ECB mode the ecb\_encrypt() and ecb\_decrypt() functions were provided. The plaintext and ciphertext buffers are allowed to overlap so you +must make sure you do not overwrite the output before you are finished with the input. + +\subsection{Testing} +The test() function is used to self--test the ``device''. It takes no arguments and returns \textbf{CRYPT\_OK} if all is working properly. + +\subsection{Key Sizing} +Occasionally a function will want to find a suitable key size to use since the input is oddly sized. The keysize() function is for this case. It accepts a +pointer to an integer which represents the desired size. The function then has to match it to the exact or a lower key size that is valid for the cipher. For +example, if the input is $25$ and $24$ is valid then it stores $24$ back in the pointed to integer. It must not round up and must return an error if the keysize + cannot be mapped to a valid key size for the cipher. + +\subsection{Acceleration} +The next set of functions cover the accelerated functionality of the cipher descriptor. Any combination of these functions may be set to \textbf{NULL} to indicate +it is not supported. In those cases the software fallbacks are used (using the single ECB block routines). + +\subsubsection{Accelerated ECB} +These two functions are meant for cases where a user wants to encrypt (in ECB mode no less) an array of blocks. These functions are accessed +through the accel\_ecb\_encrypt and accel\_ecb\_decrypt pointers. The ``blocks'' count is the number of complete blocks to process. + +\subsubsection{Accelerated CBC} +These two functions are meant for accelerated CBC encryption. These functions are accessed through the accel\_cbc\_encrypt and accel\_cbc\_decrypt pointers. +The ``blocks'' value is the number of complete blocks to process. The ``IV'' is the CBC initial vector. It is an input upon calling this function and must be +updated by the function before returning. + +\subsubsection{Accelerated CTR} +This function is meant for accelerated CTR encryption. It is accessible through the accel\_ctr\_encrypt pointer. +The ``blocks'' value is the number of complete blocks to process. The ``IV'' is the CTR counter vector. It is an input upon calling this function and must be +updated by the function before returning. The ``mode'' value indicates whether the counter is big (mode = CTR\_COUNTER\_BIG\_ENDIAN) or +little (mode = CTR\_COUNTER\_LITTLE\_ENDIAN) endian. + +This function (and the way it's called) differs from the other two since ctr\_encrypt() allows any size input plaintext. The accelerator will only be +called if the following conditions are met. + +\begin{enumerate} + \item The accelerator is present + \item The CTR pad is empty + \item The remaining length of the input to process is greater than or equal to the block size. +\end{enumerate} + +The ``CTR pad'' is empty when a multiple (including zero) blocks of text have been processed. That is, if you pass in seven bytes to AES--CTR mode you would have to +pass in a minimum of nine extra bytes before the accelerator could be called. The CTR accelerator must increment the counter (and store it back into the +buffer provided) before encrypting it to create the pad. + +The accelerator will only be used to encrypt whole blocks. Partial blocks are always handled in software. + +\subsubsection{Accelerated LRW} +These functions are meant for accelerated LRW. They process blocks of input in lengths of multiples of 16 octets. They must accept the ``IV'' and ``tweak'' +state variables and updated them prior to returning. Note that you may want to disable \textbf{LRW\_TABLES} in ``tomcrypt\_custom.h'' if you intend +to use accelerators for LRW. + +While both encrypt and decrypt accelerators are not required it is suggested as it makes lrw\_setiv() more efficient. + +Note that calling lrw\_done() will only invoke the cipher\_descriptor[].done() function on the ``symmetric\_key'' parameter of the LRW state. That means +if your device requires any (LRW specific) resources you should free them in your ciphers() done function. The simplest way to think of it is to write +the plugin solely to do LRW with the cipher. That way cipher\_descriptor[].setup() means to init LRW resources and cipher\_descriptor[].done() means to +free them. + +\subsubsection{Accelerated CCM} +This function is meant for accelerated CCM encryption or decryption. It processes the entire packet in one call. You can optimize the work flow somewhat +by allowing the caller to call the setup() function first to schedule the key if your accelerator cannot do the key schedule on the fly (for instance). This +function MUST support both key passing methods. + +\begin{center} +\begin{small} +\begin{tabular}{|r|r|l|} +\hline \textbf{key} & \textbf{uskey} & \textbf{Source of key} \\ +\hline NULL & NULL & Error, not supported \\ +\hline non-NULL & NULL & Use key, do a key schedule \\ +\hline NULL & non-NULL & Use uskey, key schedule not required \\ +\hline non-NULL & non-NULL & Use uskey, key schedule not required \\ +\hline +\end{tabular} +\end{small} +\end{center} + +\subsubsection{Accelerated GCM} +This function is meant for accelerated GCM encryption or decryption. It processes the entire packet in one call. Note that the setup() function will not +be called prior to this. This function must handle scheduling the key provided on its own. + +\section{One--Way Hashes} +The hash functions are accessed through the ltc\_hash\_descriptor structure. + +\begin{small} +\begin{verbatim} +struct ltc_hash_descriptor { + /** name of hash */ + 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); +}; +\end{verbatim} +\end{small} + +\subsection{Name} +This is the name the hash is known by and what find\_hash() will look for. + +\subsection{Internal ID} +This is the internal ID byte used to distinguish the hash from other hashes. + +\subsection{Digest Size} +The ``hashsize'' variable indicates the length of the output in octets. + +\subsection{Block Size} +The `blocksize'' variable indicates the length of input (in octets) that the hash processes in a given +invokation. + +\subsection{OID Identifier} +This is the universal ASN.1 Object Identifier for the hash. + +\subsection{Initialization} +The init function initializes the hash and prepares it to process message bytes. + +\subsection{Process} +This processes message bytes. The algorithm must accept any length of input that the hash would allow. The input is not +guaranteed to be a multiple of the block size in length. + +\subsection{Done} +The done function terminates the hash and returns the message digest. + +\subsection{Acceleration} +A compatible accelerator must allow processing data in any granularity which may require internal padding on the driver side. + +\subsection{HMAC Acceleration} +The hmac\_block() callback is meant for single--shot optimized HMAC implementations. It is called directly by hmac\_memory() if present. If you need +to be able to process multiple blocks per MAC then you will have to simply provide a process() callback and use hmac\_memory() as provided in LibTomCrypt. + +\section{Pseudo--Random Number Generators} +The pseudo--random number generators are accessible through the ltc\_prng\_descriptor structure. + +\begin{small} +\begin{verbatim} +struct ltc_prng_descriptor { + /** Name of the PRNG */ + 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); +}; +\end{verbatim} +\end{small} + +\subsection{Name} +The name by which find\_prng() will find the PRNG. + +\subsection{Export Size} +When an PRNG state is to be exported for future use you specify the space required in this variable. + +\subsection{Start} +Initialize the PRNG and make it ready to accept entropy. + +\subsection{Entropy Addition} +Add entropy to the PRNG state. The exact behaviour of this function depends on the particulars of the PRNG. + +\subsection{Ready} +This function makes the PRNG ready to read from by processing the entropy added. The behaviour of this function depends +on the specific PRNG used. + +\subsection{Read} +Read from the PRNG and return the number of bytes read. This function does not have to fill the buffer but it is best +if it does as many protocols do not retry reads and will fail on the first try. + +\subsection{Done} +Terminate a PRNG state. The behaviour of this function depends on the particular PRNG used. + +\subsection{Exporting and Importing} +An exported PRNG state is data that the PRNG can later import to resume activity. They're not meant to resume ``the same session'' +but should at least maintain the same level of state entropy. + +\section{BigNum Math Descriptors} +The library also makes use of the math descriptors to access math functions. While bignum math libraries usually differ in implementation +it hasn't proven hard to write ``glue'' to use math libraries so far. The basic descriptor looks like. + +\begin{small} +\begin{verbatim} +/** math descriptor */ +typedef struct { + /** Name of the math provider */ + 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, void *src); + + /** deinit + @param a The number to free + @return CRYPT_OK on success + */ + void (*deinit)(void *a); + +/* ---- data movement ---- */ + + /** copy + @param src The number to copy from + @param dst The number to write to + @return CRYPT_OK on success + */ + int (*copy)(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 succcess + */ + int (*set_int)(void *a, unsigned long n); + + /** get small constant + @param a Number to read, only fetches upto bits_per_digit from the number + @return The lower bits_per_digit of the integer (unsigned) + */ + unsigned long (*get_int)(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 + */ + unsigned long (*get_digit)(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)(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)(void *a, 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)(void *a, unsigned long 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)(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)(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)(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 + */ + unsigned long (*unsigned_size)(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)(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, 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)(void *a, 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)(void *a, unsigned long 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)(void *a, 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)(void *a, unsigned long 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)(void *a, 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)(void *a, unsigned long b, void *c); + + /** Square an integer + @param a The integer to square + @param b The destination + @return CRYPT_OK on success + */ + int (*sqr)(void *a, void *b); + + /** 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 (*div)(void *a, 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)(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)(void *a, unsigned long b, unsigned long *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)(void *a, 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)(void *a, 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)(void *a, void *b, 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)(void *a, 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)(void *, void *, void *); + +/* ---- reduction ---- */ + + /** setup montgomery + @param a The modulus + @param b The destination for the reduction digit + @return CRYPT_OK on success + */ + int (*montgomery_setup)(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, 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, 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)(void *a, void *b, void *c, void *d); + + /** Primality testing + @param a The integer to test + @param b The destination of the result (FP_YES if prime) + @return CRYPT_OK on success + */ + int (*isprime)(void *a, int *b); + +/* ---- (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 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)(void *k, ecc_point *G, ecc_point *R, 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 modulus The modulus + @param mp The "b" value from montgomery_setup() + @return CRYPT_OK on success + */ + int (*ecc_ptadd)(ecc_point *P, ecc_point *Q, ecc_point *R, void *modulus, void *mp); + + /** ECC GF(p) point double + @param P The first point + @param R The destination of 2P + @param modulus The modulus + @param mp The "b" value from montgomery_setup() + @return CRYPT_OK on success + */ + int (*ecc_ptdbl)(ecc_point *P, ecc_point *R, 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, void *modulus, void *mp); + +/* ---- (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 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_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, + rsa_key *key); +} ltc_math_descriptor; +\end{verbatim} +\end{small} + +Most of the functions are fairly straightfoward and do not need documentation. We'll cover the basic conventions of the API and then explain the accelerated functions. + +\subsection{Conventions} + +All ``bignums'' are accessed through an opaque ``void *'' data type. You must interally cast the pointer if you need to access members of your bignum structure. During +the init calls a ``void **'' will be passed where you allocate your structure and set the pointer then initialize the number to zero. During the deinit calls you must +free the bignum as well as the structure you allocated to place it in. + +All functions except the Montgomery reductions work from left to right with the arguments. For example, mul(a, b, c) computes $c \leftarrow ab$. + +All functions (except where noted otherwise) return \textbf{CRYPT\_OK} to signify a successful operation. All error codes must be valid LibTomCrypt error codes. + +The digit routines (including functions with the ``i'' suffix) use a ``unsigned long'' to represent the digit. If your internal digit is larger than this you must +then partition your digits. Normally this does not matter as ``unsigned long'' will be the same size as your register size. Note that if your digit is smaller +than an ``unsigned long'' that is also acceptable as the ``bits\_per\_digit'' parameter will specify this. + +\subsection{ECC Functions} +The ECC system in LibTomCrypt is based off of the NIST recommended curves over $GF(p)$ and is used to implement EC-DSA and EC-DH. The ECC functions work with +the \textbf{ecc\_point} structure and assume the points are stored in Jacobian projective format. + +\begin{verbatim} +/** 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; +\end{verbatim} + +All ECC functions must use this mapping system. The only exception is when you remap all three ECC callbacks which will allow you to have more control +over how the ECC math will be implemented. Out of the box you only have three parameters per point to use $(x, y, z)$ however, these are just void pointers. They +could point to anything you want. The only further exception is the ecc\_export() function which expects the values to be in affine format. + +\subsubsection{Point Multiply} +This will multiply the point $G$ by the scalar $k$ and store the result in the point $R$. The value should be mapped to affine only if $map$ is set to one. + +\subsubsection{Point Addition} +This will add the point $P$ to the point $Q$ and store it in the point $R$. The $mp$ parameter is the ``b'' value from the montgomery\_setup() call. The input points +may be in either affine (with $z = 1$) or projective format and the output point is always projective. + +\subsubsection{Point Mapping} +This will map the point $P$ back from projective to affine. The output point $P$ must be of the form $(x, y, 1)$. + +\subsection{RSA Functions} +The RSA Modular Exponentiation (ME) function is used by the RSA API to perform exponentiations for private and public key operations. In particular for +private key operations it uses the CRT approach to lower the time required. It is passed an RSA key with the following format. + +\begin{verbatim} +/** RSA PKCS style 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; +} rsa_key; +\end{verbatim} + +The call reads the ``in'' buffer as an unsigned char array in big endian format. Then it performs the exponentiation and stores the output in big endian format +to the ``out'' buffer. The output must be zero padded (leading bytes) so that the length of the output matches the length of the modulus (in bytes). For example, +for RSA--1024 the output is always 128 bytes regardless of how small the numerical value of the exponentiation is. + +Since the function is given the entire RSA key (for private keys only) CRT is possible as prescribed in the PKCS \#1 v2.1 specification. + +\input{crypt.ind} + +\end{document} + +% $Source: /cvs/libtom/libtomcrypt/crypt.tex,v $ +% $Revision: 1.74 $ +% $Date: 2006/06/18 01:35:41 $ 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..80ec5dc2 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 */ @@ -12,32 +9,90 @@ #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 +#ifdef KHAZAD + register_cipher (&khazad_desc); +#endif +#ifdef ANUBIS + register_cipher (&anubis_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 +103,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 +121,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 +131,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 +144,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_COUNTER_LITTLE_ENDIAN,&ctr)) != CRYPT_OK) { + printf("ctr_start error: %s\n",error_to_string(errno)); exit(-1); } @@ -149,8 +179,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 +194,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 +206,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_COUNTER_LITTLE_ENDIAN,&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,9 +229,13 @@ 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); } return 0; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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..4e9b0fb5 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,113 @@ * more functions ;) */ -#define _POSIX_C_SOURCE 200809L /* otherwise PATH_MAX + strdup are not defined for build with -std=c99 */ #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 (%d)\n", hash_descriptor[x].name, hash_descriptor[x].ID); } - 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) +{ + int err; + +#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 +#ifdef CHC_HASH + register_hash(&chc_desc); + if ((err = chc_register(register_cipher(&aes_enc_desc))) != CRYPT_OK) { + printf("chc_register error: %s\n", error_to_string(err)); + exit(EXIT_FAILURE); + } +#endif + +} + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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/multi.c b/demos/multi.c new file mode 100644 index 00000000..424a1903 --- /dev/null +++ b/demos/multi.c @@ -0,0 +1,110 @@ +/* test the multi helpers... */ +#include + +int main(void) +{ + unsigned char key[16], buf[2][MAXBLOCKSIZE]; + unsigned long len, len2; + + +/* register algos */ + register_hash(&sha256_desc); + register_cipher(&aes_desc); + +/* HASH testing */ + 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, NULL); + if (len != len2 || memcmp(buf[0], buf[1], len)) { + printf("Failed: %d %lu %lu\n", __LINE__, len, len2); + return EXIT_FAILURE; + } + len2 = sizeof(buf[0]); + hash_memory_multi(find_hash("sha256"), buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, NULL, 0); + if (len != len2 || memcmp(buf[0], buf[1], len)) { + printf("Failed: %d %lu %lu\n", __LINE__, len, len2); + return EXIT_FAILURE; + } + 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, NULL); + if (len != len2 || memcmp(buf[0], buf[1], len)) { + printf("Failed: %d %lu %lu\n", __LINE__, len, len2); + return EXIT_FAILURE; + } + +/* 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, NULL); + if (len != len2 || memcmp(buf[0], buf[1], len)) { + printf("Failed: %d %lu %lu\n", __LINE__, len, len2); + return EXIT_FAILURE; + } + len2 = sizeof(buf[0]); + hmac_memory_multi(find_hash("sha256"), key, 16, buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, NULL); + if (len != len2 || memcmp(buf[0], buf[1], len)) { + printf("Failed: %d %lu %lu\n", __LINE__, len, len2); + return EXIT_FAILURE; + } + 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, NULL); + if (len != len2 || memcmp(buf[0], buf[1], len)) { + printf("Failed: %d %lu %lu\n", __LINE__, len, len2); + return EXIT_FAILURE; + } + +/* 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, NULL); + if (len != len2 || memcmp(buf[0], buf[1], len)) { + printf("Failed: %d %lu %lu\n", __LINE__, len, len2); + return EXIT_FAILURE; + } + len2 = sizeof(buf[0]); + omac_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, NULL); + if (len != len2 || memcmp(buf[0], buf[1], len)) { + printf("Failed: %d %lu %lu\n", __LINE__, len, len2); + return EXIT_FAILURE; + } + 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, NULL); + if (len != len2 || memcmp(buf[0], buf[1], len)) { + printf("Failed: %d %lu %lu\n", __LINE__, len, len2); + return EXIT_FAILURE; + } + +/* 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, NULL); + if (len != len2 || memcmp(buf[0], buf[1], len)) { + printf("Failed: %d %lu %lu\n", __LINE__, len, len2); + return EXIT_FAILURE; + } + len2 = sizeof(buf[0]); + pmac_memory_multi(find_cipher("aes"), key, 16, buf[1], &len2, (unsigned char*)"he", 2UL, "llo", 3UL, NULL); + if (len != len2 || memcmp(buf[0], buf[1], len)) { + printf("Failed: %d %lu %lu\n", __LINE__, len, len2); + return EXIT_FAILURE; + } + 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, NULL); + if (len != len2 || memcmp(buf[0], buf[1], len)) { + printf("Failed: %d %lu %lu\n", __LINE__, len, len2); + return EXIT_FAILURE; + } + + + printf("All passed\n"); + return EXIT_SUCCESS; +} + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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..8d438210 100644 --- a/demos/small.c +++ b/demos/small.c @@ -1,16 +1,14 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ /* 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; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/demos/test.c b/demos/test.c new file mode 100644 index 00000000..54de8901 --- /dev/null +++ b/demos/test.c @@ -0,0 +1,36 @@ +#include + +int main(void) +{ + int x; + reg_algs(); + +#ifdef USE_LTM + ltc_mp = ltm_desc; +#elif defined(USE_TFM) + ltc_mp = tfm_desc; +#elif defined(USE_GMP) + ltc_mp = gmp_desc; +#else + extern ltc_math_descriptor EXT_MATH_LIB; + ltc_mp = EXT_MATH_LIB; +#endif + + printf("build == \n%s\n", crypt_build_settings); + printf("\nstore_test...."); fflush(stdout); x = store_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\ncipher_test..."); fflush(stdout); x = cipher_hash_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\nmodes_test...."); fflush(stdout); x = modes_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\nder_test......"); fflush(stdout); x = der_tests(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\nmac_test......"); fflush(stdout); x = mac_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\npkcs_1_test..."); fflush(stdout); x = pkcs_1_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\nrsa_test......"); fflush(stdout); x = rsa_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\necc_test......"); fflush(stdout); x = ecc_tests(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\ndsa_test......"); fflush(stdout); x = dsa_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\nkatja_test...."); fflush(stdout); x = katja_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\n"); + return EXIT_SUCCESS; +} + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/demos/timing.c b/demos/timing.c index d92cae95..fc76842e 100644 --- a/demos/timing.c +++ b/demos/timing.c @@ -1,1652 +1,48 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" +#include -#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) +int main(void) { - 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(); +reg_algs(); #ifdef USE_LTM - mpi_provider = "ltm"; + ltc_mp = ltm_desc; #elif defined(USE_TFM) - mpi_provider = "tfm"; + ltc_mp = tfm_desc; #elif defined(USE_GMP) - mpi_provider = "gmp"; -#elif defined(EXT_MATH_LIB) - mpi_provider = "ext"; + ltc_mp = gmp_desc; +#else + extern ltc_math_descriptor EXT_MATH_LIB; + ltc_mp = EXT_MATH_LIB; +#endif +time_cipher(); +time_hash(); +time_encmacs(); +time_rsa(); +time_ecc(); +time_ecc(); +return 0; +time_keysched(); +time_cipher(); +time_cipher2(); +time_cipher3(); +time_cipher4(); +time_hash(); +time_macs(); +time_encmacs(); +time_prng(); +time_mult(); +time_sqr(); +time_rsa(); +time_ecc(); +#ifdef USE_LTM +time_katja(); #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; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/demos/tv_gen.c b/demos/tv_gen.c index 5eba374a..4d4db068 100644 --- a/demos/tv_gen.c +++ b/demos/tv_gen.c @@ -1,24 +1,129 @@ -/* 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) +{ + int err; -static void hash_gen(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 ANUBIS + register_cipher (&anubis_desc); +#endif +#ifdef KHAZAD + register_cipher (&khazad_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 +#ifdef CHC_HASH + register_hash(&chc_desc); + if ((err = chc_register(register_cipher(&aes_desc))) != CRYPT_OK) { + printf("chc_register error: %s\n", error_to_string(err)); + exit(EXIT_FAILURE); + } +#endif + +#ifdef USE_LTM + ltc_mp = ltm_desc; +#elif defined(USE_TFM) + ltc_mp = tfm_desc; +#elif defined(USE_GMP) + ltc_mp = gmp_desc; +#else + extern ltc_math_descriptor EXT_MATH_LIB; + ltc_mp = EXT_MATH_LIB; +#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); @@ -48,23 +153,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 +182,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 +199,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,25 +226,25 @@ 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; 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); @@ -150,7 +255,7 @@ static void hmac_gen(void) 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 +279,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 +304,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 +334,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 +359,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 +389,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 +418,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 +430,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,32 +449,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); + fprintf(out, "OCB-%s (%d byte key)\n", cipher_descriptor[x].name, kl); /* the key */ for (z = 0; z < kl; z++) { @@ -394,22 +480,17 @@ static void ocb3_gen(void) } /* fixed nonce */ - noncelen = MIN(15, cipher_descriptor[x].block_length); - for (z = 0; z < noncelen; z++) { + for (z = 0; z < cipher_descriptor[x].block_length; 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"); + len = sizeof(tag); + 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); @@ -431,20 +512,17 @@ static void ocb3_gen(void) } fclose(out); } -#endif -#ifdef LTC_CCM_MODE -static void ccm_gen(void) + +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 char key[MAXBLOCKSIZE], nonce[MAXBLOCKSIZE*2], + plaintext[MAXBLOCKSIZE*2], tag[MAXBLOCKSIZE]; unsigned long len; - const unsigned int taglen[] = {4, 6, 8, 10, 12, 14, 16}; - OPEN_FILE("ccm_tv.txt", out); + out = fopen("ccm_tv.txt", "w"); 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"); @@ -469,83 +547,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 = 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); } fprintf(out, "%3d: ", y1); @@ -567,20 +576,75 @@ static void gcm_gen(void) } fclose(out); } -#endif -static void base64_gen(void) +void gcm_gen(void) +{ + int err, kl, x, y1, z; + FILE *out; + unsigned char key[MAXBLOCKSIZE], plaintext[MAXBLOCKSIZE*2], tag[MAXBLOCKSIZE]; + unsigned long len; + + out = fopen("gcm_tv.txt", "w"); + 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 = 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); + } + 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); +} + +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,66 +653,63 @@ static void base64_gen(void) fclose(out); } -static void math_gen(void) +void math_gen(void) { } -static void ecc_gen(void) +void ecc_gen(void) { FILE *out; unsigned char str[512]; - void *k, *order, *modulus, *a; + void *k, *order, *modulus; ecc_point *G, *R; int x; - OPEN_FILE("ecc_tv.txt", out); + out = fopen("ecc_tv.txt", "w"); 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); + mp_init(&k); + mp_init(&order); + mp_init(&modulus); - for (x = 0; ltc_ecc_curves[x].prime != NULL; x++) { - fprintf(out, "%s\n", ltc_ecc_curves[x].OID); - ltc_mp_set(k, 1); + for (x = 0; ltc_ecc_sets[x].size != 0; x++) { + fprintf(out, "ECC-%d\n", ltc_ecc_sets[x].size*8); + 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); + mp_read_radix(order, (char *)ltc_ecc_sets[x].order, 16); + mp_read_radix(modulus, (char *)ltc_ecc_sets[x].prime, 16); + mp_read_radix(G->x, (char *)ltc_ecc_sets[x].Gx, 16); + mp_read_radix(G->y, (char *)ltc_ecc_sets[x].Gy, 16); + 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); + while (mp_cmp(k, order) == LTC_MP_LT) { + ltc_mp.ecc_ptmul(k, G, R, modulus, 1); + mp_tohex(k, (char*)str); fprintf(out, "%s, ", (char*)str); + mp_tohex(R->x, (char*)str); fprintf(out, "%s, ", (char*)str); + mp_tohex(R->y, (char*)str); fprintf(out, "%s\n", (char*)str); + mp_mul_d(k, 3, k); } } - ltc_mp_deinit_multi(k, order, modulus, a, LTC_NULL); + mp_clear_multi(k, order, modulus, NULL); ltc_ecc_del_point(G); ltc_ecc_del_point(R); fclose(out); } -#ifdef LTC_LRW_MODE -static void lrw_gen(void) +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); + out = fopen("lrw_tv.txt", "w"); 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)); @@ -699,71 +760,27 @@ static void lrw_gen(void) lrw_done(&lrw); } fclose(out); -} -#endif +} -static void LTC_NORETURN die(int status) +int main(void) { - 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 - + 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 OCB vectors..."); fflush(stdout); ocb_gen(); printf("done\n"); 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 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 MATH vectors..."); fflush(stdout); math_gen(); printf("done\n"); + printf("Generating ECC vectors..."); fflush(stdout); ecc_gen(); printf("done\n"); printf("Generating LRW vectors..."); fflush(stdout); lrw_gen(); printf("done\n"); -#endif return 0; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 -# , /
+Code by Tom
+Docs using doxygen + + + diff --git a/doc/header.html b/doc/header.html new file mode 100644 index 00000000..231475d1 --- /dev/null +++ b/doc/header.html @@ -0,0 +1,12 @@ + + +LibTomCrypt: Main Page + + + + + diff --git a/doc/libtomsm.png b/doc/libtomsm.png deleted file mode 100644 index 3c009a90..00000000 Binary files a/doc/libtomsm.png and /dev/null differ diff --git a/doc/makefile b/doc/makefile deleted file mode 100644 index 0f99bc7e..00000000 --- a/doc/makefile +++ /dev/null @@ -1,63 +0,0 @@ -ifeq ($V,1) -silent= -silent_stdout= -else -silent=@ -silent_stdout= > /dev/null -endif - -#Files left over from making the crypt.pdf. -LEFTOVERS=*.dvi *.log *.aux *.toc *.idx *.ilg *.ind *.out *.lof - -#build the doxy files (requires Doxygen, tetex and patience) -.PHONY: doxygen -doxygen: - doxygen $(silent_stdout) - -patched_doxygen: - (cat Doxyfile && echo "HAVE_DOT=no") | doxygen - $(silent_stdout) - -doxy: patched_doxygen - ${MAKE} -C doxygen/latex $(silent_stdout) && mv -f doxygen/latex/refman.pdf . - @echo The huge doxygen PDF should be available as doc/refman.pdf - -#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.pdf: crypt.tex - rm -f crypt.pdf $(LEFTOVERS) - cp crypt.tex crypt.bak - touch -r crypt.tex crypt.bak - (printf "%s" "\def\fixedpdfdate{"; date +'D:%Y%m%d%H%M%S%:z' -u -d @$${SOURCE_DATE_EPOCH:-$$(stat --format=%Y crypt.tex)} | sed "s/:\([0-9][0-9]\)$$/'\1'}/g") > crypt-deterministic.tex - printf "%s\n" "\pdfinfo{" >> crypt-deterministic.tex - printf "%s\n" " /CreationDate (\fixedpdfdate)" >> crypt-deterministic.tex - printf "%s\n}\n" " /ModDate (\fixedpdfdate)" >> crypt-deterministic.tex - cat crypt.tex >> crypt-deterministic.tex - mv crypt-deterministic.tex crypt.tex - touch -r crypt.bak crypt.tex - echo "hello" > crypt.ind - latex crypt $(silent_stdout) - latex crypt $(silent_stdout) - makeindex crypt.idx $(silent_stdout) - perl ../helper.pl --fixupind crypt.ind - pdflatex crypt $(silent_stdout) - sed -b -i 's,^/ID \[.*\]$$,/ID [<0> <0>],g' crypt.pdf - mv crypt.bak crypt.tex - rm -f $(LEFTOVERS) - -docdvi: crypt.tex - echo hello > crypt.ind - latex crypt $(silent_stdout) - latex crypt $(silent_stdout) - makeindex crypt.idx - perl ../helper.pl --fixupind crypt.ind - latex crypt $(silent_stdout) - latex crypt $(silent_stdout) - -termdoc: docdvi - dvi2tty crypt.dvi -w120 - -clean: - ${silent} rm -f $(LEFTOVERS) - ${silent} rm -rf doxygen/ diff --git a/filter.pl b/filter.pl new file mode 100644 index 00000000..11ba62fb --- /dev/null +++ b/filter.pl @@ -0,0 +1,30 @@ +#!/usr/bin/perl + +# we want to filter every between START_INS and END_INS out and then insert crap from another file (this is fun) + +$dst = shift; +$ins = shift; + +open(SRC,"<$dst"); +open(INS,"<$ins"); +open(TMP,">tmp.delme"); + +$l = 0; +while () { + if ($_ =~ /START_INS/) { + print TMP $_; + $l = 1; + while () { + print TMP $_; + } + close INS; + } elsif ($_ =~ /END_INS/) { + print TMP $_; + $l = 0; + } elsif ($l == 0) { + print TMP $_; + } +} + +close TMP; +close SRC; diff --git a/genlist.sh b/genlist.sh new file mode 100644 index 00000000..03e13b3f --- /dev/null +++ b/genlist.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# aes_tab.o is a pseudo object as it's made from aes.o and MPI is optional +export a=`echo -n "src/ciphers/aes/aes_enc.o " ; find . -type f | sort | grep "[.]/src" | grep "[.]c" | grep -v "sha224" | grep -v "sha384" | grep -v "aes_tab" | grep -v "twofish_tab" | grep -v "whirltab" | grep -v "dh_sys" | grep -v "ecc_sys" | grep -v "mpi[.]c" | grep -v "sober128tab" | sed -e 'sE\./EE' | sed -e 's/\.c/\.o/' | xargs` +perl ./parsenames.pl OBJECTS "$a" +export a=`find . -type f | grep [.]/src | grep [.]h | sed -e 'se\./ee' | xargs` +perl ./parsenames.pl HEADERS "$a" + +# $Source: /cvs/libtom/libtomcrypt/genlist.sh,v $ +# $Revision: 1.4 $ +# $Date: 2005/07/17 23:15:12 $ 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/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/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/makefile b/makefile index d62bc62d..e55c6660 100644 --- a/makefile +++ b/makefile @@ -2,167 +2,370 @@ # # 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=1.13 -PLATFORM := $(shell uname | sed -e 's/_.*//') +# Compiler and Linker Names +#CC=gcc +#LD=ld + +# Archiver [makes .a files] +#AR=ar +#ARFLAGS=r + +ifndef MAKE + MAKE=make +endif # ranlib tools ifndef RANLIB -RANLIB:=$(CROSS_COMPILE)ranlib + RANLIB=ranlib endif -INSTALL_CMD = install -UNINSTALL_CMD = rm + +# Compilation flags. Note the += does not write over the user's CFLAGS! +CFLAGS += -c -I./testprof/ -I./src/headers/ -Wall -Wsign-compare -W -Wshadow -Wno-unused-parameter -DLTC_SOURCE + +# additional warnings (newer GCC 3.4 and higher) +ifdef GCC_34 +CFLAGS += -Wsystem-headers -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wmissing-prototypes \ + -Wmissing-declarations -Wpointer-arith +endif + +ifndef IGNORE_SPEED + +# optimize for SPEED +CFLAGS += -O3 -funroll-loops + +# add -fomit-frame-pointer. hinders debugging! +CFLAGS += -fomit-frame-pointer + +# optimize for SIZE +#CFLAGS += -Os -DLTC_SMALL_CODE + +endif + +# older GCCs can't handle the "rotate with immediate" ROLc/RORc/etc macros +# define this to help +#CFLAGS += -DLTC_NO_ROLC + +# compile for DEBUGING (required for ccmalloc checking!!!) +#CFLAGS += -g3 -DLTC_NO_ASM #Output filenames for various targets. ifndef LIBNAME LIBNAME=libtomcrypt.a endif +ifndef LIBTEST + LIBTEST=libtomcrypt_prof.a +endif +LIBTEST_S=$(LIBTEST) +HASH=hashsum +CRYPT=encrypt +SMALL=small +PROF=x86_prof +TV=tv_gen +MULTI=multi +TIMING=timing +TEST=test -include makefile_include.mk - -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 +#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. +ifndef DESTDIR + DESTDIR= endif -LTC_EXTRALIBS += $(EXTRALIBS) +ifndef LIBPATH + LIBPATH=/usr/lib +endif +ifndef INCPATH + INCPATH=/usr/include +endif +ifndef DATAPATH + DATAPATH=/usr/share/doc/libtomcrypt/pdf +endif -#AES comes in two flavours... enc+dec and enc +#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 + +#List of objects to compile. +#START_INS +OBJECTS=src/ciphers/aes/aes_enc.o src/ciphers/aes/aes.o src/ciphers/anubis.o src/ciphers/blowfish.o \ +src/ciphers/cast5.o src/ciphers/des.o src/ciphers/khazad.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/safer_tab.o \ +src/ciphers/safer/saferp.o src/ciphers/skipjack.o src/ciphers/twofish/twofish.o src/ciphers/xtea.o \ +src/encauth/ccm/ccm_memory.o src/encauth/ccm/ccm_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/ocb/ocb_decrypt.o src/encauth/ocb/ocb_decrypt_verify_memory.o \ +src/encauth/ocb/ocb_done_decrypt.o src/encauth/ocb/ocb_done_encrypt.o src/encauth/ocb/ocb_encrypt.o \ +src/encauth/ocb/ocb_encrypt_authenticate_memory.o src/encauth/ocb/ocb_init.o src/encauth/ocb/ocb_ntz.o \ +src/encauth/ocb/ocb_shift_xor.o src/encauth/ocb/ocb_test.o src/encauth/ocb/s_ocb_done.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/sha1.o src/hashes/sha2/sha256.o \ +src/hashes/sha2/sha512.o src/hashes/tiger.o src/hashes/whirl/whirl.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/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/math/fp/ltc_ecc_fp_mulmod.o \ +src/math/gmp_desc.o src/math/ltm_desc.o src/math/multi.o src/math/rand_prime.o src/math/tfm_desc.o \ +src/misc/base64/base64_decode.o src/misc/base64/base64_encode.o src/misc/burn_stack.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_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_hash_descriptor.o \ +src/misc/crypt/crypt_hash_is_valid.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_register_cipher.o src/misc/crypt/crypt_register_hash.o \ +src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_unregister_cipher.o \ +src/misc/crypt/crypt_unregister_hash.o src/misc/crypt/crypt_unregister_prng.o \ +src/misc/error_to_string.o src/misc/pkcs5/pkcs_5_1.o src/misc/pkcs5/pkcs_5_2.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/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/pk/asn1/der/bit/der_decode_bit_string.o \ +src/pk/asn1/der/bit/der_encode_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/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_length_sequence.o \ +src/pk/asn1/der/sequence/der_sequence_free.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/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/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_import.o src/pk/dsa/dsa_make_key.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/ecc/ecc.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_free.o \ +src/pk/ecc/ecc_get_size.o src/pk/ecc/ecc_import.o src/pk/ecc/ecc_make_key.o \ +src/pk/ecc/ecc_shared_secret.o src/pk/ecc/ecc_sign_hash.o src/pk/ecc/ecc_sizes.o src/pk/ecc/ecc_test.o \ +src/pk/ecc/ecc_verify_hash.o src/pk/ecc/ltc_ecc_is_valid_idx.o src/pk/ecc/ltc_ecc_map.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/katja/katja_decrypt_key.o src/pk/katja/katja_encrypt_key.o src/pk/katja/katja_export.o \ +src/pk/katja/katja_exptmod.o src/pk/katja/katja_free.o src/pk/katja/katja_import.o \ +src/pk/katja/katja_make_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/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_free.o \ +src/pk/rsa/rsa_import.o src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o \ +src/pk/rsa/rsa_verify_hash.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 + +HEADERS=src/headers/tomcrypt_cfg.h src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h \ +src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cipher.h \ +src/headers/tomcrypt_pk.h src/headers/tomcrypt_hash.h src/headers/tomcrypt_math.h \ +src/headers/tomcrypt_misc.h src/headers/tomcrypt.h src/headers/tomcrypt_pkcs.h \ +src/headers/tomcrypt_prng.h testprof/tomcrypt_test.h + +#END_INS + +TESTOBJECTS=demos/test.o +HASHOBJECTS=demos/hashsum.o +CRYPTOBJECTS=demos/encrypt.o +SMALLOBJECTS=demos/small.o +TVS=demos/tv_gen.o +MULTIS=demos/multi.o +TIMINGS=demos/timing.o +TESTS=demos/test.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 + +#The default rule for make builds the libtomcrypt library. +default:library + +#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 -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 $@ + $(CC) $(CFLAGS) -DENCRYPT_ONLY -c src/ciphers/aes/aes.c -o src/ciphers/aes/aes_enc.o -.c.o: -ifneq ($V,1) - @echo " * ${CC} $@" ${silent_echo} -endif - ${silent} ${CC} ${LTC_CFLAGS} -c $< -o $@ +#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/whirl/whirl.o: src/hashes/whirl/whirl.c src/hashes/whirl/whirltab.c +src/hashes/sha2/sha512.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c +src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c + +#This rule makes the libtomcrypt library. +library: $(LIBNAME) + +testprof/$(LIBTEST): + cd testprof ; CFLAGS="$(CFLAGS)" LIBTEST_S=$(LIBTEST_S) $(MAKE) $(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) + $(RANLIB) $@ -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) $(EXTRALIBS) -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) $(EXTRALIBS) -o $(CRYPT) $(WARN) -$(foreach demo, $(strip $(DEMOS)), $(eval $(call DEMO_template,$(demo)))) +#makes the small program +small: library $(SMALLOBJECTS) + $(CC) $(SMALLOBJECTS) $(LIBNAME) $(EXTRALIBS) -o $(SMALL) $(WARN) + +tv_gen: library $(TVS) + $(CC) $(LDFLAGS) $(TVS) $(LIBNAME) $(EXTRALIBS) -o $(TV) +multi: library $(MULTIS) + $(CC) $(MULTIS) $(LIBNAME) $(EXTRALIBS) -o $(MULTI) + +timing: library testprof/$(LIBTEST) $(TIMINGS) + $(CC) $(LDFLAGS) $(TIMINGS) testprof/$(LIBTEST) $(LIBNAME) $(EXTRALIBS) -o $(TIMING) + +test: library testprof/$(LIBTEST) $(TESTS) + $(CC) $(LDFLAGS) $(TESTS) testprof/$(LIBTEST) $(LIBNAME) $(EXTRALIBS) -o $(TEST) #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_bins: $(call print-help,install_bins,Installs the useful demos ($(USEFUL_DEMOS))) .common_install_bins - -uninstall: $(call print-help,uninstall,Uninstalls the library and headers) .common_uninstall - -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" - -# target that pre-processes all coverage data -lcov-single-create: - lcov --capture --no-external --directory src -q --output-file coverage_std.info - -# 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 +ifndef NODOCS +install: library docs +else +install: library +endif + install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH) + install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH) + install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(DATAPATH) + install -g $(GROUP) -o $(USER) $(LIBNAME) $(DESTDIR)$(LIBPATH) + install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH) +ifndef NODOCS + install -g $(GROUP) -o $(USER) doc/crypt.pdf $(DESTDIR)$(DATAPATH) endif +install_test: testprof/$(LIBTEST) + install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH) + install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH) + install -g $(GROUP) -o $(USER) testprof/$(LIBTEST) $(DESTDIR)$(LIBPATH) + +profile: + CFLAGS="$(CFLAGS) -fprofile-generate" $(MAKE) timing EXTRALIBS="$(EXTRALIBS) -lgcov" + ./timing + rm -f timing `find . -type f | grep [.][ao] | xargs` + CFLAGS="$(CFLAGS) -fprofile-use" $(MAKE) timing EXTRALIBS="$(EXTRALIBS) -lgcov" + + +#This rule cleans the source tree of all compiled code, not including the pdf +#documentation. +clean: + rm -f `find . -type f | grep "[.]o" | xargs` + rm -f `find . -type f | grep "[.]lo" | xargs` + rm -f `find . -type f | grep "[.]a" | xargs` + rm -f `find . -type f | grep "[.]la" | xargs` + rm -f `find . -type f | grep "[.]obj" | xargs` + rm -f `find . -type f | grep "[.]lib" | xargs` + rm -f `find . -type f | grep "[.]exe" | xargs` + rm -f `find . -type f | grep "[.]gcda" | xargs` + rm -f `find . -type f | grep "[.]gcno" | xargs` + rm -f `find . -type f | grep "[.]il" | xargs` + rm -f `find . -type f | grep "[.]dyn" | xargs` + rm -f `find . -type f | grep "[.]dpi" | xargs` + rm -rf `find . -type d | grep "[.]libs" | xargs` + rm -f crypt.aux crypt.dvi crypt.idx crypt.ilg crypt.ind crypt.log crypt.toc + rm -f $(TV) $(PROF) $(SMALL) $(CRYPT) $(HASHSUM) $(MULTI) $(TIMING) $(TEST) + rm -rf doc/doxygen + rm -f doc/*.pdf + rm -f *.txt + +#build the doxy files (requires Doxygen, tetex and patience) +doxy: + doxygen + cd doc/doxygen/latex ; ${MAKE} ; mv -f refman.pdf ../../. + echo The huge doxygen PDF should be available as doc/refman.pdf + +#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) + +docdvi: crypt.tex + echo hello > crypt.ind + latex crypt > /dev/null + latex crypt > /dev/null + makeindex crypt.idx + latex crypt > /dev/null + +#zipup the project (take that!) +no_oops: clean + cd .. ; cvs commit + echo Scanning for scratch/dirty files + find . -type f | grep -v CVS | xargs -n 1 bash mess.sh + +zipup: no_oops docs + cd .. ; rm -rf crypt* libtomcrypt-$(VERSION) ; mkdir libtomcrypt-$(VERSION) ; \ + cp -R ./libtomcrypt/* ./libtomcrypt-$(VERSION)/ ; \ + cd libtomcrypt-$(VERSION) ; rm -rf `find . -type d | grep CVS | xargs` ; cd .. ; \ + tar -cjvf crypt-$(VERSION).tar.bz2 libtomcrypt-$(VERSION) ; \ + zip -9r crypt-$(VERSION).zip libtomcrypt-$(VERSION) ; \ + gpg -b -a crypt-$(VERSION).tar.bz2 ; gpg -b -a crypt-$(VERSION).zip ; \ + mv -fv crypt* ~ ; rm -rf libtomcrypt-$(VERSION) + + +# $Source: /cvs/libtom/libtomcrypt/makefile,v $ +# $Revision: 1.126 $ +# $Date: 2006/06/16 23:52:08 $ diff --git a/makefile.icc b/makefile.icc new file mode 100644 index 00000000..9fd09282 --- /dev/null +++ b/makefile.icc @@ -0,0 +1,282 @@ +# 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 + +# 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 -Isrc/headers/ -Itestprof/ -DINTEL_CC -DLTC_SOURCE + +#ICC v9 doesn't support LTC_FAST for things like Pelican MAC +#Despite the fact I can't see what's wrong with my code +#Oh well +CFLAGS += -DLTC_NO_FAST + +#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 +ifdef LTC_SMALL +CFLAGS += -O2 -xP -ip +endif + +ifndef IGNORE_SPEED +CFLAGS += -O3 -xP -ip +endif + +# want to see stuff? +#CFLAGS += -opt_report + +#These flags control how the library gets built. + +#Output filenames for various targets. +ifndef LIBNAME + LIBNAME=libtomcrypt.a +endif +ifndef LIBTEST + LIBTEST=libtomcrypt_prof.a + LIBTEST_S=$(LIBTEST) +endif +HASH=hashsum +CRYPT=encrypt +SMALL=small +PROF=x86_prof +TV=tv_gen +MULTI=multi +TIMING=timing +TEST=test + +#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. +ifndef DESTDIR + DESTDIR= +endif +ifndef LIBPATH + LIBPATH=/usr/lib +endif +ifndef INCPATH + INCPATH=/usr/include +endif +ifndef DATAPATH + DATAPATH=/usr/share/doc/libtomcrypt/pdf +endif + +#List of objects to compile. +#START_INS +OBJECTS=src/ciphers/aes/aes_enc.o src/ciphers/aes/aes.o src/ciphers/anubis.o src/ciphers/blowfish.o \ +src/ciphers/cast5.o src/ciphers/des.o src/ciphers/khazad.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/safer_tab.o \ +src/ciphers/safer/saferp.o src/ciphers/skipjack.o src/ciphers/twofish/twofish.o src/ciphers/xtea.o \ +src/encauth/ccm/ccm_memory.o src/encauth/ccm/ccm_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/ocb/ocb_decrypt.o src/encauth/ocb/ocb_decrypt_verify_memory.o \ +src/encauth/ocb/ocb_done_decrypt.o src/encauth/ocb/ocb_done_encrypt.o src/encauth/ocb/ocb_encrypt.o \ +src/encauth/ocb/ocb_encrypt_authenticate_memory.o src/encauth/ocb/ocb_init.o src/encauth/ocb/ocb_ntz.o \ +src/encauth/ocb/ocb_shift_xor.o src/encauth/ocb/ocb_test.o src/encauth/ocb/s_ocb_done.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/sha1.o src/hashes/sha2/sha256.o \ +src/hashes/sha2/sha512.o src/hashes/tiger.o src/hashes/whirl/whirl.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/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/math/fp/ltc_ecc_fp_mulmod.o \ +src/math/gmp_desc.o src/math/ltm_desc.o src/math/multi.o src/math/rand_prime.o src/math/tfm_desc.o \ +src/misc/base64/base64_decode.o src/misc/base64/base64_encode.o src/misc/burn_stack.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_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_hash_descriptor.o \ +src/misc/crypt/crypt_hash_is_valid.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_register_cipher.o src/misc/crypt/crypt_register_hash.o \ +src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_unregister_cipher.o \ +src/misc/crypt/crypt_unregister_hash.o src/misc/crypt/crypt_unregister_prng.o \ +src/misc/error_to_string.o src/misc/pkcs5/pkcs_5_1.o src/misc/pkcs5/pkcs_5_2.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/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/pk/asn1/der/bit/der_decode_bit_string.o \ +src/pk/asn1/der/bit/der_encode_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/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_length_sequence.o \ +src/pk/asn1/der/sequence/der_sequence_free.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/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/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_import.o src/pk/dsa/dsa_make_key.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/ecc/ecc.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_free.o \ +src/pk/ecc/ecc_get_size.o src/pk/ecc/ecc_import.o src/pk/ecc/ecc_make_key.o \ +src/pk/ecc/ecc_shared_secret.o src/pk/ecc/ecc_sign_hash.o src/pk/ecc/ecc_sizes.o src/pk/ecc/ecc_test.o \ +src/pk/ecc/ecc_verify_hash.o src/pk/ecc/ltc_ecc_is_valid_idx.o src/pk/ecc/ltc_ecc_map.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/katja/katja_decrypt_key.o src/pk/katja/katja_encrypt_key.o src/pk/katja/katja_export.o \ +src/pk/katja/katja_exptmod.o src/pk/katja/katja_free.o src/pk/katja/katja_import.o \ +src/pk/katja/katja_make_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/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_free.o \ +src/pk/rsa/rsa_import.o src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o \ +src/pk/rsa/rsa_verify_hash.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 + +HEADERS=src/headers/tomcrypt_cfg.h src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h \ +src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cipher.h \ +src/headers/tomcrypt_pk.h src/headers/tomcrypt_hash.h src/headers/tomcrypt_math.h \ +src/headers/tomcrypt_misc.h src/headers/tomcrypt.h src/headers/tomcrypt_pkcs.h \ +src/headers/tomcrypt_prng.h testprof/tomcrypt_test.h + +#END_INS + +#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 + +#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 +TVS=demos/tv_gen.o +TIMINGS=demos/timing.o +TESTS=demos/test.o + +#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) $(CFLAGS) -DENCRYPT_ONLY -c src/ciphers/aes/aes.c -o src/ciphers/aes/aes_enc.o + +#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/whirl/whirl.o: src/hashes/whirl/whirl.c src/hashes/whirl/whirltab.c +src/hashes/sha2/sha512.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c +src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c + +#This rule makes the libtomcrypt library. +library: $(LIBNAME) + +testprof/$(LIBTEST): + cd testprof ; LIBTEST_S=$(LIBTEST) CFLAGS="$(CFLAGS)" make -f makefile.icc + +$(LIBNAME): $(OBJECTS) + $(AR) $(ARFLAGS) $@ $(OBJECTS) + ranlib $@ + +#This rule makes the hash program included with libtomcrypt +hashsum: library $(HASHOBJECTS) + $(CC) $(HASHOBJECTS) $(LIBNAME) $(EXTRALIBS) -o $(HASH) $(WARN) + +#makes the crypt program +crypt: library $(CRYPTOBJECTS) + $(CC) $(CRYPTOBJECTS) $(LIBNAME) $(EXTRALIBS) -o $(CRYPT) $(WARN) + +#makes the small program +small: library $(SMALLOBJECTS) + $(CC) $(SMALLOBJECTS) $(LIBNAME) $(EXTRALIBS) -o $(SMALL) $(WARN) + +tv_gen: library $(TVS) + $(CC) $(TVS) $(LIBNAME) $(EXTRALIBS) -o $(TV) + +timing: library $(TIMINGS) testprof/$(LIBTEST) + $(CC) $(TIMINGS) testprof/$(LIBTEST) $(LIBNAME) $(EXTRALIBS) -o $(TIMING) + +test: library $(TESTS) testprof/$(LIBTEST) + $(CC) $(TESTS) testprof/$(LIBTEST) $(LIBNAME) $(EXTRALIBS) -o $(TEST) + +#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 $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH) + install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH) + install -g $(GROUP) -o $(USER) $(LIBNAME) $(DESTDIR)$(LIBPATH) + install -g $(GROUP) -o $(USER) $(LIBTEST) $(DESTDIR)$(LIBPATH) + install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH) + +# $Source: /cvs/libtom/libtomcrypt/makefile.icc,v $ +# $Revision: 1.58 $ +# $Date: 2006/06/16 23:52:08 $ + 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..fa310e00 100644 --- a/makefile.msvc +++ b/makefile.msvc @@ -1,125 +1,56 @@ -# 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 = /Isrc/headers/ /Itestprof/ /Ox /DWIN32 /DLTC_SOURCE /W3 /Fo$@ $(CF) -### 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 -# - -#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 - -#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 - -#Libraries to be created (this makefile builds only static libraries) -LIBMAIN_S =tomcrypt.lib - -#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 \ +#START_INS +OBJECTS=src/ciphers/aes/aes_enc.obj src/ciphers/aes/aes.obj src/ciphers/anubis.obj src/ciphers/blowfish.obj \ +src/ciphers/cast5.obj src/ciphers/des.obj src/ciphers/khazad.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/safer_tab.obj \ +src/ciphers/safer/saferp.obj src/ciphers/skipjack.obj src/ciphers/twofish/twofish.obj src/ciphers/xtea.obj \ +src/encauth/ccm/ccm_memory.obj src/encauth/ccm/ccm_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/encauth/ocb/ocb_decrypt.obj src/encauth/ocb/ocb_decrypt_verify_memory.obj \ +src/encauth/ocb/ocb_done_decrypt.obj src/encauth/ocb/ocb_done_encrypt.obj src/encauth/ocb/ocb_encrypt.obj \ +src/encauth/ocb/ocb_encrypt_authenticate_memory.obj src/encauth/ocb/ocb_init.obj src/encauth/ocb/ocb_ntz.obj \ +src/encauth/ocb/ocb_shift_xor.obj src/encauth/ocb/ocb_test.obj src/encauth/ocb/s_ocb_done.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/sha1.obj src/hashes/sha2/sha256.obj \ +src/hashes/sha2/sha512.obj src/hashes/tiger.obj src/hashes/whirl/whirl.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/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/mac/pmac/pmac_shift_xor.obj src/mac/pmac/pmac_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/rand_prime.obj src/math/tfm_desc.obj \ +src/misc/base64/base64_decode.obj src/misc/base64/base64_encode.obj src/misc/burn_stack.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_cipher_is_valid.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_hash_descriptor.obj \ +src/misc/crypt/crypt_hash_is_valid.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/misc/crypt/crypt_register_prng.obj src/misc/crypt/crypt_unregister_cipher.obj \ +src/misc/crypt/crypt_unregister_hash.obj src/misc/crypt/crypt_unregister_prng.obj \ +src/misc/error_to_string.obj src/misc/pkcs5/pkcs_5_1.obj src/misc/pkcs5/pkcs_5_2.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/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 \ @@ -127,22 +58,10 @@ src/modes/lrw/lrw_decrypt.obj src/modes/lrw/lrw_done.obj src/modes/lrw/lrw_encry 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/modes/ofb/ofb_start.obj src/pk/asn1/der/bit/der_decode_bit_string.obj \ +src/pk/asn1/der/bit/der_encode_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 \ @@ -158,183 +77,63 @@ 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/sequence/der_encode_sequence_multi.obj src/pk/asn1/der/sequence/der_length_sequence.obj \ +src/pk/asn1/der/sequence/der_sequence_free.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/asn1/der/short_integer/der_length_short_integer.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/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_import.obj src/pk/dsa/dsa_make_key.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/ecc/ecc.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_free.obj \ +src/pk/ecc/ecc_get_size.obj src/pk/ecc/ecc_import.obj src/pk/ecc/ecc_make_key.obj \ +src/pk/ecc/ecc_shared_secret.obj src/pk/ecc/ecc_sign_hash.obj src/pk/ecc/ecc_sizes.obj src/pk/ecc/ecc_test.obj \ +src/pk/ecc/ecc_verify_hash.obj src/pk/ecc/ltc_ecc_is_valid_idx.obj src/pk/ecc/ltc_ecc_map.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 +src/pk/katja/katja_decrypt_key.obj src/pk/katja/katja_encrypt_key.obj src/pk/katja/katja_export.obj \ +src/pk/katja/katja_exptmod.obj src/pk/katja/katja_free.obj src/pk/katja/katja_import.obj \ +src/pk/katja/katja_make_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/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_free.obj \ +src/pk/rsa/rsa_import.obj src/pk/rsa/rsa_make_key.obj src/pk/rsa/rsa_sign_hash.obj \ +src/pk/rsa/rsa_verify_hash.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 -#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 +HEADERS=src/headers/tomcrypt_cfg.h src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h \ +src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cipher.h \ +src/headers/tomcrypt_pk.h src/headers/tomcrypt_hash.h src/headers/tomcrypt_math.h \ +src/headers/tomcrypt_misc.h src/headers/tomcrypt.h src/headers/tomcrypt_pkcs.h \ +src/headers/tomcrypt_prng.h testprof/tomcrypt_test.h -#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 +#END_INS -HEADERS=$(HEADERS_PUB) src/headers/tomcrypt_private.h +default: library -#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 +#ciphers come in two flavours... enc+dec and enc 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 + $(CC) $(CFLAGS) /DENCRYPT_ONLY /c src/ciphers/aes/aes.c /Fosrc/ciphers/aes/aes_enc.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 +library: $(OBJECTS) + lib /out:tomcrypt.lib $(OBJECTS) + cd testprof + nmake -f makefile.msvc + cd .. + +tv_gen: demos/tv_gen.c library + cl $(CFLAGS) demos/tv_gen.c tomcrypt.lib advapi32.lib $(EXTRALIBS) -#Dependencies on *.h -$(OBJECTS): $(HEADERS) -$(TOBJECTS): $(HEADERS) tests/tomcrypt_test.h +hashsum: demos/hashsum.c library + cl $(CFLAGS) demos/hashsum.c tomcrypt.lib advapi32.lib $(EXTRALIBS) -.c.obj: - $(CC) $(LTC_CFLAGS) /c $< /Fo$@ +test: demos/test.c library + cl $(CFLAGS) demos/test.c testprof/tomcrypt_prof.lib tomcrypt.lib advapi32.lib $(EXTRALIBS) -#Create tomcrypt.lib -$(LIBMAIN_S): $(OBJECTS) - lib /out:$(LIBMAIN_S) $(OBJECTS) +timing: demos/timing.c library + cl $(CFLAGS) demos/timing.c testprof/tomcrypt_prof.lib tomcrypt.lib advapi32.lib $(EXTRALIBS) -#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" +# $Source: /cvs/libtom/libtomcrypt/makefile.msvc,v $ +# $Revision: 1.36 $ +# $Date: 2006/06/16 23:52:08 $ diff --git a/makefile.shared b/makefile.shared index d40e7c5a..4bef699a 100644 --- a/makefile.shared +++ b/makefile.shared @@ -1,131 +1,269 @@ # MAKEFILE for linux GCC # -# This makefile produces a shared object. +# This makefile produces a shared object and requires libtool to be installed. # -# Thanks to Zed Shaw for helping debug this on BSD/OSX. +# 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 -# +# The version +VERSION=0:113 -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) +# Compiler and Linker Names +CC=libtool --mode=compile --tag=CC gcc -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 +# ranlib tools +ifndef RANLIB + RANLIB=ranlib endif -ifeq ($(PLATFORM), Darwin) - TARGET := $(NAME).dylib -else ifeq ($(OS), Windows_NT) - TARGET := $(NAME).dll -else - TARGET := $(NAME).so +# Compilation flags. Note the += does not write over the user's CFLAGS! +CFLAGS += -c -I./src/headers/ -Wall -Wsign-compare -W -Wshadow -DLTC_SOURCE + +# additional warnings (newer GCC 3.4 and higher) +ifdef GCC_34 +CFLAGS += -Wsystem-headers -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wmissing-prototypes \ + -Wmissing-declarations -Wpointer-arith endif + +ifndef IGNORE_SPEED + +# optimize for SPEED +CFLAGS += -O3 -funroll-loops + +# add -fomit-frame-pointer. hinders debugging! +CFLAGS += -fomit-frame-pointer + +# optimize for SIZE +#CFLAGS += -Os -DLTC_SMALL_CODE + +endif + +# compile for DEBUGING (required for ccmalloc checking!!!) +#CFLAGS += -g3 + +# older GCCs can't handle the "rotate with immediate" ROLc/RORc/etc macros +# define this to help +#CFLAGS += -DLTC_NO_ROLC + #Output filenames for various targets. +ifndef LIBTEST_S + LIBTEST_S=libtomcrypt_prof.a +endif +ifndef LIBTEST + LIBTEST=libtomcrypt_prof.la +endif ifndef LIBNAME - LIBNAME = $(TARGET).$(VERSION_LT) + LIBNAME=libtomcrypt.la +endif +ifndef LIBNAME_S + LIBNAME_S=libtomcrypt.a endif -include makefile_include.mk +HASH=hashsum +CRYPT=encrypt +SMALL=small +PROF=x86_prof +TV=tv_gen +TEST=test +TIMING=timing -ifneq ($(findstring -DLTM_DESC,$(LTC_CFLAGS)),) -LTC_PKG_CONFIG_CFLAGS += -DLTM_DESC -LTC_PKG_CONFIG_LIBS += -ltommath +#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. +ifndef DESTDIR + DESTDIR= endif -ifneq ($(findstring -DTFM_DESC,$(LTC_CFLAGS)),) -LTC_PKG_CONFIG_CFLAGS += -DTFM_DESC -LTC_PKG_CONFIG_LIBS += -ltfm +ifndef LIBPATH + LIBPATH=/usr/lib endif -ifneq ($(findstring -DGMP_DESC,$(LTC_CFLAGS)),) -LTC_PKG_CONFIG_CFLAGS += -DGMP_DESC -LTC_PKG_CONFIG_LIBS += -lgmp +ifndef INCPATH + INCPATH=/usr/include endif -ifneq ($(findstring -DLTC_PTHREAD,$(LTC_CFLAGS)),) -LTC_PKG_CONFIG_CFLAGS += -DLTC_PTHREAD +ifndef DATAPATH + DATAPATH=/usr/share/doc/libtomcrypt/pdf 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) +#Who do we install as? +ifdef INSTALL_USER +USER=$(INSTALL_USER) +else +USER=root +endif -.PHONY: check install install_bins uninstall +ifdef INSTALL_GROUP +GROUP=$(INSTALL_GROUP) +else +GROUP=wheel +endif -.bin/.tag: bin.in - mkdir -p .bin - touch $@ +#List of objects to compile. +#START_INS +OBJECTS=src/ciphers/aes/aes_enc.o src/ciphers/aes/aes.o src/ciphers/anubis.o src/ciphers/blowfish.o \ +src/ciphers/cast5.o src/ciphers/des.o src/ciphers/khazad.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/safer_tab.o \ +src/ciphers/safer/saferp.o src/ciphers/skipjack.o src/ciphers/twofish/twofish.o src/ciphers/xtea.o \ +src/encauth/ccm/ccm_memory.o src/encauth/ccm/ccm_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/ocb/ocb_decrypt.o src/encauth/ocb/ocb_decrypt_verify_memory.o \ +src/encauth/ocb/ocb_done_decrypt.o src/encauth/ocb/ocb_done_encrypt.o src/encauth/ocb/ocb_encrypt.o \ +src/encauth/ocb/ocb_encrypt_authenticate_memory.o src/encauth/ocb/ocb_init.o src/encauth/ocb/ocb_ntz.o \ +src/encauth/ocb/ocb_shift_xor.o src/encauth/ocb/ocb_test.o src/encauth/ocb/s_ocb_done.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/sha1.o src/hashes/sha2/sha256.o \ +src/hashes/sha2/sha512.o src/hashes/tiger.o src/hashes/whirl/whirl.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/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/math/fp/ltc_ecc_fp_mulmod.o \ +src/math/gmp_desc.o src/math/ltm_desc.o src/math/multi.o src/math/rand_prime.o src/math/tfm_desc.o \ +src/misc/base64/base64_decode.o src/misc/base64/base64_encode.o src/misc/burn_stack.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_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_hash_descriptor.o \ +src/misc/crypt/crypt_hash_is_valid.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_register_cipher.o src/misc/crypt/crypt_register_hash.o \ +src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_unregister_cipher.o \ +src/misc/crypt/crypt_unregister_hash.o src/misc/crypt/crypt_unregister_prng.o \ +src/misc/error_to_string.o src/misc/pkcs5/pkcs_5_1.o src/misc/pkcs5/pkcs_5_2.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/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/pk/asn1/der/bit/der_decode_bit_string.o \ +src/pk/asn1/der/bit/der_encode_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/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_length_sequence.o \ +src/pk/asn1/der/sequence/der_sequence_free.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/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/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_import.o src/pk/dsa/dsa_make_key.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/ecc/ecc.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_free.o \ +src/pk/ecc/ecc_get_size.o src/pk/ecc/ecc_import.o src/pk/ecc/ecc_make_key.o \ +src/pk/ecc/ecc_shared_secret.o src/pk/ecc/ecc_sign_hash.o src/pk/ecc/ecc_sizes.o src/pk/ecc/ecc_test.o \ +src/pk/ecc/ecc_verify_hash.o src/pk/ecc/ltc_ecc_is_valid_idx.o src/pk/ecc/ltc_ecc_map.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/katja/katja_decrypt_key.o src/pk/katja/katja_encrypt_key.o src/pk/katja/katja_export.o \ +src/pk/katja/katja_exptmod.o src/pk/katja/katja_free.o src/pk/katja/katja_import.o \ +src/pk/katja/katja_make_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/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_free.o \ +src/pk/rsa/rsa_import.o src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o \ +src/pk/rsa/rsa_verify_hash.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 -#ciphers come in two flavours... enc+dec and enc +HEADERS=src/headers/tomcrypt_cfg.h src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h \ +src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cipher.h \ +src/headers/tomcrypt_pk.h src/headers/tomcrypt_hash.h src/headers/tomcrypt_math.h \ +src/headers/tomcrypt_misc.h src/headers/tomcrypt.h src/headers/tomcrypt_pkcs.h \ +src/headers/tomcrypt_prng.h testprof/tomcrypt_test.h + +#END_INS + +TESTOBJECTS=demos/test.o +HASHOBJECTS=demos/hashsum.o +CRYPTOBJECTS=demos/encrypt.o +SMALLOBJECTS=demos/small.o +TVS=demos/tv_gen.o +TESTS=demos/test.o +TIMINGS=demos/timing.o + +#The default rule for make builds the libtomcrypt library. +default:library + +#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 + $(CC) $(CFLAGS) -DENCRYPT_ONLY -c src/ciphers/aes/aes.c -o src/ciphers/aes/aes_enc.o -.c.o: - $(CC) $(LTC_CFLAGS) $(PIC) $(CPPFLAGS) -o $@ -c $< +#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/whirl/whirl.o: src/hashes/whirl/whirl.c src/hashes/whirl/whirltab.c +src/hashes/sha2/sha512.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c +src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c -$(LIBNAME): $(OBJECTS) - $(CC) $(LTC_LDFLAGS) $(OBJECTS) $(EXTRALIBS) $(SHARED) -Wl,-soname,$(TARGET).$(VERSION_MAJOR) $(NO_UNDEFINED) -o $@ +#This rule makes the libtomcrypt library. +library: $(LIBNAME) -$(TARGET).$(VERSION_MAJOR) $(TARGET): $(LIBNAME) - ln -sf $< $@ +testprof/$(LIBTEST): + cd testprof ; CFLAGS="$(CFLAGS)" GROUP=$(GROUP) USER=$(USER) VERSION=$(VERSION) LIBPATH=$(LIBPATH) LIBTEST=$(LIBTEST) LIBTEST_S=$(LIBTEST_S) make -f makefile.shared -.bin/$(TEST): $(TARGET).$(VERSION_MAJOR) $(TARGET) $(TOBJECTS) .bin/.tag - $(CC) $(LTC_LDFLAGS) $(TOBJECTS) -L. -ltomcrypt $(EXTRALIBS) $(NO_UNDEFINED) -o $@ +objs: $(OBJECTS) -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 $@ +$(LIBNAME): $(OBJECTS) testprof/$(LIBTEST) + libtool --silent --mode=link gcc $(CFLAGS) `find . -type f | grep "[.]lo" | grep "src/" | xargs` $(EXTRALIBS) -o $(LIBNAME) -rpath $(LIBPATH) -version-info $(VERSION) -# 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 $$@ +install: $(LIBNAME) + install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH) + cd testprof ; CFLAGS="$(CFLAGS)" GROUP=$(GROUP) USER=$(USER) VERSION=$(VERSION) LIBPATH=$(LIBPATH) LIBTEST=$(LIBTEST) LIBTEST_S=$(LIBTEST_S) DESTDIR=$(DESTDIR) make -f makefile.shared install + libtool --silent --mode=install install -c libtomcrypt.la $(DESTDIR)$(LIBPATH)/libtomcrypt.la + install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH) + install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH) -$(1): $(call print-help,$(1),Builds the library and the '$(1)' demo) .bin/$(1) - $$(INSTALL_CMD) -m 755 bin.in $(1) -endef +#This rule makes the hash program included with libtomcrypt +hashsum: library + gcc $(CFLAGS) demos/hashsum.c -o hashsum.o + gcc -o hashsum hashsum.o -ltomcrypt $(EXTRALIBS) -$(foreach demo, $(strip $(DEMOS)), $(eval $(call DEMO_template,$(demo)))) +#makes the crypt program +crypt: library + gcc $(CFLAGS) demos/encrypt.c -o encrypt.o + gcc -o crypt encrypt.o -ltomcrypt $(EXTRALIBS) -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/ +tv_gen: library $(TVS) + gcc -o tv_gen $(TVS) -ltomcrypt $(EXTRALIBS) -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) +test: library testprof/$(LIBTEST) $(TESTS) + gcc -o $(TEST) $(TESTS) -ltomcrypt_prof -ltomcrypt $(EXTRALIBS) -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 +timing: library testprof/$(LIBTEST) $(TIMINGS) + gcc -o $(TIMING) $(TIMINGS) -ltomcrypt_prof -ltomcrypt $(EXTRALIBS) + +# $Source: /cvs/libtom/libtomcrypt/makefile.shared,v $ +# $Revision: 1.58 $ +# $Date: 2006/06/16 23:52:08 $ 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/mess.sh b/mess.sh new file mode 100644 index 00000000..bd8dc19c --- /dev/null +++ b/mess.sh @@ -0,0 +1,4 @@ +#!/bin/bash +if cvs log $1 >/dev/null 2>/dev/null; then exit 0; else echo "$1 shouldn't be here, removed"; rm -f $1 ; fi + + diff --git a/notes/ccm_tv.txt b/notes/ccm_tv.txt index ba799b6d..3ff4b77a 100644 --- a/notes/ccm_tv.txt +++ b/notes/ccm_tv.txt @@ -3,2565 +3,212 @@ are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag 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 + 0: , 54C92FE45510D6B3B0D46EAC2FEE8E63 + 1: DA, 7A8984228DCF944903936CA9D7709ACF + 2: B95E, 1056DE0CBBEEA760ED2053FFEB554EA6 + 3: 58FF3B, A42DE1A812D29BBC6C1C5AC808565437 + 4: 9D6E6FB6, 5E8E0422792999381ED669CE17601D34 + 5: 40D49E851D, B076B4ED79BF0155B39A743550593944 + 6: 015356B9A6E1, 8D62CEFC451CAE4A21C1C579C6CAA128 + 7: A2CF0A77AE0DE2, 97B9D201740FA59E863513EDACC59FFB + 8: A44C68E52F95B48B, A461B79D4D9B8ADF6C6618E6ECDC059A + 9: F56B8AD68AA31F22B9, C5C7D2E6FE34D94CE72B86DA55679080 + 10: 5C17EEBF4E348CBE3278, 29FAE7B470CB652C501343FE23B25894 + 11: 1EE960BFAE360302D834E3, 8F8F475EB9BAB29CE14A9CF42C30B148 + 12: EFF6BA1F2B1389237C6C045E, C895302DD8E75096951EF5CA63BFDD67 + 13: 5A1179A4047334CCD9162F36EB, 110987D37F45422625DEA402BD7580EB + 14: F26E2C27E7D287B182FA42879978, 530FDE90C13A01EBCA86449073A3B035 + 15: 77BFE79B4BC87116EC5232606E890F, 280994EB0E16C7CF10F31BB60DBF52C8 + 16: 9926A4CE1AD70B89CC0050A58B958742, A635B4272EBFA1F83DAE270452D877E7 + 17: BAAF99CAE4753E3304D6F8F9C0CD366C68, A6F606AACD0B87923B43C3EB61AC3965 + 18: F72453C6765352A31494FA02B388E407B1FB, 0A446D28B7C5845C3621B4D3A0FA98DB + 19: A7372589A86B2E137F124A96618095EB5E1435, 3C59A6A858947FEBFD32441E37309F1A + 20: 5683E13A4E82A1AB8B3DC2051B6DBF2E1F2BB417, 459D1B0D2CF2C30B5ED5C237D07DFC19 + 21: 33594C4B84536C23DA5AB2117E9267258CCE5DEC3B, 6E4BB70A72343E142AC4E31CE0FE6A77 + 22: 332EDC9A3BDB90DBCCF317AC55BE5855CA9BCA2A73C4, 9FB310E5FFF5C754EE1E5FFF865F1656 + 23: 734618677055469335FFD574B008F2C68B78633F79010E, FAD31386E42BB4EA76A643A9004A8CB4 + 24: BA6F6ABA2AF35895F7F966D71F4E91A0BDD1DD551826F861, 25A3EC1C91C26283BAA5975390285AB2 + 25: FF519213E858E36AC8D92450F81CA46C8CA8AB129A997EBB36, 0D4AB2B7A5EB02242C01A81CEBF5D84E + 26: B1F80058C3B4316EA86E9A898CD0B9C0366DFCB2AEC0799312D5, 0F4FF2759EDDF6349F4E23F284FAAD2E + 27: 00BDC15012F8183112D5C3A135DC60DC9C764A04BD39A8E041F1D9, 0C68BC9E6A6BF1B01743F3183C9B7C80 + 28: 3022FD12969D925365C553D98D59E5D1EC494540909D1FA794F41E18, 05E61844943E78DB9BD417DDDE9C98B2 + 29: 4F4A4554BFED6BAA09E3D8843C4EA3807B8762799C1D21289A46575389, 3A59A6DC9230020FE061466A92BBCAFD + 30: 6AE735EB15D9B39C8AD0E54F45307AAD97DB9F8A2A66BDC9BABCCFBD54A3, 0BDB365E493A9E160EEFD7DE24101870 + 31: 4AF19F00EAE55FED2304B94FBCA29383042F2BE711041323C1D9F14BA63383, 94561581E496553D068052BA698683D2 + 32: C2438BC46A92A465E0DB41E638CC6C8E0029C4DA842CA4140D73F90985EABA9C, 0F5A69F52AA8D8508D09E642511E54E5 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 + 0: , D01FACF2BB577BFA6194800E53FB4A00 + 1: 65, 92E48F7300FA2697E9E0FF80DD187237 + 2: AF5C, 332863BC515649D5BCAB6A2FE5F5250D + 3: E7C89D, 49A641F027C65A15100009D99E79CF3F + 4: ACB36D46, 53DE328A8B4B14CAD363BED53DACE8A1 + 5: C3ADAE6CCF, F713F5079BD77046F95D8685CDF522DC + 6: 5A8CABC912DA, FB97B059D2BE1273497FA8D2739A1505 + 7: 27F101DD6D0894, 266ACEF34476A0E64410D209219335D0 + 8: 66164DA09BE2F46D, EFC64C01890A5B562AF39ADFC48E1CA9 + 9: 1B0018895394753995, FA894E1C882D96E35A4C238708931F3D + 10: D346062826187BAEFC3B, A036AE1D3C02E2AD23541DE095AC7B84 + 11: EFB375BA1138339FA1B504, CDD4232FF4664D59D5AC6BE32CBE1B35 + 12: AFCF494078D7D7E6D9803FD5, 07E06ED923F76150BE82C1DDCB62C4DD + 13: 75DF2EC91379408DA426A444E4, 440ACDF2A6567FA3A5009DDFE502A1A1 + 14: 3B36B62B01E324E702694305DD29, 4093598607DCD9993845D1837D211FE2 + 15: 7DF6595C9711B164C99CB246B4D57E, F364993B2C187058F466B62D11E0F94D + 16: D317EE9EE1746D1B89A4CC52D88F0819, 41856B0B229D38344FA718E04CA57A8B + 17: 85252277A97CA7553007995BD5A0DCD372, BDEEAB636BD1ACC8D5A23F658150FA30 + 18: 36FF305AC6EF662C155A1C15A6C195D3EC88, 9AC48EF07A510E308E06E79C0C80C3A0 + 19: 51645A614313E978F6DCE7BBDDEDC33E3284AB, E9F7723E763AD50161C0671C4034FD0A + 20: 3CB9E6D0730FE05F903D338708AD8E34BFBB3285, 8A12185DAD518049F0FAC945A8FB305A + 21: 276E37D246C40ABF32DC83007B95390EE801CDA6E3, 73FA1D310D031E0A0A3A1421661B4697 + 22: 4444BB070EDFBD1AC59D0BF70D66F48F0830069F3562, 9DCB6A99CBCCE3C8AEF29F06AF5057FB + 23: D16BA084CF82EDD2E43349311140BF3A2E37DE40544BF3, CB93C5AD60C700D4EA653136101AACCC + 24: 3FBAEBB36E2B74014043BA7D72F899B0D8DED883F592D778, 54DEA31D7EEA863A06A16D6C9B25DC13 + 25: 3614B5428B790793F31E23670A38A070B65DB8E51C61FEA9C9, A91B750FD7ABFF18376C982DFA0C8872 + 26: AC15FD90A4C254BA1406BE7DBA5694BB2625F634C69F45CCCD04, E6F97BCC8526BE3C04BA139EB50E65DF + 27: B506E83557E48553BD8557411D2C17D64005E734BA5A5FF1CF98B1, 6FA001758A19F783A71C97AF1AA61F94 + 28: F07721663400838947EA1B9404D9683556F2D911429A9F59E3F5AD31, 376A1165A30C919E96C3706A4AB5DB37 + 29: 98B5EB8FE0005E515A585D8F44D838FA590054EA5201CD444366B6F71E, D8C58448F601F2C05F24ED2CC349C78B + 30: E36E2FC225767CC1E2C388BEBC2C81C340FEF5B504575D5FA49682E1C214, CFED56F38CA4F84E6E1E16CEF50A6154 + 31: 7A9FDD8E481B822B3D282AAF726944101ED61DAE73782DE055D7D305E36B27, 328B10841E977041CBD13C39CD70F03F + 32: 48AE8B5FA027930A7BCEC27468D795D0D8E6099C5F0558361B3AD20C1ECFF89F, B180AA9353E9EB6A22710A4DE872FACB 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 + 0: , E106F41D61402E532662213EBA471BFF + 1: 05, 1749600C7045647DCB3293C0724E7A21 + 2: 2355, 80DD597665723F4AEFFF760C5C6C5EE2 + 3: 5F4CD8, 59AE54E63A8CF4DBAD050B42CE922013 + 4: 75F63A43, C31B6BD3125C036C99507DDEE0197201 + 5: 51D4D87B8D, 0F3872088CDEB0E958C35F343677AC24 + 6: 8CF6D81A274C, C8E688954E72A052B5F8D1CA46FB44B0 + 7: 5EB8283B299AB1, 5977CB96C8D439DE3A86AE0452A2EE34 + 8: 829B1A4EA8643EAA, 1E892D3DFB73A469035CA81DD7F937D1 + 9: 0FEEF9504CF0F4E282, EDCBED7C61E8E2D24392B4145218F0AB + 10: DEF7679D3073D461A94C, D7ABAE561901CBB30FD7D9467C088B3B + 11: 625FD679C7354A74D62893, 450E3954857640DDF4C7A95A6E202A1E + 12: 3C9E76E4E2D4D95FEABD5C90, CD4467F695B7ED8973AEED5A822B347A + 13: B1B6294ECEAE6AEE4853731CA9, 6042302DAE598822BE8554BE038119CF + 14: 204BF480582D4BA408BAD23CEB52, 4D6B87334E1BFB9BA2D42B89B24165B2 + 15: 277591770E3E2DB97A3011D9616991, 75D0A4B9937748EAE7794056F7A8A7FE + 16: 5669F75D0C908BFF7B82095231B86DAA, 3E816776A73FB89276534A3646C0F8FB + 17: 37E621EF5A043A83FC98A65329891BC031, 159A823EA61B3A47B42EFCF12F304725 + 18: 18AC6ECF3F478A0797BF813C871235A9D309, 9B415B1B3A933B22C9027E2D72764956 + 19: 671484C7587DAAB885C7F2FAF030081B452CC6, 574A63D113A5ECEC877D5A368A3160AA + 20: D7AB0F7D46B7ED976C8F6E7D0C6AABE3CAAA5A6E, 266C7A025C4EDF657DD42EB82BB6616A + 21: D60E4CFC6500E237276A69F35AE4BBAE17371392EF, 6ED2A1673F8B4DB795547D9D93D76D8B + 22: FAC6E21979D8D9896C790CB883C29F84D6820AE4FD4B, 1C7B6D73200E3C2DC5C701152F38EE8E + 23: 39240DC2B544CA8BEBBB4EA499FD48A5EE707198AE8AC8, E7FFD169552665ADE7B9C0DFFDD04EBD + 24: 6BE2C24172CAA192D55CC3E640E34675DD7F441CE5DB0FC0, 760CA976355281F76E49A2856A4EC7A0 + 25: 0E20427218D6447D6E23FA4832CB8D2A172B23FDC542B41524, 27D0F37E109252FF5E6F6F703CA784F5 + 26: 0AF75BD89028A5691B8B7993B9CE4FD24334A312DE28212C8B2C, AFE4C6B193B0F1796FC9E6C23292C060 + 27: 6830D8E2E6DEC1476796DA44C982D36409E268F966283A66E801ED, 9E2C92D5B30EB0943E17869ED4C789EC + 28: 75ED280BEECD7768F7E032071F0E06D9D6BF1C9FF8E5DEB536DCD4BA, BF0DD11D633DBA5DCD25F4172765570B + 29: DF1FAECC1DB24718236B18B90B354F405FD5DE1257EC43F811F4A43DCD, 48D182E572E794350BBDA91FD76B86BC + 30: 176681E38ACACCD3C625F554C1F7A2D7C2C474C9444EAC8929B8C36EC05E, 080E109FFC5D247F1007217DD642BBA3 + 31: 8A8172C21D88A1FDD43089C545C308507617F7BDB02C47CF2719F1484407E2, 1A0D10B0AF5BE21BF19D570D3FDA5BCE + 32: 0A93CAE2B95517773A4009FD3438231A207B9D46AABAE83FC4E1057EA4E2D6B4, 717AEF2F55DC8669F7E2D0298F8A7BE9 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 + 0: , 33B3DF1B59C84DD3C15E4FEB66173303 + 1: BF, 92DCEBF1C11DD0B028DEC944A555E4C6 + 2: 8A4F, A859C7F76291326D821BB3C7519657C0 + 3: BAE755, 14D7C2EFBCA1063460FEFCEBAE3AD79A + 4: 25695BC6, 9358BC434B14B59ED17F9C0D3F51DCB1 + 5: 1D9FC70ECE, 2A86578FA3A8C702E2E6723DB9A9893F + 6: AC39F1DF3661, 3F9C71EE0506FD2BAFFEE7200D22CD92 + 7: D330A915EED9D0, 22DC25EDF5ACDEF8358BE2A3082112BC + 8: EF913ADAE6380507, E87D72BB6395EEEF2AD4F546B4033DE8 + 9: 5EC16994E762BCE467, D7700F7BF4FE026A2076F161C3383A0A + 10: 7EEB4910B7C2B540B490, 40C88A977E1DCDDABD749ABC9A0C60F8 + 11: E5DD32FF54D39451CC2AF8, 541B1558B5AFF6E9EFBEE496D60AD65C + 12: 242C2900F859966B6627FF5C, 1CED148098350F3A5D1B5634180817A3 + 13: EEF025B9E4EB867B127EBD19D4, AD0179A07AD1418C25F40E123C2BEF47 + 14: C5E812B0AE37098686E2C4452C12, 02FC88AAA62E34742BB8577A651E922B + 15: 7BCAB32D1A871A62F9C781AFCAC60C, 2CD1C11EE197D9E130359F76E7F49251 + 16: 1E82D8B8EED9A730D1670F0DCFF17B60, B7730261560EA6CF715FF7006D5FEFE2 + 17: 0E1966992E360DC81312B28ECA6865B811, 10C40ACD169CB0F2A6FFC99F9A5516EA + 18: 5F5418C1322BF7EB828CF27C1F72086515BE, 90F8ED0447171A10476DED39F7518075 + 19: 6C552506FA167FB8AA12E9F416930031487D4E, C992009F83F31A7BF922BFAE68C4134B + 20: 38429D966676406B17638DB7F9F7205250408BB2, 3385A50E9789D2C63835A80EFE9CFAE4 + 21: 56EF426315EF96BE4C60B49F41C9BDDE2E0CDB3C22, 2D51D5B4F5B04BEF3BC1A7CF1AEA70E9 + 22: 314B075C097EE531ECCE6AD7CEF22A72AAFCEFB02029, FB7A7D84D23FF524D060871D90FAC106 + 23: 61CCCF7E2A9B3E46CD0A94D7F4A7617BB0DBA2D989907A, B3F4D46094732F3EDD81E0755F0C52EB + 24: 7A812A3BCED4E0A72FB81218BD5A4E33D69CA18834FFAE61, 487F80588B41F4E1198124708987667D + 25: DBFAB77EF07AA4C9ED2B05500BDFA00FE3F19F15F97A74880A, 84504D9EECBC6CE11B18BD105DE55E2C + 26: E676D4739B01B5101E36BF8D9F4FAE8F767C028E83A6D5B39664, 3141A05669807BCA30F0934F599FD077 + 27: D8FEBD069D87C1EE504CB8F72ADFF2166B14BA40B17B4DAA439668, 1D99A301943041C2F7A71432DA736FE0 + 28: D98E2A1CFFAB28341F92C41971A21AD0FDDE733EA25F2607967CD0C3, 42E05A53BF4F1A6C5B7F84742ECE031B + 29: 13FA412B484945C1FE8291A7EB8F8FB78D2DC2C72C5132386EA82BF4A6, A1A8E8B026DD116B0F9C73EB14C1C7CD + 30: 10ABD2DC25C8BA594FBFA9312E69C1A2DBF326475AF2080E55E3611FBC0E, 49DF8A5171DAC3FB684BA2CF7FBB3D3B + 31: F401D2123619B81F54F307B783362CC40FB4FB2433CF51F5543A147BCD1FE5, ACBB670CB3722059B4B9FBEE67703E98 + 32: 839A9BFA1D3CA37924BC6648DED2291FC61736A3638906D9C5DA28A66AA684AC, CD07B83C8E0C3E6FB4115A149BDF6FDA 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 + 0: , FF73C6775C61DB36D9B5EEC812091FF7 + 1: 5F, 7D2AEA62A5202E3C4FBE05F33EBE4CC5 + 2: 0EA5, 312ED15FDDAB6EEEAC6AF9BE9CE698FA + 3: 968F95, FA1AD58B85B93B5A4B5096C881F773C3 + 4: 9A8F4069, 8911063ADDF79E27D9DCEFF3F440E6D7 + 5: A5C0376E27, 9553F44B0BA8039527F8E05CD70AD8B0 + 6: 5B097736F3DA, 405B7EC685FC94903B36AC8E700558B8 + 7: 616810AE303B2C, 64C95A2DF5263F7BE6D1F9F3CF88EADE + 8: C8D69A2E1170532C, 073A7E426266237FD73D8109F55AE5D3 + 9: 3E42CDB7DA4A72F2E0, 48675EA4302CA6BFE5992DE96CE43BB3 + 10: 88532CC1F3E321F66D64, 528B3516C6D9A4B5390DD32C2A2E6C19 + 11: 9216A8FC9A961E7F602F7D, B03047186B783844F5B6757057576B38 + 12: 89B0858D4FDE6795EDE19CCC, F4530A2DCA823307AEDE5AF34E5C4191 + 13: A676E20BB0A5E84FD0B9149BF7, 11B823B315DA93B0E15780851526D4BD + 14: 903AD5C108C43A80436FE2117EF0, EB1C79C7DF20CE2967A99783EA8D6EF8 + 15: 81774C36F46F67159B7FFC24C080D7, 2E9E4812D9A92977EC34922782B6420D + 16: 63FD1C3F692D64B2DA3982FCD474A5D4, 04171AE84857713A9BABBD4564875D33 + 17: B1BF6AD99F83C9173C6C021ACA74C5431C, 38D17D4F6AA3C24B8F3B465EAACE0A1E + 18: 0948D1ED59F07DE44A96A76E05B0B6F7C309, 1848D886FCFF35E85B0DC3CBE5BEE7FA + 19: 3458E5911222F9C555A1054C7D9748876DA39A, 584AFAE72FB6065A74BE016CF39D2E86 + 20: 641F3867185D0605E9D666AB605187E75A1299EF, 6F9332E6FB5EA0CE811E3345593CD163 + 21: 0676622D07733EF31A765AAB1E713FCE329277FB16, 88547474050FFC986930CC04BA8A03F0 + 22: 79861EC2FD2BCC5C12B69F30A1575FC66AC1405281BB, FC68EEAC8F39ED69D312AEABF8000084 + 23: CB2731835A576F7F8F2C2786D786FB6186E2F85D89DA3B, 3ED9E95BC51CF6368E6EF63667B35BD8 + 24: 3CB1C02FADB6DD5483BC5D3C03D944102CFCEDF82B913402, 1C3F60C989A6FBF41A7AF4F29115C334 + 25: E69FAEA5E3D0B76EF9E70F99C5918D934D0E9836F248DB9EEE, 7F1916B2CF7C9A5E3F5581D365ADBD31 + 26: 36779AD755A9DF2DC3C5824DC2F7DD4FFE038628A4E1A1C33AE7, 2BDED3703468D267F8AB7EC0AF8F1E65 + 27: E9D325646A41EE5AA7DABCDE98DE83440A7DC02714BA0AEE017E22, 972F4D7832F3371C60DCD04A6DEDEA15 + 28: 0FAAE3F6028A28A80BBFE71FA7AA9042E538B41A0D514D6EB4EE6029, F7B3925495E260249ACC6E1CBE956BC5 + 29: A9CC39EFFEE354C0E0579256AA85CBAA7B10E670DD3828A7A05DA0F49D, 28D9D20187AFE70AD9DD16759F0EFEB5 + 30: 032F4BBB4EBF2E65758C541FDAFF2107DDBED399739849F8EBB41AF9711F, A3436981ED637CE5EEE01B380C46ACAD + 31: 7B321ED831CE96A603668E3E74BBC7453749A03D04A1B38E95966E6CC488F0, 88D1DADF2C1EE0BA579D0A8A90C1E62A + 32: D862B0BD0E2178AE05AEFB14F34C791547C5956F1F3B5BD525926578DE383A94, BF32CFE059F27222DC55D3E7CE7C5F10 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 + 0: , C85F41475E06F25682F855C3D45A6523 + 1: 25, 437BD73ECB8CFFAD9B2876F08D4BDA36 + 2: 5ADC, 5C762058A5EF71278B69F567F18CBE51 + 3: 95E541, DF099E8218AEDE8087791B38298334E9 + 4: 2DAA84E4, 7437094198E4AD2647C2618248769A26 + 5: B9641C5855, 91B02EC44D22460BFF22BB40C799E20C + 6: 102012BCEFA5, E60488DA65D683182F0EFDF9DA52A78C + 7: 8F14972CA4F8EA, C26B51F20ACDEC7DCA911500CF1241ED + 8: ED2714B652972256, 8BA29459D5D370FC608EE362B55B7633 + 9: BF58A269A4F59CE0A4, D69080820F836E5B5CA8F393E61ED009 + 10: 44AF1F715ADAF26C6EF0, FEFBC7DB75ECDDBA4A13CBF9A57873D8 + 11: 77CDE1B951F0803893642D, FBF8B80B061703504D8D3A7718366B6E + 12: DE599BAAC9D3EFD9FCD47E44, F636EC35D172D661F01746FF86688B95 + 13: A792B8359050C4866572977415, AE67D4EED92E63A14003FBC936EEF43E + 14: 62D5A7A4DFB78A175831627987CB, 25F7B440DBE9902C28B28E50BF02C516 + 15: B6F289459F924C76586F4EEA0C1CAA, 54266B4424C3AF6E81F6CC4F2437F54E + 16: 884B7DF3395F063DCA26BDF9F2FEF4EA, E3C2BFA1964EFDF78FDB9559C8031C50 + 17: 774962377B8731F2F301B930487518801F, F35B54264711D843D23636BA6CFA3E4C + 18: E9C8D1164F2B196C7305406179B232E45F1F, 2A13E034A136EBC0ED3361737EAD214C + 19: D3DCD242C952C5589E00B65CD826CA87691B8F, 9D624D482042798DB896B55D801EAD98 + 20: 57065B2655D4799C0478FE7E8463A2215E758875, C8FB052F14F9DF6731A9C8B566E71D53 + 21: FF736FDBD23593D9BC9A0D8CA7D819F550EF969322, 5CC3023029790BFD43204B27D52D7D7E + 22: C562B7387B8F1D3DBA22DD1636C9C4AB443F2FF15F70, 195C928EAF88BB4ACBA8A01B4EBAEE6E + 23: D0AC6EA8A804DC261304D4821E6AD7FCC2F0DC1A299B9A, 34FE2034CCF09A98DD50581DA8BCBE39 + 24: B65933A7D7C8EF19C1BDEAABE2B4CE5E821459D953565EF8, 42B20EF142EB228803D6AF47C6482BEB + 25: F1F4FCE842EFEF563F6F047956E6706DC9B178D00D82776D74, 3ECE3050D8C80319821D5F57A7CA7066 + 26: 4A3F10F4E34210A5CA1B81AD4269CBC3FD68AC662BF0E9DC9935, 0BC0724AA9A194D8C75EE6FC8E7F28F1 + 27: 077F3C055303FD669BC1A370B18AA7F31D3C8CBFF5A69381404FBB, 872C7946401BE70E677B79EA13FB0F58 + 28: FD39D32B27FE5BB8E6512C642D490E0AD0866E386580AE115C85ED2B, EE81712EA57DD54DDEE98EAB3285E6EE + 29: B45ED179290A6064188AFF6B722B37F8C3E984EC37AB5F47B353229B12, 186B3AD0C9F60D57E84992CBB2B0F71B + 30: 83FF1FD179D518A414148C15BE566BE4CC3DBE9FF5319A651E862811F152, 4B2942C66565EB9139A83C2EFD549D55 + 31: B8176469E6A0D5797ED6421A871FEECDE48ACF011E394981C43AC917E8FFD5, E9B01383DB1A32E6126BD802A6C6F47E + 32: AB6A0AA29B687D05735167D78DB697BA2478BD14ECD059AE9D1239E7F2AB48FD, A560A30FD87CF28BA66F5B2638567E4B diff --git a/notes/cipher_tv.txt b/notes/cipher_tv.txt index deb7b941..c649d26a 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 @@ -1433,113 +1433,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 +1487,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 +1647,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 @@ -2125,747 +1965,3 @@ Key Size: 16 bytes 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..95cd7c1a 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 @@ -313,25 +313,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 +332,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 +352,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 @@ -513,219 +459,3 @@ EAX-khazad (16 byte key) 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 index da83e0ee..1e7a6cd8 100644 --- a/notes/ecc_tv.txt +++ b/notes/ecc_tv.txt @@ -1,618 +1,6 @@ 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 +ECC-192 1, 188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012, 7192B95FFC8DA78631011ED6B24CDD573F977A11E794811 3, 76E32A2557599E6EDCD283201FB2B9AADFD0D359CBB263DA, 782C37E372BA4520AA62E0FED121D49EF3B543660CFD05FD 9, 818A4D308B1CABB74E9E8F2BA8D27C9E1D9D375AB980388F, 1D1AA5E208D87CD7C292F7CBB457CDF30EA542176C8E739 @@ -735,376 +123,7 @@ E7A01EB2E2C10F1AFBDD9BB089A8A35CD9E3847D718F11, FD1E7CF082B2DC167E1428F12735BE09 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 +ECC-224 1, B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21, BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34 3, DF1B1D66A551D0D31EFF822558B9D2CC75C2180279FE0D08FD896D04, A3F7F03CADD0BE444C0AA56830130DDF77D317344E1AF3591981A925 9, 2FDCCCFEE720A77EF6CB3BFBB447F9383117E3DAA4A07E36ED15F78D, 371732E4F41BF4F7883035E6A79FCEDC0E196EB07B48171697517463 @@ -1247,150 +266,7 @@ BC0A625D266C24541FF22B41B57229421ED2BB1D8F8BFF407CD3A1, 9829981ABC910F195474EBA8 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 +ECC-256 1, 6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296, 4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 3, 5ECBE4D1A6330A44C8F7EF951D4BF165E6C6B721EFADA985FB41661BC6E7FD6C, 8734640C4998FF7E374B06CE1A64A2ECD82AB036384FB83D9A79B127A27D5032 9, EA68D7B6FEDF0B71878938D51D71F8729E0ACB8C2C6DF8B3D79E8A4B90949EE0, 2A2744C972C9FCE787014A964A8EA0C84D714FEAA4DE823FE85A224A4DD048FA @@ -1553,170 +429,7 @@ A0D2E82CA5E358392DE9951D10B533E405FF396E226444B3B8F22B54A64B, B859547C4E7207BE3C 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 +ECC-384 1, AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7, 3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F 3, 77A41D4606FFA1464793C7E5FDC7D98CB9D3910202DCD06BEA4F240D3566DA6B408BBAE5026580D02D7E5C70500C831, C995F7CA0B0C42837D0BBE9602A9FC998520B41C85115AA5F7684C0EDC111EACC24ABD6BE4B5D298B65F28600A2F1DF1 9, 8F0A39A4049BCB3EF1BF29B8B025B78F2216F7291E6FD3BAC6CB1EE285FB6E21C388528BFEE2B9535C55E4461079118B, 62C77E1438B601D6452C4A5322C3A9799A9B3D7CA3C400C6B7678854AED9B3029E743EFEDFD51B68262DA4F9AC664AF8 @@ -1960,7 +673,7 @@ C6EDECE70CA3A73D72E2D4DA6B60ED2141CEDDAED40E47A82B6345319D4512D113BC9546C0D35C4F 14FB17FC5E5542A37B1DEC730953390281F0D161705D818EBC93784C3B9648FC0D14E3BE76564ABC5C38FDDE969FACC1, 4D466DECA0E5F2C664B1C170485D0435CC913B4CEDCB8904E7EC68025C5E24F54250FF8EBD1AADBA575CAE796BA20E32, C1B53467F914F7BE0779A44AFC51735B26B644A1ABAFF7027BF87BE11FD80B816CAEB33C735ADC55DBF4C2118608BA58 3EF147F51AFFC7EA7159C5591BF9AB0785D27424511884AC35BA68E4B2C2DAF4273EAB3B6302E03514AAF99BC3DF0643, 186F34F7D45ACBEF7F7F7F93C57758A2A578981E9939AFA22AAD14879905E3694737867BF73633CF9F7E25C6A598FF24, DD0B1F68005D3588418D13E69D343B10722C96285A12B139049B8D3E1644C2F110D36BB7F919BC40DEB99EAF443D3482 BCD3D7DF50FF57BF540D500B53ED011691775C6CF3498E04A12F3AAE184890DC75BC01B22908A09F3E00ECD34B9D12C9, 8F6F64EA2755FDA51C99A50B57D7F438DA05A117322884A8F7F7928BA92C78310EF578005B1FCC2FFCFFE79C0802B2E4, D32301BC33B7B167EEAB552E05A20AF64E86E65986D5961C9E9EBF56F4D7F05D428EBDACFAA30907C50D18E3E7F7927 -1.3.132.0.35 +ECC-520 1, C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66, 11839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650 3, 1A73D352443DE29195DD91D6A64B5959479B52A6E5B123D9AB9E5AD7A112D7A8DD1AD3F164A3A4832051DA6BD16B59FE21BAEB490862C32EA05A5919D2EDE37AD7D, 13E9B03B97DFA62DDD9979F86C6CAB814F2F1557FA82A9D0317D2F8AB1FA355CEEC2E2DD4CF8DC575B02D5ACED1DEC3C70CF105C9BC93A590425F588CA1EE86C0E5 9, 1585389E359E1E21826A2F5BF157156D488ED34541B988746992C4AB145B8C6B6657429E1396134DA35F3C556DF725A318F4F50BABD85CD28661F45627967CBE207, 2A2E618C9A8AEDF39F0B55557A27AE938E3088A654EE1CEBB6C825BA263DDB446E0D69E5756057AC840FF56ECF4ABFD87D736C2AE928880F343AA0EA86B9AD2A4E @@ -2290,3222 +1003,3 @@ F6104B4A55007F4A797E765CFFA5815FAA3F793C1AE139FA46ECB20B6D5B6C829206FA15B6F67EEC 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 index e9fc93c0..feb58bc9 100644 --- a/notes/etc/saferp_optimizer.c +++ b/notes/etc/saferp_optimizer.c @@ -1,4 +1,4 @@ -/* emits an optimized version of LTC_SAFER+ ... only does encrypt so far... */ +/* emits an optimized version of SAFER+ ... only does encrypt so far... */ #include #include @@ -170,3 +170,8 @@ printf(" }\n}\n\n"); return 0; } + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/notes/etc/whirlgen.c b/notes/etc/whirlgen.c index 2062ca82..f64650ba 100644 --- a/notes/etc/whirlgen.c +++ b/notes/etc/whirlgen.c @@ -87,3 +87,9 @@ int main(void) return 0; } + + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/notes/etc/whirltest.c b/notes/etc/whirltest.c index 80645377..cf2e87cd 100644 --- a/notes/etc/whirltest.c +++ b/notes/etc/whirltest.c @@ -12,3 +12,8 @@ int main(void) } } } + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/notes/gcm_tv.txt b/notes/gcm_tv.txt index 80d41b17..79d3b8d6 100644 --- a/notes/gcm_tv.txt +++ b/notes/gcm_tv.txt @@ -3,376 +3,212 @@ are of the form ciphertext,tag for a given NN. The key for step N>1 is the tag 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 + 0: , C6A13B37878F5B826F4F8162A1C8D879 + 1: F1, 397F649A20F3F89A00F45BF230F26B61 + 2: D6B8, 1653F67C9C716D0FC59F3B14154DECBF + 3: 673456, E82EFC79B30CA5235E2DC8BE4C14265D + 4: 26DD7C26, B8D1F4DB845F7D7079DEB8920949C14D + 5: DA62AD1487, 828A42329320764E5FB74D44A6108F4B + 6: FB79F7D51742, 865415BD049E86F3DA2E0B6E25E1A50C + 7: 9D96D1034166BF, 50669247A5B338E183DE5139831CD6A4 + 8: B466050E1330B20A, CB264FA7853A1FFE86E1A07CFA7C7319 + 9: CF16F0B3D9FC6183DF, 647DD6E1F40F385E1DFE6676FB036242 + 10: 14D90928C7236050096F, 930CAAA5536406218885475CA823A973 + 11: 4F2322D66A7079BD7DF519, 3B3931D47413042FAF1313F1041509A3 + 12: F1497906F1D8F4F9E47E4BE9, 469FB0D62828427C2E9BA04041A1424F + 13: 2FAFA2A3EEA4C000702E58D1D4, C9A484FC4ED8644A06060DAE2C3D1568 + 14: 5D707F8ACF319413D220AA2FC2B2, 0EE9AAF5B1CF622ECF6C4F5E5FF4656A + 15: 2C19DBF966D24B2713F82B69934060, 8676246A2F7795ABD435B3C6B4EA6E7A + 16: B3FED6C2315CE6D98729DBE69270A11E, B8AC739AD154744A33E906C34D91BD4B + 17: B2BC44CE088BC3F654B9703D9C691F17B3, BAD8314A171BC0119942136C5876AACC + 18: C6E958E3E9AC836C9626BD66478974D26B0C, 4E6D61833E9DB839117B665A96DC686C + 19: D40FADD078B474EBCE130FB44DDB4824077988, F43E3CD978A6E328AF039CC70E291E1C + 20: E177B3DF83A117E55F255A6C2CD78AFDAFDA307F, EEF1ABAAB9CBE0EE317CC79E7E5E24B8 + 21: DBB4569B3E305E4525F1F7B3D2AFEF226F397E661D, 65ACFB70132EEE1D47319A550A506DB5 + 22: AC2CAF77718DE59131A6B745DE9F3A9897B17580EC71, D8DB9006A9597F640F2594340D69E551 + 23: 8F62022F72A0D769D2D095A55E28832950870B2B44B0BE, A7E196F869071B7BB713E8A2D15627E9 + 24: 37F5640F820384B35F13F8C8C7DC31BDE1E4F29DCFBDA321, D5765C39DBCA72AC89100CCB8864E1DB + 25: 25059BFC302D0F8DD41BB22CF2391D456630C06F1DAF4DFA86, DC2FFD153C788C28D251B78AB8B7388C + 26: 151F158CC4BA9393FDB153C4C72911C120BAB519FAF64719133D, C61915006038BF15DED603832FD179DE + 27: F5DCF4231482F72D02F8B9BE0A41113D35AEA1CD85021CEC978D9C, 9CBD02C557180FBD0868C87A0BEA25AE + 28: 5D88B5554A2ED73054226473676FAA7159CE12B5357D635DDED35B5A, 5AD11CD6B14C59E64B5B26DFBD00FB5C + 29: 5696C7066EA09A30FC8BCBAD96D48A5E5FBCC8756B770F0A89B8711911, B9EA5F3BEF0599D385A9ACEBE4064498 + 30: 1240FED47B305AC1883F8CF137D58E79052B4E686DCA1423A6A2BECBD5F5, 036A5EA5F4F2D0BF397E8896EB7AB03D + 31: AD9517BF392C1EB56D78EDE1C41F3C73B72304DA47F400C390C86B37A50C2A, EB3E026D518EED47F6C927525746AC54 + 32: 2AE1CEED83C6490A7E5752E91532406EAC6FF4B11AA770EFFF1B255FDB77C528, 74BFBC7F120B58FA2B5E988A41EAF7AC 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 + 0: , D595FEDAB06C62D8C5290E76ED84601D + 1: 4D, 47A6EDEF8286F9C144B7B51C9BCCCACF + 2: 0085, 9788DDF89843EC51120B132EB0D0F833 + 3: 463701, 673CB8D248E6BECD5A6A7B0B08465EF6 + 4: F5B3222C, 1C424282D7FB427E55285E20FC2ABFF9 + 5: 3A4A8361B2, BD40E631B054F280C7973E5AB3F06B42 + 6: A475866BF2C5, 2067F42FAAA6274270CF9E65D833FDED + 7: 689D0D407172C8, 3BCCFFC64E56D5B753352E1DDD5CCAA3 + 8: D9CE4B051202A1D3, 79B0CCDA3D0B9C9BCF640BC9E6D9CE0D + 9: 0317D68BE098D276B7, AF35043DB6213DC5D4F3DFB8E29EE537 + 10: 154CEF0C6F37AA0A73C4, 61E598A8C6D17B639F9E27AF55DD00F3 + 11: C3DB1B2B6CCC9170B9C05F, 966871DDD6E110711FB9DD733B6B2B3A + 12: E4F22383C75BC0FB0E59C5E8, 971536AF878F4EED68F59046C928EAC8 + 13: 2FBFB99AABC6209FB8664916DD, 68D0BF2144AD1ADECC4074DAE58540C2 + 14: 5FEEDFD09BF89719A34CDCCD2AAA, 64DEB7D5E6891103AA54C0EB366715D0 + 15: E063A076E0C770FB010D26C3AC3EB5, 0CA321B2A7448FEEF84D4E0AD5BA2DA4 + 16: AFB0DB9959F0906BD346C2D81DC5412C, 425627895E2C4C9546D3227975585459 + 17: 79179C0D4D6C5E0741DD4CA1E8CF28C75C, D0188A344A1CEE52272FE6368DB0FB75 + 18: 8A75521139B0DE3C08C9EAEB77D8018A39FE, 47FCC200D8A384320D2F1A5E803A9991 + 19: 0399381D0A975AE3980A9FB75B991C055AF367, 034915370AF94B96A8A4E50FF9B134CC + 20: 8C189094DB13FBE62EA5C4A53C29A428ED587BA2, 99C58F838423033298897841ED526347 + 21: D91F5144B525AF5D47EF4D5F0AF9915447A55927F9, F6750BF7E089515D35B47BC1C65E2E3A + 22: A4E26B554AA277057A5FE3FA08A6138CEEC6D69BB1D8, 7BBEBF52D8251108C7AA1025E213EC44 + 23: 5C1A8C3A46FCA90D73675706313CADFBB90A535A4B3D5A, E35244A2633478BBDAFCC81161F28B80 + 24: D69F7264FC594057B89181B83582D799AE54E9EE4FE8AD48, D4B29E5C25F9477D9345526DBDE9372A + 25: AFD322D0AC4AF38D5B9CBE0DFE85618C001A7A77CD8FFFCB3E, AD06BB9C59D23D258D6A2AEDD946AA20 + 26: 179CA8395CD8E75B4E5EA07D25C8036AF08B1A1C330492523D36, E3704C4341A834C087500E332B7DEAE9 + 27: B9178EF7774684F43F1FCE99A4319B5A4D167B0A848551F562CD7C, 5D5082FB02B9B494D5883DF49DB3B84B + 28: 830FCD15A09EC61245D7DA258E308E76D3B542F2345DBFC11AE983A3, F50C3332F8D91911BDACCFE228565E5C + 29: 179619B8C7EE9B3121405BBED2AC102A027E6C97EAEDB5ECFEB13792EF, 859EBA3BADCE6E5AB271A261B26DE28C + 30: 14264C7E0A154119BF24B7FCF434E81440D42D54738F0BAE55836849AB85, 0B6C9B9CADB1B6EC71CEA090C8C72834 + 31: 0D7A316F8B873F62CF26CFC569179AB11CBF09D3467936A85ADC265B2C9A8F, 866AE7C51EC2D9DEB32748A1C8B61143 + 32: F8FD1F967CD3632805AD7FA8ECB40F530927DD5C49D31FDBAE49738E2315905D, 9CB1CB84A727C9F42555EB566E0A1DEE 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 + 0: , F769B436C7FB7C0C822E24BB2B2555D3 + 1: CA, B156298625F5634FA012B23044437807 + 2: 4960, A64C73E890F3D77B2C3B3C76C2D913C6 + 3: DBBB8D, 686651A017F89A22F9FE96533C85C52C + 4: 150AD99A, 177F7DE9E897DACCAB7EACEE3CDE7601 + 5: 077055065F, 48B4309C76CAC37BDF11842311BA6CD3 + 6: B2F8CE062C06, ED04DF96C06959524956E8AC5C338457 + 7: DCE718211410D8, 3F8D8180BDEAC2F018EA81615177CC8F + 8: 0F71E2772402AC83, 2130481B2CA7B4B4C8F3EE73B3B3C28F + 9: B69030734E5ADF753C, 8CC4B62BFBC3EA56CCDBF0ED318C784D + 10: 6B8A91ABC1BF2F2D0176, 86EAAD80D148A48086987A40A5631DEF + 11: 44AD00799EC8E62E34D6A1, 016830D58F06F75E54531B45D9E785F9 + 12: 0C4B9381D78E0F0A78B3CEAA, 4A79C58DAB131A22F172F9177DC4158B + 13: 2C56D4625876524B4D8D5F079B, 7B407F704225B25F1F136C984E564147 + 14: 36424D69BACC56407D345B3D7B4D, EB126C255A2DCFD32F69DD5CB61876C7 + 15: FDD3E091C0420D1A4D4A848757FCC2, D319C5C07134D67BA42A4BF312CD874D + 16: EFAF6F117EA9A4B4B83052BBF5A07DB9, BB09D473FE82257146E7ABC2EFF6F631 + 17: 19B71383C414BAC3EF252FFF09F5ACD777, 526DC9AE6895ED33A34A9A4ADB07E1B6 + 18: 9AB6DFDB930D26E00B3D98DD5AD014E08756, D70B95B20C106A5A03F9B803D2CAC3A0 + 19: EEB3C236C3031DE4C3F94BD746677AE84B271D, 9483BBCBBFDBA1CC5F6392DABA2ACC19 + 20: 3A0EBC7536F8717E8FDAFEDAC39E8F1F43C0627A, 3DA7DC2475466CEDF01EB543870A74FA + 21: 79D28D2F149E1D97E910342DF383FCEECF5AFD4C6A, 2364F33BCF6F07E381F7E26DAF802D83 + 22: F1D7C319BAFB740332CA19AB0C9B71728D3AE69BFAC2, 3D4AEE9780A5C98CBC69606CDDDB31F8 + 23: 1A0D80381A186673FB7B52C40AB6C46A11AB0889333C20, AF5C17E3D0D9724EDC1FC438A16B4EBB + 24: 5E503440B22DD6AE6401BA4355C8791BACC598C9E0F1412E, 156D8221BD61F5C108FC18FB2F50D159 + 25: 7784EFDC6F0FC56FCADAFF17BB52DEB35B64FA19C3F391BDFD, A291E8238EF158A2379692077F70E8D0 + 26: 184B6E18032D1A70CE5027912E447C357C72EEF7B20EF0FB256C, 0FA0138FB9480E0C4C237BF5D6099777 + 27: 7AC8FCB64F35B71C5ED0CCD776B1FF76CE352EB57244085ED34FE8, D995B3C1350CC777878108640C1CADAE + 28: 86C7A01FB2262A8E37FF38CC99BF3EFAEB8B36166D24913BDD3B91DA, 25EC6D9F69168C5FA32C39631B606B55 + 29: 91F5D3E3FE0B1976E2915B8DA3E785F4D55768FD727AEF19FA1552F506, AF902DED55E386F0FC4210C97DB9446E + 30: 7ABF5BD9CB2EFF8382C6D2B28C1B0B25540E434123AC252046BDDA74DA32, 713259EDDA9B1B63EB68E0283D0259DB + 31: 5634B23ACEF2874BE0591BE3268C4538698FF2D93D59B39BC86D0137DACBAD, C4054796AFD335B43C60E7E634122BAF + 32: F26C68C36B1E56449595EA4E162391E0C6A306592949F69797B6C2327E533ADB, 7B392AF776A94983078814B6B8428BFE 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 + 0: , 6275E8CA35B36C108AD6D5F84F0CC5A3 + 1: 38, A714210792F9ED12A28F25CAE3B3BC5E + 2: 8E2F, 6357C1F125723F2244DAF344CDFCD47B + 3: 900A4C, ED4E0B318346D5B9B646441E946204E9 + 4: 087EAFF8, B871ED95C873F1EFA24EF8B6915F447D + 5: 63FC9EFBD4, 650D0ED98CBECA07040AB97B97129360 + 6: B6081E94AA19, 6A3BDA8030C5A79B6B9087555A1DA67B + 7: E10A7B9CBB20C2, 59EB55DFD0A37C55A869834E597373AF + 8: 94E947FEE05780EE, 354918527F855264E37DB6892E868050 + 9: 9A80C567AA50220862, 814EE57CC9D51D7D900AB4840C4B072F + 10: A8741BE1E42BE207C416, 2B28AFD8ABE20664D8BAD7535F82F11A + 11: 6AB7E3C68B6682023E8190, 5E48B67541FE83969952394F84D29E93 + 12: 4F66FB634EB258CEE2955D84, F2632C2135B6E1144673B0EF73499818 + 13: B29042F3877C2F5E694953C5F6, 03268A30499D57A06AA873EF00160C3C + 14: DCC7B5D9F58C88F54A9611389B8D, 5515426FF7CF2EEA91BE2B3752371CE0 + 15: B665488BCD75FC02A0DF7994B7CF98, B721531E2A317C254FA2ED306ADCF96C + 16: 9535DC8A72645E34F948B71A5159AA9B, 5CEED93DE128044F0471C65AA8F21D29 + 17: 5CBFC61A23D28562FCA929375E5B585327, 3AA842B21631968D1B58B72FEE090EE1 + 18: 2AC3F780B956A933C0B8565EE527173B8CC8, 16EC4B6D8E2CF3CD0D16E7A5F401C78E + 19: 5067FD65870A4EBF6C7FA811A15270E7F8F17D, 9A7563BEDADFA6B6E48F5C13FCEAED6E + 20: E3A65A188077E5DC171CFF30BE8B27F10F015166, BD5B3D84D0C1DD51A3909F849141B57F + 21: 88D0A65C105823E68BE3987CB205AE0C1A27588FCD, B280221AD0BD83E1D6B37F331F326AB5 + 22: 7C56D987FEF6807EEFAFD4C7EB9D72AA0E037979D91E, 686E1268A8DC9CD0192A383EA6C2D975 + 23: B23CCD0A076CB122750B634B9E6551E0585EDEA18C3245, 6DF30A7F0728E2D549AA411AE375E569 + 24: 767BC3AF206E67C9E27A4D7E814F3B3A65D27BB70BA9DD4D, AB2B16C031FB2C8E85B3B2B38A5CBA4E + 25: 9ABF34ABD43705D62F377449461C5DC239A2A86E5A98AFB159, 3DEDEDA85E6BFB53C6F18726CD561604 + 26: FE756344C05CB12AA0673F1C2069A86556E583FF4B7313A0D395, 21CB0E0BABC3C7E547F5CB207295C0EE + 27: B70F16AD19A6B0AF6D8DBF4E98D7D5ADB944D91BD889D9390C3E21, 2AE67812A22C1C785D3BFC184A1C74EA + 28: A6389032AA9D08BDBAAA5E230E5130665FB4F0CB868F3F20C4C5438B, ECA054EFA3F39400A587839C4F0605C7 + 29: A55A41315EAF3A67A0FD0E14C6E04D03A5E38D0F756719F4A0800B290A, 7A5277809D4B65E663603099B4DFFBD8 + 30: E739633579AA6201A024B9873F28412BB08B08B8616D611BC9D07979BD3A, 390038A93AFD326C5CC1525A24CA91AD + 31: ED3266F8B0DAA7C3DB7814427E8139831CFC0EDE668F0DA83FF7090154410D, DE440EC2C6080048BFF3C5455E1BB33F + 32: 4D0F751B55DA3A2E0B28DE59E9680669FCB5984E9C0DB942DBAACDDEF0879731, 62F96CFE31D3D6AAA0B9F5130ED1B21B 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 + 0: , EB5A8E30D5C16311864E2D8D32859ACB + 1: 88, EAB88DE1EB7BC784A706B2D7946798D7 + 2: BA1F, DC3CEC6AA324AC7D053EFF7A99AD3069 + 3: 9A1457, 4AB65831DE378DFF71C20249C7BEC05E + 4: 2F9496D6, 800745CF95EAE3A698EDF9EC949D92B7 + 5: 84153177A2, F6A05B654435ABDF5F696C0E0588CB5C + 6: F80B7865C766, 2334D0061FD488D15A6AC8E44EA1F4B9 + 7: 872EA486B4EA9D, 3A49671DE347F675AD7904DDF4255F3D + 8: A4EE5750507FC831, 956D09F7C5FE812C6FB982E1DDBE864A + 9: B5874AC964FBFC1A97, 90FBC75F45BFF58B3A1100393955D0C2 + 10: 92FF5FCF1EC675E02E71, 983C96A7BD4A0DB5D3B877911CE8A6B3 + 11: F7BCA69A9C7033D84A2BA0, D4ECE5BB9FFCBB331A646D9CE8078634 + 12: 5E1041B4554C8CDD14AAF16D, 1EF777F307CB96788B9120FFF8A8BC2F + 13: 7BB7289FCAD209D7992EB7AEDC, E8AEFB830DBAED2B4A790FFEF940A20B + 14: 12776A7C937A648F0A8628AD8C5C, F070283852AC030819EA67BF82C719AA + 15: 7293476D9E935EAE9DEB66F697F662, D6322603671153A1EC1453CDA5978E15 + 16: DC12A86C85E7358919BABB15A3BF5FD7, BBBFA467EBA8124DFEC82DB0137D56B9 + 17: 0CC1DAD00A987F9C57E3660D9417F226E5, BB8AF5A0B5BC79BD11C5D41CA80CDE2C + 18: D0049115D6EB5495FB391CDC494022AEAA48, 682FF357B2BC059765C29AE6CA668D0C + 19: 48FC54A401B4C06CE8567AD298B672191C7E84, 493A4AF4C2A8828FED8442C4EFF877F6 + 20: 90779795821CB1B7DBD97028E29DC1CE7D0CFAE0, E126F485F73B6F7B3894B4CF7E1C5DDE + 21: 8CA5C246C8B7C04BD7171CAE2D1A892D66302433F8, 5D73149A3635A86B3C34DEA5B95CCBCB + 22: DF082B665F7A952B2604C04554B81393FCC7C0B816C8, D3569ED7D431176B286EF22414E4CBA8 + 23: 761908530C9069E189649ED24B6A68A89B067C31E9868C, A258BCD83D3FBC7AE2AEF7516025AB36 + 24: 717048F5A31F3C89D3704F90069AC5D5174118770C65BDA1, 067EBF18F7E3DF4EA13F9ABAC682C2A2 + 25: 08C6FCC5D3099347C3FEBA3858A6C22C51298CB591DDB77827, B57BFBA40BE99DF5031918A1A4E2CA80 + 26: 2CC53EF7EB954234E64CD4D60FB1D7157A489ABABC10900FFCDB, 236E769611D16EB7F463B7578770F886 + 27: 2556B46F2E831223D632F2691329A874F517687AF81B8322AC55D7, E213A90DBC31DC261A45A9AE41CFEEC3 + 28: 71241792728594D69791B80AD6DBC6417D1D14D222DF5E6F834B82C8, 601F97617708B1945BCDA8A82496EFB1 + 29: 5003DC2EAAA23F9E2221CCBB9E20116692CCC99B3CFBD0DDD3A8491E7C, 3743155B792012845550205C8949B73E + 30: D0589675357E850333F854FBA160688F06D122DEC00CC2620DA0B2770765, 20E085752FC4D37791C22501ED1DB6AD + 31: 645B46D2D114EE7329F14AC1D94E6817EB385EB80C61F014F90530749079EC, 8A18DE86F9555A1070D0BFEDAC15B14F + 32: 068389206D37BF5A41C58075FC98901C3B42E6F2F13C09F4E92524021BB1C1C8, 370B86914D63CFEE8303D538A6BEA0E7 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 + 0: , A0061C2F3B2295BFA33BC74C037EA8DA + 1: ED, 9E5648DCE40DE37B56C557D26CB18D83 + 2: 6719, A6605253C59A101FF85C5102CE92BE45 + 3: B8873D, 13F3E3ED3646BB296EE4ED5D6379A21B + 4: 5AA6E2CB, 1812E8385D15B5BAE043E4E860BEF490 + 5: 4F6F4CD8E9, 8A80BC5E08929C42A5A74C5D9ACC0C6D + 6: 2F0D8B483CE4, 316F588F78FC6A9196C97CE59B9B63B6 + 7: 82D885FDE1F948, 7160BF556614511F53738A92B5277056 + 8: E4931462AD41B6DC, 7CE24C4D6B499975FCB72B5E2275ED56 + 9: 503AA70BE698BC5B41, 10EA0C61FDBA8FF7B4E9927BCCEFD911 + 10: 6B2D213D14B5D25EBE36, DC3222AED12EE26D3D14E2E733EDB2A7 + 11: 7D8B0BC1B7443E7267371E, FCACFC73E391865BE86E041F51C45E81 + 12: 9EF3BF8609E133BEB10565AF, D84326D4CAC9D5B74FCFD8CBAFE79E77 + 13: 59AE7B1FDE1178CEE7F63C4894, E1BCFCDCA86CAB9C684F7D21962D580D + 14: 564E7B8BAC5582A3BF1178916569, 54804D8DF4D7577EF65C15487695F840 + 15: 758A6DC437C8821274B0F16F911BAA, 19DD27500915F425F34F67CC2374DC36 + 16: 0468C94A88A27AEEE2B3A973065E53CC, C743996C6F49363B2F4613F24703EF7E + 17: 3B0CABA5EEE44B7BFF0D726ECED54763FF, 14D9D09815BCD91DCCE2F5AE1A9929CF + 18: 5B945D83B98C43B0248F9BC0479E332869AB, 67A275F0313D4245B1965411CFCC8F17 + 19: 97332441CA96DE8553A3C6D898FC6D90C86DBF, 73150EC3D6327E3FC8015A6192652D3B + 20: B9A1778FAF9767160D0D87816ECE1B99AA727087, 0C173D3C4078392CE377313C48D2BAE8 + 21: 5882B73911C7D26EFDCCA3AED2EDC8A8BFFE75B1F8, 8F8C535639A0B59537E590C7FC9D2E53 + 22: 70AEBED8CCFFF6E5CF06F3E841D12387EF8D6C7B4BDE, 4B00C27FCA9BEB82331CC8EB13DCC580 + 23: 345CCB52BC20DC5F1BF5EEDF5D72A6C48F402557FFD342, 1A790A39573B853DBB8E2E73B7331014 + 24: 0637C78A817E91D63CE18CEAF8D65C6107283A90C5A97842, 52786CB81724E12C76A0D23D4680E36B + 25: 59526D1E86A473DFB720FF25E97D6571077845F73C5E8322F1, 369FBA7823FC83D727FFD25D10130987 + 26: 2933BB4E7603C313B62332827601F8189E14C1F08EA547E15AB5, 204520E365DAFF6551B01562A4CEFDFB + 27: A4098CF2A48A1DC2BCCE65CCE8DF825AF51E7E5F94B6186FF85D77, 9833EBB9A1D5CD0356E023E2C3761C2B + 28: 26557B942FD6913D806672EB01526DBD5D6F532F78AB6759DE3415C5, EDAACDD101BC40EE6530D8B5DC031F31 + 29: DB92C3D77DF0C8F4C98845AA9AD43FB800192E57A53E083862B7E3FAF0, 628DEB1E345303A40700289052080FF8 + 30: FC57BFAC2C77781723C2B721886D44ED67A52D9AD827874BC4EEC0A97281, 9A222DBC47B4AB4E520D3CC5850D4DEF + 31: 72DFB9E91A78EAFE758B4542206A4A957B4523A58428398C11BCF2AEAE1938, 307D0B876130E82804C1167E03B69B2F + 32: 7275C6EBDC2680DFCB73326A987D2FBCE83E40A9AEFE6351CFDA7251A6FE10A6, 895E6EEAA9BD88594903325A063CA45F diff --git a/notes/hash_tv.txt b/notes/hash_tv.txt index 3a6600ec..4f2714d3 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,565 +1734,6 @@ 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 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..18edd70a 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,565 +1734,6 @@ 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 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..6429228f --- /dev/null +++ b/notes/ocb_tv.txt @@ -0,0 +1,461 @@ +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-safer-k64 (8 byte key) + 0: , 0EDD2A1AB692AA7A + 1: 3E, 306F814F3C2C109E + 2: 0593, 063D19B734C34715 + 3: CA72C6, DF6DAAFAD91BE697 + 4: 08924AEE, 15095FA49E789483 + 5: 359908A6CD, 16CB7F0741BA4091 + 6: 97F3BD820CF4, A59DB15B67B95EE8 + 7: 0A267201AC039E, B4FFC31DBCD8284A + 8: 9F6ACD9705C9ECC5, 6B41A938F0B1CAEB + 9: F355D5A937DD1582C2, 9D1F932E521CB955 + 10: ED39758CAF89E7932E48, 398EF517015F118F + 11: D8ACF19363A0E0ADC9321B, F98B2A30217766AA + 12: F8F54A8202B0F281ED610F33, 36EF7FA4A20E04B7 + 13: 0F8677DF64B5982DB6E2299140, 4DED2DA806834C81 + 14: 0C357A9DC321C93B3872881503B0, 7814D1C0C6A8900A + 15: 10B6B1A261C3015A18110AD200A7B6, 9A814D6D2BAD850C + 16: AA9EA9D1BA7818C0D2EBF23781A5467D, 236A24FC98826702 + +OCB-safer-sk64 (8 byte key) + 0: , 76F16BDCE55B3E23 + 1: 63, F34B0B471F6F8F75 + 2: 8651, D7EFE17943D35193 + 3: D45504, 263224E50E7E9E75 + 4: 57B414C3, A553D6CABCA0F285 + 5: 4976E3B303, AC5E9969F739EBD9 + 6: F10AB8EB94E0, 8301FFE68848D46D + 7: 6E954593AC427D, C1CF93BBC0F92644 + 8: F48F44441B898C0F, 698FFAED1A95E8E4 + 9: 1DC60156D62782E3D0, 6AFF0DCC65D4C933 + 10: 71920ADC8997CB8B3A72, 1C101C6A27CFBBBD + 11: 890ED7492ED914AC20391B, F66DCD6205D945C6 + 12: 1B9FAB84A8748BAC187C7393, B450757FCAFAAD52 + 13: B4C89E1BB280DBC265E43ACE15, AE6BB3D2E6A371FF + 14: 24B0C28944BDF22048E2E86644F5, 84E93E2191CEF17A + 15: 8F2D5694D55EE235168AAA735943AF, 514252AEF2F2A2D9 + 16: 568B7E31FFDA726718E40397CFC8DCC6, 3C80BA7FCA9E419E + +OCB-safer-k128 (16 byte key) + 0: , 4919F68F6BC44ABC + 1: 65, C6785F7BE4DE54D3 + 2: E1B0, C197C93B63F58355 + 3: BB7247, DFE092EF8184443B + 4: 38C2D022, 943FD999227C5596 + 5: D71E4FD0ED, 51040FE9A01EA901 + 6: C4B211EADC2A, 329429BE3366F22F + 7: 426DEB3FC3A4BC, CF1C976F6A19CE88 + 8: A6F813C09CE84800, 98D9FF427B3BD571 + 9: 4D1A9948FD157814B4, 5A389FAEEB85B8C6 + 10: EC3EA142C3F07F5A9EEB, 31E26E13F032A48F + 11: A75FB14365D1533CD3FBE7, 8EF01ACC568C0591 + 12: 891582B5853DD546FF3EA071, E013CFFE43219C21 + 13: 54CA848C49DCDEE076780F21F4, 298EFC7B4D6B6CFE + 14: EA7611C69A60F1A2EF71D6A7762D, 7D9AA51CFCEC8101 + 15: B2D1A211BC524B965A084BB4B21710, 7B2AC0EEB5216892 + 16: 5E81F1BFA270E804A488C9BFAB75811D, A67F627CE1E37851 + +OCB-safer-sk128 (16 byte key) + 0: , E523C6DBB3CA178D + 1: 5E, B1CB7EBE5780DF98 + 2: F4D8, 8036235F2BE7A817 + 3: 4FE268, 123320394EAC24F6 + 4: A5BA02B4, B8276B5E027D45DA + 5: 1571859CCC, 29406C5F2DF2CFC4 + 6: CA1E47447B95, 5D4FAF8FD5341791 + 7: 8710DB37022D96, E10040FEA9AEA9C2 + 8: 205990DC9A34DA3C, AE25CB49AA7A697B + 9: 757AFCB3191DC811C3, AA8CADA8638D6118 + 10: 6994F8C153522361BB92, 1BCEE09E928EB18B + 11: A86FA0CDD051BB60AF5AA8, 50A38F8E9889354D + 12: 8D3FD3EB7FF2269AACFD24BA, CB51CF84CEFC45F0 + 13: 03D2A313925D9490FC5547F95F, A1FF9D72E11C420B + 14: D77C0F0F600FE92F14F479FA457C, 1EBE1B4B9685EDFA + 15: 0CAF0A8BEB864E26058C7DF8EBA0EB, 1B153DDAE807561F + 16: 113D12716DFE0596A2F30C875EC6BA0E, C61F5AC0245154A6 + +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 + +OCB-anubis (16 byte key) + 0: , D22ACF880B297DB0513DFAF0D2DF57D9 + 1: 59, 210A179469D6568AB9470C760415574E + 2: AFA5, 1223F9CD160ABE2F257164C6E5533C87 + 3: 969BEC, A57EC767543CA2ADBA4F5A7423ECA78A + 4: CF8B31F1, 13B5BF9CD87CE15CE696F3AF1B082650 + 5: 9B22DF3852, 4937FDDA0AFDDA04CCD53CCBB0A82745 + 6: E11719B2F0F8, 6847931DBF0223F5CEF66AE3F4DFCF9B + 7: 5A85E0F6DD2266, A1A0AF45A68A681CC396615FE1E1DFB5 + 8: 7F2DFCC65ED86976, 13614A3C6E0E08611D8DF8EE5B7D788F + 9: 1DAF10DFA3F1D53E50, 673632B6DD553BAE90E9E6CC8CDE0FA5 + 10: AF74FD9671F9C0A9879C, B8B4DD448FE967207227B84E42126D90 + 11: 49421CED1167A882E26297, 21C8951A1761E4BD13BC85CBD14D30BD + 12: BC0BC779B83F07D30CB340DA, FAABD25E14FFD8D468AD6616021F604C + 13: 843D7E00F94E61AE950B9AA191, 08933ED5FBDCAF72F788393CD5422D0F + 14: 296F15C383C511C36258F528E331, 8BFFADF5655C1864057D69A6706D1739 + 15: E31D2E80B2DBA4FBFAF52DB0513838, C4CD36821EC631CCBF1F258EE9931288 + 16: 87F319FE9A48E2D087EDF95563896EE5, 517960488E5A118D150A1573E76C290A + 17: 9632B7DC1740BBE0A7AEEFD0F535B5AE8A, 0C24D0950873621D319A928862D3A6AC + 18: 359431ED4B3AC537238CAC2F86126972D403, 4A0CED2F4BFA3355C17D6C5DF9FABFAA + 19: E15B50172EE8DA9C552D448A5A48BEEAA2F11D, 8166B2A2D3A0745D1055F9F503FD6C03 + 20: 75842DDC0D5E3BD80225E4BFBD1298421244D7EF, BB957BB2582B67B63978BCFD7A949EDD + 21: 3DD69162716D5F3E096E614991CAD7ED8E01F926B8, 40A954F31F5B0A2C5DD220ACED8D2B3E + 22: 8A49AC14F59593D5399A10F9346E2FD36F47F64ED419, 4324D408CE7F86370495AF14FBD1A859 + 23: 6AA8FA353BCAAB4262211D75F13D27BE173526B8BC3CFC, BA3A27D79EC8ECBC5A78CB9FD095B766 + 24: B918192BB72CFEF980298EEE570460356A4BA1755576FEAA, EB341ECE0A070E769F498600EE4EBF77 + 25: BEFAE0B77E42A2FD18958D9E43202E8A338562AFF8317461B0, 444C1D6BDC026A01012BB2CEEAD89C2C + 26: 07E86D49CFFE6FB08FDF44584033AF321447003D8AD3862C00C9, DA9355A79B224EF662DA65F19BE494A7 + 27: 911BB223AC6F6E54082FBFEDEC300D73FCAF715CCA35949212B372, 3496160A46A21DCDB5A4C179F159D860 + 28: ABB563FC803715F59AA35460E98470E2E94E4270455ACEBF4297641B, 899CFE1946A060DE620879B8A7464718 + 29: 47D98E83B5849CDE19B14ABCF9EA6CA9684AB49A3AB36BD14F328D808C, 6D76CD5EFF6D4AD3B67A56DF1EB42E05 + 30: C8BF0B71A95884FFB93D64C57E327A4754EC5A1EE26632CF8E0B6B26CBDE, 2B3BE785263B1A400E5893273AFD09AE + 31: 9804D668CF2D75CA58C9671F65630E33909269B9511AF9119BE88EBB35F00C, 3DDA028B1A2339CA817DC8D9371E0FF8 + 32: F6E038A82A09BCD20BAAC7926B2296B78F9CBA9DD12C497C47EA08DBCD8CEA3A, A203FC1E68E21A52E72224891AC10EE2 + +OCB-khazad (16 byte key) + 0: , BDEDFF7AA0070063 + 1: 00, 67E951582D66ED93 + 2: 5FED, 09DC8AEAD70673DE + 3: 26A7CC, CE1436CE1E37D4B0 + 4: 3D2BD063, 574C24395F31511A + 5: 597F1AFCB1, 6FBBE820C6F26CDB + 6: 202DAE442DF6, 58CA6E5706C9852D + 7: 7C20EDA18E9444, AABF0DA252A1BAAD + 8: DEC02BF76DFD5B77, A0A97446B80EACB6 + 9: 5D7A42F73843F9200E, A1DD603372D124CB + 10: 0D4710E454C19B68369E, CC78E9D7EAA6A39F + 11: 126694191BF09A29DCF40E, 76C9B84FA3E8913F + 12: A94EBB86BD325B4FA1942FA5, 613DE312DB1666F7 + 13: 4F9462386469EA0EFDC1BFAFE9, 5247244FD4BBAA6F + 14: 4EB794DFCF3823BDC38FA5EF3B23, 0C12017B5E058398 + 15: D870479780CC5B3B13A7A39029A56F, 003D3FCD31D497B5 + 16: A47BF1218AC86A60F6002CE004AF5E50, B4EC27091D5DCD58 + diff --git a/notes/omac_tv.txt b/notes/omac_tv.txt index 5a11a86e..56d8da6f 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 @@ -313,25 +313,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 +332,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 +352,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 @@ -513,219 +459,3 @@ OMAC-khazad (16 byte key) 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..e0a19006 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 @@ -313,25 +313,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 +332,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 +352,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 @@ -513,219 +459,3 @@ PMAC-khazad (16 byte key) 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/tech0005.txt b/notes/tech0005.txt index c2502208..c03afff3 100644 --- a/notes/tech0005.txt +++ b/notes/tech0005.txt @@ -12,8 +12,8 @@ You can disable whole classes of algorithms on the command line with the LTC_NO_ 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 +CFLAGS="-DLTC_NO_CIPHERS -DLTC_NO_HASHES -DLTC_NO_PRNGS -DLTC_NO_MACS -DLTC_NO_MODES -DLTC_NO_PK -DRIJNDAEL -DCTR -DSHA256 \ +-DHMAC -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... diff --git a/notes/tech0007.txt b/notes/tech0007.txt index 149bd49d..33f87d60 100644 --- a/notes/tech0007.txt +++ b/notes/tech0007.txt @@ -1,5 +1,5 @@ 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 +EXTRALIBS=-ltommath CFLAGS="-g3 -DLTC_NO_ASM" make -j3 IGNORE_SPEED=1 test diff --git a/parsenames.pl b/parsenames.pl new file mode 100644 index 00000000..761f0362 --- /dev/null +++ b/parsenames.pl @@ -0,0 +1,26 @@ +#!/usr/bin/perl +# +# Splits the list of files and outputs for makefile type files +# wrapped at 80 chars +# +# Tom St Denis +@a = split(" ", $ARGV[1]); +$b = "$ARGV[0]="; +$len = length($b); +print $b; +foreach my $obj (@a) { + $len = $len + length($obj); + $obj =~ s/\*/\$/; + if ($len > 100) { + printf "\\\n"; + $len = length($obj); + } + print "$obj "; +} +if ($ARGV[0] eq "HEADERS") { print "testprof/tomcrypt_test.h"; } + +print "\n\n"; + +# $Source: /cvs/libtom/libtomcrypt/parsenames.pl,v $ +# $Revision: 1.3 $ +# $Date: 2005/05/05 14:49:27 $ diff --git a/run.sh b/run.sh new file mode 100644 index 00000000..dd982e98 --- /dev/null +++ b/run.sh @@ -0,0 +1,35 @@ +#!/bin/bash +bash 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 build.sh " $1" "$2 -Os" " $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 + +rm -f testok.txt +bash build.sh " $1" " $2" " $3 " "$4" "$5" +if [ -a testok.txt ] && [ -f testok.txt ]; then + echo +else + echo + echo "Test failed" + exit 1 +fi + +exit 0 + +# $Source: /cvs/libtom/libtomcrypt/run.sh,v $ +# $Revision: 1.15 $ +# $Date: 2005/07/23 14:18:31 $ 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/src/ciphers/aes/aes.c b/src/ciphers/aes/aes.c index 103fb1c0..32bcd697 100644 --- a/src/ciphers/aes/aes.c +++ b/src/ciphers/aes/aes.c @@ -1,11 +1,19 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ /* AES implementation by Tom St Denis * * Derived from the Public Domain source code by - ---- + +--- * rijndael-alg-fst.c * * @version 3.0 (December 2000) @@ -20,13 +28,13 @@ /** @file aes.c Implementation of AES -*/ +*/ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_RIJNDAEL +#ifdef RIJNDAEL -#ifndef ENCRYPT_ONLY +#ifndef ENCRYPT_ONLY #define SETUP rijndael_setup #define ECB_ENC rijndael_ecb_encrypt @@ -41,7 +49,16 @@ const struct ltc_cipher_descriptor rijndael_desc = 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 + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; + +const struct ltc_cipher_descriptor aes_desc = +{ + "aes", + 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 }; #else @@ -57,37 +74,40 @@ const struct ltc_cipher_descriptor rijndael_enc_desc = 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 + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; + +const struct ltc_cipher_descriptor aes_enc_desc = +{ + "aes", + 6, + 16, 32, 16, 10, + SETUP, ECB_ENC, NULL, NULL, ECB_DONE, ECB_KS, + 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)]); + return (Te4_3[byte(temp, 2)]) ^ + (Te4_2[byte(temp, 1)]) ^ + (Te4_1[byte(temp, 0)]) ^ + (Te4_0[byte(temp, 3)]); } -#endif /* RIJNDAEL_SETUP_MIX */ -#if !defined(ENCRYPT_ONLY) && defined(LTC_SMALL_CODE) +#ifndef ENCRYPT_ONLY +#ifdef 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)]); + 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 /** @@ -100,28 +120,24 @@ static ulong32 setup_mix2(ulong32 temp) */ int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { - int i; - ulong32 temp, *rk, *K; + int i, j; + ulong32 temp, *rk; #ifndef ENCRYPT_ONLY ulong32 *rrk; -#endif +#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; @@ -130,6 +146,7 @@ int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *s 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]; @@ -142,11 +159,12 @@ int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *s 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]; + temp = skey->rijndael.eK[rk - skey->rijndael.eK + 5]; #else temp = rk[5]; #endif @@ -162,13 +180,14 @@ int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *s 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]; + temp = skey->rijndael.eK[rk - skey->rijndael.eK + 7]; #else temp = rk[7]; #endif @@ -188,15 +207,14 @@ int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *s } } else { /* this can't happen */ - /* coverity[dead_error_line] */ return CRYPT_ERROR; } -#ifndef ENCRYPT_ONLY +#ifndef ENCRYPT_ONLY /* setup the inverse key now */ rk = skey->rijndael.dK; - rrk = skey->rijndael.eK + (28 + keylen) - 4; - + 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++; @@ -204,11 +222,11 @@ int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *s *rk++ = *rrk++; *rk = *rrk; rk -= 3; rrk -= 3; - + for (i = 1; i < skey->rijndael.Nr; i++) { rrk -= 4; rk += 4; - #ifdef LTC_SMALL_CODE + #ifdef LTC_SMALL_CODE temp = rrk[0]; rk[0] = setup_mix2(temp); temp = rrk[1]; @@ -220,30 +238,30 @@ int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *s #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)]; + Tks0[byte(temp, 3)] ^ + Tks1[byte(temp, 2)] ^ + Tks2[byte(temp, 1)] ^ + Tks3[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)]; + Tks0[byte(temp, 3)] ^ + Tks1[byte(temp, 2)] ^ + Tks2[byte(temp, 1)] ^ + Tks3[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)]; + Tks0[byte(temp, 3)] ^ + Tks1[byte(temp, 2)] ^ + Tks2[byte(temp, 1)] ^ + Tks3[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 - + Tks0[byte(temp, 3)] ^ + Tks1[byte(temp, 2)] ^ + Tks2[byte(temp, 1)] ^ + Tks3[byte(temp, 0)]; + #endif + } /* copy last */ @@ -255,7 +273,7 @@ int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *s *rk = *rrk; #endif /* ENCRYPT_ONLY */ - return CRYPT_OK; + return CRYPT_OK; } /** @@ -266,26 +284,21 @@ int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *s @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) +static int _rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #else -int ECB_ENC(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int ECB_ENC(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #endif { - ulong32 s0, s1, s2, s3, t0, t1, t2, t3; - const ulong32 *rk; + ulong32 s0, s1, s2, s3, t0, t1, t2, t3, *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: @@ -295,35 +308,36 @@ int ECB_ENC(const unsigned char *pt, unsigned char *ct, const symmetric_key *ske 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)) ^ + Te0(byte(s0, 3)) ^ + Te1(byte(s1, 2)) ^ + Te2(byte(s2, 1)) ^ + Te3(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)) ^ + Te0(byte(s1, 3)) ^ + Te1(byte(s2, 2)) ^ + Te2(byte(s3, 1)) ^ + Te3(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)) ^ + Te0(byte(s2, 3)) ^ + Te1(byte(s3, 2)) ^ + Te2(byte(s0, 1)) ^ + Te3(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)) ^ + Te0(byte(s3, 3)) ^ + Te1(byte(s0, 2)) ^ + Te2(byte(s1, 1)) ^ + Te3(byte(s2, 0)) ^ rk[3]; - if (r == Nr-2) { + if (r == Nr-2) { break; } s0 = t0; s1 = t1; s2 = t2; s3 = t3; @@ -338,28 +352,28 @@ int ECB_ENC(const unsigned char *pt, unsigned char *ct, const symmetric_key *ske 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)) ^ + Te0(byte(s0, 3)) ^ + Te1(byte(s1, 2)) ^ + Te2(byte(s2, 1)) ^ + Te3(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)) ^ + Te0(byte(s1, 3)) ^ + Te1(byte(s2, 2)) ^ + Te2(byte(s3, 1)) ^ + Te3(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)) ^ + Te0(byte(s2, 3)) ^ + Te1(byte(s3, 2)) ^ + Te2(byte(s0, 1)) ^ + Te3(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)) ^ + Te0(byte(s3, 3)) ^ + Te1(byte(s0, 2)) ^ + Te2(byte(s1, 1)) ^ + Te3(byte(s2, 0)) ^ rk[7]; rk += 8; @@ -368,28 +382,28 @@ int ECB_ENC(const unsigned char *pt, unsigned char *ct, const symmetric_key *ske } s0 = - Te0(LTC_BYTE(t0, 3)) ^ - Te1(LTC_BYTE(t1, 2)) ^ - Te2(LTC_BYTE(t2, 1)) ^ - Te3(LTC_BYTE(t3, 0)) ^ + Te0(byte(t0, 3)) ^ + Te1(byte(t1, 2)) ^ + Te2(byte(t2, 1)) ^ + Te3(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)) ^ + Te0(byte(t1, 3)) ^ + Te1(byte(t2, 2)) ^ + Te2(byte(t3, 1)) ^ + Te3(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)) ^ + Te0(byte(t2, 3)) ^ + Te1(byte(t3, 2)) ^ + Te2(byte(t0, 1)) ^ + Te3(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)) ^ + Te0(byte(t3, 3)) ^ + Te1(byte(t0, 2)) ^ + Te2(byte(t1, 1)) ^ + Te3(byte(t2, 0)) ^ rk[3]; } @@ -400,31 +414,31 @@ int ECB_ENC(const unsigned char *pt, unsigned char *ct, const symmetric_key *ske * 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)]) ^ + (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[LTC_BYTE(t1, 3)]) ^ - (Te4_2[LTC_BYTE(t2, 2)]) ^ - (Te4_1[LTC_BYTE(t3, 1)]) ^ - (Te4_0[LTC_BYTE(t0, 0)]) ^ + (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[LTC_BYTE(t2, 3)]) ^ - (Te4_2[LTC_BYTE(t3, 2)]) ^ - (Te4_1[LTC_BYTE(t0, 1)]) ^ - (Te4_0[LTC_BYTE(t1, 0)]) ^ + (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[LTC_BYTE(t3, 3)]) ^ - (Te4_2[LTC_BYTE(t0, 2)]) ^ - (Te4_1[LTC_BYTE(t1, 1)]) ^ - (Te4_0[LTC_BYTE(t2, 0)]) ^ + (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); @@ -432,42 +446,37 @@ int ECB_ENC(const unsigned char *pt, unsigned char *ct, const symmetric_key *ske } #ifdef LTC_CLEAN_STACK -int ECB_ENC(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int ECB_ENC(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) { - int err = s_rijndael_ecb_encrypt(pt, ct, skey); + int err = _rijndael_ecb_encrypt(pt, ct, skey); burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2); return err; } #endif -#ifndef ENCRYPT_ONLY +#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 + @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) +static int _rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #else -int ECB_DEC(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int ECB_DEC(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #endif { - ulong32 s0, s1, s2, s3, t0, t1, t2, t3; - const ulong32 *rk; + ulong32 s0, s1, s2, s3, t0, t1, t2, t3, *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; /* @@ -483,37 +492,37 @@ int ECB_DEC(const unsigned char *ct, unsigned char *pt, const symmetric_key *ske 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)) ^ + Td0(byte(s0, 3)) ^ + Td1(byte(s3, 2)) ^ + Td2(byte(s2, 1)) ^ + Td3(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)) ^ + Td0(byte(s1, 3)) ^ + Td1(byte(s0, 2)) ^ + Td2(byte(s3, 1)) ^ + Td3(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)) ^ + Td0(byte(s2, 3)) ^ + Td1(byte(s1, 2)) ^ + Td2(byte(s0, 1)) ^ + Td3(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)) ^ + Td0(byte(s3, 3)) ^ + Td1(byte(s2, 2)) ^ + Td2(byte(s1, 1)) ^ + Td3(byte(s0, 0)) ^ rk[3]; if (r == Nr-2) { - break; + break; } s0 = t0; s1 = t1; s2 = t2; s3 = t3; } rk += 4; -#else +#else /* * Nr - 1 full rounds: @@ -522,28 +531,28 @@ int ECB_DEC(const unsigned char *ct, unsigned char *pt, const symmetric_key *ske for (;;) { t0 = - Td0(LTC_BYTE(s0, 3)) ^ - Td1(LTC_BYTE(s3, 2)) ^ - Td2(LTC_BYTE(s2, 1)) ^ - Td3(LTC_BYTE(s1, 0)) ^ + Td0(byte(s0, 3)) ^ + Td1(byte(s3, 2)) ^ + Td2(byte(s2, 1)) ^ + Td3(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)) ^ + Td0(byte(s1, 3)) ^ + Td1(byte(s0, 2)) ^ + Td2(byte(s3, 1)) ^ + Td3(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)) ^ + Td0(byte(s2, 3)) ^ + Td1(byte(s1, 2)) ^ + Td2(byte(s0, 1)) ^ + Td3(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)) ^ + Td0(byte(s3, 3)) ^ + Td1(byte(s2, 2)) ^ + Td2(byte(s1, 1)) ^ + Td3(byte(s0, 0)) ^ rk[7]; rk += 8; @@ -553,28 +562,28 @@ int ECB_DEC(const unsigned char *ct, unsigned char *pt, const symmetric_key *ske s0 = - Td0(LTC_BYTE(t0, 3)) ^ - Td1(LTC_BYTE(t3, 2)) ^ - Td2(LTC_BYTE(t2, 1)) ^ - Td3(LTC_BYTE(t1, 0)) ^ + Td0(byte(t0, 3)) ^ + Td1(byte(t3, 2)) ^ + Td2(byte(t2, 1)) ^ + Td3(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)) ^ + Td0(byte(t1, 3)) ^ + Td1(byte(t0, 2)) ^ + Td2(byte(t3, 1)) ^ + Td3(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)) ^ + Td0(byte(t2, 3)) ^ + Td1(byte(t1, 2)) ^ + Td2(byte(t0, 1)) ^ + Td3(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)) ^ + Td0(byte(t3, 3)) ^ + Td1(byte(t2, 2)) ^ + Td2(byte(t1, 1)) ^ + Td3(byte(t0, 0)) ^ rk[3]; } #endif @@ -584,31 +593,31 @@ int ECB_DEC(const unsigned char *ct, unsigned char *pt, const symmetric_key *ske * 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) ^ + (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[LTC_BYTE(t1, 3)] & 0xff000000) ^ - (Td4[LTC_BYTE(t0, 2)] & 0x00ff0000) ^ - (Td4[LTC_BYTE(t3, 1)] & 0x0000ff00) ^ - (Td4[LTC_BYTE(t2, 0)] & 0x000000ff) ^ + (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[LTC_BYTE(t2, 3)] & 0xff000000) ^ - (Td4[LTC_BYTE(t1, 2)] & 0x00ff0000) ^ - (Td4[LTC_BYTE(t0, 1)] & 0x0000ff00) ^ - (Td4[LTC_BYTE(t3, 0)] & 0x000000ff) ^ + (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[LTC_BYTE(t3, 3)] & 0xff000000) ^ - (Td4[LTC_BYTE(t2, 2)] & 0x00ff0000) ^ - (Td4[LTC_BYTE(t1, 1)] & 0x0000ff00) ^ - (Td4[LTC_BYTE(t0, 0)] & 0x000000ff) ^ + (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); @@ -617,9 +626,9 @@ int ECB_DEC(const unsigned char *ct, unsigned char *pt, const symmetric_key *ske #ifdef LTC_CLEAN_STACK -int ECB_DEC(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int ECB_DEC(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) { - int err = s_rijndael_ecb_decrypt(ct, pt, skey); + int err = _rijndael_ecb_decrypt(ct, pt, skey); burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2); return err; } @@ -633,77 +642,91 @@ int ECB_TEST(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #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, 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, + { 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, + { 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, + { 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, + { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 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, + { 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++) { + + 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) { + 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)) { + 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; + /* 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 +/** Terminate the context @param skey The scheduled key */ void ECB_DONE(symmetric_key *skey) { - LTC_UNUSED_PARAM(skey); } @@ -716,27 +739,23 @@ int ECB_KS(int *keysize) { LTC_ARGCHK(keysize != NULL); - if (*keysize < 16) { + if (*keysize < 16) return CRYPT_INVALID_KEYSIZE; - } if (*keysize < 24) { *keysize = 16; return CRYPT_OK; - } - if (*keysize < 32) { + } else if (*keysize < 32) { *keysize = 24; return CRYPT_OK; + } else { + *keysize = 32; + 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 + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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/aes_tab.c b/src/ciphers/aes/aes_tab.c index d1818341..5f106ef7 100644 --- a/src/ciphers/aes/aes_tab.c +++ b/src/ciphers/aes/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@gmail.com, http://libtomcrypt.com + */ /* The precomputed tables for AES */ /* Te0[x] = S [x].[02, 01, 01, 03]; @@ -15,12 +23,10 @@ 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 +94,7 @@ static const ulong32 TE0[256] = { 0x7bb0b0cbUL, 0xa85454fcUL, 0x6dbbbbd6UL, 0x2c16163aUL, }; -#if !defined(PELI_TAB) && defined(LTC_SMALL_CODE) +#ifndef PELI_TAB static const ulong32 Te4[256] = { 0x63636363UL, 0x7c7c7c7cUL, 0x77777777UL, 0x7b7b7b7bUL, 0xf2f2f2f2UL, 0x6b6b6b6bUL, 0x6f6f6f6fUL, 0xc5c5c5c5UL, @@ -526,142 +532,142 @@ static const ulong32 TE3[256] = { #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 */ @@ -868,142 +874,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 +1017,12 @@ 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 */ +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index f230e22f..3cd8bcfe 100644 --- a/src/ciphers/anubis.c +++ b/src/ciphers/anubis.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@gmail.com, http://libtomcrypt.com + */ /** @file anubis.c @@ -7,9 +15,9 @@ Authors: Paulo S.L.M. Barreto and Vincent Rijmen. */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_ANUBIS +#ifdef ANUBIS const struct ltc_cipher_descriptor anubis_desc = { "anubis", @@ -21,26 +29,26 @@ const struct ltc_cipher_descriptor anubis_desc = { &anubis_test, &anubis_done, &anubis_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; -#define MAX_N 10 +#define MIN_N 4 +#define MAX_N 10 +#define MIN_ROUNDS (8 + MIN_N) +#define MAX_ROUNDS (8 + MAX_N) +#define MIN_KEYSIZEB (4*MIN_N) +#define MAX_KEYSIZEB (4*MAX_N) +#define BLOCKSIZE 128 +#define BLOCKSIZEB (BLOCKSIZE/8) -#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) +#if defined(ANUBIS_TWEAK) static const ulong32 T0[256] = { 0xba69d2bbU, 0x54a84de5U, 0x2f5ebce2U, 0x74e8cd25U, @@ -884,14 +892,14 @@ static const ulong32 rc[] = { @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) +static int _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 inter[MAX_N]; ulong32 v, K0, K1, K2, K3; LTC_ARGCHK(key != NULL); @@ -918,16 +926,16 @@ int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetri return CRYPT_INVALID_ROUNDS; } - /* - * map cipher key to initial key state (mu): - */ - for (i = 0, pos = 0; i < N; i++, pos += 4) { + /* + * 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]) ); - } + (key[pos ] << 24) ^ + (key[pos + 1] << 16) ^ + (key[pos + 2] << 8) ^ + (key[pos + 3] ); + } /* * generate R + 1 round keys: @@ -936,28 +944,28 @@ int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetri /* * generate r-th round key K^r: */ - K0 = T4[(kappa[N - 1] >> 24) & 0xff]; + K0 = T4[(kappa[N - 1] >> 24) ]; 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) ^ + K0 = T4[(kappa[i] >> 24) ] ^ + (T5[(K0 >> 24) ] & 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 >> 24) ] & 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 >> 24) ] & 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 >> 24) ] & 0xff000000U) ^ (T5[(K3 >> 16) & 0xff] & 0x00ff0000U) ^ (T5[(K3 >> 8) & 0xff] & 0x0000ff00U) ^ (T5[(K3 ) & 0xff] & 0x000000ffU); @@ -966,7 +974,7 @@ int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetri -- 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]; + K0 ^= U[i][(kappa[i] >> 24) ]; K1 ^= U[i][(kappa[i] >> 16) & 0xff]; K2 ^= U[i][(kappa[i] >> 8) & 0xff]; K3 ^= U[i][(kappa[i] ) & 0xff]; @@ -985,7 +993,7 @@ int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetri } for (i = 0; i < N; i++) { int j = i; - inter[i] = T0[(kappa[j--] >> 24) & 0xff]; if (j < 0) j = N - 1; + inter[i] = T0[(kappa[j--] >> 24) ]; 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]; @@ -1007,7 +1015,7 @@ int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetri for (i = 0; i < 4; i++) { v = skey->anubis.roundKeyEnc[R - r][i]; skey->anubis.roundKeyDec[r][i] = - T0[T4[(v >> 24) & 0xff] & 0xff] ^ + T0[T4[(v >> 24) ] & 0xff] ^ T1[T4[(v >> 16) & 0xff] & 0xff] ^ T2[T4[(v >> 8) & 0xff] & 0xff] ^ T3[T4[(v ) & 0xff] & 0xff]; @@ -1021,15 +1029,15 @@ int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetri 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); + err = _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) { + ulong32 roundKey[18 + 1][4], int R) { int i, pos, r; ulong32 state[4]; ulong32 inter[4]; @@ -1040,10 +1048,10 @@ static void anubis_crypt(const unsigned char *plaintext, unsigned char *cipherte */ 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]) ) ^ + (plaintext[pos ] << 24) ^ + (plaintext[pos + 1] << 16) ^ + (plaintext[pos + 2] << 8) ^ + (plaintext[pos + 3] ) ^ roundKey[0][i]; } @@ -1052,10 +1060,10 @@ static void anubis_crypt(const unsigned char *plaintext, unsigned char *cipherte */ 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] ^ + T0[(state[0] >> 24) ] ^ + T1[(state[1] >> 24) ] ^ + T2[(state[2] >> 24) ] ^ + T3[(state[3] >> 24) ] ^ roundKey[r][0]; inter[1] = T0[(state[0] >> 16) & 0xff] ^ @@ -1085,10 +1093,10 @@ static void anubis_crypt(const unsigned char *plaintext, unsigned char *cipherte * 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) ^ + (T0[(state[0] >> 24) ] & 0xff000000U) ^ + (T1[(state[1] >> 24) ] & 0x00ff0000U) ^ + (T2[(state[2] >> 24) ] & 0x0000ff00U) ^ + (T3[(state[3] >> 24) ] & 0x000000ffU) ^ roundKey[R][0]; inter[1] = (T0[(state[0] >> 16) & 0xff] & 0xff000000U) ^ @@ -1128,16 +1136,11 @@ static void anubis_crypt(const unsigned char *plaintext, unsigned char *cipherte @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) +int anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, 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; } @@ -1146,19 +1149,14 @@ int anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetr 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 + @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) +int anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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; } @@ -1176,14 +1174,14 @@ int anubis_test(void) int keylen; unsigned char pt[16], ct[16], key[40]; } tests[] = { -#ifndef LTC_ANUBIS_TWEAK - /**** ORIGINAL LTC_ANUBIS ****/ +#ifndef ANUBIS_TWEAK + /**** ORIGINAL 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, + { 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 } @@ -1191,7 +1189,7 @@ int anubis_test(void) 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, + { 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 } @@ -1223,7 +1221,7 @@ int anubis_test(void) 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, + { 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, @@ -1232,7 +1230,7 @@ int anubis_test(void) 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, + { 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, @@ -1244,7 +1242,7 @@ int anubis_test(void) 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, + { 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, @@ -1254,7 +1252,7 @@ int anubis_test(void) 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, + { 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, @@ -1267,7 +1265,7 @@ int anubis_test(void) 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, + { 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, @@ -1277,7 +1275,7 @@ int anubis_test(void) 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, + { 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, @@ -1290,7 +1288,7 @@ int anubis_test(void) 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, + { 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, @@ -1301,7 +1299,7 @@ int anubis_test(void) 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, + { 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, @@ -1315,7 +1313,7 @@ int anubis_test(void) 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, + { 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, @@ -1326,7 +1324,7 @@ int anubis_test(void) 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, + { 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, @@ -1335,7 +1333,7 @@ int anubis_test(void) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } } #else - /**** Tweaked LTC_ANUBIS ****/ + /**** Tweaked ANUBIS ****/ /* 128 bit keys */ { 16, @@ -1498,18 +1496,17 @@ int anubis_test(void) unsigned char buf[2][16]; symmetric_key skey; - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); 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)) { + if (memcmp(buf[0], tests[x].ct, 16) || memcmp(buf[1], tests[x].pt, 16)) { 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)) { + if (memcmp(buf[0], tests[x].ct, 16)) { return CRYPT_FAIL_TESTVECTOR; } @@ -1518,12 +1515,11 @@ int anubis_test(void) #endif } -/** Terminate the context +/** Terminate the context @param skey The scheduled key */ void anubis_done(symmetric_key *skey) { - LTC_UNUSED_PARAM(skey); } /** @@ -1554,14 +1550,9 @@ int anubis_keysize(int *keysize) return CRYPT_OK; } -#undef MAX_N -#undef T0 -#undef T1 -#undef T2 -#undef T3 -#undef T4 -#undef T5 -#undef rc - #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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/blowfish.c b/src/ciphers/blowfish.c index 257eab7e..158bba4d 100644 --- a/src/ciphers/blowfish.c +++ b/src/ciphers/blowfish.c @@ -1,25 +1,33 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ /** @file blowfish.c Implementation of the Blowfish block cipher, Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_BLOWFISH +#ifdef BLOWFISH const struct ltc_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 + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; static const ulong32 ORIG_P[16 + 2] = { @@ -289,128 +297,73 @@ 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 rounds; - - ulong32 l, r; -#ifndef __GNUC__ - const ulong32 *S1, *S2, *S3, *S4; - - 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); - } - - /* last keying */ - l ^= skey->blowfish.K[16]; - r ^= skey->blowfish.K[17]; - - *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; - } -} - -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; - } - } - - *cur = y; - return ret; -} - /** - Expand the Blowfish internal state + Initialize 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_expand(const unsigned char *key, int keylen, - const unsigned char *data, int datalen, - symmetric_key *skey) +int blowfish_setup(const unsigned char *key, int keylen, int num_rounds, + symmetric_key *skey) { - ulong32 x, y, A, B[2]; - int i; + ulong32 x, y, z, A; + unsigned char B[8]; 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; + /* check key length */ + if (keylen < 8 || keylen > 56) { + return CRYPT_INVALID_KEYSIZE; } + /* check rounds */ + if (num_rounds != 0 && num_rounds != 16) { + return CRYPT_INVALID_ROUNDS; + } - i = 0; - B[0] = 0; - B[1] = 0; + /* 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; + } + + /* copy sboxes */ + for (x = 0; x < 4; x++) { + for (y = 0; y < 256; y++) { + skey->blowfish.S[x][y] = ORIG_S[x][y]; + } + } + + /* encrypt K array */ + for (x = 0; x < 8; x++) { + B[x] = 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]); } } @@ -421,48 +374,11 @@ int blowfish_expand(const unsigned char *key, int keylen, 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); -} +#ifndef __GNUC__ +#define F(x) ((S1[byte(x,3)] + S2[byte(x,2)]) ^ S3[byte(x,1)]) + S4[byte(x,0)] +#else +#define F(x) ((skey->blowfish.S[0][byte(x,3)] + skey->blowfish.S[1][byte(x,2)]) ^ skey->blowfish.S[2][byte(x,1)]) + skey->blowfish.S[3][byte(x,0)] +#endif /** Encrypts a block of text with Blowfish @@ -472,34 +388,55 @@ int blowfish_setup_with_data(const unsigned char *key, int keylen, @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) +static int _blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #else -int blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #endif { ulong32 L, R; + int r; +#ifndef __GNUC__ + ulong32 *S1, *S2, *S3, *S4; +#endif - LTC_ARGCHK(pt != NULL); - LTC_ARGCHK(ct != NULL); - LTC_ARGCHK(skey != NULL); + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(skey != NULL); + +#ifndef __GNUC__ + S1 = skey->blowfish.S[0]; + S2 = skey->blowfish.S[1]; + S3 = skey->blowfish.S[2]; + S4 = skey->blowfish.S[3]; +#endif /* load it */ LOAD32H(L, &pt[0]); LOAD32H(R, &pt[4]); - s_blowfish_encipher(&L, &R, skey); + /* do 16 rounds */ + for (r = 0; r < 16; ) { + L ^= skey->blowfish.K[r++]; R ^= F(L); + R ^= skey->blowfish.K[r++]; L ^= F(R); + L ^= skey->blowfish.K[r++]; R ^= F(L); + R ^= skey->blowfish.K[r++]; L ^= F(R); + } + + /* last keying */ + R ^= skey->blowfish.K[17]; + L ^= skey->blowfish.K[16]; /* store */ - STORE32H(L, &ct[0]); - STORE32H(R, &ct[4]); + STORE32H(R, &ct[0]); + STORE32H(L, &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 blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) { - int err = s_blowfish_ecb_encrypt(pt, ct, skey); + int err = _blowfish_ecb_encrypt(pt, ct, skey); burn_stack(sizeof(ulong32) * 2 + sizeof(int)); return err; } @@ -509,25 +446,25 @@ int blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symme 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 + @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) +static int _blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #else -int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #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); - + #ifndef __GNUC__ S1 = skey->blowfish.S[0]; S2 = skey->blowfish.S[1]; @@ -558,9 +495,9 @@ int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symme } #ifdef LTC_CLEAN_STACK -int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) { - int err = s_blowfish_ecb_decrypt(ct, pt, skey); + int err = _blowfish_ecb_decrypt(ct, pt, skey); burn_stack(sizeof(ulong32) * 2 + sizeof(int)); return err; } @@ -575,7 +512,7 @@ int blowfish_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else int err; symmetric_key key; static const struct { @@ -611,8 +548,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,18 +558,15 @@ 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 +/** Terminate the context @param skey The scheduled key */ void blowfish_done(symmetric_key *skey) { - LTC_UNUSED_PARAM(skey); } /** @@ -647,14 +580,15 @@ int blowfish_keysize(int *keysize) if (*keysize < 8) { return CRYPT_INVALID_KEYSIZE; - } - if (*keysize > 72) { - *keysize = 72; + } else if (*keysize > 56) { + *keysize = 56; } return CRYPT_OK; } -#undef F - #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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/cast5.c b/src/ciphers/cast5.c index d93f6b6b..3daaa4ab 100644 --- a/src/ciphers/cast5.c +++ b/src/ciphers/cast5.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com */ -#include "tomcrypt_private.h" + + /** + @file cast5.c + Implementation of CAST5 (RFC 2144) by Tom St Denis + */ +#include "tomcrypt.h" -#ifdef LTC_CAST5 +#ifdef CAST5 const struct ltc_cipher_descriptor cast5_desc = { "cast5", @@ -19,378 +27,378 @@ const struct ltc_cipher_descriptor cast5_desc = { &cast5_test, &cast5_done, &cast5_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; 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 + Initialize the 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) @@ -398,7 +406,7 @@ static const ulong32 S8[256] = { @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) +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 @@ -411,9 +419,9 @@ int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ LTC_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; } @@ -476,7 +484,7 @@ int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ zeromem(buf, sizeof(buf)); zeromem(x, sizeof(x)); zeromem(z, sizeof(z)); -#endif +#endif return CRYPT_OK; } @@ -485,47 +493,52 @@ int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ 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 + Encrypts a block of text with 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) +static int _cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #else -int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #endif { ulong32 R, L; @@ -534,7 +547,7 @@ int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetri LTC_ARGCHK(ct != NULL); LTC_ARGCHK(skey != 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]); @@ -561,24 +574,24 @@ int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetri #ifdef LTC_CLEAN_STACK -int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) { - int err = s_cast5_ecb_encrypt(pt,ct,skey); + int err =_cast5_ecb_encrypt(pt,ct,skey); burn_stack(sizeof(ulong32)*3); return err; } #endif /** - Decrypts a block of text with LTC_CAST5 + Decrypts a block of text with CAST5 @param ct The input ciphertext (8 bytes) @param pt The output plaintext (8 bytes) - @param skey The key as scheduled + @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) +static int _cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #else -int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #endif { ulong32 R, L; @@ -587,7 +600,7 @@ int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetri LTC_ARGCHK(ct != NULL); LTC_ARGCHK(skey != 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]); @@ -614,23 +627,23 @@ int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetri } #ifdef LTC_CLEAN_STACK -int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) { - int err = s_cast5_ecb_decrypt(ct,pt,skey); + int err = _cast5_ecb_decrypt(ct,pt,skey); burn_stack(sizeof(ulong32)*3); return err; } #endif /** - Performs a self-test of the LTC_CAST5 block cipher + Performs a self-test of the 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 +676,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,18 +684,17 @@ 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 +/** Terminate the context @param skey The scheduled key */ void cast5_done(symmetric_key *skey) { - LTC_UNUSED_PARAM(skey); } /** @@ -696,14 +707,14 @@ int cast5_keysize(int *keysize) LTC_ARGCHK(keysize != NULL); if (*keysize < 5) { return CRYPT_INVALID_KEYSIZE; - } - if (*keysize > 16) { + } else if (*keysize > 16) { *keysize = 16; } return CRYPT_OK; -} - -#undef GB -#undef FI +} #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/des.c b/src/ciphers/des.c index bdeca80f..8c9ea12f 100644 --- a/src/ciphers/des.c +++ b/src/ciphers/des.c @@ -1,15 +1,23 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file des.c - DES code submitted by Dobes Vandermeer + DES code submitted by Dobes Vandermeer */ -#ifdef LTC_DES +#ifdef DES -#define EN0 0 +#define EN0 0 #define DE1 1 const struct ltc_cipher_descriptor des_desc = @@ -23,40 +31,26 @@ const struct ltc_cipher_descriptor des_desc = &des_test, &des_done, &des_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; const struct ltc_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 + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; 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 +60,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 }; @@ -257,1057 +251,1057 @@ static const ulong32 SP8[64] = 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) +static void _deskey(const unsigned char *key, short edf, ulong32 *keyout) #else static void deskey(const unsigned char *key, short edf, ulong32 *keyout) #endif @@ -1361,13 +1355,13 @@ static void deskey(const unsigned char *key, short edf, ulong32 *keyout) #ifdef LTC_CLEAN_STACK static 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) +static void _cookey(const ulong32 *raw1, ulong32 *keyout) #else static void cookey(const ulong32 *raw1, ulong32 *keyout) #endif @@ -1391,13 +1385,13 @@ 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 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 @@ -1405,7 +1399,7 @@ static void cookey(const ulong32 *raw1, ulong32 *keyout) #ifndef LTC_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; @@ -1433,21 +1427,21 @@ static void s_desfunc(ulong32 *block, const ulong32 *keys) right = ROLc(right, 1); work = (leftt ^ right) & 0xaaaaaaaaL; - + leftt ^= work; right ^= work; leftt = ROLc(leftt, 1); -#else +#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); } @@ -1456,9 +1450,9 @@ static void s_desfunc(ulong32 *block, const ulong32 *keys) for (cur_round = 0; cur_round < 8; cur_round++) { work = RORc(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] @@ -1477,7 +1471,7 @@ static void s_desfunc(ulong32 *block, const ulong32 *keys) ^ SP2[(work >> 24) & 0x3fL]; } -#ifdef LTC_SMALL_CODE +#ifdef LTC_SMALL_CODE right = RORc(right, 1); work = (leftt ^ right) & 0xaaaaaaaaL; leftt ^= work; @@ -1496,22 +1490,22 @@ 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; } @@ -1519,7 +1513,7 @@ static void s_desfunc(ulong32 *block, const ulong32 *keys) #ifdef LTC_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 @@ -1551,35 +1545,6 @@ 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 @@ -1597,27 +1562,17 @@ int des3_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_k 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; } @@ -1629,7 +1584,7 @@ int des3_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_k @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) +int des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) { ulong32 work[2]; LTC_ARGCHK(pt != NULL); @@ -1647,10 +1602,10 @@ int des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_ 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 + @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) +int des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) { ulong32 work[2]; LTC_ARGCHK(pt != NULL); @@ -1660,57 +1615,7 @@ int des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_ LOAD32H(work[1], ct+4); desfunc(work, skey->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) -{ - 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); - 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]; - 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) -{ - 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); - 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]; - STORE32H(work[0],pt+0); - STORE32H(work[1],pt+4); + STORE32H(work[1],pt+4); return CRYPT_OK; } @@ -1721,10 +1626,10 @@ int desx_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric @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) +int des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) { ulong32 work[2]; - + LTC_ARGCHK(pt != NULL); LTC_ARGCHK(ct != NULL); LTC_ARGCHK(skey != NULL); @@ -1742,10 +1647,10 @@ int des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric 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 + @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) +int des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) { ulong32 work[2]; LTC_ARGCHK(pt != NULL); @@ -1769,209 +1674,73 @@ 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,178 +1783,84 @@ 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 +/** Terminate the context @param skey The scheduled key */ void des_done(symmetric_key *skey) { - 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 +/** Terminate the context @param skey The scheduled key */ void des3_done(symmetric_key *skey) { - LTC_UNUSED_PARAM(skey); } @@ -2209,7 +1884,7 @@ int des_keysize(int *keysize) @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 *keysize) { LTC_ARGCHK(keysize != NULL); if(*keysize < 24) { @@ -2219,27 +1894,9 @@ int desx_keysize(int *keysize) 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index acfe0085..6eab31f1 100644 --- a/src/ciphers/khazad.c +++ b/src/ciphers/khazad.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file khazad.c @@ -8,7 +16,7 @@ Authors: Paulo S.L.M. Barreto and Vincent Rijmen. */ -#ifdef LTC_KHAZAD +#ifdef KHAZAD const struct ltc_cipher_descriptor khazad_desc = { "khazad", @@ -20,10 +28,14 @@ const struct ltc_cipher_descriptor khazad_desc = { &khazad_test, &khazad_done, &khazad_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; -#define R 8 +#define R 8 +#define KEYSIZE 128 +#define KEYSIZEB (KEYSIZE/8) +#define BLOCKSIZE 64 +#define BLOCKSIZEB (BLOCKSIZE/8) static const ulong64 T0[256] = { CONST64(0xbad3d268bbb96a01), CONST64(0x54fc4d19e59a66b1), CONST64(0x2f71bc93e26514cd), CONST64(0x749ccdb925871b51), @@ -731,7 +743,7 @@ static void khazad_crypt(const unsigned char *plaintext, unsigned char *cipherte @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) +int khazad_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) { LTC_ARGCHK(pt != NULL); LTC_ARGCHK(ct != NULL); @@ -744,10 +756,10 @@ int khazad_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetr 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 + @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) +int khazad_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) { LTC_ARGCHK(pt != NULL); LTC_ARGCHK(ct != NULL); @@ -771,22 +783,22 @@ int khazad_test(void) { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x49, 0xA4, 0xCE, 0x32, 0xAC, 0x19, 0x0E, 0x3F }, - { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + { 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, 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, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } }; @@ -794,18 +806,17 @@ int khazad_test(void) unsigned char buf[2][8]; symmetric_key skey; - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); 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)) { + if (memcmp(buf[0], tests[x].ct, 8) || memcmp(buf[1], tests[x].pt, 8)) { 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)) { + if (memcmp(buf[0], tests[x].ct, 8)) { return CRYPT_FAIL_TESTVECTOR; } @@ -814,12 +825,11 @@ int khazad_test(void) #endif } -/** Terminate the context +/** Terminate the context @param skey The scheduled key */ void khazad_done(symmetric_key *skey) { - LTC_UNUSED_PARAM(skey); } /** @@ -833,10 +843,13 @@ int khazad_keysize(int *keysize) if (*keysize >= 16) { *keysize = 16; return CRYPT_OK; + } else { + return CRYPT_INVALID_KEYSIZE; } - return CRYPT_INVALID_KEYSIZE; } -#undef R - #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index b4e34ec1..ec28bfa4 100644 --- a/src/ciphers/noekeon.c +++ b/src/ciphers/noekeon.c @@ -1,12 +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@gmail.com, http://libtomcrypt.com + */ /** @file noekeon.c - Implementation of the Noekeon block cipher by Tom St Denis + Implementation of the Noekeon block cipher by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_NOEKEON +#ifdef NOEKEON const struct ltc_cipher_descriptor noekeon_desc = { @@ -19,7 +27,7 @@ const struct ltc_cipher_descriptor noekeon_desc = &noekeon_test, &noekeon_done, &noekeon_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; static const ulong32 RC[] = { @@ -27,7 +35,7 @@ static const ulong32 RC[] = { 0x000000d8UL, 0x000000abUL, 0x0000004dUL, 0x0000009aUL, 0x0000002fUL, 0x0000005eUL, 0x000000bcUL, 0x00000063UL, 0x000000c6UL, 0x00000097UL, 0x00000035UL, 0x0000006aUL, - 0x000000d4UL + 0x000000d4UL }; #define kTHETA(a, b, c, d) \ @@ -41,7 +49,7 @@ static const ulong32 RC[] = { 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; \ @@ -49,13 +57,13 @@ static const ulong32 RC[] = { 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); - + a = ROLc(a, 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); - + a = RORc(a, 1); c = RORc(c, 5); d = RORc(d, 2); + /** Initialize the Noekeon block cipher @param key The symmetric key you wish to pass @@ -67,23 +75,23 @@ static const ulong32 RC[] = { 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]); @@ -102,9 +110,9 @@ int noekeon_setup(const unsigned char *key, int keylen, int num_rounds, symmetri @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) +static int _noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #else -int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #endif { ulong32 a,b,c,d,temp; @@ -113,10 +121,10 @@ int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmet 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); \ @@ -132,7 +140,7 @@ int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmet 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]); @@ -140,11 +148,11 @@ int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmet } #ifdef LTC_CLEAN_STACK -int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) { - int err = s_noekeon_ecb_encrypt(pt, ct, skey); + int err = _noekeon_ecb_encrypt(pt, ct, skey); burn_stack(sizeof(ulong32) * 5 + sizeof(int)); - return err; + return CRYPT_OK; } #endif @@ -152,13 +160,13 @@ int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmet 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 + @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) +static int _noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #else -int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #endif { ulong32 a,b,c,d, temp; @@ -167,17 +175,17 @@ int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmet 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); + PI2(a,b,c,d); for (r = 16; r > 0; --r) { ROUND(r); @@ -193,9 +201,9 @@ int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmet } #ifdef LTC_CLEAN_STACK -int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) { - int err = s_noekeon_ecb_decrypt(ct, pt, skey); + int err = _noekeon_ecb_decrypt(ct, pt, skey); burn_stack(sizeof(ulong32) * 5 + sizeof(int)); return err; } @@ -216,86 +224,59 @@ int noekeon_test(void) } 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 } + { 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)LTC_ARRAY_SIZE(tests); i++) { + + 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) { + 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)) { + 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; - } + /* 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 +/** Terminate the context @param skey The scheduled key */ void noekeon_done(symmetric_key *skey) { - LTC_UNUSED_PARAM(skey); } /** @@ -308,17 +289,15 @@ int noekeon_keysize(int *keysize) LTC_ARGCHK(keysize != NULL); if (*keysize < 16) { return CRYPT_INVALID_KEYSIZE; + } else { + *keysize = 16; + return CRYPT_OK; } - *keysize = 16; - return CRYPT_OK; } -#undef kTHETA -#undef THETA -#undef GAMMA -#undef PI1 -#undef PI2 -#undef ROUND - #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/rc2.c b/src/ciphers/rc2.c index 9a468c1d..7c307bdb 100644 --- a/src/ciphers/rc2.c +++ b/src/ciphers/rc2.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@gmail.com, http://libtomcrypt.com + */ /**********************************************************************\ * To commemorate the 1996 RSA Data Security Conference, the following * * code is released into the public domain by its author. Prost! * @@ -10,14 +18,14 @@ * Thanks to CodeView, SoftIce, and D86 for helping bring this code to * * the public. * \**********************************************************************/ -#include "tomcrypt_private.h" +#include /** @file rc2.c - Implementation of RC2 with fixed effective key length of 64bits -*/ + Implementation of RC2 +*/ -#ifdef LTC_RC2 +#ifdef RC2 const struct ltc_cipher_descriptor rc2_desc = { "rc2", @@ -28,7 +36,7 @@ const struct ltc_cipher_descriptor rc2_desc = { &rc2_test, &rc2_done, &rc2_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; /* 256-entry permutation table, probably derived somehow from pi */ @@ -55,77 +63,58 @@ static const unsigned char permute[256] = { 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) +int rc2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) { unsigned *xkey = skey->rc2.xkey; unsigned char tmp[128]; unsigned T8, TM; - int i; + int i, bits; LTC_ARGCHK(key != NULL); LTC_ARGCHK(skey != NULL); - if (keylen == 0 || keylen > 128 || bits > 1024) { + if (keylen < 8 || keylen > 128) { 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; + 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 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 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); - } + /* 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)); + 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); + + return CRYPT_OK; } /**********************************************************************\ @@ -139,16 +128,16 @@ int rc2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke @return CRYPT_OK if successful */ #ifdef LTC_CLEAN_STACK -static int s_rc2_ecb_encrypt( const unsigned char *pt, +static int _rc2_ecb_encrypt( const unsigned char *pt, unsigned char *ct, - const symmetric_key *skey) + symmetric_key *skey) #else int rc2_ecb_encrypt( const unsigned char *pt, unsigned char *ct, - const symmetric_key *skey) + symmetric_key *skey) #endif { - const unsigned *xkey; + unsigned *xkey; unsigned x76, x54, x32, x10, i; LTC_ARGCHK(pt != NULL); @@ -191,16 +180,16 @@ int rc2_ecb_encrypt( const unsigned char *pt, 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) + symmetric_key *skey) { - int err = s_rc2_ecb_encrypt(pt, ct, skey); + int err = _rc2_ecb_encrypt(pt, ct, skey); burn_stack(sizeof(unsigned *) + sizeof(unsigned) * 5); return err; } @@ -213,21 +202,21 @@ int rc2_ecb_encrypt( const unsigned char *pt, 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 + @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, +static int _rc2_ecb_decrypt( const unsigned char *ct, unsigned char *pt, - const symmetric_key *skey) + symmetric_key *skey) #else int rc2_ecb_decrypt( const unsigned char *ct, unsigned char *pt, - const symmetric_key *skey) + symmetric_key *skey) #endif { unsigned x76, x54, x32, x10; - const unsigned *xkey; + unsigned *xkey; int i; LTC_ARGCHK(pt != NULL); @@ -277,9 +266,9 @@ int rc2_ecb_decrypt( const unsigned char *ct, #ifdef LTC_CLEAN_STACK int rc2_ecb_decrypt( const unsigned char *ct, unsigned char *pt, - const symmetric_key *skey) + symmetric_key *skey) { - int err = s_rc2_ecb_decrypt(ct, pt, skey); + int err = _rc2_ecb_decrypt(ct, pt, skey); burn_stack(sizeof(unsigned *) + sizeof(unsigned) * 4 + sizeof(int)); return err; } @@ -293,49 +282,20 @@ int rc2_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #else static const struct { - int keylen, bits; + int keylen; 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, + { 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 } + }, - { 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, + { 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 }, @@ -348,22 +308,14 @@ int rc2_test(void) 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; - } + 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)) { + + if (memcmp(tmp[0], tests[x].ct, 8) != 0 || memcmp(tmp[1], tests[x].pt, 8) != 0) { return CRYPT_FAIL_TESTVECTOR; } @@ -377,12 +329,11 @@ int rc2_test(void) #endif } -/** Terminate the context +/** Terminate the context @param skey The scheduled key */ void rc2_done(symmetric_key *skey) { - LTC_UNUSED_PARAM(skey); } /** @@ -393,10 +344,9 @@ void rc2_done(symmetric_key *skey) int rc2_keysize(int *keysize) { LTC_ARGCHK(keysize != NULL); - if (*keysize < 1) { + if (*keysize < 8) { return CRYPT_INVALID_KEYSIZE; - } - if (*keysize > 128) { + } else if (*keysize > 128) { *keysize = 128; } return CRYPT_OK; @@ -406,3 +356,7 @@ int rc2_keysize(int *keysize) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/rc5.c b/src/ciphers/rc5.c index dfbc2ee1..1006873f 100644 --- a/src/ciphers/rc5.c +++ b/src/ciphers/rc5.c @@ -1,14 +1,22 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ /** @file rc5.c - LTC_RC5 code by Tom St Denis + RC5 code by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_RC5 +#ifdef RC5 const struct ltc_cipher_descriptor rc5_desc = { @@ -21,10 +29,9 @@ const struct ltc_cipher_descriptor rc5_desc = &rc5_test, &rc5_done, &rc5_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; -#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, @@ -36,7 +43,7 @@ static const ulong32 stab[50] = { }; /** - Initialize the LTC_RC5 block cipher + Initialize the 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) @@ -44,7 +51,7 @@ static const ulong32 stab[50] = { @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) +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 @@ -53,13 +60,13 @@ int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke LTC_ARGCHK(skey != NULL); LTC_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 +74,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 +87,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,7 +99,7 @@ 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++) { + for (A = B = i = j = v = 0; v < s; v++) { A = S[i] = ROLc(S[i] + A + B, 3); B = L[j] = ROL(L[j] + A + B, (A+B)); if (++i == t) { i = 0; } @@ -105,42 +112,37 @@ int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke 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 + Encrypts a block of text with 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) +static int _rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #else -int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #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; - } - 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 = ROL(A ^ B, B) + K[0]; @@ -163,42 +165,37 @@ int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_ } #ifdef LTC_CLEAN_STACK -int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) { - int err = s_rc5_ecb_encrypt(pt, ct, skey); + int err = _rc5_ecb_encrypt(pt, ct, skey); burn_stack(sizeof(ulong32) * 2 + sizeof(int)); return err; } #endif /** - Decrypts a block of text with LTC_RC5 + Decrypts a block of text with RC5 @param ct The input ciphertext (8 bytes) @param pt The output plaintext (8 bytes) - @param skey The key as scheduled + @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) +static int _rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #else -int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #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; - } - LOAD32L(A, &ct[0]); LOAD32L(B, &ct[4]); K = skey->rc5.K + (skey->rc5.rounds << 1); - + if ((skey->rc5.rounds & 1) == 0) { K -= 2; for (r = skey->rc5.rounds - 1; r >= 0; r -= 2) { @@ -224,23 +221,23 @@ int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_ } #ifdef LTC_CLEAN_STACK -int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) { - int err = s_rc5_ecb_decrypt(ct, pt, skey); + int err = _rc5_ecb_decrypt(ct, pt, skey); burn_stack(sizeof(ulong32) * 2 + sizeof(int)); return err; } #endif /** - Performs a self-test of the LTC_RC5 block cipher + Performs a self-test of the 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 +275,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,12 +289,11 @@ int rc5_test(void) #endif } -/** Terminate the context +/** Terminate the context @param skey The scheduled key */ void rc5_done(symmetric_key *skey) { - LTC_UNUSED_PARAM(skey); } /** @@ -311,16 +306,17 @@ int rc5_keysize(int *keysize) LTC_ARGCHK(keysize != NULL); if (*keysize < 8) { return CRYPT_INVALID_KEYSIZE; - } - if (*keysize > 128) { + } else if (*keysize > 128) { *keysize = 128; } return CRYPT_OK; } -#undef stab - #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/rc6.c b/src/ciphers/rc6.c index 5b7eab92..1e5f1761 100644 --- a/src/ciphers/rc6.c +++ b/src/ciphers/rc6.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@gmail.com, http://libtomcrypt.com + */ /** @file rc6.c - LTC_RC6 code by Tom St Denis + RC6 code by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_RC6 +#ifdef RC6 const struct ltc_cipher_descriptor rc6_desc = { @@ -20,10 +28,9 @@ const struct ltc_cipher_descriptor rc6_desc = &rc6_test, &rc6_done, &rc6_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; -#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, @@ -33,7 +40,7 @@ static const ulong32 stab[44] = { 0x708c564bUL, 0x0ec3d004UL, 0xacfb49bdUL, 0x4b32c376UL }; /** - Initialize the LTC_RC6 block cipher + Initialize the 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) @@ -41,7 +48,7 @@ static const ulong32 stab[44] = { @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) +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 @@ -52,7 +59,7 @@ int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke LTC_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 +69,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 +78,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,15 +89,15 @@ 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++) { + for (A = B = i = j = v = 0; v < s; v++) { A = S[i] = ROLc(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; @@ -100,28 +107,27 @@ int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke 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 + Encrypts a block of text with 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) +static int _rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #else -int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #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); @@ -134,8 +140,8 @@ int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_ t = (b * (b + b + 1)); t = ROLc(t, 5); \ u = (d * (d + d + 1)); u = ROLc(u, 5); \ a = ROL(a^t,u) + K[0]; \ - c = ROL(c^u,t) + K[1]; K += 2; - + c = ROL(c^u,t) + K[1]; K += 2; + K = skey->rc6.K + 2; for (r = 0; r < 20; r += 4) { RND(a,b,c,d); @@ -143,7 +149,7 @@ int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_ RND(c,d,a,b); RND(d,a,b,c); } - + #undef RND a += skey->rc6.K[42]; @@ -153,53 +159,52 @@ int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_ } #ifdef LTC_CLEAN_STACK -int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) { - int err = s_rc6_ecb_encrypt(pt, ct, skey); + int err = _rc6_ecb_encrypt(pt, ct, skey); burn_stack(sizeof(ulong32) * 6 + sizeof(int)); return err; } #endif /** - Decrypts a block of text with LTC_RC6 + Decrypts a block of text with RC6 @param ct The input ciphertext (16 bytes) @param pt The output plaintext (16 bytes) - @param skey The key as scheduled + @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) +static int _rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #else -int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #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); - + 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]; - + #define RND(a,b,c,d) \ t = (b * (b + b + 1)); t = ROLc(t, 5); \ u = (d * (d + d + 1)); u = ROLc(u, 5); \ c = ROR(c - K[1], t) ^ u; \ a = ROR(a - K[0], u) ^ t; K -= 2; - + K = skey->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]; @@ -210,23 +215,23 @@ int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_ } #ifdef LTC_CLEAN_STACK -int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) { - int err = s_rc6_ecb_decrypt(ct, pt, skey); + int err = _rc6_ecb_decrypt(ct, pt, skey); burn_stack(sizeof(ulong32) * 6 + sizeof(int)); return err; } #endif /** - Performs a self-test of the LTC_RC6 block cipher + Performs a self-test of the 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 +285,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,12 +316,11 @@ int rc6_test(void) #endif } -/** Terminate the context +/** Terminate the context @param skey The scheduled key */ void rc6_done(symmetric_key *skey) { - LTC_UNUSED_PARAM(skey); } /** @@ -313,14 +333,16 @@ int rc6_keysize(int *keysize) LTC_ARGCHK(keysize != NULL); if (*keysize < 8) { return CRYPT_INVALID_KEYSIZE; - } - if (*keysize > 128) { + } else if (*keysize > 128) { *keysize = 128; } return CRYPT_OK; } -#undef RND -#undef stab +#endif /*RC6*/ -#endif /*LTC_RC6*/ + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/safer/safer.c b/src/ciphers/safer/safer.c index 2993967f..ed99b40e 100644 --- a/src/ciphers/safer/safer.c +++ b/src/ciphers/safer/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@gmail.com, http://libtomcrypt.com + */ /******************************************************************************* * * 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,61 +28,57 @@ * *******************************************************************************/ -#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 ltc_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 + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }, 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 + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }, 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 + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }, 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 + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; /******************* Constants ************************************************/ @@ -91,70 +95,70 @@ 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, +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 zeromem(ka, sizeof(ka)); zeromem(kb, sizeof(kb)); @@ -162,23 +166,23 @@ static void safer_expand_userkey(const unsigned char *userkey_1, } #ifdef LTC_CLEAN_STACK -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) { - 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); - 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 +190,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); - 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 +207,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); - 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 +224,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); - 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 +241,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) +static int _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) +int 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(block_in != NULL); + LTC_ARGCHK(block_out != NULL); LTC_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 +281,46 @@ 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; + 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; return CRYPT_OK; } #ifdef LTC_CLEAN_STACK -int safer_ecb_encrypt(const unsigned char *pt, - unsigned char *ct, - const symmetric_key *skey) +int safer_ecb_encrypt(const unsigned char *block_in, + unsigned char *block_out, + symmetric_key *skey) { - int err = s_safer_ecb_encrypt(pt, ct, skey); + int err = _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) +static int _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) +int 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(block_in != NULL); + LTC_ARGCHK(block_out != NULL); LTC_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,19 +336,19 @@ 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; + 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; return CRYPT_OK; } #ifdef LTC_CLEAN_STACK -int safer_ecb_decrypt(const unsigned char *ct, - unsigned char *pt, - const symmetric_key *skey) +int safer_ecb_decrypt(const unsigned char *block_in, + unsigned char *block_out, + symmetric_key *skey) { - int err = s_safer_ecb_decrypt(ct, pt, skey); + int err = _safer_ecb_decrypt(block_in, block_out, skey); burn_stack(sizeof(unsigned char) * 9 + sizeof(unsigned int) + sizeof(unsigned char *)); return err; } @@ -355,9 +359,10 @@ int safer_64_keysize(int *keysize) LTC_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) @@ -365,16 +370,17 @@ int safer_128_keysize(int *keysize) LTC_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 +396,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 +409,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 +426,32 @@ 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 +/** 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 +468,24 @@ 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 + + + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/safer/safer_tab.c b/src/ciphers/safer/safer_tab.c index 421d77e0..f50a7178 100644 --- a/src/ciphers/safer/safer_tab.c +++ b/src/ciphers/safer/safer_tab.c @@ -1,54 +1,68 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ /** @file safer_tab.c - Tables for LTC_SAFER block ciphers -*/ + Tables for SAFER block ciphers +*/ + +#include "tomcrypt.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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/safer/saferp.c b/src/ciphers/safer/saferp.c index 73d08022..4a2e71df 100644 --- a/src/ciphers/safer/saferp.c +++ b/src/ciphers/safer/saferp.c @@ -1,18 +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@gmail.com, http://libtomcrypt.com + */ -/** +/** @file saferp.c - LTC_SAFER+ Implementation by Tom St Denis + SAFER+ Implementation by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_SAFERP - -#ifndef LTC_SAFER_TAB_C -#define LTC_SAFER_TAB_C -#include "safer_tab.c" -#endif +#ifdef SAFERP const struct ltc_cipher_descriptor saferp_desc = { @@ -25,21 +28,23 @@ const struct ltc_cipher_descriptor saferp_desc = &saferp_test, &saferp_done, &saferp_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; -/* 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 +60,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 +79,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 +90,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 +102,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 LTC_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 @@ -209,7 +206,7 @@ static const unsigned char safer_bias[33][16] = { { 62, 220, 134, 119, 215, 166, 17, 251, 244, 186, 146, 145, 100, 131, 241, 51}}; /** - Initialize the LTC_SAFER+ block cipher + Initialize the 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) @@ -231,7 +228,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 +237,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 +265,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 +284,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 +292,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 +308,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++) { @@ -328,13 +325,13 @@ int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric } /** - Encrypts a block of text with LTC_SAFER+ + Encrypts a block of text with 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) +int saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) { unsigned char b[16]; int x; @@ -343,10 +340,6 @@ int saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetr LTC_ARGCHK(ct != NULL); LTC_ARGCHK(skey != NULL); - if (skey->saferp.rounds < 8 || skey->saferp.rounds > 16) { - return CRYPT_INVALID_ROUNDS; - } - /* do eight rounds */ for (x = 0; x < 16; x++) { b[x] = pt[x]; @@ -396,13 +389,13 @@ int saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetr } /** - Decrypts a block of text with LTC_SAFER+ + Decrypts a block of text with SAFER+ @param ct The input ciphertext (16 bytes) @param pt The output plaintext (16 bytes) - @param skey The key as scheduled + @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) +int saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) { unsigned char b[16]; int x; @@ -411,10 +404,6 @@ int saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetr LTC_ARGCHK(ct != NULL); LTC_ARGCHK(skey != NULL); - if (skey->saferp.rounds < 8 || skey->saferp.rounds > 16) { - return CRYPT_INVALID_ROUNDS; - } - /* do eight rounds */ b[0] = ct[0] ^ skey->saferp.K[skey->saferp.rounds*2][0]; b[1] = (ct[1] - skey->saferp.K[skey->saferp.rounds*2][1]) & 255; @@ -464,47 +453,47 @@ int saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetr } /** - Performs a self-test of the LTC_SAFER+ block cipher + Performs a self-test of the 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 +507,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,12 +522,11 @@ int saferp_test(void) #endif } -/** Terminate the context +/** Terminate the context @param skey The scheduled key */ void saferp_done(symmetric_key *skey) { - LTC_UNUSED_PARAM(skey); } /** @@ -550,10 +537,9 @@ void saferp_done(symmetric_key *skey) int saferp_keysize(int *keysize) { LTC_ARGCHK(keysize != NULL); - - if (*keysize < 16) { + + if (*keysize < 16) return CRYPT_INVALID_KEYSIZE; - } if (*keysize < 24) { *keysize = 16; } else if (*keysize < 32) { @@ -564,13 +550,10 @@ int saferp_keysize(int *keysize) return CRYPT_OK; } -#undef ROUND -#undef iROUND -#undef PHT -#undef iPHT -#undef SHUF -#undef iSHUF -#undef LT -#undef iLT - #endif + + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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/skipjack.c b/src/ciphers/skipjack.c index 3146af40..a37f1674 100644 --- a/src/ciphers/skipjack.c +++ b/src/ciphers/skipjack.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@gmail.com, http://libtomcrypt.com + */ /** @file skipjack.c Skipjack Implementation by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_SKIPJACK +#ifdef SKIPJACK const struct ltc_cipher_descriptor skipjack_desc = { @@ -20,10 +28,9 @@ const struct ltc_cipher_descriptor skipjack_desc = &skipjack_test, &skipjack_done, &skipjack_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; -#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, @@ -68,7 +75,7 @@ int skipjack_setup(const unsigned char *key, int keylen, int num_rounds, symmetr return CRYPT_INVALID_KEYSIZE; } - if (num_rounds != 32 && num_rounds != 0) { + if (num_rounds != 32 && num_rounds != 0) { return CRYPT_INVALID_ROUNDS; } @@ -102,8 +109,7 @@ int skipjack_setup(const unsigned char *key, int keylen, int num_rounds, symmetr 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 +121,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; @@ -136,9 +141,9 @@ static unsigned ig_func(unsigned w, int *kp, const unsigned char *key) @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) +static int _skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #else -int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #endif { unsigned w1,w2,w3,w4,tmp,tmp1; @@ -184,9 +189,9 @@ int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symme } #ifdef LTC_CLEAN_STACK -int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) { - int err = s_skipjack_ecb_encrypt(pt, ct, skey); + int err = _skipjack_ecb_encrypt(pt, ct, skey); burn_stack(sizeof(unsigned) * 8 + sizeof(int) * 2); return err; } @@ -196,13 +201,13 @@ int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symme 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 + @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) +static int _skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #else -int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #endif { unsigned w1,w2,w3,w4,tmp; @@ -218,7 +223,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 */ @@ -252,9 +257,9 @@ int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symme } #ifdef LTC_CLEAN_STACK -int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) { - int err = s_skipjack_ecb_decrypt(ct, pt, skey); + int err = _skipjack_ecb_decrypt(ct, pt, skey); burn_stack(sizeof(unsigned) * 7 + sizeof(int) * 2); return err; } @@ -268,7 +273,7 @@ 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 +298,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,12 +313,11 @@ int skipjack_test(void) #endif } -/** Terminate the context +/** Terminate the context @param skey The scheduled key */ void skipjack_done(symmetric_key *skey) { - LTC_UNUSED_PARAM(skey); } /** @@ -327,19 +330,14 @@ int skipjack_keysize(int *keysize) LTC_ARGCHK(keysize != NULL); if (*keysize < 10) { return CRYPT_INVALID_KEYSIZE; - } - if (*keysize > 10) { + } else if (*keysize > 10) { *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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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/twofish/twofish.c b/src/ciphers/twofish/twofish.c index 9fb6e24f..9c019987 100644 --- a/src/ciphers/twofish/twofish.c +++ b/src/ciphers/twofish/twofish.c @@ -1,18 +1,26 @@ -/* 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@gmail.com, http://libtomcrypt.com */ -#include "tomcrypt_private.h" -#ifdef LTC_TWOFISH + /** + @file twofish.c + Implementation of Twofish by Tom St Denis + */ +#include "tomcrypt.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 @@ -27,16 +35,20 @@ const struct ltc_cipher_descriptor twofish_desc = &twofish_test, &twofish_done, &twofish_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; /* 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 +58,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 +65,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 @@ -85,7 +92,7 @@ static const unsigned char qbox[2][4][16] = { /* computes S_i[x] */ #ifdef LTC_CLEAN_STACK -static ulong32 s_sbox(int i, ulong32 x) +static ulong32 _sbox(int i, ulong32 x) #else static ulong32 sbox(int i, ulong32 x) #endif @@ -127,13 +134,13 @@ static ulong32 sbox(int i, ulong32 x) 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 /* LTC_TWOFISH_TABLES */ +#endif /* TWOFISH_TABLES */ /* computes ab mod p */ static ulong32 gf_mult(ulong32 a, ulong32 b, ulong32 p) @@ -145,20 +152,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 +200,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 +217,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 +227,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,37 +244,34 @@ 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__) @@ -278,19 +282,15 @@ static void h_func(const unsigned char *in, unsigned char *out, const unsigned c #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) +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; @@ -321,16 +321,16 @@ static ulong32 g_func(ulong32 x, const symmetric_key *key) #define g1_func(x, key) g_func(ROLc(x, 8), key) #ifdef LTC_CLEAN_STACK -static ulong32 g_func(ulong32 x, const symmetric_key *key) +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 /* LTC_TWOFISH_SMALL */ +#endif /* TWOFISH_SMALL */ /** Initialize the Twofish block cipher @@ -341,12 +341,12 @@ static ulong32 g_func(ulong32 x, const symmetric_key *key) @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) +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; @@ -374,7 +374,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)); } @@ -408,12 +408,12 @@ int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetri skey->twofish.K[x+x+1] = ROLc(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 +421,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 +430,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,7 +443,7 @@ 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 @@ -454,7 +454,7 @@ int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetri 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; } @@ -468,28 +468,27 @@ int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetri @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) +static int _twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #else -int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) #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__) + +#if !defined(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 +#endif LOAD32L(a,&pt[0]); LOAD32L(b,&pt[4]); LOAD32L(c,&pt[8]); LOAD32L(d,&pt[12]); @@ -497,20 +496,20 @@ int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmet b ^= skey->twofish.K[1]; c ^= skey->twofish.K[2]; d ^= skey->twofish.K[3]; - + k = skey->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]); k += 4; - } + } /* output with "undo last swap" */ ta = c ^ skey->twofish.K[4]; @@ -526,9 +525,9 @@ int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmet } #ifdef LTC_CLEAN_STACK -int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey) +int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) { - int err = s_twofish_ecb_encrypt(pt, ct, skey); + int err = _twofish_ecb_encrypt(pt, ct, skey); burn_stack(sizeof(ulong32) * 10 + sizeof(int)); return err; } @@ -538,32 +537,31 @@ int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmet 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 + @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) +static int _twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #else -int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) #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__) + +#if !defined(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 +#endif /* load input */ LOAD32L(ta,&ct[0]); LOAD32L(tb,&ct[4]); @@ -594,7 +592,7 @@ int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmet b ^= skey->twofish.K[1]; c ^= skey->twofish.K[2]; d ^= skey->twofish.K[3]; - + /* store */ STORE32L(a, &pt[0]); STORE32L(b, &pt[4]); STORE32L(c, &pt[8]); STORE32L(d, &pt[12]); @@ -602,9 +600,9 @@ int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmet } #ifdef LTC_CLEAN_STACK -int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric_key *skey) +int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) { - int err = s_twofish_ecb_decrypt(ct, pt, skey); + int err =_twofish_ecb_decrypt(ct, pt, skey); burn_stack(sizeof(ulong32) * 10 + sizeof(int)); return err; } @@ -618,8 +616,8 @@ 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 +637,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,36 +651,34 @@ 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 +/** Terminate the context @param skey The scheduled key */ void twofish_done(symmetric_key *skey) { - LTC_UNUSED_PARAM(skey); } /** @@ -693,33 +689,25 @@ void twofish_done(symmetric_key *skey) int twofish_keysize(int *keysize) { LTC_ARGCHK(keysize); - if (*keysize < 16) { + if (*keysize < 16) return CRYPT_INVALID_KEYSIZE; - } if (*keysize < 24) { *keysize = 16; return CRYPT_OK; - } - if (*keysize < 32) { + } else if (*keysize < 32) { *keysize = 24; return CRYPT_OK; + } else { + *keysize = 32; + 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 + + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/twofish/twofish_tab.c b/src/ciphers/twofish/twofish_tab.c index 941ee274..cdd628b8 100644 --- a/src/ciphers/twofish/twofish_tab.c +++ b/src/ciphers/twofish/twofish_tab.c @@ -1,486 +1,496 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ /** @file twofish_tab.c Twofish tables, Tom St Denis */ -#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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/xtea.c b/src/ciphers/xtea.c index 0120eb61..382555ba 100644 --- a/src/ciphers/xtea.c +++ b/src/ciphers/xtea.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@gmail.com, http://libtomcrypt.com + */ /** @file xtea.c - Implementation of eXtended TEA, Tom St Denis + Implementation of XTEA, Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_XTEA +#ifdef XTEA const struct ltc_cipher_descriptor xtea_desc = { @@ -20,13 +28,13 @@ const struct ltc_cipher_descriptor xtea_desc = &xtea_test, &xtea_done, &xtea_keysize, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 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]; - + unsigned long x, sum, K[4]; + LTC_ARGCHK(key != NULL); LTC_ARGCHK(skey != NULL); @@ -40,42 +48,42 @@ int xtea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_k } /* load key */ - LOAD32H(K[0], key+0); - LOAD32H(K[1], key+4); - LOAD32H(K[2], key+8); - LOAD32H(K[3], key+12); - + 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 LTC_CLEAN_STACK zeromem(&K, sizeof(K)); -#endif - +#endif + return CRYPT_OK; } /** - Encrypts a block of text with LTC_XTEA + Encrypts a block of text with 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) +int xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) { - ulong32 y, z; + unsigned long y, z; int r; LTC_ARGCHK(pt != NULL); LTC_ARGCHK(ct != NULL); LTC_ARGCHK(skey != NULL); - LOAD32H(y, &pt[0]); - LOAD32H(z, &pt[4]); + LOAD32L(y, &pt[0]); + LOAD32L(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; @@ -89,29 +97,29 @@ int xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric 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]); + STORE32L(y, &ct[0]); + STORE32L(z, &ct[4]); return CRYPT_OK; } /** - Decrypts a block of text with LTC_XTEA + Decrypts a block of text with XTEA @param ct The input ciphertext (8 bytes) @param pt The output plaintext (8 bytes) - @param skey The key as scheduled + @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) +int xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) { - ulong32 y, z; + unsigned long y, z; int r; LTC_ARGCHK(pt != NULL); LTC_ARGCHK(ct != NULL); LTC_ARGCHK(skey != NULL); - LOAD32H(y, &ct[0]); - LOAD32H(z, &ct[4]); + LOAD32L(y, &ct[0]); + LOAD32L(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; @@ -125,108 +133,56 @@ int xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, const symmetric 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]); + STORE32L(y, &pt[0]); + STORE32L(z, &pt[4]); return CRYPT_OK; } /** - Performs a self-test of the LTC_XTEA block cipher + Performs a self-test of the 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 } - } - }; + #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 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); + int err, y; - 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; - } + 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; - } /* for */ return CRYPT_OK; #endif } -/** Terminate the context +/** Terminate the context @param skey The scheduled key */ void xtea_done(symmetric_key *skey) { - LTC_UNUSED_PARAM(skey); } /** @@ -238,7 +194,7 @@ int xtea_keysize(int *keysize) { LTC_ARGCHK(keysize != NULL); if (*keysize < 16) { - return CRYPT_INVALID_KEYSIZE; + return CRYPT_INVALID_KEYSIZE; } *keysize = 16; return CRYPT_OK; @@ -249,3 +205,7 @@ int xtea_keysize(int *keysize) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 4611a432..57dafb7d 100644 --- a/src/encauth/ccm/ccm_memory.c +++ b/src/encauth/ccm/ccm_memory.c @@ -1,19 +1,24 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ccm_memory.c CCM support, process a block of memory, Tom St Denis */ -#ifdef LTC_CCM_MODE +#ifdef 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) @@ -22,17 +27,17 @@ @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 pt [out] 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 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 ccm_memory(int cipher, const unsigned char *key, unsigned long keylen, - symmetric_ECB *uskey, + symmetric_key *uskey, const unsigned char *nonce, unsigned long noncelen, const unsigned char *header, unsigned long headerlen, unsigned char *pt, unsigned long ptlen, @@ -40,9 +45,8 @@ int ccm_memory(int cipher, 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; + unsigned char PAD[16], ctr[16], CTRPAD[16], b; + symmetric_key *skey; int err; unsigned long len, L, x, y, z, CTRlen; @@ -58,8 +62,6 @@ int ccm_memory(int cipher, LTC_ARGCHK(tag != NULL); LTC_ARGCHK(taglen != NULL); - pt_real = pt; - #ifdef LTC_FAST if (16 % sizeof(LTC_FAST_TYPE)) { return CRYPT_INVALID_ARG; @@ -74,12 +76,14 @@ int ccm_memory(int cipher, return CRYPT_INVALID_CIPHER; } - /* make sure the taglen is valid */ - if (*taglen < 4 || *taglen > 16 || (*taglen % 2) == 1 || headerlen > 0x7fffffffu) { - return CRYPT_INVALID_ARG; + /* make sure the taglen is even and <= 16 */ + *taglen &= ~1; + if (*taglen > 16) { + *taglen = 16; } - /* CCM nonce is 7..13 bytes */ - if (noncelen < 7 || noncelen > 13) { + + /* can't use < 4 */ + if (*taglen < 4) { return CRYPT_INVALID_ARG; } @@ -87,11 +91,11 @@ int ccm_memory(int cipher, if (cipher_descriptor[cipher].accel_ccm_memory != NULL) { return cipher_descriptor[cipher].accel_ccm_memory( key, keylen, - &uskey->key, + uskey, nonce, noncelen, header, headerlen, pt, ptlen, - ct, + ct, tag, taglen, direction); } @@ -108,17 +112,10 @@ int ccm_memory(int cipher, } /* increase L to match the nonce len */ + noncelen = (noncelen > 13) ? 13 : noncelen; 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) { @@ -128,7 +125,7 @@ int ccm_memory(int cipher, } /* initialize the cipher */ - if ((err = ecb_start(cipher, key, keylen, 0, skey)) != CRYPT_OK) { + if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, skey)) != CRYPT_OK) { XFREE(skey); return err; } @@ -136,23 +133,14 @@ int ccm_memory(int cipher, 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) | + PAD[x++] = ((headerlen > 0) ? (1<<6) : 0) | (((*taglen - 2)>>1)<<3) | - (L-1)); + (L-1); /* nonce */ - for (y = 0; y < noncelen; y++) { + for (y = 0; y < (16 - (L + 1)); y++) { PAD[x++] = nonce[y]; } @@ -169,23 +157,19 @@ int ccm_memory(int cipher, PAD[x++] = 0; } for (; y < L; y++) { - if (x >= sizeof(PAD)) { - err = CRYPT_INVALID_ARG; - goto error; - } - PAD[x++] = (unsigned char)((len >> 24) & 255); + PAD[x++] = (len >> 24) & 255; len <<= 8; } /* encrypt PAD */ - if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) { + if ((err = cipher_descriptor[cipher].ecb_encrypt(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; @@ -203,7 +187,7 @@ int ccm_memory(int cipher, 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) { + if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) { goto error; } x = 0; @@ -211,9 +195,11 @@ int ccm_memory(int cipher, PAD[x++] ^= header[y]; } - /* remainder */ - if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) { - goto error; + /* remainder? */ + if (x != 0) { + if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) { + goto error; + } } } @@ -221,8 +207,8 @@ int ccm_memory(int cipher, x = 0; /* flags */ - ctr[x++] = (unsigned char)L-1; - + ctr[x++] = L-1; + /* nonce */ for (y = 0; y < (16 - (L+1)); ++y) { ctr[x++] = nonce[y]; @@ -247,41 +233,41 @@ int ccm_memory(int cipher, ctr[z] = (ctr[z] + 1) & 255; if (ctr[z]) break; } - if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) { + if ((err = cipher_descriptor[cipher].ecb_encrypt(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]); + *((LTC_FAST_TYPE*)(&PAD[z])) ^= *((LTC_FAST_TYPE*)(&pt[y+z])); + *((LTC_FAST_TYPE*)(&ct[y+z])) = *((LTC_FAST_TYPE*)(&pt[y+z])) ^ *((LTC_FAST_TYPE*)(&CTRPAD[z])); } - if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) { + if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) { goto error; } } - } else { /* direction == CCM_DECRYPT */ + } else { 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) { + if ((err = cipher_descriptor[cipher].ecb_encrypt(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]); + *((LTC_FAST_TYPE*)(&pt[y+z])) = *((LTC_FAST_TYPE*)(&ct[y+z])) ^ *((LTC_FAST_TYPE*)(&CTRPAD[z])); + *((LTC_FAST_TYPE*)(&PAD[z])) ^= *((LTC_FAST_TYPE*)(&pt[y+z])); } - if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) { + if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) { goto error; } } - } - } + } + } #endif for (; y < ptlen; y++) { @@ -291,7 +277,7 @@ int ccm_memory(int cipher, ctr[z] = (ctr[z] + 1) & 255; if (ctr[z]) break; } - if ((err = ecb_encrypt_block(ctr, CTRPAD, skey)) != CRYPT_OK) { + if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) { goto error; } CTRlen = 0; @@ -307,73 +293,43 @@ int ccm_memory(int cipher, } if (x == 16) { - if ((err = ecb_encrypt_block(PAD, PAD, skey)) != CRYPT_OK) { + if ((err = cipher_descriptor[cipher].ecb_encrypt(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) { + if ((err = cipher_descriptor[cipher].ecb_encrypt(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) { + /* setup CTR for the TAG */ + ctr[14] = ctr[15] = 0x00; + if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) { goto error; } if (skey != uskey) { - ecb_done(skey); -#ifdef LTC_CLEAN_STACK - zeromem(skey, sizeof(*skey)); -#endif + cipher_descriptor[cipher].done(skey); } - 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); - } + /* store the TAG */ + for (x = 0; x < 16 && x < *taglen; x++) { + tag[x] = PAD[x] ^ CTRPAD[x]; } + *taglen = x; #ifdef LTC_CLEAN_STACK + zeromem(skey, sizeof(*skey)); 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); } @@ -382,3 +338,7 @@ error: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 69cf8be5..f3d3a8eb 100644 --- a/src/encauth/ccm/ccm_test.c +++ b/src/encauth/ccm/ccm_test.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ccm_test.c CCM support, process a block of memory, Tom St Denis */ -#ifdef LTC_CCM_MODE +#ifdef CCM_MODE int ccm_test(void) { @@ -24,14 +32,14 @@ int ccm_test(void) int ptlen; unsigned char ct[64]; unsigned char tag[16]; - unsigned long taglen; + int taglen; } tests[] = { /* 13 byte nonce, 8 byte auth, 23 byte pt */ { - { 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + { 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF }, - { 0x00, 0x00, 0x00, 0x03, 0x02, 0x01, 0x00, 0xA0, + { 0x00, 0x00, 0x00, 0x03, 0x02, 0x01, 0x00, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5 }, 13, { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }, @@ -49,20 +57,20 @@ int ccm_test(void) /* 13 byte nonce, 12 byte header, 19 byte pt */ { - { 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, + { 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF }, - { 0x00, 0x00, 0x00, 0x06, 0x05, 0x04, 0x03, 0xA0, + { 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, + { 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, + { 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 @@ -70,7 +78,7 @@ int ccm_test(void) /* supplied by Brian Gladman */ { - { 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + { 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f }, { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16 }, 7, @@ -84,235 +92,89 @@ int ccm_test(void) }, { - { 0xc9, 0x7c, 0x1f, 0x67, 0xce, 0x37, 0x11, 0x85, + { 0xc9, 0x7c, 0x1f, 0x67, 0xce, 0x37, 0x11, 0x85, 0x51, 0x4a, 0x8a, 0x19, 0xf2, 0xbd, 0xd5, 0x2f }, - { 0x00, 0x50, 0x30, 0xf1, 0x84, 0x44, 0x08, 0xb5, + { 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, + { 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, + { 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, + { 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; + unsigned long taglen, x; + unsigned char buf[64], buf2[64], tag2[16], tag[16]; + int err, idx; + symmetric_key skey; - zeromem(zero, 64); + idx = find_cipher("aes"); + if (idx == -1) { + idx = find_cipher("rijndael"); + if (idx == -1) { + return CRYPT_NOP; + } + } - 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) { + for (x = 0; x < (sizeof(tests)/sizeof(tests[0])); x++) { + taglen = tests[x].taglen; + if ((err = cipher_descriptor[idx].setup(tests[x].key, 16, 0, &skey)) != 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) { + + 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; } - 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; + if (memcmp(buf, tests[x].ct, tests[x].ptlen)) { + return CRYPT_FAIL_TESTVECTOR; + } + if (memcmp(tag, tests[x].tag, tests[x].taglen)) { + return CRYPT_FAIL_TESTVECTOR; + } + + 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, + tag2, &taglen, 1 )) != CRYPT_OK) { + return err; + } + + if (memcmp(buf2, tests[x].pt, tests[x].ptlen)) { + return CRYPT_FAIL_TESTVECTOR; + } + if (memcmp(tag2, tests[x].tag, tests[x].taglen)) { + return CRYPT_FAIL_TESTVECTOR; + } + cipher_descriptor[idx].done(&skey); + } + return CRYPT_OK; #endif } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index a6b8f76c..2389cfd4 100644 --- a/src/encauth/eax/eax_addheader.c +++ b/src/encauth/eax/eax_addheader.c @@ -1,21 +1,29 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +/** @file eax_addheader.c - EAX implementation, add meta-data, by Tom St Denis + EAX implementation, add meta-data, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_EAX_MODE +#ifdef EAX_MODE -/** - add header (metadata) to the stream +/** + 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, +int eax_addheader(eax_state *eax, const unsigned char *header, unsigned long length) { LTC_ARGCHK(eax != NULL); @@ -24,3 +32,7 @@ int eax_addheader(eax_state *eax, const unsigned char *header, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_decrypt.c b/src/encauth/eax/eax_decrypt.c index cc03c5c5..59a01c10 100644 --- a/src/encauth/eax/eax_decrypt.c +++ b/src/encauth/eax/eax_decrypt.c @@ -1,15 +1,23 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -/** +/** @file eax_decrypt.c EAX implementation, decrypt block, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_EAX_MODE +#ifdef EAX_MODE -/** +/** Decrypt data with the EAX protocol @param eax The EAX state @param ct The ciphertext @@ -17,11 +25,11 @@ @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, +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); @@ -36,3 +44,7 @@ int eax_decrypt(eax_state *eax, const unsigned char *ct, unsigned char *pt, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_decrypt_verify_memory.c b/src/encauth/eax/eax_decrypt_verify_memory.c index 9c4203a0..acf4bf51 100644 --- a/src/encauth/eax/eax_decrypt_verify_memory.c +++ b/src/encauth/eax/eax_decrypt_verify_memory.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@gmail.com, http://libtomcrypt.com + */ /** @file eax_decrypt_verify_memory.c EAX implementation, decrypt block of memory, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_EAX_MODE +#ifdef EAX_MODE /** Decrypt a block of memory and verify the provided MAC tag with EAX @@ -32,7 +40,7 @@ int eax_decrypt_verify_memory(int cipher, const unsigned char *header, unsigned long headerlen, const unsigned char *ct, unsigned long ctlen, unsigned char *pt, - const unsigned char *tag, unsigned long taglen, + unsigned char *tag, unsigned long taglen, int *stat) { int err; @@ -40,22 +48,14 @@ int eax_decrypt_verify_memory(int cipher, 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; - } + /* default to zero */ + *stat = 0; /* allocate ram */ buf = XMALLOC(taglen); @@ -77,17 +77,17 @@ int eax_decrypt_verify_memory(int cipher, 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) { + if (buflen >= taglen && memcmp(buf, tag, taglen) == 0) { *stat = 1; } - + err = CRYPT_OK; LBL_ERR: #ifdef LTC_CLEAN_STACK @@ -102,3 +102,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_done.c b/src/encauth/eax/eax_done.c index f2362cf5..91ee22ae 100644 --- a/src/encauth/eax/eax_done.c +++ b/src/encauth/eax/eax_done.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@gmail.com, http://libtomcrypt.com + */ /** @file eax_done.c EAX implementation, terminate session, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_EAX_MODE +#ifdef EAX_MODE /** Terminate an EAX session and get the tag. @@ -43,7 +51,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 LBL_ERR; } /* finish headeromac */ @@ -51,7 +59,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; + goto LBL_ERR; } /* terminate the CTR chain */ @@ -80,3 +88,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_encrypt.c b/src/encauth/eax/eax_encrypt.c index dba32390..501a0c33 100644 --- a/src/encauth/eax/eax_encrypt.c +++ b/src/encauth/eax/eax_encrypt.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@gmail.com, http://libtomcrypt.com + */ /** @file eax_encrypt.c - EAX implementation, encrypt block by Tom St Denis + EAX implementation, encrypt block by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_EAX_MODE +#ifdef EAX_MODE /** Encrypt with EAX a block of data. @@ -17,11 +25,11 @@ @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, +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); @@ -37,3 +45,7 @@ int eax_encrypt(eax_state *eax, const unsigned char *pt, unsigned char *ct, #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_encrypt_authenticate_memory.c b/src/encauth/eax/eax_encrypt_authenticate_memory.c index 76aeec2b..520d37c4 100644 --- a/src/encauth/eax/eax_encrypt_authenticate_memory.c +++ b/src/encauth/eax/eax_encrypt_authenticate_memory.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@gmail.com, http://libtomcrypt.com + */ /** @file eax_encrypt_authenticate_memory.c EAX implementation, encrypt a block of memory, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_EAX_MODE +#ifdef EAX_MODE /** EAX encrypt and produce an authentication tag @@ -45,15 +53,15 @@ int eax_encrypt_authenticate_memory(int cipher, eax = XMALLOC(sizeof(*eax)); if ((err = eax_init(eax, cipher, key, keylen, nonce, noncelen, header, headerlen)) != CRYPT_OK) { - goto LBL_ERR; + goto LBL_ERR; } if ((err = eax_encrypt(eax, pt, ct, ptlen)) != CRYPT_OK) { - goto LBL_ERR; + goto LBL_ERR; } - + if ((err = eax_done(eax, tag, taglen)) != CRYPT_OK) { - goto LBL_ERR; + goto LBL_ERR; } err = CRYPT_OK; @@ -64,7 +72,11 @@ LBL_ERR: XFREE(eax); - return err; + return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_init.c b/src/encauth/eax/eax_init.c index 153c4273..a73a2b6e 100644 --- a/src/encauth/eax/eax_init.c +++ b/src/encauth/eax/eax_init.c @@ -1,15 +1,23 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -/** +/** @file eax_init.c - EAX implementation, initialized EAX state, by Tom St Denis + EAX implementation, initialized EAX state, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.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 @@ -21,7 +29,7 @@ @param headerlen The header length (octets) @return CRYPT_OK if successful */ -int eax_init(eax_state *eax, int cipher, +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) @@ -58,42 +66,42 @@ 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 LBL_ERR; } /* omac the [0]_n */ if ((err = omac_process(omac, buf, blklen)) != CRYPT_OK) { - goto LBL_ERR; + goto LBL_ERR; } /* omac the nonce */ if ((err = omac_process(omac, nonce, noncelen)) != CRYPT_OK) { - goto LBL_ERR; + goto LBL_ERR; } /* store result */ len = sizeof(eax->N); if ((err = omac_done(omac, eax->N, &len)) != CRYPT_OK) { - goto LBL_ERR; + goto LBL_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 LBL_ERR; } /* omac the [1]_n */ if ((err = omac_process(&eax->headeromac, buf, blklen)) != CRYPT_OK) { - goto LBL_ERR; + goto LBL_ERR; } /* omac the header */ if (headerlen != 0) { if ((err = omac_process(&eax->headeromac, header, headerlen)) != CRYPT_OK) { - goto LBL_ERR; + goto LBL_ERR; } } @@ -101,19 +109,19 @@ int eax_init(eax_state *eax, int cipher, /* 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; + goto LBL_ERR; } - /* 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 LBL_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 LBL_ERR; } err = CRYPT_OK; @@ -129,4 +137,8 @@ LBL_ERR: return err; } -#endif +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_test.c b/src/encauth/eax/eax_test.c index 6dbd7af2..df9ad4d3 100644 --- a/src/encauth/eax/eax_test.c +++ b/src/encauth/eax/eax_test.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@gmail.com, http://libtomcrypt.com + */ -/** +/** @file eax_test.c EAX implementation, self-test, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_EAX_MODE +#ifdef EAX_MODE /** Test the EAX implementation @@ -19,16 +27,16 @@ int eax_test(void) 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 +107,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 +134,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 +176,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 +210,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 +256,27 @@ 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 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_add_aad.c b/src/encauth/gcm/gcm_add_aad.c index 77577647..07b1ef10 100644 --- a/src/encauth/gcm/gcm_add_aad.c +++ b/src/encauth/gcm/gcm_add_aad.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@gmail.com, http://libtomcrypt.com + */ /** @file gcm_add_aad.c GCM implementation, Add AAD data to the stream, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_GCM_MODE +#ifdef GCM_MODE /** Add AAD to the GCM state @@ -20,6 +28,7 @@ int gcm_add_aad(gcm_state *gcm, const unsigned char *adata, unsigned long adatalen) { unsigned long x; + int err; #ifdef LTC_FAST unsigned long y; #endif @@ -33,10 +42,12 @@ int gcm_add_aad(gcm_state *gcm, return CRYPT_INVALID_ARG; } + if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) { + return err; + } + /* 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; + if (gcm->mode == GCM_MODE_IV) { /* let's process the IV */ if (gcm->ivmode || gcm->buflen != 12) { for (x = 0; x < (unsigned long)gcm->buflen; x++) { @@ -46,7 +57,7 @@ int gcm_add_aad(gcm_state *gcm, 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); @@ -55,7 +66,7 @@ int gcm_add_aad(gcm_state *gcm, } gcm_mult_h(gcm, gcm->X); - /* copy counter out */ + /* copy counter out */ XMEMCPY(gcm->Y, gcm->X, 16); zeromem(gcm->X, 16); } else { @@ -69,19 +80,19 @@ int gcm_add_aad(gcm_state *gcm, zeromem(gcm->buf, 16); gcm->buflen = 0; gcm->totlen = 0; - gcm->mode = LTC_GCM_MODE_AAD; + gcm->mode = GCM_MODE_AAD; } - if (gcm->mode != LTC_GCM_MODE_AAD || gcm->buflen >= 16) { + if (gcm->mode != GCM_MODE_AAD || gcm->buflen >= 16) { return CRYPT_INVALID_ARG; } x = 0; #ifdef LTC_FAST - if (gcm->buflen == 0 && adatalen > 15) { + if (gcm->buflen == 0) { 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]); + *((LTC_FAST_TYPE*)(&gcm->X[y])) ^= *((LTC_FAST_TYPE*)(&adata[x + y])); } gcm_mult_h(gcm, gcm->X); gcm->totlen += 128; @@ -93,9 +104,9 @@ int gcm_add_aad(gcm_state *gcm, /* start adding AAD data to the state */ for (; x < adatalen; x++) { - gcm->X[gcm->buflen++] ^= *adata++; + gcm->X[gcm->buflen++] ^= *adata++; - if (gcm->buflen == 16) { + if (gcm->buflen == 16) { /* GF mult it */ gcm_mult_h(gcm, gcm->X); gcm->buflen = 0; @@ -106,4 +117,8 @@ int gcm_add_aad(gcm_state *gcm, return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_add_iv.c b/src/encauth/gcm/gcm_add_iv.c index 7b5446e5..27324b2d 100644 --- a/src/encauth/gcm/gcm_add_iv.c +++ b/src/encauth/gcm/gcm_add_iv.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@gmail.com, http://libtomcrypt.com + */ /** @file gcm_add_iv.c GCM implementation, add IV data to the state, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_GCM_MODE +#ifdef GCM_MODE /** Add IV data to the GCM state @@ -16,10 +24,11 @@ @param IVlen The length of the IV @return CRYPT_OK on success */ -int gcm_add_iv(gcm_state *gcm, +int gcm_add_iv(gcm_state *gcm, const unsigned char *IV, unsigned long IVlen) { unsigned long x, y; + int err; LTC_ARGCHK(gcm != NULL); if (IVlen > 0) { @@ -27,14 +36,19 @@ int gcm_add_iv(gcm_state *gcm, } /* must be in IV mode */ - if (gcm->mode != LTC_GCM_MODE_IV) { + if (gcm->mode != GCM_MODE_IV) { return CRYPT_INVALID_ARG; } - + if (gcm->buflen >= 16 || gcm->buflen < 0) { return CRYPT_INVALID_ARG; } + if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) { + return err; + } + + /* trip the ivmode flag */ if (IVlen + gcm->buflen > 12) { gcm->ivmode |= 1; @@ -45,7 +59,7 @@ int gcm_add_iv(gcm_state *gcm, 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]); + *((LTC_FAST_TYPE*)(&gcm->X[y])) ^= *((LTC_FAST_TYPE*)(&IV[x + y])); } gcm_mult_h(gcm, gcm->X); gcm->totlen += 128; @@ -58,7 +72,7 @@ int gcm_add_iv(gcm_state *gcm, for (; x < IVlen; x++) { gcm->buf[gcm->buflen++] = *IV++; - if (gcm->buflen == 16) { + if (gcm->buflen == 16) { /* GF mult it */ for (y = 0; y < 16; y++) { gcm->X[y] ^= gcm->buf[y]; @@ -73,4 +87,8 @@ int gcm_add_iv(gcm_state *gcm, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_done.c b/src/encauth/gcm/gcm_done.c index 5e135d14..3acfb751 100644 --- a/src/encauth/gcm/gcm_done.c +++ b/src/encauth/gcm/gcm_done.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@gmail.com, http://libtomcrypt.com + */ /** @file gcm_done.c GCM implementation, Terminate the stream, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_GCM_MODE +#ifdef GCM_MODE /** Terminate a GCM stream @@ -16,7 +24,7 @@ @param taglen [in/out] The length of the MAC tag @return CRYPT_OK on success */ -int gcm_done(gcm_state *gcm, +int gcm_done(gcm_state *gcm, unsigned char *tag, unsigned long *taglen) { unsigned long x; @@ -30,17 +38,12 @@ int gcm_done(gcm_state *gcm, 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 ((err = cipher_is_valid(gcm->cipher)) != 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) { + if (gcm->mode != GCM_MODE_TEXT) { return CRYPT_INVALID_ARG; } @@ -59,7 +62,7 @@ int gcm_done(gcm_state *gcm, gcm_mult_h(gcm, gcm->X); /* encrypt original counter */ - if ((err = ecb_encrypt_block(gcm->Y_0, gcm->buf, &gcm->K)) != CRYPT_OK) { + if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y_0, gcm->buf, &gcm->K)) != CRYPT_OK) { return err; } for (x = 0; x < 16 && x < *taglen; x++) { @@ -67,10 +70,14 @@ int gcm_done(gcm_state *gcm, } *taglen = x; - ecb_done(&gcm->K); + cipher_descriptor[gcm->cipher].done(&gcm->K); return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_gf_mult.c b/src/encauth/gcm/gcm_gf_mult.c index fb694a73..3acf40fe 100644 --- a/src/encauth/gcm/gcm_gf_mult.c +++ b/src/encauth/gcm/gcm_gf_mult.c @@ -1,271 +1,23 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ /** @file gcm_gf_mult.c GCM implementation, do the GF mult, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#if defined(LTC_GCM_MODE) || defined(LTC_LRW_MODE) || defined(LTC_GCM_SIV_MODE) -#if defined(LTC_GCM_PCLMUL) +#if defined(GCM_TABLES) || defined(LRW_TABLES) || ((defined(GCM_MODE) || defined(GCM_MODE)) && defined(LTC_FAST)) -#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 +/* 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, @@ -304,12 +56,11 @@ const unsigned char gcm_shift_table[256*2] = { #endif -#if defined(LTC_GCM_MODE) || defined(LTC_LRW_MODE) || defined(LTC_GCM_SIV_MODE) - +#if defined(GCM_MODE) || defined(LRW_MODE) #ifndef LTC_FAST /* right shift */ -static void s_gcm_rightshift(unsigned char *a) +static void gcm_rightshift(unsigned char *a) { int x; for (x = 15; x > 0; x--) { @@ -322,28 +73,28 @@ static void s_gcm_rightshift(unsigned char *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) + */ +void gcm_gf_mult(const unsigned char *a, const unsigned char *b, unsigned char *c) { unsigned char Z[16], V[16]; - unsigned char x, y, z; + unsigned 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[y] ^= V[y]; } } z = V[15] & 0x01; - s_gcm_rightshift(V); + gcm_rightshift(V); V[0] ^= poly[z]; } XMEMCPY(c, Z, 16); @@ -362,8 +113,8 @@ static void s_gcm_gf_mult_sw(const unsigned char *a, const unsigned char *b, uns @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) + */ +void gcm_gf_mult(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; @@ -378,7 +129,7 @@ static void s_gcm_gf_mult_sw(const unsigned char *a, const unsigned char *b, uns LOAD32H(B[M(1)][i], a + (i<<2)); LOAD32L(pB[i], b + (i<<2)); } -#else +#else for (i = 0; i < 2; i++) { LOAD64H(B[M(1)][i], a + (i<<3)); LOAD64L(pB[i], b + (i<<3)); @@ -403,7 +154,7 @@ static void s_gcm_gf_mult_sw(const unsigned char *a, const unsigned char *b, uns 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]; @@ -442,7 +193,7 @@ static void s_gcm_gf_mult_sw(const unsigned char *a, const unsigned char *b, uns for (i = 0; i < 8; i++) { STORE32H(tmp[i], pTmp + (i<<2)); } -#else +#else for (i = 0; i < 4; i++) { STORE64H(tmp[i], pTmp + (i<<3)); } @@ -460,46 +211,11 @@ static void s_gcm_gf_mult_sw(const unsigned char *a, const unsigned char *b, uns } -#undef M -#undef BPD -#undef WPV +#endif #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 -} - +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/encauth/gcm/gcm_init.c b/src/encauth/gcm/gcm_init.c index 96abfe2c..b5d57dbd 100644 --- a/src/encauth/gcm/gcm_init.c +++ b/src/encauth/gcm/gcm_init.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@gmail.com, http://libtomcrypt.com + */ /** @file gcm_init.c GCM implementation, initialize state, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_GCM_MODE +#ifdef GCM_MODE /** Initialize a GCM state @@ -17,12 +25,12 @@ @param keylen The length of the secret key @return CRYPT_OK on success */ -int gcm_init(gcm_state *gcm, int cipher, +int gcm_init(gcm_state *gcm, int cipher, const unsigned char *key, int keylen) { int err; unsigned char B[16]; -#ifdef LTC_GCM_TABLES +#ifdef GCM_TABLES int x, y, z, t; #endif @@ -44,26 +52,27 @@ int gcm_init(gcm_state *gcm, int cipher, } /* schedule key */ - if ((err = ecb_start(cipher, key, keylen, 0, &gcm->K)) != CRYPT_OK) { + if ((err = cipher_descriptor[cipher].setup(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) { + if ((err = cipher_descriptor[cipher].ecb_encrypt(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->cipher = cipher; + gcm->mode = GCM_MODE_IV; gcm->ivmode = 0; gcm->buflen = 0; gcm->totlen = 0; gcm->pttotlen = 0; -#ifdef LTC_GCM_TABLES +#ifdef GCM_TABLES /* setup tables */ /* generate the first table as it has no shifting (from which we make the other tables) */ @@ -83,8 +92,8 @@ int gcm_init(gcm_state *gcm, int cipher, } gcm->PC[x][y][0] = gcm_shift_table[t<<1]; gcm->PC[x][y][1] ^= gcm_shift_table[(t<<1)+1]; - } - } + } + } #endif @@ -92,3 +101,7 @@ int gcm_init(gcm_state *gcm, int cipher, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_memory.c b/src/encauth/gcm/gcm_memory.c index 6de0b309..8e02fa8a 100644 --- a/src/encauth/gcm/gcm_memory.c +++ b/src/encauth/gcm/gcm_memory.c @@ -1,21 +1,29 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ /** @file gcm_memory.c GCM implementation, process a packet, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_GCM_MODE +#ifdef 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 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 pt The plaintext @@ -31,20 +39,20 @@ int gcm_memory( int cipher, 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 *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 + return + cipher_descriptor[cipher].accel_gcm_memory (key, keylen, IV, IVlen, adata, adatalen, @@ -55,24 +63,11 @@ int gcm_memory( int cipher, } - -#ifndef LTC_GCM_TABLES_SSE2 - orig = gcm = XMALLOC(sizeof(*gcm)); -#else - orig = gcm = XMALLOC(sizeof(*gcm) + 16); -#endif + gcm = XMALLOC(sizeof(*gcm)); 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; } @@ -85,28 +80,14 @@ int gcm_memory( int cipher, 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; - } + err = gcm_done(gcm, tag, taglen); LTC_ERR: - gcm_reset(gcm); - XFREE(orig); + XFREE(gcm); return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_mult_h.c b/src/encauth/gcm/gcm_mult_h.c index 0c90fac7..2bee3d96 100644 --- a/src/encauth/gcm/gcm_mult_h.c +++ b/src/encauth/gcm/gcm_mult_h.c @@ -1,47 +1,50 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ /** @file gcm_mult_h.c GCM implementation, do the GF mult, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#if defined(LTC_GCM_MODE) +#if defined(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) +void gcm_mult_h(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; +#ifdef GCM_TABLES + int x, 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]); + *((LTC_FAST_TYPE *)(T + y)) ^= *((LTC_FAST_TYPE *)(&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 } -#endif /* LTC_GCM_TABLES_SSE2 */ -#else - gcm_gf_mult(gcm->H, I, T); +#else + gcm_gf_mult(gcm->H, I, T); #endif XMEMCPY(I, T, 16); } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_process.c b/src/encauth/gcm/gcm_process.c index acaf1ed8..417a9412 100644 --- a/src/encauth/gcm/gcm_process.c +++ b/src/encauth/gcm/gcm_process.c @@ -1,17 +1,25 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ /** @file gcm_process.c GCM implementation, process message data, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_GCM_MODE +#ifdef GCM_MODE -/** +/** Process plaintext/ciphertext through GCM - @param gcm The GCM state + @param gcm The GCM state @param pt The plaintext @param ptlen The plaintext length (ciphertext length is the same) @param ct The ciphertext @@ -23,9 +31,9 @@ int gcm_process(gcm_state *gcm, unsigned char *ct, int direction) { - unsigned long x; - int y, err; + unsigned long x, y; unsigned char b; + int err; LTC_ARGCHK(gcm != NULL); if (ptlen > 0) { @@ -36,19 +44,13 @@ int gcm_process(gcm_state *gcm, 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; + + if ((err = cipher_is_valid(gcm->cipher)) != CRYPT_OK) { + return err; } /* in AAD mode? */ - if (gcm->mode == LTC_GCM_MODE_AAD) { + if (gcm->mode == GCM_MODE_AAD) { /* let's process the AAD */ if (gcm->buflen) { gcm->totlen += gcm->buflen * CONST64(8); @@ -57,39 +59,39 @@ int gcm_process(gcm_state *gcm, /* increment counter */ for (y = 15; y >= 12; y--) { - if (++gcm->Y[y] & 255) { break; } + if (++gcm->Y[y]) { break; } } /* encrypt the counter */ - if ((err = ecb_encrypt_block(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { + if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { return err; } gcm->buflen = 0; - gcm->mode = LTC_GCM_MODE_TEXT; + gcm->mode = GCM_MODE_TEXT; } - if (gcm->mode != LTC_GCM_MODE_TEXT) { + if (gcm->mode != GCM_MODE_TEXT) { return CRYPT_INVALID_ARG; } x = 0; #ifdef LTC_FAST if (gcm->buflen == 0) { - if (direction == GCM_ENCRYPT) { + 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]); + *((LTC_FAST_TYPE*)(&ct[x + y])) = *((LTC_FAST_TYPE*)(&pt[x+y])) ^ *((LTC_FAST_TYPE*)(&gcm->buf[y])); + *((LTC_FAST_TYPE*)(&gcm->X[y])) ^= *((LTC_FAST_TYPE*)(&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 (++gcm->Y[y]) { break; } } - if ((err = ecb_encrypt_block(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { + if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { return err; } } @@ -97,50 +99,57 @@ int gcm_process(gcm_state *gcm, 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]); + *((LTC_FAST_TYPE*)(&gcm->X[y])) ^= *((LTC_FAST_TYPE*)(&ct[x+y])); + *((LTC_FAST_TYPE*)(&pt[x + y])) = *((LTC_FAST_TYPE*)(&ct[x+y])) ^ *((LTC_FAST_TYPE*)(&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 (++gcm->Y[y]) { break; } } - if ((err = ecb_encrypt_block(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { + if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { return err; } } - } + } } -#endif +#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 (++gcm->Y[y]) { break; } } - if ((err = ecb_encrypt_block(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) { + if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(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]; + 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; + gcm->X[gcm->buflen++] ^= b; } return CRYPT_OK; } + + #endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_reset.c b/src/encauth/gcm/gcm_reset.c index a071dcd8..6dd73c90 100644 --- a/src/encauth/gcm/gcm_reset.c +++ b/src/encauth/gcm/gcm_reset.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@gmail.com, http://libtomcrypt.com + */ /** @file gcm_reset.c GCM implementation, reset a used state so it can accept IV data, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_GCM_MODE +#ifdef GCM_MODE /** Reset a GCM state to as if you just called gcm_init(). This saves the initialization time. @@ -20,13 +28,17 @@ int gcm_reset(gcm_state *gcm) zeromem(gcm->buf, sizeof(gcm->buf)); zeromem(gcm->X, sizeof(gcm->X)); - gcm->mode = LTC_GCM_MODE_IV; + gcm->mode = GCM_MODE_IV; gcm->ivmode = 0; gcm->buflen = 0; gcm->totlen = 0; gcm->pttotlen = 0; - + return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_test.c b/src/encauth/gcm/gcm_test.c index e3bb3f91..309ab51f 100644 --- a/src/encauth/gcm/gcm_test.c +++ b/src/encauth/gcm/gcm_test.c @@ -1,15 +1,23 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ /** @file gcm_test.c GCM implementation, testing, by Tom St Denis */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" -#ifdef LTC_GCM_MODE +#ifdef GCM_MODE -/** +/** Test the GCM code @return CRYPT_OK on success */ @@ -21,13 +29,13 @@ int gcm_test(void) static const struct { unsigned char K[32]; int keylen; - unsigned char P[128]; + unsigned char P[64]; unsigned long ptlen; - unsigned char A[128]; + unsigned char A[64]; unsigned long alen; - unsigned char IV[128]; + unsigned char IV[64]; unsigned long IVlen; - unsigned char C[128]; + unsigned char C[64]; unsigned char T[16]; } tests[] = { @@ -92,18 +100,18 @@ int gcm_test(void) /* test case #3 */ { /* key */ - { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, + { 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, + { 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, @@ -112,66 +120,66 @@ int gcm_test(void) 0, /* IV */ - { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, + { 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, + { 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, + { 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, + { 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, + { 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, + { 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, + { 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, + { 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, + { 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb, 0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47, } }, @@ -179,24 +187,24 @@ int gcm_test(void) /* test case #5 */ { /* key */ - { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, + { 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, + { 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, + { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, + 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, 0xab, 0xad, 0xda, 0xd2, }, 20, @@ -205,121 +213,75 @@ int gcm_test(void) 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, + { 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, + { 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, + { 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, + { 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, + { 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, + { 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, + { 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, + { 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; + unsigned char out[2][64], T[2][16]; /* find aes */ idx = find_cipher("aes"); @@ -330,15 +292,7 @@ int gcm_test(void) } } - /* 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++) { + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { y = sizeof(T[0]); if ((err = gcm_memory(idx, tests[x].K, tests[x].keylen, tests[x].IV, tests[x].IVlen, @@ -348,16 +302,29 @@ int gcm_test(void) return err; } - if (ltc_compare_testvector(out[0], tests[x].ptlen, tests[x].C, tests[x].ptlen, "GCM CT", x)) { + if (memcmp(out[0], tests[x].C, tests[x].ptlen)) { +#if 0 + printf("\nCiphertext wrong %lu\n", x); + for (y = 0; y < tests[x].ptlen; y++) { + printf("%02x", out[0][y] & 255); + } + printf("\n"); +#endif return CRYPT_FAIL_TESTVECTOR; } - if (ltc_compare_testvector(T[0], y, tests[x].T, 16, "GCM Encrypt Tag", x)) { + if (memcmp(T[0], tests[x].T, 16)) { +#if 0 + printf("\nTag on plaintext wrong %lu\n", x); + for (y = 0; y < 16; y++) { + printf("%02x", T[0][y] & 255); + } + printf("\n"); +#endif 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, @@ -366,42 +333,36 @@ int gcm_test(void) return err; } - if (ltc_compare_testvector(out[1], tests[x].ptlen, tests[x].P, tests[x].ptlen, "GCM PT", x)) { + if (memcmp(out[1], tests[x].P, tests[x].ptlen)) { +#if 0 + printf("\nplaintext wrong %lu\n", x); + for (y = 0; y < tests[x].ptlen; y++) { + printf("%02x", out[0][y] & 255); + } + printf("\n"); +#endif return CRYPT_FAIL_TESTVECTOR; } + + if (memcmp(T[1], tests[x].T, 16)) { +#if 0 + printf("\nTag on ciphertext wrong %lu\n", x); + for (y = 0; y < 16; y++) { + printf("%02x", T[1][y] & 255); + } + printf("\n"); +#endif + 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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/ocb/ocb_decrypt.c b/src/encauth/ocb/ocb_decrypt.c new file mode 100644 index 00000000..e77a8bed --- /dev/null +++ b/src/encauth/ocb/ocb_decrypt.c @@ -0,0 +1,79 @@ +/* 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@gmail.com, http://libtomcrypt.com + */ + +/** + @file ocb_decrypt.c + OCB implementation, decrypt data, by Tom St Denis +*/ +#include "tomcrypt.h" + +#ifdef OCB_MODE + +/** + Decrypt a block with OCB. + @param ocb The OCB state + @param ct The ciphertext (length of the block size of the block cipher) + @param pt [out] The plaintext (length of ct) + @return CRYPT_OK if successful +*/ +int ocb_decrypt(ocb_state *ocb, const unsigned char *ct, unsigned char *pt) +{ + unsigned char Z[MAXBLOCKSIZE], tmp[MAXBLOCKSIZE]; + int err, x; + + LTC_ARGCHK(ocb != NULL); + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + + /* check if valid cipher */ + if ((err = cipher_is_valid(ocb->cipher)) != CRYPT_OK) { + return err; + } + LTC_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]; + } + if ((err = cipher_descriptor[ocb->cipher].ecb_decrypt(tmp, pt, &ocb->key)) != CRYPT_OK) { + return err; + } + 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 LTC_CLEAN_STACK + zeromem(Z, sizeof(Z)); + zeromem(tmp, sizeof(tmp)); +#endif + return CRYPT_OK; +} + +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_decrypt_verify_memory.c b/src/encauth/ocb/ocb_decrypt_verify_memory.c new file mode 100644 index 00000000..fca6adcd --- /dev/null +++ b/src/encauth/ocb/ocb_decrypt_verify_memory.c @@ -0,0 +1,86 @@ +/* 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@gmail.com, http://libtomcrypt.com + */ + +/** + @file ocb_decrypt_verify_memory.c + OCB implementation, helper to decrypt block of memory, by Tom St Denis +*/ +#include "tomcrypt.h" + +#ifdef OCB_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 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 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 *stat) +{ + int err; + ocb_state *ocb; + + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(nonce != NULL); + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(tag != NULL); + LTC_ARGCHK(stat != 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 LBL_ERR; + } + + while (ctlen > (unsigned long)ocb->block_len) { + if ((err = ocb_decrypt(ocb, ct, pt)) != CRYPT_OK) { + goto LBL_ERR; + } + ctlen -= ocb->block_len; + pt += ocb->block_len; + ct += ocb->block_len; + } + + err = ocb_done_decrypt(ocb, ct, ctlen, pt, tag, taglen, stat); +LBL_ERR: +#ifdef LTC_CLEAN_STACK + zeromem(ocb, sizeof(ocb_state)); +#endif + + XFREE(ocb); + + return err; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_done_decrypt.c b/src/encauth/ocb/ocb_done_decrypt.c new file mode 100644 index 00000000..f416ca5b --- /dev/null +++ b/src/encauth/ocb/ocb_done_decrypt.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@gmail.com, http://libtomcrypt.com + */ + +/** + @file ocb_done_decrypt.c + OCB implementation, terminate decryption, by Tom St Denis +*/ +#include "tomcrypt.h" + +#ifdef OCB_MODE + +/** + Terminate a decrypting OCB state + @param ocb The OCB state + @param ct The ciphertext (if any) + @param ctlen The length of the ciphertext (octets) + @param pt [out] The plaintext + @param tag The authentication tag (to compare against) + @param taglen The length of the authentication tag provided + @param stat [out] The result of the tag comparison + @return CRYPT_OK if the process was successful regardless if the tag is valid +*/ +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 *stat) +{ + int err; + unsigned char *tagbuf; + unsigned long tagbuflen; + + LTC_ARGCHK(ocb != NULL); + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(tag != NULL); + LTC_ARGCHK(stat != NULL); + + /* default to failed */ + *stat = 0; + + /* allocate memory */ + tagbuf = XMALLOC(MAXBLOCKSIZE); + if (tagbuf == NULL) { + return CRYPT_MEM; + } + + tagbuflen = MAXBLOCKSIZE; + if ((err = s_ocb_done(ocb, ct, ctlen, pt, tagbuf, &tagbuflen, 1)) != CRYPT_OK) { + goto LBL_ERR; + } + + if (taglen <= tagbuflen && memcmp(tagbuf, tag, taglen) == 0) { + *stat = 1; + } + + err = CRYPT_OK; +LBL_ERR: +#ifdef LTC_CLEAN_STACK + zeromem(tagbuf, MAXBLOCKSIZE); +#endif + + XFREE(tagbuf); + + return err; +} + +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_done_encrypt.c b/src/encauth/ocb/ocb_done_encrypt.c new file mode 100644 index 00000000..837991c9 --- /dev/null +++ b/src/encauth/ocb/ocb_done_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@gmail.com, http://libtomcrypt.com + */ + +/** + @file ocb_done_encrypt.c + OCB implementation, terminate encryption, by Tom St Denis +*/ +#include "tomcrypt.h" + +#ifdef OCB_MODE + +/** + Terminate an encryption OCB state + @param ocb The OCB state + @param pt Remaining plaintext (if any) + @param ptlen The length of the plaintext (octets) + @param ct [out] The ciphertext (if any) + @param tag [out] The tag for the OCB stream + @param taglen [in/out] The max size and resulting size of the tag + @return CRYPT_OK if successful +*/ +int ocb_done_encrypt(ocb_state *ocb, const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, unsigned char *tag, unsigned long *taglen) +{ + LTC_ARGCHK(ocb != NULL); + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(tag != NULL); + LTC_ARGCHK(taglen != NULL); + return s_ocb_done(ocb, pt, ptlen, ct, tag, taglen, 0); +} + +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_encrypt.c b/src/encauth/ocb/ocb_encrypt.c new file mode 100644 index 00000000..097e0b3a --- /dev/null +++ b/src/encauth/ocb/ocb_encrypt.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@gmail.com, http://libtomcrypt.com + */ + +/** + @file ocb_encrypt.c + OCB implementation, encrypt data, by Tom St Denis +*/ +#include "tomcrypt.h" + +#ifdef OCB_MODE + +/** + Encrypt a block of data with OCB. + @param ocb The OCB state + @param pt The plaintext (length of the block size of the block cipher) + @param ct [out] The ciphertext (same size as the pt) + @return CRYPT_OK if successful +*/ +int ocb_encrypt(ocb_state *ocb, const unsigned char *pt, unsigned char *ct) +{ + unsigned char Z[MAXBLOCKSIZE], tmp[MAXBLOCKSIZE]; + int err, x; + + LTC_ARGCHK(ocb != NULL); + LTC_ARGCHK(pt != NULL); + LTC_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]; + } + if ((err = cipher_descriptor[ocb->cipher].ecb_encrypt(tmp, ct, &ocb->key)) != CRYPT_OK) { + return err; + } + for (x = 0; x < ocb->block_len; x++) { + ct[x] ^= Z[x]; + } + +#ifdef LTC_CLEAN_STACK + zeromem(Z, sizeof(Z)); + zeromem(tmp, sizeof(tmp)); +#endif + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_encrypt_authenticate_memory.c b/src/encauth/ocb/ocb_encrypt_authenticate_memory.c new file mode 100644 index 00000000..d42fda80 --- /dev/null +++ b/src/encauth/ocb/ocb_encrypt_authenticate_memory.c @@ -0,0 +1,84 @@ +/* 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@gmail.com, http://libtomcrypt.com + */ + +/** + @file ocb_encrypt_authenticate_memory.c + OCB implementation, encrypt block of memory, by Tom St Denis +*/ +#include "tomcrypt.h" + +#ifdef OCB_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 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 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; + + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(nonce != NULL); + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(tag != NULL); + LTC_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 LBL_ERR; + } + + while (ptlen > (unsigned long)ocb->block_len) { + if ((err = ocb_encrypt(ocb, pt, ct)) != CRYPT_OK) { + goto LBL_ERR; + } + ptlen -= ocb->block_len; + pt += ocb->block_len; + ct += ocb->block_len; + } + + err = ocb_done_encrypt(ocb, pt, ptlen, ct, tag, taglen); +LBL_ERR: +#ifdef LTC_CLEAN_STACK + zeromem(ocb, sizeof(ocb_state)); +#endif + + XFREE(ocb); + + return err; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_init.c b/src/encauth/ocb/ocb_init.c new file mode 100644 index 00000000..fc00b228 --- /dev/null +++ b/src/encauth/ocb/ocb_init.c @@ -0,0 +1,137 @@ +/* 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@gmail.com, http://libtomcrypt.com + */ + +/** + @file ocb_init.c + OCB implementation, initialize state, by Tom St Denis +*/ +#include "tomcrypt.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 } +} +}; + +/** + 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 (length of the block size of the cipher) + @return CRYPT_OK if successful +*/ +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; + + LTC_ARGCHK(ocb != NULL); + LTC_ARGCHK(key != NULL); + LTC_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); + if ((err = cipher_descriptor[cipher].ecb_encrypt(ocb->L, ocb->L, &ocb->key)) != CRYPT_OK) { + return err; + } + + /* find R = E[N xor L] */ + for (x = 0; x < ocb->block_len; x++) { + ocb->R[x] = ocb->L[x] ^ nonce[x]; + } + if ((err = cipher_descriptor[cipher].ecb_encrypt(ocb->R, ocb->R, &ocb->key)) != CRYPT_OK) { + return err; + } + + /* 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_ntz.c b/src/encauth/ocb/ocb_ntz.c new file mode 100644 index 00000000..f472553c --- /dev/null +++ b/src/encauth/ocb/ocb_ntz.c @@ -0,0 +1,42 @@ +/* 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@gmail.com, http://libtomcrypt.com + */ + +/** + @file ocb_ntz.c + OCB implementation, internal function, by Tom St Denis +*/ + +#include "tomcrypt.h" + +#ifdef OCB_MODE + +/** + Returns the number of leading zero bits [from lsb up] + @param x The 32-bit value to observe + @return The number of bits [from the lsb up] that are zero +*/ +int ocb_ntz(unsigned long x) +{ + int c; + x &= 0xFFFFFFFFUL; + c = 0; + while ((x & 1) == 0) { + ++c; + x >>= 1; + } + return c; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_shift_xor.c b/src/encauth/ocb/ocb_shift_xor.c new file mode 100644 index 00000000..934fca2c --- /dev/null +++ b/src/encauth/ocb/ocb_shift_xor.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@gmail.com, http://libtomcrypt.com + */ + +/** + @file ocb_shift_xor.c + OCB implementation, internal function, by Tom St Denis +*/ +#include "tomcrypt.h" + +#ifdef OCB_MODE + +/** + Compute the shift/xor for OCB (internal function) + @param ocb The OCB state + @param Z The destination of the shift +*/ +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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_test.c b/src/encauth/ocb/ocb_test.c new file mode 100644 index 00000000..c74ba0e3 --- /dev/null +++ b/src/encauth/ocb/ocb_test.c @@ -0,0 +1,237 @@ +/* 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@gmail.com, http://libtomcrypt.com + */ + +/** + @file ocb_test.c + OCB implementation, self-test by Tom St Denis +*/ +#include "tomcrypt.h" + +#ifdef OCB_MODE + +/** + Test the OCB protocol + @return CRYPT_OK if successful +*/ +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... +*/ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/s_ocb_done.c b/src/encauth/ocb/s_ocb_done.c new file mode 100644 index 00000000..98cf92e1 --- /dev/null +++ b/src/encauth/ocb/s_ocb_done.c @@ -0,0 +1,148 @@ +/* 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@gmail.com, http://libtomcrypt.com + */ + +/** + @file s_ocb_done.c + OCB implementation, internal helper, by Tom St Denis +*/ +#include "tomcrypt.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... + */ + +/** + Shared code to finish an OCB stream + @param ocb The OCB state + @param pt The remaining plaintext [or input] + @param ptlen The length of the input (octets) + @param ct [out] The output buffer + @param tag [out] The destination for the authentication tag + @param taglen [in/out] The max size and resulting size of the authentication tag + @param mode The mode we are terminating, 0==encrypt, 1==decrypt + @return CRYPT_OK if successful +*/ +int s_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; + + LTC_ARGCHK(ocb != NULL); + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(tag != NULL); + LTC_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])) */ + if ((err = cipher_descriptor[ocb->cipher].ecb_encrypt(X, Y, &ocb->key)) != CRYPT_OK) { + goto error; + } + + 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!! */ + if ((err = cipher_descriptor[ocb->cipher].ecb_encrypt(ocb->checksum, X, &ocb->key)) != CRYPT_OK) { + goto error; + } + cipher_descriptor[ocb->cipher].done(&ocb->key); + + /* now store it */ + for (x = 0; x < ocb->block_len && x < (int)*taglen; x++) { + tag[x] = X[x]; + } + *taglen = x; + +#ifdef LTC_CLEAN_STACK + zeromem(X, MAXBLOCKSIZE); + zeromem(Y, MAXBLOCKSIZE); + zeromem(Z, MAXBLOCKSIZE); + zeromem(ocb, sizeof(*ocb)); +#endif +error: + XFREE(X); + XFREE(Y); + XFREE(Z); + + return err; +} + +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 2ac077ab..1ccae03b 100644 --- a/src/hashes/chc/chc.c +++ b/src/hashes/chc/chc.c @@ -1,14 +1,22 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" /** @file chc.c CHC support. (Tom St Denis) */ -#ifdef LTC_CHC_HASH +#ifdef CHC_HASH #define UNDEFED_HASH -17 @@ -27,8 +35,8 @@ const struct ltc_hash_descriptor chc_desc = { }; /** - Initialize the CHC state with a given cipher - @param cipher The index of the cipher you wish to bind + 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) @@ -62,7 +70,7 @@ int chc_register(int cipher) } /* store into descriptor */ - hash_descriptor[idx].hashsize = + hash_descriptor[idx].hashsize = hash_descriptor[idx].blocksize = cipher_descriptor[cipher].block_length; /* store the idx and block size */ @@ -81,7 +89,7 @@ int chc_init(hash_state *md) symmetric_key *key; unsigned char buf[MAXBLOCKSIZE]; int err; - + LTC_ARGCHK(md != NULL); /* is the cipher valid? */ @@ -97,7 +105,7 @@ int chc_init(hash_state *md) return CRYPT_MEM; } - /* zero key and what not */ + /* 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); @@ -115,13 +123,13 @@ int chc_init(hash_state *md) 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) +static int chc_compress(hash_state *md, unsigned char *buf) { unsigned char T[2][MAXBLOCKSIZE]; symmetric_key *key; @@ -134,28 +142,22 @@ static int s_chc_compress(hash_state *md, const unsigned char *buf) XFREE(key); return err; } - XMEMCPY(T[1], buf, cipher_blocksize); + memcpy(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]; } + XFREE(key); #ifdef LTC_CLEAN_STACK zeromem(T, sizeof(T)); - zeromem(key, sizeof(*key)); + 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) +/* function for processing blocks */ +int _chc_process(hash_state * md, const unsigned char *buf, unsigned long len); +HASH_PROCESS(_chc_process, chc_compress, chc, (unsigned long)cipher_blocksize) /** Process a block of memory though the hash @@ -179,7 +181,7 @@ int chc_process(hash_state * md, const unsigned char *in, unsigned long inlen) return CRYPT_INVALID_CIPHER; } - return ss_chc_process(md, in, inlen); + return _chc_process(md, in, inlen); } /** @@ -221,7 +223,7 @@ int chc_done(hash_state *md, unsigned char *out) while (md->chc.curlen < (unsigned long)cipher_blocksize) { md->chc.buf[md->chc.curlen++] = (unsigned char)0; } - s_chc_compress(md, md->chc.buf); + chc_compress(md, md->chc.buf); md->chc.curlen = 0; } @@ -232,7 +234,7 @@ int chc_done(hash_state *md, unsigned char *out) /* store length */ STORE64L(md->chc.length, md->chc.buf+(cipher_blocksize-8)); - s_chc_compress(md, md->chc.buf); + chc_compress(md, md->chc.buf); /* copy output */ XMEMCPY(out, md->chc.state, cipher_blocksize); @@ -246,26 +248,23 @@ int chc_done(hash_state *md, unsigned char *out) /** 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]; + md[MAXBLOCKSIZE]; int len; } tests[] = { { (unsigned char *)"hello world", - { 0xcf, 0x57, 0x9d, 0xc3, 0x0a, 0x0e, 0xea, 0x61, + { 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]; + int x, oldhashidx, idx; + unsigned char out[MAXBLOCKSIZE]; hash_state md; /* AES can be under rijndael or aes... try to find it */ @@ -277,17 +276,11 @@ int chc_test(void) 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)) { + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { + chc_init(&md); + chc_process(&md, tests[x].msg, strlen((char *)tests[x].msg)); + chc_done(&md, out); + if (memcmp(out, tests[x].md, tests[x].len)) { return CRYPT_FAIL_TESTVECTOR; } } @@ -296,7 +289,10 @@ int chc_test(void) } return CRYPT_OK; -#endif } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/helper/hash_file.c b/src/hashes/helper/hash_file.c index d2711db2..a030f99f 100644 --- a/src/hashes/helper/hash_file.c +++ b/src/hashes/helper/hash_file.c @@ -1,9 +1,16 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -#ifndef LTC_NO_FILE -/** +/** @file hash_file.c Hash a file, Tom St Denis */ @@ -17,6 +24,9 @@ */ int hash_file(int hash, const char *fname, unsigned char *out, unsigned long *outlen) { +#ifdef LTC_NO_FILE + return CRYPT_NOP; +#else FILE *in; int err; LTC_ARGCHK(fname != NULL); @@ -28,7 +38,7 @@ int hash_file(int hash, const char *fname, unsigned char *out, unsigned long *ou } in = fopen(fname, "rb"); - if (in == NULL) { + if (in == NULL) { return CRYPT_FILE_NOTFOUND; } @@ -38,6 +48,10 @@ int hash_file(int hash, const char *fname, unsigned char *out, unsigned long *ou } return err; +#endif } -#endif /* #ifndef LTC_NO_FILE */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/helper/hash_filehandle.c b/src/hashes/helper/hash_filehandle.c index f4eee7fb..1c9b68b7 100644 --- a/src/hashes/helper/hash_filehandle.c +++ b/src/hashes/helper/hash_filehandle.c @@ -1,25 +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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -#ifndef LTC_NO_FILE /** @file hash_filehandle.c Hash open files, Tom St Denis */ -/** - Hash data from an open file handle. +/** + 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 + @result CRYPT_OK if successful */ int hash_filehandle(int hash, FILE *in, unsigned char *out, unsigned long *outlen) { +#ifdef LTC_NO_FILE + return CRYPT_NOP; +#else hash_state md; - unsigned char *buf; + unsigned char buf[512]; size_t x; int err; @@ -27,38 +37,35 @@ int hash_filehandle(int hash, FILE *in, unsigned char *out, unsigned long *outle 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; + return err; } if (*outlen < hash_descriptor[hash].hashsize) { *outlen = hash_descriptor[hash].hashsize; - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; + return CRYPT_BUFFER_OVERFLOW; } if ((err = hash_descriptor[hash].init(&md)) != CRYPT_OK) { - goto LBL_ERR; + return err; } + *outlen = hash_descriptor[hash].hashsize; 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; + x = fread(buf, 1, sizeof(buf), in); + if ((err = hash_descriptor[hash].process(&md, buf, x)) != CRYPT_OK) { + return err; } - } while (x == LTC_FILE_READ_BUFSIZE); - if ((err = hash_descriptor[hash].done(&md, out)) == CRYPT_OK) { - *outlen = hash_descriptor[hash].hashsize; - } + } while (x == sizeof(buf)); + err = hash_descriptor[hash].done(&md, out); -LBL_CLEANBUF: - zeromem(buf, LTC_FILE_READ_BUFSIZE); -LBL_ERR: - XFREE(buf); +#ifdef LTC_CLEAN_STACK + zeromem(buf, sizeof(buf)); +#endif return err; +#endif } -#endif /* #ifndef LTC_NO_FILE */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/helper/hash_memory.c b/src/hashes/helper/hash_memory.c index f38f51ca..17579d06 100644 --- a/src/hashes/helper/hash_memory.c +++ b/src/hashes/helper/hash_memory.c @@ -1,8 +1,15 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -#ifdef LTC_HASH_HELPERS /** @file hash_memory.c Hash memory helper, Tom St Denis @@ -56,4 +63,7 @@ LBL_ERR: return err; } -#endif /* #ifdef LTC_HASH_HELPERS */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/helper/hash_memory_multi.c b/src/hashes/helper/hash_memory_multi.c index 4c72efcc..c1e3a8b7 100644 --- a/src/hashes/helper/hash_memory_multi.c +++ b/src/hashes/helper/hash_memory_multi.c @@ -1,15 +1,22 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ -#include "tomcrypt_private.h" - -#ifdef LTC_HASH_HELPERS +/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" +#include /** @file hash_memory_multi.c Hash (multiple buffers) memory helper, Tom St Denis */ /** - Hash multiple (non-adjacent) blocks of memory at once. + 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 @@ -17,7 +24,7 @@ @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, ...) { @@ -50,7 +57,7 @@ int hash_memory_multi(int hash, unsigned char *out, unsigned long *outlen, } va_start(args, inlen); - curptr = in; + curptr = in; curlen = inlen; for (;;) { /* process buf */ @@ -74,4 +81,7 @@ LBL_ERR: va_end(args); return err; } -#endif /* #ifdef LTC_HASH_HELPERS */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/md2.c b/src/hashes/md2.c index 4207504d..9f33db2a 100644 --- a/src/hashes/md2.c +++ b/src/hashes/md2.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @param md2.c - LTC_MD2 (RFC 1319) hash function implementation by Tom St Denis + MD2 (RFC 1319) hash function implementation by Tom St Denis */ -#ifdef LTC_MD2 +#ifdef MD2 const struct ltc_hash_descriptor md2_desc = { @@ -49,25 +57,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]; @@ -94,7 +102,7 @@ int md2_init(hash_state *md) { LTC_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)); @@ -114,9 +122,9 @@ int md2_process(hash_state *md, const unsigned char *in, unsigned long inlen) unsigned long n; LTC_ARGCHK(md != NULL); LTC_ARGCHK(in != NULL); - if (md-> md2 .curlen > sizeof(md-> md2 .buf)) { - return CRYPT_INVALID_ARG; - } + 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); @@ -126,8 +134,8 @@ int md2_process(hash_state *md, const unsigned char *in, unsigned long inlen) /* 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; } } @@ -159,12 +167,12 @@ 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); @@ -178,15 +186,15 @@ int md2_done(hash_state * md, unsigned char *out) /** 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,22 +227,25 @@ 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 } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/md4.c b/src/hashes/md4.c index 51f5329e..c451ec85 100644 --- a/src/hashes/md4.c +++ b/src/hashes/md4.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @param md4.c - Submitted by Dobes Vandermeer (dobes@smartt.com) + Submitted by Dobes Vandermeer (dobes@smartt.com) */ -#ifdef LTC_MD4 +#ifdef MD4 const struct ltc_hash_descriptor md4_desc = { @@ -15,7 +23,7 @@ const struct ltc_hash_descriptor md4_desc = 6, 16, 64, - + /* OID */ { 1, 2, 840, 113549, 2, 4, }, 6, @@ -40,7 +48,7 @@ const struct ltc_hash_descriptor md4_desc = #define S33 11 #define S34 15 -/* F, G and H are basic LTC_MD4 functions. */ +/* 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)) @@ -48,8 +56,8 @@ const struct ltc_hash_descriptor md4_desc = /* 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 */ +/* 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); \ @@ -65,9 +73,9 @@ const struct ltc_hash_descriptor md4_desc = } #ifdef LTC_CLEAN_STACK -static int ss_md4_compress(hash_state *md, const unsigned char *buf) +static int _md4_compress(hash_state *md, unsigned char *buf) #else -static int s_md4_compress(hash_state *md, const unsigned char *buf) +static int md4_compress(hash_state *md, unsigned char *buf) #endif { ulong32 x[16], a, b, c, d; @@ -83,61 +91,61 @@ static int s_md4_compress(hash_state *md, const unsigned char *buf) 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 */ + + /* 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 (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 */ - + 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 */ - + 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; @@ -149,10 +157,10 @@ static int s_md4_compress(hash_state *md, const unsigned char *buf) } #ifdef LTC_CLEAN_STACK -static int s_md4_compress(hash_state *md, const unsigned char *buf) +static int md4_compress(hash_state *md, unsigned char *buf) { int err; - err = ss_md4_compress(md, buf); + err = _md4_compress(md, buf); burn_stack(sizeof(ulong32) * 20 + sizeof(int)); return err; } @@ -182,7 +190,7 @@ int md4_init(hash_state * md) @param inlen The length of the data (octets) @return CRYPT_OK if successful */ -HASH_PROCESS(md4_process, s_md4_compress, md4, 64) +HASH_PROCESS(md4_process, md4_compress, md4, 64) /** Terminate the hash to get the digest @@ -215,7 +223,7 @@ int md4_done(hash_state * md, unsigned char *out) while (md->md4.curlen < 64) { md->md4.buf[md->md4.curlen++] = (unsigned char)0; } - s_md4_compress(md, md->md4.buf); + md4_compress(md, md->md4.buf); md->md4.curlen = 0; } @@ -226,7 +234,7 @@ int md4_done(hash_state * md, unsigned char *out) /* store length */ STORE64L(md->md4.length, md->md4.buf+56); - s_md4_compress(md, md->md4.buf); + md4_compress(md, md->md4.buf); /* copy output */ for (i = 0; i < 4; i++) { @@ -234,55 +242,54 @@ int md4_done(hash_state * md, unsigned char *out) } #ifdef LTC_CLEAN_STACK zeromem(md, sizeof(hash_state)); -#endif +#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 + #else static const struct md4_test_case { - const char *input; - unsigned char hash[16]; - } tests[] = { - { "", + 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, + {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, + { "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, + { "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, + { "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, + { "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; + unsigned char digest[16]; - for(i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i++) { + for(i = 0; i < (int)(sizeof(cases) / sizeof(cases[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)) { + 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; } @@ -291,26 +298,10 @@ int md4_test(void) #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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/md5.c b/src/hashes/md5.c index 5c2f15c1..48617609 100644 --- a/src/hashes/md5.c +++ b/src/hashes/md5.c @@ -1,14 +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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file md5.c - LTC_MD5 hash function by Tom St Denis + MD5 hash function by Tom St Denis */ -#ifdef LTC_MD5 +#ifdef MD5 const struct ltc_hash_descriptor md5_desc = { @@ -87,12 +95,12 @@ static const ulong32 Korder[64] = { a = (a + I(b,c,d) + M + t); a = ROLc(a, s) + b; -#endif +#endif #ifdef LTC_CLEAN_STACK -static int ss_md5_compress(hash_state *md, const unsigned char *buf) +static int _md5_compress(hash_state *md, unsigned char *buf) #else -static int s_md5_compress(hash_state *md, const unsigned char *buf) +static int md5_compress(hash_state *md, unsigned char *buf) #endif { ulong32 i, W[16], a, b, c, d; @@ -104,7 +112,7 @@ 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]; @@ -208,10 +216,10 @@ static int s_md5_compress(hash_state *md, const unsigned char *buf) } #ifdef LTC_CLEAN_STACK -static int s_md5_compress(hash_state *md, const unsigned char *buf) +static int md5_compress(hash_state *md, unsigned char *buf) { int err; - err = ss_md5_compress(md, buf); + err = _md5_compress(md, buf); burn_stack(sizeof(ulong32) * 21); return err; } @@ -241,7 +249,7 @@ int md5_init(hash_state * md) @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 @@ -275,7 +283,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,7 +294,7 @@ 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++) { @@ -301,37 +309,37 @@ int md5_done(hash_state * md, unsigned char *out) /** 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 +349,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 +359,10 @@ int md5_test(void) #endif } -#undef F -#undef G -#undef H -#undef I -#undef FF -#undef GG -#undef HH -#undef II - #endif + + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/rmd128.c b/src/hashes/rmd128.c index b3465d3d..40d88a6f 100644 --- a/src/hashes/rmd128.c +++ b/src/hashes/rmd128.c @@ -1,19 +1,27 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @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 */ -#ifdef LTC_RIPEMD128 +#ifdef RIPEMD128 const struct ltc_hash_descriptor rmd128_desc = { @@ -34,11 +42,11 @@ const struct ltc_hash_descriptor rmd128_desc = }; /* 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);\ @@ -73,14 +81,14 @@ const struct ltc_hash_descriptor rmd128_desc = (a) = ROLc((a), (s)); #ifdef LTC_CLEAN_STACK -static int ss_rmd128_compress(hash_state *md, const unsigned char *buf) +static int _rmd128_compress(hash_state *md, unsigned char *buf) #else -static int s_rmd128_compress(hash_state *md, const unsigned char *buf) +static int 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 +117,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 +173,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 +208,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); @@ -247,10 +255,10 @@ static int s_rmd128_compress(hash_state *md, const unsigned char *buf) } #ifdef LTC_CLEAN_STACK -static int s_rmd128_compress(hash_state *md, const unsigned char *buf) +static int rmd128_compress(hash_state *md, unsigned char *buf) { int err; - err = ss_rmd128_compress(md, buf); + err = _rmd128_compress(md, buf); burn_stack(sizeof(ulong32) * 24 + sizeof(int)); return err; } @@ -280,7 +288,7 @@ int rmd128_init(hash_state * md) @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 @@ -314,7 +322,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,7 +333,7 @@ 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++) { @@ -334,21 +342,21 @@ int rmd128_done(hash_state * md, unsigned char *out) #ifdef LTC_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 +383,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 +402,9 @@ 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 + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/rmd160.c b/src/hashes/rmd160.c index d4531f4b..06b1b428 100644 --- a/src/hashes/rmd160.c +++ b/src/hashes/rmd160.c @@ -1,19 +1,27 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @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 */ -#ifdef LTC_RIPEMD160 +#ifdef RIPEMD160 const struct ltc_hash_descriptor rmd160_desc = { @@ -34,12 +42,12 @@ const struct ltc_hash_descriptor rmd160_desc = }; /* 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);\ @@ -93,9 +101,9 @@ const struct ltc_hash_descriptor rmd160_desc = #ifdef LTC_CLEAN_STACK -static int ss_rmd160_compress(hash_state *md, const unsigned char *buf) +static int _rmd160_compress(hash_state *md, unsigned char *buf) #else -static int s_rmd160_compress(hash_state *md, const unsigned char *buf) +static int rmd160_compress(hash_state *md, unsigned char *buf) #endif { ulong32 aa,bb,cc,dd,ee,aaa,bbb,ccc,ddd,eee,X[16]; @@ -130,7 +138,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 +230,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 +265,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); @@ -305,10 +313,10 @@ static int s_rmd160_compress(hash_state *md, const unsigned char *buf) } #ifdef LTC_CLEAN_STACK -static int s_rmd160_compress(hash_state *md, const unsigned char *buf) +static int rmd160_compress(hash_state *md, unsigned char *buf) { int err; - err = ss_rmd160_compress(md, buf); + err = _rmd160_compress(md, buf); burn_stack(sizeof(ulong32) * 26 + sizeof(int)); return err; } @@ -339,7 +347,7 @@ int rmd160_init(hash_state * md) @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 @@ -373,7 +381,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,7 +392,7 @@ 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++) { @@ -399,15 +407,15 @@ int rmd160_done(hash_state * md, unsigned char *out) /** 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 +442,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 +461,9 @@ 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 + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index bfa86a6f..86cd3fd0 100644 --- a/src/hashes/sha1.c +++ b/src/hashes/sha1.c @@ -1,24 +1,24 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file sha1.c - SHA1 code by Tom St Denis + SHA1 code by Tom St Denis */ -#ifdef LTC_SHA1 +#ifdef 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 = +const struct ltc_hash_descriptor sha1_desc = { "sha1", 2, @@ -29,10 +29,10 @@ const struct ltc_hash_descriptor sha1_portable_desc = { 1, 3, 14, 3, 2, 26, }, 6, - &sha1_c_init, - &sha1_c_process, - &sha1_c_done, - &sha1_c_test, + &sha1_init, + &sha1_process, + &sha1_done, + &sha1_test, NULL }; @@ -42,17 +42,12 @@ const struct ltc_hash_descriptor sha1_portable_desc = #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) +static int _sha1_compress(hash_state *md, unsigned char *buf) #else -static int s_sha1_c_compress(hash_state *md, const unsigned char *buf) +static int sha1_compress(hash_state *md, unsigned char *buf) #endif { - ulong32 a,b,c,d,e,i; -#ifdef LTC_SMALL_STACK_SHA1 - ulong32 W[16]; -#else - ulong32 W[80]; -#endif + ulong32 a,b,c,d,e,W[80],i; #ifdef LTC_SMALL_CODE ulong32 t; #endif @@ -69,86 +64,71 @@ static int s_sha1_c_compress(hash_state *md, const unsigned char *buf) 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); + 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); - + #define FF0(a,b,c,d,e,i) e = (ROLc(a, 5) + F0(b,c,d) + e + W[i] + 0x5a827999UL); b = ROLc(b, 30); + #define FF1(a,b,c,d,e,i) e = (ROLc(a, 5) + F1(b,c,d) + e + W[i] + 0x6ed9eba1UL); b = ROLc(b, 30); + #define FF2(a,b,c,d,e,i) e = (ROLc(a, 5) + F2(b,c,d) + e + W[i] + 0x8f1bbcdcUL); b = ROLc(b, 30); + #define FF3(a,b,c,d,e,i) e = (ROLc(a, 5) + F3(b,c,d) + e + W[i] + 0xca62c1d6UL); b = ROLc(b, 30); + #ifdef LTC_SMALL_CODE - - for (i = 0; i < 16; ) { + + 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 < 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; + 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; + 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; + 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; ) { + 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++); } - 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++); + 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; ) { - 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++); + 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; ) { - 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++); + 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 @@ -156,8 +136,6 @@ static int s_sha1_c_compress(hash_state *md, const unsigned char *buf) #undef FF1 #undef FF2 #undef FF3 - #undef Wi - #undef Windex /* store */ md->sha1.state[0] = md->sha1.state[0] + a; @@ -170,15 +148,33 @@ static int s_sha1_c_compress(hash_state *md, const unsigned char *buf) } #ifdef LTC_CLEAN_STACK -static int s_sha1_c_compress(hash_state *md, const unsigned char *buf) +static int sha1_compress(hash_state *md, unsigned char *buf) { int err; - err = ss_sha1_c_compress(md, buf); + err = _sha1_compress(md, buf); burn_stack(sizeof(ulong32) * 87); return err; } #endif +/** + 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 @@ -186,7 +182,7 @@ static int s_sha1_c_compress(hash_state *md, const unsigned char *buf) @param inlen The length of the data (octets) @return CRYPT_OK if successful */ -HASH_PROCESS(sha1_c_process, s_sha1_c_compress, sha1, 64) +HASH_PROCESS(sha1_process, sha1_compress, sha1, 64) /** Terminate the hash to get the digest @@ -194,7 +190,7 @@ HASH_PROCESS(sha1_c_process, s_sha1_c_compress, sha1, 64) @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 sha1_done(hash_state * md, unsigned char *out) { int i; @@ -219,7 +215,7 @@ int sha1_c_done(hash_state * md, unsigned char *out) while (md->sha1.curlen < 64) { md->sha1.buf[md->sha1.curlen++] = (unsigned char)0; } - s_sha1_c_compress(md, md->sha1.buf); + sha1_compress(md, md->sha1.buf); md->sha1.curlen = 0; } @@ -230,7 +226,7 @@ int sha1_c_done(hash_state * md, unsigned char *out) /* store length */ STORE64H(md->sha1.length, md->sha1.buf+56); - s_sha1_c_compress(md, md->sha1.buf); + sha1_compress(md, md->sha1.buf); /* copy output */ for (i = 0; i < 5; i++) { @@ -245,21 +241,48 @@ int sha1_c_done(hash_state * md, unsigned char *out) /** Self-test the hash @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha1_c_test(void) +*/ +int sha1_test(void) { - return sha1_test_desc(&sha1_portable_desc, "SHA1 portable"); -} + #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 } + } + }; -#undef F0 -#undef F1 -#undef F2 -#undef F3 -#undef FF0 -#undef FF1 -#undef FF2 -#undef FF3 + 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 69ccf90b..804a8813 100644 --- a/src/hashes/sha2/sha224.c +++ b/src/hashes/sha2/sha224.c @@ -1,15 +1,19 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ /** @param sha224.c - LTC_SHA-224 new NIST standard based off of LTC_SHA-256 truncated to 224 bits (Tom St Denis) + SHA-224 new NIST standard based off of 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 = +const struct ltc_hash_descriptor sha224_desc = { "sha224", 10, @@ -21,19 +25,42 @@ const struct ltc_hash_descriptor sha224_portable_desc = 9, &sha224_init, - &sha224_c_process, - &sha224_c_done, - &sha224_c_test, + &sha256_process, + &sha224_done, + &sha224_test, NULL }; +/* 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_c_done(hash_state * md, unsigned char *out) +int sha224_done(hash_state * md, unsigned char *out) { unsigned char buf[32]; int err; @@ -41,22 +68,58 @@ int sha224_c_done(hash_state * md, unsigned char *out) LTC_ARGCHK(md != NULL); LTC_ARGCHK(out != NULL); - err = sha256_c_done(md, buf); + err = sha256_done(md, buf); XMEMCPY(out, buf, 28); #ifdef LTC_CLEAN_STACK zeromem(buf, sizeof(buf)); -#endif +#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) +*/ +int sha224_test(void) { - return sha224_test_desc(&sha224_portable_desc, "SHA224 portable"); + #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 } -#endif /* defined(LTC_SHA224) && defined(LTC_SHA256) */ +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index acc0a18e..e3d07dcd 100644 --- a/src/hashes/sha2/sha256.c +++ b/src/hashes/sha2/sha256.c @@ -1,15 +1,23 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file sha256.c - SHA256 by Tom St Denis + SHA256 by Tom St Denis */ -#ifdef LTC_SHA256 +#ifdef SHA256 -const struct ltc_hash_descriptor sha256_portable_desc = +const struct ltc_hash_descriptor sha256_desc = { "sha256", 0, @@ -19,26 +27,17 @@ const struct ltc_hash_descriptor sha256_portable_desc = /* OID */ { 2, 16, 840, 1, 101, 3, 4, 2, 1, }, 9, - + &sha256_init, - &sha256_c_process, - &sha256_c_done, - &sha256_c_test, + &sha256_process, + &sha256_done, + &sha256_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] = { +static const unsigned long K[64] = { 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, @@ -57,7 +56,7 @@ static const ulong32 K[64] = { /* Various logical functions */ #define Ch(x,y,z) (z ^ (x & (y ^ z))) -#define Maj(x,y,z) (((x | y) & z) | (x & y)) +#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)) @@ -67,17 +66,12 @@ static const ulong32 K[64] = { /* compress 512-bits */ #ifdef LTC_CLEAN_STACK -static int ss_sha256_compress(hash_state * md, const unsigned char *buf) +static int _sha256_compress(hash_state * md, unsigned char *buf) #else -static int s_sha256_compress(hash_state * md, const unsigned char *buf) +static int sha256_compress(hash_state * md, unsigned char *buf) #endif { - ulong32 S[8], t0, t1; -#ifdef LTC_SMALL_STACK_SHA256 - ulong32 W[16]; -#else - ulong32 W[64]; -#endif + ulong32 S[8], W[64], t0, t1; #ifdef LTC_SMALL_CODE ulong32 t; #endif @@ -93,51 +87,29 @@ static int s_sha256_compress(hash_state * md, const unsigned char *buf) 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; \ +#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[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]; + 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; \ + } +#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); @@ -156,58 +128,58 @@ static int s_sha256_compress(hash_state * md, const unsigned char *buf) 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 + 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++) { @@ -217,15 +189,37 @@ static int s_sha256_compress(hash_state * md, const unsigned char *buf) } #ifdef LTC_CLEAN_STACK -static int s_sha256_compress(hash_state * md, const unsigned char *buf) +static int sha256_compress(hash_state * md, unsigned char *buf) { int err; - err = ss_sha256_compress(md, buf); + err = _sha256_compress(md, buf); burn_stack(sizeof(ulong32) * 74); return err; } #endif +/** + 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 @@ -233,7 +227,7 @@ static int s_sha256_compress(hash_state * md, const unsigned char *buf) @param inlen The length of the data (octets) @return CRYPT_OK if successful */ -HASH_PROCESS(sha256_c_process,s_sha256_compress, sha256, 64) +HASH_PROCESS(sha256_process, sha256_compress, sha256, 64) /** Terminate the hash to get the digest @@ -241,7 +235,7 @@ HASH_PROCESS(sha256_c_process,s_sha256_compress, sha256, 64) @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 sha256_done(hash_state * md, unsigned char *out) { int i; @@ -267,7 +261,7 @@ int sha256_c_done(hash_state * md, unsigned char *out) while (md->sha256.curlen < 64) { md->sha256.buf[md->sha256.curlen++] = (unsigned char)0; } - s_sha256_compress(md, md->sha256.buf); + sha256_compress(md, md->sha256.buf); md->sha256.curlen = 0; } @@ -278,7 +272,7 @@ int sha256_c_done(hash_state * md, unsigned char *out) /* store length */ STORE64H(md->sha256.length, md->sha256.buf+56); - s_sha256_compress(md, md->sha256.buf); + sha256_compress(md, md->sha256.buf); /* copy output */ for (i = 0; i < 8; i++) { @@ -293,21 +287,54 @@ int sha256_c_done(hash_state * md, unsigned char *out) /** Self-test the hash @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha256_c_test(void) +*/ +int sha256_test(void) { - return sha256_test_desc(&sha256_portable_desc, "SHA256 portable"); + #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 } -#undef Ch -#undef Maj -#undef S -#undef R -#undef Sigma0 -#undef Sigma1 -#undef Gamma0 -#undef Gamma1 +#ifdef SHA224 +#include "sha224.c" +#endif #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index f06de33b..75a42042 100644 --- a/src/hashes/sha2/sha384.c +++ b/src/hashes/sha2/sha384.c @@ -1,15 +1,19 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +/** @param sha384.c - LTC_SHA384 hash included in sha512.c, Tom St Denis + 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 = +const struct ltc_hash_descriptor sha384_desc = { "sha384", 4, @@ -21,41 +25,111 @@ const struct ltc_hash_descriptor sha384_portable_desc = 9, &sha384_init, - &sha384_c_process, - &sha384_c_done, - &sha384_c_test, + &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_c_done(hash_state * md, unsigned char *out) +int sha384_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); + if (md->sha512.curlen >= sizeof(md->sha512.buf)) { + return CRYPT_INVALID_ARG; + } + + sha512_done(md, buf); XMEMCPY(out, buf, 48); #ifdef LTC_CLEAN_STACK zeromem(buf, sizeof(buf)); #endif - return err; + return CRYPT_OK; } /** Self-test the hash @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha384_c_test(void) +*/ +int sha384_test(void) { - return sha384_test_desc(&sha384_portable_desc, "SHA384 portable"); + #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 } -#endif /* defined(LTC_SHA384) && defined(LTC_SHA512) */ + + + + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 91774569..4ba0ce86 100644 --- a/src/hashes/sha2/sha512.c +++ b/src/hashes/sha2/sha512.c @@ -1,15 +1,23 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @param sha512.c - SHA512 by Tom St Denis + SHA512 by Tom St Denis */ -#ifdef LTC_SHA512 +#ifdef SHA512 -const struct ltc_hash_descriptor sha512_portable_desc = +const struct ltc_hash_descriptor sha512_desc = { "sha512", 5, @@ -21,60 +29,59 @@ const struct ltc_hash_descriptor sha512_portable_desc = 9, &sha512_init, - &sha512_c_process, - &sha512_c_done, - &sha512_c_test, + &sha512_process, + &sha512_done, + &sha512_test, NULL }; /* the K array */ -#define K sha512_K static const ulong64 K[80] = { -CONST64(0x428a2f98d728ae22), CONST64(0x7137449123ef65cd), +CONST64(0x428a2f98d728ae22), CONST64(0x7137449123ef65cd), CONST64(0xb5c0fbcfec4d3b2f), CONST64(0xe9b5dba58189dbbc), -CONST64(0x3956c25bf348b538), CONST64(0x59f111f1b605d019), +CONST64(0x3956c25bf348b538), CONST64(0x59f111f1b605d019), CONST64(0x923f82a4af194f9b), CONST64(0xab1c5ed5da6d8118), -CONST64(0xd807aa98a3030242), CONST64(0x12835b0145706fbe), +CONST64(0xd807aa98a3030242), CONST64(0x12835b0145706fbe), CONST64(0x243185be4ee4b28c), CONST64(0x550c7dc3d5ffb4e2), -CONST64(0x72be5d74f27b896f), CONST64(0x80deb1fe3b1696b1), +CONST64(0x72be5d74f27b896f), CONST64(0x80deb1fe3b1696b1), CONST64(0x9bdc06a725c71235), CONST64(0xc19bf174cf692694), -CONST64(0xe49b69c19ef14ad2), CONST64(0xefbe4786384f25e3), +CONST64(0xe49b69c19ef14ad2), CONST64(0xefbe4786384f25e3), CONST64(0x0fc19dc68b8cd5b5), CONST64(0x240ca1cc77ac9c65), -CONST64(0x2de92c6f592b0275), CONST64(0x4a7484aa6ea6e483), +CONST64(0x2de92c6f592b0275), CONST64(0x4a7484aa6ea6e483), CONST64(0x5cb0a9dcbd41fbd4), CONST64(0x76f988da831153b5), -CONST64(0x983e5152ee66dfab), CONST64(0xa831c66d2db43210), +CONST64(0x983e5152ee66dfab), CONST64(0xa831c66d2db43210), CONST64(0xb00327c898fb213f), CONST64(0xbf597fc7beef0ee4), -CONST64(0xc6e00bf33da88fc2), CONST64(0xd5a79147930aa725), +CONST64(0xc6e00bf33da88fc2), CONST64(0xd5a79147930aa725), CONST64(0x06ca6351e003826f), CONST64(0x142929670a0e6e70), -CONST64(0x27b70a8546d22ffc), CONST64(0x2e1b21385c26c926), +CONST64(0x27b70a8546d22ffc), CONST64(0x2e1b21385c26c926), CONST64(0x4d2c6dfc5ac42aed), CONST64(0x53380d139d95b3df), -CONST64(0x650a73548baf63de), CONST64(0x766a0abb3c77b2a8), +CONST64(0x650a73548baf63de), CONST64(0x766a0abb3c77b2a8), CONST64(0x81c2c92e47edaee6), CONST64(0x92722c851482353b), CONST64(0xa2bfe8a14cf10364), CONST64(0xa81a664bbc423001), CONST64(0xc24b8b70d0f89791), CONST64(0xc76c51a30654be30), -CONST64(0xd192e819d6ef5218), CONST64(0xd69906245565a910), +CONST64(0xd192e819d6ef5218), CONST64(0xd69906245565a910), CONST64(0xf40e35855771202a), CONST64(0x106aa07032bbd1b8), -CONST64(0x19a4c116b8d2d0c8), CONST64(0x1e376c085141ab53), +CONST64(0x19a4c116b8d2d0c8), CONST64(0x1e376c085141ab53), CONST64(0x2748774cdf8eeb99), CONST64(0x34b0bcb5e19b48a8), -CONST64(0x391c0cb3c5c95a63), CONST64(0x4ed8aa4ae3418acb), +CONST64(0x391c0cb3c5c95a63), CONST64(0x4ed8aa4ae3418acb), CONST64(0x5b9cca4f7763e373), CONST64(0x682e6ff3d6b2b8a3), -CONST64(0x748f82ee5defb2fc), CONST64(0x78a5636f43172f60), +CONST64(0x748f82ee5defb2fc), CONST64(0x78a5636f43172f60), CONST64(0x84c87814a1f0ab72), CONST64(0x8cc702081a6439ec), -CONST64(0x90befffa23631e28), CONST64(0xa4506cebde82bde9), +CONST64(0x90befffa23631e28), CONST64(0xa4506cebde82bde9), CONST64(0xbef9a3f7b2c67915), CONST64(0xc67178f2e372532b), -CONST64(0xca273eceea26619c), CONST64(0xd186b8c721c0c207), +CONST64(0xca273eceea26619c), CONST64(0xd186b8c721c0c207), CONST64(0xeada7dd6cde0eb1e), CONST64(0xf57d4f7fee6ed178), -CONST64(0x06f067aa72176fba), CONST64(0x0a637dc5a2c898a6), +CONST64(0x06f067aa72176fba), CONST64(0x0a637dc5a2c898a6), CONST64(0x113f9804bef90dae), CONST64(0x1b710b35131c471b), -CONST64(0x28db77f523047d84), CONST64(0x32caab7b40c72493), +CONST64(0x28db77f523047d84), CONST64(0x32caab7b40c72493), CONST64(0x3c9ebe0a15c9bebc), CONST64(0x431d67c49c100d4c), -CONST64(0x4cc5d4becb3e42b6), CONST64(0x597f299cfc657e2a), +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 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)) @@ -84,17 +91,12 @@ CONST64(0x5fcb6fab3ad6faec), CONST64(0x6c44198c4a475817) /* compress 1024-bits */ #ifdef LTC_CLEAN_STACK -static int ss_sha512_compress(hash_state * md, const unsigned char *buf) +static int _sha512_compress(hash_state * md, unsigned char *buf) #else -static int s_sha512_compress(hash_state * md, const unsigned char *buf) +static int sha512_compress(hash_state * md, unsigned char *buf) #endif { - ulong64 S[8], t0, t1; -#ifdef LTC_SMALL_STACK - ulong64 W[16]; -#else - ulong64 W[80]; -#endif + ulong64 S[8], W[80], t0, t1; int i; /* copy state into S */ @@ -107,36 +109,15 @@ static int s_sha512_compress(hash_state * md, const unsigned char *buf) 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)]; + 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]; @@ -148,36 +129,23 @@ static int s_sha512_compress(hash_state * md, const unsigned char *buf) 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; \ +#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 < 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 + 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 */ @@ -187,19 +155,39 @@ static int s_sha512_compress(hash_state * md, const unsigned char *buf) return CRYPT_OK; } -#undef K /* compress 1024-bits */ #ifdef LTC_CLEAN_STACK -static int s_sha512_compress(hash_state * md, const unsigned char *buf) +static int sha512_compress(hash_state * md, unsigned char *buf) { int err; - err = ss_sha512_compress(md, buf); + err = _sha512_compress(md, buf); burn_stack(sizeof(ulong64) * 90 + sizeof(int)); return err; } #endif +/** + 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 @@ -207,7 +195,7 @@ static int s_sha512_compress(hash_state * md, const unsigned char *buf) @param inlen The length of the data (octets) @return CRYPT_OK if successful */ -HASH_PROCESS(sha512_c_process, s_sha512_compress, sha512, 128) +HASH_PROCESS(sha512_process, sha512_compress, sha512, 128) /** Terminate the hash to get the digest @@ -215,7 +203,7 @@ HASH_PROCESS(sha512_c_process, s_sha512_compress, sha512, 128) @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 sha512_done(hash_state * md, unsigned char *out) { int i; @@ -240,11 +228,11 @@ int sha512_c_done(hash_state * md, unsigned char *out) while (md->sha512.curlen < 128) { md->sha512.buf[md->sha512.curlen++] = (unsigned char)0; } - s_sha512_compress(md, md->sha512.buf); + sha512_compress(md, md->sha512.buf); md->sha512.curlen = 0; } - /* pad upto 120 bytes of zeroes + /* 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... :-) */ @@ -254,7 +242,7 @@ int sha512_c_done(hash_state * md, unsigned char *out) /* store length */ STORE64H(md->sha512.length, md->sha512.buf+120); - s_sha512_compress(md, md->sha512.buf); + sha512_compress(md, md->sha512.buf); /* copy output */ for (i = 0; i < 8; i++) { @@ -269,19 +257,63 @@ int sha512_c_done(hash_state * md, unsigned char *out) /** Self-test the hash @return CRYPT_OK if successful, CRYPT_NOP if self-tests have been disabled -*/ -int sha512_c_test(void) +*/ +int sha512_test(void) { - return sha512_test_desc(&sha512_portable_desc, "SHA512 portable"); + #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 } -#undef Ch -#undef Maj -#undef S -#undef R -#undef Sigma0 -#undef Sigma1 -#undef Gamma0 -#undef Gamma1 +#ifdef SHA384 + #include "sha384.c" +#endif #endif + + + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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/hashes/tiger.c b/src/hashes/tiger.c index c8b18dfe..f282cc23 100644 --- a/src/hashes/tiger.c +++ b/src/hashes/tiger.c @@ -1,14 +1,22 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +#include "tomcrypt.h" /** @file tiger.c Tiger hash function, Tom St Denis */ -#ifdef LTC_TIGER +#ifdef TIGER const struct ltc_hash_descriptor tiger_desc = { @@ -28,24 +36,6 @@ const struct ltc_hash_descriptor tiger_desc = 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 -}; - #define t1 (table) #define t2 (table+256) #define t3 (table+256*2) @@ -565,13 +555,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 +576,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) +static int _tiger_compress(hash_state *md, unsigned char *buf) #else -static int s_tiger_compress(hash_state *md, const unsigned char *buf) +static int 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,16 +626,11 @@ 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]; @@ -650,10 +641,10 @@ static int s_tiger_compress(hash_state *md, const unsigned char *buf) } #ifdef LTC_CLEAN_STACK -static int s_tiger_compress(hash_state *md, const unsigned char *buf) +static int tiger_compress(hash_state *md, unsigned char *buf) { int err; - err = ss_tiger_compress(md, buf); + err = _tiger_compress(md, buf); burn_stack(sizeof(ulong64) * 11 + sizeof(unsigned long)); return err; } @@ -672,57 +663,6 @@ int tiger_init(hash_state *md) 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; -} - -/** - 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 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; } @@ -733,7 +673,7 @@ int tiger2_init_ex(hash_state *md, unsigned long passes) @param inlen The length of the data (octets) @return CRYPT_OK if successful */ -HASH_PROCESS(tiger_process, s_tiger_compress, tiger, 64) +HASH_PROCESS(tiger_process, tiger_compress, tiger, 64) /** Terminate the hash to get the digest @@ -753,8 +693,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,18 +703,18 @@ 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]); @@ -790,79 +730,52 @@ int tiger_done(hash_state * md, unsigned char *out) /** 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 +783,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 /* @@ -918,3 +808,7 @@ Hash of "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-ABCDEFG + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/whirl/whirl.c b/src/hashes/whirl/whirl.c index 48706150..19739632 100644 --- a/src/hashes/whirl/whirl.c +++ b/src/hashes/whirl/whirl.c @@ -1,14 +1,22 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -/** +/** @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 "tomcrypt.h" -#ifdef LTC_WHIRLPOOL +#ifdef WHIRLPOOL const struct ltc_hash_descriptor whirlpool_desc = { @@ -29,34 +37,31 @@ const struct ltc_hash_descriptor whirlpool_desc = }; /* 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) +static int _whirlpool_compress(hash_state *md, unsigned char *buf) #else -static int s_whirlpool_compress(hash_state *md, const unsigned char *buf) +static int 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 +70,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 +80,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,13 +93,13 @@ 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] */ 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]; @@ -105,10 +110,10 @@ static int s_whirlpool_compress(hash_state *md, const unsigned char *buf) #ifdef LTC_CLEAN_STACK -static int s_whirlpool_compress(hash_state *md, const unsigned char *buf) +static int whirlpool_compress(hash_state *md, unsigned char *buf) { int err; - err = ss_whirlpool_compress(md, buf); + err = _whirlpool_compress(md, buf); burn_stack((5 * 8 * sizeof(ulong64)) + (2 * sizeof(int))); return err; } @@ -134,7 +139,7 @@ int whirlpool_init(hash_state * md) @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 @@ -167,7 +172,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,7 +183,7 @@ 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++) { @@ -193,20 +198,20 @@ int whirlpool_done(hash_state * md, unsigned char *out) /** 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 +279,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 +305,10 @@ int whirlpool_test(void) #endif } -#undef GB -#undef theta_pi_gamma #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/whirl/whirltab.c b/src/hashes/whirl/whirltab.c index 7c913f76..d38ef7c9 100644 --- a/src/hashes/whirl/whirltab.c +++ b/src/hashes/whirl/whirltab.c @@ -1,77 +1,71 @@ -/* 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) - + WHIRLPOOL tables, Tom St Denis +*/ 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) }; @@ -99,471 +93,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 +577,7 @@ CONST64(0xca2dbf07ad5a8333), CONST64(0x6302aa71c81949d9), }; -#endif /* LTC_WHIRLTAB_C */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt.h b/src/headers/tomcrypt.h index 35d08d48..a7320338 100644 --- a/src/headers/tomcrypt.h +++ b/src/headers/tomcrypt.h @@ -1,35 +1,29 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - #ifndef TOMCRYPT_H_ #define TOMCRYPT_H_ #include #include #include #include -#include #include #include #include /* use configuration data */ -#include "tomcrypt_custom.h" +#include #ifdef __cplusplus extern "C" { #endif /* version */ -#define CRYPT 0x0118 -#define SCRYPT "1.18.2-develop" +#define CRYPT 0x0113 +#define SCRYPT "1.13" /* max size of either a cipher/hash block or symmetric key [largest of the two] */ -#define MAXBLOCKSIZE 168 +#define MAXBLOCKSIZE 128 -#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,38 +54,25 @@ 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 +#include +#include #ifdef __cplusplus } @@ -99,3 +80,7 @@ enum { #endif /* TOMCRYPT_H_ */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_argchk.h b/src/headers/tomcrypt_argchk.h index 25f75b9f..68edb911 100644 --- a/src/headers/tomcrypt_argchk.h +++ b/src/headers/tomcrypt_argchk.h @@ -1,38 +1,38 @@ -/* 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 */ +/* ARGTYPE is defined in mycrypt_cfg.h */ #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) +/* this is the default LibTomCrypt macro */ +void crypt_argchk(char *v, char *s, int d); +#define LTC_ARGCHK(x) if (!(x)) { crypt_argchk(#x, __FILE__, __LINE__); } +#define LTC_ARGCHKVD(x) LTC_ARGCHK(x) #elif ARGTYPE == 1 /* fatal type of error */ #define LTC_ARGCHK(x) assert((x)) +#define LTC_ARGCHKVD(x) LTC_ARGCHK(x) #elif ARGTYPE == 2 #define LTC_ARGCHK(x) if (!(x)) { fprintf(stderr, "\nwarning: ARGCHK failed at %s:%d\n", __FILE__, __LINE__); } +#define LTC_ARGCHKVD(x) LTC_ARGCHK(x) #elif ARGTYPE == 3 -#define LTC_ARGCHK(x) LTC_UNUSED_PARAM(x) +#define LTC_ARGCHK(x) +#define LTC_ARGCHKVD(x) LTC_ARGCHK(x) #elif ARGTYPE == 4 -#define LTC_ARGCHK(x) if (!(x)) return CRYPT_INVALID_ARG; -#define LTC_ARGCHKVD(x) if (!(x)) return; +#define LTC_ARGCHK(x) return CRYPT_INVALID_ARG; +#define LTC_ARGCHKVD(x) return; #endif -#if defined(LTC_ARGCHK) && !defined(LTC_ARGCHKVD) -#define LTC_ARGCHKVD(x) LTC_ARGCHK(x) -#endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_cfg.h b/src/headers/tomcrypt_cfg.h index 93c08de8..059ab118 100644 --- a/src/headers/tomcrypt_cfg.h +++ b/src/headers/tomcrypt_cfg.h @@ -1,9 +1,6 @@ -/* 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 + * 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! */ @@ -11,18 +8,17 @@ #define TOMCRYPT_CFG_H #if defined(_WIN32) || defined(_MSC_VER) - #define LTC_CALL __cdecl -#elif !defined(LTC_CALL) +#define LTC_CALL __cdecl +#else +#ifndef LTC_CALL #define LTC_CALL #endif +#endif #ifndef LTC_EXPORT - #define 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); @@ -31,6 +27,7 @@ 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); @@ -39,412 +36,94 @@ 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 - * +/* 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) + +/* detect x86-32 machines somewhat */ +#if !defined(__STRICT_ANSI__) && (defined(INTEL_CC) || (defined(_MSC_VER) && defined(WIN32)) || (defined(__GNUC__) && (defined(__DJGPP__) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__i386__)))) #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 + #define LTC_FAST_TYPE unsigned long #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 - #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__) +/* detect amd64 */ +#if !defined(__STRICT_ANSI__) && defined(__x86_64__) + #define ENDIAN_LITTLE #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 + #define LTC_FAST_TYPE unsigned long #endif -/* Detect ILP32, commonly known as x32 on Linux and also possible on AIX */ -#if defined(_ILP32) || defined(__ILP32__) - #define ENDIAN_64BITWORD_ILP32 -#endif +/* detect PPC32 */ +#if !defined(__STRICT_ANSI__) && defined(LTC_PPC32) + #define ENDIAN_BIG + #define ENDIAN_32BITWORD + #define LTC_FAST + #define LTC_FAST_TYPE unsigned long +#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 +/* detect sparc and sparc64 */ +#if defined(__sparc__) + #define ENDIAN_BIG + #if defined(__arch64__) + #define ENDIAN_64BITWORD #else - #error Cannot detect endianness + #define ENDIAN_32BITWORD #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 +#ifdef LTC_NO_FAST + #ifdef LTC_FAST + #undef LTC_FAST #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_LITTLE + #undef ENDIAN_BIG #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 + #undef LTC_FAST_TYPE #define LTC_NO_ROLC - #define LTC_NO_ROTATE + #define LTC_NO_BSWAP #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 +/* #define ENDIAN_LITTLE */ +/* #define ENDIAN_BIG */ -/* No LTC_FAST if explicitly disabled */ -#if defined(LTC_NO_FAST) - #undef LTC_FAST -#endif +/* #define ENDIAN_32BITWORD */ +/* #define ENDIAN_64BITWORD */ -#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 +#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 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 */ +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_cipher.h b/src/headers/tomcrypt_cipher.h index 0cf7feec..62033083 100644 --- a/src/headers/tomcrypt_cipher.h +++ b/src/headers/tomcrypt_cipher.h @@ -1,69 +1,50 @@ -/* 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 + * 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 +#ifdef BLOWFISH struct blowfish_key { ulong32 S[4][256]; ulong32 K[18]; }; #endif -#ifdef LTC_RC5 +#ifdef RC5 struct rc5_key { int rounds; ulong32 K[50]; }; #endif -#ifdef LTC_RC6 +#ifdef RC6 struct rc6_key { ulong32 K[44]; }; #endif -#ifdef LTC_SAFERP +#ifdef SAFERP struct saferp_key { unsigned char K[33][16]; long rounds; }; #endif -#ifdef LTC_RIJNDAEL +#ifdef RIJNDAEL struct rijndael_key { - unsigned char K[LTC_ALIGNED_BUF_SIZE(ulong32, 60 + 60, 16)]; - ulong32 *eK; - ulong32 *dK; + ulong32 eK[60], dK[60]; 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 +#ifdef XTEA struct xtea_key { unsigned long A[32], B[32]; }; #endif -#ifdef LTC_TWOFISH -#ifndef LTC_TWOFISH_SMALL +#ifdef TWOFISH +#ifndef TWOFISH_SMALL struct twofish_key { ulong32 S[4][256], K[40]; }; @@ -75,305 +56,240 @@ struct xtea_key { #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]; +#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 LTC_RC2 +#ifdef RC2 struct rc2_key { unsigned xkey[64]; }; #endif -#ifdef LTC_DES +#ifdef 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 +#ifdef CAST5 struct cast5_key { ulong32 K[32], keylen; }; #endif -#ifdef LTC_NOEKEON +#ifdef NOEKEON struct noekeon_key { ulong32 K[4], dK[4]; }; #endif -#ifdef LTC_SKIPJACK +#ifdef SKIPJACK struct skipjack_key { unsigned char key[10]; }; #endif -#ifdef LTC_KHAZAD +#ifdef KHAZAD struct khazad_key { - ulong64 roundKeyEnc[8 + 1]; - ulong64 roundKeyDec[8 + 1]; + 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; -}; +#ifdef ANUBIS +struct anubis_key { + int keyBits; + int R; + ulong32 roundKeyEnc[18 + 1][4]; + ulong32 roundKeyDec[18 + 1][4]; +}; #endif typedef union Symmetric_key { -#ifdef LTC_DES +#ifdef 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 +#ifdef RC2 struct rc2_key rc2; #endif -#ifdef LTC_SAFER +#ifdef SAFER struct safer_key safer; #endif -#ifdef LTC_TWOFISH +#ifdef TWOFISH struct twofish_key twofish; #endif -#ifdef LTC_BLOWFISH +#ifdef BLOWFISH struct blowfish_key blowfish; #endif -#ifdef LTC_RC5 +#ifdef RC5 struct rc5_key rc5; #endif -#ifdef LTC_RC6 +#ifdef RC6 struct rc6_key rc6; #endif -#ifdef LTC_SAFERP +#ifdef SAFERP struct saferp_key saferp; #endif -#ifdef LTC_RIJNDAEL +#ifdef RIJNDAEL struct rijndael_key rijndael; #endif -#ifdef LTC_XTEA +#ifdef XTEA struct xtea_key xtea; #endif -#ifdef LTC_CAST5 +#ifdef CAST5 struct cast5_key cast5; #endif -#ifdef LTC_NOEKEON +#ifdef NOEKEON struct noekeon_key noekeon; -#endif -#ifdef LTC_SKIPJACK +#endif +#ifdef SKIPJACK struct skipjack_key skipjack; #endif -#ifdef LTC_KHAZAD +#ifdef KHAZAD struct khazad_key khazad; #endif -#ifdef LTC_ANUBIS +#ifdef 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 +#ifdef ECB /** A block cipher ECB structure */ typedef struct { - /** The scheduled key */ - symmetric_key key; /** The index of the cipher chosen */ - int cipher, + int cipher, /** The block size of the given cipher */ blocklen; + /** The scheduled key */ + symmetric_key key; } symmetric_ECB; #endif -#ifdef LTC_CFB_MODE +#ifdef CFB /** 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 index of the cipher chosen */ + int cipher, + /** The block size of the given cipher */ + blocklen, /** The padding offset */ padlen; + /** The current IV */ + unsigned char IV[MAXBLOCKSIZE], + /** The pad used to encrypt/decrypt */ + pad[MAXBLOCKSIZE]; + /** The scheduled key */ + symmetric_key key; } symmetric_CFB; #endif -#ifdef LTC_OFB_MODE +#ifdef OFB /** A block cipher OFB structure */ typedef struct { - /** The ECB context of the cipher */ - symmetric_ECB ecb; + /** The index of the cipher chosen */ + int cipher, + /** The block size of the given cipher */ + blocklen, + /** The padding offset */ + padlen; /** The current IV */ unsigned char IV[MAXBLOCKSIZE]; - /** The padding offset */ - int padlen; - + /** The scheduled key */ + symmetric_key key; } symmetric_OFB; #endif -#ifdef LTC_CBC_MODE +#ifdef CBC /** A block cipher CBC structure */ typedef struct { - /** The ECB context of the cipher */ - symmetric_ECB ecb; + /** The index of the cipher chosen */ + int cipher, + /** The block size of the given cipher */ + blocklen; /** The current IV */ unsigned char IV[MAXBLOCKSIZE]; + /** The scheduled key */ + symmetric_key key; } symmetric_CBC; #endif -#ifdef LTC_CTR_MODE +#ifdef CTR /** 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 index of the cipher chosen */ + int cipher, + /** The block size of the given cipher */ + blocklen, /** The padding offset */ - int padlen, - /** The mode (endianess) of the CTR, 0==little, 1==big */ - mode, - /** counter width */ - ctrlen; + padlen, + /** The mode (endianess) of the CTR, 0==little, 1==big */ + mode; + /** The counter */ + unsigned char ctr[MAXBLOCKSIZE], + /** The pad used to encrypt/decrypt */ + pad[MAXBLOCKSIZE]; + /** The scheduled key */ + symmetric_key key; } symmetric_CTR; #endif -#ifdef LTC_LRW_MODE +#ifdef LRW_MODE /** A LRW structure */ typedef struct { - /** The ECB context of the cipher */ - symmetric_ECB ecb; + /** The index of the cipher chosen (must be a 128-bit block cipher) */ + int cipher; + /** 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 scheduled symmetric key */ + symmetric_key key; + +#ifdef 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 index of the cipher chosen */ + int cipher, + /** The block size of the given cipher */ + blocklen, + /** The padding offset */ + padlen; /** The current IV */ unsigned char IV[MAXBLOCKSIZE], MIV[MAXBLOCKSIZE]; - /** The padding offset */ - int padlen; /** Current block count */ ulong32 blockcnt; + /** The scheduled key */ + symmetric_key key; } symmetric_F8; #endif @@ -381,18 +297,18 @@ typedef struct { /** 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; + char *name; /** internal ID */ unsigned char ID; /** min keysize (octets) */ - int min_key_length, + int min_key_length, /** max keysize (octets) */ - max_key_length, + max_key_length, /** block size (octets) */ - block_length, + block_length, /** default number of rounds */ default_rounds; - /** Setup the cipher + /** 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) @@ -406,23 +322,23 @@ extern struct ltc_cipher_descriptor { @param skey The scheduled key @return CRYPT_OK if successful */ - int (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey); + int (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, 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); + int (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, 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 + /** Terminate the context @param skey The scheduled key */ - void (*done)(symmetric_key *skey); + void (*done)(symmetric_key *skey); /** Determine a key size @param keysize [in/out] The size of the key desired and the suggested size @@ -431,25 +347,25 @@ extern struct ltc_cipher_descriptor { int (*keysize)(int *keysize); /** Accelerators **/ - /** Accelerated ECB encryption + /** 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); + int (*accel_ecb_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, symmetric_key *skey); - /** Accelerated ECB decryption + /** 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); + int (*accel_ecb_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, symmetric_key *skey); - /** Accelerated CBC encryption + /** Accelerated CBC encryption @param pt Plaintext @param ct Ciphertext @param blocks The number of complete blocks to process @@ -457,9 +373,9 @@ extern struct ltc_cipher_descriptor { @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); + int (*accel_cbc_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, symmetric_key *skey); - /** Accelerated CBC decryption + /** Accelerated CBC decryption @param pt Plaintext @param ct Ciphertext @param blocks The number of complete blocks to process @@ -467,9 +383,9 @@ extern struct ltc_cipher_descriptor { @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); + int (*accel_cbc_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, symmetric_key *skey); - /** Accelerated CTR encryption + /** Accelerated CTR encryption @param pt Plaintext @param ct Ciphertext @param blocks The number of complete blocks to process @@ -478,9 +394,9 @@ extern struct ltc_cipher_descriptor { @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); + int (*accel_ctr_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, int mode, symmetric_key *skey); - /** Accelerated LRW + /** Accelerated LRW @param pt Plaintext @param ct Ciphertext @param blocks The number of complete blocks to process @@ -489,9 +405,9 @@ extern struct ltc_cipher_descriptor { @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); + int (*accel_lrw_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, symmetric_key *skey); - /** Accelerated LRW + /** Accelerated LRW @param ct Ciphertext @param pt Plaintext @param blocks The number of complete blocks to process @@ -500,7 +416,7 @@ extern struct ltc_cipher_descriptor { @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); + int (*accel_lrw_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, const unsigned char *tweak, symmetric_key *skey); /** Accelerated CCM packet (one-shot) @param key The secret key to use @@ -520,7 +436,7 @@ extern struct ltc_cipher_descriptor { */ int (*accel_ccm_memory)( const unsigned char *key, unsigned long keylen, - const symmetric_key *uskey, + symmetric_key *uskey, const unsigned char *nonce, unsigned long noncelen, const unsigned char *header, unsigned long headerlen, unsigned char *pt, unsigned long ptlen, @@ -529,18 +445,18 @@ extern struct ltc_cipher_descriptor { 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) + @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 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)( @@ -548,142 +464,68 @@ extern struct ltc_cipher_descriptor { 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 *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 +#ifdef 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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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 +#ifdef 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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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 +#ifdef 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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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 +#ifdef 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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int rc2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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 +#ifdef 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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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 +#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); -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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key); +int 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); @@ -693,276 +535,162 @@ 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; +#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_done rijndael_done +#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); -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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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); +int rijndael_enc_ecb_encrypt(const unsigned char *pt, unsigned char *ct, 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; +extern const struct ltc_cipher_descriptor rijndael_desc, aes_desc; +extern const struct ltc_cipher_descriptor rijndael_enc_desc, aes_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 +#ifdef 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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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 +#ifdef 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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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 +#ifdef 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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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; +extern const struct ltc_cipher_descriptor des_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 +#ifdef 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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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 +#ifdef 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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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 +#ifdef 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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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 +#ifdef 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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int khazad_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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 +#ifdef 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_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, 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, +#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, 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_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_ECB *ecb); +int ecb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, 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, +#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_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_getiv(unsigned char *IV, unsigned long *len, 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, +#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, const 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); int ofb_done(symmetric_OFB *ofb); #endif -#ifdef LTC_CBC_MODE +#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, 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_getiv(unsigned char *IV, unsigned long *len, 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 +#ifdef CTR -#define CTR_COUNTER_LITTLE_ENDIAN 0x0000 -#define CTR_COUNTER_BIG_ENDIAN 0x1000 -#define LTC_CTR_RFC3686 0x2000 +#define CTR_COUNTER_LITTLE_ENDIAN 0 +#define CTR_COUNTER_BIG_ENDIAN 1 int ctr_start( int cipher, const unsigned char *IV, @@ -971,254 +699,55 @@ int ctr_start( int cipher, 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_getiv(unsigned char *IV, unsigned long *len, 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 +#ifdef LRW_MODE -#define LRW_ENCRYPT LTC_ENCRYPT -#define LRW_DECRYPT LTC_DECRYPT +#define LRW_ENCRYPT 0 +#define LRW_DECRYPT 1 int lrw_start( int cipher, const unsigned char *IV, const unsigned char *key, int keylen, const unsigned char *tweak, - int num_rounds, + 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_getiv(unsigned char *IV, unsigned long *len, 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 +#endif #ifdef LTC_F8_MODE -int f8_start( int cipher, const unsigned char *IV, - const unsigned char *key, int keylen, +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_getiv(unsigned char *IV, unsigned long *len, 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 */ +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_custom.h b/src/headers/tomcrypt_custom.h index 016f3d70..cf201eb1 100644 --- a/src/headers/tomcrypt_custom.h +++ b/src/headers/tomcrypt_custom.h @@ -1,6 +1,3 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - #ifndef TOMCRYPT_CUSTOM_H_ #define TOMCRYPT_CUSTOM_H_ @@ -24,131 +21,67 @@ #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 XCLOCKS_PER_SEC +#define XCLOCKS_PER_SEC CLOCKS_PER_SEC +#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 RIJNDAEL + #define BLOWFISH + #define DES + #define CAST5 + #define LTC_NO_MODES - #define LTC_ECB_MODE - #define LTC_CBC_MODE - #define LTC_CTR_MODE - + #define ECB + #define CBC + #define CTR + #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 SHA1 + #define SHA512 + #define SHA384 + #define SHA256 + #define SHA224 + #define WHIRLPOOL + #define LTC_NO_MACS - #define LTC_HMAC - #define LTC_OMAC - #define LTC_CCM_MODE + #define HMAC + #define OMAC + #define 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 SPRNG + #define YARROW + #define DEVRANDOM + #define TRY_URANDOM_FIRST + #define LTC_NO_PK - #define LTC_MRSA - #define LTC_MECC + #define MRSA + #define MECC +#endif + - #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 */ +/* Use small code where possible */ +/* #define LTC_SMALL_CODE */ /* 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 */ @@ -165,6 +98,150 @@ /* disable BSWAP on x86 */ /* #define LTC_NO_BSWAP */ +/* ---> Symmetric Block Ciphers <--- */ +#ifndef LTC_NO_CIPHERS + +#define BLOWFISH +#define RC2 +#define RC5 +#define RC6 +#define SAFERP +#define RIJNDAEL +#define 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 TWOFISH +#ifndef LTC_NO_TABLES + #define TWOFISH_TABLES + /* #define TWOFISH_ALL_TABLES */ +#else + #define TWOFISH_SMALL +#endif +/* #define TWOFISH_SMALL */ +/* DES includes EDE triple-DES */ +#define DES +#define CAST5 +#define NOEKEON +#define SKIPJACK +#define SAFER +#define KHAZAD +#define ANUBIS +#define ANUBIS_TWEAK + +#endif /* LTC_NO_CIPHERS */ + + +/* ---> Block Cipher Modes of Operation <--- */ +#ifndef LTC_NO_MODES + +#define CFB +#define OFB +#define ECB +#define CBC +#define CTR + +/* F8 chaining mode */ +#define LTC_F8_MODE + +/* LRW mode */ +#define LRW_MODE +#ifndef LTC_NO_TABLES + /* like GCM mode this will enable 16 8x128 tables [64KB] that make + * seeking very fast. + */ + #define LRW_TABLES +#endif + +#endif /* LTC_NO_MODES */ + +/* ---> One-Way Hash Functions <--- */ +#ifndef LTC_NO_HASHES + +#define CHC_HASH +#define WHIRLPOOL +#define SHA512 +#define SHA384 +#define SHA256 +#define SHA224 +#define TIGER +#define SHA1 +#define MD5 +#define MD4 +#define MD2 +#define RIPEMD128 +#define RIPEMD160 + +#endif /* LTC_NO_HASHES */ + +/* ---> MAC functions <--- */ +#ifndef LTC_NO_MACS + +#define HMAC +#define OMAC +#define PMAC +#define PELICAN + +#if defined(PELICAN) && !defined(RIJNDAEL) + #error Pelican-MAC requires RIJNDAEL +#endif + +/* ---> Encrypt + Authenticate Modes <--- */ + +#define EAX_MODE +#if defined(EAX_MODE) && !(defined(CTR) && defined(OMAC)) + #error EAX_MODE requires CTR and OMAC mode +#endif + +#define OCB_MODE +#define CCM_MODE +#define GCM_MODE + +/* Use 64KiB tables */ +#ifndef LTC_NO_TABLES + #define GCM_TABLES +#endif + +#endif /* LTC_NO_MACS */ + +/* Various tidbits of modern neatoness */ +#define BASE64 + +/* --> Pseudo Random Number Generators <--- */ +#ifndef LTC_NO_PRNGS + +/* Yarrow */ +#define YARROW +/* which descriptor of AES to use? */ +/* 0 = rijndael_enc 1 = aes_enc, 2 = rijndael [full], 3 = aes [full] */ +#define YARROW_AES 0 + +#if defined(YARROW) && !defined(CTR) + #error YARROW requires CTR chaining mode to be defined! +#endif + +/* a PRNG that simply reads from an available system source */ +#define SPRNG + +/* The RC4 stream cipher */ +#define RC4 + +/* Fortuna PRNG */ +#define FORTUNA +/* reseed every N calls to the read function */ +#define FORTUNA_WD 10 +/* number of pools (4..32) can save a bit of ram by lowering the count */ +#define FORTUNA_POOLS 32 + +/* Greg's SOBER128 PRNG ;-0 */ +#define SOBER128 + +/* the *nix style /dev/random device */ +#define DEVRANDOM +/* try /dev/urandom before trying /dev/random */ +#define TRY_URANDOM_FIRST + +#endif /* LTC_NO_PRNGS */ + /* ---> math provider? <--- */ #ifndef LTC_NO_MATH @@ -174,604 +251,78 @@ /* 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 +#define 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 +/* Include Katja (a Rabin variant like RSA) */ +/* #define MKAT */ /* Digital Signature Algorithm */ -#define LTC_MDSA - -/* Ed25519 & X25519 */ -#define LTC_CURVE25519 - -/* Ed448 & X448 */ -#define LTC_CURVE448 +#define MDSA /* ECC */ -#define LTC_MECC +#define 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 +#if defined(TFM_DESC) && defined(MECC) + #define MECC_ACCEL +#endif /* do we want fixed point ECC */ -/* #define LTC_MECC_FP */ +/* #define MECC_FP */ + +/* Timing Resistant? */ +/* #define LTC_ECC_TIMING_RESISTANT */ #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 +#define PKCS_1 +#define PKCS_5 /* 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 +#ifdef 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 + #define ECC192 + #define ECC224 + #define ECC256 + #define ECC384 + #define ECC521 #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) +#if defined(MECC) || defined(MRSA) || defined(MDSA) || defined(MKATJA) /* 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 + #define MPI #endif -#ifdef LTC_MRSA - #define LTC_PKCS_1 -#endif +#ifdef MRSA + #define 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) +#if defined(LTC_DER) && !defined(MPI) #error ASN.1 DER requires MPI functionality #endif -#if (defined(LTC_MDSA) || defined(LTC_MRSA)) && !defined(LTC_DER) +#if (defined(MDSA) || defined(MRSA) || defined(MECC) || defined(MKATJA)) && !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 @@ -779,10 +330,9 @@ #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); +#define LTC_MUTEX_INIT(x) pthread_mutex_init(x, NULL); +#define LTC_MUTEX_LOCK(x) pthread_mutex_lock(x); +#define LTC_MUTEX_UNLOCK(x) pthread_mutex_unlock(x); #else @@ -793,47 +343,13 @@ #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_ */ +#endif + + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_hash.h b/src/headers/tomcrypt_hash.h index 3f89f57c..9431de5d 100644 --- a/src/headers/tomcrypt_hash.h +++ b/src/headers/tomcrypt_hash.h @@ -1,32 +1,5 @@ -/* 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 +#ifdef SHA512 struct sha512_state { ulong64 length, state[8]; unsigned long curlen; @@ -34,7 +7,7 @@ struct sha512_state { }; #endif -#ifdef LTC_SHA256 +#ifdef SHA256 struct sha256_state { ulong64 length; ulong32 state[8], curlen; @@ -42,7 +15,7 @@ struct sha256_state { }; #endif -#ifdef LTC_SHA1 +#ifdef SHA1 struct sha1_state { ulong64 length; ulong32 state[5], curlen; @@ -50,7 +23,7 @@ struct sha1_state { }; #endif -#ifdef LTC_MD5 +#ifdef MD5 struct md5_state { ulong64 length; ulong32 state[4], curlen; @@ -58,7 +31,7 @@ struct md5_state { }; #endif -#ifdef LTC_MD4 +#ifdef MD4 struct md4_state { ulong64 length; ulong32 state[4], curlen; @@ -66,22 +39,22 @@ struct md4_state { }; #endif -#ifdef LTC_TIGER +#ifdef TIGER struct tiger_state { ulong64 state[3], length; - unsigned long curlen, passes; - unsigned char buf[64], pad; + unsigned long curlen; + unsigned char buf[64]; }; #endif -#ifdef LTC_MD2 +#ifdef MD2 struct md2_state { unsigned char chksum[16], X[48], buf[16]; unsigned long curlen; }; #endif -#ifdef LTC_RIPEMD128 +#ifdef RIPEMD128 struct rmd128_state { ulong64 length; unsigned char buf[64]; @@ -89,7 +62,7 @@ struct rmd128_state { }; #endif -#ifdef LTC_RIPEMD160 +#ifdef RIPEMD160 struct rmd160_state { ulong64 length; unsigned char buf[64]; @@ -97,23 +70,7 @@ struct rmd160_state { }; #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 +#ifdef WHIRLPOOL struct whirlpool_state { ulong64 length, state[8]; unsigned char buf[64]; @@ -121,7 +78,7 @@ struct whirlpool_state { }; #endif -#ifdef LTC_CHC_HASH +#ifdef CHC_HASH struct chc_state { ulong64 length; unsigned char state[MAXBLOCKSIZE], buf[MAXBLOCKSIZE]; @@ -129,118 +86,47 @@ struct chc_state { }; #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 +#ifdef CHC_HASH struct chc_state chc; #endif -#ifdef LTC_WHIRLPOOL +#ifdef 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 +#ifdef SHA512 struct sha512_state sha512; #endif -#ifdef LTC_SHA256 +#ifdef SHA256 struct sha256_state sha256; #endif -#ifdef LTC_SHA1 - struct sha1_state sha1; +#ifdef SHA1 + struct sha1_state sha1; #endif -#ifdef LTC_MD5 +#ifdef MD5 struct md5_state md5; #endif -#ifdef LTC_MD4 +#ifdef MD4 struct md4_state md4; #endif -#ifdef LTC_MD2 +#ifdef MD2 struct md2_state md2; #endif -#ifdef LTC_TIGER +#ifdef TIGER struct tiger_state tiger; #endif -#ifdef LTC_RIPEMD128 +#ifdef RIPEMD128 struct rmd128_state rmd128; #endif -#ifdef LTC_RIPEMD160 +#ifdef 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; + char *name; /** internal ID */ unsigned char ID; /** Size of digest in octets */ @@ -257,7 +143,7 @@ extern struct ltc_hash_descriptor { @return CRYPT_OK if successful */ int (*init)(hash_state *hash); - /** Process a block of data + /** Process a block of data @param hash The hash state @param in The data to hash @param inlen The length of the data (octets) @@ -277,421 +163,177 @@ extern struct ltc_hash_descriptor { /* 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, + const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen); } hash_descriptor[]; -#ifdef LTC_CHC_HASH +#ifdef 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_done(hash_state * md, unsigned char *hash); int chc_test(void); extern const struct ltc_hash_descriptor chc_desc; #endif -#ifdef LTC_WHIRLPOOL +#ifdef 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_done(hash_state * md, unsigned char *hash); 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 +#ifdef 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_done(hash_state * md, unsigned char *hash); int sha512_test(void); extern const struct ltc_hash_descriptor sha512_desc; +#endif -#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 +#ifdef SHA384 +#ifndef SHA512 + #error SHA512 is required for SHA384 #endif int sha384_init(hash_state * md); #define sha384_process sha512_process -int sha384_done(hash_state * md, unsigned char *out); +int sha384_done(hash_state * md, unsigned char *hash); 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 +#ifdef 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_done(hash_state * md, unsigned char *hash); 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 +#ifdef SHA224 +#ifndef SHA256 + #error SHA256 is required for SHA224 #endif int sha224_init(hash_state * md); #define sha224_process sha256_process -int sha224_done(hash_state * md, unsigned char *out); +int sha224_done(hash_state * md, unsigned char *hash); int sha224_test(void); extern const struct ltc_hash_descriptor sha224_desc; +#endif +#endif -#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 +#ifdef 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_done(hash_state * md, unsigned char *hash); 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 +#ifdef 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_done(hash_state * md, unsigned char *hash); int md5_test(void); extern const struct ltc_hash_descriptor md5_desc; #endif -#ifdef LTC_MD4 +#ifdef 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_done(hash_state * md, unsigned char *hash); int md4_test(void); extern const struct ltc_hash_descriptor md4_desc; #endif -#ifdef LTC_MD2 +#ifdef 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_done(hash_state * md, unsigned char *hash); int md2_test(void); extern const struct ltc_hash_descriptor md2_desc; #endif -#ifdef LTC_TIGER +#ifdef 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_done(hash_state * md, unsigned char *hash); 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; +extern const struct ltc_hash_descriptor tiger_desc; #endif -#ifdef LTC_RIPEMD128 +#ifdef 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_done(hash_state * md, unsigned char *hash); int rmd128_test(void); extern const struct ltc_hash_descriptor rmd128_desc; #endif -#ifdef LTC_RIPEMD160 +#ifdef 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_done(hash_state * md, unsigned char *hash); 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, +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 + const unsigned char *in, unsigned long inlen, ...); 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 + +/* 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; \ + } \ + while (inlen > 0) { \ + if (md-> state_var .curlen == 0 && inlen >= block_size) { \ + if ((err = compress_name (md, (unsigned char *)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)); \ + memcpy(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; \ +} + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_mac.h b/src/headers/tomcrypt_mac.h index fe907615..98b72b4a 100644 --- a/src/headers/tomcrypt_mac.h +++ b/src/headers/tomcrypt_mac.h @@ -1,62 +1,59 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#ifdef LTC_HMAC +#ifdef HMAC typedef struct Hmac_state { hash_state md; int hash; - unsigned char key[MAXBLOCKSIZE]; + 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 *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, +int hmac_memory(int hash, const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, + const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen); -int hmac_memory_multi(int hash, +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; + const unsigned char *in, unsigned long inlen, ...); int hmac_file(int hash, const char *fname, const unsigned char *key, - unsigned long keylen, - unsigned char *out, unsigned long *outlen); + unsigned long keylen, + unsigned char *dst, unsigned long *dstlen); #endif -#ifdef LTC_OMAC +#ifdef OMAC typedef struct { - int buflen, + int cipher_idx, + buflen, blklen; unsigned char block[MAXBLOCKSIZE], prev[MAXBLOCKSIZE], Lu[2][MAXBLOCKSIZE]; - symmetric_ECB key; + 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 *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, +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, +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 *in, unsigned long inlen, ...); +int omac_file(int cipher, const unsigned char *key, unsigned long keylen, - const char *filename, + const char *filename, unsigned char *out, unsigned long *outlen); int omac_test(void); -#endif /* LTC_OMAC */ +#endif /* OMAC */ -#ifdef LTC_PMAC +#ifdef PMAC typedef struct { unsigned char Ls[32][MAXBLOCKSIZE], /* L shifted by i bits to the left */ @@ -65,9 +62,10 @@ typedef struct { block[MAXBLOCKSIZE], /* currently accumulated block */ checksum[MAXBLOCKSIZE]; /* current checksum */ - symmetric_ECB key; /* scheduled key for cipher */ + symmetric_key key; /* scheduled key for cipher */ unsigned long block_index; /* index # for current block */ - int block_len, /* length of block */ + int cipher_idx, /* cipher idx */ + block_len, /* length of block */ buflen; /* number of bytes in the buffer */ } pmac_state; @@ -75,20 +73,19 @@ int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned l 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, +int pmac_memory(int cipher, const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, + const unsigned char *msg, unsigned long msglen, unsigned char *out, unsigned long *outlen); -int pmac_memory_multi(int cipher, +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; + const unsigned char *in, unsigned long inlen, ...); -int pmac_file(int cipher, +int pmac_file(int cipher, const unsigned char *key, unsigned long keylen, - const char *filename, + const char *filename, unsigned char *out, unsigned long *outlen); int pmac_test(void); @@ -99,191 +96,10 @@ 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; +#ifdef EAX_MODE -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 +#if !(defined(OMAC) && defined(CTR)) + #error EAX_MODE requires OMAC and CTR #endif typedef struct { @@ -315,115 +131,76 @@ int eax_decrypt_verify_memory(int cipher, const unsigned char *header, unsigned long headerlen, const unsigned char *ct, unsigned long ctlen, unsigned char *pt, - const unsigned char *tag, unsigned long taglen, + unsigned char *tag, unsigned long taglen, int *stat); int eax_test(void); #endif /* EAX MODE */ -#ifdef LTC_OCB3_MODE +#ifdef OCB_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 */ + 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 */ - /* 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 */ + symmetric_key key; /* scheduled key for cipher */ + unsigned long block_index; /* index # for current block */ + int cipher, /* cipher idx */ block_len; /* length of block */ -} ocb3_state; +} ocb_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 ocb_init(ocb_state *ocb, int cipher, + const unsigned char *key, unsigned long keylen, const unsigned char *nonce); -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 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 ocb3_encrypt_authenticate_memory(int cipher, +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 *stat); + +int ocb_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 *nonce, const unsigned char *pt, unsigned long ptlen, unsigned char *ct, unsigned char *tag, unsigned long *taglen); -int ocb3_decrypt_verify_memory(int cipher, +int ocb_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 *nonce, const unsigned char *ct, unsigned long ctlen, unsigned char *pt, const unsigned char *tag, unsigned long taglen, int *stat); -int ocb3_test(void); +int ocb_test(void); -#endif /* LTC_OCB3_MODE */ +/* internal functions */ +void ocb_shift_xor(ocb_state *ocb, unsigned char *Z); +int ocb_ntz(unsigned long x); +int s_ocb_done(ocb_state *ocb, const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, unsigned char *tag, unsigned long *taglen, int mode); -#ifdef LTC_CCM_MODE +#endif /* OCB_MODE */ -#define CCM_ENCRYPT LTC_ENCRYPT -#define CCM_DECRYPT LTC_DECRYPT +#ifdef CCM_MODE -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); +#define CCM_ENCRYPT 0 +#define CCM_DECRYPT 1 int ccm_memory(int cipher, const unsigned char *key, unsigned long keylen, - symmetric_ECB *uskey, + symmetric_key *uskey, const unsigned char *nonce, unsigned long noncelen, const unsigned char *header, unsigned long headerlen, unsigned char *pt, unsigned long ptlen, @@ -433,55 +210,57 @@ int ccm_memory(int cipher, int ccm_test(void); -#endif /* LTC_CCM_MODE */ +#endif /* CCM_MODE */ -#if defined(LTC_LRW_MODE) || defined(LTC_GCM_MODE) || defined(LTC_GCM_SIV_MODE) +#if defined(LRW_MODE) || defined(GCM_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)) +#if defined(GCM_TABLES) || defined(LRW_TABLES) || ((defined(GCM_MODE) || defined(GCM_MODE)) && defined(LTC_FAST)) extern const unsigned char gcm_shift_table[]; #endif -#ifdef LTC_GCM_MODE +#ifdef GCM_MODE -#define GCM_ENCRYPT LTC_ENCRYPT -#define GCM_DECRYPT LTC_DECRYPT +#define GCM_ENCRYPT 0 +#define GCM_DECRYPT 1 -#define LTC_GCM_MODE_IV 0 -#define LTC_GCM_MODE_AAD 1 -#define LTC_GCM_MODE_TEXT 2 +#define GCM_MODE_IV 0 +#define GCM_MODE_AAD 1 +#define GCM_MODE_TEXT 2 -typedef struct { - symmetric_ECB K; +typedef struct { + symmetric_key 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? */ + int cipher, /* which cipher */ + 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 */ + +#ifdef GCM_TABLES + unsigned char PC[16][256][16]; /* 16 tables of 8x128 */ +#endif + } gcm_state; -void gcm_mult_h(const gcm_state *gcm, unsigned char *I); +void gcm_mult_h(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, +int gcm_add_iv(gcm_state *gcm, const unsigned char *IV, unsigned long IVlen); int gcm_add_aad(gcm_state *gcm, @@ -492,7 +271,7 @@ int gcm_process(gcm_state *gcm, unsigned char *ct, int direction); -int gcm_done(gcm_state *gcm, +int gcm_done(gcm_state *gcm, unsigned char *tag, unsigned long *taglen); int gcm_memory( int cipher, @@ -500,77 +279,33 @@ int gcm_memory( int cipher, 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 *ct, unsigned char *tag, unsigned long *taglen, int direction); int gcm_test(void); -#endif /* LTC_GCM_MODE */ +#endif /* GCM_MODE */ -#ifdef LTC_CHACHA20POLY1305_MODE +#ifdef PELICAN -typedef struct { - poly1305_state poly; - chacha_state chacha; - ulong64 aadlen; - ulong64 ctlen; - int aadflg, openssh_compat; -} chacha20poly1305_state; +typedef struct pelican_state +{ + symmetric_key K; + unsigned char state[16]; + int buflen; +} pelican_state; -#define CHACHA20POLY1305_ENCRYPT LTC_ENCRYPT -#define CHACHA20POLY1305_DECRYPT LTC_DECRYPT -#define CHACHA20POLY1305_OPENSSH_COMPAT 2 +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 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); +int pelican_memory(const unsigned char *key, unsigned long keylen, + const unsigned char *in, unsigned long inlen, + unsigned char *out); #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 +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_macros.h b/src/headers/tomcrypt_macros.h index 16e37054..02c01879 100644 --- a/src/headers/tomcrypt_macros.h +++ b/src/headers/tomcrypt_macros.h @@ -1,235 +1,228 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ +/* 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 - -#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__) +/* this is the "32-bit at least" data type + * Re-define it to suit your platform but it must be at least 32-bits + */ +#if defined(__x86_64__) || (defined(__sparc__) && defined(__arch64__)) + typedef unsigned ulong32; +#else + typedef unsigned long ulong32; +#endif /* ---- 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) + { (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) \ - do { x = ((ulong32)((y)[3] & 255)<<24) | \ - ((ulong32)((y)[2] & 255)<<16) | \ - ((ulong32)((y)[1] & 255)<<8) | \ - ((ulong32)((y)[0] & 255)); } while(0) + { 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) \ - do { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \ + { (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) + (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } #define LOAD64L(x, y) \ - do { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48)| \ + { 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) + (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } #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) + { (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) \ - do { x = ((ulong32)((y)[0] & 255)<<24) | \ - ((ulong32)((y)[1] & 255)<<16) | \ - ((ulong32)((y)[2] & 255)<<8) | \ - ((ulong32)((y)[3] & 255)); } while(0) + { 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) \ -do { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \ + { (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) + (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } #define LOAD64H(x, y) \ -do { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48) | \ + { 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) + (((ulong64)((y)[6] & 255))<<8)|(((ulong64)((y)[7] & 255))); } +#endif /* ENDIAN_NEUTRAL */ -#elif defined(ENDIAN_LITTLE) +#ifdef 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__)))) +#if !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 ( \ +asm __volatile__ ( \ "bswapl %0 \n\t" \ - "movl %0,(%1)\n\t" \ + "movl %0,(%2)\n\t" \ "bswapl %0 \n\t" \ - ::"r"(x), "r"(y): "memory"); + :"=r"(x):"0"(x), "r"(y)); #define LOAD32H(x, y) \ -__asm__ volatile ( \ - "movl (%1),%0\n\t" \ +asm __volatile__ ( \ + "movl (%2),%0\n\t" \ "bswapl %0\n\t" \ - :"=r"(x): "r"(y): "memory"); + :"=r"(x): "0"(x), "r"(y)); #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) + { (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) \ - do { x = ((ulong32)((y)[0] & 255)<<24) | \ - ((ulong32)((y)[1] & 255)<<16) | \ - ((ulong32)((y)[2] & 255)<<8) | \ - ((ulong32)((y)[3] & 255)); } while(0) + { x = ((unsigned long)((y)[0] & 255)<<24) | \ + ((unsigned long)((y)[1] & 255)<<16) | \ + ((unsigned long)((y)[2] & 255)<<8) | \ + ((unsigned long)((y)[3] & 255)); } #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__)) +#if !defined(LTC_NO_BSWAP) && (defined(__GNUC__) && defined(__x86_64__)) #define STORE64H(x, y) \ -__asm__ volatile ( \ +asm __volatile__ ( \ "bswapq %0 \n\t" \ - "movq %0,(%1)\n\t" \ + "movq %0,(%2)\n\t" \ "bswapq %0 \n\t" \ - ::"r"(x), "r"(y): "memory"); + :"=r"(x):"0"(x), "r"(y):"0"); #define LOAD64H(x, y) \ -__asm__ volatile ( \ - "movq (%1),%0\n\t" \ +asm __volatile__ ( \ + "movq (%2),%0\n\t" \ "bswapq %0\n\t" \ - :"=r"(x): "r"(y): "memory"); + :"=r"(x): "0"(x), "r"(y)); #else #define STORE64H(x, y) \ -do { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \ + { (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) + (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } #define LOAD64H(x, y) \ -do { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48) | \ + { 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) + (((ulong64)((y)[6] & 255))<<8)|(((ulong64)((y)[7] & 255))); } #endif -#ifdef ENDIAN_32BITWORD +#ifdef ENDIAN_32BITWORD #define STORE32L(x, y) \ - do { ulong32 LTC_TMPVAR(ttt) = (x); XMEMCPY(y, <C_TMPVAR(ttt), 4); } while(0) + { ulong32 __t = (x); memcpy(y, &__t, 4); } #define LOAD32L(x, y) \ - do { XMEMCPY(&(x), y, 4); } while(0) + memcpy(&(x), y, 4); #define STORE64L(x, y) \ - do { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \ + { (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) + (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } #define LOAD64L(x, y) \ - do { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48)| \ + { 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) + (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } #else /* 64-bit words then */ #define STORE32L(x, y) \ - do { ulong32 LTC_TMPVAR(ttt) = (x); XMEMCPY(y, <C_TMPVAR(ttt), 4); } while(0) + { ulong32 __t = (x); memcpy(y, &__t, 4); } #define LOAD32L(x, y) \ - do { XMEMCPY(&(x), y, 4); x &= 0xFFFFFFFF; } while(0) + { memcpy(&(x), y, 4); x &= 0xFFFFFFFF; } #define STORE64L(x, y) \ - do { ulong64 LTC_TMPVAR(ttt) = (x); XMEMCPY(y, <C_TMPVAR(ttt), 8); } while(0) + { ulong64 __t = (x); memcpy(y, &__t, 8); } #define LOAD64L(x, y) \ - do { XMEMCPY(&(x), y, 8); } while(0) + { memcpy(&(x), y, 8); } #endif /* ENDIAN_64BITWORD */ -#elif defined(ENDIAN_BIG) +#endif /* ENDIAN_LITTLE */ +#ifdef 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) + { (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) \ - do { x = ((ulong32)((y)[3] & 255)<<24) | \ - ((ulong32)((y)[2] & 255)<<16) | \ - ((ulong32)((y)[1] & 255)<<8) | \ - ((ulong32)((y)[0] & 255)); } while(0) + { 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) \ -do { (y)[7] = (unsigned char)(((x)>>56)&255); (y)[6] = (unsigned char)(((x)>>48)&255); \ + { (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) + (y)[1] = (unsigned char)(((x)>>8)&255); (y)[0] = (unsigned char)((x)&255); } #define LOAD64L(x, y) \ -do { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48) | \ + { 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) + (((ulong64)((y)[1] & 255))<<8)|(((ulong64)((y)[0] & 255))); } -#ifdef ENDIAN_32BITWORD +#ifdef ENDIAN_32BITWORD #define STORE32H(x, y) \ - do { ulong32 LTC_TMPVAR(ttt) = (x); XMEMCPY(y, <C_TMPVAR(ttt), 4); } while(0) + { ulong32 __t = (x); memcpy(y, &__t, 4); } #define LOAD32H(x, y) \ - do { XMEMCPY(&(x), y, 4); } while(0) + memcpy(&(x), y, 4); #define STORE64H(x, y) \ - do { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \ + { (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) + (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } #define LOAD64H(x, y) \ - do { x = (((ulong64)((y)[0] & 255))<<56)|(((ulong64)((y)[1] & 255))<<48)| \ + { 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) + (((ulong64)((y)[6] & 255))<<8)| (((ulong64)((y)[7] & 255))); } #else /* 64-bit words then */ #define STORE32H(x, y) \ - do { ulong32 LTC_TMPVAR(ttt) = (x); XMEMCPY(y, <C_TMPVAR(ttt), 4); } while(0) + { ulong32 __t = (x); memcpy(y, &__t, 4); } #define LOAD32H(x, y) \ - do { XMEMCPY(&(x), y, 4); x &= 0xFFFFFFFF; } while(0) + { memcpy(&(x), y, 4); x &= 0xFFFFFFFF; } #define STORE64H(x, y) \ - do { ulong64 LTC_TMPVAR(ttt) = (x); XMEMCPY(y, <C_TMPVAR(ttt), 8); } while(0) + { ulong64 __t = (x); memcpy(y, &__t, 8); } #define LOAD64H(x, y) \ - do { XMEMCPY(&(x), y, 8); } while(0) + { memcpy(&(x), y, 8); } #endif /* ENDIAN_64BITWORD */ #endif /* ENDIAN_BIG */ @@ -240,38 +233,28 @@ do { x = (((ulong64)((y)[7] & 255))<<56)|(((ulong64)((y)[6] & 255))<<48) | \ /* 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) +#pragma intrinsic(_lrotr,_lrotl) +#define ROR(x,n) _lrotr(x,n) +#define ROL(x,n) _lrotl(x,n) +#define RORc(x,n) _lrotr(x,n) +#define ROLc(x,n) _lrotl(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) +static inline unsigned ROL(unsigned word, int i) { - __asm__ ("roll %%cl,%0" + asm ("roll %%cl,%0" :"=r" (word) :"0" (word),"c" (i)); return word; } -static inline ulong32 ROR(ulong32 word, int i) +static inline unsigned ROR(unsigned word, int i) { - __asm__ ("rorl %%cl,%0" + asm ("rorl %%cl,%0" :"=r" (word) :"0" (word),"c" (i)); return word; @@ -279,22 +262,21 @@ static inline ulong32 ROR(ulong32 word, int i) #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); \ - }) +static inline unsigned ROLc(unsigned word, const int i) +{ + asm ("roll %2,%0" + :"=r" (word) + :"0" (word),"I" (i)); + return word; +} + +static inline unsigned RORc(unsigned word, const int i) +{ + asm ("rorl %2,%0" + :"=r" (word) + :"0" (word),"I" (i)); + return word; +} #else @@ -304,19 +286,18 @@ static inline ulong32 ROR(ulong32 word, int i) #endif #elif !defined(__STRICT_ANSI__) && defined(LTC_PPC32) -#define LTC_ROx_ASM -static inline ulong32 ROL(ulong32 word, int i) +static inline unsigned ROL(unsigned word, int i) { - __asm__ ("rotlw %0,%0,%2" + asm ("rotlw %0,%0,%2" :"=r" (word) :"0" (word),"r" (i)); return word; } -static inline ulong32 ROR(ulong32 word, int i) +static inline unsigned ROR(unsigned word, int i) { - __asm__ ("rotlw %0,%0,%2" + asm ("rotlw %0,%0,%2" :"=r" (word) :"0" (word),"r" (32-i)); return word; @@ -324,17 +305,17 @@ static inline ulong32 ROR(ulong32 word, int i) #ifndef LTC_NO_ROLC -static inline ulong32 ROLc(ulong32 word, const int i) +static inline unsigned ROLc(unsigned word, const int i) { - __asm__ ("rotlwi %0,%0,%2" + asm ("rotlwi %0,%0,%2" :"=r" (word) :"0" (word),"I" (i)); return word; } -static inline ulong32 RORc(ulong32 word, const int i) +static inline unsigned RORc(unsigned word, const int i) { - __asm__ ("rotrwi %0,%0,%2" + asm ("rotrwi %0,%0,%2" :"=r" (word) :"0" (word),"I" (i)); return word; @@ -351,45 +332,28 @@ static inline ulong32 RORc(ulong32 word, const int i) #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) +#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) +#define ROLc(x, y) ( (((unsigned long)(x)<<(unsigned long)((y)&31)) | (((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL) +#define RORc(x, y) ( ((((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)((y)&31)) | ((unsigned long)(x)<<(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL) #endif /* 64-bit Rotates */ -#if defined(_MSC_VER) +#if !defined(__STRICT_ANSI__) && defined(__GNUC__) && defined(__x86_64__) && !defined(LTC_NO_ASM) -/* 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) +static inline unsigned long ROL64(unsigned long word, int i) { - __asm__("rolq %%cl,%0" + asm("rolq %%cl,%0" :"=r" (word) :"0" (word),"c" (i)); return word; } -static inline ulong64 ROR64(ulong64 word, int i) +static inline unsigned long ROR64(unsigned long word, int i) { - __asm__("rorq %%cl,%0" + asm("rorq %%cl,%0" :"=r" (word) :"0" (word),"c" (i)); return word; @@ -397,22 +361,21 @@ static inline ulong64 ROR64(ulong64 word, int i) #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); \ - }) +static inline unsigned long ROL64c(unsigned long word, const int i) +{ + asm("rolq %2,%0" + :"=r" (word) + :"0" (word),"J" (i)); + return word; +} + +static inline unsigned long ROR64c(unsigned long word, const int i) +{ + asm("rorq %2,%0" + :"=r" (word) + :"0" (word),"J" (i)); + return word; +} #else /* LTC_NO_ROLC */ @@ -425,19 +388,19 @@ static inline ulong64 ROR64(ulong64 word, int i) #define ROL64(x, y) \ ( (((x)<<((ulong64)(y)&63)) | \ - (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>(((ulong64)64-((y)&63))&63))) & CONST64(0xFFFFFFFFFFFFFFFF)) + (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)64-((y)&63)))) & CONST64(0xFFFFFFFFFFFFFFFF)) #define ROR64(x, y) \ ( ((((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)(y)&CONST64(63))) | \ - ((x)<<(((ulong64)64-((y)&63))&63))) & CONST64(0xFFFFFFFFFFFFFFFF)) + ((x)<<((ulong64)(64-((y)&CONST64(63)))))) & CONST64(0xFFFFFFFFFFFFFFFF)) #define ROL64c(x, y) \ ( (((x)<<((ulong64)(y)&63)) | \ - (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>(((ulong64)64-((y)&63))&63))) & CONST64(0xFFFFFFFFFFFFFFFF)) + (((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)64-((y)&63)))) & CONST64(0xFFFFFFFFFFFFFFFF)) #define ROR64c(x, y) \ ( ((((x)&CONST64(0xFFFFFFFFFFFFFFFF))>>((ulong64)(y)&CONST64(63))) | \ - ((x)<<(((ulong64)64-((y)&63))&63))) & CONST64(0xFFFFFFFFFFFFFFFF)) + ((x)<<((ulong64)(64-((y)&CONST64(63)))))) & CONST64(0xFFFFFFFFFFFFFFFF)) #endif @@ -449,16 +412,13 @@ static inline ulong64 ROR64(ulong64 word, int i) #define MIN(x, y) ( ((x)<(y))?(x):(y) ) #endif -#ifndef LTC_UNUSED_PARAM - #define LTC_UNUSED_PARAM(x) (void)(x) -#endif +/* 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 -/* 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 +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_math.h b/src/headers/tomcrypt_math.h index 3ce45acf..a3534dfc 100644 --- a/src/headers/tomcrypt_math.h +++ b/src/headers/tomcrypt_math.h @@ -1,6 +1,3 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - /** math functions **/ #define LTC_MP_LT -1 @@ -10,27 +7,18 @@ #define LTC_MP_NO 0 #define LTC_MP_YES 1 -#ifndef LTC_MECC +#ifndef MECC typedef void ecc_point; #endif -#ifndef LTC_MRSA +#ifndef 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; + char *name; /** Bits per digit, amount of bits must fit in an unsigned long */ int bits_per_digit; @@ -42,15 +30,15 @@ typedef struct { @return CRYPT_OK on success */ int (*init)(void **a); - - /** init copy + + /** 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); + int (*init_copy)(void **dst, void *src); - /** deinit + /** deinit @param a The number to free @return CRYPT_OK on success */ @@ -63,73 +51,68 @@ typedef struct { @param dst The destination @return CRYPT_OK on success */ - int (*neg)(const void *src, void *dst); - - /** copy + int (*neg)(void *src, void *dst); + + /** copy @param src The number to copy from - @param dst The number to write to + @param dst The number to write to @return CRYPT_OK on success */ - int (*copy)(const void *src, void *dst); + int (*copy)(void *src, void *dst); /* ---- trivial low level functions ---- */ - /** set small constant + /** 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 + @param n Source upto bits_per_digit (actually meant for very small constants) + @return CRYPT_OK on succcess */ - int (*set_int)(void *a, ltc_mp_digit n); + int (*set_int)(void *a, unsigned long 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) + /** get small constant + @param a Number to read, only fetches upto bits_per_digit from the number + @return The lower bits_per_digit of the integer (unsigned) */ - unsigned long (*get_int)(const void *a); + unsigned long (*get_int)(void *a); - /** get digit n + /** 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); + unsigned long (*get_digit)(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); + int (*get_digit_count)(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) + @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); + int (*compare)(void *a, void *b); - /** compare against int + /** 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) + @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); + int (*compare_d)(void *a, unsigned long 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); + int (*count_bits)(void * a); - /** Count the number of LSB bits which are zero + /** 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); + int (*count_lsb_bits)(void *a); /** Compute a power of two @param a The integer to store the power in @@ -139,8 +122,8 @@ typedef struct { int (*twoexpt)(void *a , int n); /* ---- radix conversions ---- */ - - /** read ascii string + + /** 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) @@ -154,99 +137,86 @@ typedef struct { @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); + int (*write_radix)(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 + /** 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 */ - unsigned long (*unsigned_size)(const void *a); + unsigned long (*unsigned_size)(void *a); - /** store an integer as an array of octets + /** 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); + int (*unsigned_write)(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 + @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); + int (*unsigned_read)(void *dst, unsigned char *src, unsigned long len); /* ---- basic math ---- */ - /** add two integers + /** 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); + int (*add)(void *a, void *b, void *c); - /** add two integers + + /** 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 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); + int (*addi)(void *a, unsigned long b, void *c); - /** subtract two integers + /** 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); + int (*sub)(void *a, void *b, void *c); - /** subtract two integers + /** 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 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); + int (*subi)(void *a, unsigned long b, void *c); - /** multiply two integers + /** 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 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); + int (*mul)(void *a, void *b, void *c); - /** multiply two integers + /** 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 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); + int (*muli)(void *a, unsigned long 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); + int (*sqr)(void *a, void *b); /** Divide an integer @param a The dividend @@ -255,14 +225,14 @@ typedef struct { @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); + int (*mpdiv)(void *a, void *b, void *c, void *d); - /** divide by two + /** divide by two @param a The integer to divide (shift right) - @param b The destination + @param b The destination @return CRYPT_OK on success */ - int (*div_2)(const void *a, void *b); + int (*div_2)(void *a, void *b); /** Get remainder (small value) @param a The integer to reduce @@ -270,32 +240,32 @@ typedef struct { @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); + int (*modi)(void *a, unsigned long b, unsigned long *c); - /** gcd + /** 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); + int (*gcd)(void *a, void *b, void *c); - /** lcm + /** 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); + int (*lcm)(void *a, void *b, void *c); /** Modular multiplication @param a The first source - @param b The second 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); + int (*mulmod)(void *a, void *b, void *c, void *d); /** Modular squaring @param a The first source @@ -303,31 +273,31 @@ typedef struct { @param c The destination (a*a mod b) @return CRYPT_OK on success */ - int (*sqrmod)(const void *a, const void *b, void *c); + int (*sqrmod)(void *a, void *b, void *c); /** Modular inversion @param a The value to invert - @param b The modulus + @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); + int (*invmod)(void *, void *, void *); /* ---- reduction ---- */ - /** setup Montgomery - @param a The modulus - @param b The destination for the reduction digit + /** 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); + int (*montgomery_setup)(void *a, void **b); - /** get normalization value + /** 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); + int (*montgomery_normalization)(void *a, void *b); /** reduce a number @param a The number [and dest] to reduce @@ -335,12 +305,12 @@ typedef struct { @param c The value "b" from montgomery_setup() @return CRYPT_OK on success */ - int (*montgomery_reduce)(void *a, const void *b, void *c); + int (*montgomery_reduce)(void *a, 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 ---- */ @@ -352,159 +322,87 @@ typedef struct { @param d The destination @return CRYPT_OK on success */ - int (*exptmod)(const void *a, const void *b, const void *c, void *d); + int (*exptmod)(void *a, void *b, 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) + @param b The destination of the result (FP_YES if prime) @return CRYPT_OK on success */ - int (*isprime)(const void *a, int b, int *c); + int (*isprime)(void *a, int *b); /* ---- (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 R The destination for kG @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) + @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); + int (*ecc_ptmul)(void *k, ecc_point *G, ecc_point *R, void *modulus, int map); - /** ECC GF(p) point addition + /** 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); + int (*ecc_ptadd)(ecc_point *P, ecc_point *Q, ecc_point *R, void *modulus, void *mp); - /** ECC GF(p) point double + /** 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); + int (*ecc_ptdbl)(ecc_point *P, ecc_point *R, void *modulus, void *mp); - /** ECC mapping from projective to affine, - currently uses (x,y,z) => (x/z^2, y/z^3, 1) + /** 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. + @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); + int (*ecc_map)(ecc_point *P, void *modulus, void *mp); /* ---- (optional) rsa optimized math (for internal CRT) ---- */ - /** RSA Key Generation + /** 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 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_keygen)(prng_state *prng, - int wprng, - int size, - long e, - rsa_key *key); + 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 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 + @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); + rsa_key *key); } 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; +int ltc_init_multi(void **a, ...); +void ltc_deinit_multi(void *a, ...); #ifdef LTM_DESC extern const ltc_math_descriptor ltm_desc; @@ -517,3 +415,72 @@ extern const ltc_math_descriptor tfm_desc; #ifdef GMP_DESC extern const ltc_math_descriptor gmp_desc; #endif + +#if !defined(DESC_DEF_ONLY) && defined(LTC_SOURCE) + +#define MP_DIGIT_BIT ltc_mp.bits_per_digit + +/* some handy macros */ +#define mp_init(a) ltc_mp.init(a) +#define mp_init_multi ltc_init_multi +#define mp_clear(a) ltc_mp.deinit(a) +#define mp_clear_multi ltc_deinit_multi +#define mp_init_copy(a, b) ltc_mp.init_copy(a, b) + +#define mp_neg(a, b) ltc_mp.neg(a, b) +#define mp_copy(a, b) ltc_mp.copy(a, b) + +#define mp_set(a, b) ltc_mp.set_int(a, b) +#define mp_set_int(a, b) ltc_mp.set_int(a, b) +#define mp_get_int(a) ltc_mp.get_int(a) +#define mp_get_digit(a, n) ltc_mp.get_digit(a, n) +#define mp_get_digit_count(a) ltc_mp.get_digit_count(a) +#define mp_cmp(a, b) ltc_mp.compare(a, b) +#define mp_cmp_d(a, b) ltc_mp.compare_d(a, b) +#define mp_count_bits(a) ltc_mp.count_bits(a) +#define mp_cnt_lsb(a) ltc_mp.count_lsb_bits(a) +#define mp_2expt(a, b) ltc_mp.twoexpt(a, b) + +#define mp_read_radix(a, b, c) ltc_mp.read_radix(a, b, c) +#define mp_toradix(a, b, c) ltc_mp.write_radix(a, b, c) +#define mp_unsigned_bin_size(a) ltc_mp.unsigned_size(a) +#define mp_to_unsigned_bin(a, b) ltc_mp.unsigned_write(a, b) +#define mp_read_unsigned_bin(a, b, c) ltc_mp.unsigned_read(a, b, c) + +#define mp_add(a, b, c) ltc_mp.add(a, b, c) +#define mp_add_d(a, b, c) ltc_mp.addi(a, b, c) +#define mp_sub(a, b, c) ltc_mp.sub(a, b, c) +#define mp_sub_d(a, b, c) ltc_mp.subi(a, b, c) +#define mp_mul(a, b, c) ltc_mp.mul(a, b, c) +#define mp_mul_d(a, b, c) ltc_mp.muli(a, b, c) +#define mp_sqr(a, b) ltc_mp.sqr(a, b) +#define mp_div(a, b, c, d) ltc_mp.mpdiv(a, b, c, d) +#define mp_div_2(a, b) ltc_mp.div_2(a, b) +#define mp_mod(a, b, c) ltc_mp.mpdiv(a, b, NULL, c) +#define mp_mod_d(a, b, c) ltc_mp.modi(a, b, c) +#define mp_gcd(a, b, c) ltc_mp.gcd(a, b, c) +#define mp_lcm(a, b, c) ltc_mp.lcm(a, b, c) + +#define mp_mulmod(a, b, c, d) ltc_mp.mulmod(a, b, c, d) +#define mp_sqrmod(a, b, c) ltc_mp.sqrmod(a, b, c) +#define mp_invmod(a, b, c) ltc_mp.invmod(a, b, c) + +#define mp_montgomery_setup(a, b) ltc_mp.montgomery_setup(a, b) +#define mp_montgomery_normalization(a, b) ltc_mp.montgomery_normalization(a, b) +#define mp_montgomery_reduce(a, b, c) ltc_mp.montgomery_reduce(a, b, c) +#define mp_montgomery_free(a) ltc_mp.montgomery_deinit(a) + +#define mp_exptmod(a,b,c,d) ltc_mp.exptmod(a,b,c,d) +#define mp_prime_is_prime(a, b, c) ltc_mp.isprime(a, c) + +#define mp_iszero(a) (mp_cmp_d(a, 0) == LTC_MP_EQ ? LTC_MP_YES : LTC_MP_NO) +#define mp_isodd(a) (mp_get_digit_count(a) > 0 ? (mp_get_digit(a, 0) & 1 ? LTC_MP_YES : LTC_MP_NO) : LTC_MP_NO) +#define mp_exch(a, b) do { void *ABC__tmp = a; a = b; b = ABC__tmp; } while(0); + +#define mp_tohex(a, b) mp_toradix(a, b, 16) + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_misc.h b/src/headers/tomcrypt_misc.h index be63f550..b2546e75 100644 --- a/src/headers/tomcrypt_misc.h +++ b/src/headers/tomcrypt_misc.h @@ -1,231 +1,20 @@ -/* 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, +/* ---- BASE64 Routines ---- */ +#ifdef BASE64 +int base64_encode(const unsigned char *in, unsigned long len, 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, + +int base64_decode(const unsigned char *in, unsigned long len, 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 zeromem(void *dst, size_t len); 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); +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_pk.h b/src/headers/tomcrypt_pk.h index b2d1e8bf..9803f83d 100644 --- a/src/headers/tomcrypt_pk.h +++ b/src/headers/tomcrypt_pk.h @@ -1,303 +1,135 @@ -/* 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 +enum { + PK_PUBLIC=0, + PK_PRIVATE=1 }; int rand_prime(void *N, long len, prng_state *prng, int wprng); /* ---- RSA ---- */ -#ifdef LTC_MRSA +#ifdef 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; +/* Min and Max RSA key sizes (in bits) */ +#define MIN_RSA_SIZE 1024 +#define MAX_RSA_SIZE 4096 -/** RSA key */ +/** RSA PKCS style key */ typedef struct Rsa_key { /** Type of key, PK_PRIVATE or PK_PUBLIC */ int type; /** The public exponent */ - void *e; + void *e; /** The private exponent */ - void *d; + void *d; /** The modulus */ - void *N; + void *N; /** The p factor of N */ - void *p; + void *p; /** The q factor of N */ - void *q; + void *q; /** The 1/q mod p CRT param */ - void *qP; + void *qP; /** The d mod (p - 1) CRT param */ - void *dP; + 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); + 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) +int rsa_encrypt_key(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, rsa_key *key); + +int rsa_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + const unsigned char *lparam, unsigned long lparamlen, + int hash_idx, int *stat, + rsa_key *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) +int rsa_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int prng_idx, + int hash_idx, unsigned long saltlen, + rsa_key *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); +int rsa_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int hash_idx, unsigned long saltlen, + int *stat, rsa_key *key); /* PKCS #1 import/export */ -int rsa_export(unsigned char *out, unsigned long *outlen, int type, const rsa_key *key); +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); - -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 +/* ---- Katja ---- */ +#ifdef MKAT -typedef struct { +/* Min and Max KAT key sizes (in bits) */ +#define MIN_KAT_SIZE 1024 +#define MAX_KAT_SIZE 4096 + +/** Katja PKCS style key */ +typedef struct KAT_key { + /** Type of key, PK_PRIVATE or PK_PUBLIC */ int type; - void *x; - void *y; - void *base; - void *prime; -} dh_key; + /** 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; + /** The pq param */ + void *pq; +} katja_key; -int dh_get_groupsize(const dh_key *key); +int katja_make_key(prng_state *prng, int wprng, int size, katja_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 katja_exptmod(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, int which, + katja_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); +void katja_free(katja_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 */ +/* These use PKCS #1 v2.0 padding */ +int katja_encrypt_key(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, katja_key *key); + +int katja_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + const unsigned char *lparam, unsigned long lparamlen, + int hash_idx, int *stat, + katja_key *key); +/* PKCS #1 import/export */ +int katja_export(unsigned char *out, unsigned long *outlen, int type, katja_key *key); +int katja_import(const unsigned char *in, unsigned long inlen, katja_key *key); + +#endif /* ---- ECC Routines ---- */ -#ifdef LTC_MECC +#ifdef MECC /* size of our temp buffers for exported keys */ #define ECC_BUF_SIZE 256 @@ -305,32 +137,29 @@ int dh_export_key(void *out, unsigned long *outlen, int type, const dh_key *key) /* max private key size */ #define ECC_MAXSIZE 66 -/** Structure defines a GF(p) curve */ +/** Structure defines a NIST GF(p) curve */ typedef struct { - /** The prime that defines the field the curve is in (encoded in hex) */ - const char *prime; + /** The size of the curve in octets */ + int size; - /** The fields A param (hex) */ - const char *A; + /** name of curve */ + char *name; - /** The fields B param (hex) */ - const char *B; + /** The prime that defines the field the curve is in (encoded in base-64) */ + char *prime; - /** The order of the curve (hex) */ - const char *order; + /** The fields B param (base64) */ + char *B; - /** 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; + /** The order of the curve (base64) */ + char *order; + + /** The x co-ordinate of the base point on the curve (base64) */ + char *Gx; + + /** The y co-ordinate of the base point on the curve (base64) */ + char *Gy; +} ltc_ecc_set_type; /** 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 { @@ -344,382 +173,95 @@ typedef struct { 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; + /** Index into the ltc_ecc_sets[] for the parameters of this curve */ + int idx; - /** Structure with the public key */ + /** 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[]; +extern const ltc_ecc_set_type ltc_ecc_sets[]; +int ecc_test(void); 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_get_size(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_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_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, +int ecc_shared_secret(ecc_key *private_key, 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); + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, int hash, + 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 */ + unsigned char *out, unsigned long *outlen, + ecc_key *key); -#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) +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); -#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) +int ecc_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int *stat, ecc_key *key); -#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); +/* low level functions */ +ecc_point *ltc_ecc_new_point(void); +void ltc_ecc_del_point(ecc_point *p); +int ltc_ecc_is_valid_idx(int n); -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 */ +/* point ops (mp == montgomery digit) */ +#if !defined(MECC_ACCEL) || defined(LTM_DESC) || defined(GMP_DESC) +/* R = 2P */ +int ltc_ecc_projective_dbl_point(ecc_point *P, ecc_point *R, void *modulus, void *mp); -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); +/* R = P + Q */ +int ltc_ecc_projective_add_point(ecc_point *P, ecc_point *Q, ecc_point *R, void *modulus, void *mp); +#endif -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 */ +#if defined(MECC_FP) +int ltc_ecc_fp_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int map); +int ltc_ecc_fp_save_state(unsigned char **out, unsigned long *outlen); +int ltc_ecc_fp_restore_state(unsigned char *in, unsigned long inlen); +void ltc_ecc_fp_free(void); +#endif -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); +/* R = kG */ +int ltc_ecc_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int map); + +/* map P to affine from projective */ +int ltc_ecc_map(ecc_point *P, void *modulus, void *mp); #endif -#ifdef LTC_CURVE25519 +#ifdef MDSA -typedef struct { - /** The key type, PK_PRIVATE or PK_PUBLIC */ - enum public_key_type type; +/* Max diff between group and modulus size in bytes */ +#define MDSA_DELTA 512 - /** 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 +/* Max DSA group size in bytes (default allows 4k-bit groups) */ +#define MDSA_MAX_GROUP 512 /** DSA key structure */ typedef struct { /** The key type, PK_PRIVATE or PK_PUBLIC */ - int type; + int type; /** The order of the sub-group used in octets */ int qord; @@ -741,288 +283,129 @@ typedef struct { } 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); + prng_state *prng, int wprng, 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); + prng_state *prng, int wprng, 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); + const unsigned char *hash, unsigned long hashlen, + int *stat, 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_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int *stat, 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); - + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, int hash, + dsa_key *key); + int dsa_decrypt_key(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - const dsa_key *key); - + unsigned char *out, unsigned long *outlen, + 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_export(unsigned char *out, unsigned long *outlen, int type, dsa_key *key); +int dsa_verify_key(dsa_key *key, int *stat); + int dsa_shared_secret(void *private_key, void *base, - const dsa_key *public_key, + 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 */ +enum { 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; + LTC_ASN1_SETOF +}; /** A LTC ASN.1 list type */ typedef struct ltc_asn1_list_ { /** The LTC ASN.1 enumerated type identifier */ - ltc_asn1_type type; + int 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 */ + /** The used flag, this is used by the CHOICE ASN.1 type to indicate which choice was made */ 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; +#define LTC_SET_ASN1(list, index, Type, Data, Size) \ + do { \ + int LTC_MACRO_temp = (index); \ + ltc_asn1_list *LTC_MACRO_list = (list); \ + LTC_MACRO_list[LTC_MACRO_temp].type = (Type); \ + LTC_MACRO_list[LTC_MACRO_temp].data = (void*)(Data); \ + LTC_MACRO_list[LTC_MACRO_temp].size = (Size); \ + LTC_MACRO_list[LTC_MACRO_temp].used = 0; \ + } while (0); /* 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_encode_sequence_ex(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) int der_decode_sequence_ex(const unsigned char *in, unsigned long inlen, - ltc_asn1_list *list, unsigned long outlen, unsigned int flags); + ltc_asn1_list *list, unsigned long outlen, int ordered); + +#define der_decode_sequence(in, inlen, list, outlen) der_decode_sequence_ex(in, inlen, list, outlen, 1) -#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, +int der_length_sequence(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_decode_set(in, inlen, list, outlen) der_decode_sequence_ex(in, inlen, list, outlen, 0) #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); +int der_encode_set(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_encode_setof(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; +int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...); +int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...); /* 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_free_sequence_flexi(ltc_asn1_list *list); 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, +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); + 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); +int der_length_integer(void *num, unsigned long *len); /* INTEGER -- handy for 0..2^32-1 values */ int der_decode_short_integer(const unsigned char *in, unsigned long inlen, unsigned long *num); @@ -1034,10 +417,6 @@ 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 */ @@ -1048,11 +427,12 @@ int der_decode_octet_string(const unsigned char *in, unsigned long inlen, 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_encode_object_identifier(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); +int der_length_object_identifier(unsigned long *words, unsigned long nwords, unsigned long *outlen); +unsigned long der_object_identifier_bits(unsigned long x); /* IA5 STRING */ int der_encode_ia5_string(const unsigned char *in, unsigned long inlen, @@ -1061,39 +441,18 @@ 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); +int der_ia5_char_encode(int c); +int der_ia5_value_decode(int v); -/* PRINTABLE STRING */ +/* 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); - +int der_printable_char_encode(int c); +int der_printable_value_decode(int v); /* CHOICE */ int der_decode_choice(const unsigned char *in, unsigned long *inlen, @@ -1112,34 +471,17 @@ typedef struct { off_mm; /* timezone offset minutes */ } ltc_utctime; -int der_encode_utctime(const ltc_utctime *utctime, - unsigned char *out, unsigned long *outlen); +int der_encode_utctime(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); +int der_length_utctime(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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_pkcs.h b/src/headers/tomcrypt_pkcs.h index f3037f14..6ba60542 100644 --- a/src/headers/tomcrypt_pkcs.h +++ b/src/headers/tomcrypt_pkcs.h @@ -1,110 +1,58 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - /* PKCS Header Info */ /* ===> PKCS #1 -- RSA Cryptography <=== */ -#ifdef LTC_PKCS_1 +#ifdef 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, + 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, + 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 */ +#endif /* PKCS_1 */ /* ===> PKCS #5 -- Password Based Cryptography <=== */ -#ifdef LTC_PKCS_5 +#ifdef PKCS_5 -/* Algorithm #1 (PBKDF1) */ -int pkcs_5_alg1(const unsigned char *password, unsigned long password_len, - const unsigned char *salt, +/* 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 #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, +/* 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); -int pkcs_5_test (void); -#endif /* LTC_PKCS_5 */ +#endif /* PKCS_5 */ +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index b8fa5854..62f20299 100644 --- a/src/headers/tomcrypt_prng.h +++ b/src/headers/tomcrypt_prng.h @@ -1,80 +1,71 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - /* ---- PRNG Stuff ---- */ -#ifdef LTC_YARROW +#ifdef YARROW struct yarrow_prng { int cipher, hash; unsigned char pool[MAXBLOCKSIZE]; symmetric_CTR ctr; + LTC_MUTEX_TYPE(prng_lock) }; #endif -#ifdef LTC_RC4 +#ifdef RC4 struct rc4_prng { - rc4_state s; + int x, y; + unsigned char buf[256]; }; #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 +#ifdef FORTUNA struct fortuna_prng { - hash_state pool[LTC_FORTUNA_POOLS]; /* the pools */ + hash_state pool[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 */ + pool0_len, /* length of 0'th pool */ + wd; + + ulong64 reset_cnt; /* number of times we have reset */ + LTC_MUTEX_TYPE(prng_lock) }; #endif -#ifdef LTC_SOBER128 +#ifdef SOBER128 struct sober128_prng { - sober128_state s; /* sober128 state */ - unsigned char ent[40]; /* entropy buffer */ - unsigned long idx; /* entropy counter */ + 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 */ + flag, /* first add_entropy call or not? */ + set; /* did we call add_entropy to set key? */ + }; #endif -typedef struct { - union { - char dummy[1]; -#ifdef LTC_YARROW - struct yarrow_prng yarrow; +typedef union Prng_state { +#ifdef YARROW + struct yarrow_prng yarrow; #endif -#ifdef LTC_RC4 - struct rc4_prng rc4; +#ifdef RC4 + struct rc4_prng rc4; #endif -#ifdef LTC_CHACHA20_PRNG - struct chacha20_prng chacha; +#ifdef FORTUNA + struct fortuna_prng fortuna; #endif -#ifdef LTC_FORTUNA - struct fortuna_prng fortuna; +#ifdef SOBER128 + struct sober128_prng sober128; #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; + char *name; /** size in bytes of exported state */ int export_size; /** Start a PRNG state @@ -106,7 +97,7 @@ extern struct ltc_prng_descriptor { @return CRYPT_OK if successful */ int (*done)(prng_state *prng); - /** Export a PRNG state + /** 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 @@ -126,7 +117,7 @@ extern struct ltc_prng_descriptor { int (*test)(void); } prng_descriptor[]; -#ifdef LTC_YARROW +#ifdef 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); @@ -138,21 +129,19 @@ int yarrow_test(void); extern const struct ltc_prng_descriptor yarrow_desc; #endif -#ifdef LTC_FORTUNA +#ifdef 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); +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_test(void); extern const struct ltc_prng_descriptor fortuna_desc; #endif -#ifdef LTC_RC4 +#ifdef 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); @@ -164,19 +153,7 @@ 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 +#ifdef 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); @@ -188,7 +165,7 @@ int sprng_test(void); extern const struct ltc_prng_descriptor sprng_desc; #endif -#ifdef LTC_SOBER128 +#ifdef 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); @@ -203,21 +180,19 @@ extern const struct ltc_prng_descriptor sober128_desc; 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, +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 +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index a3d3c382..0c52f116 100644 --- a/src/mac/hmac/hmac_done.c +++ b/src/mac/hmac/hmac_done.c @@ -1,15 +1,23 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file hmac_done.c HMAC support, terminate stream, Tom St Denis/Dobes Vandermeer */ -#ifdef LTC_HMAC +#ifdef HMAC -#define LTC_HMAC_BLOCKSIZE hash_descriptor[hash].blocksize +#define HMAC_BLOCKSIZE hash_descriptor[hash].blocksize /** Terminate an HMAC session @@ -37,15 +45,15 @@ int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen) hashsize = hash_descriptor[hash].hashsize; /* allocate buffers */ - buf = XMALLOC(LTC_HMAC_BLOCKSIZE); + buf = XMALLOC(HMAC_BLOCKSIZE); isha = XMALLOC(hashsize); - if (buf == NULL || isha == NULL) { + if (buf == NULL || isha == NULL) { if (buf != NULL) { XFREE(buf); - } + } if (isha != NULL) { XFREE(isha); - } + } return CRYPT_MEM; } @@ -55,7 +63,7 @@ int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen) } /* Create the second HMAC vector vector for step (3) */ - for(i=0; i < LTC_HMAC_BLOCKSIZE; i++) { + for(i=0; i < HMAC_BLOCKSIZE; i++) { buf[i] = hmac->key[i] ^ 0x5C; } @@ -63,7 +71,7 @@ int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen) 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) { + if ((err = hash_descriptor[hash].process(&hmac->md, buf, HMAC_BLOCKSIZE)) != CRYPT_OK) { goto LBL_ERR; } if ((err = hash_descriptor[hash].process(&hmac->md, isha, hashsize)) != CRYPT_OK) { @@ -81,6 +89,7 @@ int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen) err = CRYPT_OK; LBL_ERR: + XFREE(hmac->key); #ifdef LTC_CLEAN_STACK zeromem(isha, hashsize); zeromem(buf, hashsize); @@ -94,3 +103,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/hmac/hmac_file.c b/src/mac/hmac/hmac_file.c index d0d1ce00..05999629 100644 --- a/src/mac/hmac/hmac_file.c +++ b/src/mac/hmac/hmac_file.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file hmac_file.c HMAC support, process a file, Tom St Denis/Dobes Vandermeer */ -#ifdef LTC_HMAC +#ifdef HMAC /** HMAC a file @@ -19,72 +27,67 @@ @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, +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; + unsigned char buf[512]; size_t x; int err; LTC_ARGCHK(fname != NULL); - LTC_ARGCHK(key != NULL || keylen == 0); + LTC_ARGCHK(key != NULL); 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 = hash_is_valid(hash)) != CRYPT_OK) { + return err; } if ((err = hmac_init(&hmac, hash, key, keylen)) != CRYPT_OK) { - goto LBL_ERR; + return err; } in = fopen(fname, "rb"); if (in == NULL) { - err = CRYPT_FILE_NOTFOUND; - goto LBL_ERR; + return CRYPT_FILE_NOTFOUND; } + /* process the file contents */ do { - x = fread(buf, 1, LTC_FILE_READ_BUFSIZE, in); + x = fread(buf, 1, sizeof(buf), 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; + /* we don't trap this error since we're already returning an error! */ + fclose(in); + return err; } - } while (x == LTC_FILE_READ_BUFSIZE); + } while (x == sizeof(buf)); if (fclose(in) != 0) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; + return CRYPT_ERROR; } - err = hmac_done(&hmac, out, outlen); + /* get final hmac */ + if ((err = hmac_done(&hmac, out, outlen)) != CRYPT_OK) { + return err; + } -LBL_CLEANBUF: - zeromem(buf, LTC_FILE_READ_BUFSIZE); -LBL_ERR: #ifdef LTC_CLEAN_STACK - zeromem(&hmac, sizeof(hmac_state)); -#endif - XFREE(buf); - return err; + /* clear memory */ + zeromem(buf, sizeof(buf)); +#endif + return CRYPT_OK; #endif } #endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/hmac/hmac_init.c b/src/mac/hmac/hmac_init.c index a4c40eb2..ee78504b 100644 --- a/src/mac/hmac/hmac_init.c +++ b/src/mac/hmac/hmac_init.c @@ -1,20 +1,28 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file hmac_init.c - HMAC support, initialize state, Tom St Denis/Dobes Vandermeer + HMAC support, initialize state, Tom St Denis/Dobes Vandermeer */ -#ifdef LTC_HMAC +#ifdef HMAC -#define LTC_HMAC_BLOCKSIZE hash_descriptor[hash].blocksize +#define 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 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 @@ -27,7 +35,7 @@ int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned lon int err; LTC_ARGCHK(hmac != NULL); - LTC_ARGCHK(key != NULL || keylen == 0); + LTC_ARGCHK(key != NULL); /* valid hash? */ if ((err = hash_is_valid(hash)) != CRYPT_OK) { @@ -36,35 +44,43 @@ int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned lon hmac->hash = hash; hashsize = hash_descriptor[hash].hashsize; + /* valid key length? */ + if (keylen == 0) { + return CRYPT_INVALID_KEYSIZE; + } + /* allocate ram for buf */ - buf = XMALLOC(LTC_HMAC_BLOCKSIZE); + buf = XMALLOC(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; + /* 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 > LTC_HMAC_BLOCKSIZE) { - z = LTC_HMAC_BLOCKSIZE; + if(keylen > HMAC_BLOCKSIZE) { + z = HMAC_BLOCKSIZE; if ((err = hash_memory(hash, key, keylen, hmac->key, &z)) != CRYPT_OK) { goto LBL_ERR; } + if(hashsize < HMAC_BLOCKSIZE) { + zeromem((hmac->key) + hashsize, (size_t)(HMAC_BLOCKSIZE - hashsize)); + } keylen = hashsize; - } else if (keylen != 0) { + } else { XMEMCPY(hmac->key, key, (size_t)keylen); + if(keylen < HMAC_BLOCKSIZE) { + zeromem((hmac->key) + keylen, (size_t)(HMAC_BLOCKSIZE - 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++) { + /* Create the initial vector for step (3) */ + for(i=0; i < HMAC_BLOCKSIZE; i++) { buf[i] = hmac->key[i] ^ 0x36; } @@ -73,17 +89,24 @@ int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned lon goto LBL_ERR; } - if ((err = hash_descriptor[hash].process(&hmac->md, buf, LTC_HMAC_BLOCKSIZE)) != CRYPT_OK) { + if ((err = hash_descriptor[hash].process(&hmac->md, buf, HMAC_BLOCKSIZE)) != CRYPT_OK) { goto LBL_ERR; } - + goto done; LBL_ERR: + /* free the key since we failed */ + XFREE(hmac->key); +done: #ifdef LTC_CLEAN_STACK - zeromem(buf, LTC_HMAC_BLOCKSIZE); + zeromem(buf, HMAC_BLOCKSIZE); #endif - + XFREE(buf); - return err; + return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/hmac/hmac_memory.c b/src/mac/hmac/hmac_memory.c index acbb86ab..d868a324 100644 --- a/src/mac/hmac/hmac_memory.c +++ b/src/mac/hmac/hmac_memory.c @@ -1,18 +1,26 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file hmac_memory.c HMAC support, process a block of memory, Tom St Denis/Dobes Vandermeer */ -#ifdef LTC_HMAC +#ifdef 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 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) @@ -20,17 +28,17 @@ @param outlen [in/out] Max size and resulting size of authentication tag @return CRYPT_OK if successful */ -int hmac_memory(int hash, +int hmac_memory(int hash, const unsigned char *key, unsigned long keylen, - const unsigned char *in, unsigned long inlen, + 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(key != NULL); + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); LTC_ARGCHK(outlen != NULL); /* make sure hash descriptor is valid */ @@ -69,8 +77,12 @@ LBL_ERR: #endif XFREE(hmac); - return err; + return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/hmac/hmac_memory_multi.c b/src/mac/hmac/hmac_memory_multi.c index 403bd6d7..06c03980 100644 --- a/src/mac/hmac/hmac_memory_multi.c +++ b/src/mac/hmac/hmac_memory_multi.c @@ -1,28 +1,36 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" +#include /** @file hmac_memory_multi.c HMAC support, process multiple blocks of memory, Tom St Denis/Dobes Vandermeer */ -#ifdef LTC_HMAC +#ifdef 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 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) + @param ... tuples of (data,len) pairs to HMAC, terminated with a (NULL,x) (x=don't care) @return CRYPT_OK if successful */ -int hmac_memory_multi(int hash, +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, ...) @@ -34,9 +42,9 @@ int hmac_memory_multi(int hash, 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(key != NULL); + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); LTC_ARGCHK(outlen != NULL); /* allocate ram for hmac state */ @@ -50,7 +58,7 @@ int hmac_memory_multi(int hash, } va_start(args, inlen); - curptr = in; + curptr = in; curlen = inlen; for (;;) { /* process buf */ @@ -73,8 +81,12 @@ LBL_ERR: #endif XFREE(hmac); va_end(args); - return err; + return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/hmac/hmac_process.c b/src/mac/hmac/hmac_process.c index 86d731e4..7c552559 100644 --- a/src/mac/hmac/hmac_process.c +++ b/src/mac/hmac/hmac_process.c @@ -1,15 +1,23 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file hmac_process.c HMAC support, process data, Tom St Denis/Dobes Vandermeer */ -#ifdef LTC_HMAC +#ifdef HMAC -/** +/** Process data through HMAC @param hmac The hmac state @param in The data to send through HMAC @@ -20,8 +28,7 @@ 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; + LTC_ARGCHK(in != NULL); if ((err = hash_is_valid(hmac->hash)) != CRYPT_OK) { return err; } @@ -30,3 +37,7 @@ int hmac_process(hmac_state *hmac, const unsigned char *in, unsigned long inlen) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/hmac/hmac_test.c b/src/mac/hmac/hmac_test.c index 75a48285..36cda288 100644 --- a/src/mac/hmac/hmac_test.c +++ b/src/mac/hmac/hmac_test.c @@ -1,13 +1,23 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file hmac_test.c - HMAC support, self-test, Tom St Denis/Dobes Vandermeer/Steffen Jaeckel + HMAC support, self-test, Tom St Denis/Dobes Vandermeer */ -#ifdef LTC_HMAC +#ifdef HMAC + +#define HMAC_BLOCKSIZE hash_descriptor[hash].blocksize /* TEST CASES SOURCE: @@ -17,25 +27,7 @@ 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 */ /** @@ -46,583 +38,228 @@ int hmac_test(void) { #ifndef LTC_TEST return CRYPT_NOP; - #else + #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; + int num; + char *algo; + unsigned char key[128]; unsigned long keylen; - const unsigned char *data; + unsigned char data[128]; unsigned long datalen; unsigned char digest[MAXBLOCKSIZE]; } cases[] = { /* - RFC 2202 3. Test Cases for HMAC-SHA-1 + 3. Test Cases for HMAC-SHA-1 + + test_case = 1 + key = 0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b + key_len = 20 + data = "Hi Ther 20 + digest = 0x4c1a03424b55e07fe7f27be1d58bb9324a9a5a04 + digest-96 = 0x4c1a03424b55e07fe7f27be1 */ - { "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, + { 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} }, - { "rfc2202 3.6", "sha1", - hmac_test_case_keys[4], 80, - hmac_test_case_data[5], 54, + /* + 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, + 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, + /* + 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} }, -#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} }, + 2. Test Cases for HMAC-MD5 -#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, + 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} }, - { "rfc2202 2.3", "md5", - hmac_test_case_keys[4], 16, - hmac_test_case_data[2], 50, + /* + 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} }, + /* - { "rfc2202 2.4", "md5", - hmac_test_case_keys[2], 25, - hmac_test_case_data[3], 50, - {0x69, 0x7e, 0xaf, 0x0a, 0xca, 0x3a, 0x3a, 0xea, + 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} }, - { "rfc2202 2.5", "md5", - hmac_test_case_keys[3], 16, - hmac_test_case_data[4], 20, - {0x56, 0x46, 0x1e, 0xf2, 0x34, 0x2e, 0xdc, 0x00, + + /* + + 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} }, - { "rfc2202 2.6", "md5", - hmac_test_case_keys[4], 80, - hmac_test_case_data[5], 54, - {0x6b, 0x1a, 0xb7, 0xfe, 0x4b, 0xd7, 0xbf, 0x8f, + /* + + 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} }, - { "rfc2202 2.7", "md5", - hmac_test_case_keys[4], 80, - hmac_test_case_data[6], 73, + /* + + 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} }, -#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 */ - + 0x1f, 0xb1, 0xf5, 0x62, 0xdb, 0x3a, 0xa5, 0x3e} } }; unsigned long outlen; @@ -634,37 +271,46 @@ int hmac_test(void) ++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)); +#if 0 + printf("HMAC-%s test #%d, %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)) { + if(memcmp(digest, cases[i].digest, (size_t)hash_descriptor[hash].hashsize) != 0) { failed++; +#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"); + return CRYPT_ERROR; +#endif + } else { + /* printf("HMAC-%s test #%d: Passed\n", cases[i].algo, cases[i].num); */ } } if (failed != 0) { return CRYPT_FAIL_TESTVECTOR; - } - if (tested == 0) { + } else if (tested == 0) { return CRYPT_NOP; + } else { + return CRYPT_OK; } - - 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 7997d7a3..c6e3c511 100644 --- a/src/mac/omac/omac_done.c +++ b/src/mac/omac/omac_done.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file omac_done.c OMAC1 support, terminate a stream, Tom St Denis */ -#ifdef LTC_OMAC +#ifdef OMAC /** Terminate an OMAC stream @@ -24,6 +32,9 @@ int omac_done(omac_state *omac, unsigned char *out, unsigned long *outlen) LTC_ARGCHK(omac != NULL); LTC_ARGCHK(out != NULL); LTC_ARGCHK(outlen != NULL); + if ((err = cipher_is_valid(omac->cipher_idx)) != CRYPT_OK) { + return err; + } if ((omac->buflen > (int)sizeof(omac->block)) || (omac->buflen < 0) || (omac->blklen > (int)sizeof(omac->block)) || (omac->buflen > omac->blklen)) { @@ -50,11 +61,11 @@ int omac_done(omac_state *omac, unsigned char *out, unsigned long *outlen) } /* encrypt it */ - if ((err = ecb_encrypt_block(omac->block, omac->block, &omac->key)) != CRYPT_OK) { + if ((err = cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->block, omac->block, &omac->key)) != CRYPT_OK) { return err; } - ecb_done(&omac->key); - + cipher_descriptor[omac->cipher_idx].done(&omac->key); + /* output it */ for (x = 0; x < (unsigned)omac->blklen && x < *outlen; x++) { out[x] = omac->block[x]; @@ -69,3 +80,7 @@ int omac_done(omac_state *omac, unsigned char *out, unsigned long *outlen) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/omac/omac_file.c b/src/mac/omac/omac_file.c index 012958a4..59888da5 100644 --- a/src/mac/omac/omac_file.c +++ b/src/mac/omac/omac_file.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file omac_file.c OMAC1 support, process a file, Tom St Denis */ -#ifdef LTC_OMAC +#ifdef OMAC /** OMAC a file @@ -19,69 +27,57 @@ @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, +int omac_file(int cipher, const unsigned char *key, unsigned long keylen, - const char *filename, + 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; + int err, x; omac_state omac; FILE *in; - unsigned char *buf; + unsigned char buf[512]; 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; + in = fopen(filename, "rb"); + if (in == NULL) { + return CRYPT_FILE_NOTFOUND; } 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; + fclose(in); + return err; } do { - x = fread(buf, 1, LTC_FILE_READ_BUFSIZE, in); - if ((err = omac_process(&omac, buf, (unsigned long)x)) != CRYPT_OK) { + x = fread(buf, 1, sizeof(buf), in); + if ((err = omac_process(&omac, buf, x)) != CRYPT_OK) { fclose(in); - goto LBL_CLEANBUF; + return err; } - } while (x == LTC_FILE_READ_BUFSIZE); + } while (x == sizeof(buf)); + fclose(in); - if (fclose(in) != 0) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; + if ((err = omac_done(&omac, out, outlen)) != CRYPT_OK) { + return err; } - 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)); + zeromem(buf, sizeof(buf)); #endif - XFREE(buf); - return err; + + return CRYPT_OK; #endif } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/omac/omac_init.c b/src/mac/omac/omac_init.c index 1b75505a..79c8f3f4 100644 --- a/src/mac/omac/omac_init.c +++ b/src/mac/omac/omac_init.c @@ -1,14 +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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file omac_init.c OMAC1 support, initialize state, by Tom St Denis */ -#ifdef LTC_OMAC +#ifdef OMAC /** Initialize an OMAC state @@ -47,7 +55,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,7 +63,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) { + if ((err = cipher_descriptor[cipher].ecb_encrypt(omac->Lu[0], omac->Lu[0], &omac->key)) != CRYPT_OK) { return err; } @@ -69,7 +77,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 +85,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)); @@ -86,3 +95,7 @@ int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned l } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/omac/omac_memory.c b/src/mac/omac/omac_memory.c index 56ac137a..1d0697ff 100644 --- a/src/mac/omac/omac_memory.c +++ b/src/mac/omac/omac_memory.c @@ -1,16 +1,24 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file omac_memory.c OMAC1 support, process a block of memory, Tom St Denis */ -#ifdef LTC_OMAC +#ifdef OMAC /** - OMAC a block of memory + 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) @@ -20,7 +28,7 @@ @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, +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) @@ -33,16 +41,6 @@ int omac_memory(int cipher, 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) { @@ -67,7 +65,11 @@ LBL_ERR: #endif XFREE(omac); - return err; + return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/omac/omac_memory_multi.c b/src/mac/omac/omac_memory_multi.c index 94d4cbac..b7440153 100644 --- a/src/mac/omac/omac_memory_multi.c +++ b/src/mac/omac/omac_memory_multi.c @@ -1,41 +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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" +#include -/** +/** @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); -} +#ifdef OMAC /** - OMAC multiple blocks of memory + 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) @@ -46,7 +30,7 @@ int omac_vprocess(omac_state *omac, const unsigned char *in, unsigned long inle @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, +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, ...) @@ -54,6 +38,8 @@ int omac_memory_multi(int cipher, int err; omac_state *omac; va_list args; + const unsigned char *curptr; + unsigned long curlen; LTC_ARGCHK(key != NULL); LTC_ARGCHK(in != NULL); @@ -71,17 +57,34 @@ int omac_memory_multi(int cipher, goto LBL_ERR; } va_start(args, inlen); - if ((err = s_omac_vprocess(omac, in, inlen, args)) != CRYPT_OK) { + curptr = in; + curlen = inlen; + for (;;) { + /* process buf */ + if ((err = omac_process(omac, 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 = omac_done(omac, out, outlen)) != 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; + return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/omac/omac_process.c b/src/mac/omac/omac_process.c index a86145ac..02a42400 100644 --- a/src/mac/omac/omac_process.c +++ b/src/mac/omac/omac_process.c @@ -1,16 +1,24 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file omac_process.c OMAC1 support, process data, Tom St Denis */ -#ifdef LTC_OMAC +#ifdef OMAC -/** +/** Process data through OMAC @param omac The OMAC state @param in The input data to send through OMAC @@ -23,7 +31,10 @@ int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen) int err; LTC_ARGCHK(omac != NULL); - LTC_ARGCHK(in != NULL || inlen == 0); + LTC_ARGCHK(in != NULL); + if ((err = cipher_is_valid(omac->cipher_idx)) != CRYPT_OK) { + return err; + } if ((omac->buflen > (int)sizeof(omac->block)) || (omac->buflen < 0) || (omac->blklen > (int)sizeof(omac->block)) || (omac->buflen > omac->blklen)) { @@ -31,27 +42,28 @@ int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen) } #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]); + if (omac->buflen == 0 && inlen > 16) { + int y; + for (x = 0; x < (inlen - 16); x += 16) { + for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)(&omac->prev[y])) ^= *((LTC_FAST_TYPE*)(&in[y])); } - in += omac->blklen; - if ((err = ecb_encrypt_block(omac->prev, omac->prev, &omac->key)) != CRYPT_OK) { + in += 16; + if ((err = cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->prev, omac->prev, &omac->key)) != CRYPT_OK) { return err; } } inlen -= x; - } + } #endif - while (inlen != 0) { + 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) { + if ((err = cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->block, omac->prev, &omac->key)) != CRYPT_OK) { return err; } omac->buflen = 0; @@ -70,3 +82,7 @@ int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/omac/omac_test.c b/src/mac/omac/omac_test.c index 223d3244..b6a60d44 100644 --- a/src/mac/omac/omac_test.c +++ b/src/mac/omac/omac_test.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file omac_test.c OMAC1 support, self-test, by Tom St Denis */ -#ifdef LTC_OMAC +#ifdef OMAC /** Test the OMAC setup @@ -18,48 +26,48 @@ 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 } } @@ -69,25 +77,34 @@ int omac_test(void) 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) { +#if 0 + int y; + printf("\n\nTag: "); + for (y = 0; y < 16; y++) printf("%02x", out[y]); printf("\n\n"); +#endif return CRYPT_FAIL_TESTVECTOR; } } return CRYPT_OK; #endif -} +} #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pelican/pelican.c b/src/mac/pelican/pelican.c index 53c1e3eb..518fc132 100644 --- a/src/mac/pelican/pelican.c +++ b/src/mac/pelican/pelican.c @@ -1,32 +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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pelican.c - Pelican MAC, initialize state, by Tom St Denis + Pelican MAC, initialize state, by Tom St Denis */ -#ifdef LTC_PELICAN +#ifdef 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 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); @@ -44,10 +49,10 @@ int pelican_init(pelican_state *pelmac, const unsigned char *key, unsigned long aes_ecb_encrypt(pelmac->state, pelmac->state, &pelmac->K); pelmac->buflen = 0; - return CRYPT_OK; + return CRYPT_OK; } -static void s_four_rounds(pelican_state *pelmac) +static void four_rounds(pelican_state *pelmac) { ulong32 s0, s1, s2, s3, t0, t1, t2, t3; int r; @@ -58,25 +63,25 @@ static void s_four_rounds(pelican_state *pelmac) 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)); + Te0(byte(s0, 3)) ^ + Te1(byte(s1, 2)) ^ + Te2(byte(s2, 1)) ^ + Te3(byte(s3, 0)); t1 = - Te0(LTC_BYTE(s1, 3)) ^ - Te1(LTC_BYTE(s2, 2)) ^ - Te2(LTC_BYTE(s3, 1)) ^ - Te3(LTC_BYTE(s0, 0)); + Te0(byte(s1, 3)) ^ + Te1(byte(s2, 2)) ^ + Te2(byte(s3, 1)) ^ + Te3(byte(s0, 0)); t2 = - Te0(LTC_BYTE(s2, 3)) ^ - Te1(LTC_BYTE(s3, 2)) ^ - Te2(LTC_BYTE(s0, 1)) ^ - Te3(LTC_BYTE(s1, 0)); + Te0(byte(s2, 3)) ^ + Te1(byte(s3, 2)) ^ + Te2(byte(s0, 1)) ^ + Te3(byte(s1, 0)); t3 = - Te0(LTC_BYTE(s3, 3)) ^ - Te1(LTC_BYTE(s0, 2)) ^ - Te2(LTC_BYTE(s1, 1)) ^ - Te3(LTC_BYTE(s2, 0)); + Te0(byte(s3, 3)) ^ + Te1(byte(s0, 2)) ^ + Te2(byte(s1, 1)) ^ + Te3(byte(s2, 0)); s0 = t0; s1 = t1; s2 = t2; s3 = t3; } STORE32H(s0, pelmac->state ); @@ -85,7 +90,7 @@ static void s_four_rounds(pelican_state *pelmac) STORE32H(s3, pelmac->state + 12); } -/** +/** Process a block of text through Pelican @param pelmac The Pelican MAC state @param in The input @@ -108,9 +113,9 @@ int pelican_process(pelican_state *pelmac, const unsigned char *in, unsigned lon 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); + *((LTC_FAST_TYPE*)((unsigned char *)pelmac->state + x)) ^= *((LTC_FAST_TYPE*)((unsigned char *)in + x)); } - s_four_rounds(pelmac); + four_rounds(pelmac); in += 16; inlen -= 16; } @@ -120,7 +125,7 @@ int pelican_process(pelican_state *pelmac, const unsigned char *in, unsigned lon while (inlen--) { pelmac->state[pelmac->buflen++] ^= *in++; if (pelmac->buflen == 16) { - s_four_rounds(pelmac); + four_rounds(pelmac); pelmac->buflen = 0; } } @@ -144,13 +149,17 @@ int pelican_done(pelican_state *pelmac, unsigned char *out) } if (pelmac->buflen == 16) { - s_four_rounds(pelmac); + 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pelican/pelican_memory.c b/src/mac/pelican/pelican_memory.c index f67eaee2..3bef6ac5 100644 --- a/src/mac/pelican/pelican_memory.c +++ b/src/mac/pelican/pelican_memory.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pelican_memory.c - Pelican MAC, MAC a block of memory, by Tom St Denis + Pelican MAC, MAC a block of memory, by Tom St Denis */ -#ifdef LTC_PELICAN +#ifdef PELICAN /** Pelican block of memory @@ -15,7 +23,7 @@ @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 + @param out [out] The output TAG @return CRYPT_OK on success */ int pelican_memory(const unsigned char *key, unsigned long keylen, @@ -26,7 +34,7 @@ int pelican_memory(const unsigned char *key, unsigned long keylen, int err; pel = XMALLOC(sizeof(*pel)); - if (pel == NULL) { + if (pel == NULL) { return CRYPT_MEM; } @@ -39,9 +47,13 @@ int pelican_memory(const unsigned char *key, unsigned long keylen, return err; } err = pelican_done(pel, out); - XFREE(pel); + XFREE(pel); return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pelican/pelican_test.c b/src/mac/pelican/pelican_test.c index 7540701a..fde4fc0d 100644 --- a/src/mac/pelican/pelican_test.c +++ b/src/mac/pelican/pelican_test.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pelican_test.c - Pelican MAC, test, by Tom St Denis + Pelican MAC, test, by Tom St Denis */ -#ifdef LTC_PELICAN +#ifdef PELICAN int pelican_test(void) { @@ -16,14 +24,14 @@ int pelican_test(void) #else static const struct { unsigned char K[32], MSG[64], T[16]; - int keylen, ptlen; + 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, + { 0xeb, 0x58, 0x37, 0x15, 0xf8, 0x34, 0xde, 0xe5, 0xa4, 0xd1, 0x6e, 0xe4, 0xb9, 0xd7, 0x76, 0x0e, }, 16, 0 }, @@ -33,7 +41,7 @@ int pelican_test(void) { 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, + { 0x1c, 0x97, 0x40, 0x60, 0x6c, 0x58, 0x17, 0x2d, 0x03, 0x94, 0x19, 0x70, 0x81, 0xc4, 0x38, 0x54, }, 16, 3 }, @@ -44,7 +52,7 @@ int pelican_test(void) 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, + { 0x03, 0xcc, 0x46, 0xb8, 0xac, 0xa7, 0x9c, 0x36, 0x1e, 0x8c, 0x6e, 0xa6, 0x7b, 0x89, 0x32, 0x49, }, 16, 16 }, @@ -57,7 +65,7 @@ int pelican_test(void) 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, + { 0x89, 0xcc, 0x36, 0x58, 0x1b, 0xdd, 0x4d, 0xb5, 0x78, 0xbb, 0xac, 0xf0, 0xff, 0x8b, 0x08, 0x15, }, 16, 32 }, @@ -71,7 +79,7 @@ int pelican_test(void) 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, + { 0x4a, 0x7d, 0x45, 0x4d, 0xcd, 0xb5, 0xda, 0x8d, 0x48, 0x78, 0x16, 0x48, 0x5d, 0x45, 0x95, 0x99, }, 16, 35 }, @@ -79,8 +87,8 @@ int pelican_test(void) int x, err; unsigned char out[16]; pelican_state pel; - - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { + + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { if ((err = pelican_init(&pel, tests[x].K, tests[x].keylen)) != CRYPT_OK) { return err; } @@ -91,7 +99,12 @@ int pelican_test(void) return err; } - if (ltc_compare_testvector(out, 16, tests[x].T, 16, "PELICAN", x)) { + if (memcmp(out, tests[x].T, 16)) { +#if 0 + int y; + printf("\nFailed test %d\n", x); + printf("{ "); for (y = 0; y < 16; ) { printf("0x%02x, ", out[y]); if (!(++y & 7)) printf("\n"); } printf(" }\n"); +#endif return CRYPT_FAIL_TESTVECTOR; } } @@ -101,3 +114,7 @@ int pelican_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_done.c b/src/mac/pmac/pmac_done.c index bcad06ad..308897b2 100644 --- a/src/mac/pmac/pmac_done.c +++ b/src/mac/pmac/pmac_done.c @@ -1,59 +1,74 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pmac_done.c - PMAC implementation, terminate a session, by Tom St Denis + PMAC implementation, terminate a session, by Tom St Denis */ -#ifdef LTC_PMAC +#ifdef PMAC -int pmac_done(pmac_state *pmac, unsigned char *out, unsigned long *outlen) +int pmac_done(pmac_state *state, unsigned char *out, unsigned long *outlen) { int err, x; - LTC_ARGCHK(pmac != NULL); - LTC_ARGCHK(out != NULL); + LTC_ARGCHK(state != NULL); + LTC_ARGCHK(out != NULL); + if ((err = cipher_is_valid(state->cipher_idx)) != CRYPT_OK) { + return err; + } - if ((pmac->buflen > (int)sizeof(pmac->block)) || (pmac->buflen < 0) || - (pmac->block_len > (int)sizeof(pmac->block)) || (pmac->buflen > pmac->block_len)) { + 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 (pmac->buflen == pmac->block_len) { + if (state->buflen == state->block_len) { /* xor Lr against the checksum */ - for (x = 0; x < pmac->block_len; x++) { - pmac->checksum[x] ^= pmac->block[x] ^ pmac->Lr[x]; + 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 < pmac->buflen; x++) { - pmac->checksum[x] ^= pmac->block[x]; + for (x = 0; x < state->buflen; x++) { + state->checksum[x] ^= state->block[x]; } - pmac->checksum[x] ^= 0x80; + state->checksum[x] ^= 0x80; } /* encrypt it */ - if ((err = ecb_encrypt_block(pmac->checksum, pmac->checksum, &pmac->key)) != CRYPT_OK) { + if ((err = cipher_descriptor[state->cipher_idx].ecb_encrypt(state->checksum, state->checksum, &state->key)) != CRYPT_OK) { return err; } - ecb_done(&pmac->key); + cipher_descriptor[state->cipher_idx].done(&state->key); /* store it */ - for (x = 0; x < pmac->block_len && x < (int)*outlen; x++) { - out[x] = pmac->checksum[x]; + for (x = 0; x < state->block_len && x <= (int)*outlen; x++) { + out[x] = state->checksum[x]; } *outlen = x; #ifdef LTC_CLEAN_STACK - zeromem(pmac, sizeof(*pmac)); + zeromem(state, sizeof(*state)); #endif return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_file.c b/src/mac/pmac/pmac_file.c index fca9b001..c641b37b 100644 --- a/src/mac/pmac/pmac_file.c +++ b/src/mac/pmac/pmac_file.c @@ -1,16 +1,24 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pmac_file.c - PMAC implementation, process a file, by Tom St Denis + PMAC implementation, process a file, by Tom St Denis */ -#ifdef LTC_PMAC +#ifdef PMAC /** - PMAC a file + 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) @@ -19,25 +27,18 @@ @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, +int pmac_file(int cipher, const unsigned char *key, unsigned long keylen, - const char *filename, + 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; + int err, x; pmac_state pmac; FILE *in; - unsigned char *buf; + unsigned char buf[512]; LTC_ARGCHK(key != NULL); @@ -45,44 +46,39 @@ int pmac_file(int cipher, LTC_ARGCHK(out != NULL); LTC_ARGCHK(outlen != NULL); - if ((buf = XMALLOC(LTC_FILE_READ_BUFSIZE)) == NULL) { - return CRYPT_MEM; + in = fopen(filename, "rb"); + if (in == NULL) { + return CRYPT_FILE_NOTFOUND; } 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; + fclose(in); + return err; } do { - x = fread(buf, 1, LTC_FILE_READ_BUFSIZE, in); - if ((err = pmac_process(&pmac, buf, (unsigned long)x)) != CRYPT_OK) { + x = fread(buf, 1, sizeof(buf), in); + if ((err = pmac_process(&pmac, buf, x)) != CRYPT_OK) { fclose(in); - goto LBL_CLEANBUF; + return err; } - } while (x == LTC_FILE_READ_BUFSIZE); + } while (x == sizeof(buf)); + fclose(in); - if (fclose(in) != 0) { - err = CRYPT_ERROR; - goto LBL_CLEANBUF; + if ((err = pmac_done(&pmac, out, outlen)) != CRYPT_OK) { + return err; } - 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)); + zeromem(buf, sizeof(buf)); #endif - XFREE(buf); - return err; + + return CRYPT_OK; #endif } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_init.c b/src/mac/pmac/pmac_init.c index 46f645c4..7fda1b6f 100644 --- a/src/mac/pmac/pmac_init.c +++ b/src/mac/pmac/pmac_init.c @@ -1,18 +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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pmac_init.c - PMAC implementation, initialize state, by Tom St Denis + PMAC implementation, initialize state, by Tom St Denis */ -#ifdef LTC_PMAC +#ifdef PMAC -#define polys pmac_polys static const struct { int len; - unsigned char poly_div[MAXBLOCKSIZE], + unsigned char poly_div[MAXBLOCKSIZE], poly_mul[MAXBLOCKSIZE]; } polys[] = { { @@ -20,7 +27,7 @@ static const struct { { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B } }, { - 16, + 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, @@ -32,7 +39,7 @@ static const struct { 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 key The secret key @param keylen The length of the secret key (octets) @return CRYPT_OK if successful */ @@ -51,14 +58,11 @@ int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned l /* 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) { + for (poly = 0; poly < (int)(sizeof(polys)/sizeof(polys[0])); 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; } @@ -71,10 +75,10 @@ int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned l /* schedule the key */ - if ((err = ecb_start(cipher, key, keylen, 0, &pmac->key)) != CRYPT_OK) { + 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) { @@ -83,7 +87,7 @@ int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned l /* find L = E[0] */ zeromem(L, pmac->block_len); - if ((err = ecb_encrypt_block(L, L, &pmac->key)) != CRYPT_OK) { + if ((err = cipher_descriptor[cipher].ecb_encrypt(L, L, &pmac->key)) != CRYPT_OK) { goto error; } @@ -103,38 +107,41 @@ int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned l } } - /* find Lr = L / x */ - m = L[pmac->block_len-1] & 1; + /* 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; + /* 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]; - } - } + 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; + /* 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)); + err = CRYPT_OK; error: #ifdef LTC_CLEAN_STACK - zeromem(L, pmac->block_len); + zeromem(L, pmac->block_len); #endif - XFREE(L); + XFREE(L); - return err; + return err; } -#undef polys - #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_memory.c b/src/mac/pmac/pmac_memory.c index 46715471..b920631a 100644 --- a/src/mac/pmac/pmac_memory.c +++ b/src/mac/pmac/pmac_memory.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pmac_memory.c - PMAC implementation, process a block of memory, by Tom St Denis + PMAC implementation, process a block of memory, by Tom St Denis */ -#ifdef LTC_PMAC +#ifdef PMAC /** PMAC a block of memory @@ -20,7 +28,7 @@ @param outlen [in/out] The max size and resulting size of the authentication tag @return CRYPT_OK if successful */ -int pmac_memory(int cipher, +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) @@ -38,7 +46,7 @@ int pmac_memory(int cipher, if (pmac == NULL) { return CRYPT_MEM; } - + if ((err = pmac_init(pmac, cipher, key, keylen)) != CRYPT_OK) { goto LBL_ERR; } @@ -56,7 +64,11 @@ LBL_ERR: #endif XFREE(pmac); - return err; + return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_memory_multi.c b/src/mac/pmac/pmac_memory_multi.c index 16ba8f65..cbd94b94 100644 --- a/src/mac/pmac/pmac_memory_multi.c +++ b/src/mac/pmac/pmac_memory_multi.c @@ -1,13 +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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" +#include -/** +/** @file pmac_memory_multi.c - PMAC implementation, process multiple blocks of memory, by Tom St Denis + PMAC implementation, process multiple blocks of memory, by Tom St Denis */ -#ifdef LTC_PMAC +#ifdef PMAC /** PMAC multiple blocks of memory @@ -21,7 +30,7 @@ @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, +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, ...) @@ -42,12 +51,12 @@ int pmac_memory_multi(int cipher, 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; + curptr = in; curlen = inlen; for (;;) { /* process buf */ @@ -70,7 +79,11 @@ LBL_ERR: #endif XFREE(pmac); va_end(args); - return err; + return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_ntz.c b/src/mac/pmac/pmac_ntz.c index 86142ba0..84cde691 100644 --- a/src/mac/pmac/pmac_ntz.c +++ b/src/mac/pmac/pmac_ntz.c @@ -1,24 +1,27 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pmac_ntz.c - PMAC implementation, internal function, by Tom St Denis + PMAC implementation, internal function, by Tom St Denis */ -#ifdef LTC_PMAC +#ifdef 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; @@ -27,7 +30,10 @@ int pmac_ntz(unsigned long x) x >>= 1; } return c; -#endif } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_process.c b/src/mac/pmac/pmac_process.c index 9872e9ba..0b98d2d6 100644 --- a/src/mac/pmac/pmac_process.c +++ b/src/mac/pmac/pmac_process.c @@ -1,14 +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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pmac_process.c - PMAC implementation, process data, by Tom St Denis + PMAC implementation, process data, by Tom St Denis */ -#ifdef LTC_PMAC +#ifdef PMAC /** Process data in a PMAC stream @@ -25,6 +33,9 @@ int pmac_process(pmac_state *pmac, const unsigned char *in, unsigned long inlen) LTC_ARGCHK(pmac != NULL); LTC_ARGCHK(in != NULL); + if ((err = cipher_is_valid(pmac->cipher_idx)) != CRYPT_OK) { + return err; + } if ((pmac->buflen > (int)sizeof(pmac->block)) || (pmac->buflen < 0) || (pmac->block_len > (int)sizeof(pmac->block)) || (pmac->buflen > pmac->block_len)) { @@ -37,13 +48,13 @@ int pmac_process(pmac_state *pmac, const unsigned char *in, unsigned long inlen) 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]); + *((LTC_FAST_TYPE*)(&Z[y])) = *((LTC_FAST_TYPE*)(&in[y])) ^ *((LTC_FAST_TYPE*)(&pmac->Li[y])); } - if ((err = ecb_encrypt_block(Z, Z, &pmac->key)) != CRYPT_OK) { + if ((err = cipher_descriptor[pmac->cipher_idx].ecb_encrypt(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]); + *((LTC_FAST_TYPE*)(&pmac->checksum[y])) ^= *((LTC_FAST_TYPE*)(&Z[y])); } in += 16; } @@ -51,14 +62,14 @@ int pmac_process(pmac_state *pmac, const unsigned char *in, unsigned long inlen) } #endif - while (inlen != 0) { + 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) { + if ((err = cipher_descriptor[pmac->cipher_idx].ecb_encrypt(Z, Z, &pmac->key)) != CRYPT_OK) { return err; } for (x = 0; x < (unsigned long)pmac->block_len; x++) { @@ -83,3 +94,7 @@ int pmac_process(pmac_state *pmac, const unsigned char *in, unsigned long inlen) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_shift_xor.c b/src/mac/pmac/pmac_shift_xor.c index 764f3919..e5622cf5 100644 --- a/src/mac/pmac/pmac_shift_xor.c +++ b/src/mac/pmac/pmac_shift_xor.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pmac_shift_xor.c - PMAC implementation, internal function, by Tom St Denis + PMAC implementation, internal function, by Tom St Denis */ -#ifdef LTC_PMAC +#ifdef PMAC /** Internal function. Performs the state update (adding correct multiple) @@ -19,7 +27,8 @@ void pmac_shift_xor(pmac_state *pmac) 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); + *((LTC_FAST_TYPE*)((unsigned char *)pmac->Li + x)) ^= + *((LTC_FAST_TYPE*)((unsigned char *)pmac->Ls[y] + x)); } #else for (x = 0; x < pmac->block_len; x++) { @@ -29,3 +38,7 @@ void pmac_shift_xor(pmac_state *pmac) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_test.c b/src/mac/pmac/pmac_test.c index 665504cb..8d091272 100644 --- a/src/mac/pmac/pmac_test.c +++ b/src/mac/pmac/pmac_test.c @@ -1,17 +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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pmac_test.c - PMAC implementation, self-test, by Tom St Denis + PMAC implementation, self-test, by Tom St Denis */ -#ifdef LTC_PMAC +#ifdef PMAC -/** - Test the LTC_OMAC implementation +/** + Test the OMAC implementation @return CRYPT_OK if successful, CRYPT_NOP if testing has been disabled */ int pmac_test(void) @@ -19,7 +27,7 @@ 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 +125,41 @@ 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 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index f5dd3a1d..614ef202 100644 --- a/src/math/fp/ltc_ecc_fp_mulmod.c +++ b/src/math/fp/ltc_ecc_fp_mulmod.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ltc_ecc_fp_mulmod.c ECC Crypto, Tom St Denis -*/ +*/ -#if defined(LTC_MECC) && defined(LTC_MECC_FP) +#if defined(MECC) && defined(MECC_FP) #include /* number of entries in the cache */ @@ -22,15 +30,14 @@ #if (FP_LUT > 12) || (FP_LUT < 2) #error FP_LUT must be between 2 and 12 inclusively -#endif +#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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 }, + { 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 @@ -565,37 +572,13 @@ static const struct { #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) +/* find a hole and free as required */ +static int 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) { + for (z = 0, y = INT_MAX, x = 0; x < FP_ENTRIES; x++) { + if (fp_cache[x].lru_count < y) { z = x; y = fp_cache[x].lru_count; } @@ -609,9 +592,9 @@ static int s_find_hole(void) } /* free entry z */ - if (z >= 0 && fp_cache[z].g) { + if (fp_cache[z].g) { if (fp_cache[z].mu != NULL) { - ltc_mp_clear(fp_cache[z].mu); + mp_clear(fp_cache[z].mu); fp_cache[z].mu = NULL; } ltc_ecc_del_point(fp_cache[z].g); @@ -626,14 +609,14 @@ static int s_find_hole(void) } /* determine if a base is already in the cache and if so, where */ -static int s_find_base(const ecc_point *g) +static int find_base(ecc_point *g) { int x; for (x = 0; x < FP_ENTRIES; x++) { - if (fp_cache[x].g != NULL && - ltc_mp_cmp(fp_cache[x].g->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) { + if (fp_cache[x].g != NULL && + mp_cmp(fp_cache[x].g->x, g->x) == LTC_MP_EQ && + mp_cmp(fp_cache[x].g->y, g->y) == LTC_MP_EQ && + mp_cmp(fp_cache[x].g->z, g->z) == LTC_MP_EQ) { break; } } @@ -644,7 +627,7 @@ static int s_find_base(const ecc_point *g) } /* add a new base to the cache */ -static int s_add_entry(int idx, const ecc_point *g) +static int add_entry(int idx, ecc_point *g) { unsigned x, y; @@ -655,13 +638,13 @@ static int s_add_entry(int idx, const ecc_point *g) } /* 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)) { + if ((mp_copy(g->x, fp_cache[idx].g->x) != CRYPT_OK) || + (mp_copy(g->y, fp_cache[idx].g->y) != CRYPT_OK) || + (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; } - + if ((mp_mulmod(fp_cache[idx].g->x, mu, modulus, fp_cache[idx].LUT[1]->x) != CRYPT_OK) || + (mp_mulmod(fp_cache[idx].g->y, mu, modulus, fp_cache[idx].LUT[1]->y) != CRYPT_OK) || + (mp_mulmod(fp_cache[idx].g->z, mu, modulus, fp_cache[idx].LUT[1]->z) != CRYPT_OK)) { goto ERR; } + /* 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; } - + if ((mp_copy(fp_cache[idx].LUT[1<<(x-1)]->x, fp_cache[idx].LUT[1<x) != CRYPT_OK) || + (mp_copy(fp_cache[idx].LUT[1<<(x-1)]->y, fp_cache[idx].LUT[1<y) != CRYPT_OK) || + (mp_copy(fp_cache[idx].LUT[1<<(x-1)]->z, fp_cache[idx].LUT[1<z) != CRYPT_OK)) { goto ERR; } + /* 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; } - + if ((err = mp_montgomery_reduce(fp_cache[idx].LUT[x]->z, modulus, mp)) != CRYPT_OK) { goto ERR; } + /* invert it */ - if ((err = ltc_mp_invmod(fp_cache[idx].LUT[x]->z, modulus, fp_cache[idx].LUT[x]->z)) != CRYPT_OK) { goto DONE; } + if ((err = mp_invmod(fp_cache[idx].LUT[x]->z, modulus, fp_cache[idx].LUT[x]->z)) != CRYPT_OK) { goto ERR; } /* now square it */ - if ((err = ltc_mp_sqrmod(fp_cache[idx].LUT[x]->z, modulus, tmp)) != CRYPT_OK) { goto DONE; } - + if ((err = mp_sqrmod(fp_cache[idx].LUT[x]->z, modulus, tmp)) != CRYPT_OK) { goto ERR; } + /* 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; } + if ((err = mp_mulmod(fp_cache[idx].LUT[x]->x, tmp, modulus, fp_cache[idx].LUT[x]->x)) != CRYPT_OK) { goto ERR; } /* get 1/z^3 */ - if ((err = ltc_mp_mulmod(tmp, fp_cache[idx].LUT[x]->z, modulus, tmp)) != CRYPT_OK) { goto DONE; } + if ((err = mp_mulmod(tmp, fp_cache[idx].LUT[x]->z, modulus, tmp)) != CRYPT_OK) { goto ERR; } /* 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; } + if ((err = mp_mulmod(fp_cache[idx].LUT[x]->y, tmp, modulus, fp_cache[idx].LUT[x]->y)) != CRYPT_OK) { goto ERR; } - /* 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); + /* free z */ + mp_clear(fp_cache[idx].LUT[x]->z); fp_cache[idx].LUT[x]->z = NULL; } - ltc_mp_clear(tmp); + mp_clear(tmp); - return CRYPT_OK; -DONE: + return CRYPT_OK; +ERR: + err = CRYPT_MEM; +DONE: for (y = 0; y < (1U< ltc_mp_unsigned_bin_size(modulus)) { + if (mp_unsigned_bin_size(k) > mp_unsigned_bin_size(modulus)) { /* find order */ - if ((err = s_find_order_for_modulus(modulus, &order)) != CRYPT_OK) { + y = mp_unsigned_bin_size(modulus); + for (x = 0; ltc_ecc_sets[x].size; x++) { + if (y <= (unsigned)ltc_ecc_sets[x].size) break; + } + + /* back off if we are on the 521 bit curve */ + if (y == 66) --x; + + if ((err = mp_init(&order)) != CRYPT_OK) { + return err; + } + if ((err = mp_read_radix(order, ltc_ecc_sets[x].order, 16)) != CRYPT_OK) { + mp_clear(&order); 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); + if (mp_cmp(k, order) != LTC_MP_LT) { + if ((err = mp_init(&tk)) != CRYPT_OK) { + mp_clear(order); return err; } - if ((err = ltc_mp_mod(k, order, tmpk)) != CRYPT_OK) { - ltc_mp_clear(tmpk); - ltc_mp_clear(order); + if ((err = mp_mod(k, order, tk)) != CRYPT_OK) { + mp_clear(tk); + mp_clear(order); return err; } - tk = tmpk; } else { tk = k; } - ltc_mp_clear(order); + 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; + bitlen = 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); - } + if (mp_unsigned_bin_size(tk) > (sizeof(kb) - 2)) { + if (tk != k) { + mp_clear(tk); + } 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); - } + if ((err = mp_to_unsigned_bin(tk, kb)) != CRYPT_OK) { + if (tk != k) { + mp_clear(tk); + } 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); - } + y = mp_unsigned_bin_size(tk) - 1; + if (tk != k) { + mp_clear(tk); + } 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--) { @@ -871,26 +866,26 @@ static int s_accel_fp_mul(int idx, const void *k, ecc_point *R, const void *ma, 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) { + if ((err = ltc_mp.ecc_ptdbl(R, R, modulus, mp)) != CRYPT_OK) { return err; } } - - /* add if not first, otherwise copy */ + + /* 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) { + if ((err = ltc_mp.ecc_ptadd(R, fp_cache[idx].LUT[z], R, 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; + if ((mp_copy(fp_cache[idx].LUT[z]->x, R->x) != CRYPT_OK) || + (mp_copy(fp_cache[idx].LUT[z]->y, R->y) != CRYPT_OK) || + (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 */ @@ -902,417 +897,82 @@ static int s_accel_fp_mul(int idx, const void *k, ecc_point *R, const void *ma, 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 ltc_ecc_fp_mulmod(void *k, ecc_point *G, ecc_point *R, 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); - } - + void *mp, *mu; + mp = NULL; mu = NULL; - ma = NULL; - a_plus3 = NULL; LTC_MUTEX_LOCK(<c_ecc_fp_lock); /* find point */ - idx = s_find_base(G); + idx = find_base(G); /* no entry? */ if (idx == -1) { /* find hole and add it */ - idx = s_find_hole(); + idx = find_hole(); - if (idx >= 0) { - if ((err = s_add_entry(idx, G)) != CRYPT_OK) { - goto LBL_ERR; - } + if ((err = 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) { + /* increment LRU */ + ++(fp_cache[idx].lru_count); + + /* if it's 2 build the LUT, if it's higher just use the LUT */ + if (fp_cache[idx].lru_count == 2) { /* compute mp */ - if ((err = ltc_mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { goto LBL_ERR; } + if ((err = 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) { + /* compute mu */ + if ((err = mp_init(&mu)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = mp_montgomery_normalization(mu, modulus)) != 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; - } - } + } + + /* build the LUT */ + if ((err = build_lut(idx, 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); + if (fp_cache[idx].lru_count >= 2) { + if (mp == NULL) { + /* compute mp */ + if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { goto LBL_ERR; } + } + err = accel_fp_mul(idx, k, R, modulus, mp, map); } else { - err = ltc_ecc_mulmod(k, G, R, a, modulus, map); + err = ltc_ecc_mulmod(k, G, R, modulus, map); } LBL_ERR: LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); if (mp != NULL) { - ltc_mp_montgomery_free(mp); - } + 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); - } + mp_clear(mu); + } 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) +/** Free the Fixed Point tables */ +void ltc_ecc_fp_free(void) { unsigned x, y; + LTC_MUTEX_LOCK(<c_ecc_fp_lock); 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 + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/math/gmp_desc.c b/src/math/gmp_desc.c index 943f37e4..decc7fd8 100644 --- a/src/math/gmp_desc.c +++ b/src/math/gmp_desc.c @@ -1,8 +1,16 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ #define DESC_DEF_ONLY -#include "tomcrypt_private.h" +#include "tomcrypt.h" #ifdef GMP_DESC @@ -10,14 +18,14 @@ #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); + mpz_init(((__mpz_struct *)*a)); return CRYPT_OK; } @@ -28,7 +36,7 @@ static void deinit(void *a) XFREE(a); } -static int neg(const void *a, void *b) +static int neg(void *a, void *b) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -36,7 +44,7 @@ static int neg(const void *a, void *b) return CRYPT_OK; } -static int copy(const void *a, void *b) +static int copy(void *a, void *b) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -44,7 +52,7 @@ static int copy(const void *a, void *b) return CRYPT_OK; } -static int init_copy(void **a, const void *b) +static int init_copy(void **a, void *b) { if (init(a) != CRYPT_OK) { return CRYPT_MEM; @@ -53,32 +61,32 @@ static int init_copy(void **a, const void *b) } /* ---- trivial ---- */ -static int set_int(void *a, ltc_mp_digit b) +static int set_int(void *a, unsigned long b) { LTC_ARGCHK(a != NULL); - mpz_set_ui(a, b); + mpz_set_ui(((__mpz_struct *)a), b); return CRYPT_OK; } -static unsigned long get_int(const void *a) +static unsigned long get_int(void *a) { LTC_ARGCHK(a != NULL); return mpz_get_ui(a); } -static ltc_mp_digit get_digit(const void *a, int n) +static unsigned long get_digit(void *a, int n) { LTC_ARGCHK(a != NULL); return mpz_getlimbn(a, n); } -static int get_digit_count(const void *a) +static int get_digit_count(void *a) { LTC_ARGCHK(a != NULL); return mpz_size(a); } - -static int compare(const void *a, const void *b) + +static int compare(void *a, void *b) { int ret; LTC_ARGCHK(a != NULL); @@ -93,11 +101,11 @@ static int compare(const void *a, const void *b) } } -static int compare_d(const void *a, ltc_mp_digit b) +static int compare_d(void *a, unsigned long b) { int ret; LTC_ARGCHK(a != NULL); - ret = mpz_cmp_ui((__mpz_struct *)a, b); + ret = mpz_cmp_ui(((__mpz_struct *)a), b); if (ret < 0) { return LTC_MP_LT; } else if (ret > 0) { @@ -107,13 +115,13 @@ static int compare_d(const void *a, ltc_mp_digit b) } } -static int count_bits(const void *a) +static int count_bits(void *a) { LTC_ARGCHK(a != NULL); return mpz_sizeinbase(a, 2); } -static int count_lsb_bits(const void *a) +static int count_lsb_bits(void *a) { LTC_ARGCHK(a != NULL); return mpz_scan1(a, 0); @@ -130,86 +138,45 @@ static int twoexpt(void *a, int n) /* ---- 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); + mpz_set_str(a, b, radix); + return CRYPT_OK; } /* write one */ -static int write_radix(const void *a, char *b, int radix) +static int write_radix(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) +static unsigned long unsigned_size(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; + 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) +static int unsigned_write(void *a, unsigned char *b) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); - mpz_export(b, NULL, 1, 1, 1, 0, a); + mpz_export(b, NULL, 1, 1, 1, 0, ((__mpz_struct*)a)); return CRYPT_OK; } /* read */ -static int unsigned_read(void *a, const unsigned char *b, unsigned long len) +static int unsigned_read(void *a, unsigned char *b, unsigned long len) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -218,7 +185,7 @@ static int unsigned_read(void *a, const unsigned char *b, unsigned long len) } /* add */ -static int add(const void *a, const void *b, void *c) +static int add(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -226,8 +193,8 @@ static int add(const void *a, const void *b, void *c) mpz_add(c, a, b); return CRYPT_OK; } - -static int addi(const void *a, ltc_mp_digit b, void *c) + +static int addi(void *a, unsigned long b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(c != NULL); @@ -236,7 +203,7 @@ static int addi(const void *a, ltc_mp_digit b, void *c) } /* sub */ -static int sub(const void *a, const void *b, void *c) +static int sub(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -245,7 +212,7 @@ static int sub(const void *a, const void *b, void *c) return CRYPT_OK; } -static int subi(const void *a, ltc_mp_digit b, void *c) +static int subi(void *a, unsigned long b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(c != NULL); @@ -254,7 +221,7 @@ static int subi(const void *a, ltc_mp_digit b, void *c) } /* mul */ -static int mul(const void *a, const void *b, void *c) +static int mul(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -263,7 +230,7 @@ static int mul(const void *a, const void *b, void *c) return CRYPT_OK; } -static int muli(const void *a, ltc_mp_digit b, void *c) +static int muli(void *a, unsigned long b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(c != NULL); @@ -272,7 +239,7 @@ static int muli(const void *a, ltc_mp_digit b, void *c) } /* sqr */ -static int sqr(const void *a, void *b) +static int sqr(void *a, void *b) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -280,121 +247,8 @@ static int sqr(const void *a, void *b) 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) +static int divide(void *a, void *b, void *c, void *d) { mpz_t tmp; LTC_ARGCHK(a != NULL); @@ -413,7 +267,7 @@ static int divide(const void *a, const void *b, void *c, void *d) return CRYPT_OK; } -static int div_2(const void *a, void *b) +static int div_2(void *a, void *b) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -422,17 +276,17 @@ static int div_2(const void *a, void *b) } /* modi */ -static int modi(const void *a, ltc_mp_digit b, ltc_mp_digit *c) +static int modi(void *a, unsigned long b, unsigned long *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) +static int gcd(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -442,7 +296,7 @@ static int gcd(const void *a, const void *b, void *c) } /* lcm */ -static int lcm(const void *a, const void *b, void *c) +static int lcm(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -451,29 +305,7 @@ static int lcm(const void *a, const void *b, void *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); - 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) +static int mulmod(void *a, void *b, void *c, void *d) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -484,7 +316,7 @@ static int mulmod(const void *a, const void *b, const void *c, void *d) return CRYPT_OK; } -static int sqrmod(const void *a, const void *b, void *c) +static int sqrmod(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -495,7 +327,7 @@ static int sqrmod(const void *a, const void *b, void *c) } /* invmod */ -static int invmod(const void *a, const void *b, void *c) +static int invmod(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -505,7 +337,7 @@ static int invmod(const void *a, const void *b, void *c) } /* setup */ -static int montgomery_setup(const void *a, void **b) +static int montgomery_setup(void *a, void **b) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -514,7 +346,7 @@ static int montgomery_setup(const void *a, void **b) } /* get normalization value */ -static int montgomery_normalization(void *a, const void *b) +static int montgomery_normalization(void *a, void *b) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -523,7 +355,7 @@ static int montgomery_normalization(void *a, const void *b) } /* reduce */ -static int montgomery_reduce(void *a, const void *b, void *c) +static int montgomery_reduce(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -535,10 +367,9 @@ static int montgomery_reduce(void *a, const void *b, void *c) /* 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) +static int exptmod(void *a, void *b, void *c, void *d) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -546,23 +377,13 @@ static int exptmod(const void *a, const void *b, const void *c, void *d) LTC_ARGCHK(d != NULL); mpz_powm(d, a, b, c); return CRYPT_OK; -} +} -static int isprime(const void *a, int b, int *c) +static int isprime(void *a, int *b) { 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); + LTC_ARGCHK(b != NULL); + *b = mpz_probab_prime_p(a, 8) > 0 ? LTC_MP_YES : LTC_MP_NO; return CRYPT_OK; } @@ -600,7 +421,6 @@ const ltc_math_descriptor gmp_desc = { &mul, &muli, &sqr, - &sqrtmod_prime, ÷, &div_2, &modi, @@ -619,40 +439,31 @@ const ltc_math_descriptor gmp_desc = { &exptmod, &isprime, -#ifdef LTC_MECC -#ifdef LTC_MECC_FP +#ifdef MECC +#ifdef MECC_FP <c_ecc_fp_mulmod, #else <c_ecc_mulmod, -#endif /* LTC_MECC_FP */ +#endif /* 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 */ + NULL, NULL, NULL, NULL, +#endif -#ifdef LTC_MRSA +#ifdef MRSA &rsa_make_key, &rsa_exptmod, #else - NULL, NULL, + NULL, NULL #endif - &addmod, - &submod, - - &set_rand, - + }; #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/math/ltm_desc.c b/src/math/ltm_desc.c index 99c9f14b..03336077 100644 --- a/src/math/ltm_desc.c +++ b/src/math/ltm_desc.c @@ -1,67 +1,57 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ #define DESC_DEF_ONLY -#include "tomcrypt_private.h" +#include "tomcrypt.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; + int mpi_code, 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) + 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) +static int mpi_to_ltc_error(int err) { - size_t x; + int x; - for (x = 0; x < LTC_ARRAY_SIZE(mpi_to_ltc_codes); x++) { - if (err == mpi_to_ltc_codes[x].mpi_code) { + 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; } -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; + *a = XCALLOC(1, sizeof(mp_int)); + if (*a == NULL) { + return CRYPT_MEM; } + if ((err = mpi_to_ltc_error(mp_init(*a))) != CRYPT_OK) { XFREE(*a); } @@ -75,97 +65,91 @@ static void deinit(void *a) XFREE(a); } -static int neg(const void *a, void *b) +static int neg(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) +static int copy(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) +static int init_copy(void **a, 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)); + if (init(a) != CRYPT_OK) { + return CRYPT_MEM; + } + return copy(b, *a); } /* ---- trivial ---- */ -static int set_int(void *a, ltc_mp_digit b) +static int set_int(void *a, unsigned long 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) +static unsigned long get_int(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) +static unsigned long get_digit(void *a, int n) { - const mp_int *A; + 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) +static int get_digit_count(void *a) { - const mp_int *A; + mp_int *A; LTC_ARGCHK(a != NULL); A = a; return A->used; } - -static int compare(const void *a, const void *b) + +static int compare(void *a, void *b) { + int ret; LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); - switch (mp_cmp(a, b)) { + ret = mp_cmp(a, b); + switch (ret) { case MP_LT: return LTC_MP_LT; case MP_EQ: return LTC_MP_EQ; case MP_GT: return LTC_MP_GT; - default: return 0; } + return 0; } -static int compare_d(const void *a, ltc_mp_digit b) +static int compare_d(void *a, unsigned long b) { + int ret; LTC_ARGCHK(a != NULL); - switch (mp_cmp_d(a, b)) { + ret = mp_cmp_d(a, b); + switch (ret) { case MP_LT: return LTC_MP_LT; case MP_EQ: return LTC_MP_EQ; case MP_GT: return LTC_MP_GT; - default: return 0; } + return 0; } -static int count_bits(const void *a) +static int count_bits(void *a) { LTC_ARGCHK(a != NULL); return mp_count_bits(a); } -static int count_lsb_bits(const void *a) +static int count_lsb_bits(void *a) { LTC_ARGCHK(a != NULL); return mp_cnt_lsb(a); @@ -189,62 +173,46 @@ static int read_radix(void *a, const char *b, int radix) } /* write one */ -static int write_radix(const void *a, char *b, int radix) +static int write_radix(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) +static unsigned long unsigned_size(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) +static int unsigned_write(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) +static int unsigned_read(void *a, 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) +static int add(void *a, 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) + +static int addi(void *a, unsigned long b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(c != NULL); @@ -252,7 +220,7 @@ static int addi(const void *a, ltc_mp_digit b, void *c) } /* sub */ -static int sub(const void *a, const void *b, void *c) +static int sub(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -260,7 +228,7 @@ static int sub(const void *a, const void *b, void *c) return mpi_to_ltc_error(mp_sub(a, b, c)); } -static int subi(const void *a, ltc_mp_digit b, void *c) +static int subi(void *a, unsigned long b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(c != NULL); @@ -268,7 +236,7 @@ static int subi(const void *a, ltc_mp_digit b, void *c) } /* mul */ -static int mul(const void *a, const void *b, void *c) +static int mul(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -276,7 +244,7 @@ static int mul(const void *a, const void *b, void *c) return mpi_to_ltc_error(mp_mul(a, b, c)); } -static int muli(const void *a, ltc_mp_digit b, void *c) +static int muli(void *a, unsigned long b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(c != NULL); @@ -284,31 +252,22 @@ static int muli(const void *a, ltc_mp_digit b, void *c) } /* sqr */ -static int sqr(const void *a, void *b) +static int sqr(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) +static int divide(void *a, 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) +static int div_2(void *a, void *b) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -316,7 +275,7 @@ static int div_2(const void *a, void *b) } /* modi */ -static int modi(const void *a, ltc_mp_digit b, ltc_mp_digit *c) +static int modi(void *a, unsigned long b, unsigned long *c) { mp_digit tmp; int err; @@ -329,10 +288,10 @@ static int modi(const void *a, ltc_mp_digit b, ltc_mp_digit *c) } *c = tmp; return CRYPT_OK; -} +} /* gcd */ -static int gcd(const void *a, const void *b, void *c) +static int gcd(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -341,7 +300,7 @@ static int gcd(const void *a, const void *b, void *c) } /* lcm */ -static int lcm(const void *a, const void *b, void *c) +static int lcm(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -349,25 +308,7 @@ static int lcm(const void *a, const void *b, void *c) 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) +static int mulmod(void *a, void *b, void *c, void *d) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -376,7 +317,7 @@ static int mulmod(const void *a, const void *b, const void *c, void *d) return mpi_to_ltc_error(mp_mulmod(a,b,c,d)); } -static int sqrmod(const void *a, const void *b, void *c) +static int sqrmod(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -385,7 +326,7 @@ static int sqrmod(const void *a, const void *b, void *c) } /* invmod */ -static int invmod(const void *a, const void *b, void *c) +static int invmod(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -394,7 +335,7 @@ static int invmod(const void *a, const void *b, void *c) } /* setup */ -static int montgomery_setup(const void *a, void **b) +static int montgomery_setup(void *a, void **b) { int err; LTC_ARGCHK(a != NULL); @@ -403,14 +344,14 @@ static int montgomery_setup(const void *a, void **b) if (*b == NULL) { return CRYPT_MEM; } - if ((err = mpi_to_ltc_error(mp_montgomery_setup(a, *b))) != CRYPT_OK) { + if ((err = mpi_to_ltc_error(mp_montgomery_setup(a, (mp_digit *)*b))) != CRYPT_OK) { XFREE(*b); } return err; } /* get normalization value */ -static int montgomery_normalization(void *a, const void *b) +static int montgomery_normalization(void *a, void *b) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -418,7 +359,7 @@ static int montgomery_normalization(void *a, const void *b) } /* reduce */ -static int montgomery_reduce(void *a, const void *b, void *c) +static int montgomery_reduce(void *a, void *b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -432,45 +373,29 @@ static void montgomery_deinit(void *a) XFREE(a); } -static int exptmod(const void *a, const void *b, const void *c, void *d) +static int exptmod(void *a, void *b, 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) +static int isprime(void *a, int *b) { 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; + LTC_ARGCHK(b != NULL); + err = mpi_to_ltc_error(mp_prime_is_prime(a, 8, b)); + *b = (*b == MP_YES) ? 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, + (int)DIGIT_BIT, &init, &init_copy, @@ -502,7 +427,6 @@ const ltc_math_descriptor ltm_desc = { &mul, &muli, &sqr, - &sqrtmod_prime, ÷, &div_2, &modi, @@ -512,7 +436,7 @@ const ltc_math_descriptor ltm_desc = { &mulmod, &sqrmod, &invmod, - + &montgomery_setup, &montgomery_normalization, &montgomery_reduce, @@ -521,40 +445,30 @@ const ltc_math_descriptor ltm_desc = { &exptmod, &isprime, -#ifdef LTC_MECC -#ifdef LTC_MECC_FP +#ifdef MECC +#ifdef MECC_FP <c_ecc_fp_mulmod, -#else +#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 */ + NULL, NULL, NULL, NULL, +#endif -#ifdef LTC_MRSA +#ifdef MRSA &rsa_make_key, &rsa_exptmod, #else - NULL, NULL, + NULL, NULL #endif - &addmod, - &submod, - - &set_rand, - }; #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/math/multi.c b/src/math/multi.c index 1b7058fa..7d27f878 100644 --- a/src/math/multi.c +++ b/src/math/multi.c @@ -1,9 +1,19 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -#ifdef LTC_MPI -int ltc_mp_init_multi(void **a, ...) +#ifdef MPI +#include + +int ltc_init_multi(void **a, ...) { void **cur = a; int np = 0; @@ -11,54 +21,41 @@ int ltc_mp_init_multi(void **a, ...) va_start(args, a); while (cur != NULL) { - if (ltc_mp_init(cur) != CRYPT_OK) { + if (mp_init(cur) != CRYPT_OK) { /* failed */ va_list clean_list; va_start(clean_list, a); cur = a; while (np--) { - ltc_mp_clear(*cur); + 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; + return CRYPT_OK; } -void ltc_mp_deinit_multi(void *a, ...) +void ltc_deinit_multi(void *a, ...) { void *cur = a; va_list args; va_start(args, a); while (cur != NULL) { - ltc_mp_clear(cur); + 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 6f13806c..ad25cf5e 100644 --- a/src/math/rand_prime.c +++ b/src/math/rand_prime.c @@ -1,37 +1,45 @@ -/* 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)) +/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file rand_prime.c Generate a random prime, Tom St Denis -*/ +*/ + +#define USE_BBS 1 int rand_prime(void *N, long len, prng_state *prng, int wprng) { - int err, res; - unsigned char *buf, bbs; + int err, res, type; + unsigned char *buf; LTC_ARGCHK(N != NULL); + /* get type */ if (len < 0) { - /* Create BBS (Blum Blum Shub) style prime */ - bbs = 0x02; + type = USE_BBS; len = -len; } else { - bbs = 0x00; + type = 0; } /* allow sizes between 2 and 512 bytes for a prime size */ - if (len < 2 || len > 512) { + if (len < 2 || len > 512) { return CRYPT_INVALID_PRIME_SIZE; } - + /* valid PRNG? Better be! */ if ((err = prng_is_valid(wprng)) != CRYPT_OK) { - return err; + return err; } /* allocate buffer to work with */ @@ -49,16 +57,16 @@ int rand_prime(void *N, long len, prng_state *prng, int wprng) /* munge bits */ buf[0] |= 0x80 | 0x40; - buf[len-1] |= 0x01 | bbs; - + buf[len-1] |= 0x01 | ((type & USE_BBS) ? 0x02 : 0x00); + /* load value */ - if ((err = ltc_mp_read_unsigned_bin(N, buf, len)) != CRYPT_OK) { + if ((err = 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) { + if ((err = mp_prime_is_prime(N, 8, &res)) != CRYPT_OK) { XFREE(buf); return err; } @@ -71,6 +79,9 @@ int rand_prime(void *N, long len, prng_state *prng, int wprng) XFREE(buf); return CRYPT_OK; } + -#endif /* LTC_NO_MATH */ +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/math/tfm_desc.c b/src/math/tfm_desc.c index b951b1a4..b1b42469 100644 --- a/src/math/tfm_desc.c +++ b/src/math/tfm_desc.c @@ -1,27 +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@gmail.com, http://libtomcrypt.com + */ #define DESC_DEF_ONLY -#include "tomcrypt_private.h" +#include "tomcrypt.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[] = { @@ -31,7 +25,7 @@ static const struct { }; /** - Convert a tfm error to a LTC error (Possibly the most powerful function ever! Oh wait... no) + 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 */ @@ -39,8 +33,8 @@ 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) { + for (x = 0; x < (int)(sizeof(tfm_to_ltc_codes)/sizeof(tfm_to_ltc_codes[0])); x++) { + if (err == tfm_to_ltc_codes[x].tfm_code) { return tfm_to_ltc_codes[x].ltc_code; } } @@ -65,18 +59,15 @@ static void deinit(void *a) XFREE(a); } -static int neg(const void *a, void *b) +static int neg(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); + fp_neg(((fp_int*)a), ((fp_int*)b)); return CRYPT_OK; } -static int copy(const void *a, void *b) +static int copy(void *a, void *b) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -84,7 +75,7 @@ static int copy(const void *a, void *b) return CRYPT_OK; } -static int init_copy(void **a, const void *b) +static int init_copy(void **a, void *b) { if (init(a) != CRYPT_OK) { return CRYPT_MEM; @@ -93,43 +84,43 @@ static int init_copy(void **a, const void *b) } /* ---- trivial ---- */ -static int set_int(void *a, ltc_mp_digit b) +static int set_int(void *a, unsigned long b) { LTC_ARGCHK(a != NULL); fp_set(a, b); return CRYPT_OK; } -static unsigned long get_int(const void *a) +static unsigned long get_int(void *a) { - const fp_int *A; + 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) +static unsigned long get_digit(void *a, int n) { - const fp_int *A; + 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) +static int get_digit_count(void *a) { - const fp_int *A; + fp_int *A; LTC_ARGCHK(a != NULL); A = a; return A->used; } - -static int compare(const void *a, const void *b) + +static int compare(void *a, void *b) { int ret; LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); - ret = fp_cmp(TFM_UNCONST(void *)a, TFM_UNCONST(void *)b); + ret = fp_cmp(a, b); switch (ret) { case FP_LT: return LTC_MP_LT; case FP_EQ: return LTC_MP_EQ; @@ -138,11 +129,11 @@ static int compare(const void *a, const void *b) return 0; } -static int compare_d(const void *a, ltc_mp_digit b) +static int compare_d(void *a, unsigned long b) { int ret; LTC_ARGCHK(a != NULL); - ret = fp_cmp_d(TFM_UNCONST(void *)a, b); + ret = fp_cmp_d(a, b); switch (ret) { case FP_LT: return LTC_MP_LT; case FP_EQ: return LTC_MP_EQ; @@ -151,16 +142,16 @@ static int compare_d(const void *a, ltc_mp_digit b) return 0; } -static int count_bits(const void *a) +static int count_bits(void *a) { LTC_ARGCHK(a != NULL); - return fp_count_bits(TFM_UNCONST(void *)a); + return fp_count_bits(a); } -static int count_lsb_bits(const void *a) +static int count_lsb_bits(void *a) { LTC_ARGCHK(a != NULL); - return fp_cnt_lsb(TFM_UNCONST(void *)a); + return fp_cnt_lsb(a); } static int twoexpt(void *a, int n) @@ -177,35 +168,35 @@ 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)); + return tfm_to_ltc_error(fp_read_radix(a, (char *)b, radix)); } /* write one */ -static int write_radix(const void *a, char *b, int radix) +static int write_radix(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)); + return tfm_to_ltc_error(fp_toradix(a, b, radix)); } /* get size as unsigned char string */ -static unsigned long unsigned_size(const void *a) +static unsigned long unsigned_size(void *a) { LTC_ARGCHK(a != NULL); - return fp_unsigned_bin_size(TFM_UNCONST(void *)a); + return fp_unsigned_bin_size(a); } /* store */ -static int unsigned_write(const void *a, unsigned char *b) +static int unsigned_write(void *a, unsigned char *b) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); - fp_to_unsigned_bin(TFM_UNCONST(void *)a, b); + fp_to_unsigned_bin(a, b); return CRYPT_OK; } /* read */ -static int unsigned_read(void *a, const unsigned char *b, unsigned long len) +static int unsigned_read(void *a, unsigned char *b, unsigned long len) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); @@ -214,88 +205,86 @@ static int unsigned_read(void *a, const unsigned char *b, unsigned long len) } /* add */ -static int add(const void *a, const void *b, void *c) +static int add(void *a, 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); + fp_add(a, b, c); return CRYPT_OK; } - -static int addi(const void *a, ltc_mp_digit b, void *c) + +static int addi(void *a, unsigned long b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(c != NULL); - fp_add_d(TFM_UNCONST(void *)a, b, c); + fp_add_d(a, b, c); return CRYPT_OK; } /* sub */ -static int sub(const void *a, const void *b, void *c) +static int sub(void *a, 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); + fp_sub(a, b, c); return CRYPT_OK; } -static int subi(const void *a, ltc_mp_digit b, void *c) +static int subi(void *a, unsigned long b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(c != NULL); - fp_sub_d(TFM_UNCONST(void *)a, b, c); + fp_sub_d(a, b, c); return CRYPT_OK; } /* mul */ -static int mul(const void *a, const void *b, void *c) +static int mul(void *a, 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); + fp_mul(a, b, c); return CRYPT_OK; } -static int muli(const void *a, ltc_mp_digit b, void *c) +static int muli(void *a, unsigned long b, void *c) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(c != NULL); - fp_mul_d(TFM_UNCONST(void *)a, b, c); + fp_mul_d(a, b, c); return CRYPT_OK; } /* sqr */ -static int sqr(const void *a, void *b) +static int sqr(void *a, void *b) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); - fp_sqr(TFM_UNCONST(void *)a, b); + fp_sqr(a, b); return CRYPT_OK; } -/* sqrtmod_prime - NOT SUPPORTED */ - /* div */ -static int divide(const void *a, const void *b, void *c, void *d) +static int divide(void *a, 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)); + return tfm_to_ltc_error(fp_div(a, b, c, d)); } -static int div_2(const void *a, void *b) +static int div_2(void *a, void *b) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); - fp_div_2(TFM_UNCONST(void *)a, b); + fp_div_2(a, b); return CRYPT_OK; } /* modi */ -static int modi(const void *a, ltc_mp_digit b, ltc_mp_digit *c) +static int modi(void *a, unsigned long b, unsigned long *c) { fp_digit tmp; int err; @@ -303,79 +292,61 @@ static int modi(const void *a, ltc_mp_digit b, ltc_mp_digit *c) 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) { + if ((err = tfm_to_ltc_error(fp_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) +static int gcd(void *a, 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); + fp_gcd(a, b, c); return CRYPT_OK; } /* lcm */ -static int lcm(const void *a, const void *b, void *c) +static int lcm(void *a, 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); + fp_lcm(a, b, c); return CRYPT_OK; } -static int addmod(const void *a, const void *b, const void *c, void *d) +static int mulmod(void *a, void *b, 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)); + return tfm_to_ltc_error(fp_mulmod(a,b,c,d)); } -static int submod(const void *a, const void *b, const void *c, void *d) +static int sqrmod(void *a, void *b, void *c) { 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)); + return tfm_to_ltc_error(fp_sqrmod(a,b,c)); } /* invmod */ -static int invmod(const void *a, const void *b, void *c) +static int invmod(void *a, 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)); + return tfm_to_ltc_error(fp_invmod(a, b, c)); } /* setup */ -static int montgomery_setup(const void *a, void **b) +static int montgomery_setup(void *a, void **b) { int err; LTC_ARGCHK(a != NULL); @@ -384,29 +355,28 @@ static int montgomery_setup(const void *a, void **b) if (*b == NULL) { return CRYPT_MEM; } - if ((err = tfm_to_ltc_error(fp_montgomery_setup(TFM_UNCONST(void *)a, *b))) != CRYPT_OK) { + if ((err = tfm_to_ltc_error(fp_montgomery_setup(a, (fp_digit *)*b))) != CRYPT_OK) { XFREE(*b); } return err; } /* get normalization value */ -static int montgomery_normalization(void *a, const void *b) +static int montgomery_normalization(void *a, void *b) { LTC_ARGCHK(a != NULL); LTC_ARGCHK(b != NULL); - fp_montgomery_calc_normalization(a, TFM_UNCONST(void *)b); + fp_montgomery_calc_normalization(a, b); return CRYPT_OK; } /* reduce */ -static int montgomery_reduce(void *a, const void *b, void *c) +static int montgomery_reduce(void *a, 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); + fp_montgomery_reduce(a, b, *((fp_digit *)c)); return CRYPT_OK; } @@ -416,33 +386,29 @@ static void montgomery_deinit(void *a) XFREE(a); } -static int exptmod(const void *a, const void *b, const void *c, void *d) +static int exptmod(void *a, void *b, 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)); -} + return tfm_to_ltc_error(fp_exptmod(a,b,c,d)); +} -static int isprime(const void *a, int b, int *c) +static int isprime(void *a, int *b) { 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; + LTC_ARGCHK(b != NULL); + *b = (fp_isprime(a) == FP_YES) ? LTC_MP_YES : LTC_MP_NO; return CRYPT_OK; } -#if defined(LTC_MECC) && defined(LTC_MECC_ACCEL) +#if defined(MECC) && defined(MECC_ACCEL) -static int tfm_ecc_projective_dbl_point(const ecc_point *P, ecc_point *R, const void *ma, const void *modulus, void *Mp) +static int tfm_ecc_projective_dbl_point(ecc_point *P, ecc_point *R, void *modulus, void *Mp) { fp_int t1, t2; fp_digit mp; - int err, inf; LTC_ARGCHK(P != NULL); LTC_ARGCHK(R != NULL); @@ -460,135 +426,90 @@ static int tfm_ecc_projective_dbl_point(const ecc_point *P, ecc_point *R, const 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); + fp_montgomery_reduce(&t1, modulus, mp); /* Z = Y * Z */ fp_mul(R->z, R->y, R->z); - fp_montgomery_reduce(R->z, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(R->z, 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 (fp_cmp(R->z, modulus) != FP_LT) { + fp_sub(R->z, 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); - } + + /* &t2 = X - T1 */ + fp_sub(R->x, &t1, &t2); + if (fp_cmp_d(&t2, 0) == FP_LT) { + fp_add(&t2, modulus, &t2); } - 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); - } + /* T1 = X + T1 */ + fp_add(&t1, R->x, &t1); + if (fp_cmp(&t1, modulus) != FP_LT) { + fp_sub(&t1, modulus, &t1); + } + /* T2 = T1 * T2 */ + fp_mul(&t1, &t2, &t2); + fp_montgomery_reduce(&t2, modulus, mp); + /* T1 = 2T2 */ + fp_add(&t2, &t2, &t1); + if (fp_cmp(&t1, modulus) != FP_LT) { + fp_sub(&t1, modulus, &t1); + } + /* T1 = T1 + T2 */ + fp_add(&t1, &t2, &t1); + if (fp_cmp(&t1, modulus) != FP_LT) { + fp_sub(&t1, 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); + if (fp_cmp(R->y, modulus) != FP_LT) { + fp_sub(R->y, modulus, R->y); } /* Y = Y * Y */ fp_sqr(R->y, R->y); - fp_montgomery_reduce(R->y, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(R->y, modulus, mp); /* T2 = Y * Y */ fp_sqr(R->y, &t2); - fp_montgomery_reduce(&t2, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(&t2, modulus, mp); /* T2 = T2/2 */ if (fp_isodd(&t2)) { - fp_add(&t2, TFM_UNCONST(void *)modulus, &t2); + fp_add(&t2, 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); + fp_montgomery_reduce(R->y, modulus, mp); /* X = T1 * T1 */ fp_sqr(&t1, R->x); - fp_montgomery_reduce(R->x, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(R->x, 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); + fp_add(R->x, 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); + fp_add(R->x, modulus, R->x); } - /* Y = Y - 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); + fp_add(R->y, modulus, R->y); } /* Y = Y * T1 */ fp_mul(R->y, &t1, R->y); - fp_montgomery_reduce(R->y, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(R->y, 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); + fp_add(R->y, modulus, R->y); } - + return CRYPT_OK; } @@ -598,15 +519,14 @@ static int tfm_ecc_projective_dbl_point(const ecc_point *P, ecc_point *R, const @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() + @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) +static int tfm_ecc_projective_add_point(ecc_point *P, ecc_point *Q, ecc_point *R, void *modulus, void *Mp) { fp_int t1, t2, x, y, z; - fp_digit mp; - int err, inf; - + fp_digit mp; + LTC_ARGCHK(P != NULL); LTC_ARGCHK(Q != NULL); LTC_ARGCHK(R != NULL); @@ -621,54 +541,12 @@ static int tfm_ecc_projective_add_point(const ecc_point *P, const ecc_point *Q, 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) && + fp_sub(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); + return tfm_ecc_projective_dbl_point(P, R, modulus, Mp); } fp_copy(P->x, &x); @@ -679,145 +557,129 @@ dbl_point: if (Q->z != NULL) { /* T1 = Z' * Z' */ fp_sqr(Q->z, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(&t1, modulus, mp); /* X = X * T1 */ fp_mul(&t1, &x, &x); - fp_montgomery_reduce(&x, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(&x, modulus, mp); /* T1 = Z' * T1 */ fp_mul(Q->z, &t1, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(&t1, modulus, mp); /* Y = Y * T1 */ fp_mul(&t1, &y, &y); - fp_montgomery_reduce(&y, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(&y, modulus, mp); } /* T1 = Z*Z */ fp_sqr(&z, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(&t1, modulus, mp); /* T2 = X' * T1 */ fp_mul(Q->x, &t1, &t2); - fp_montgomery_reduce(&t2, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(&t2, modulus, mp); /* T1 = Z * T1 */ fp_mul(&z, &t1, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(&t1, 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; - } + fp_montgomery_reduce(&t1, modulus, mp); /* Y = Y - T1 */ fp_sub(&y, &t1, &y); if (fp_cmp_d(&y, 0) == FP_LT) { - fp_add(&y, TFM_UNCONST(void *)modulus, &y); + fp_add(&y, 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); + if (fp_cmp(&t1, modulus) != FP_LT) { + fp_sub(&t1, 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); + if (fp_cmp(&t1, modulus) != FP_LT) { + fp_sub(&t1, 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); + fp_add(&x, 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); + if (fp_cmp(&t2, modulus) != FP_LT) { + fp_sub(&t2, 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 (fp_cmp(&t2, modulus) != FP_LT) { + fp_sub(&t2, 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); + fp_montgomery_reduce(&z, modulus, mp); } /* Z = Z * X */ fp_mul(&z, &x, &z); - fp_montgomery_reduce(&z, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(&z, modulus, mp); /* T1 = T1 * X */ fp_mul(&t1, &x, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(&t1, modulus, mp); /* X = X * X */ fp_sqr(&x, &x); - fp_montgomery_reduce(&x, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(&x, modulus, mp); /* T2 = T2 * x */ fp_mul(&t2, &x, &t2); - fp_montgomery_reduce(&t2, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(&t2, modulus, mp); /* T1 = T1 * X */ fp_mul(&t1, &x, &t1); - fp_montgomery_reduce(&t1, TFM_UNCONST(void *)modulus, mp); - + fp_montgomery_reduce(&t1, modulus, mp); + /* X = Y*Y */ fp_sqr(&y, &x); - fp_montgomery_reduce(&x, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(&x, 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); + fp_add(&x, 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); - } + fp_add(&t2, 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); + fp_add(&t2, modulus, &t2); } /* T2 = T2 * Y */ fp_mul(&t2, &y, &t2); - fp_montgomery_reduce(&t2, TFM_UNCONST(void *)modulus, mp); + fp_montgomery_reduce(&t2, 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); + fp_add(&y, modulus, &y); } /* Y = Y/2 */ if (fp_isodd(&y)) { - fp_add(&y, TFM_UNCONST(void *)modulus, &y); + fp_add(&y, 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", @@ -853,7 +715,6 @@ const ltc_math_descriptor tfm_desc = { &mul, &muli, &sqr, - NULL, /* TODO: &sqrtmod_prime */ ÷, &div_2, &modi, @@ -872,45 +733,36 @@ const ltc_math_descriptor tfm_desc = { &exptmod, &isprime, -#ifdef LTC_MECC -#ifdef LTC_MECC_FP +#ifdef MECC +#ifdef MECC_FP <c_ecc_fp_mulmod, #else <c_ecc_mulmod, -#endif /* LTC_MECC_FP */ -#ifdef LTC_MECC_ACCEL +#endif /* MECC_FP */ +#ifdef 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 */ +#endif <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 */ + NULL, NULL, NULL, NULL, +#endif -#ifdef LTC_MRSA +#ifdef MRSA &rsa_make_key, &rsa_exptmod, #else - NULL, NULL, + NULL, NULL #endif - &addmod, - &submod, - - set_rand, - + }; #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 20a9ef3e..60aedcfb 100644 --- a/src/misc/base64/base64_decode.c +++ b/src/misc/base64/base64_decode.c @@ -1,26 +1,27 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.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) +#ifdef BASE64 -/* 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, +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, @@ -40,44 +41,17 @@ static const unsigned char map_base64[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 }; -#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) +/** + 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 unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { unsigned long t, x, y, z; unsigned char c; @@ -87,145 +61,44 @@ static int s_base64_decode_internal(const char *in, unsigned long inlen, LTC_ARGCHK(out != NULL); LTC_ARGCHK(outlen != NULL); - g = 0; /* '=' counter */ + g = 3; 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) { + c = map[in[x]&0xFF]; + if (c == 255) continue; + /* the final = symbols are read and used to trim the remaining bytes */ + if (c == 254) { + c = 0; + /* prevent g < 0 which would potentially allow an overflow later */ + if (--g < 0) { 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) */ + } else if (g != 3) { + /* we only allow = to be at the end */ return CRYPT_INVALID_PACKET; } t = (t<<6)|c; if (++y == 4) { - if (z + 3 > *outlen) return CRYPT_BUFFER_OVERFLOW; + if (z + g > *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); + 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) { - 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); + return CRYPT_INVALID_PACKET; } *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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/base64/base64_encode.c b/src/misc/base64/base64_encode.c index ef8aee90..7f4b11d8 100644 --- a/src/misc/base64/base64_encode.c +++ b/src/misc/base64/base64_encode.c @@ -1,103 +1,26 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.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) +#ifdef BASE64 -#if defined(LTC_BASE64) -static const char * const codes_base64 = +static const char *codes = "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 @@ -106,54 +29,53 @@ static int s_base64_encode_internal(const unsigned char *in, unsigned long in @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) +int base64_encode(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { - return s_base64_encode_internal(in, inlen, out, outlen, codes_base64, pad); -} + unsigned long i, len2, leven; + unsigned char *p; -/** - 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 */ + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + /* valid output size ? */ + len2 = 4 * ((inlen + 2) / 3); + if (*outlen < len2 + 1) { + *outlen = len2 + 1; + return CRYPT_BUFFER_OVERFLOW; + } + 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; + } + /* Pad it if necessary... */ + if (i < inlen) { + unsigned a = in[0]; + unsigned b = (i+1 < inlen) ? in[1] : 0; -#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); -} + *p++ = codes[(a >> 2) & 0x3F]; + *p++ = codes[(((a & 3) << 4) + (b >> 4)) & 0x3F]; + *p++ = (i+1 < inlen) ? codes[(((b & 0xf) << 2)) & 0x3F] : '='; + *p++ = '='; + } -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); + /* append a NULL byte */ + *p = '\0'; + + /* return ok */ + *outlen = p - out; + return CRYPT_OK; } -#endif /* LTC_BASE64_URL */ #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 5d276a45..0f51a186 100644 --- a/src/misc/burn_stack.c +++ b/src/misc/burn_stack.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file burn_stack.c @@ -15,9 +23,12 @@ void burn_stack(unsigned long len) { unsigned char buf[32]; zeromem(buf, sizeof(buf)); - if (len > (unsigned long)sizeof(buf)) { + if (len > (unsigned long)sizeof(buf)) burn_stack(len - sizeof(buf)); - } } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 1a6fd669..7b4e7df1 100644 --- a/src/misc/crypt/crypt.c +++ b/src/misc/crypt/crypt.c @@ -1,430 +1,250 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.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 " SCRYPT " (Tom St Denis, tomstdenis@gmail.com)\n" "LibTomCrypt is public domain software.\n" -#if defined(INCLUDE_BUILD_DATE) - "Built on " __DATE__ " at " __TIME__ "\n\n" -#endif - "\nEndianness: " + "Built on " __DATE__ " at " __TIME__ "\n\n\n" + "Endianess: " #if defined(ENDIAN_NEUTRAL) - "neutral/" -#endif -#if defined(ENDIAN_LITTLE) + "neutral\n" +#elif 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" + " (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(LTC_CLEAN_STACK) "enabled\n" #else "disabled\n" #endif - "\nCiphers built-in:\n" -#if defined(LTC_BLOWFISH) + "Ciphers built-in:\n" +#if defined(BLOWFISH) " Blowfish\n" #endif -#if defined(LTC_RC2) +#if defined(RC2) " RC2\n" #endif -#if defined(LTC_RC5) +#if defined(RC5) " RC5\n" #endif -#if defined(LTC_RC6) +#if defined(RC6) " RC6\n" #endif -#if defined(LTC_SAFERP) +#if defined(SAFERP) " Safer+\n" #endif -#if defined(LTC_SAFER) +#if defined(SAFER) " Safer\n" #endif -#if defined(LTC_RIJNDAEL) +#if defined(RIJNDAEL) " Rijndael\n" #endif -#if defined(LTC_XTEA) +#if defined(XTEA) " XTEA\n" #endif -#if defined(LTC_TWOFISH) +#if defined(TWOFISH) " Twofish " - #if defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_TABLES) && defined(LTC_TWOFISH_ALL_TABLES) + #if defined(TWOFISH_SMALL) && defined(TWOFISH_TABLES) && defined(TWOFISH_ALL_TABLES) "(small, tables, all_tables)\n" - #elif defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_TABLES) + #elif defined(TWOFISH_SMALL) && defined(TWOFISH_TABLES) "(small, tables)\n" - #elif defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_ALL_TABLES) + #elif defined(TWOFISH_SMALL) && defined(TWOFISH_ALL_TABLES) "(small, all_tables)\n" - #elif defined(LTC_TWOFISH_TABLES) && defined(LTC_TWOFISH_ALL_TABLES) + #elif defined(TWOFISH_TABLES) && defined(TWOFISH_ALL_TABLES) "(tables, all_tables)\n" - #elif defined(LTC_TWOFISH_SMALL) + #elif defined(TWOFISH_SMALL) "(small)\n" - #elif defined(LTC_TWOFISH_TABLES) + #elif defined(TWOFISH_TABLES) "(tables)\n" - #elif defined(LTC_TWOFISH_ALL_TABLES) + #elif defined(TWOFISH_ALL_TABLES) "(all_tables)\n" #else "\n" #endif #endif -#if defined(LTC_DES) +#if defined(DES) " DES\n" - " DES-X\n" - " 3DES\n" #endif -#if defined(LTC_SM4) - " SM4\n" -#endif -#if defined(LTC_CAST5) +#if defined(CAST5) " CAST5\n" #endif -#if defined(LTC_NOEKEON) +#if defined(NOEKEON) " Noekeon\n" #endif -#if defined(LTC_SKIPJACK) +#if defined(SKIPJACK) " Skipjack\n" #endif -#if defined(LTC_KHAZAD) +#if defined(KHAZAD) " Khazad\n" #endif -#if defined(LTC_ANUBIS) +#if defined(ANUBIS) " Anubis " #endif -#if defined(LTC_ANUBIS_TWEAK) +#if defined(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) +#if defined(SHA512) " SHA-512\n" #endif -#if defined(LTC_SHA384) +#if defined(SHA384) " SHA-384\n" #endif -#if defined(LTC_SHA512_256) - " SHA-512/256\n" -#endif -#if defined(LTC_SHA256) +#if defined(SHA256) " SHA-256\n" #endif -#if defined(LTC_SHA512_224) - " SHA-512/224\n" -#endif -#if defined(LTC_SHA224) +#if defined(SHA224) " SHA-224\n" #endif -#if defined(LTC_TIGER) +#if defined(TIGER) " TIGER\n" #endif -#if defined(LTC_SHA1) +#if defined(SHA1) " SHA1\n" #endif -#if defined(LTC_MD5) +#if defined(MD5) " MD5\n" #endif -#if defined(LTC_MD4) +#if defined(MD4) " MD4\n" #endif -#if defined(LTC_MD2) +#if defined(MD2) " MD2\n" #endif -#if defined(LTC_RIPEMD128) +#if defined(RIPEMD128) " RIPEMD128\n" #endif -#if defined(LTC_RIPEMD160) +#if defined(RIPEMD160) " RIPEMD160\n" #endif -#if defined(LTC_RIPEMD256) - " RIPEMD256\n" -#endif -#if defined(LTC_RIPEMD320) - " RIPEMD320\n" -#endif -#if defined(LTC_WHIRLPOOL) +#if defined(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" +#if defined(CHC_HASH) + " CHC_HASH \n" #endif "\nBlock Chaining Modes:\n" -#if defined(LTC_CFB_MODE) +#if defined(CFB) " CFB\n" #endif -#if defined(LTC_OFB_MODE) +#if defined(OFB) " OFB\n" #endif -#if defined(LTC_ECB_MODE) +#if defined(ECB) " ECB\n" #endif -#if defined(LTC_CBC_MODE) +#if defined(CBC) " CBC\n" #endif -#if defined(LTC_CTR_MODE) +#if defined(CTR) " CTR\n" #endif -#if defined(LTC_LRW_MODE) - " LRW" -#if defined(LTC_LRW_TABLES) - " (tables) " +#if defined(LRW_MODE) + " LRW_MODE" +#if defined(LRW_TABLES) + " (LRW_TABLES) " #endif "\n" #endif #if defined(LTC_F8_MODE) - " F8\n" -#endif -#if defined(LTC_XTS_MODE) - " XTS\n" -#endif + " F8 MODE\n" +#endif "\nMACs:\n" -#if defined(LTC_HMAC) +#if defined(HMAC) " HMAC\n" #endif -#if defined(LTC_OMAC) +#if defined(OMAC) " OMAC\n" #endif -#if defined(LTC_PMAC) +#if defined(PMAC) " PMAC\n" #endif -#if defined(LTC_PELICAN) +#if defined(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" +#if defined(EAX_MODE) + " EAX_MODE\n" #endif -#if defined(LTC_OCB_MODE) - " OCB\n" +#if defined(OCB_MODE) + " OCB_MODE\n" #endif -#if defined(LTC_OCB3_MODE) - " OCB3\n" +#if defined(CCM_MODE) + " CCM_MODE\n" #endif -#if defined(LTC_CCM_MODE) - " CCM\n" +#if defined(GCM_MODE) + " GCM_MODE " #endif -#if defined(LTC_GCM_MODE) - " GCM" -#if defined(LTC_GCM_TABLES) - " (tables) " -#endif -#if defined(LTC_GCM_TABLES_SSE2) - " (SSE2) " +#if defined(GCM_TABLES) + " (GCM_TABLES) " #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" +#if defined(YARROW) + " Yarrow\n" #endif -#if defined(LTC_SPRNG) +#if defined(SPRNG) " SPRNG\n" #endif -#if defined(LTC_RC4) +#if defined(RC4) " RC4\n" #endif -#if defined(LTC_CHACHA20_PRNG) - " ChaCha20\n" +#if defined(FORTUNA) + " Fortuna\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) +#if defined(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)" + "\nPK Algs:\n" +#if defined(MRSA) + " RSA \n" #endif - "\n" +#if defined(MECC) + " ECC\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) +#if defined(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 +#if defined(MKAT) + " Katja\n" +#endif "\nCompiler:\n" -#if defined(_WIN64) - " WIN64 platform detected.\n" -#elif defined(_WIN32) +#if defined(WIN32) " WIN32 platform detected.\n" #endif #if defined(__CYGWIN__) @@ -436,162 +256,46 @@ const char *crypt_build_settings = #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" +#if defined(__GNUC__) + " GCC compiler detected.\n" +#endif +#if defined(INTEL_CC) + " Intel C Compiler detected.\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 + " LTC_PPC32 defined \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) +#if defined(BASE64) " BASE64 " #endif -#if defined(LTC_BASE64_URL) - " BASE64-URL-SAFE " +#if defined(MPI) + " MPI " #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 " +#if defined(TRY_UNRANDOM_FIRST) + " TRY_UNRANDOM_FIRST " #endif #if defined(LTC_TEST) " LTC_TEST " #endif -#if defined(LTC_TEST_DBG) - " " NAME_VALUE(LTC_TEST_DBG) " " +#if defined(PKCS_1) + " PKCS#1 " #endif -#if defined(LTC_TEST_EXT) - " LTC_TEST_EXT " +#if defined(PKCS_5) + " PKCS#5 " #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) " " +#if defined(LTC_DER) + " LTC_DER " #endif #if defined(LTC_FAST) " LTC_FAST " @@ -599,34 +303,12 @@ const char *crypt_build_settings = #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 @@ -636,24 +318,29 @@ const char *crypt_build_settings = #if defined(LTC_PTHREAD) " LTC_PTHREAD " #endif +#if defined(LTM_DESC) + " LTM_DESC " +#endif +#if defined(TFM_DESC) + " TFM_DESC " +#endif +#if defined(MECC_ACCEL) + " MECC_ACCEL " +#endif +#if defined(GMP_DESC) + " GMP_DESC " +#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 " + " (easy) " +#endif +#if defined(MECC_FP) + " MECC_FP " #endif "\n" + "\n\n\n" ; + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_argchk.c b/src/misc/crypt/crypt_argchk.c index 85b562a4..1ad27145 100644 --- a/src/misc/crypt/crypt_argchk.c +++ b/src/misc/crypt/crypt_argchk.c @@ -1,17 +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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" +#include /** @file crypt_argchk.c Perform argument checking, Tom St Denis -*/ +*/ #if (ARGTYPE == 0) -void crypt_argchk(const char *v, const char *s, int d) +void crypt_argchk(char *v, char *s, int d) { fprintf(stderr, "LTC_ARGCHK '%s' failure on line %d of file %s\n", v, d, s); - abort(); + (void)raise(SIGABRT); } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_cipher_descriptor.c b/src/misc/crypt/crypt_cipher_descriptor.c index b79ff33b..9f34480a 100644 --- a/src/misc/crypt/crypt_cipher_descriptor.c +++ b/src/misc/crypt/crypt_cipher_descriptor.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_cipher_descriptor.c @@ -8,8 +16,12 @@ */ 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 } +{ NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } }; LTC_MUTEX_GLOBAL(ltc_cipher_mutex) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_cipher_is_valid.c b/src/misc/crypt/crypt_cipher_is_valid.c index 8745acea..983186b1 100644 --- a/src/misc/crypt/crypt_cipher_is_valid.c +++ b/src/misc/crypt/crypt_cipher_is_valid.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_cipher_is_valid.c @@ -22,3 +30,7 @@ int cipher_is_valid(int idx) LTC_MUTEX_UNLOCK(<c_cipher_mutex); return CRYPT_OK; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index e45da9cd..e1e5449a 100644 --- a/src/misc/crypt/crypt_find_cipher.c +++ b/src/misc/crypt/crypt_find_cipher.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_find_cipher.c @@ -18,7 +26,7 @@ int find_cipher(const char *name) 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)) { + if (cipher_descriptor[x].name != NULL && !strcmp(cipher_descriptor[x].name, name)) { LTC_MUTEX_UNLOCK(<c_cipher_mutex); return x; } @@ -27,3 +35,7 @@ int find_cipher(const char *name) return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_find_cipher_any.c b/src/misc/crypt/crypt_find_cipher_any.c index 5089733a..e3eefc28 100644 --- a/src/misc/crypt/crypt_find_cipher_any.c +++ b/src/misc/crypt/crypt_find_cipher_any.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_find_cipher_any.c @@ -8,7 +16,7 @@ */ /** - Find a cipher flexibly. First by name then if not present by block and key size + 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) @@ -18,10 +26,10 @@ 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_ARGCHK(name != NULL); + + x = find_cipher(name); + if (x != -1) return x; LTC_MUTEX_LOCK(<c_cipher_mutex); for (x = 0; x < TAB_SIZE; x++) { @@ -36,3 +44,7 @@ int find_cipher_any(const char *name, int blocklen, int keylen) LTC_MUTEX_UNLOCK(<c_cipher_mutex); return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_find_cipher_id.c b/src/misc/crypt/crypt_find_cipher_id.c index 4876e4a1..145f44be 100644 --- a/src/misc/crypt/crypt_find_cipher_id.c +++ b/src/misc/crypt/crypt_find_cipher_id.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_find_cipher_id.c @@ -26,3 +34,7 @@ int find_cipher_id(unsigned char ID) LTC_MUTEX_UNLOCK(<c_cipher_mutex); return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_find_hash.c b/src/misc/crypt/crypt_find_hash.c index 4d8ae49e..9882dfb6 100644 --- a/src/misc/crypt/crypt_find_hash.c +++ b/src/misc/crypt/crypt_find_hash.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_find_hash.c @@ -18,7 +26,7 @@ int find_hash(const char *name) 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) { + if (hash_descriptor[x].name != NULL && strcmp(hash_descriptor[x].name, name) == 0) { LTC_MUTEX_UNLOCK(<c_hash_mutex); return x; } @@ -26,3 +34,7 @@ int find_hash(const char *name) LTC_MUTEX_UNLOCK(<c_hash_mutex); return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_find_hash_any.c b/src/misc/crypt/crypt_find_hash_any.c index 118e777e..3063e844 100644 --- a/src/misc/crypt/crypt_find_hash_any.c +++ b/src/misc/crypt/crypt_find_hash_any.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_find_hash_any.c @@ -8,12 +16,11 @@ */ /** - Find a hash flexibly. First by name then if not present by digest size + 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 find_hash_any(const char *name, int digestlen) { int x, y, z; LTC_ARGCHK(name != NULL); @@ -36,3 +43,7 @@ int find_hash_any(const char *name, int digestlen) LTC_MUTEX_UNLOCK(<c_hash_mutex); return z; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_find_hash_id.c b/src/misc/crypt/crypt_find_hash_id.c index 5de40951..951fca03 100644 --- a/src/misc/crypt/crypt_find_hash_id.c +++ b/src/misc/crypt/crypt_find_hash_id.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_find_hash_id.c @@ -26,3 +34,7 @@ int find_hash_id(unsigned char ID) LTC_MUTEX_UNLOCK(<c_hash_mutex); return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_find_hash_oid.c b/src/misc/crypt/crypt_find_hash_oid.c index 0e10235b..9c7c6022 100644 --- a/src/misc/crypt/crypt_find_hash_oid.c +++ b/src/misc/crypt/crypt_find_hash_oid.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_find_hash_oid.c @@ -13,7 +21,7 @@ int find_hash_oid(const unsigned long *ID, unsigned long IDlen) 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)) { + if (hash_descriptor[x].name != NULL && hash_descriptor[x].OIDlen == IDlen && !memcmp(hash_descriptor[x].OID, ID, sizeof(unsigned long) * IDlen)) { LTC_MUTEX_UNLOCK(<c_hash_mutex); return x; } @@ -21,3 +29,7 @@ int find_hash_oid(const unsigned long *ID, unsigned long IDlen) LTC_MUTEX_UNLOCK(<c_hash_mutex); return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_find_prng.c b/src/misc/crypt/crypt_find_prng.c index 7297982b..faca9466 100644 --- a/src/misc/crypt/crypt_find_prng.c +++ b/src/misc/crypt/crypt_find_prng.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_find_prng.c @@ -18,7 +26,7 @@ int find_prng(const char *name) 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) { + if ((prng_descriptor[x].name != NULL) && strcmp(prng_descriptor[x].name, name) == 0) { LTC_MUTEX_UNLOCK(<c_prng_mutex); return x; } @@ -27,3 +35,7 @@ int find_prng(const char *name) return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 08e0238c..619cdf37 100644 --- a/src/misc/crypt/crypt_hash_descriptor.c +++ b/src/misc/crypt/crypt_hash_descriptor.c @@ -1,10 +1,18 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_hash_descriptor.c - Stores the hash descriptor table, Tom St Denis + Stores the hash descriptor table, Tom St Denis */ struct ltc_hash_descriptor hash_descriptor[TAB_SIZE] = { @@ -13,3 +21,7 @@ struct ltc_hash_descriptor hash_descriptor[TAB_SIZE] = { LTC_MUTEX_GLOBAL(ltc_hash_mutex) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_hash_is_valid.c b/src/misc/crypt/crypt_hash_is_valid.c index c2d9fd93..5ef3bd54 100644 --- a/src/misc/crypt/crypt_hash_is_valid.c +++ b/src/misc/crypt/crypt_hash_is_valid.c @@ -1,11 +1,19 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_hash_is_valid.c Determine if hash is valid, Tom St Denis -*/ +*/ /* Test if a hash index is valid @@ -22,3 +30,7 @@ int hash_is_valid(int idx) LTC_MUTEX_UNLOCK(<c_hash_mutex); return CRYPT_OK; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 760ba634..907862f9 100644 --- a/src/misc/crypt/crypt_ltc_mp_descriptor.c +++ b/src/misc/crypt/crypt_ltc_mp_descriptor.c @@ -1,6 +1,13 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/* Initialize ltc_mp to nulls, to force allocation on all platforms, including macOS. */ -ltc_math_descriptor ltc_mp = { 0 }; +ltc_math_descriptor ltc_mp; diff --git a/src/misc/crypt/crypt_prng_descriptor.c b/src/misc/crypt/crypt_prng_descriptor.c index 94c26b8d..3c6d2086 100644 --- a/src/misc/crypt/crypt_prng_descriptor.c +++ b/src/misc/crypt/crypt_prng_descriptor.c @@ -1,14 +1,26 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.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) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_prng_is_valid.c b/src/misc/crypt/crypt_prng_is_valid.c index f1ba67b1..dac9847d 100644 --- a/src/misc/crypt/crypt_prng_is_valid.c +++ b/src/misc/crypt/crypt_prng_is_valid.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_prng_is_valid.c @@ -22,3 +30,7 @@ int prng_is_valid(int idx) LTC_MUTEX_UNLOCK(<c_prng_mutex); return CRYPT_OK; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 6998ca4c..c5e8c551 100644 --- a/src/misc/crypt/crypt_register_cipher.c +++ b/src/misc/crypt/crypt_register_cipher.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_register_cipher.c @@ -14,13 +22,10 @@ */ int register_cipher(const struct ltc_cipher_descriptor *cipher) { - int x, blank = -1; + int x; 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++) { @@ -28,17 +33,22 @@ int register_cipher(const struct ltc_cipher_descriptor *cipher) 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)); + for (x = 0; x < TAB_SIZE; x++) { + if (cipher_descriptor[x].name == NULL) { + XMEMCPY(&cipher_descriptor[x], cipher, sizeof(struct ltc_cipher_descriptor)); + LTC_MUTEX_UNLOCK(<c_cipher_mutex); + return x; + } } /* no spot */ LTC_MUTEX_UNLOCK(<c_cipher_mutex); - return blank; + return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_register_hash.c b/src/misc/crypt/crypt_register_hash.c index 6390df9d..c96bae79 100644 --- a/src/misc/crypt/crypt_register_hash.c +++ b/src/misc/crypt/crypt_register_hash.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_register_hash.c @@ -14,31 +22,33 @@ */ int register_hash(const struct ltc_hash_descriptor *hash) { - int x, blank = -1; + int x; 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) { + if (memcmp(&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)); + /* find a blank spot */ + for (x = 0; x < TAB_SIZE; x++) { + if (hash_descriptor[x].name == NULL) { + XMEMCPY(&hash_descriptor[x], hash, sizeof(struct ltc_hash_descriptor)); + LTC_MUTEX_UNLOCK(<c_hash_mutex); + return x; + } } /* no spot */ LTC_MUTEX_UNLOCK(<c_hash_mutex); - return blank; + return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_register_prng.c b/src/misc/crypt/crypt_register_prng.c index fb0782eb..cee4512a 100644 --- a/src/misc/crypt/crypt_register_prng.c +++ b/src/misc/crypt/crypt_register_prng.c @@ -1,12 +1,20 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.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 @@ -14,31 +22,33 @@ */ int register_prng(const struct ltc_prng_descriptor *prng) { - int x, blank = -1; + int x; 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) { + if (memcmp(&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)); + for (x = 0; x < TAB_SIZE; x++) { + if (prng_descriptor[x].name == NULL) { + XMEMCPY(&prng_descriptor[x], prng, sizeof(struct ltc_prng_descriptor)); + LTC_MUTEX_UNLOCK(<c_prng_mutex); + return x; + } } /* no spot */ LTC_MUTEX_UNLOCK(<c_prng_mutex); - return blank; + return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index bebf9206..242f5cb0 100644 --- a/src/misc/crypt/crypt_unregister_cipher.c +++ b/src/misc/crypt/crypt_unregister_cipher.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_unregister_cipher.c @@ -21,7 +29,7 @@ int unregister_cipher(const struct ltc_cipher_descriptor *cipher) /* 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) { + if (memcmp(&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); @@ -31,3 +39,7 @@ int unregister_cipher(const struct ltc_cipher_descriptor *cipher) LTC_MUTEX_UNLOCK(<c_cipher_mutex); return CRYPT_ERROR; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_unregister_hash.c b/src/misc/crypt/crypt_unregister_hash.c index c2374d01..59362159 100644 --- a/src/misc/crypt/crypt_unregister_hash.c +++ b/src/misc/crypt/crypt_unregister_hash.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_unregister_hash.c @@ -21,7 +29,7 @@ int unregister_hash(const struct ltc_hash_descriptor *hash) /* 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) { + if (memcmp(&hash_descriptor[x], hash, sizeof(struct ltc_hash_descriptor)) == 0) { hash_descriptor[x].name = NULL; LTC_MUTEX_UNLOCK(<c_hash_mutex); return CRYPT_OK; @@ -30,3 +38,7 @@ int unregister_hash(const struct ltc_hash_descriptor *hash) LTC_MUTEX_UNLOCK(<c_hash_mutex); return CRYPT_ERROR; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_unregister_prng.c b/src/misc/crypt/crypt_unregister_prng.c index 1aa11e00..ef43d61e 100644 --- a/src/misc/crypt/crypt_unregister_prng.c +++ b/src/misc/crypt/crypt_unregister_prng.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file crypt_unregister_prng.c @@ -17,11 +25,11 @@ 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) { + if (memcmp(&prng_descriptor[x], prng, sizeof(struct ltc_prng_descriptor)) != 0) { prng_descriptor[x].name = NULL; LTC_MUTEX_UNLOCK(<c_prng_mutex); return CRYPT_OK; @@ -30,3 +38,7 @@ int unregister_prng(const struct ltc_prng_descriptor *prng) LTC_MUTEX_UNLOCK(<c_prng_mutex); return CRYPT_ERROR; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index fd306bba..a6ddb3e4 100644 --- a/src/misc/error_to_string.c +++ b/src/misc/error_to_string.c @@ -1,20 +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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +#include "tomcrypt.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] = +static const char *err_2_str[] = { "CRYPT_OK", "CRYPT_ERROR", "Non-fatal 'no-operation' requested.", - "Invalid key size.", + "Invalid keysize for block cipher.", "Invalid number of rounds for block cipher.", "Algorithm failed test vectors.", @@ -37,25 +45,15 @@ static const char * const err_2_str[CRYPT_ERR_NUM] = "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 PK system.", + "Duplicate PK key found on keyring.", + "Key not found in keyring.", + "Invalid sized parameter.", "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 @@ -63,9 +61,14 @@ LTC_STATIC_ASSERT(correct_err_2_str_size, LTC_ARRAY_SIZE(err_2_str) == CRYPT_ERR */ const char *error_to_string(int err) { - if (err < 0 || err >= CRYPT_ERR_NUM) { + if (err < 0 || err >= (int)(sizeof(err_2_str)/sizeof(err_2_str[0]))) { return "Invalid error code."; - } - return err_2_str[err]; + } else { + return err_2_str[err]; + } } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index ea9c19ce..20ae9e13 100644 --- a/src/misc/pkcs5/pkcs_5_1.c +++ b/src/misc/pkcs5/pkcs_5_1.c @@ -1,24 +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@gmail.com, http://libtomcrypt.com + */ +#include -/** +/** @file pkcs_5_1.c PKCS #5, Algorithm #1, Tom St Denis */ -#ifdef LTC_PKCS_5 +#ifdef 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. - + Execute PKCS #5 v1 @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 @@ -26,34 +24,23 @@ @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 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; - /* 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; @@ -66,68 +53,42 @@ static int s_pkcs_5_alg1_common(const unsigned char *password, if (md != NULL) { XFREE(md); } - if (buf != NULL) { + if (buf != NULL) { XFREE(buf); } return CRYPT_MEM; + } + + /* hash initial password + salt */ + if ((err = hash_descriptor[hash_idx].init(md)) != 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; } - 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; + 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 LBL_ERR; } } - /* 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; - } + /* 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; LBL_ERR: -#ifdef LTC_CLEAN_STACK +#ifdef LTC_CLEAN_STACK zeromem(buf, MAXBLOCKSIZE); zeromem(md, sizeof(hash_state)); #endif @@ -138,48 +99,8 @@ LBL_ERR: 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/pkcs5/pkcs_5_2.c b/src/misc/pkcs5/pkcs_5_2.c index 61ebd006..34fef2b9 100644 --- a/src/misc/pkcs5/pkcs_5_2.c +++ b/src/misc/pkcs5/pkcs_5_2.c @@ -1,12 +1,20 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include -/** +/** @file pkcs_5_2.c PKCS #5, Algorithm #2, Tom St Denis */ -#ifdef LTC_PKCS_5 +#ifdef PKCS_5 /** Execute PKCS #5 v2 @@ -20,7 +28,7 @@ @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) @@ -36,10 +44,6 @@ int pkcs_5_alg2(const unsigned char *password, unsigned long password_len, 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; @@ -65,13 +69,13 @@ 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) { + if ((err = hmac_init(hmac, hash_idx, password, password_len)) != CRYPT_OK) { goto LBL_ERR; } if ((err = hmac_process(hmac, salt, salt_len)) != CRYPT_OK) { @@ -119,3 +123,7 @@ LBL_ERR: #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 7d149948..09b70235 100644 --- a/src/misc/zeromem.c +++ b/src/misc/zeromem.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file zeromem.c @@ -12,11 +20,15 @@ @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) +void zeromem(void *out, size_t outlen) { - volatile char *mem = out; + unsigned char *mem = out; LTC_ARGCHKVD(out != NULL); while (outlen-- > 0) { - *mem++ = '\0'; + *mem++ = 0; } } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cbc/cbc_decrypt.c b/src/modes/cbc/cbc_decrypt.c index 99c947d5..cef9cc3b 100644 --- a/src/modes/cbc/cbc_decrypt.c +++ b/src/modes/cbc/cbc_decrypt.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file cbc_decrypt.c @@ -8,7 +16,7 @@ */ -#ifdef LTC_CBC_MODE +#ifdef CBC /** CBC decrypt @@ -26,59 +34,64 @@ int cbc_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, s LTC_FAST_TYPE tmpy; #else unsigned char tmpy; -#endif +#endif LTC_ARGCHK(pt != NULL); LTC_ARGCHK(ct != NULL); LTC_ARGCHK(cbc != NULL); - if ((err = cipher_is_valid(cbc->ecb.cipher)) != CRYPT_OK) { + if ((err = cipher_is_valid(cbc->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)) { + if (cbc->blocklen < 1 || cbc->blocklen > (int)sizeof(cbc->IV)) { return CRYPT_INVALID_ARG; - } + } - if (len % cbc->ecb.blocklen) { + if (len % cbc->blocklen) { return CRYPT_INVALID_ARG; } #ifdef LTC_FAST - if (cbc->ecb.blocklen % sizeof(LTC_FAST_TYPE)) { + if (cbc->blocklen % sizeof(LTC_FAST_TYPE)) { return CRYPT_INVALID_ARG; } #endif + + if (cipher_descriptor[cbc->cipher].accel_cbc_decrypt != NULL) { + return cipher_descriptor[cbc->cipher].accel_cbc_decrypt(ct, pt, len / cbc->blocklen, cbc->IV, &cbc->key); + } else { + while (len) { + /* decrypt */ + if ((err = cipher_descriptor[cbc->cipher].ecb_decrypt(ct, tmp, &cbc->key)) != CRYPT_OK) { + return err; + } - 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->blocklen; x += sizeof(LTC_FAST_TYPE)) { + tmpy = *((LTC_FAST_TYPE*)((unsigned char *)cbc->IV + x)) ^ *((LTC_FAST_TYPE*)((unsigned char *)tmp + x)); + *((LTC_FAST_TYPE*)((unsigned char *)cbc->IV + x)) = *((LTC_FAST_TYPE*)((unsigned char *)ct + x)); + *((LTC_FAST_TYPE*)((unsigned char *)pt + x)) = tmpy; + } + #else + for (x = 0; x < cbc->blocklen; x++) { + tmpy = tmp[x] ^ cbc->IV[x]; + cbc->IV[x] = ct[x]; + pt[x] = tmpy; + } + #endif + + ct += cbc->blocklen; + pt += cbc->blocklen; + len -= cbc->blocklen; } - - /* 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cbc/cbc_done.c b/src/modes/cbc/cbc_done.c index d66e86fb..ed2b2ab2 100644 --- a/src/modes/cbc/cbc_done.c +++ b/src/modes/cbc/cbc_done.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file cbc_done.c CBC implementation, finish chain, Tom St Denis */ -#ifdef LTC_CBC_MODE +#ifdef CBC /** Terminate the chain @param cbc The CBC chain to terminate @@ -15,11 +23,20 @@ */ int cbc_done(symmetric_CBC *cbc) { + int err; LTC_ARGCHK(cbc != NULL); - return ecb_done(&cbc->ecb); + if ((err = cipher_is_valid(cbc->cipher)) != CRYPT_OK) { + return err; + } + cipher_descriptor[cbc->cipher].done(&cbc->key); + return CRYPT_OK; } - + #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cbc/cbc_encrypt.c b/src/modes/cbc/cbc_encrypt.c index 6e2954a4..6129f2bf 100644 --- a/src/modes/cbc/cbc_encrypt.c +++ b/src/modes/cbc/cbc_encrypt.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file cbc_encrypt.c @@ -8,7 +16,7 @@ */ -#ifdef LTC_CBC_MODE +#ifdef CBC /** CBC encrypt @@ -26,60 +34,65 @@ int cbc_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s LTC_ARGCHK(ct != NULL); LTC_ARGCHK(cbc != NULL); - if ((err = cipher_is_valid(cbc->ecb.cipher)) != CRYPT_OK) { + if ((err = cipher_is_valid(cbc->cipher)) != CRYPT_OK) { return err; } - + /* is blocklen valid? */ - if (cbc->ecb.blocklen < 1 || cbc->ecb.blocklen > (int)sizeof(cbc->IV)) { + if (cbc->blocklen < 1 || cbc->blocklen > (int)sizeof(cbc->IV)) { return CRYPT_INVALID_ARG; - } + } - if (len % cbc->ecb.blocklen) { + if (len % cbc->blocklen) { return CRYPT_INVALID_ARG; } #ifdef LTC_FAST - if (cbc->ecb.blocklen % sizeof(LTC_FAST_TYPE)) { + if (cbc->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 + if (cipher_descriptor[cbc->cipher].accel_cbc_encrypt != NULL) { + return cipher_descriptor[cbc->cipher].accel_cbc_encrypt(pt, ct, len / cbc->blocklen, cbc->IV, &cbc->key); + } else { + while (len) { + /* xor IV against plaintext */ + #if defined(LTC_FAST) + for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)((unsigned char *)cbc->IV + x)) ^= *((LTC_FAST_TYPE*)((unsigned char *)pt + x)); + } + #else + for (x = 0; x < cbc->blocklen; x++) { + cbc->IV[x] ^= pt[x]; + } + #endif - /* encrypt */ - if ((err = ecb_encrypt_block(cbc->IV, ct, &cbc->ecb)) != CRYPT_OK) { - return err; - } + /* encrypt */ + if ((err = cipher_descriptor[cbc->cipher].ecb_encrypt(cbc->IV, ct, &cbc->key)) != 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; + /* store IV [ciphertext] for a future block */ + #if defined(LTC_FAST) + for (x = 0; x < cbc->blocklen; x += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)((unsigned char *)cbc->IV + x)) = *((LTC_FAST_TYPE*)((unsigned char *)ct + x)); + } + #else + for (x = 0; x < cbc->blocklen; x++) { + cbc->IV[x] = ct[x]; + } + #endif + + ct += cbc->blocklen; + pt += cbc->blocklen; + len -= cbc->blocklen; + } } return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cbc/cbc_getiv.c b/src/modes/cbc/cbc_getiv.c index 37bf600c..055fcc55 100644 --- a/src/modes/cbc/cbc_getiv.c +++ b/src/modes/cbc/cbc_getiv.c @@ -1,34 +1,46 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file cbc_getiv.c CBC implementation, get IV, Tom St Denis */ -#ifdef LTC_CBC_MODE +#ifdef CBC /** - 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 + Get the current initial vector + @param IV [out] The destination of the initial vector + @param len [in/out] The max size and resulting size of the initial vector @param cbc The CBC state @return CRYPT_OK if successful */ -int cbc_getiv(unsigned char *IV, unsigned long *len, const symmetric_CBC *cbc) +int cbc_getiv(unsigned char *IV, unsigned long *len, 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; + if ((unsigned long)cbc->blocklen > *len) { + *len = cbc->blocklen; return CRYPT_BUFFER_OVERFLOW; } - XMEMCPY(IV, cbc->IV, cbc->ecb.blocklen); - *len = cbc->ecb.blocklen; + XMEMCPY(IV, cbc->IV, cbc->blocklen); + *len = cbc->blocklen; return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cbc/cbc_setiv.c b/src/modes/cbc/cbc_setiv.c index 92620b0d..18ec82d4 100644 --- a/src/modes/cbc/cbc_setiv.c +++ b/src/modes/cbc/cbc_setiv.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file cbc_setiv.c @@ -8,11 +16,11 @@ */ -#ifdef LTC_CBC_MODE +#ifdef CBC /** - Set an initialization vector - @param IV The initialization vector + Set an initial vector + @param IV The initial vector @param len The length of the vector (in octets) @param cbc The CBC state @return CRYPT_OK if successful @@ -21,12 +29,16 @@ 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) { + if (len != (unsigned long)cbc->blocklen) { return CRYPT_INVALID_ARG; } XMEMCPY(cbc->IV, IV, len); return CRYPT_OK; } -#endif +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cbc/cbc_start.c b/src/modes/cbc/cbc_start.c index 58322e17..0d9bab0e 100644 --- a/src/modes/cbc/cbc_start.c +++ b/src/modes/cbc/cbc_start.c @@ -1,43 +1,62 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file cbc_start.c CBC implementation, start chain, Tom St Denis */ -#ifdef LTC_CBC_MODE +#ifdef CBC /** Initialize a CBC context @param cipher The index of the cipher desired - @param IV The initialization vector - @param key The secret key + @param IV The initial 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 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); + /* bad param? */ + if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { + return err; + } + /* setup cipher */ - if ((err = ecb_start(cipher, key, keylen, num_rounds, &cbc->ecb)) != CRYPT_OK) { + if ((err = cipher_descriptor[cipher].setup(key, keylen, num_rounds, &cbc->key)) != CRYPT_OK) { return err; } /* copy IV */ - for (x = 0; x < cbc->ecb.blocklen; x++) { + 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cfb/cfb_decrypt.c b/src/modes/cfb/cfb_decrypt.c index 69026e3e..bf80e8a8 100644 --- a/src/modes/cfb/cfb_decrypt.c +++ b/src/modes/cfb/cfb_decrypt.c @@ -1,38 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.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 */ +#ifdef CFB /** CFB decrypt @@ -45,76 +28,40 @@ static LTC_INLINE void s_shift1left_128(unsigned char *b, unsigned char v) 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) { + if ((err = cipher_is_valid(cfb->cipher)) != CRYPT_OK) { return err; } /* is blocklen/padlen valid? */ - if (cfb->ecb.blocklen < 0 || cfb->ecb.blocklen > (int)sizeof(cfb->IV) || + if (cfb->blocklen < 0 || cfb->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) { + while (len-- > 0) { + if (cfb->padlen == cfb->blocklen) { + if ((err = cipher_descriptor[cfb->cipher].ecb_encrypt(cfb->pad, cfb->IV, &cfb->key)) != 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; + cfb->pad[cfb->padlen] = *ct; + *pt = *ct ^ cfb->IV[cfb->padlen]; + ++pt; + ++ct; + ++cfb->padlen; } return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cfb/cfb_done.c b/src/modes/cfb/cfb_done.c index 881a17c7..f2bbdc32 100644 --- a/src/modes/cfb/cfb_done.c +++ b/src/modes/cfb/cfb_done.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file cfb_done.c CFB implementation, finish chain, Tom St Denis */ -#ifdef LTC_CFB_MODE +#ifdef CFB /** Terminate the chain @param cfb The CFB chain to terminate @@ -15,11 +23,20 @@ */ int cfb_done(symmetric_CFB *cfb) { + int err; LTC_ARGCHK(cfb != NULL); - return ecb_done(&cfb->ecb); + if ((err = cipher_is_valid(cfb->cipher)) != CRYPT_OK) { + return err; + } + cipher_descriptor[cfb->cipher].done(&cfb->key); + return CRYPT_OK; } - + #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cfb/cfb_encrypt.c b/src/modes/cfb/cfb_encrypt.c index 22e27aa3..15068783 100644 --- a/src/modes/cfb/cfb_encrypt.c +++ b/src/modes/cfb/cfb_encrypt.c @@ -1,38 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.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 */ +#ifdef CFB /** CFB encrypt @@ -45,75 +28,38 @@ static LTC_INLINE void s_shift1left_128(unsigned char *b, unsigned char v) 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) { + if ((err = cipher_is_valid(cfb->cipher)) != CRYPT_OK) { return err; } /* is blocklen/padlen valid? */ - if (cfb->ecb.blocklen < 0 || cfb->ecb.blocklen > (int)sizeof(cfb->IV) || + if (cfb->blocklen < 0 || cfb->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; + while (len-- > 0) { + if (cfb->padlen == cfb->blocklen) { + if ((err = cipher_descriptor[cfb->cipher].ecb_encrypt(cfb->pad, cfb->IV, &cfb->key)) != CRYPT_OK) { + return err; + } + cfb->padlen = 0; + } + cfb->pad[cfb->padlen] = (*ct = *pt ^ cfb->IV[cfb->padlen]); + ++pt; + ++ct; + ++cfb->padlen; } return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cfb/cfb_getiv.c b/src/modes/cfb/cfb_getiv.c index 75ce264a..f7649706 100644 --- a/src/modes/cfb/cfb_getiv.c +++ b/src/modes/cfb/cfb_getiv.c @@ -1,34 +1,46 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file cfb_getiv.c CFB implementation, get IV, Tom St Denis */ -#ifdef LTC_CFB_MODE +#ifdef CFB /** - 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 + Get the current initial vector + @param IV [out] The destination of the initial vector + @param len [in/out] The max size and resulting size of the initial vector @param cfb The CFB state @return CRYPT_OK if successful */ -int cfb_getiv(unsigned char *IV, unsigned long *len, const symmetric_CFB *cfb) +int cfb_getiv(unsigned char *IV, unsigned long *len, 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; + if ((unsigned long)cfb->blocklen > *len) { + *len = cfb->blocklen; return CRYPT_BUFFER_OVERFLOW; } - XMEMCPY(IV, cfb->pad, cfb->ecb.blocklen); - *len = cfb->ecb.blocklen; + XMEMCPY(IV, cfb->IV, cfb->blocklen); + *len = cfb->blocklen; return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cfb/cfb_setiv.c b/src/modes/cfb/cfb_setiv.c index 1758d64c..ac6961ae 100644 --- a/src/modes/cfb/cfb_setiv.c +++ b/src/modes/cfb/cfb_setiv.c @@ -1,17 +1,24 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file cfb_setiv.c CFB implementation, set IV, Tom St Denis -*/ - -#ifdef LTC_CFB_MODE +*/ +#ifdef CFB /** - Set an initialization vector - @param IV The initialization vector + Set an initial vector + @param IV The initial vector @param len The length of the vector (in octets) @param cfb The CFB state @return CRYPT_OK if successful @@ -19,23 +26,26 @@ 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) { + if ((err = cipher_is_valid(cfb->cipher)) != CRYPT_OK) { return err; } - - if (len != (unsigned long)cfb->ecb.blocklen) { + + if (len != (unsigned long)cfb->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); + return cipher_descriptor[cfb->cipher].ecb_encrypt(IV, cfb->IV, &cfb->key); } -#endif +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cfb/cfb_start.c b/src/modes/cfb/cfb_start.c index 8b78b347..aa9e65fc 100644 --- a/src/modes/cfb/cfb_start.c +++ b/src/modes/cfb/cfb_start.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file cfb_start.c @@ -8,22 +16,20 @@ */ -#ifdef LTC_CFB_MODE - +#ifdef CFB /** - Extended initialization of a CFB context + Initialize a CFB context @param cipher The index of the cipher desired - @param IV The initialization vector - @param key The secret key + @param IV The initial 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 cfb_start(int cipher, const unsigned char *IV, const unsigned char *key, + int keylen, int num_rounds, symmetric_CFB *cfb) { int x, err; @@ -34,53 +40,26 @@ int cfb_start_ex(int cipher, const unsigned char *IV, const unsigned char *key, 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]; + 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 */ 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); + return cipher_descriptor[cfb->cipher].ecb_encrypt(cfb->IV, cfb->IV, &cfb->key); } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ctr/ctr_decrypt.c b/src/modes/ctr/ctr_decrypt.c index ac421fa2..f6a64f0d 100644 --- a/src/modes/ctr/ctr_decrypt.c +++ b/src/modes/ctr/ctr_decrypt.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ctr_decrypt.c CTR implementation, decrypt data, Tom St Denis */ -#ifdef LTC_CTR_MODE +#ifdef CTR /** CTR decrypt @@ -20,7 +28,7 @@ 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(ct != NULL); LTC_ARGCHK(ctr != NULL); return ctr_encrypt(ct, pt, len, ctr); @@ -28,3 +36,7 @@ int ctr_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, s #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ctr/ctr_done.c b/src/modes/ctr/ctr_done.c index 670c63b4..f5efec9d 100644 --- a/src/modes/ctr/ctr_done.c +++ b/src/modes/ctr/ctr_done.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ctr_done.c CTR implementation, finish chain, Tom St Denis */ -#ifdef LTC_CTR_MODE +#ifdef CTR /** Terminate the chain @param ctr The CTR chain to terminate @@ -15,11 +23,20 @@ */ int ctr_done(symmetric_CTR *ctr) { + int err; LTC_ARGCHK(ctr != NULL); - return ecb_done(&ctr->ecb); + if ((err = cipher_is_valid(ctr->cipher)) != CRYPT_OK) { + return err; + } + cipher_descriptor[ctr->cipher].done(&ctr->key); + return CRYPT_OK; } - + #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ctr/ctr_encrypt.c b/src/modes/ctr/ctr_encrypt.c index 2ebc5feb..48e4d39f 100644 --- a/src/modes/ctr/ctr_encrypt.c +++ b/src/modes/ctr/ctr_encrypt.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ctr_encrypt.c @@ -8,65 +16,7 @@ */ -#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; -} +#ifdef CTR /** CTR encrypt @@ -78,51 +28,85 @@ static int s_ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned lo */ int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CTR *ctr) { - int err, fr; + int x, err; - LTC_ARGCHK(pt != NULL || len == 0); + LTC_ARGCHK(pt != NULL); LTC_ARGCHK(ct != NULL); LTC_ARGCHK(ctr != NULL); - if ((err = cipher_is_valid(ctr->ecb.cipher)) != CRYPT_OK) { + if ((err = cipher_is_valid(ctr->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))) { + if (ctr->blocklen < 1 || ctr->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)) { + if (ctr->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; - } + if ((ctr->padlen == ctr->blocklen) && cipher_descriptor[ctr->cipher].accel_ctr_encrypt != NULL && (len >= (unsigned long)ctr->blocklen)) { + if ((err = cipher_descriptor[ctr->cipher].accel_ctr_encrypt(pt, ct, len/ctr->blocklen, ctr->ctr, ctr->mode, &ctr->key)) != CRYPT_OK) { + return err; + } + len %= ctr->blocklen; } - return s_ctr_encrypt(pt, ct, len, ctr); + while (len) { + /* is the pad empty? */ + if (ctr->padlen == ctr->blocklen) { + /* increment counter */ + if (ctr->mode == CTR_COUNTER_LITTLE_ENDIAN) { + /* 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 */ + if ((err = cipher_descriptor[ctr->cipher].ecb_encrypt(ctr->ctr, ctr->pad, &ctr->key)) != CRYPT_OK) { + return err; + } + ctr->padlen = 0; + } +#ifdef LTC_FAST + if (ctr->padlen == 0 && len >= (unsigned long)ctr->blocklen) { + for (x = 0; x < ctr->blocklen; x += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)((unsigned char *)ct + x)) = *((LTC_FAST_TYPE*)((unsigned char *)pt + x)) ^ + *((LTC_FAST_TYPE*)((unsigned char *)ctr->pad + x)); + } + pt += ctr->blocklen; + ct += ctr->blocklen; + len -= ctr->blocklen; + ctr->padlen = ctr->blocklen; + continue; + } +#endif + *ct++ = *pt++ ^ ctr->pad[ctr->padlen++]; + --len; + } + return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ctr/ctr_getiv.c b/src/modes/ctr/ctr_getiv.c index 7704a7f2..ff44482d 100644 --- a/src/modes/ctr/ctr_getiv.c +++ b/src/modes/ctr/ctr_getiv.c @@ -1,34 +1,46 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ctr_getiv.c CTR implementation, get IV, Tom St Denis */ -#ifdef LTC_CTR_MODE +#ifdef CTR /** - 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 + Get the current initial vector + @param IV [out] The destination of the initial vector + @param len [in/out] The max size and resulting size of the initial vector @param ctr The CTR state @return CRYPT_OK if successful */ -int ctr_getiv(unsigned char *IV, unsigned long *len, const symmetric_CTR *ctr) +int ctr_getiv(unsigned char *IV, unsigned long *len, 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; + if ((unsigned long)ctr->blocklen > *len) { + *len = ctr->blocklen; return CRYPT_BUFFER_OVERFLOW; } - XMEMCPY(IV, ctr->ctr, ctr->ecb.blocklen); - *len = ctr->ecb.blocklen; + XMEMCPY(IV, ctr->ctr, ctr->blocklen); + *len = ctr->blocklen; return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ctr/ctr_setiv.c b/src/modes/ctr/ctr_setiv.c index 75ea1ab3..9a8103a5 100644 --- a/src/modes/ctr/ctr_setiv.c +++ b/src/modes/ctr/ctr_setiv.c @@ -1,17 +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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ctr_setiv.c CTR implementation, set IV, Tom St Denis */ - -#ifdef LTC_CTR_MODE + +#ifdef CTR /** - Set an initialization vector - @param IV The initialization vector + Set an initial vector + @param IV The initial vector @param len The length of the vector (in octets) @param ctr The CTR state @return CRYPT_OK if successful @@ -19,26 +27,30 @@ 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) { + if ((err = cipher_is_valid(ctr->cipher)) != CRYPT_OK) { return err; } - - if (len != (unsigned long)ctr->ecb.blocklen) { + + if (len != (unsigned long)ctr->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); + return cipher_descriptor[ctr->cipher].ecb_encrypt(IV, ctr->pad, &ctr->key); } -#endif +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ctr/ctr_start.c b/src/modes/ctr/ctr_start.c index 03b18a46..318e43c8 100644 --- a/src/modes/ctr/ctr_start.c +++ b/src/modes/ctr/ctr_start.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ctr_start.c @@ -8,22 +16,22 @@ */ -#ifdef LTC_CTR_MODE +#ifdef CTR /** Initialize a CTR context @param cipher The index of the cipher desired - @param IV The initialization vector - @param key The secret key + @param IV The initial 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 ctr_start( int cipher, + const unsigned char *IV, + const unsigned char *key, int keylen, int num_rounds, int ctr_mode, symmetric_CTR *ctr) { @@ -38,50 +46,24 @@ int ctr_start( int cipher, 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) { + 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 = ctr_mode & 0x1000; - for (x = 0; x < ctr->ecb.blocklen; x++) { + ctr->mode = ctr_mode; + for (x = 0; x < ctr->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); + return cipher_descriptor[ctr->cipher].ecb_encrypt(ctr->ctr, ctr->pad, &ctr->key); } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index b8a48b00..52a7f5cb 100644 --- a/src/modes/ecb/ecb_decrypt.c +++ b/src/modes/ecb/ecb_decrypt.c @@ -1,21 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.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); -} +#ifdef ECB /** ECB decrypt @@ -25,7 +25,7 @@ int ecb_decrypt_block(const unsigned char *ct, unsigned char *pt, const symmetri @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 ecb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_ECB *ecb) { int err; LTC_ARGCHK(pt != NULL); @@ -41,16 +41,21 @@ int ecb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, c /* 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; + } else { + 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; } - 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ecb/ecb_done.c b/src/modes/ecb/ecb_done.c index e1c0c593..7adfcf81 100644 --- a/src/modes/ecb/ecb_done.c +++ b/src/modes/ecb/ecb_done.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ecb_done.c ECB implementation, finish chain, Tom St Denis */ -#ifdef LTC_ECB_MODE +#ifdef ECB /** Terminate the chain @param ecb The ECB chain to terminate @@ -25,6 +33,10 @@ int ecb_done(symmetric_ECB *ecb) return CRYPT_OK; } - + #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ecb/ecb_encrypt.c b/src/modes/ecb/ecb_encrypt.c index 07e86726..1835ed94 100644 --- a/src/modes/ecb/ecb_encrypt.c +++ b/src/modes/ecb/ecb_encrypt.c @@ -1,21 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.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); -} +#ifdef ECB /** ECB encrypt @@ -25,7 +25,7 @@ int ecb_encrypt_block(const unsigned char *pt, unsigned char *ct, const symmetri @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 ecb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_ECB *ecb) { int err; LTC_ARGCHK(pt != NULL); @@ -41,16 +41,21 @@ int ecb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, c /* 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; + } else { + 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; } - 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ecb/ecb_start.c b/src/modes/ecb/ecb_start.c index d5bc28ef..df975706 100644 --- a/src/modes/ecb/ecb_start.c +++ b/src/modes/ecb/ecb_start.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ecb_start.c @@ -8,12 +16,12 @@ */ -#ifdef LTC_ECB_MODE +#ifdef ECB /** Initialize a ECB context @param cipher The index of the cipher desired - @param key The secret key + @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 @@ -34,3 +42,7 @@ int ecb_start(int cipher, const unsigned char *key, int keylen, int num_rounds, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/f8/f8_decrypt.c b/src/modes/f8/f8_decrypt.c index f9e3a54d..0fbe3c04 100644 --- a/src/modes/f8/f8_decrypt.c +++ b/src/modes/f8/f8_decrypt.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file f8_decrypt.c @@ -28,4 +36,8 @@ int f8_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, sy #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/f8/f8_done.c b/src/modes/f8/f8_done.c index 78ee9fe4..14a54d0a 100644 --- a/src/modes/f8/f8_done.c +++ b/src/modes/f8/f8_done.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file f8_done.c @@ -15,11 +23,20 @@ */ int f8_done(symmetric_F8 *f8) { + int err; LTC_ARGCHK(f8 != NULL); - return ecb_done(&f8->ecb); + if ((err = cipher_is_valid(f8->cipher)) != CRYPT_OK) { + return err; + } + cipher_descriptor[f8->cipher].done(&f8->key); + return CRYPT_OK; } - + #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/f8/f8_encrypt.c b/src/modes/f8/f8_encrypt.c index dada37d8..6fd9950e 100644 --- a/src/modes/f8/f8_encrypt.c +++ b/src/modes/f8/f8_encrypt.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file f8_encrypt.c @@ -24,70 +32,37 @@ int f8_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, sy LTC_ARGCHK(pt != NULL); LTC_ARGCHK(ct != NULL); LTC_ARGCHK(f8 != NULL); - if ((err = cipher_is_valid(f8->ecb.cipher)) != CRYPT_OK) { + if ((err = cipher_is_valid(f8->cipher)) != CRYPT_OK) { return err; } - + /* is blocklen/padlen valid? */ - if (f8->ecb.blocklen < 0 || f8->ecb.blocklen > (int)sizeof(f8->IV) || + if (f8->blocklen < 0 || f8->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) { + while (len-- > 0) { + if (f8->padlen == f8->blocklen) { /* xor of IV, MIV and blockcnt == what goes into cipher */ - STORE32H(f8->blockcnt, (buf+(f8->ecb.blocklen-4))); + STORE32H(f8->blockcnt, (buf+(f8->blocklen-4))); ++(f8->blockcnt); - for (x = 0; x < f8->ecb.blocklen; x++) { + for (x = 0; x < f8->blocklen; x++) { f8->IV[x] ^= f8->MIV[x] ^ buf[x]; } - if ((err = ecb_encrypt_block(f8->IV, f8->IV, &f8->ecb)) != CRYPT_OK) { + if ((err = cipher_descriptor[f8->cipher].ecb_encrypt(f8->IV, f8->IV, &f8->key)) != CRYPT_OK) { return err; } f8->padlen = 0; } *ct++ = *pt++ ^ f8->IV[f8->padlen++]; - --len; } return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/f8/f8_getiv.c b/src/modes/f8/f8_getiv.c index a38ffde8..ddf9a72a 100644 --- a/src/modes/f8/f8_getiv.c +++ b/src/modes/f8/f8_getiv.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ofb_getiv.c @@ -10,25 +18,29 @@ #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 + Get the current initial vector + @param IV [out] The destination of the initial vector + @param len [in/out] The max size and resulting size of the initial vector @param f8 The F8 state @return CRYPT_OK if successful */ -int f8_getiv(unsigned char *IV, unsigned long *len, const symmetric_F8 *f8) +int f8_getiv(unsigned char *IV, unsigned long *len, 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; + if ((unsigned long)f8->blocklen > *len) { + *len = f8->blocklen; return CRYPT_BUFFER_OVERFLOW; } - XMEMCPY(IV, f8->IV, f8->ecb.blocklen); - *len = f8->ecb.blocklen; + XMEMCPY(IV, f8->IV, f8->blocklen); + *len = f8->blocklen; return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/f8/f8_setiv.c b/src/modes/f8/f8_setiv.c index fd5411e4..f1bbe2a6 100644 --- a/src/modes/f8/f8_setiv.c +++ b/src/modes/f8/f8_setiv.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file f8_setiv.c @@ -10,8 +18,8 @@ #ifdef LTC_F8_MODE /** - Set an initialization vector - @param IV The initialization vector + Set an initial vector + @param IV The initial vector @param len The length of the vector (in octets) @param f8 The F8 state @return CRYPT_OK if successful @@ -23,18 +31,22 @@ int f8_setiv(const unsigned char *IV, unsigned long len, symmetric_F8 *f8) LTC_ARGCHK(IV != NULL); LTC_ARGCHK(f8 != NULL); - if ((err = cipher_is_valid(f8->ecb.cipher)) != CRYPT_OK) { + if ((err = cipher_is_valid(f8->cipher)) != CRYPT_OK) { return err; } - if (len != (unsigned long)f8->ecb.blocklen) { + if (len != (unsigned long)f8->blocklen) { return CRYPT_INVALID_ARG; } /* force next block */ f8->padlen = 0; - return ecb_encrypt_block(IV, f8->IV, &f8->ecb); + return cipher_descriptor[f8->cipher].ecb_encrypt(IV, f8->IV, &f8->key); } -#endif +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/f8/f8_start.c b/src/modes/f8/f8_start.c index cb608036..398f3954 100644 --- a/src/modes/f8/f8_start.c +++ b/src/modes/f8/f8_start.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file f8_start.c @@ -13,8 +21,8 @@ /** Initialize an F8 context @param cipher The index of the cipher desired - @param IV The initialization vector - @param key The secret key + @param IV The initial 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) @@ -22,8 +30,8 @@ @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, +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) { @@ -39,46 +47,45 @@ int f8_start( int cipher, const unsigned char *IV, 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; - + f8->cipher = cipher; + f8->blocklen = cipher_descriptor[cipher].block_length; + f8->padlen = f8->blocklen; + /* 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) { + if ((err = cipher_descriptor[cipher].setup(tkey, keylen, num_rounds, &f8->key)) != CRYPT_OK) { return err; } - + /* encrypt IV */ - if ((err = ecb_encrypt_block(IV, f8->MIV, &f8->ecb)) != CRYPT_OK) { - ecb_done(&f8->ecb); + if ((err = cipher_descriptor[f8->cipher].ecb_encrypt(IV, f8->MIV, &f8->key)) != CRYPT_OK) { + cipher_descriptor[f8->cipher].done(&f8->key); return err; } zeromem(tkey, sizeof(tkey)); zeromem(f8->IV, sizeof(f8->IV)); - + /* terminate this cipher */ - ecb_done(&f8->ecb); - + cipher_descriptor[f8->cipher].done(&f8->key); + /* init the cipher */ - return ecb_start(cipher, key, keylen, num_rounds, &f8->ecb); + return cipher_descriptor[cipher].setup(key, keylen, num_rounds, &f8->key); } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/f8/f8_test_mode.c b/src/modes/f8/f8_test_mode.c index cb6e2913..d343e5b9 100644 --- a/src/modes/f8/f8_test_mode.c +++ b/src/modes/f8/f8_test_mode.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file f8_test_mode.c @@ -15,50 +23,53 @@ 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 }; + const unsigned char key[16] = { 0x23, 0x48, 0x29, 0x00, 0x84, 0x67, 0xbe, 0x18, + 0x6c, 0x3d, 0xe1, 0x4a, 0xae, 0x72, 0xd6, 0x2c }; + const unsigned char salt[4] = { 0x32, 0xf2, 0x87, 0x0d }; + const unsigned char IV[16] = { 0x00, 0x6e, 0x5c, 0xba, 0x50, 0x68, 0x1d, 0xe5, + 0x5c, 0x62, 0x15, 0x99, 0xd4, 0x62, 0x56, 0x4a }; + 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 }; + 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; } - + f8_done(&f8); + /* 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)) { + if (XMEMCMP(buf, ct, sizeof(ct))) { return CRYPT_FAIL_TESTVECTOR; - } - + } + return CRYPT_OK; -#endif -} +#endif +} #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/lrw/lrw_decrypt.c b/src/modes/lrw/lrw_decrypt.c index b4f4059e..73eebeb5 100644 --- a/src/modes/lrw/lrw_decrypt.c +++ b/src/modes/lrw/lrw_decrypt.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file lrw_decrypt.c LRW_MODE implementation, Decrypt blocks, Tom St Denis */ -#ifdef LTC_LRW_MODE +#ifdef LRW_MODE /** LRW decrypt blocks @@ -24,12 +32,12 @@ int lrw_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, s LTC_ARGCHK(ct != NULL); LTC_ARGCHK(lrw != NULL); - if ((err = cipher_is_valid(lrw->ecb.cipher)) != CRYPT_OK) { + if ((err = cipher_is_valid(lrw->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); + if (cipher_descriptor[lrw->cipher].accel_lrw_decrypt != NULL) { + return cipher_descriptor[lrw->cipher].accel_lrw_decrypt(ct, pt, len, lrw->IV, lrw->tweak, &lrw->key); } return lrw_process(ct, pt, len, LRW_DECRYPT, lrw); @@ -37,3 +45,7 @@ int lrw_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, s #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/lrw/lrw_done.c b/src/modes/lrw/lrw_done.c index 83ad5f34..39798c46 100644 --- a/src/modes/lrw/lrw_done.c +++ b/src/modes/lrw/lrw_done.c @@ -1,24 +1,42 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file lrw_done.c LRW_MODE implementation, Free resources, Tom St Denis */ -#ifdef LTC_LRW_MODE +#ifdef LRW_MODE /** Terminate a LRW state @param lrw The state to terminate @return CRYPT_OK if successful */ -int lrw_done(symmetric_LRW *lrw) +int lrw_done(symmetric_LRW *lrw) { - LTC_ARGCHK(lrw != NULL); + int err; - return ecb_done(&lrw->ecb); + LTC_ARGCHK(lrw != NULL); + + if ((err = cipher_is_valid(lrw->cipher)) != CRYPT_OK) { + return err; + } + cipher_descriptor[lrw->cipher].done(&lrw->key); + + return CRYPT_OK; } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/lrw/lrw_encrypt.c b/src/modes/lrw/lrw_encrypt.c index 7c8e1ba5..12fb8af7 100644 --- a/src/modes/lrw/lrw_encrypt.c +++ b/src/modes/lrw/lrw_encrypt.c @@ -1,14 +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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file lrw_encrypt.c LRW_MODE implementation, Encrypt blocks, Tom St Denis */ -#ifdef LTC_LRW_MODE - +#ifdef LRW_MODE + /** LRW encrypt blocks @param pt The plaintext @@ -24,12 +32,12 @@ int lrw_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s LTC_ARGCHK(ct != NULL); LTC_ARGCHK(lrw != NULL); - if ((err = cipher_is_valid(lrw->ecb.cipher)) != CRYPT_OK) { + if ((err = cipher_is_valid(lrw->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); + if (cipher_descriptor[lrw->cipher].accel_lrw_encrypt != NULL) { + return cipher_descriptor[lrw->cipher].accel_lrw_encrypt(pt, ct, len, lrw->IV, lrw->tweak, &lrw->key); } return lrw_process(pt, ct, len, LRW_ENCRYPT, lrw); @@ -37,3 +45,6 @@ int lrw_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/lrw/lrw_getiv.c b/src/modes/lrw/lrw_getiv.c index 9da1aabc..0b8adb79 100644 --- a/src/modes/lrw/lrw_getiv.c +++ b/src/modes/lrw/lrw_getiv.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file lrw_getiv.c LRW_MODE implementation, Retrieve the current IV, Tom St Denis */ -#ifdef LTC_LRW_MODE +#ifdef LRW_MODE /** Get the IV for LRW @@ -16,7 +24,7 @@ @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) +int lrw_getiv(unsigned char *IV, unsigned long *len, symmetric_LRW *lrw) { LTC_ARGCHK(IV != NULL); LTC_ARGCHK(len != NULL); @@ -32,3 +40,6 @@ int lrw_getiv(unsigned char *IV, unsigned long *len, const symmetric_LRW *lrw) } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/lrw/lrw_process.c b/src/modes/lrw/lrw_process.c index 1132e6a9..2a084bfb 100644 --- a/src/modes/lrw/lrw_process.c +++ b/src/modes/lrw/lrw_process.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file lrw_process.c LRW_MODE implementation, Encrypt/decrypt blocks, Tom St Denis */ -#ifdef LTC_LRW_MODE +#ifdef LRW_MODE /** Process blocks with LRW, since decrypt/encrypt are largely the same they share this code. @@ -22,7 +30,7 @@ int lrw_process(const unsigned char *pt, unsigned char *ct, unsigned long len, i { unsigned char prod[16]; int x, err; -#ifdef LTC_LRW_TABLES +#ifdef LRW_TABLES int y; #endif @@ -41,20 +49,18 @@ int lrw_process(const unsigned char *pt, unsigned char *ct, unsigned long len, i /* increment IV */ for (x = 15; x >= 0; x--) { lrw->IV[x] = (lrw->IV[x] + 1) & 255; - if (lrw->IV[x]) { + if (lrw->IV[x]) { break; } } /* update pad */ -#ifdef LTC_LRW_TABLES +#ifdef 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); + *((LTC_FAST_TYPE *)(lrw->pad + y)) ^= *((LTC_FAST_TYPE *)(&lrw->PC[x][lrw->IV[x]][y])) ^ *((LTC_FAST_TYPE *)(&lrw->PC[x][(lrw->IV[x]-1)&255][y])); } #else for (y = 0; y < 16; y++) { @@ -69,7 +75,7 @@ int lrw_process(const unsigned char *pt, unsigned char *ct, unsigned long len, i /* xor prod */ #ifdef LTC_FAST for (x = 0; x < 16; x += sizeof(LTC_FAST_TYPE)) { - LTC_FAST_XOR3(ct + x, pt + x, prod + x); + *((LTC_FAST_TYPE *)(ct + x)) = *((LTC_FAST_TYPE *)(pt + x)) ^ *((LTC_FAST_TYPE *)(prod + x)); } #else for (x = 0; x < 16; x++) { @@ -79,26 +85,26 @@ int lrw_process(const unsigned char *pt, unsigned char *ct, unsigned long len, i /* send through cipher */ if (mode == LRW_ENCRYPT) { - if ((err = ecb_encrypt_block(ct, ct, &lrw->ecb)) != CRYPT_OK) { + if ((err = cipher_descriptor[lrw->cipher].ecb_encrypt(ct, ct, &lrw->key)) != CRYPT_OK) { return err; } } else { - if ((err = ecb_decrypt_block(ct, ct, &lrw->ecb)) != CRYPT_OK) { + if ((err = cipher_descriptor[lrw->cipher].ecb_decrypt(ct, ct, &lrw->key)) != 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); + *((LTC_FAST_TYPE *)(ct + x)) = *((LTC_FAST_TYPE *)(ct + x)) ^ *((LTC_FAST_TYPE *)(prod + x)); } #else for (x = 0; x < 16; x++) { ct[x] = ct[x] ^ prod[x]; } #endif - + /* move to next */ pt += 16; ct += 16; @@ -107,5 +113,8 @@ int lrw_process(const unsigned char *pt, unsigned char *ct, unsigned long len, i return CRYPT_OK; } - + #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/lrw/lrw_setiv.c b/src/modes/lrw/lrw_setiv.c index fb2db8f7..7b524f44 100644 --- a/src/modes/lrw/lrw_setiv.c +++ b/src/modes/lrw/lrw_setiv.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file lrw_setiv.c LRW_MODE implementation, Set the current IV, Tom St Denis */ -#ifdef LTC_LRW_MODE +#ifdef LRW_MODE /** Set the IV for LRW @@ -19,7 +27,7 @@ int lrw_setiv(const unsigned char *IV, unsigned long len, symmetric_LRW *lrw) { int err; -#ifdef LTC_LRW_TABLES +#ifdef LRW_TABLES unsigned char T[16]; int x, y; #endif @@ -30,7 +38,7 @@ int lrw_setiv(const unsigned char *IV, unsigned long len, symmetric_LRW *lrw) return CRYPT_INVALID_ARG; } - if ((err = cipher_is_valid(lrw->ecb.cipher)) != CRYPT_OK) { + if ((err = cipher_is_valid(lrw->cipher)) != CRYPT_OK) { return err; } @@ -38,17 +46,17 @@ int lrw_setiv(const unsigned char *IV, unsigned long len, symmetric_LRW *lrw) 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) { + if (cipher_descriptor[lrw->cipher].accel_lrw_encrypt != NULL && cipher_descriptor[lrw->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 +#ifdef 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]); + *((LTC_FAST_TYPE *)(T + y)) ^= *((LTC_FAST_TYPE *)(&lrw->PC[x][IV[x]][y])); } #else for (y = 0; y < 16; y++) { @@ -57,8 +65,8 @@ int lrw_setiv(const unsigned char *IV, unsigned long len, symmetric_LRW *lrw) #endif } XMEMCPY(lrw->pad, T, 16); -#else - gcm_gf_mult(lrw->tweak, IV, lrw->pad); +#else + gcm_gf_mult(lrw->tweak, IV, lrw->pad); #endif return CRYPT_OK; @@ -66,3 +74,6 @@ int lrw_setiv(const unsigned char *IV, unsigned long len, symmetric_LRW *lrw) #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/lrw/lrw_start.c b/src/modes/lrw/lrw_start.c index fb0b95ef..0f2c00f1 100644 --- a/src/modes/lrw/lrw_start.c +++ b/src/modes/lrw/lrw_start.c @@ -1,19 +1,27 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file lrw_start.c LRW_MODE implementation, start mode, Tom St Denis */ -#ifdef LTC_LRW_MODE +#ifdef LRW_MODE /** Initialize the LRW context - @param cipher The cipher desired, must be a 128-bit block cipher + @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 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) @@ -24,19 +32,19 @@ int lrw_start( int cipher, const unsigned char *IV, const unsigned char *key, int keylen, const unsigned char *tweak, - int num_rounds, + int num_rounds, symmetric_LRW *lrw) { int err; -#ifdef LTC_LRW_TABLES +#ifdef 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); + 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)) { @@ -53,15 +61,15 @@ int lrw_start( int cipher, } /* schedule key */ - if ((err = ecb_start(cipher, key, keylen, num_rounds, &lrw->ecb)) != CRYPT_OK) { + if ((err = cipher_descriptor[cipher].setup(key, keylen, num_rounds, &lrw->key)) != CRYPT_OK) { return err; } - lrw->ecb.cipher = cipher; + lrw->cipher = cipher; /* copy the IV and tweak */ XMEMCPY(lrw->tweak, tweak, 16); -#ifdef LTC_LRW_TABLES +#ifdef LRW_TABLES /* setup tables */ /* generate the first table as it has no shifting (from which we make the other tables) */ zeromem(B, 16); @@ -80,8 +88,8 @@ int lrw_start( int cipher, } 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 */ @@ -90,3 +98,6 @@ int lrw_start( int cipher, #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/lrw/lrw_test.c b/src/modes/lrw/lrw_test.c index 38a7bded..99e787c0 100644 --- a/src/modes/lrw/lrw_test.c +++ b/src/modes/lrw/lrw_test.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file lrw_test.c LRW_MODE implementation, test LRW, Tom St Denis */ -#ifdef LTC_LRW_MODE +#ifdef LRW_MODE /** Test LRW against specs @@ -73,14 +81,14 @@ int lrw_test(void) } } - for (x = 0; x < (int)LTC_ARRAY_SIZE(tests); x++) { + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); 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)) { + if (XMEMCMP(tests[x].expected_tweak, lrw.pad, 16)) { lrw_done(&lrw); return CRYPT_FAIL_TESTVECTOR; } @@ -91,13 +99,13 @@ int lrw_test(void) return err; } - if (ltc_compare_testvector(buf[0], 16, tests[x].C, 16, "LRW Encrypt", x)) { + if (XMEMCMP(buf[0], tests[x].C, 16)) { lrw_done(&lrw); return CRYPT_FAIL_TESTVECTOR; } /* process block */ - if ((err = lrw_setiv(tests[x].IV, 16, &lrw)) != CRYPT_OK) { + if ((err = lrw_setiv(tests[x].IV, 16, &lrw)) != CRYPT_OK) { lrw_done(&lrw); return err; } @@ -107,18 +115,22 @@ int lrw_test(void) return err; } - if (ltc_compare_testvector(buf[1], 16, tests[x].P, 16, "LRW Decrypt", x)) { + if (XMEMCMP(buf[1], tests[x].P, 16)) { lrw_done(&lrw); return CRYPT_FAIL_TESTVECTOR; } if ((err = lrw_done(&lrw)) != CRYPT_OK) { return err; } - } - return CRYPT_OK; + } + return CRYPT_OK; #endif } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ofb/ofb_decrypt.c b/src/modes/ofb/ofb_decrypt.c index cebcd7b1..e7429538 100644 --- a/src/modes/ofb/ofb_decrypt.c +++ b/src/modes/ofb/ofb_decrypt.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ofb_decrypt.c OFB implementation, decrypt data, Tom St Denis */ -#ifdef LTC_OFB_MODE +#ifdef OFB /** OFB decrypt @@ -28,4 +36,8 @@ int ofb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, s #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ofb/ofb_done.c b/src/modes/ofb/ofb_done.c index 15cf1f66..e770b211 100644 --- a/src/modes/ofb/ofb_done.c +++ b/src/modes/ofb/ofb_done.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ofb_done.c OFB implementation, finish chain, Tom St Denis */ -#ifdef LTC_OFB_MODE +#ifdef OFB /** Terminate the chain @param ofb The OFB chain to terminate @@ -15,11 +23,20 @@ */ int ofb_done(symmetric_OFB *ofb) { + int err; LTC_ARGCHK(ofb != NULL); - return ecb_done(&ofb->ecb); + if ((err = cipher_is_valid(ofb->cipher)) != CRYPT_OK) { + return err; + } + cipher_descriptor[ofb->cipher].done(&ofb->key); + return CRYPT_OK; } - + #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ofb/ofb_encrypt.c b/src/modes/ofb/ofb_encrypt.c index 211efcc1..c46966d5 100644 --- a/src/modes/ofb/ofb_encrypt.c +++ b/src/modes/ofb/ofb_encrypt.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ofb_encrypt.c OFB implementation, encrypt data, Tom St Denis */ -#ifdef LTC_OFB_MODE +#ifdef OFB /** OFB encrypt @@ -23,26 +31,30 @@ int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s LTC_ARGCHK(pt != NULL); LTC_ARGCHK(ct != NULL); LTC_ARGCHK(ofb != NULL); - if ((err = cipher_is_valid(ofb->ecb.cipher)) != CRYPT_OK) { + if ((err = cipher_is_valid(ofb->cipher)) != CRYPT_OK) { return err; } - + /* is blocklen/padlen valid? */ - if (ofb->ecb.blocklen < 0 || ofb->ecb.blocklen > (int)sizeof(ofb->IV) || + 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->ecb.blocklen) { - if ((err = ecb_encrypt_block(ofb->IV, ofb->IV, &ofb->ecb)) != CRYPT_OK) { + if (ofb->padlen == ofb->blocklen) { + if ((err = cipher_descriptor[ofb->cipher].ecb_encrypt(ofb->IV, ofb->IV, &ofb->key)) != CRYPT_OK) { return err; } ofb->padlen = 0; } - *ct++ = *pt++ ^ ofb->IV[(ofb->padlen)++]; + *ct++ = *pt++ ^ ofb->IV[ofb->padlen++]; } return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ofb/ofb_getiv.c b/src/modes/ofb/ofb_getiv.c index 6a40c1ba..99c97acd 100644 --- a/src/modes/ofb/ofb_getiv.c +++ b/src/modes/ofb/ofb_getiv.c @@ -1,34 +1,46 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ofb_getiv.c OFB implementation, get IV, Tom St Denis */ -#ifdef LTC_OFB_MODE +#ifdef OFB /** - 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 + Get the current initial vector + @param IV [out] The destination of the initial vector + @param len [in/out] The max size and resulting size of the initial vector @param ofb The OFB state @return CRYPT_OK if successful */ -int ofb_getiv(unsigned char *IV, unsigned long *len, const symmetric_OFB *ofb) +int ofb_getiv(unsigned char *IV, unsigned long *len, 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; + if ((unsigned long)ofb->blocklen > *len) { + *len = ofb->blocklen; return CRYPT_BUFFER_OVERFLOW; } - XMEMCPY(IV, ofb->IV, ofb->ecb.blocklen); - *len = ofb->ecb.blocklen; + XMEMCPY(IV, ofb->IV, ofb->blocklen); + *len = ofb->blocklen; return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ofb/ofb_setiv.c b/src/modes/ofb/ofb_setiv.c index 9a06cc57..df2223db 100644 --- a/src/modes/ofb/ofb_setiv.c +++ b/src/modes/ofb/ofb_setiv.c @@ -1,17 +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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ofb_setiv.c OFB implementation, set IV, Tom St Denis */ -#ifdef LTC_OFB_MODE +#ifdef OFB /** - Set an initialization vector - @param IV The initialization vector + Set an initial vector + @param IV The initial vector @param len The length of the vector (in octets) @param ofb The OFB state @return CRYPT_OK if successful @@ -23,18 +31,22 @@ int ofb_setiv(const unsigned char *IV, unsigned long len, symmetric_OFB *ofb) LTC_ARGCHK(IV != NULL); LTC_ARGCHK(ofb != NULL); - if ((err = cipher_is_valid(ofb->ecb.cipher)) != CRYPT_OK) { + if ((err = cipher_is_valid(ofb->cipher)) != CRYPT_OK) { return err; } - if (len != (unsigned long)ofb->ecb.blocklen) { + if (len != (unsigned long)ofb->blocklen) { return CRYPT_INVALID_ARG; } /* force next block */ ofb->padlen = 0; - return ecb_encrypt_block(IV, ofb->IV, &ofb->ecb); + return cipher_descriptor[ofb->cipher].ecb_encrypt(IV, ofb->IV, &ofb->key); } -#endif +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ofb/ofb_start.c b/src/modes/ofb/ofb_start.c index 2998f3fc..80e33466 100644 --- a/src/modes/ofb/ofb_start.c +++ b/src/modes/ofb/ofb_start.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file ofb_start.c @@ -8,19 +16,19 @@ */ -#ifdef LTC_OFB_MODE +#ifdef OFB /** Initialize a OFB context @param cipher The index of the cipher desired - @param IV The initialization vector - @param key The secret key + @param IV The initial 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 ofb_start(int cipher, const unsigned char *IV, const unsigned char *key, int keylen, int num_rounds, symmetric_OFB *ofb) { int x, err; @@ -33,18 +41,20 @@ int ofb_start(int cipher, const unsigned char *IV, const unsigned char *key, 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->cipher = cipher; + ofb->blocklen = cipher_descriptor[cipher].block_length; + for (x = 0; x < ofb->blocklen; x++) { ofb->IV[x] = IV[x]; } - return CRYPT_OK; + /* init the cipher */ + ofb->padlen = ofb->blocklen; + return cipher_descriptor[cipher].setup(key, keylen, num_rounds, &ofb->key); } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index fc41cfcd..a1c849ae 100644 --- a/src/pk/asn1/der/bit/der_decode_bit_string.c +++ b/src/pk/asn1/der/bit/der_decode_bit_string.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_decode_bit_string.c @@ -21,15 +29,14 @@ 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; + unsigned long dlen, blen, x, y; LTC_ARGCHK(in != NULL); LTC_ARGCHK(out != NULL); LTC_ARGCHK(outlen != NULL); - /* packet must be at least 3 bytes */ - if (inlen < 3) { + /* packet must be at least 4 bytes */ + if (inlen < 4) { return CRYPT_INVALID_ARG; } @@ -38,33 +45,36 @@ int der_decode_bit_string(const unsigned char *in, unsigned long inlen, return CRYPT_INVALID_PACKET; } - /* offset in the data */ - x = 1; + /* 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; + if (in[x] & 0x80) { + /* long format get number of length bytes */ + y = in[x++] & 0x7F; + + /* invalid if 0 or > 2 */ + if (y == 0 || y > 2) { + return CRYPT_INVALID_PACKET; + } + + /* read the data len */ + dlen = 0; + while (y--) { + dlen = (dlen << 8) | (unsigned long)in[x++]; + } + } else { + /* short format */ + dlen = in[x++] & 0x7F; } - x += y; + /* is the data len too long or too short? */ - if ((dlen == 0) || (dlen > (inlen - x))) { + if ((dlen == 0) || (dlen + x > inlen)) { 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; + /* get padding count */ + blen = ((dlen - 1) << 3) - (in[x++] & 7); /* too many bits? */ if (blen > *outlen) { @@ -86,3 +96,7 @@ int der_decode_bit_string(const unsigned char *in, unsigned long inlen, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 0c2cd168..62cc5a2a 100644 --- a/src/pk/asn1/der/bit/der_encode_bit_string.c +++ b/src/pk/asn1/der/bit/der_encode_bit_string.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_encode_bit_string.c @@ -21,8 +29,7 @@ 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; + unsigned long len, x, y, buf; int err; LTC_ARGCHK(in != NULL); @@ -41,17 +48,22 @@ int der_encode_bit_string(const unsigned char *in, unsigned long inlen, /* store header (include bit padding count in length) */ x = 0; - y = ((inlen + 7) >> 3) + 1; + y = (inlen >> 3) + ((inlen&7) ? 1 : 0) + 1; out[x++] = 0x03; - len = *outlen - x; - if ((err = der_encode_asn1_length(y, out + x, &len)) != CRYPT_OK) { - return err; + if (y < 128) { + out[x++] = y; + } else if (y < 256) { + out[x++] = 0x81; + out[x++] = y; + } else if (y < 65536) { + out[x++] = 0x82; + out[x++] = (y>>8)&255; + out[x++] = y&255; } - x += len; /* store number of zero padding bits */ - out[x++] = (unsigned char)((8 - inlen) & 7); + out[x++] = (8 - inlen) & 7; /* store the bits in big endian format */ for (y = buf = 0; y < inlen; y++) { @@ -70,3 +82,7 @@ int der_encode_bit_string(const unsigned char *in, unsigned long inlen, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 4554a801..8e5a7751 100644 --- a/src/pk/asn1/der/bit/der_length_bit_string.c +++ b/src/pk/asn1/der/bit/der_length_bit_string.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_length_bit_string.c @@ -9,28 +17,38 @@ #ifdef LTC_DER /** - Gets length of DER encoding of BIT STRING + 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; - + unsigned long nbytes; 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; + + if (nbytes < 128) { + /* 03 LL PP DD DD DD ... */ + *outlen = 2 + nbytes; + } else if (nbytes < 256) { + /* 03 81 LL PP DD DD DD ... */ + *outlen = 3 + nbytes; + } else if (nbytes < 65536) { + /* 03 82 LL LL PP DD DD DD ... */ + *outlen = 4 + nbytes; + } else { + return CRYPT_INVALID_ARG; } - *outlen = 1 + x + nbytes; return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/boolean/der_decode_boolean.c b/src/pk/asn1/der/boolean/der_decode_boolean.c index 35ac7ece..d9d69058 100644 --- a/src/pk/asn1/der/boolean/der_decode_boolean.c +++ b/src/pk/asn1/der/boolean/der_decode_boolean.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_decode_boolean.c @@ -22,14 +30,18 @@ int der_decode_boolean(const unsigned char *in, unsigned long inlen, { LTC_ARGCHK(in != NULL); LTC_ARGCHK(out != NULL); - - if (inlen < 3 || in[0] != 0x01 || in[1] != 0x01 || (in[2] != 0x00 && in[2] != 0xFF)) { + + 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/boolean/der_encode_boolean.c b/src/pk/asn1/der/boolean/der_encode_boolean.c index a77aefb7..78337758 100644 --- a/src/pk/asn1/der/boolean/der_encode_boolean.c +++ b/src/pk/asn1/der/boolean/der_encode_boolean.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_encode_boolean.c @@ -17,23 +25,27 @@ @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, +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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/boolean/der_length_boolean.c b/src/pk/asn1/der/boolean/der_length_boolean.c index f1b9e576..5c42f25e 100644 --- a/src/pk/asn1/der/boolean/der_length_boolean.c +++ b/src/pk/asn1/der/boolean/der_length_boolean.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_length_boolean.c @@ -9,7 +17,7 @@ #ifdef LTC_DER /** - Gets length of DER encoding of a BOOLEAN + Gets length of DER encoding of a BOOLEAN @param outlen [out] The length of the DER encoding @return CRYPT_OK if successful */ @@ -21,3 +29,7 @@ int der_length_boolean(unsigned long *outlen) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/choice/der_decode_choice.c b/src/pk/asn1/der/choice/der_decode_choice.c index cf4422a5..7f6155c2 100644 --- a/src/pk/asn1/der/choice/der_decode_choice.c +++ b/src/pk/asn1/der/choice/der_decode_choice.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_decode_choice.c @@ -43,16 +51,6 @@ int der_decode_choice(const unsigned char *in, unsigned long *inlen, 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) { @@ -65,7 +63,7 @@ int der_decode_choice(const unsigned char *in, unsigned long *inlen, 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) { + if (der_length_short_integer(size, &z) == CRYPT_OK) { list[x].used = 1; *inlen = z; return CRYPT_OK; @@ -84,17 +82,6 @@ int der_decode_choice(const unsigned char *in, unsigned long *inlen, } 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) { @@ -113,7 +100,7 @@ int der_decode_choice(const unsigned char *in, unsigned long *inlen, 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) { @@ -125,17 +112,6 @@ int der_decode_choice(const unsigned char *in, unsigned long *inlen, } 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) { @@ -147,6 +123,7 @@ int der_decode_choice(const unsigned char *in, unsigned long *inlen, } 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) { @@ -158,17 +135,6 @@ int der_decode_choice(const unsigned char *in, unsigned long *inlen, } 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) { @@ -178,15 +144,6 @@ int der_decode_choice(const unsigned char *in, unsigned long *inlen, } 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: @@ -199,18 +156,7 @@ int der_decode_choice(const unsigned char *in, unsigned long *inlen, } 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: + default: return CRYPT_INVALID_ARG; } } @@ -219,3 +165,7 @@ int der_decode_choice(const unsigned char *in, unsigned long *inlen, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 8fd80cf1..98404f88 100644 --- a/src/pk/asn1/der/ia5/der_decode_ia5_string.c +++ b/src/pk/asn1/der/ia5/der_decode_ia5_string.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_decode_ia5_string.c @@ -22,7 +30,7 @@ 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; + int t; LTC_ARGCHK(in != NULL); LTC_ARGCHK(out != NULL); @@ -39,12 +47,23 @@ int der_decode_ia5_string(const unsigned char *in, unsigned long inlen, } 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; + /* decode the length */ + if (in[x] & 0x80) { + /* valid # of bytes in length are 1,2,3 */ + y = in[x] & 0x7F; + if ((y == 0) || (y > 3) || ((x + y) > inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* read the length in */ + len = 0; + ++x; + while (y--) { + len = (len << 8) | in[x++]; + } + } else { + len = in[x++] & 0x7F; } - x += y; /* is it too long? */ if (len > *outlen) { @@ -52,7 +71,7 @@ int der_decode_ia5_string(const unsigned char *in, unsigned long inlen, return CRYPT_BUFFER_OVERFLOW; } - if (len > (inlen - x)) { + if (len + x > inlen) { return CRYPT_INVALID_PACKET; } @@ -69,5 +88,9 @@ int der_decode_ia5_string(const unsigned char *in, unsigned long inlen, return CRYPT_OK; } - + #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/ia5/der_encode_ia5_string.c b/src/pk/asn1/der/ia5/der_encode_ia5_string.c index 8b8bd36b..f19756d8 100644 --- a/src/pk/asn1/der/ia5/der_encode_ia5_string.c +++ b/src/pk/asn1/der/ia5/der_encode_ia5_string.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_encode_ia5_string.c @@ -29,7 +37,7 @@ int der_encode_ia5_string(const unsigned char *in, unsigned long inlen, /* get the size */ if ((err = der_length_ia5_string(in, inlen, &len)) != CRYPT_OK) { - return err; + return err; } /* too big? */ @@ -41,11 +49,23 @@ int der_encode_ia5_string(const unsigned char *in, unsigned long inlen, /* 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; + if (inlen < 128) { + out[x++] = inlen; + } else if (inlen < 256) { + out[x++] = 0x81; + out[x++] = inlen; + } else if (inlen < 65536UL) { + out[x++] = 0x82; + out[x++] = (inlen>>8)&255; + out[x++] = inlen&255; + } else if (inlen < 16777216UL) { + out[x++] = 0x83; + out[x++] = (inlen>>16)&255; + out[x++] = (inlen>>8)&255; + out[x++] = inlen&255; + } else { + return CRYPT_INVALID_ARG; } - x += len; /* store octets */ for (y = 0; y < inlen; y++) { @@ -59,3 +79,7 @@ int der_encode_ia5_string(const unsigned char *in, unsigned long inlen, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/ia5/der_length_ia5_string.c b/src/pk/asn1/der/ia5/der_length_ia5_string.c index 4bce85ef..9ea17d23 100644 --- a/src/pk/asn1/der/ia5/der_length_ia5_string.c +++ b/src/pk/asn1/der/ia5/der_length_ia5_string.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_length_ia5_string.c @@ -13,113 +21,113 @@ 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 }, +{ '\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++) { + for (x = 0; x < (int)(sizeof(ia5_table)/sizeof(ia5_table[0])); x++) { if (ia5_table[x].code == c) { return ia5_table[x].value; } @@ -130,17 +138,17 @@ int der_ia5_char_encode(int c) int der_ia5_value_decode(int v) { int x; - for (x = 0; x < (int)LTC_ARRAY_SIZE(ia5_table); x++) { + for (x = 0; x < (int)(sizeof(ia5_table)/sizeof(ia5_table[0])); 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 + 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 @@ -148,7 +156,6 @@ int der_ia5_value_decode(int v) 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); @@ -160,13 +167,28 @@ int der_length_ia5_string(const unsigned char *octets, unsigned long noctets, un } } - if ((err = der_length_asn1_length(noctets, &x)) != CRYPT_OK) { - return err; + if (noctets < 128) { + /* 16 LL DD DD DD ... */ + *outlen = 2 + noctets; + } else if (noctets < 256) { + /* 16 81 LL DD DD DD ... */ + *outlen = 3 + noctets; + } else if (noctets < 65536UL) { + /* 16 82 LL LL DD DD DD ... */ + *outlen = 4 + noctets; + } else if (noctets < 16777216UL) { + /* 16 83 LL LL LL DD DD DD ... */ + *outlen = 5 + noctets; + } else { + return CRYPT_INVALID_ARG; } - *outlen = 1 + x + noctets; return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/integer/der_decode_integer.c b/src/pk/asn1/der/integer/der_decode_integer.c index 79ff2801..cab54f1a 100644 --- a/src/pk/asn1/der/integer/der_decode_integer.c +++ b/src/pk/asn1/der/integer/der_decode_integer.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_decode_integer.c @@ -19,17 +27,12 @@ */ int der_decode_integer(const unsigned char *in, unsigned long inlen, void *num) { - unsigned long x, y; + unsigned long x, y, z; 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; @@ -41,38 +44,67 @@ int der_decode_integer(const unsigned char *in, unsigned long inlen, void *num) 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; + /* now decode the len stuff */ + z = in[x++]; - /* an INTEGER holds at least one content octet, so in[x] below stays inside the packet */ - if (y == 0) { - return CRYPT_INVALID_PACKET; - } + if ((z & 0x80) == 0x00) { + /* short form */ - if ((err = ltc_mp_read_unsigned_bin(num, (unsigned char *)in + x, y)) != CRYPT_OK) { - return err; + /* will it overflow? */ + if (x + z > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* no so read it */ + if ((err = mp_read_unsigned_bin(num, (unsigned char *)in + x, z)) != CRYPT_OK) { + return err; + } + } else { + /* long form */ + z &= 0x7F; + + /* will number of length bytes overflow? (or > 4) */ + if (((x + z) > inlen) || (z > 4) || (z == 0)) { + return CRYPT_INVALID_PACKET; + } + + /* now read it in */ + y = 0; + while (z--) { + y = ((unsigned long)(in[x++])) | (y << 8); + } + + /* now will reading y bytes overrun? */ + if ((x + y) > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* no so read it */ + if ((err = 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) { + if (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); + if (mp_2expt(tmp, mp_count_bits(num)) != CRYPT_OK || mp_sub(num, tmp, num) != CRYPT_OK) { + mp_clear(tmp); return CRYPT_MEM; } - ltc_mp_clear(tmp); - } + mp_clear(tmp); + } return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/integer/der_encode_integer.c b/src/pk/asn1/der/integer/der_encode_integer.c index 23e2106a..10985f99 100644 --- a/src/pk/asn1/der/integer/der_encode_integer.c +++ b/src/pk/asn1/der/integer/der_encode_integer.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_encode_integer.c @@ -19,8 +27,8 @@ @return CRYPT_OK if successful */ int der_encode_integer(void *num, unsigned char *out, unsigned long *outlen) -{ - unsigned long tmplen, y, len; +{ + unsigned long tmplen, y; int err, leading_zero; LTC_ARGCHK(num != NULL); @@ -37,31 +45,44 @@ int der_encode_integer(void *num, unsigned char *out, unsigned long *outlen) return CRYPT_BUFFER_OVERFLOW; } - if (ltc_mp_cmp_d(num, 0) != LTC_MP_LT) { + if (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) { + if ((mp_count_bits(num) & 7) == 0 || 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; + y = mp_unsigned_bin_size(num) + leading_zero; } else { leading_zero = 0; - y = ltc_mp_count_bits(num); + y = 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; + if (((mp_cnt_lsb(num)+1)==mp_count_bits(num)) && ((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; + if (y < 128) { + /* short form */ + *out++ = (unsigned char)y; + } else if (y < 256) { + *out++ = 0x81; + *out++ = y; + } else if (y < 65536UL) { + *out++ = 0x82; + *out++ = (y>>8)&255; + *out++ = y; + } else if (y < 16777216UL) { + *out++ = 0x83; + *out++ = (y>>16)&255; + *out++ = (y>>8)&255; + *out++ = y; + } else { + return CRYPT_INVALID_ARG; } - out += len; /* now store msbyte of zero if num is non-zero */ if (leading_zero) { @@ -69,37 +90,41 @@ int der_encode_integer(void *num, unsigned char *out, unsigned long *outlen) } /* if it's not zero store it as big endian */ - if (ltc_mp_cmp_d(num, 0) == LTC_MP_GT) { + if (mp_cmp_d(num, 0) == LTC_MP_GT) { /* now store the mpint */ - if ((err = ltc_mp_to_unsigned_bin(num, out)) != CRYPT_OK) { + if ((err = mp_to_unsigned_bin(num, out)) != CRYPT_OK) { return err; } - } else if (ltc_mp_iszero(num) != LTC_MP_YES) { + } else if (mp_iszero(num) != LTC_MP_YES) { void *tmp; - + /* negative */ - if (ltc_mp_init(&tmp) != CRYPT_OK) { + if (mp_init(&tmp) != CRYPT_OK) { return CRYPT_MEM; } /* 2^roundup and subtract */ - y = ltc_mp_count_bits(num); + y = 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); + if (((mp_cnt_lsb(num)+1)==mp_count_bits(num)) && ((mp_count_bits(num)&7)==0)) y -= 8; + if (mp_2expt(tmp, y) != CRYPT_OK || mp_add(tmp, num, tmp) != CRYPT_OK) { + mp_clear(tmp); return CRYPT_MEM; } - if ((err = ltc_mp_to_unsigned_bin(tmp, out)) != CRYPT_OK) { - ltc_mp_clear(tmp); + if ((err = mp_to_unsigned_bin(tmp, out)) != CRYPT_OK) { + mp_clear(tmp); return err; } - ltc_mp_clear(tmp); + mp_clear(tmp); } /* we good */ - *outlen = tmplen; + *outlen = tmplen; return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/integer/der_length_integer.c b/src/pk/asn1/der/integer/der_length_integer.c index 466f297c..4b8286c8 100644 --- a/src/pk/asn1/der/integer/der_length_integer.c +++ b/src/pk/asn1/der/integer/der_length_integer.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_length_integer.c @@ -10,46 +18,65 @@ #ifdef LTC_DER /** - Gets length of DER encoding of num - @param num The int to get the size of + 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; + int leading_zero; LTC_ARGCHK(num != NULL); LTC_ARGCHK(outlen != NULL); - if (ltc_mp_cmp_d(num, 0) != LTC_MP_LT) { + if (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) { + if ((mp_count_bits(num) & 7) == 0 || 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); + z = len = leading_zero + 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); + leading_zero = 0; + z = 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 (((mp_cnt_lsb(num)+1)==mp_count_bits(num)) && ((mp_count_bits(num)&7)==0)) --z; + len = z = z >> 3; } - if ((err = der_length_asn1_length(len, &z)) != CRYPT_OK) { - return err; - } - *outlen = 1 + z + len; + /* now we need a length */ + if (z < 128) { + /* short form */ + ++len; + } else { + /* long form (relies on z != 0), assumes length bytes < 128 */ + ++len; + while (z) { + ++len; + z >>= 8; + } + } + + /* we need a 0x02 to indicate it's INTEGER */ + ++len; + + /* return length */ + *outlen = len; return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 72512477..71efcb11 100644 --- a/src/pk/asn1/der/object_identifier/der_decode_object_identifier.c +++ b/src/pk/asn1/der/object_identifier/der_decode_object_identifier.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_decode_object_identifier.c @@ -20,7 +28,6 @@ int der_decode_object_identifier(const unsigned char *in, unsigned long inle unsigned long *words, unsigned long *outlen) { unsigned long x, y, t, len; - int err; LTC_ARGCHK(in != NULL); LTC_ARGCHK(words != NULL); @@ -33,7 +40,6 @@ int der_decode_object_identifier(const unsigned char *in, unsigned long inle /* must be room for at least two words */ if (*outlen < 2) { - *outlen = 2; return CRYPT_BUFFER_OVERFLOW; } @@ -42,15 +48,22 @@ int der_decode_object_identifier(const unsigned char *in, unsigned long inle 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; + + /* get the length */ + if (in[x] < 128) { + len = in[x++]; + } else { + if (in[x] < 0x81 || in[x] > 0x82) { + return CRYPT_INVALID_PACKET; + } + y = in[x++] & 0x7F; + len = 0; + while (y--) { + len = (len << 8) | (unsigned long)in[x++]; + } } - x += y; - if ((len == 0) || (len > (inlen - x))) { + if (len < 1 || (len + x) > inlen) { return CRYPT_INVALID_PACKET; } @@ -58,37 +71,29 @@ int der_decode_object_identifier(const unsigned char *in, unsigned long inle 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; - } + t = (t << 7) | (in[x] & 0x7F); + if (!(in[x++] & 0x80)) { + /* store t */ + if (y >= *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + if (y == 0) { + words[0] = t / 40; + words[1] = t % 40; + y = 2; + } else { + words[y++] = t; + } + t = 0; + } } - - if (y > *outlen) { - err = CRYPT_BUFFER_OVERFLOW; - } else { - err = CRYPT_OK; - } - + *outlen = y; - return err; + return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index af563542..9f1fe3b1 100644 --- a/src/pk/asn1/der/object_identifier/der_encode_object_identifier.c +++ b/src/pk/asn1/der/object_identifier/der_encode_object_identifier.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_encode_object_identifier.c @@ -16,8 +24,8 @@ @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) +int der_encode_object_identifier(unsigned long *words, unsigned long nwords, + unsigned char *out, unsigned long *outlen) { unsigned long i, x, y, z, t, mask, wordbuf; int err; @@ -27,7 +35,7 @@ int der_encode_object_identifier(const unsigned long *words, unsigned long nwor LTC_ARGCHK(outlen != NULL); /* check length */ - if ((err = der_length_object_identifier_full(words, nwords, &x, &z)) != CRYPT_OK) { + if ((err = der_length_object_identifier(words, nwords, &x)) != CRYPT_OK) { return err; } if (x > *outlen) { @@ -35,43 +43,61 @@ int der_encode_object_identifier(const unsigned long *words, unsigned long nwor 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; + /* compute length to store OID data */ + z = 0; + wordbuf = words[0] * 40 + words[1]; + for (y = 1; y < nwords; y++) { + t = der_object_identifier_bits(wordbuf); + z += t/7 + ((t%7) ? 1 : 0) + (wordbuf == 0 ? 1 : 0); + if (y < nwords - 1) { + wordbuf = words[y + 1]; + } + } + + /* store header + length */ + x = 0; + out[x++] = 0x06; + if (z < 128) { + out[x++] = z; + } else if (z < 256) { + out[x++] = 0x81; + out[x++] = z; + } else if (z < 65536UL) { + out[x++] = 0x82; + out[x++] = (z>>8)&255; + out[x++] = z&255; + } else { + return CRYPT_INVALID_ARG; } - 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]; - } + wordbuf = words[0] * 40 + words[1]; + for (i = 1; i < nwords; i++) { + /* store 7 bit words in little endian */ + t = wordbuf & 0xFFFFFFFF; + if (t) { + y = x; + mask = 0; + while (t) { + out[x++] = (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] = t; + ++y; + --z; + } + } else { + /* zero word */ + out[x++] = 0x00; + } + + if (i < nwords - 1) { + wordbuf = words[i + 1]; + } } *outlen = x; @@ -79,3 +105,7 @@ int der_encode_object_identifier(const unsigned long *words, unsigned long nwor } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 8facf74e..6ca8cf1a 100644 --- a/src/pk/asn1/der/object_identifier/der_length_object_identifier.c +++ b/src/pk/asn1/der/object_identifier/der_length_object_identifier.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_length_object_identifier.c @@ -9,26 +17,29 @@ #ifdef LTC_DER -static LTC_INLINE unsigned long s_der_object_identifier_bits(unsigned long x) +unsigned long 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; + x &= 0xFFFFFFFF; 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) + +/** + 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(unsigned long *words, unsigned long nwords, unsigned long *outlen) { - unsigned long y, z, t, wordbuf; + unsigned long y, z, t, wordbuf; LTC_ARGCHK(words != NULL); LTC_ARGCHK(outlen != NULL); @@ -39,8 +50,8 @@ int der_length_object_identifier_full(const unsigned long *words, unsigned long return CRYPT_INVALID_ARG; } - /* word1 = 0,1,2 and word2 0..39 */ - if (words[0] > 2 || (words[0] < 2 && words[1] > 39)) { + /* word1 = 0,1,2,3 and word2 0..39 */ + if (words[0] > 3 || (words[0] < 2 && words[1] > 39)) { return CRYPT_INVALID_ARG; } @@ -48,7 +59,7 @@ int der_length_object_identifier_full(const unsigned long *words, unsigned long z = 0; wordbuf = words[0] * 40 + words[1]; for (y = 1; y < nwords; y++) { - t = s_der_object_identifier_bits(wordbuf); + t = der_object_identifier_bits(wordbuf); z += t/7 + ((t%7) ? 1 : 0) + (wordbuf == 0 ? 1 : 0); if (y < nwords - 1) { /* grab next word */ @@ -56,9 +67,6 @@ int der_length_object_identifier_full(const unsigned long *words, unsigned long } } - if (datalen) { - *datalen = z; - } /* now depending on the length our length encoding changes */ if (z < 128) { z += 2; @@ -74,16 +82,8 @@ int der_length_object_identifier_full(const unsigned long *words, unsigned long 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/octet/der_decode_octet_string.c b/src/pk/asn1/der/octet/der_decode_octet_string.c index df847214..2b7401b0 100644 --- a/src/pk/asn1/der/octet/der_decode_octet_string.c +++ b/src/pk/asn1/der/octet/der_decode_octet_string.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_decode_octet_string.c @@ -22,7 +30,6 @@ 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); @@ -39,12 +46,23 @@ int der_decode_octet_string(const unsigned char *in, unsigned long inlen, } 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; + /* decode the length */ + if (in[x] & 0x80) { + /* valid # of bytes in length are 1,2,3 */ + y = in[x] & 0x7F; + if ((y == 0) || (y > 3) || ((x + y) > inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* read the length in */ + len = 0; + ++x; + while (y--) { + len = (len << 8) | in[x++]; + } + } else { + len = in[x++] & 0x7F; } - x += y; /* is it too long? */ if (len > *outlen) { @@ -52,7 +70,7 @@ int der_decode_octet_string(const unsigned char *in, unsigned long inlen, return CRYPT_BUFFER_OVERFLOW; } - if (len > (inlen - x)) { + if (len + x > inlen) { return CRYPT_INVALID_PACKET; } @@ -65,5 +83,9 @@ int der_decode_octet_string(const unsigned char *in, unsigned long inlen, return CRYPT_OK; } - + #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/octet/der_encode_octet_string.c b/src/pk/asn1/der/octet/der_encode_octet_string.c index 73f1ee76..54bd38bf 100644 --- a/src/pk/asn1/der/octet/der_encode_octet_string.c +++ b/src/pk/asn1/der/octet/der_encode_octet_string.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_encode_octet_string.c @@ -30,7 +38,7 @@ int der_encode_octet_string(const unsigned char *in, unsigned long inlen, /* get the size */ if ((err = der_length_octet_string(inlen, &len)) != CRYPT_OK) { - return err; + return err; } /* too big? */ @@ -42,11 +50,23 @@ int der_encode_octet_string(const unsigned char *in, unsigned long inlen, /* 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; + if (inlen < 128) { + out[x++] = inlen; + } else if (inlen < 256) { + out[x++] = 0x81; + out[x++] = inlen; + } else if (inlen < 65536UL) { + out[x++] = 0x82; + out[x++] = (inlen>>8)&255; + out[x++] = inlen&255; + } else if (inlen < 16777216UL) { + out[x++] = 0x83; + out[x++] = (inlen>>16)&255; + out[x++] = (inlen>>8)&255; + out[x++] = inlen&255; + } else { + return CRYPT_INVALID_ARG; } - x += len; /* store octets */ for (y = 0; y < inlen; y++) { @@ -60,3 +80,7 @@ int der_encode_octet_string(const unsigned char *in, unsigned long inlen, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/octet/der_length_octet_string.c b/src/pk/asn1/der/octet/der_length_octet_string.c index 67b071e6..6cf1ad0e 100644 --- a/src/pk/asn1/der/octet/der_length_octet_string.c +++ b/src/pk/asn1/der/octet/der_length_octet_string.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_length_octet_string.c @@ -9,25 +17,37 @@ #ifdef LTC_DER /** - Gets length of DER encoding of OCTET STRING + 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; + if (noctets < 128) { + /* 04 LL DD DD DD ... */ + *outlen = 2 + noctets; + } else if (noctets < 256) { + /* 04 81 LL DD DD DD ... */ + *outlen = 3 + noctets; + } else if (noctets < 65536UL) { + /* 04 82 LL LL DD DD DD ... */ + *outlen = 4 + noctets; + } else if (noctets < 16777216UL) { + /* 04 83 LL LL LL DD DD DD ... */ + *outlen = 5 + noctets; + } else { + return CRYPT_INVALID_ARG; } - *outlen = 1 + x + noctets; return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 3f9b533e..932b5abf 100644 --- a/src/pk/asn1/der/printable_string/der_decode_printable_string.c +++ b/src/pk/asn1/der/printable_string/der_decode_printable_string.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_decode_printable_string.c @@ -22,7 +30,7 @@ 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; + int t; LTC_ARGCHK(in != NULL); LTC_ARGCHK(out != NULL); @@ -39,12 +47,23 @@ int der_decode_printable_string(const unsigned char *in, unsigned long inlen, } 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; + /* decode the length */ + if (in[x] & 0x80) { + /* valid # of bytes in length are 1,2,3 */ + y = in[x] & 0x7F; + if ((y == 0) || (y > 3) || ((x + y) > inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* read the length in */ + len = 0; + ++x; + while (y--) { + len = (len << 8) | in[x++]; + } + } else { + len = in[x++] & 0x7F; } - x += y; /* is it too long? */ if (len > *outlen) { @@ -52,7 +71,7 @@ int der_decode_printable_string(const unsigned char *in, unsigned long inlen, return CRYPT_BUFFER_OVERFLOW; } - if (len > (inlen - x)) { + if (len + x > inlen) { return CRYPT_INVALID_PACKET; } @@ -69,5 +88,9 @@ int der_decode_printable_string(const unsigned char *in, unsigned long inlen, return CRYPT_OK; } - + #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 7b3aefd1..ae81cede 100644 --- a/src/pk/asn1/der/printable_string/der_encode_printable_string.c +++ b/src/pk/asn1/der/printable_string/der_encode_printable_string.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_encode_printable_string.c @@ -29,7 +37,7 @@ int der_encode_printable_string(const unsigned char *in, unsigned long inlen, /* get the size */ if ((err = der_length_printable_string(in, inlen, &len)) != CRYPT_OK) { - return err; + return err; } /* too big? */ @@ -41,11 +49,23 @@ int der_encode_printable_string(const unsigned char *in, unsigned long inlen, /* 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; + if (inlen < 128) { + out[x++] = inlen; + } else if (inlen < 256) { + out[x++] = 0x81; + out[x++] = inlen; + } else if (inlen < 65536UL) { + out[x++] = 0x82; + out[x++] = (inlen>>8)&255; + out[x++] = inlen&255; + } else if (inlen < 16777216UL) { + out[x++] = 0x83; + out[x++] = (inlen>>16)&255; + out[x++] = (inlen>>8)&255; + out[x++] = inlen&255; + } else { + return CRYPT_INVALID_ARG; } - x += len; /* store octets */ for (y = 0; y < inlen; y++) { @@ -59,3 +79,7 @@ int der_encode_printable_string(const unsigned char *in, unsigned long inlen, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index dcfcae9c..80bf7902 100644 --- a/src/pk/asn1/der/printable_string/der_length_printable_string.c +++ b/src/pk/asn1/der/printable_string/der_length_printable_string.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_length_printable_string.c @@ -12,86 +20,86 @@ 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 }, +{ ' ', 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++) { + for (x = 0; x < (int)(sizeof(printable_table)/sizeof(printable_table[0])); x++) { if (printable_table[x].code == c) { return printable_table[x].value; } @@ -102,17 +110,17 @@ int der_printable_char_encode(int c) int der_printable_value_decode(int v) { int x; - for (x = 0; x < (int)LTC_ARRAY_SIZE(printable_table); x++) { + for (x = 0; x < (int)(sizeof(printable_table)/sizeof(printable_table[0])); 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 + 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 @@ -120,7 +128,6 @@ int der_printable_value_decode(int v) 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); @@ -132,13 +139,28 @@ int der_length_printable_string(const unsigned char *octets, unsigned long nocte } } - if ((err = der_length_asn1_length(noctets, &x)) != CRYPT_OK) { - return err; + if (noctets < 128) { + /* 16 LL DD DD DD ... */ + *outlen = 2 + noctets; + } else if (noctets < 256) { + /* 16 81 LL DD DD DD ... */ + *outlen = 3 + noctets; + } else if (noctets < 65536UL) { + /* 16 82 LL LL DD DD DD ... */ + *outlen = 4 + noctets; + } else if (noctets < 16777216UL) { + /* 16 83 LL LL LL DD DD DD ... */ + *outlen = 5 + noctets; + } else { + return CRYPT_INVALID_ARG; } - *outlen = 1 + x + noctets; return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/sequence/der_decode_sequence_ex.c b/src/pk/asn1/der/sequence/der_decode_sequence_ex.c index 6d7f8467..a3ff2ba1 100644 --- a/src/pk/asn1/der/sequence/der_decode_sequence_ex.c +++ b/src/pk/asn1/der/sequence/der_decode_sequence_ex.c @@ -1,6 +1,15 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" +#include /** @@ -16,13 +25,245 @@ @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 + @param ordered Search an unordeded or ordered list @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) + ltc_asn1_list *list, unsigned long outlen, int ordered) { - return der_decode_custom_type_ex(in, inlen, NULL, list, outlen, flags); -} + int err, type; + unsigned long size, x, y, z, i, blksize; + void *data; + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(list != NULL); + + /* get blk size */ + if (inlen < 2) { + return CRYPT_INVALID_PACKET; + } + + /* sequence type? We allow 0x30 SEQUENCE and 0x31 SET since fundamentally they're the same structure */ + x = 0; + if (in[x] != 0x30 && in[x] != 0x31) { + return CRYPT_INVALID_PACKET; + } + ++x; + + if (in[x] < 128) { + blksize = in[x++]; + } else if (in[x] & 0x80) { + if (in[x] < 0x81 || in[x] > 0x83) { + return CRYPT_INVALID_PACKET; + } + y = in[x++] & 0x7F; + + /* would reading the len bytes overrun? */ + if (x + y > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* read len */ + blksize = 0; + while (y--) { + blksize = (blksize << 8) | (unsigned long)in[x++]; + } + } + + /* would this blksize overflow? */ + if (x + blksize > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* mark all as unused */ + for (i = 0; i < outlen; i++) { + list[i].used = 0; + } + + /* ok read data */ + inlen = blksize; + for (i = 0; i < 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; + } + + switch (type) { + case LTC_ASN1_BOOLEAN: + z = inlen; + if ((err = der_decode_boolean(in + x, z, ((int *)data))) != CRYPT_OK) { + 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) { 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) { 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) { 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) { 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) { 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) { 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_IA5_STRING: + z = inlen; + if ((err = der_decode_ia5_string(in + x, z, data, &size)) != CRYPT_OK) { + if (!ordered) { 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) { 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_UTCTIME: + z = inlen; + if ((err = der_decode_utctime(in + x, &z, data)) != CRYPT_OK) { + if (!ordered) { 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) { 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: + z = inlen; + if ((err = der_decode_sequence(in + x, z, data, size)) != CRYPT_OK) { + if (!ordered) { continue; } + goto LBL_ERR; + } + if ((err = der_length_sequence(data, size, &z)) != 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) { continue; } + goto LBL_ERR; + } + break; + + default: + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + x += z; + inlen -= z; + list[i].used = 1; + if (!ordered) { + /* restart the decoder */ + i = -1; + } + } + + for (i = 0; i < outlen; i++) { + if (list[i].used == 0) { + err = CRYPT_INVALID_PACKET; + goto LBL_ERR; + } + } + err = CRYPT_OK; + +LBL_ERR: + return err; +} + #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c b/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c index 422e12d9..42e0b5bf 100644 --- a/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c +++ b/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_decode_sequence_flexi.c @@ -9,167 +17,120 @@ #ifdef LTC_DER -static int s_new_element(ltc_asn1_list **l) +static unsigned long fetch_length(const unsigned char *in, unsigned long inlen) { - /* 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 + unsigned long x, y, z; -/** + y = 0; + + /* skip type and read len */ + if (inlen < 2) { + return 0xFFFFFFFF; + } + ++in; ++y; + + /* read len */ + x = *in++; ++y; + + /* <128 means literal */ + if (x < 128) { + return x+y; + } + x &= 0x7F; /* the lower 7 bits are the length of the length */ + inlen -= 2; + + /* len means len of len! */ + if (x == 0 || x > 4 || x > inlen) { + return 0xFFFFFFFF; + } + + y += x; + z = 0; + while (x--) { + z = (z<<8) | ((unsigned long)*in); + ++in; + } + return z+y; +} + +/** 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 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) +*/ +int der_decode_sequence_flexi(const unsigned char *in, unsigned long *inlen, ltc_asn1_list **out) { ltc_asn1_list *l; - int err; - unsigned long identifier, len, totlen, data_offset, id_len, len_len; + unsigned long err, type, len, totlen, x, y; 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; - } + while (*inlen) { /* read the type byte */ - identifier = *in; + type = *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; + /* fetch length */ + len = fetch_length(in, *inlen); + if (len > *inlen) { + err = CRYPT_INVALID_PACKET; + goto error; + } - 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; - } + /* alloc new link */ + if (l == NULL) { + l = XCALLOC(1, sizeof(*l)); + if (l == NULL) { + err = CRYPT_MEM; + goto error; } } 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; + l->next = XCALLOC(1, sizeof(*l)); + if (l->next == NULL) { + err = CRYPT_MEM; + goto error; + } + l->next->prev = l; + l = l->next; } - /* now switch on type */ - switch (identifier) { + /* now switch on type */ + switch (type) { case 0x01: /* BOOLEAN */ - if (l->type != LTC_ASN1_BOOLEAN) { - err = CRYPT_PK_ASN1_ERROR; - goto error; + l->type = LTC_ASN1_BOOLEAN; + l->size = 1; + l->data = XCALLOC(1, sizeof(int)); + + if ((err = der_decode_boolean(in, *inlen, l->data)) != CRYPT_OK) { + 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; } - - if ((err = der_length_boolean(&len)) != CRYPT_OK) { - goto error; - } - break; + 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->type = LTC_ASN1_INTEGER; l->size = 1; - if ((err = ltc_mp_init(&l->data)) != CRYPT_OK) { + if ((err = 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; @@ -177,92 +138,79 @@ static int s_der_decode_sequence_flexi(const unsigned char *in, unsigned long *i break; case 0x03: /* BIT */ - if (l->type != LTC_ASN1_BIT_STRING) { - err = CRYPT_PK_ASN1_ERROR; - goto error; - } - /* init field */ + l->type = LTC_ASN1_BIT_STRING; 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->type = LTC_ASN1_OCTET_STRING; 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->type = LTC_ASN1_NULL; 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->type = LTC_ASN1_OBJECT_IDENTIFIER; 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 */ @@ -270,261 +218,135 @@ static int s_der_decode_sequence_flexi(const unsigned char *in, unsigned long *i } 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->type = LTC_ASN1_PRINTABLE_STRING; 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->type = LTC_ASN1_IA5_STRING; 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->type = LTC_ASN1_UTCTIME; 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; - + l->type = (type == 0x30) ? LTC_ASN1_SEQUENCE : LTC_ASN1_SET; + + /* we have to decode the SEQUENCE header and get it's length */ + + /* move past type */ + ++in; --(*inlen); + + /* read length byte */ + x = *in++; --(*inlen); + + /* smallest SEQUENCE/SET header */ + y = 2; + + /* now if it's > 127 the next bytes are the length of the length */ + if (x > 128) { + x &= 0x7F; + in += x; + *inlen -= x; + + /* update sequence header len */ + y += x; + } + /* Sequence elements go as child */ - if ((err = s_der_decode_sequence_flexi(in, &len, &(l->child), depth+1)) != CRYPT_OK) { + len = len - y; + if ((err = der_decode_sequence_flexi(in, &len, &(l->child))) != 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; - } - + totlen += y; + + /* 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; - } + l = l->prev; + XFREE(l->next); + l->next = NULL; goto outside; } - + /* advance pointers */ totlen += len; in += len; *inlen -= len; } + +outside: -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; - } + /* 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; @@ -537,17 +359,9 @@ error: 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/sequence/der_decode_sequence_multi.c b/src/pk/asn1/der/sequence/der_decode_sequence_multi.c index 78170abf..64af93c3 100644 --- a/src/pk/asn1/der/sequence/der_decode_sequence_multi.c +++ b/src/pk/asn1/der/sequence/der_decode_sequence_multi.c @@ -1,6 +1,15 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" +#include /** @@ -14,35 +23,31 @@ 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 + @remark <...> is of the form (int, unsigned long, void*) @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 der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...) { - int err; - ltc_asn1_type type; + int err, type; unsigned long size, x; void *data; + va_list args; ltc_asn1_list *list; LTC_ARGCHK(in != NULL); /* get size of output that will be required */ + va_start(args, inlen); x = 0; for (;;) { - type = (ltc_asn1_type)va_arg(a1, int); + type = va_arg(args, int); + size = va_arg(args, unsigned long); + data = va_arg(args, void*); - if (type == LTC_ASN1_EOL) { + 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: @@ -53,42 +58,40 @@ static int s_der_decode_sequence_va(const unsigned char *in, unsigned long inlen 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; + ++x; break; - - case LTC_ASN1_EOL: - case LTC_ASN1_CUSTOM_TYPE: + + default: + 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)); + list = XCALLOC(sizeof(*list), x); if (list == NULL) { return CRYPT_MEM; } /* fill in the structure */ + va_start(args, inlen); x = 0; for (;;) { - type = (ltc_asn1_type)va_arg(a2, int); - size = va_arg(a2, unsigned long); - data = va_arg(a2, void*); + type = va_arg(args, int); + size = va_arg(args, unsigned long); + data = va_arg(args, void*); - if (type == LTC_ASN1_EOL) { + if (type == LTC_ASN1_EOL) { break; } @@ -102,79 +105,33 @@ static int s_der_decode_sequence_va(const unsigned char *in, unsigned long inlen 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_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: + list[x].type = type; + list[x].size = size; + list[x++].data = data; break; + + default: + va_end(args); + err = CRYPT_INVALID_ARG; + goto LBL_ERR; } } + va_end(args); - err = der_decode_sequence_ex(in, inlen, list, x, flags); + err = der_decode_sequence(in, inlen, list, x); +LBL_ERR: 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/sequence/der_encode_sequence_ex.c b/src/pk/asn1/der/sequence/der_encode_sequence_ex.c index 2ea33a6d..fc2eba14 100644 --- a/src/pk/asn1/der/sequence/der_encode_sequence_ex.c +++ b/src/pk/asn1/der/sequence/der_encode_sequence_ex.c @@ -1,6 +1,15 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" +#include /** @@ -14,16 +23,15 @@ 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 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 der_encode_sequence_ex(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen, int type_of) { - int err; - ltc_asn1_type type; + int err, type; unsigned long size, x, y, z, i; void *data; @@ -32,8 +40,116 @@ int der_encode_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, 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; + 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; + } + + 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: + 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_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_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; + + default: + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + } + + /* calc header size */ + z = y; + if (y < 128) { + y += 2; + } else if (y < 256) { + /* 0x30 0x81 LL */ + y += 3; + } else if (y < 65536UL) { + /* 0x30 0x82 LL LL */ + y += 4; + } else if (y < 16777216UL) { + /* 0x30 0x83 LL LL LL */ + y += 5; + } else { + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } /* too big ? */ if (*outlen < y) { @@ -45,12 +161,22 @@ int der_encode_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, /* 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; + + if (z < 128) { + out[x++] = z; + } else if (z < 256) { + out[x++] = 0x81; + out[x++] = z; + } else if (z < 65536UL) { + out[x++] = 0x82; + out[x++] = (z>>8UL)&255; + out[x++] = z&255; + } else if (z < 16777216UL) { + out[x++] = 0x83; + out[x++] = (z>>16UL)&255; + out[x++] = (z>>8UL)&255; + out[x++] = z&255; } - x += y; /* store data */ *outlen -= x; @@ -59,23 +185,27 @@ int der_encode_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, size = list[i].size; data = list[i].data; - if (type == LTC_ASN1_EOL) { + 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; - + z = *outlen; + if ((err = der_encode_boolean(*((int *)data), out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + case LTC_ASN1_INTEGER: z = *outlen; if ((err = der_encode_integer(data, out + x, &z)) != CRYPT_OK) { goto LBL_ERR; } + x += z; + *outlen -= z; break; case LTC_ASN1_SHORT_INTEGER: @@ -83,6 +213,8 @@ int der_encode_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, if ((err = der_encode_short_integer(*((unsigned long*)data), out + x, &z)) != CRYPT_OK) { goto LBL_ERR; } + x += z; + *outlen -= z; break; case LTC_ASN1_BIT_STRING: @@ -90,13 +222,8 @@ int der_encode_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, 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; - } + x += z; + *outlen -= z; break; case LTC_ASN1_OCTET_STRING: @@ -104,12 +231,14 @@ int der_encode_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, if ((err = der_encode_octet_string(data, size, out + x, &z)) != CRYPT_OK) { goto LBL_ERR; } + x += z; + *outlen -= z; break; case LTC_ASN1_NULL: - out[x] = 0x05; - out[x+1] = 0x00; - z = 2; + out[x++] = 0x05; + out[x++] = 0x00; + *outlen -= 2; break; case LTC_ASN1_OBJECT_IDENTIFIER: @@ -117,6 +246,8 @@ int der_encode_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, if ((err = der_encode_object_identifier(data, size, out + x, &z)) != CRYPT_OK) { goto LBL_ERR; } + x += z; + *outlen -= z; break; case LTC_ASN1_IA5_STRING: @@ -124,20 +255,17 @@ int der_encode_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, if ((err = der_encode_ia5_string(data, size, out + x, &z)) != CRYPT_OK) { goto LBL_ERR; } + x += z; + *outlen -= z; 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; - } + x += z; + *outlen -= z; break; case LTC_ASN1_UTCTIME: @@ -145,13 +273,8 @@ int der_encode_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, 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; - } + x += z; + *outlen -= z; break; case LTC_ASN1_SET: @@ -159,6 +282,8 @@ int der_encode_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, if ((err = der_encode_set(data, size, out + x, &z)) != CRYPT_OK) { goto LBL_ERR; } + x += z; + *outlen -= z; break; case LTC_ASN1_SETOF: @@ -166,6 +291,8 @@ int der_encode_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, if ((err = der_encode_setof(data, size, out + x, &z)) != CRYPT_OK) { goto LBL_ERR; } + x += z; + *outlen -= z; break; case LTC_ASN1_SEQUENCE: @@ -173,27 +300,17 @@ int der_encode_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, if ((err = der_encode_sequence_ex(data, size, out + x, &z, type)) != CRYPT_OK) { goto LBL_ERR; } + x += z; + *outlen -= z; 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: + + default: err = CRYPT_INVALID_ARG; goto LBL_ERR; } - - x += z; - *outlen -= z; } *outlen = x; - err = CRYPT_OK; + err = CRYPT_OK; LBL_ERR: return err; diff --git a/src/pk/asn1/der/sequence/der_encode_sequence_multi.c b/src/pk/asn1/der/sequence/der_encode_sequence_multi.c index 4202cf25..4386a0ae 100644 --- a/src/pk/asn1/der/sequence/der_encode_sequence_multi.c +++ b/src/pk/asn1/der/sequence/der_encode_sequence_multi.c @@ -1,6 +1,15 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" +#include /** @@ -16,11 +25,10 @@ @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; + int err, type; unsigned long size, x; void *data; va_list args; @@ -33,16 +41,13 @@ int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...) va_start(args, outlen); x = 0; for (;;) { - type = (ltc_asn1_type)va_arg(args, int); - - if (type == LTC_ASN1_EOL) { - break; - } - + type = va_arg(args, int); size = va_arg(args, unsigned long); data = va_arg(args, void*); - LTC_UNUSED_PARAM(size); - LTC_UNUSED_PARAM(data); + + if (type == LTC_ASN1_EOL) { + break; + } switch (type) { case LTC_ASN1_BOOLEAN: @@ -54,20 +59,14 @@ int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...) 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; + ++x; break; - - case LTC_ASN1_CHOICE: - case LTC_ASN1_CUSTOM_TYPE: - case LTC_ASN1_EOL: - case LTC_ASN1_TELETEX_STRING: + + default: va_end(args); return CRYPT_INVALID_ARG; } @@ -79,7 +78,7 @@ int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...) return CRYPT_NOP; } - list = XCALLOC(x, sizeof(*list)); + list = XCALLOC(sizeof(*list), x); if (list == NULL) { return CRYPT_MEM; } @@ -88,15 +87,14 @@ int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...) va_start(args, outlen); x = 0; for (;;) { - type = (ltc_asn1_type)va_arg(args, int); - - if (type == LTC_ASN1_EOL) { - break; - } - + type = va_arg(args, int); size = va_arg(args, unsigned long); data = va_arg(args, void*); + if (type == LTC_ASN1_EOL) { + break; + } + switch (type) { case LTC_ASN1_BOOLEAN: case LTC_ASN1_INTEGER: @@ -107,20 +105,16 @@ int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...) 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); + list[x].type = type; + list[x].size = size; + list[x++].data = data; break; - - case LTC_ASN1_CHOICE: - case LTC_ASN1_CUSTOM_TYPE: - case LTC_ASN1_EOL: - case LTC_ASN1_TELETEX_STRING: + + default: va_end(args); err = CRYPT_INVALID_ARG; goto LBL_ERR; @@ -128,7 +122,7 @@ int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...) } va_end(args); - err = der_encode_sequence(list, x, out, outlen); + err = der_encode_sequence(list, x, out, outlen); LBL_ERR: XFREE(list); return err; @@ -136,3 +130,7 @@ LBL_ERR: #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 6d25391d..7ba535ca 100644 --- a/src/pk/asn1/der/sequence/der_length_sequence.c +++ b/src/pk/asn1/der/sequence/der_length_sequence.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_length_sequence.c @@ -10,24 +18,17 @@ #ifdef LTC_DER /** - Get the length of a DER sequence + 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 + @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) +int der_length_sequence(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; + int err, type; + unsigned long size, x, y, z, i; void *data; LTC_ARGCHK(list != NULL); @@ -40,21 +41,18 @@ int der_length_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, size = list[i].size; data = list[i].data; - if (type == LTC_ASN1_EOL) { + 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; - + 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; @@ -70,7 +68,6 @@ int der_length_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, 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; } @@ -102,13 +99,6 @@ int der_length_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, 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; @@ -123,27 +113,6 @@ int der_length_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, 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: @@ -153,23 +122,33 @@ int der_length_sequence_ex(const ltc_asn1_list *list, unsigned long inlen, y += x; break; - case LTC_ASN1_CHOICE: - case LTC_ASN1_EOL: + + default: err = CRYPT_INVALID_ARG; goto LBL_ERR; } } - if ((err = der_length_asn1_length(y, &x)) != CRYPT_OK) { + /* calc header size */ + z = y; + if (y < 128) { + y += 2; + } else if (y < 256) { + /* 0x30 0x81 LL */ + y += 3; + } else if (y < 65536UL) { + /* 0x30 0x82 LL LL */ + y += 4; + } else if (y < 16777216UL) { + /* 0x30 0x83 LL LL LL */ + y += 5; + } else { + err = CRYPT_INVALID_ARG; goto LBL_ERR; } - if (payloadlen != NULL) { - *payloadlen = y; - } - /* store size */ - *outlen = y + x + 1; + *outlen = y; err = CRYPT_OK; LBL_ERR: @@ -177,3 +156,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/sequence/der_sequence_free.c b/src/pk/asn1/der/sequence/der_sequence_free.c index 63908a54..5658661d 100644 --- a/src/pk/asn1/der/sequence/der_sequence_free.c +++ b/src/pk/asn1/der/sequence/der_sequence_free.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_sequence_free.c @@ -12,13 +20,11 @@ /** 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) { @@ -27,7 +33,7 @@ void der_sequence_free(ltc_asn1_list *in) in = in->prev; } } - + /* now walk the list and free stuff */ while (in != NULL) { /* is there a child? */ @@ -36,18 +42,24 @@ void der_sequence_free(ltc_asn1_list *in) 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; + + switch (in->type) { + case LTC_ASN1_SET: + case LTC_ASN1_SETOF: + case LTC_ASN1_SEQUENCE: break; + case LTC_ASN1_INTEGER : if (in->data != NULL) { mp_clear(in->data); } break; default : if (in->data != NULL) { XFREE(in->data); } } - + /* move to next and free current */ l = in->next; - XFREE(in); + free(in); in = l; - } + } } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 4f863e20..2fb33d1c 100644 --- a/src/pk/asn1/der/set/der_encode_set.c +++ b/src/pk/asn1/der/set/der_encode_set.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_encode_set.c @@ -10,66 +18,85 @@ #ifdef LTC_DER /* LTC define to ASN.1 TAG */ -static int s_ltc_to_asn1(ltc_asn1_type v) +static int ltc_to_asn1(int v) { - return der_asn1_type_to_identifier_map[v]; -} + switch (v) { + case LTC_ASN1_BOOLEAN: return 0x01; + case LTC_ASN1_INTEGER: + case LTC_ASN1_SHORT_INTEGER: return 0x02; + case LTC_ASN1_BIT_STRING: return 0x03; + case LTC_ASN1_OCTET_STRING: return 0x04; + case LTC_ASN1_NULL: return 0x05; + case LTC_ASN1_OBJECT_IDENTIFIER: return 0x06; + case LTC_ASN1_PRINTABLE_STRING: return 0x13; + case LTC_ASN1_IA5_STRING: return 0x16; + case LTC_ASN1_UTCTIME: return 0x17; + case LTC_ASN1_SEQUENCE: return 0x30; + case LTC_ASN1_SET: + case LTC_ASN1_SETOF: return 0x31; + default: return -1; + } +} + -#define s_qsort_helper s_set_qsort_helper -static int s_qsort_helper(const void *a, const void *b) +static int 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); - + + r = ltc_to_asn1(A->type) - 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; + } else { + return r; } - 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 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) +int der_encode_set(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); - + XQSORT(copy, inlen, sizeof(*copy), &qsort_helper); + /* call der_encode_sequence_ex() */ - err = der_encode_sequence_ex(copy, inlen, out, outlen, LTC_ASN1_SET); - + err = der_encode_sequence_ex(copy, inlen, out, outlen, LTC_ASN1_SET); + /* free list */ XFREE(copy); - + return err; -} +} -#undef s_qsort_helper #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/set/der_encode_setof.c b/src/pk/asn1/der/set/der_encode_setof.c index 6cf44b39..e06df911 100644 --- a/src/pk/asn1/der/set/der_encode_setof.c +++ b/src/pk/asn1/der/set/der_encode_setof.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_encode_setof.c @@ -14,16 +22,15 @@ struct edge { unsigned long size; }; -#define s_qsort_helper s_setof_qsort_helper -static int s_qsort_helper(const void *a, const void *b) +static int 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++) { @@ -37,29 +44,28 @@ static int s_qsort_helper(const void *a, const void *b) return -1; } } - } + } } - - return r; + + 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 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) +*/ +int der_encode_setof(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen) { - unsigned long x, y, z; - ptrdiff_t hdrlen; + unsigned long x, y, z, 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) { @@ -71,43 +77,43 @@ int der_encode_setof(const ltc_asn1_list *list, unsigned long inlen, 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; - + ptr = buf + 1; + /* now skip length data */ + x = *ptr++; + if (x >= 0x80) { + ptr += (x & 0x7F); + } + + /* get the size of the static header */ + hdrlen = ((unsigned long)ptr) - ((unsigned long)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) { @@ -119,36 +125,38 @@ int der_encode_setof(const ltc_asn1_list *list, unsigned long inlen, 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); - + XQSORT(edges, inlen, sizeof(*edges), &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++) { + for (y = 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 - +#endif + /* free buffers */ XFREE(edges); XFREE(buf); - + return CRYPT_OK; } -#undef s_qsort_helper - #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index fc01fd15..67ba02bc 100644 --- a/src/pk/asn1/der/short_integer/der_decode_short_integer.c +++ b/src/pk/asn1/der/short_integer/der_decode_short_integer.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_decode_short_integer.c @@ -42,15 +50,6 @@ int der_decode_short_integer(const unsigned char *in, unsigned long inlen, unsig 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--) { @@ -63,3 +62,7 @@ int der_decode_short_integer(const unsigned char *in, unsigned long inlen, unsig } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 3af47c5f..d9aebbac 100644 --- a/src/pk/asn1/der/short_integer/der_encode_short_integer.c +++ b/src/pk/asn1/der/short_integer/der_encode_short_integer.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_encode_short_integer.c @@ -18,10 +26,10 @@ @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); @@ -62,7 +70,7 @@ int der_encode_short_integer(unsigned long num, unsigned char *out, unsigned lon /* store header */ x = 0; out[x++] = 0x02; - out[x++] = (unsigned char)z; + out[x++] = z; /* if 31st bit is set output a leading zero and decrement count */ if (z == 5) { @@ -72,14 +80,18 @@ int der_encode_short_integer(unsigned long num, unsigned char *out, unsigned lon /* store values */ for (y = 0; y < z; y++) { - out[x++] = (unsigned char)((num >> 24) & 0xFF); + out[x++] = (num >> 24) & 0xFF; num <<= 8; } /* we good */ *outlen = x; - + return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index aeee9481..8adeb1aa 100644 --- a/src/pk/asn1/der/short_integer/der_length_short_integer.c +++ b/src/pk/asn1/der/short_integer/der_length_short_integer.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_length_short_integer.c @@ -10,15 +18,14 @@ #ifdef LTC_DER /** - Gets length of DER encoding of num - @param num The integer to get the size of + 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; + unsigned long z, y, len; LTC_ARGCHK(outlen != NULL); @@ -32,21 +39,32 @@ int der_length_short_integer(unsigned long num, unsigned long *outlen) ++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; + /* we need a 0x02 to indicate it's INTEGER */ + len = 1; + /* length byte */ + ++len; + + /* bytes in value */ + len += z; + + /* see if msb is set */ + len += (num&(1UL<<((z<<3) - 1))) ? 1 : 0; + + /* return length */ + *outlen = len; + return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 2f1beaab..fa9f3c2a 100644 --- a/src/pk/asn1/der/utctime/der_decode_utctime.c +++ b/src/pk/asn1/der/utctime/der_decode_utctime.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_decode_utctime.c @@ -9,9 +17,7 @@ #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) +static int char_to_int(unsigned char x) { switch (x) { case '0': return 0; @@ -24,14 +30,12 @@ static LTC_INLINE int s_char_to_int(unsigned char x) case '7': return 7; case '8': return 8; case '9': return 9; - default: return 100; } + 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]); \ + y = char_to_int(buf[x])*10 + char_to_int(buf[x+1]); \ if (y >= max) return CRYPT_INVALID_PACKET; \ x += 2; @@ -45,8 +49,8 @@ static LTC_INLINE int s_char_to_int(unsigned char x) 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; + unsigned char buf[32]; + unsigned long x; int y; LTC_ARGCHK(in != NULL); @@ -66,11 +70,10 @@ int der_decode_utctime(const unsigned char *in, unsigned long *inlen, } buf[x] = y; } - declen = x; /* octets decoded into buf - the parsing below must not read past them */ *inlen = 2 + x; - /* possible encodings are + /* possible encodings are YYMMDDhhmmZ YYMMDDhhmm+hh'mm' YYMMDDhhmm-hh'mm' @@ -78,7 +81,7 @@ YYMMDDhhmmssZ YYMMDDhhmmss+hh'mm' YYMMDDhhmmss-hh'mm' - So let's do a trivial decode upto [including] mm + So let's do a trivial decode upto [including] mm */ x = 0; @@ -92,13 +95,9 @@ YYMMDDhhmmss-hh'mm' 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] == '-') { + } else if (buf[x] == '+' || buf[x] == '-') { out->off_dir = (buf[x++] == '+') ? 0 : 1; DECODE_V(out->off_hh, 24); DECODE_V(out->off_mm, 60); @@ -109,21 +108,20 @@ YYMMDDhhmmss-hh'mm' 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] == '-') { + } else 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; + } else { + return CRYPT_INVALID_PACKET; } - return CRYPT_INVALID_PACKET; } -#undef DECODE_V - #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/utctime/der_encode_utctime.c b/src/pk/asn1/der/utctime/der_encode_utctime.c index a48972ea..510f09fd 100644 --- a/src/pk/asn1/der/utctime/der_encode_utctime.c +++ b/src/pk/asn1/der/utctime/der_encode_utctime.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_encode_utctime.c @@ -9,6 +17,8 @@ #ifdef LTC_DER +static const char *baseten = "0123456789"; + #define STORE_V(y) \ out[x++] = der_ia5_char_encode(baseten[(y/10) % 10]); \ out[x++] = der_ia5_char_encode(baseten[y % 10]); @@ -20,13 +30,12 @@ @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) +int der_encode_utctime(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); @@ -38,7 +47,7 @@ int der_encode_utctime(const ltc_utctime *utctime, *outlen = tmplen; return CRYPT_BUFFER_OVERFLOW; } - + /* store header */ out[0] = 0x17; @@ -60,13 +69,15 @@ int der_encode_utctime(const ltc_utctime *utctime, } /* store length */ - out[1] = (unsigned char)(x - 2); - + out[1] = x - 2; + /* all good let's return */ *outlen = x; return CRYPT_OK; } -#undef STORE_V - #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/utctime/der_length_utctime.c b/src/pk/asn1/der/utctime/der_length_utctime.c index b93c25f8..ec465199 100644 --- a/src/pk/asn1/der/utctime/der_length_utctime.c +++ b/src/pk/asn1/der/utctime/der_length_utctime.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file der_length_utctime.c @@ -15,7 +23,7 @@ @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) +int der_length_utctime(ltc_utctime *utctime, unsigned long *outlen) { LTC_ARGCHK(outlen != NULL); LTC_ARGCHK(utctime != NULL); @@ -32,3 +40,7 @@ int der_length_utctime(const ltc_utctime *utctime, unsigned long *outlen) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 734a2e0c..d5747591 100644 --- a/src/pk/dsa/dsa_decrypt_key.c +++ b/src/pk/dsa/dsa_decrypt_key.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file dsa_decrypt_key.c DSA Crypto, Tom St Denis -*/ +*/ -#ifdef LTC_MDSA +#ifdef MDSA /** Decrypt an DSA encrypted key @@ -19,13 +27,12 @@ @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 *out, unsigned long *outlen, + dsa_key *key) { unsigned char *skey, *expt; void *g_pub; - unsigned long x, y; - unsigned long hashOID[32] = { 0 }; + unsigned long x, y, hashOID[32]; int hash, err; ltc_asn1_list decode[3]; @@ -38,27 +45,27 @@ int dsa_decrypt_key(const unsigned char *in, unsigned long inlen, 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) { + LTC_SET_ASN1(decode, 0, LTC_ASN1_OBJECT_IDENTIFIER, hashOID, sizeof(hashOID)/sizeof(hashOID[0])); + + if ((err = der_decode_sequence(in, inlen, decode, 1)) != CRYPT_OK) { return err; } - hash = find_hash_oid(hashOID, decode[0].size); + 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) { + + if ((err = mp_init(&g_pub)) != CRYPT_OK) { return err; } /* allocate memory */ - expt = XMALLOC(ltc_mp_unsigned_bin_size(key->p) + 1); + expt = XMALLOC(mp_unsigned_bin_size(key->p) + 1); skey = XMALLOC(MAXBLOCKSIZE); if (expt == NULL || skey == NULL) { if (expt != NULL) { @@ -67,10 +74,10 @@ int dsa_decrypt_key(const unsigned char *in, unsigned long inlen, if (skey != NULL) { XFREE(skey); } - ltc_mp_clear(g_pub); + 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); @@ -80,13 +87,12 @@ int dsa_decrypt_key(const unsigned char *in, unsigned long inlen, } /* make shared key */ - x = ltc_mp_unsigned_bin_size(key->p) + 1; + x = 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); + y = MIN(mp_unsigned_bin_size(key->p) + 1, MAXBLOCKSIZE); if ((err = hash_memory(hash, expt, x, expt, &y)) != CRYPT_OK) { goto LBL_ERR; } @@ -113,17 +119,21 @@ int dsa_decrypt_key(const unsigned char *in, unsigned long inlen, err = CRYPT_OK; LBL_ERR: #ifdef LTC_CLEAN_STACK - zeromem(expt, ltc_mp_unsigned_bin_size(key->p) + 1); + zeromem(expt, mp_unsigned_bin_size(key->p) + 1); zeromem(skey, MAXBLOCKSIZE); #endif XFREE(expt); XFREE(skey); - - ltc_mp_clear(g_pub); + + mp_clear(g_pub); return err; } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/pk/dsa/dsa_encrypt_key.c b/src/pk/dsa/dsa_encrypt_key.c index 30097651..a8801f5e 100644 --- a/src/pk/dsa/dsa_encrypt_key.c +++ b/src/pk/dsa/dsa_encrypt_key.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file dsa_encrypt_key.c DSA Crypto, Tom St Denis -*/ +*/ -#ifdef LTC_MDSA +#ifdef MDSA /** Encrypt a symmetric key with DSA @@ -16,15 +24,15 @@ @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 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 *out, unsigned long *outlen, + prng_state *prng, int wprng, int hash, + dsa_key *key) { unsigned char *expt, *skey; void *g_pub, *g_priv; @@ -50,11 +58,11 @@ int dsa_encrypt_key(const unsigned char *in, unsigned long inlen, } /* make a random key and export the public copy */ - if ((err = ltc_mp_init_multi(&g_pub, &g_priv, LTC_NULL)) != CRYPT_OK) { + if ((err = mp_init_multi(&g_pub, &g_priv, NULL)) != CRYPT_OK) { return err; } - - expt = XMALLOC(ltc_mp_unsigned_bin_size(key->p) + 1); + + expt = XMALLOC(mp_unsigned_bin_size(key->p) + 1); skey = XMALLOC(MAXBLOCKSIZE); if (expt == NULL || skey == NULL) { if (expt != NULL) { @@ -63,24 +71,29 @@ int dsa_encrypt_key(const unsigned char *in, unsigned long inlen, if (skey != NULL) { XFREE(skey); } - ltc_mp_deinit_multi(g_pub, g_priv, LTC_NULL); + mp_clear_multi(g_pub, g_priv, 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) { + + /* make a random x, g^x pair */ + x = mp_unsigned_bin_size(key->q); + if (prng_descriptor[wprng].read(expt, x, prng) != x) { + err = CRYPT_ERROR_READPRNG; goto LBL_ERR; } - + + /* load x */ + if ((err = mp_read_unsigned_bin(g_priv, expt, x)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* compute y */ + if ((err = 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; + x = mp_unsigned_bin_size(key->p) + 1; if ((err = dsa_shared_secret(g_priv, key->y, key, expt, &x)) != CRYPT_OK) { goto LBL_ERR; } @@ -89,7 +102,7 @@ int dsa_encrypt_key(const unsigned char *in, unsigned long inlen, 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]; @@ -104,15 +117,20 @@ int dsa_encrypt_key(const unsigned char *in, unsigned long inlen, LBL_ERR: #ifdef LTC_CLEAN_STACK /* clean up */ - zeromem(expt, ltc_mp_unsigned_bin_size(key->p) + 1); + zeromem(expt, mp_unsigned_bin_size(key->p) + 1); zeromem(skey, MAXBLOCKSIZE); #endif XFREE(skey); XFREE(expt); + + mp_clear_multi(g_pub, g_priv, NULL); - ltc_mp_deinit_multi(g_pub, g_priv, LTC_NULL); return err; } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/pk/dsa/dsa_export.c b/src/pk/dsa/dsa_export.c index c26dd46a..793eecc4 100644 --- a/src/pk/dsa/dsa_export.c +++ b/src/pk/dsa/dsa_export.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file dsa_export.c DSA implementation, export key, Tom St Denis */ -#ifdef LTC_MDSA +#ifdef MDSA /** Export a DSA key to a binary packet @@ -17,84 +25,48 @@ @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) +int dsa_export(unsigned char *out, unsigned long *outlen, int type, 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; - + /* can we store the static header? */ if (type == PK_PRIVATE && key->type != PK_PRIVATE) { return CRYPT_PK_TYPE_MISMATCH; } + if (type != PK_PUBLIC && type != PK_PRIVATE) { + return CRYPT_INVALID_ARG; + } + + flags[0] = (type != PK_PUBLIC) ? 1 : 0; + 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; + 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); + } else { 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); + 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/dsa/dsa_free.c b/src/pk/dsa/dsa_free.c index aa9294fd..9a6d4f99 100644 --- a/src/pk/dsa/dsa_free.c +++ b/src/pk/dsa/dsa_free.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file dsa_free.c DSA implementation, free a DSA key, Tom St Denis */ -#ifdef LTC_MDSA +#ifdef MDSA /** Free a DSA key @@ -16,8 +24,11 @@ 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; + mp_clear_multi(key->g, key->q, key->p, key->x, key->y, NULL); } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 91ddcc2b..81cccd11 100644 --- a/src/pk/dsa/dsa_import.c +++ b/src/pk/dsa/dsa_import.c @@ -1,138 +1,24 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.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; -} +#ifdef MDSA /** - Import a DSA key + 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 @@ -140,73 +26,65 @@ static int s_dsa_import_x509(const unsigned char *in, unsigned long inlen, dsa_k */ int dsa_import(const unsigned char *in, unsigned long inlen, dsa_key *key) { - int err; unsigned char flags[1]; + int err; LTC_ARGCHK(in != NULL); + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(ltc_mp.name != 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 (mp_init_multi(&key->p, &key->g, &key->q, &key->x, &key->y, NULL) != CRYPT_OK) { + return CRYPT_MEM; } - 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; + /* get key type */ + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_BIT_STRING, 1UL, flags, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto error; } -LBL_OK: - if ((err = s_dsa_validate(key)) != CRYPT_OK) { - goto LBL_ERR; + 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 error; + } + key->type = PK_PRIVATE; + } else { + 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 error; + } + key->type = PK_PUBLIC; + } + key->qord = mp_unsigned_bin_size(key->q); + + if (key->qord >= MDSA_MAX_GROUP || key->qord <= 15 || + (unsigned long)key->qord >= mp_unsigned_bin_size(key->p) || (mp_unsigned_bin_size(key->p) - key->qord) >= MDSA_DELTA) { + err = CRYPT_INVALID_PACKET; + goto error; } - return CRYPT_OK; -LBL_ERR: - dsa_free(key); + return CRYPT_OK; +error: + mp_clear_multi(key->p, key->g, key->q, key->x, key->y, NULL); return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 5a205b27..f75736cd 100644 --- a/src/pk/dsa/dsa_make_key.c +++ b/src/pk/dsa/dsa_make_key.c @@ -1,31 +1,138 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file dsa_make_key.c - DSA implementation, generate a DSA key + DSA implementation, generate a DSA key, Tom St Denis */ -#ifdef LTC_MDSA +#ifdef MDSA /** - Old-style creation of a DSA key + Create 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. + @return CRYPT_OK if successful, upon error this function will free all allocated memory */ int dsa_make_key(prng_state *prng, int wprng, int group_size, int modulus_size, dsa_key *key) { - int err; + void *tmp, *tmp2; + int err, res; + unsigned char *buf; - 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; } + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(ltc_mp.name != NULL); - return CRYPT_OK; + /* check prng */ + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + /* check size */ + if (group_size >= MDSA_MAX_GROUP || group_size <= 15 || + group_size >= modulus_size || (modulus_size - group_size) >= MDSA_DELTA) { + return CRYPT_INVALID_ARG; + } + + /* allocate ram */ + buf = XMALLOC(MDSA_DELTA); + if (buf == NULL) { + return CRYPT_MEM; + } + + /* init mp_ints */ + if ((err = mp_init_multi(&tmp, &tmp2, &key->g, &key->q, &key->p, &key->x, &key->y, NULL)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* make our prime q */ + if ((err = rand_prime(key->q, group_size, prng, wprng)) != CRYPT_OK) { goto LBL_ERR; } + + /* double q */ + if ((err = mp_add(key->q, key->q, tmp)) != CRYPT_OK) { goto error; } + + /* now make a random string and multply it against q */ + if (prng_descriptor[wprng].read(buf+1, modulus_size - group_size, prng) != (unsigned long)(modulus_size - group_size)) { + err = CRYPT_ERROR_READPRNG; + goto LBL_ERR; + } + + /* force magnitude */ + buf[0] |= 0xC0; + + /* force even */ + buf[modulus_size - group_size - 1] &= ~1; + + if ((err = mp_read_unsigned_bin(tmp2, buf, modulus_size - group_size)) != CRYPT_OK) { goto error; } + if ((err = mp_mul(key->q, tmp2, key->p)) != CRYPT_OK) { goto error; } + if ((err = mp_add_d(key->p, 1, key->p)) != CRYPT_OK) { goto error; } + + /* now loop until p is prime */ + for (;;) { + if ((err = mp_prime_is_prime(key->p, 8, &res)) != CRYPT_OK) { goto LBL_ERR; } + if (res == LTC_MP_YES) break; + + /* add 2q to p and 2 to tmp2 */ + if ((err = mp_add(tmp, key->p, key->p)) != CRYPT_OK) { goto error; } + if ((err = mp_add_d(tmp2, 2, tmp2)) != CRYPT_OK) { goto error; } + } + + /* now p = (q * tmp2) + 1 is prime, find a value g for which g^tmp2 != 1 */ + mp_set(key->g, 1); + + do { + if ((err = mp_add_d(key->g, 1, key->g)) != CRYPT_OK) { goto error; } + if ((err = mp_exptmod(key->g, tmp2, key->p, tmp)) != CRYPT_OK) { goto error; } + } while (mp_cmp_d(tmp, 1) == LTC_MP_EQ); + + /* at this point tmp generates a group of order q mod p */ + mp_exch(tmp, key->g); + + /* 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 + */ + do { + if (prng_descriptor[wprng].read(buf, group_size, prng) != (unsigned long)group_size) { + err = CRYPT_ERROR_READPRNG; + goto LBL_ERR; + } + if ((err = mp_read_unsigned_bin(key->x, buf, group_size)) != CRYPT_OK) { goto error; } + } while (mp_cmp_d(key->x, 1) != LTC_MP_GT); + if ((err = mp_exptmod(key->g, key->x, key->p, key->y)) != CRYPT_OK) { goto error; } + + key->type = PK_PRIVATE; + key->qord = group_size; + +#ifdef LTC_CLEAN_STACK + zeromem(buf, MDSA_DELTA); +#endif + + err = CRYPT_OK; + goto done; +error: +LBL_ERR: + mp_clear_multi(key->g, key->q, key->p, key->x, key->y, NULL); +done: + mp_clear_multi(tmp, tmp2, NULL); + + XFREE(buf); + return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 866832a7..ed7c4fb5 100644 --- a/src/pk/dsa/dsa_shared_secret.c +++ b/src/pk/dsa/dsa_shared_secret.c @@ -1,30 +1,38 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file dsa_shared_secret.c DSA Crypto, Tom St Denis -*/ +*/ -#ifdef LTC_MDSA +#ifdef 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 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, + dsa_key *public_key, unsigned char *out, unsigned long *outlen) { - unsigned long x; - void *res; - int err; + unsigned long x; + void *res; + int err; LTC_ARGCHK(private_key != NULL); LTC_ARGCHK(public_key != NULL); @@ -32,29 +40,33 @@ int dsa_shared_secret(void *private_key, void *base, LTC_ARGCHK(outlen != NULL); /* make new point */ - if ((err = ltc_mp_init(&res)) != CRYPT_OK) { + if ((err = 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); + if ((err = mp_exptmod(base, private_key, public_key->p, res)) != CRYPT_OK) { + mp_clear(res); return err; } - - x = (unsigned long)ltc_mp_unsigned_bin_size(res); + + x = (unsigned long)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; } + if ((err = mp_to_unsigned_bin(res, out + (x - mp_unsigned_bin_size(res)))) != CRYPT_OK) { goto done; } err = CRYPT_OK; *outlen = x; done: - ltc_mp_clear(res); + mp_clear(res); return err; } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/pk/dsa/dsa_sign_hash.c b/src/pk/dsa/dsa_sign_hash.c index ab3e27ad..cd66505d 100644 --- a/src/pk/dsa/dsa_sign_hash.c +++ b/src/pk/dsa/dsa_sign_hash.c @@ -1,20 +1,28 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file dsa_sign_hash.c DSA implementation, sign a hash, Tom St Denis */ -#ifdef LTC_MDSA +#ifdef 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 r The "r" integer of the signature (caller must initialize with mp_init() first) + @param s The "s" integer of the signature (caller must initialize with mp_init() first) @param prng An active PRNG state @param wprng The index of the PRNG desired @param key A private DSA key @@ -22,11 +30,11 @@ */ 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) + prng_state *prng, int wprng, dsa_key *key) { void *k, *kinv, *tmp; unsigned char *buf; - int err, qbits; + int err; LTC_ARGCHK(in != NULL); LTC_ARGCHK(r != NULL); @@ -41,58 +49,62 @@ int dsa_sign_hash_raw(const unsigned char *in, unsigned long inlen, } /* check group order size */ - if (key->qord >= LTC_MDSA_MAX_GROUP) { + if (key->qord >= MDSA_MAX_GROUP) { return CRYPT_INVALID_ARG; } - buf = XMALLOC(LTC_MDSA_MAX_GROUP); + buf = XMALLOC(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; } + if ((err = mp_init_multi(&k, &kinv, &tmp, NULL)) != CRYPT_OK) { goto error; } - 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; } + if (prng_descriptor[wprng].read(buf, key->qord, prng) != (unsigned long)key->qord) { + err = CRYPT_ERROR_READPRNG; + goto LBL_ERR; + } - /* 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; } + /* read k */ + if ((err = mp_read_unsigned_bin(k, buf, key->qord)) != CRYPT_OK) { goto error; } + + /* k > 1 ? */ + if (mp_cmp_d(k, 1) != LTC_MP_GT) { 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); + if ((err = mp_gcd(k, key->q, tmp)) != CRYPT_OK) { goto error; } + } while (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; } + if ((err = 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 ((err = mp_exptmod(key->g, k, key->p, r)) != CRYPT_OK) { goto error; } + if ((err = 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)); + if (mp_iszero(r) == LTC_MP_YES) { goto retry; } /* 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 ((err = mp_read_unsigned_bin(tmp, (unsigned char *)in, inlen)) != CRYPT_OK) { goto error; } + if ((err = mp_mul(key->x, r, s)) != CRYPT_OK) { goto error; } + if ((err = mp_add(s, tmp, s)) != CRYPT_OK) { goto error; } + if ((err = mp_mulmod(s, kinv, key->q, s)) != CRYPT_OK) { goto error; } - if (ltc_mp_iszero(s) == LTC_MP_YES) { goto retry; } + if (mp_iszero(s) == LTC_MP_YES) { goto retry; } err = CRYPT_OK; -error: - ltc_mp_deinit_multi(k, kinv, tmp, LTC_NULL); -ERRBUF: + goto LBL_ERR; + +error: +LBL_ERR: + mp_clear_multi(k, kinv, tmp, NULL); #ifdef LTC_CLEAN_STACK - zeromem(buf, LTC_MDSA_MAX_GROUP); + zeromem(buf, MDSA_MAX_GROUP); #endif XFREE(buf); return err; @@ -111,7 +123,7 @@ ERRBUF: */ 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) + prng_state *prng, int wprng, dsa_key *key) { void *r, *s; int err; @@ -121,22 +133,26 @@ int dsa_sign_hash(const unsigned char *in, unsigned long inlen, LTC_ARGCHK(outlen != NULL); LTC_ARGCHK(key != NULL); - if (ltc_mp_init_multi(&r, &s, LTC_NULL) != CRYPT_OK) { + if (mp_init_multi(&r, &s, NULL) != CRYPT_OK) { return CRYPT_MEM; } if ((err = dsa_sign_hash_raw(in, inlen, r, s, prng, wprng, key)) != CRYPT_OK) { - goto error; + goto LBL_ERR; } - err = der_encode_sequence_multi(out, outlen, - LTC_ASN1_INTEGER, 1UL, r, - LTC_ASN1_INTEGER, 1UL, s, + 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); +LBL_ERR: + mp_clear_multi(r, s, NULL); return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/dsa/dsa_verify_hash.c b/src/pk/dsa/dsa_verify_hash.c index 7e79a5bb..b87edbb6 100644 --- a/src/pk/dsa/dsa_verify_hash.c +++ b/src/pk/dsa/dsa_verify_hash.c @@ -1,6 +1,14 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file dsa_verify_hash.c @@ -8,7 +16,7 @@ */ -#ifdef LTC_MDSA +#ifdef MDSA /** Verify a DSA signature @@ -17,62 +25,61 @@ @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 + @param key The corresponding public DH 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) + const unsigned char *hash, unsigned long hashlen, + int *stat, 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(stat != NULL); LTC_ARGCHK(key != NULL); + /* default to invalid signature */ + *stat = 0; + /* init our variables */ - if ((err = ltc_mp_init_multi(&w, &v, &u1, &u2, LTC_NULL)) != CRYPT_OK) { + if ((err = mp_init_multi(&w, &v, &u1, &u2, 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) { + if (mp_iszero(r) == LTC_MP_YES || mp_iszero(s) == LTC_MP_YES || mp_cmp(r, key->q) != LTC_MP_LT || mp_cmp(s, key->q) != LTC_MP_LT) { err = CRYPT_INVALID_PACKET; - goto error; + goto done; } - - /* 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; } + if ((err = 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; } + if ((err = mp_read_unsigned_bin(u1, (unsigned char *)hash, hashlen)) != CRYPT_OK) { goto error; } + if ((err = 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; } + if ((err = 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 ((err = mp_exptmod(key->g, u1, key->p, u1)) != CRYPT_OK) { goto error; } + if ((err = mp_exptmod(key->y, u2, key->p, u2)) != CRYPT_OK) { goto error; } + if ((err = mp_mulmod(u1, u2, key->p, v)) != CRYPT_OK) { goto error; } + if ((err = 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) { + if (mp_cmp(r, v) == LTC_MP_EQ) { *stat = 1; } err = CRYPT_OK; -error: - ltc_mp_deinit_multi(w, v, u1, u2, LTC_NULL); + goto done; + +error : +done : mp_clear_multi(w, v, u1, u2, NULL); return err; } @@ -83,36 +90,25 @@ error: @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 + @param key The corresponding public DH 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 dsa_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int *stat, 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; + if ((err = mp_init_multi(&r, &s, NULL)) != CRYPT_OK) { + return CRYPT_MEM; } - 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) { + /* decode the sequence */ + if ((err = der_decode_sequence_multi(sig, siglen, + LTC_ASN1_INTEGER, 1UL, r, + LTC_ASN1_INTEGER, 1UL, s, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { goto LBL_ERR; } @@ -120,9 +116,13 @@ int dsa_verify_hash(const unsigned char *sig, unsigned long siglen, err = dsa_verify_hash_raw(r, s, hash, hashlen, stat, key); LBL_ERR: - ltc_mp_deinit_multi(r, s, LTC_NULL); + mp_clear_multi(r, s, NULL); return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/dsa/dsa_verify_key.c b/src/pk/dsa/dsa_verify_key.c index 80ae6856..22a8325e 100644 --- a/src/pk/dsa/dsa_verify_key.c +++ b/src/pk/dsa/dsa_verify_key.c @@ -1,207 +1,101 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file dsa_verify_key.c DSA implementation, verify a key, Tom St Denis */ -#ifdef LTC_MDSA +#ifdef 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 + Verify a DSA key for validity + @param key The key to verify @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 dsa_verify_key(dsa_key *key, int *stat) { - int err; + void *tmp, *tmp2; + int res, 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) { + /* default to an invalid key */ + *stat = 0; + + /* first make sure key->q and key->p are prime */ + if ((err = mp_prime_is_prime(key->q, 8, &res)) != CRYPT_OK) { return err; } - if (res == LTC_MP_NO) { + if (res == 0) { return CRYPT_OK; } - /* key->p prime? */ - if ((err = ltc_mp_prime_is_prime(key->p, LTC_MILLER_RABIN_REPS, &res)) != CRYPT_OK) { + if ((err = mp_prime_is_prime(key->p, 8, &res)) != CRYPT_OK) { return err; } - if (res == LTC_MP_NO) { + if (res == 0) { 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); + /* now make sure that g is not -1, 0 or 1 and

g, 0) == LTC_MP_EQ || mp_cmp_d(key->g, 1) == LTC_MP_EQ) { + return CRYPT_OK; + } + if ((err = mp_init_multi(&tmp, &tmp2, NULL)) != CRYPT_OK) { goto error; } + if ((err = mp_sub_d(key->p, 1, tmp)) != CRYPT_OK) { goto error; } + if (mp_cmp(tmp, key->g) == LTC_MP_EQ || mp_cmp(key->g, key->p) != LTC_MP_LT) { + err = CRYPT_OK; + goto done; + } /* 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) { + if (!(mp_cmp_d(key->y, 1) == LTC_MP_GT && mp_cmp(key->y, tmp) == LTC_MP_LT)) { err = CRYPT_OK; - goto error; + goto done; } - 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; - } + /* 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)) != CRYPT_OK) { goto error; } + if (mp_iszero(tmp2) != LTC_MP_YES) { + err = CRYPT_OK; + goto done; } + if ((err = mp_exptmod(key->g, key->q, key->p, tmp)) != CRYPT_OK) { goto error; } + if (mp_cmp_d(tmp, 1) != LTC_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)) != CRYPT_OK) { goto error; } + if (mp_cmp_d(tmp, 1) != LTC_MP_EQ) { + err = CRYPT_OK; + goto done; + } + + /* at this point we are out of tests ;-( */ err = CRYPT_OK; *stat = 1; -error: - ltc_mp_clear(tmp); + goto done; +error: +done : mp_clear_multi(tmp, tmp2, NULL); 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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 56798981..c6ccefcc 100644 --- a/src/pk/ecc/ecc.c +++ b/src/pk/ecc/ecc.c @@ -1,447 +1,96 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ecc.c ECC Crypto, Tom St Denis -*/ +*/ -#ifdef LTC_MECC +#ifdef 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 +/* This holds the key settings. ***MUST*** be organized by size from smallest to largest. */ +const ltc_ecc_set_type ltc_ecc_sets[] = { +#ifdef ECC192 { - /* prime */ "DB7C2ABF62E35E668076BEAD208B", - /* A */ "DB7C2ABF62E35E668076BEAD2088", - /* B */ "659EF8BA043916EEDE8911702B22", - /* order */ "DB7C2ABF62E35E7628DFAC6561C5", - /* Gx */ "09487239995A5EE76B55F9C2F098", - /* Gy */ "A89CE5AF8724C0A23E0E0FF77500", - /* cofactor */ 1, - /* OID */ "1.3.132.0.6" + 24, + "ECC-192", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", + "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1", + "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831", + "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012", + "7192B95FFC8DA78631011ED6B24CDD573F977A11E794811", }, #endif -#ifdef LTC_ECC_SECP112R2 +#ifdef ECC224 { - /* prime */ "DB7C2ABF62E35E668076BEAD208B", - /* A */ "6127C24C05F38A0AAAF65C0EF02C", - /* B */ "51DEF1815DB5ED74FCC34C85D709", - /* order */ "36DF0AAFD8B8D7597CA10520D04B", - /* Gx */ "4BA30AB5E892B4E1649DD0928643", - /* Gy */ "ADCD46F5882E3747DEF36E956E97", - /* cofactor */ 4, - /* OID */ "1.3.132.0.7" + 28, + "ECC-224", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001", + "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D", + "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21", + "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34", }, #endif -#ifdef LTC_ECC_SECP128R1 +#ifdef ECC256 { - /* prime */ "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", - /* A */ "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC", - /* B */ "E87579C11079F43DD824993C2CEE5ED3", - /* order */ "FFFFFFFE0000000075A30D1B9038A115", - /* Gx */ "161FF7528B899B2D0C28607CA52C5B86", - /* Gy */ "CF5AC8395BAFEB13C02DA292DDED7A83", - /* cofactor */ 1, - /* OID */ "1.3.132.0.28" + 32, + "ECC-256", + "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", + "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", + "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", + "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", + "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", }, #endif -#ifdef LTC_ECC_SECP128R2 +#ifdef ECC384 { - /* prime */ "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", - /* A */ "D6031998D1B3BBFEBF59CC9BBFF9AEE1", - /* B */ "5EEEFCA380D02919DC2C6558BB6D8A5D", - /* order */ "3FFFFFFF7FFFFFFFBE0024720613B5A3", - /* Gx */ "7B6AA5D85E572983E6FB32A7CDEBC140", - /* Gy */ "27B6916A894D3AEE7106FE805FC34B44", - /* cofactor */ 4, - /* OID */ "1.3.132.0.29" + 48, + "ECC-384", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF", + "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973", + "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7", + "3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F", }, #endif -#ifdef LTC_ECC_SECP160R1 +#ifdef ECC521 { - /* 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" + 65, + "ECC-521", + "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + "51953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00", + "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409", + "C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66", + "11839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650", }, #endif { - NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL + 0, + NULL, NULL, NULL, NULL, NULL, NULL } }; #endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + 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 index 7a4fac2e..6f5dccd1 100644 --- a/src/pk/ecc/ecc_decrypt_key.c +++ b/src/pk/ecc/ecc_decrypt_key.c @@ -1,14 +1,27 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ecc_decrypt_key.c ECC Crypto, Tom St Denis -*/ +*/ -#if defined(LTC_MECC) && defined(LTC_DER) +#ifdef MECC /** Decrypt an ECC encrypted key @@ -20,12 +33,11 @@ @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 *out, unsigned long *outlen, + ecc_key *key) { unsigned char *ecc_shared, *skey, *pub_expt; - unsigned long x, y; - unsigned long hashOID[32] = { 0 }; + unsigned long x, y, hashOID[32]; int hash, err; ecc_key pubkey; ltc_asn1_list decode[3]; @@ -39,15 +51,15 @@ int ecc_decrypt_key(const unsigned char *in, unsigned long inlen, 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) { + LTC_SET_ASN1(decode, 0, LTC_ASN1_OBJECT_IDENTIFIER, hashOID, sizeof(hashOID)/sizeof(hashOID[0])); + + if ((err = der_decode_sequence(in, inlen, decode, 1)) != CRYPT_OK) { return err; } - hash = find_hash_oid(hashOID, decode[0].size); + hash = find_hash_oid(hashOID, decode[0].size); if (hash_is_valid(hash) != CRYPT_OK) { return CRYPT_INVALID_PACKET; } @@ -79,8 +91,9 @@ int ecc_decrypt_key(const unsigned char *in, unsigned long inlen, } /* 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; } + if ((err = ecc_import(decode[1].data, decode[1].size, &pubkey)) != CRYPT_OK) { + goto LBL_ERR; + } /* make shared key */ x = ECC_BUF_SIZE; @@ -131,3 +144,7 @@ LBL_ERR: #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/pk/ecc/ecc_encrypt_key.c b/src/pk/ecc/ecc_encrypt_key.c index bac62bf7..c2f3364e 100644 --- a/src/pk/ecc/ecc_encrypt_key.c +++ b/src/pk/ecc/ecc_encrypt_key.c @@ -1,31 +1,44 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ecc_encrypt_key.c ECC Crypto, Tom St Denis -*/ +*/ -#if defined(LTC_MECC) && defined(LTC_DER) +#ifdef MECC /** - Encrypt a symmetric key with ECC + 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 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 *out, unsigned long *outlen, + prng_state *prng, int wprng, int hash, + ecc_key *key) { unsigned char *pub_expt, *ecc_shared, *skey; ecc_key pubkey; @@ -37,6 +50,11 @@ int ecc_encrypt_key(const unsigned char *in, unsigned long inlen, 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; } @@ -46,8 +64,9 @@ int ecc_encrypt_key(const unsigned char *in, unsigned long inlen, } /* 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; } + 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); @@ -67,18 +86,11 @@ int ecc_encrypt_key(const unsigned char *in, unsigned long inlen, } 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) { + if ((err = ecc_export(pub_expt, &pubkeysize, PK_PUBLIC, &pubkey)) != 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) { @@ -90,7 +102,7 @@ int ecc_encrypt_key(const unsigned char *in, unsigned long inlen, 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]; @@ -118,3 +130,7 @@ LBL_ERR: } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/pk/ecc/ecc_export.c b/src/pk/ecc/ecc_export.c index 69b53bc7..188932cc 100644 --- a/src/pk/ecc/ecc_export.c +++ b/src/pk/ecc/ecc_export.c @@ -1,14 +1,27 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ecc_export.c ECC Crypto, Tom St Denis -*/ +*/ -#if defined(LTC_MECC) && defined(LTC_DER) +#ifdef MECC /** Export an ECC key as a binary packet @@ -18,7 +31,7 @@ @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 ecc_export(unsigned char *out, unsigned long *outlen, int type, ecc_key *key) { int err; unsigned char flags[1]; @@ -27,14 +40,18 @@ int ecc_export(unsigned char *out, unsigned long *outlen, int type, const ecc_ke 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; } + if (ltc_ecc_is_valid_idx(key->idx) == 0) { + return CRYPT_INVALID_ARG; + } + /* we store the NIST byte size */ - key_size = key->dp.size; + key_size = ltc_ecc_sets[key->idx].size; if (type == PK_PRIVATE) { flags[0] = 1; @@ -59,3 +76,7 @@ int ecc_export(unsigned char *out, unsigned long *outlen, int type, const ecc_ke } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + 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 index fd954d62..5d8b7c2b 100644 --- a/src/pk/ecc/ecc_free.c +++ b/src/pk/ecc/ecc_free.c @@ -1,14 +1,27 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ecc_free.c ECC Crypto, Tom St Denis -*/ +*/ -#ifdef LTC_MECC +#ifdef MECC /** Free an ECC key from memory @@ -17,12 +30,11 @@ 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); + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + 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 index e5633396..595b3779 100644 --- a/src/pk/ecc/ecc_get_size.c +++ b/src/pk/ecc/ecc_get_size.c @@ -1,26 +1,44 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ecc_get_size.c ECC Crypto, Tom St Denis -*/ +*/ -#ifdef LTC_MECC +#ifdef MECC /** Get the size of an ECC key - @param key The key to get the size of + @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) +int ecc_get_size(ecc_key *key) { - if (key == NULL) { - return INT_MAX; - } - return key->dp.size; + LTC_ARGCHK(key != NULL); + if (ltc_ecc_is_valid_idx(key->idx)) + return ltc_ecc_sets[key->idx].size; + else + return INT_MAX; /* large value known to cause it to fail when passed to ecc_make_key() */ } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/pk/ecc/ecc_import.c b/src/pk/ecc/ecc_import.c index 181fc9a9..7250e645 100644 --- a/src/pk/ecc/ecc_import.c +++ b/src/pk/ecc/ecc_import.c @@ -1,14 +1,75 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ecc_import.c ECC Crypto, Tom St Denis -*/ +*/ -#if defined(LTC_MECC) && defined(LTC_DER) +#ifdef MECC + +static int is_point(ecc_key *key) +{ + void *prime, *b, *t1, *t2; + int err; + + if ((err = mp_init_multi(&prime, &b, &t1, &t2, NULL)) != CRYPT_OK) { + return err; + } + + /* load prime and b */ + if ((err = mp_read_radix(prime, ltc_ecc_sets[key->idx].prime, 16)) != CRYPT_OK) { goto error; } + if ((err = mp_read_radix(b, ltc_ecc_sets[key->idx].B, 16)) != CRYPT_OK) { goto error; } + + /* compute y^2 */ + if ((err = mp_sqr(key->pubkey.y, t1)) != CRYPT_OK) { goto error; } + + /* compute x^3 */ + if ((err = mp_sqr(key->pubkey.x, t2)) != CRYPT_OK) { goto error; } + if ((err = mp_mod(t2, prime, t2)) != CRYPT_OK) { goto error; } + if ((err = mp_mul(key->pubkey.x, t2, t2)) != CRYPT_OK) { goto error; } + + /* compute y^2 - x^3 */ + if ((err = mp_sub(t1, t2, t1)) != CRYPT_OK) { goto error; } + + /* compute y^2 - x^3 + 3x */ + if ((err = mp_add(t1, key->pubkey.x, t1)) != CRYPT_OK) { goto error; } + if ((err = mp_add(t1, key->pubkey.x, t1)) != CRYPT_OK) { goto error; } + if ((err = mp_add(t1, key->pubkey.x, t1)) != CRYPT_OK) { goto error; } + if ((err = mp_mod(t1, prime, t1)) != CRYPT_OK) { goto error; } + while (mp_cmp_d(t1, 0) == LTC_MP_LT) { + if ((err = mp_add(t1, prime, t1)) != CRYPT_OK) { goto error; } + } + while (mp_cmp(t1, prime) != LTC_MP_LT) { + if ((err = mp_sub(t1, prime, t1)) != CRYPT_OK) { goto error; } + } + + /* compare to b */ + if (mp_cmp(t1, b) != LTC_MP_EQ) { + err = CRYPT_INVALID_PACKET; + } else { + err = CRYPT_OK; + } + +error: + mp_clear_multi(prime, b, t1, t2, NULL); + return err; +} /** Import an ECC key from a binary packet @@ -18,19 +79,6 @@ @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]; @@ -40,21 +88,19 @@ int ecc_import_ex(const unsigned char *in, unsigned long inlen, ecc_key *key, co 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; + /* init key */ + if (mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, NULL) != CRYPT_OK) { + return CRYPT_MEM; } - /* 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; } + /* find out what type of key it is */ + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_BIT_STRING, 1UL, &flags, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto done; } + if (flags[0] == 1) { /* private key */ key->type = PK_PRIVATE; @@ -67,7 +113,7 @@ int ecc_import_ex(const unsigned char *in, unsigned long inlen, ecc_key *key, co LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { goto done; } - } else if (flags[0] == 0) { + } else { /* public key */ key->type = PK_PUBLIC; if ((err = der_decode_sequence_multi(in, inlen, @@ -79,22 +125,31 @@ int ecc_import_ex(const unsigned char *in, unsigned long inlen, ecc_key *key, co goto done; } } - else { + + /* find the idx */ + for (key->idx = 0; ltc_ecc_sets[key->idx].size && (unsigned long)ltc_ecc_sets[key->idx].size != key_size; ++key->idx); + if (ltc_ecc_sets[key->idx].size == 0) { 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; } + mp_set(key->pubkey.z, 1); + + /* is it a point on the curve? */ + if ((err = is_point(key)) != CRYPT_OK) { + goto done; + } /* we're good */ return CRYPT_OK; - done: - ecc_free(key); + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); return err; } + #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + 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 index 1b047417..35c52558 100644 --- a/src/pk/ecc/ecc_make_key.c +++ b/src/pk/ecc/ecc_make_key.c @@ -1,17 +1,30 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ecc_make_key.c ECC Crypto, Tom St Denis -*/ +*/ -#ifdef LTC_MECC +#ifdef MECC /** - Make a new ECC key + 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) @@ -20,54 +33,80 @@ */ 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; + int x, err; + ecc_point *base; + void *prime; + unsigned char *buf; + LTC_ARGCHK(key != NULL); 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; + /* good prng? */ + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; } + /* find key size */ + for (x = 0; (keysize > ltc_ecc_sets[x].size) && (ltc_ecc_sets[x].size != 0); x++); + keysize = ltc_ecc_sets[x].size; + + if (keysize > ECC_MAXSIZE || ltc_ecc_sets[x].size == 0) { + return CRYPT_INVALID_KEYSIZE; + } + key->idx = x; + + /* allocate ram */ + base = NULL; + buf = XMALLOC(ECC_MAXSIZE); + 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 LBL_ERR2; + } + + /* setup the key variables */ + if ((err = mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, &prime, NULL)) != CRYPT_OK) { + goto done; + } + base = ltc_ecc_new_point(); + if (base == NULL) { + mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, prime, NULL); + err = CRYPT_MEM; + goto done; + } + + /* read in the specs for this key */ + if ((err = mp_read_radix(prime, (char *)ltc_ecc_sets[key->idx].prime, 16)) != CRYPT_OK) { goto done; } + if ((err = mp_read_radix(base->x, (char *)ltc_ecc_sets[key->idx].Gx, 16)) != CRYPT_OK) { goto done; } + if ((err = mp_read_radix(base->y, (char *)ltc_ecc_sets[key->idx].Gy, 16)) != CRYPT_OK) { goto done; } + mp_set(base->z, 1); + if ((err = mp_read_unsigned_bin(key->k, (unsigned char *)buf, keysize)) != CRYPT_OK) { goto done; } + /* 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; - } + if ((err = ltc_mp.ecc_ptmul(key->k, base, &key->pubkey, prime, 1)) != CRYPT_OK) { goto done; } key->type = PK_PRIVATE; - /* success */ + /* free up ram */ err = CRYPT_OK; - goto cleanup; +done: + ltc_ecc_del_point(base); + mp_clear(prime); +LBL_ERR2: +#ifdef LTC_CLEAN_STACK + zeromem(buf, ECC_MAXSIZE); +#endif + + XFREE(buf); -error: - ecc_free(key); -cleanup: return err; } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + 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 index 56fb2342..c1f8a7d9 100644 --- a/src/pk/ecc/ecc_shared_secret.c +++ b/src/pk/ecc/ecc_shared_secret.c @@ -1,14 +1,27 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ecc_shared_secret.c ECC Crypto, Tom St Denis -*/ +*/ -#ifdef LTC_MECC +#ifdef MECC /** Create an ECC shared secret between two keys @@ -18,13 +31,13 @@ @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, +int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key, unsigned char *out, unsigned long *outlen) { - unsigned long x; - ecc_point *result; - void *prime, *a, *mp = NULL; - int err, inf; + unsigned long x; + ecc_point *result; + void *prime; + int err; LTC_ARGCHK(private_key != NULL); LTC_ARGCHK(public_key != NULL); @@ -36,17 +49,11 @@ int ecc_shared_secret(const ecc_key *private_key, const ecc_key *public_key, 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) { + if (ltc_ecc_is_valid_idx(private_key->idx) == 0) { + return CRYPT_INVALID_ARG; + } + + if (private_key->idx != public_key->idx) { return CRYPT_PK_TYPE_MISMATCH; } @@ -56,34 +63,33 @@ int ecc_shared_secret(const ecc_key *private_key, const ecc_key *public_key, return CRYPT_MEM; } - prime = private_key->dp.prime; - a = private_key->dp.A; + if ((err = mp_init(&prime)) != CRYPT_OK) { + ltc_ecc_del_point(result); + return err; + } - if ((err = ltc_mp.ecc_ptmul(private_key->k, &public_key->pubkey, result, a, prime, 0)) != CRYPT_OK) { goto done; } + if ((err = mp_read_radix(prime, (char *)ltc_ecc_sets[private_key->idx].prime, 16)) != CRYPT_OK) { goto done; } + if ((err = ltc_mp.ecc_ptmul(private_key->k, &public_key->pubkey, result, prime, 1)) != 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); + x = (unsigned long)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; } + if ((err = mp_to_unsigned_bin(result->x, out + (x - mp_unsigned_bin_size(result->x)))) != CRYPT_OK) { goto done; } err = CRYPT_OK; *outlen = x; done: - if (mp != NULL) ltc_mp_montgomery_free(mp); + mp_clear(prime); ltc_ecc_del_point(result); return err; } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/pk/ecc/ecc_sign_hash.c b/src/pk/ecc/ecc_sign_hash.c index 97023ac8..bf641b49 100644 --- a/src/pk/ecc/ecc_sign_hash.c +++ b/src/pk/ecc/ecc_sign_hash.c @@ -1,50 +1,118 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#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 -}; +/* 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 "tomcrypt.h" /** - Sign a message digest (ANSI X9.62 format) + @file ecc_sign_hash.c + ECC Crypto, Tom St Denis +*/ + +#ifdef MECC + +/** + Sign a message digest @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 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_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_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, ecc_key *key) { - if (opts->type < 0 || opts->type >= LTC_ARRAY_SIZE(s_ecc_sign_hash)) + ecc_key pubkey; + void *r, *s, *e, *p; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(key != NULL); + + /* is this a private key? */ + if (key->type != PK_PRIVATE) { + return CRYPT_PK_NOT_PRIVATE; + } + + /* is the IDX valid ? */ + if (ltc_ecc_is_valid_idx(key->idx) != 1) { 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); + } + + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + /* get the hash and load it as a bignum into 'e' */ + /* init the bignums */ + if ((err = mp_init_multi(&r, &s, &p, &e, NULL)) != CRYPT_OK) { + ecc_free(&pubkey); + goto LBL_ERR; + } + if ((err = mp_read_radix(p, (char *)ltc_ecc_sets[key->idx].order, 16)) != CRYPT_OK) { goto error; } + if ((err = mp_read_unsigned_bin(e, (unsigned char *)in, (int)inlen)) != CRYPT_OK) { goto error; } + + /* make up a key and export the public copy */ + for (;;) { + if ((err = ecc_make_key(prng, wprng, ecc_get_size(key), &pubkey)) != CRYPT_OK) { + return err; + } + + /* find r = x1 mod n */ + if ((err = mp_mod(pubkey.pubkey.x, p, r)) != CRYPT_OK) { goto error; } + + if (mp_iszero(r)) { + ecc_free(&pubkey); + } else { + /* find s = (e + xr)/k */ + if ((err = mp_invmod(pubkey.k, p, pubkey.k)) != CRYPT_OK) { goto error; } /* k = 1/k */ + if ((err = mp_mulmod(key->k, r, p, s)) != CRYPT_OK) { goto error; } /* s = xr */ + if ((err = mp_add(e, s, s)) != CRYPT_OK) { goto error; } /* s = e + xr */ + if ((err = mp_mod(s, p, s)) != CRYPT_OK) { goto error; } /* s = e + xr */ + if ((err = mp_mulmod(s, pubkey.k, p, s)) != CRYPT_OK) { goto error; } /* s = (e + xr)/k */ + + if (mp_iszero(s)) { + ecc_free(&pubkey); + } else { + break; + } + } + } + + /* store as 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); + goto LBL_ERR; +error: +LBL_ERR: + mp_clear_multi(r, s, p, e, NULL); + ecc_free(&pubkey); + + return err; } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + 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 index ed8cfc96..c673bfc5 100644 --- a/src/pk/ecc/ecc_sizes.c +++ b/src/pk/ecc/ecc_sizes.c @@ -1,36 +1,48 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ecc_sizes.c ECC Crypto, Tom St Denis -*/ +*/ -#ifdef LTC_MECC +#ifdef MECC void ecc_sizes(int *low, int *high) { - int i, size; - void *prime; + int i; + LTC_ARGCHKVD(low != NULL); + LTC_ARGCHKVD(high != NULL); - 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); - } + *low = INT_MAX; + *high = 0; + for (i = 0; ltc_ecc_sets[i].size != 0; i++) { + if (ltc_ecc_sets[i].size < *low) { + *low = ltc_ecc_sets[i].size; + } + if (ltc_ecc_sets[i].size > *high) { + *high = ltc_ecc_sets[i].size; + } + } } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + 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_test.c b/src/pk/ecc/ecc_test.c new file mode 100644 index 00000000..545fb100 --- /dev/null +++ b/src/pk/ecc/ecc_test.c @@ -0,0 +1,96 @@ +/* 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@gmail.com, http://libtomcrypt.com + */ + +/* 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 "tomcrypt.h" + +/** + @file ecc_test.c + ECC Crypto, Tom St Denis +*/ + +#ifdef MECC + +/** + Perform on the ECC system + @return CRYPT_OK if successful +*/ +int ecc_test(void) +{ + void *modulus, *order; + ecc_point *G, *GG; + int i, err, primality; + + if ((err = mp_init_multi(&modulus, &order, NULL)) != CRYPT_OK) { + return err; + } + + G = ltc_ecc_new_point(); + GG = ltc_ecc_new_point(); + if (G == NULL || GG == NULL) { + mp_clear_multi(modulus, order, NULL); + ltc_ecc_del_point(G); + ltc_ecc_del_point(GG); + return CRYPT_MEM; + } + + for (i = 0; ltc_ecc_sets[i].size; i++) { + #if 0 + printf("Testing %d\n", ltc_ecc_sets[i].size); + #endif + if ((err = mp_read_radix(modulus, (char *)ltc_ecc_sets[i].prime, 16)) != CRYPT_OK) { goto done; } + if ((err = mp_read_radix(order, (char *)ltc_ecc_sets[i].order, 16)) != CRYPT_OK) { goto done; } + + /* is prime actually prime? */ + if ((err = mp_prime_is_prime(modulus, 8, &primality)) != CRYPT_OK) { goto done; } + if (primality == 0) { + err = CRYPT_FAIL_TESTVECTOR; + goto done; + } + + /* is order prime ? */ + if ((err = mp_prime_is_prime(order, 8, &primality)) != CRYPT_OK) { goto done; } + if (primality == 0) { + err = CRYPT_FAIL_TESTVECTOR; + goto done; + } + + if ((err = mp_read_radix(G->x, (char *)ltc_ecc_sets[i].Gx, 16)) != CRYPT_OK) { goto done; } + if ((err = mp_read_radix(G->y, (char *)ltc_ecc_sets[i].Gy, 16)) != CRYPT_OK) { goto done; } + mp_set(G->z, 1); + + /* then we should have G == (order + 1)G */ + if ((err = mp_add_d(order, 1, order)) != CRYPT_OK) { goto done; } + if ((err = ltc_mp.ecc_ptmul(order, G, GG, modulus, 1)) != CRYPT_OK) { goto done; } + if (mp_cmp(G->x, GG->x) != LTC_MP_EQ || mp_cmp(G->y, GG->y) != LTC_MP_EQ) { + err = CRYPT_FAIL_TESTVECTOR; + goto done; + } + } + err = CRYPT_OK; + goto done; +done: + ltc_ecc_del_point(GG); + ltc_ecc_del_point(G); + mp_clear_multi(order, modulus, NULL); + return err; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/pk/ecc/ecc_verify_hash.c b/src/pk/ecc/ecc_verify_hash.c index b7a3fb89..5b2ea9ff 100644 --- a/src/pk/ecc/ecc_verify_hash.c +++ b/src/pk/ecc/ecc_verify_hash.c @@ -1,32 +1,37 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" - -#if defined(LTC_MECC) && defined(LTC_DER) +/* 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 "tomcrypt.h" /** @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); +#ifdef MECC -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 + * + * w = s^-1 mod n + * u1 = xw + * u2 = rw + * X = u1*G + u2*Q + * v = X_x1 mod n + * accept if v == r + */ /** Verify an ECC signature @@ -34,27 +39,122 @@ static const ecc_verify_fn s_ecc_verify_hash[] = { @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 stat 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) +int ecc_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int *stat, ecc_key *key) { - /* stat is cleared before anything else can return, it stays 0 unless the signature is good */ + ecc_point *mG, *mQ; + void *r, *s, *v, *w, *u1, *u2, *e, *p, *m; + void *mp; + int err; + + LTC_ARGCHK(sig != NULL); + LTC_ARGCHK(hash != NULL); LTC_ARGCHK(stat != NULL); + LTC_ARGCHK(key != NULL); + + /* default to invalid signature */ *stat = 0; - LTC_ARGCHK(opts != NULL); - if (opts->type < 0 || opts->type >= LTC_ARRAY_SIZE(s_ecc_verify_hash)) + mp = NULL; + + /* is the IDX valid ? */ + if (ltc_ecc_is_valid_idx(key->idx) != 1) { 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); + } + + /* allocate ints */ + if ((err = mp_init_multi(&r, &s, &v, &w, &u1, &u2, &p, &e, &m, NULL)) != CRYPT_OK) { + return CRYPT_MEM; + } + + /* allocate points */ + mG = ltc_ecc_new_point(); + mQ = ltc_ecc_new_point(); + if (mQ == NULL || mG == NULL) { + err = CRYPT_MEM; + goto done; + } + + /* parse header */ + if ((err = der_decode_sequence_multi(sig, siglen, + LTC_ASN1_INTEGER, 1UL, r, + LTC_ASN1_INTEGER, 1UL, s, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto done; + } + + /* get the order */ + if ((err = mp_read_radix(p, (char *)ltc_ecc_sets[key->idx].order, 16)) != CRYPT_OK) { goto error; } + + /* get the modulus */ + if ((err = mp_read_radix(m, (char *)ltc_ecc_sets[key->idx].prime, 16)) != CRYPT_OK) { goto error; } + + /* check for zero */ + if (mp_iszero(r) || mp_iszero(s) || mp_cmp(r, p) != LTC_MP_LT || mp_cmp(s, p) != LTC_MP_LT) { + err = CRYPT_INVALID_PACKET; + goto done; + } + + /* read hash */ + if ((err = mp_read_unsigned_bin(e, (unsigned char *)hash, (int)hashlen)) != CRYPT_OK) { goto error; } + + /* w = s^-1 mod n */ + if ((err = mp_invmod(s, p, w)) != CRYPT_OK) { goto error; } + + /* u1 = ew */ + if ((err = mp_mulmod(e, w, p, u1)) != CRYPT_OK) { goto error; } + + /* u2 = rw */ + if ((err = mp_mulmod(r, w, p, u2)) != CRYPT_OK) { goto error; } + + /* find mG = u1*G */ + if ((err = mp_read_radix(mG->x, (char *)ltc_ecc_sets[key->idx].Gx, 16)) != CRYPT_OK) { goto error; } + if ((err = mp_read_radix(mG->y, (char *)ltc_ecc_sets[key->idx].Gy, 16)) != CRYPT_OK) { goto error; } + mp_set(mG->z, 1); + if ((err = ltc_mp.ecc_ptmul(u1, mG, mG, m, 0)) != CRYPT_OK) { goto done; } + + /* find mQ = u2*Q */ + if ((err = mp_copy(key->pubkey.x, mQ->x)) != CRYPT_OK) { goto error; } + if ((err = mp_copy(key->pubkey.y, mQ->y)) != CRYPT_OK) { goto error; } + if ((err = mp_copy(key->pubkey.z, mQ->z)) != CRYPT_OK) { goto error; } + if ((err = ltc_mp.ecc_ptmul(u2, mQ, mQ, m, 0)) != CRYPT_OK) { goto done; } + + /* find the montgomery mp */ + if ((err = mp_montgomery_setup(m, &mp)) != CRYPT_OK) { goto error; } + /* add them */ + if ((err = ltc_mp.ecc_ptadd(mQ, mG, mG, m, mp)) != CRYPT_OK) { goto done; } + + /* reduce */ + if ((err = ltc_mp.ecc_map(mG, m, mp)) != CRYPT_OK) { goto done; } + + /* v = X_x1 mod n */ + if ((err = mp_mod(mG->x, p, v)) != CRYPT_OK) { goto done; } + + /* does v == r */ + if (mp_cmp(v, r) == LTC_MP_EQ) { + *stat = 1; + } + + /* clear up and return */ + err = CRYPT_OK; + goto done; +error: +done: + ltc_ecc_del_point(mG); + ltc_ecc_del_point(mQ); + mp_clear_multi(r, s, v, w, u1, u2, p, e, m, NULL); + if (mp != NULL) { + mp_montgomery_free(mp); + } + return err; } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + 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_is_valid_idx.c b/src/pk/ecc/ltc_ecc_is_valid_idx.c new file mode 100644 index 00000000..de4c818f --- /dev/null +++ b/src/pk/ecc/ltc_ecc_is_valid_idx.c @@ -0,0 +1,45 @@ +/* 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@gmail.com, http://libtomcrypt.com + */ + +/* 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 "tomcrypt.h" + +/** + @file ltc_ecc_is_valid_idx.c + ECC Crypto, Tom St Denis +*/ + +#ifdef MECC + +/** Returns whether an ECC idx is valid or not + @param n The idx number to check + @return 1 if valid, 0 if not +*/ +int ltc_ecc_is_valid_idx(int n) +{ + int x; + + for (x = 0; ltc_ecc_sets[x].size != 0; x++); + if ((n < 0) || (n >= x)) { + return 0; + } + return 1; +} + +#endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/pk/ecc/ltc_ecc_map.c b/src/pk/ecc/ltc_ecc_map.c index 228978d0..a1cacc72 100644 --- a/src/pk/ecc/ltc_ecc_map.c +++ b/src/pk/ecc/ltc_ecc_map.c @@ -1,14 +1,27 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ltc_ecc_map.c ECC Crypto, Tom St Denis -*/ +*/ -#ifdef LTC_MECC +#ifdef MECC /** Map a projective jacbobian point back to affine space @@ -17,47 +30,48 @@ @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) +int ltc_ecc_map(ecc_point *P, void *modulus, void *mp) { void *t1, *t2; - int err; + 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; + if ((err = mp_init_multi(&t1, &t2, NULL)) != CRYPT_OK) { + return CRYPT_MEM; } /* first map z back to normal */ - if ((err = ltc_mp_montgomery_reduce(P->z, modulus, mp)) != CRYPT_OK) { goto done; } + if ((err = 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; } - + if ((err = 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; } + if ((err = mp_sqr(t1, t2)) != CRYPT_OK) { goto done; } + if ((err = mp_mod(t2, modulus, t2)) != CRYPT_OK) { goto done; } + if ((err = mp_mul(t1, t2, t1)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_mul(P->x, t2, P->x)) != CRYPT_OK) { goto done; } + if ((err = mp_montgomery_reduce(P->x, modulus, mp)) != CRYPT_OK) { goto done; } + if ((err = mp_mul(P->y, t1, P->y)) != CRYPT_OK) { goto done; } + if ((err = mp_montgomery_reduce(P->y, modulus, mp)) != CRYPT_OK) { goto done; } + mp_set(P->z, 1); err = CRYPT_OK; + goto done; done: - ltc_mp_deinit_multi(t1, t2, LTC_NULL); + mp_clear_multi(t1, t2, NULL); return err; } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + 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 index 230aad03..9d36addd 100644 --- a/src/pk/ecc/ltc_ecc_mulmod.c +++ b/src/pk/ecc/ltc_ecc_mulmod.c @@ -1,35 +1,47 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ltc_ecc_mulmod.c ECC Crypto, Tom St Denis -*/ +*/ -#ifdef LTC_MECC +#ifdef MECC #ifndef LTC_ECC_TIMING_RESISTANT /* size of sliding window, don't change this! */ #define WINSIZE 4 /** - Perform a point multiplication + 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) +int ltc_ecc_mulmod(void *k, ecc_point *G, ecc_point *R, 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 i, j, err; + void *mu, *mp; + unsigned long buf; int first, bitbuf, bitcpy, bitcnt, mode, digidx; LTC_ARGCHK(k != NULL); @@ -37,29 +49,19 @@ int ltc_ecc_mulmod(const void *k, const ecc_point *G, ecc_point *R, const void * 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; } + if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { + return err; } - + if ((err = mp_init(&mu)) != CRYPT_OK) { + return err; + } + if ((err = mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) { + mp_montgomery_free(mp); + mp_clear(mu); + return err; + } + /* alloc ram for window temps */ for (i = 0; i < 8; i++) { M[i] = ltc_ecc_new_point(); @@ -67,8 +69,9 @@ int ltc_ecc_mulmod(const void *k, const ecc_point *G, ecc_point *R, const void * for (j = 0; j < i; j++) { ltc_ecc_del_point(M[j]); } - err = CRYPT_MEM; - goto error; + mp_montgomery_free(mp); + mp_clear(mu); + return CRYPT_MEM; } } @@ -77,32 +80,33 @@ int ltc_ecc_mulmod(const void *k, const ecc_point *G, ecc_point *R, const void * 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; } + if (mp_cmp_d(mu, 1) == LTC_MP_EQ) { + if ((err = mp_copy(G->x, tG->x)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(G->y, tG->y)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(G->z, tG->z)) != CRYPT_OK) { goto done; } + } else { + if ((err = mp_mulmod(G->x, mu, modulus, tG->x)) != CRYPT_OK) { goto done; } + if ((err = mp_mulmod(G->y, mu, modulus, tG->y)) != CRYPT_OK) { goto done; } + if ((err = mp_mulmod(G->z, mu, modulus, tG->z)) != CRYPT_OK) { goto done; } } - ltc_mp_clear(mu); - mu = NULL; - + mp_clear(mu); + /* 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; } + if ((err = ltc_mp.ecc_ptdbl(tG, M[0], modulus, mp)) != CRYPT_OK) { goto done; } + if ((err = ltc_mp.ecc_ptdbl(M[0], M[0], modulus, mp)) != CRYPT_OK) { goto done; } + if ((err = ltc_mp.ecc_ptdbl(M[0], M[0], 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; } + if ((err = ltc_mp.ecc_ptadd(M[j-9], tG, M[j-8], modulus, mp)) != CRYPT_OK) { goto done; } } /* setup sliding window */ mode = 0; bitcnt = 1; buf = 0; - digidx = ltc_mp_get_digit_count(k) - 1; + digidx = mp_get_digit_count(k) - 1; bitcpy = bitbuf = 0; first = 1; @@ -113,7 +117,7 @@ int ltc_ecc_mulmod(const void *k, const ecc_point *G, ecc_point *R, const void * if (digidx == -1) { break; } - buf = ltc_mp_get_digit(k, digidx); + buf = mp_get_digit(k, digidx); bitcnt = (int) ltc_mp.bits_per_digit; --digidx; } @@ -129,7 +133,7 @@ int ltc_ecc_mulmod(const void *k, const ecc_point *G, ecc_point *R, const void * /* 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; } + if ((err = ltc_mp.ecc_ptdbl(R, R, modulus, mp)) != CRYPT_OK) { goto done; } continue; } @@ -141,18 +145,20 @@ int ltc_ecc_mulmod(const void *k, const ecc_point *G, ecc_point *R, const void * /* 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; } + if ((err = mp_copy(M[bitbuf-8]->x, R->x)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(M[bitbuf-8]->y, R->y)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(M[bitbuf-8]->z, R->z)) != 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; } + if ((err = ltc_mp.ecc_ptdbl(R, R, 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; } + if ((err = ltc_mp.ecc_ptadd(R, M[bitbuf-8], R, modulus, mp)) != CRYPT_OK) { goto done; } } /* empty window and reset */ bitcpy = bitbuf = 0; @@ -166,18 +172,20 @@ int ltc_ecc_mulmod(const void *k, const ecc_point *G, ecc_point *R, const void * 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; } + if ((err = ltc_mp.ecc_ptdbl(R, R, 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; } + if ((err = mp_copy(tG->x, R->x)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(tG->y, R->y)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(tG->z, R->z)) != 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; } + if ((err = ltc_mp.ecc_ptadd(R, tG, R, modulus, mp)) != CRYPT_OK) { goto done; } } } } @@ -190,15 +198,11 @@ int ltc_ecc_mulmod(const void *k, const ecc_point *G, ecc_point *R, const void * err = CRYPT_OK; } done: + mp_montgomery_free(mp); 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; } @@ -207,3 +211,7 @@ error: #undef WINSIZE #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/ecc/ltc_ecc_mulmod_timing.c b/src/pk/ecc/ltc_ecc_mulmod_timing.c index b263d37b..648b9383 100644 --- a/src/pk/ecc/ltc_ecc_mulmod_timing.c +++ b/src/pk/ecc/ltc_ecc_mulmod_timing.c @@ -1,14 +1,27 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ltc_ecc_mulmod_timing.c ECC Crypto, Tom St Denis -*/ +*/ -#ifdef LTC_MECC +#ifdef MECC #ifdef LTC_ECC_TIMING_RESISTANT @@ -17,82 +30,74 @@ @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) +int ltc_ecc_mulmod(void *k, ecc_point *G, ecc_point *R, 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; + int i, j, err; + void *mu, *mp; + unsigned long 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; } + if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { + return err; + } + if ((err = mp_init(&mu)) != CRYPT_OK) { + return err; + } + if ((err = mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) { + mp_montgomery_free(mp); + mp_clear(mu); + return err; } - /* alloc ram for window temps */ - for (i = 0; i < 3; i++) { + /* 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); + mp_montgomery_free(mp); + mp_clear(mu); 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 */ + if ((err = mp_mulmod(G->x, mu, modulus, tG->x)) != CRYPT_OK) { goto done; } + if ((err = mp_mulmod(G->y, mu, modulus, tG->y)) != CRYPT_OK) { goto done; } + if ((err = mp_mulmod(G->z, mu, modulus, tG->z)) != CRYPT_OK) { goto done; } + mp_clear(mu); + + /* calc the M tab, which holds kG for k==8..15 */ /* M[0] == G */ - if ((err = ltc_ecc_copy_point(tG, M[0])) != CRYPT_OK) { goto done; } + if ((err = mp_copy(tG->x, M[0]->x)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(tG->y, M[0]->y)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(tG->z, M[0]->z)) != CRYPT_OK) { goto done; } /* M[1] == 2G */ - if ((err = ltc_mp.ecc_ptdbl(tG, M[1], ma, modulus, mp)) != CRYPT_OK) { goto done; } + if ((err = ltc_ecc_projective_dbl_point(tG, M[1], modulus, mp)) != CRYPT_OK) { goto done; } /* setup sliding window */ mode = 0; bitcnt = 1; buf = 0; - digidx = ltc_mp_get_digit_count(k) - 1; + digidx = mp_get_digit_count(k) - 1; + bitcpy = bitbuf = 0; + first = 1; /* perform ops */ for (;;) { @@ -101,36 +106,38 @@ int ltc_ecc_mulmod(const void *k, const ecc_point *G, ecc_point *R, const void * if (digidx == -1) { break; } - buf = ltc_mp_get_digit(k, digidx); - bitcnt = (int) LTC_MP_DIGIT_BIT; + buf = mp_get_digit(k, digidx); + bitcnt = (int) MP_DIGIT_BIT; --digidx; } /* grab the next msb from the ltiplicand */ - i = (int)((buf >> (LTC_MP_DIGIT_BIT - 1)) & 1); + i = (buf >> (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; } + if ((err = ltc_ecc_projective_add_point(M[0], M[1], M[2], modulus, mp)) != CRYPT_OK) { goto done; } + if ((err = ltc_ecc_projective_dbl_point(M[1], M[2], 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; } + if ((err = ltc_ecc_projective_add_point(M[0], M[1], M[2], modulus, mp)) != CRYPT_OK) { goto done; } + if ((err = ltc_ecc_projective_dbl_point(M[1], M[2], 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; } + if ((err = ltc_ecc_projective_add_point(M[0], M[1], M[i^1], modulus, mp)) != CRYPT_OK) { goto done; } + if ((err = ltc_ecc_projective_dbl_point(M[i], M[i], modulus, mp)) != CRYPT_OK) { goto done; } } /* copy result out */ - if ((err = ltc_ecc_copy_point(M[0], R)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(M[0]->x, R->x)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(M[0]->y, R->y)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(M[0]->z, R->z)) != CRYPT_OK) { goto done; } /* map R back from projective space */ if (map) { @@ -139,17 +146,17 @@ int ltc_ecc_mulmod(const void *k, const ecc_point *G, ecc_point *R, const void * err = CRYPT_OK; } done: + mp_montgomery_free(mp); 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 +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/pk/ecc/ltc_ecc_points.c b/src/pk/ecc/ltc_ecc_points.c index 79adb55e..07d003b1 100644 --- a/src/pk/ecc/ltc_ecc_points.c +++ b/src/pk/ecc/ltc_ecc_points.c @@ -1,27 +1,40 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ltc_ecc_points.c ECC Crypto, Tom St Denis -*/ +*/ -#ifdef LTC_MECC +#ifdef MECC /** Allocate a new ECC point - @return A newly allocated point or NULL on error + @return A newly allocated point or NULL on error */ ecc_point *ltc_ecc_new_point(void) { ecc_point *p; - p = XCALLOC(1, sizeof(*p)); + p = XMALLOC(sizeof(*p)); if (p == NULL) { return NULL; } - if (ltc_mp_init_multi(&p->x, &p->y, &p->z, LTC_NULL) != CRYPT_OK) { + if (mp_init_multi(&p->x, &p->y, &p->z, NULL) != CRYPT_OK) { XFREE(p); return NULL; } @@ -35,27 +48,13 @@ 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 */ + mp_clear_multi(p->x, p->y, p->z, 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 +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/pk/ecc/ltc_ecc_projective_add_point.c b/src/pk/ecc/ltc_ecc_projective_add_point.c index 837710ad..1cf48800 100644 --- a/src/pk/ecc/ltc_ecc_projective_add_point.c +++ b/src/pk/ecc/ltc_ecc_projective_add_point.c @@ -1,30 +1,41 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ -#include "tomcrypt_private.h" +/* 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 "tomcrypt.h" /** @file ltc_ecc_projective_add_point.c ECC Crypto, Tom St Denis -*/ +*/ -#if defined(LTC_MECC) && (!defined(LTC_MECC_ACCEL) || defined(LTM_DESC)) +#if defined(MECC) && (!defined(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) +int ltc_ecc_projective_add_point(ecc_point *P, ecc_point *Q, ecc_point *R, void *modulus, void *mp) { void *t1, *t2, *x, *y, *z; - int err, inf; + int err; LTC_ARGCHK(P != NULL); LTC_ARGCHK(Q != NULL); @@ -32,193 +43,155 @@ int ltc_ecc_projective_add_point(const ecc_point *P, const ecc_point *Q, ecc_poi LTC_ARGCHK(modulus != NULL); LTC_ARGCHK(mp != NULL); - if ((err = ltc_mp_init_multi(&t1, &t2, &x, &y, &z, LTC_NULL)) != CRYPT_OK) { + if ((err = mp_init_multi(&t1, &t2, &x, &y, &z, NULL)) != CRYPT_OK) { return err; } + + /* should we dbl instead? */ + if ((err = mp_sub(modulus, Q->y, t1)) != CRYPT_OK) { goto done; } - /* 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 ( (mp_cmp(P->x, Q->x) == LTC_MP_EQ) && + (Q->z != NULL && mp_cmp(P->z, Q->z) == LTC_MP_EQ) && + (mp_cmp(P->y, Q->y) == LTC_MP_EQ || mp_cmp(P->y, t1) == LTC_MP_EQ)) { + mp_clear_multi(t1, t2, x, y, z, NULL); + return ltc_ecc_projective_dbl_point(P, R, modulus, mp); } - 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 ((err = mp_copy(P->x, x)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(P->y, y)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_sqr(Q->z, t1)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_mul(t1, x, x)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_mul(Q->z, t1, t1)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_mul(t1, y, y)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_sqr(z, t1)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_mul(Q->x, t1, t2)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_mul(z, t1, t1)) != CRYPT_OK) { goto done; } + if ((err = 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; - } + if ((err = mp_mul(Q->y, t1, t1)) != CRYPT_OK) { goto done; } + if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK) { 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; } + if ((err = mp_sub(y, t1, y)) != CRYPT_OK) { goto done; } + if (mp_cmp_d(y, 0) == LTC_MP_LT) { + if ((err = 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; } + if ((err = mp_add(t1, t1, t1)) != CRYPT_OK) { goto done; } + if (mp_cmp(t1, modulus) != LTC_MP_LT) { + if ((err = 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; } + if ((err = mp_add(t1, y, t1)) != CRYPT_OK) { goto done; } + if (mp_cmp(t1, modulus) != LTC_MP_LT) { + if ((err = 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; } + if ((err = mp_sub(x, t2, x)) != CRYPT_OK) { goto done; } + if (mp_cmp_d(x, 0) == LTC_MP_LT) { + if ((err = 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; } + if ((err = mp_add(t2, t2, t2)) != CRYPT_OK) { goto done; } + if (mp_cmp(t2, modulus) != LTC_MP_LT) { + if ((err = 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 ((err = mp_add(t2, x, t2)) != CRYPT_OK) { goto done; } + if (mp_cmp(t2, modulus) != LTC_MP_LT) { + if ((err = 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; } + if ((err = mp_mul(z, Q->z, z)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_mul(z, x, z)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_mul(t1, x, t1)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_sqr(x, x)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_mul(t2, x, t2)) != CRYPT_OK) { goto done; } + if ((err = 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; } - + if ((err = mp_mul(t1, x, t1)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_sqr(y, x)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_sub(x, t2, x)) != CRYPT_OK) { goto done; } + if (mp_cmp_d(x, 0) == LTC_MP_LT) { + if ((err = 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; } - } + if ((err = mp_sub(t2, x, t2)) != CRYPT_OK) { goto done; } + if (mp_cmp_d(t2, 0) == LTC_MP_LT) { + if ((err = 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; } + if ((err = mp_sub(t2, x, t2)) != CRYPT_OK) { goto done; } + if (mp_cmp_d(t2, 0) == LTC_MP_LT) { + if ((err = 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; } + if ((err = mp_mul(t2, y, t2)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_sub(t2, t1, y)) != CRYPT_OK) { goto done; } + if (mp_cmp_d(y, 0) == LTC_MP_LT) { + if ((err = 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 (mp_isodd(y)) { + if ((err = mp_add(y, modulus, y)) != CRYPT_OK) { goto done; } } - if ((err = ltc_mp_div_2(y, y)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_copy(x, R->x)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(y, R->y)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(z, R->z)) != CRYPT_OK) { goto done; } err = CRYPT_OK; + goto done; done: - ltc_mp_deinit_multi(t1, t2, x, y, z, LTC_NULL); + mp_clear_multi(t1, t2, x, y, z, NULL); return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/pk/ecc/ltc_ecc_projective_dbl_point.c b/src/pk/ecc/ltc_ecc_projective_dbl_point.c index 90c71f13..1f4d348f 100644 --- a/src/pk/ecc/ltc_ecc_projective_dbl_point.c +++ b/src/pk/ecc/ltc_ecc_projective_dbl_point.c @@ -1,188 +1,148 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis */ -/* SPDX-License-Identifier: Unlicense */ - -#include "tomcrypt_private.h" - -/* ### Point doubling in Jacobian coordinate system ### +/* LibTomCrypt, modular cryptographic library -- Tom St Denis * - * 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 + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. * - * 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 + * The library is free for all purposes without any express + * guarantee it works. * - * 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) + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com */ +/* 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 "tomcrypt.h" + /** @file ltc_ecc_projective_dbl_point.c ECC Crypto, Tom St Denis -*/ +*/ -#if defined(LTC_MECC) && (!defined(LTC_MECC_ACCEL) || defined(LTM_DESC)) +#if defined(MECC) && (!defined(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) +int ltc_ecc_projective_dbl_point(ecc_point *P, ecc_point *R, void *modulus, void *mp) { void *t1, *t2; - int err, inf; + int err; 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) { + if ((err = mp_init_multi(&t1, &t2, 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; + if ((err = mp_copy(P->x, R->x)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(P->y, R->y)) != CRYPT_OK) { goto done; } + if ((err = mp_copy(P->z, R->z)) != CRYPT_OK) { 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; } + if ((err = mp_sqr(R->z, t1)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_mul(R->z, R->y, R->z)) != CRYPT_OK) { goto done; } + if ((err = 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 ((err = mp_add(R->z, R->z, R->z)) != CRYPT_OK) { goto done; } + if (mp_cmp(R->z, modulus) != LTC_MP_LT) { + if ((err = 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; } - } + + /* T2 = X - T1 */ + if ((err = mp_sub(R->x, t1, t2)) != CRYPT_OK) { goto done; } + if (mp_cmp_d(t2, 0) == LTC_MP_LT) { + if ((err = mp_add(t2, modulus, t2)) != 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; } - } + /* T1 = X + T1 */ + if ((err = mp_add(t1, R->x, t1)) != CRYPT_OK) { goto done; } + if (mp_cmp(t1, modulus) != LTC_MP_LT) { + if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK) { goto done; } + } + /* T2 = T1 * T2 */ + if ((err = mp_mul(t1, t2, t2)) != CRYPT_OK) { goto done; } + if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK) { goto done; } + /* T1 = 2T2 */ + if ((err = mp_add(t2, t2, t1)) != CRYPT_OK) { goto done; } + if (mp_cmp(t1, modulus) != LTC_MP_LT) { + if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK) { goto done; } + } + /* T1 = T1 + T2 */ + if ((err = mp_add(t1, t2, t1)) != CRYPT_OK) { goto done; } + if (mp_cmp(t1, modulus) != LTC_MP_LT) { + if ((err = 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; } + if ((err = mp_add(R->y, R->y, R->y)) != CRYPT_OK) { goto done; } + if (mp_cmp(R->y, modulus) != LTC_MP_LT) { + if ((err = 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; } + if ((err = mp_sqr(R->y, R->y)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_sqr(R->y, t2)) != CRYPT_OK) { goto done; } + if ((err = 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 (mp_isodd(t2)) { + if ((err = mp_add(t2, modulus, t2)) != CRYPT_OK) { goto done; } } - if ((err = ltc_mp_div_2(t2, t2)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_mul(R->y, R->x, R->y)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_sqr(t1, R->x)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_sub(R->x, R->y, R->x)) != CRYPT_OK) { goto done; } + if (mp_cmp_d(R->x, 0) == LTC_MP_LT) { + if ((err = 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; } + if ((err = mp_sub(R->x, R->y, R->x)) != CRYPT_OK) { goto done; } + if (mp_cmp_d(R->x, 0) == LTC_MP_LT) { + if ((err = 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 - X */ + if ((err = mp_sub(R->y, R->x, R->y)) != CRYPT_OK) { goto done; } + if (mp_cmp_d(R->y, 0) == LTC_MP_LT) { + if ((err = 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; } + if ((err = mp_mul(R->y, t1, R->y)) != CRYPT_OK) { goto done; } + if ((err = 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; } + if ((err = mp_sub(R->y, t2, R->y)) != CRYPT_OK) { goto done; } + if (mp_cmp_d(R->y, 0) == LTC_MP_LT) { + if ((err = mp_add(R->y, modulus, R->y)) != CRYPT_OK) { goto done; } } - + err = CRYPT_OK; + goto done; done: - ltc_mp_deinit_multi(t2, t1, LTC_NULL); + mp_clear_multi(t1, t2, NULL); return err; } #endif +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + 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/katja/katja_decrypt_key.c b/src/pk/katja/katja_decrypt_key.c new file mode 100644 index 00000000..266fece4 --- /dev/null +++ b/src/pk/katja/katja_decrypt_key.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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" + +/** + @file katja_decrypt_key.c + Katja PKCS #1 OAEP Decryption, Tom St Denis +*/ + +#ifdef MKAT + +/** + (PKCS #1 v2.0) decrypt then 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 index of the hash desired + @param stat [out] Result of the decryption, 1==valid, 0==invalid + @param key The corresponding private Katja key + @return CRYPT_OK if succcessul (even if invalid) +*/ +int katja_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + const unsigned char *lparam, unsigned long lparamlen, + int hash_idx, int *stat, + katja_key *key) +{ + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + unsigned char *tmp; + + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(stat != NULL); + + /* default to invalid */ + *stat = 0; + + /* valid hash ? */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; + } + + /* get modulus len in bits */ + modulus_bitlen = mp_count_bits( (key->N)); + + /* payload is upto pq, so we know q is 1/3rd the size of N and therefore pq is 2/3th the size */ + modulus_bitlen = ((modulus_bitlen << 1) / 3); + + /* round down to next byte */ + modulus_bitlen -= (modulus_bitlen & 7) + 8; + + /* 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 = katja_exptmod(in, inlen, tmp, &x, PK_PRIVATE, key)) != CRYPT_OK) { + XFREE(tmp); + return err; + } + + /* shift right by modulus_bytelen - modulus_bitlen/8 bytes */ + for (x = 0; x < (modulus_bitlen >> 3); x++) { + tmp[x] = tmp[x+(modulus_bytelen-(modulus_bitlen>>3))]; + } + + /* now OAEP decode the packet */ + err = pkcs_1_oaep_decode(tmp, x, lparam, lparamlen, modulus_bitlen, hash_idx, + out, outlen, stat); + + XFREE(tmp); + return err; +} + +#endif /* MRSA */ + + + + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/katja/katja_encrypt_key.c b/src/pk/katja/katja_encrypt_key.c new file mode 100644 index 00000000..fada9661 --- /dev/null +++ b/src/pk/katja/katja_encrypt_key.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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" + +/** + @file katja_encrypt_key.c + Katja PKCS-style OAEP encryption, Tom St Denis +*/ + +#ifdef MKAT + +/** + (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 key The Katja key to encrypt to + @return CRYPT_OK if successful +*/ +int katja_encrypt_key(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, katja_key *key) +{ + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_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)); + + /* payload is upto pq, so we know q is 1/3rd the size of N and therefore pq is 2/3th the size */ + modulus_bitlen = ((modulus_bitlen << 1) / 3); + + /* round down to next byte */ + modulus_bitlen -= (modulus_bitlen & 7) + 8; + + /* outlen must be at least the size of the modulus */ + modulus_bytelen = mp_unsigned_bin_size((key->N)); + if (modulus_bytelen > *outlen) { + *outlen = modulus_bytelen; + return CRYPT_BUFFER_OVERFLOW; + } + + /* OAEP pad the key */ + x = *outlen; + if ((err = pkcs_1_oaep_encode(in, inlen, lparam, + lparamlen, modulus_bitlen, prng, prng_idx, hash_idx, + out, &x)) != CRYPT_OK) { + return err; + } + + /* Katja exptmod the OAEP pad */ + return katja_exptmod(out, x, out, outlen, PK_PUBLIC, key); +} + +#endif /* MRSA */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/katja/katja_export.c b/src/pk/katja/katja_export.c new file mode 100644 index 00000000..62cf53f6 --- /dev/null +++ b/src/pk/katja/katja_export.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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" + +/** + @file katja_export.c + Export Katja PKCS-style keys, Tom St Denis +*/ + +#ifdef MKAT + +/** + This will export either an KatjaPublicKey or KatjaPrivateKey + @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 Katja key to export + @return CRYPT_OK if successful +*/ +int katja_export(unsigned char *out, unsigned long *outlen, int type, katja_key *key) +{ + int err; + unsigned long zero=0; + + 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_INVALID_TYPE; + } + + if (type == PK_PRIVATE) { + /* private key */ + /* output is + Version, n, d, p, q, d mod (p-1), d mod (q - 1), 1/q mod p, pq + */ + if ((err = der_encode_sequence_multi(out, outlen, + LTC_ASN1_SHORT_INTEGER, 1UL, &zero, + LTC_ASN1_INTEGER, 1UL, key->N, + 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_INTEGER, 1UL, key->pq, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + return err; + } + + /* clear zero and return */ + return CRYPT_OK; + } else { + /* public key */ + return der_encode_sequence_multi(out, outlen, + LTC_ASN1_INTEGER, 1UL, key->N, + LTC_ASN1_EOL, 0UL, NULL); + } +} + +#endif /* MRSA */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/katja/katja_exptmod.c b/src/pk/katja/katja_exptmod.c new file mode 100644 index 00000000..4f4bf4c9 --- /dev/null +++ b/src/pk/katja/katja_exptmod.c @@ -0,0 +1,115 @@ +/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" + +/** + @file katja_exptmod.c + Katja PKCS-style exptmod, Tom St Denis +*/ + +#ifdef MKAT + +/** + 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 katja_exptmod(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, int which, + katja_key *key) +{ + void *tmp, *tmpa, *tmpb; + unsigned long x; + int err; + + 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 = mp_init_multi(&tmp, &tmpa, &tmpb, NULL)) != CRYPT_OK) { return err; } + if ((err = mp_read_unsigned_bin(tmp, (unsigned char *)in, (int)inlen)) != CRYPT_OK) { goto error; } + + /* sanity check on the input */ + if (mp_cmp(key->N, tmp) == LTC_MP_LT) { + err = CRYPT_PK_INVALID_SIZE; + goto done; + } + + /* are we using the private exponent and is the key optimized? */ + if (which == PK_PRIVATE) { + /* tmpa = tmp^dP mod p */ + if ((err = mp_exptmod(tmp, key->dP, key->p, tmpa)) != CRYPT_OK) { goto error; } + + /* tmpb = tmp^dQ mod q */ + if ((err = mp_exptmod(tmp, key->dQ, key->q, tmpb)) != CRYPT_OK) { goto error; } + + /* tmp = (tmpa - tmpb) * qInv (mod p) */ + if ((err = mp_sub(tmpa, tmpb, tmp)) != CRYPT_OK) { goto error; } + if ((err = mp_mulmod(tmp, key->qP, key->p, tmp)) != CRYPT_OK) { goto error; } + + /* tmp = tmpb + q * tmp */ + if ((err = mp_mul(tmp, key->q, tmp)) != CRYPT_OK) { goto error; } + if ((err = mp_add(tmp, tmpb, tmp)) != CRYPT_OK) { goto error; } + } else { + /* exptmod it */ + if ((err = mp_exptmod(tmp, key->N, key->N, tmp)) != CRYPT_OK) { goto error; } + } + + /* read it back */ + x = (unsigned long)mp_unsigned_bin_size(key->N); + if (x > *outlen) { + *outlen = x; + err = CRYPT_BUFFER_OVERFLOW; + goto done; + } + + /* this should never happen ... */ + if (mp_unsigned_bin_size(tmp) > mp_unsigned_bin_size(key->N)) { + err = CRYPT_ERROR; + goto done; + } + *outlen = x; + + /* convert it */ + zeromem(out, x); + if ((err = mp_to_unsigned_bin(tmp, out+(x-mp_unsigned_bin_size(tmp)))) != CRYPT_OK) { goto error; } + + /* clean up and return */ + err = CRYPT_OK; + goto done; +error: +done: + mp_clear_multi(tmp, tmpa, tmpb, NULL); + return err; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/katja/katja_free.c b/src/pk/katja/katja_free.c new file mode 100644 index 00000000..d50e3d45 --- /dev/null +++ b/src/pk/katja/katja_free.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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" + +/** + @file katja_free.c + Free an Katja key, Tom St Denis +*/ + +#ifdef MKAT + +/** + Free an Katja key from memory + @param key The RSA key to free +*/ +void katja_free(katja_key *key) +{ + LTC_ARGCHK(key != NULL); + mp_clear_multi( key->d, key->N, key->dQ, key->dP, + key->qP, key->p, key->q, key->pq, NULL); +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/katja/katja_import.c b/src/pk/katja/katja_import.c new file mode 100644 index 00000000..6db24a67 --- /dev/null +++ b/src/pk/katja/katja_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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" + +/** + @file katja_import.c + Import a PKCS-style Katja key, Tom St Denis +*/ + +#ifdef MKAT + +/** + Import an KatjaPublicKey or KatjaPrivateKey [two-prime only, only support >= 1024-bit keys, defined in PKCS #1 v2.1] + @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 katja_import(const unsigned char *in, unsigned long inlen, katja_key *key) +{ + int err; + void *zero; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(ltc_mp.name != NULL); + + /* init key */ + if ((err = mp_init_multi(&zero, &key->d, &key->N, &key->dQ, + &key->dP, &key->qP, &key->p, &key->q, &key->pq, NULL)) != CRYPT_OK) { + return err; + } + + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_INTEGER, 1UL, key->N, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto LBL_ERR; + } + + if (mp_cmp_d(key->N, 0) == LTC_MP_EQ) { + /* it's a private key */ + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_INTEGER, 1UL, zero, + LTC_ASN1_INTEGER, 1UL, key->N, + 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_INTEGER, 1UL, key->pq, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto LBL_ERR; + } + key->type = PK_PRIVATE; + } else { + /* public we have N */ + key->type = PK_PUBLIC; + } + mp_clear(zero); + return CRYPT_OK; +LBL_ERR: + mp_clear_multi(zero, key->d, key->N, key->dQ, key->dP, + key->qP, key->p, key->q, key->pq, NULL); + return err; +} + +#endif /* MRSA */ + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/katja/katja_make_key.c b/src/pk/katja/katja_make_key.c new file mode 100644 index 00000000..b508e013 --- /dev/null +++ b/src/pk/katja/katja_make_key.c @@ -0,0 +1,101 @@ +/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" + +/** + @file katja_make_key.c + Katja key generation, Tom St Denis +*/ + +#ifdef MKAT + +/** + Create a Katja key + @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 key [out] Destination of a newly created private key pair + @return CRYPT_OK if successful, upon error all allocated ram is freed +*/ +int katja_make_key(prng_state *prng, int wprng, int size, katja_key *key) +{ + void *p, *q, *tmp1, *tmp2; + int err; + + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(ltc_mp.name != NULL); + + if ((size < (MIN_KAT_SIZE/8)) || (size > (MAX_KAT_SIZE/8))) { + return CRYPT_INVALID_KEYSIZE; + } + + if ((err = prng_is_valid(wprng)) != CRYPT_OK) { + return err; + } + + if ((err = mp_init_multi(&p, &q, &tmp1, &tmp2, NULL)) != CRYPT_OK) { + return err; + } + + /* divide size by three */ + size = (((size << 3) / 3) + 7) >> 3; + + /* make prime "q" (we negate size to make q == 3 mod 4) */ + if ((err = rand_prime(q, -size, prng, wprng)) != CRYPT_OK) { goto done; } + if ((err = mp_sub_d(q, 1, tmp1)) != CRYPT_OK) { goto done; } + + /* make prime "p" */ + do { + if ((err = rand_prime(p, size+1, prng, wprng)) != CRYPT_OK) { goto done; } + if ((err = mp_gcd(p, tmp1, tmp2)) != CRYPT_OK) { goto done; } + } while (mp_cmp_d(tmp2, 1) != LTC_MP_EQ); + + /* make key */ + if ((err = mp_init_multi(&key->d, &key->N, &key->dQ, &key->dP, + &key->qP, &key->p, &key->q, &key->pq, NULL)) != CRYPT_OK) { + goto error; + } + + /* n=p^2q and 1/n mod pq */ + if ((err = mp_copy( p, key->p)) != CRYPT_OK) { goto error2; } + if ((err = mp_copy( q, key->q)) != CRYPT_OK) { goto error2; } + if ((err = mp_mul(key->p, key->q, key->pq)) != CRYPT_OK) { goto error2; } /* tmp1 = pq */ + if ((err = mp_mul(key->pq, key->p, key->N)) != CRYPT_OK) { goto error2; } /* N = p^2q */ + if ((err = mp_sub_d( p, 1, tmp1)) != CRYPT_OK) { goto error2; } /* tmp1 = q-1 */ + if ((err = mp_sub_d( q, 1, tmp2)) != CRYPT_OK) { goto error2; } /* tmp2 = p-1 */ + if ((err = mp_lcm(tmp1, tmp2, key->d)) != CRYPT_OK) { goto error2; } /* tmp1 = lcd(p-1,q-1) */ + if ((err = mp_invmod( key->N, key->d, key->d)) != CRYPT_OK) { goto error2; } /* key->d = 1/N mod pq */ + + /* optimize for CRT now */ + /* find d mod q-1 and d mod p-1 */ + if ((err = mp_mod( key->d, tmp1, key->dP)) != CRYPT_OK) { goto error2; } /* dP = d mod p-1 */ + if ((err = mp_mod( key->d, tmp2, key->dQ)) != CRYPT_OK) { goto error2; } /* dQ = d mod q-1 */ + if ((err = mp_invmod( q, p, key->qP)) != CRYPT_OK) { goto error2; } /* qP = 1/q mod p */ + + /* set key type (in this case it's CRT optimized) */ + key->type = PK_PRIVATE; + + /* return ok and free temps */ + err = CRYPT_OK; + goto done; +error2: + mp_clear_multi( key->d, key->N, key->dQ, key->dP, key->qP, key->p, key->q, key->pq, NULL); +error: +done: + mp_clear_multi( tmp2, tmp1, p, q, NULL); + return err; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 513b03f3..4b457974 100644 --- a/src/pk/pkcs1/pkcs_1_i2osp.c +++ b/src/pk/pkcs1/pkcs_1_i2osp.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pkcs_1_i2osp.c - Integer to Octet I2OSP, Tom St Denis + Integer to Octet I2OSP, Tom St Denis */ -#ifdef LTC_PKCS_1 +#ifdef PKCS_1 /* always stores the same # of bytes, pads with leading zero bytes as required @@ -24,7 +32,7 @@ int pkcs_1_i2osp(void *n, unsigned long modulus_len, unsigned char *out) { unsigned long size; - size = ltc_mp_unsigned_bin_size(n); + size = mp_unsigned_bin_size(n); if (size > modulus_len) { return CRYPT_BUFFER_OVERFLOW; @@ -32,8 +40,12 @@ int pkcs_1_i2osp(void *n, unsigned long modulus_len, unsigned char *out) /* store it */ zeromem(out, modulus_len); - return ltc_mp_to_unsigned_bin(n, out+(modulus_len-size)); + return mp_to_unsigned_bin(n, out+(modulus_len-size)); } -#endif /* LTC_PKCS_1 */ +#endif /* PKCS_1 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/pkcs1/pkcs_1_mgf1.c b/src/pk/pkcs1/pkcs_1_mgf1.c index a1ef64a1..b969a101 100644 --- a/src/pk/pkcs1/pkcs_1_mgf1.c +++ b/src/pk/pkcs1/pkcs_1_mgf1.c @@ -1,53 +1,49 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pkcs_1_mgf1.c - The Mask Generation Function (MGF1) for PKCS #1, Tom St Denis + The Mask Generation Function (MGF1) for PKCS #1, Tom St Denis */ -#ifdef LTC_PKCS_1 +#ifdef 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 hash_idx The index of the hash desired @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) +int 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) { + 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; @@ -105,4 +101,8 @@ LBL_ERR: return err; } -#endif /* LTC_PKCS_1 */ +#endif /* PKCS_1 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/pkcs1/pkcs_1_oaep_decode.c b/src/pk/pkcs1/pkcs_1_oaep_decode.c index f0f0deca..81bff41a 100644 --- a/src/pk/pkcs1/pkcs_1_oaep_decode.c +++ b/src/pk/pkcs1/pkcs_1_oaep_decode.c @@ -1,48 +1,58 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pkcs_1_oaep_decode.c - OAEP Padding for PKCS #1, Tom St Denis + OAEP Padding for PKCS #1, Tom St Denis */ -#ifdef LTC_PKCS_1 +#ifdef 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 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 hash_idx The index of the hash desired @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 + @return CRYPT_OK if successful (even if invalid) */ -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 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, 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; + int err; LTC_ARGCHK(msg != NULL); LTC_ARGCHK(out != NULL); LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(res != NULL); - if ((err = rsa_key_valid_op(LTC_PKCS1_DECRYPT, &op_checked)) != CRYPT_OK) { + /* default to invalid packet */ + *res = 0; + + /* test valid hash */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { return err; } - - hLen = hash_descriptor[op_checked.hash_alg].hashsize; + hLen = hash_descriptor[hash_idx].hashsize; modulus_len = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); /* test hash/message size */ @@ -68,18 +78,17 @@ int ltc_pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, } /* ok so it's now in the form - - 0x00 || maskedseed || maskedDB - + + 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; + err = CRYPT_OK; + goto LBL_ERR; } /* now read the masked seed */ @@ -91,8 +100,8 @@ int ltc_pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, 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) { + /* compute MGF1 of maskedDB (hLen) */ + if ((err = pkcs_1_mgf1(hash_idx, DB, modulus_len - hLen - 1, mask, hLen)) != CRYPT_OK) { goto LBL_ERR; } @@ -102,33 +111,34 @@ int ltc_pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, } /* 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) { + if ((err = pkcs_1_mgf1(hash_idx, 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]; + 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) { + if (lparam != NULL) { + if ((err = hash_memory(hash_idx, lparam, 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) { + if ((err = hash_memory(hash_idx, DB, 0, seed, &x)) != CRYPT_OK) { goto LBL_ERR; } } /* compare the lhash'es */ - if (XMEM_NEQ(seed, DB, hLen) != 0) { - ret = CRYPT_INVALID_PACKET; + if (memcmp(seed, DB, hLen) != 0) { + err = CRYPT_OK; + goto LBL_ERR; } /* now zeroes before a 0x01 */ @@ -136,26 +146,28 @@ int ltc_pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, /* step... */ } - /* error if wasn't 0x01 */ + /* error out if wasn't 0x01 */ if (x == (modulus_len - hLen - 1) || DB[x] != 0x01) { - ret = CRYPT_INVALID_PACKET; + err = CRYPT_INVALID_PACKET; + goto LBL_ERR; } /* 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 = CRYPT_BUFFER_OVERFLOW; + goto LBL_ERR; } - err = ret; + /* copy message */ + *outlen = modulus_len - hLen - 1 - x; + XMEMCPY(out, DB + x, modulus_len - hLen - 1 - x); + x += modulus_len - hLen - 1; + + /* valid packet */ + *res = 1; + + err = CRYPT_OK; LBL_ERR: #ifdef LTC_CLEAN_STACK zeromem(DB, modulus_len); @@ -170,4 +182,8 @@ LBL_ERR: return err; } -#endif /* LTC_PKCS_1 */ +#endif /* PKCS_1 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/pkcs1/pkcs_1_oaep_encode.c b/src/pk/pkcs1/pkcs_1_oaep_encode.c index 7e323bd4..842f0b98 100644 --- a/src/pk/pkcs1/pkcs_1_oaep_encode.c +++ b/src/pk/pkcs1/pkcs_1_oaep_encode.c @@ -1,42 +1,61 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file pkcs_1_oaep_encode.c - OAEP Padding for PKCS #1, Tom St Denis + OAEP Padding for PKCS #1, Tom St Denis */ -#ifdef LTC_PKCS_1 +#ifdef 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 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 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 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; - ltc_rsa_op_checked op_checked = ltc_pkcs1_op_checked_init(params); - LTC_ARGCHK((msglen == 0) || (msg != NULL)); + LTC_ARGCHK(msg != NULL); LTC_ARGCHK(out != NULL); LTC_ARGCHK(outlen != NULL); - if ((err = rsa_key_valid_op(LTC_PKCS1_ENCRYPT, &op_checked)) != CRYPT_OK) { + /* test valid hash */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { return err; } - hLen = hash_descriptor[op_checked.hash_alg].hashsize; + /* 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); /* test message size */ @@ -64,13 +83,13 @@ int ltc_pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, /* 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) { + if (lparam != NULL) { + if ((err = hash_memory(hash_idx, lparam, 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) { + /* 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 LBL_ERR; } } @@ -84,30 +103,28 @@ int ltc_pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, /* 0x01 byte */ DB[x++] = 0x01; - if (msglen != 0) { - /* message (length = msglen) */ - XMEMCPY(DB+x, msg, msglen); - x += msglen; - } + /* 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) { + if (prng_descriptor[prng_idx].read(seed, hLen, 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) { + if ((err = pkcs_1_mgf1(hash_idx, 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]; + 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) { + /* compute MGF1 of maskedDB (hLen) */ + if ((err = pkcs_1_mgf1(hash_idx, DB, modulus_len - hLen - 1, mask, hLen)) != CRYPT_OK) { goto LBL_ERR; } @@ -132,7 +149,7 @@ int ltc_pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, x += modulus_len - hLen - 1; *outlen = x; - + err = CRYPT_OK; LBL_ERR: #ifdef LTC_CLEAN_STACK @@ -148,5 +165,9 @@ LBL_ERR: return err; } -#endif /* LTC_PKCS_1 */ +#endif /* PKCS_1 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/pkcs1/pkcs_1_os2ip.c b/src/pk/pkcs1/pkcs_1_os2ip.c index e009cc35..cc29dd71 100644 --- a/src/pk/pkcs1/pkcs_1_os2ip.c +++ b/src/pk/pkcs1/pkcs_1_os2ip.c @@ -1,12 +1,20 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pkcs_1_os2ip.c - Octet to Integer OS2IP, Tom St Denis + Octet to Integer OS2IP, Tom St Denis */ -#ifdef LTC_PKCS_1 +#ifdef PKCS_1 /** Read a binary string into an mp_int @@ -17,8 +25,12 @@ */ int pkcs_1_os2ip(void *n, unsigned char *in, unsigned long inlen) { - return ltc_mp_read_unsigned_bin(n, in, inlen); + return mp_read_unsigned_bin(n, in, inlen); } -#endif /* LTC_PKCS_1 */ +#endif /* PKCS_1 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/pkcs1/pkcs_1_pss_decode.c b/src/pk/pkcs1/pkcs_1_pss_decode.c index 185dff12..2f865511 100644 --- a/src/pk/pkcs1/pkcs_1_pss_decode.c +++ b/src/pk/pkcs1/pkcs_1_pss_decode.c @@ -1,56 +1,61 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pkcs_1_pss_decode.c - PKCS #1 PSS Signature Padding, Tom St Denis + PKCS #1 PSS Signature Padding, Tom St Denis */ -#ifdef LTC_PKCS_1 +#ifdef PKCS_1 /** - PKCS #1 v2.00 Signature Verification + 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 params The PKCS#1 operation's parameters + @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 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 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, saltlen; + unsigned long x, y, hLen, modulus_len; 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); + LTC_ARGCHK(res != NULL); - if ((err = rsa_key_valid_op(LTC_PKCS1_VERIFY, &op_checked)) != CRYPT_OK) { + /* default to invalid */ + *res = 0; + + /* ensure hash is valid */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { return err; } - hLen = hash_descriptor[op_checked.hash_alg].hashsize; - saltlen = params->params.saltlen; - modulus_bitlen--; + hLen = hash_descriptor[hash_idx].hashsize; modulus_len = (modulus_bitlen>>3) + (modulus_bitlen & 7 ? 1 : 0); /* check sizes */ - if ((saltlen > modulus_len) || - (modulus_len < hLen + saltlen + 2)) { + if ((saltlen > modulus_len) || + (modulus_len < hLen + saltlen + 2) || (siglen != modulus_len)) { return CRYPT_PK_INVALID_SIZE; } @@ -77,7 +82,7 @@ int ltc_pkcs_1_pss_decode_mgf1(const unsigned char *msghash, unsigned long msgh /* ensure the 0xBC byte */ if (sig[siglen-1] != 0xBC) { - err = CRYPT_INVALID_PACKET; + err = CRYPT_OK; goto LBL_ERR; } @@ -88,16 +93,16 @@ int ltc_pkcs_1_pss_decode_mgf1(const unsigned char *msghash, unsigned long msgh /* copy out the hash */ XMEMCPY(hash, sig + x, hLen); - /* x += hLen; */ + x += hLen; /* check the MSB */ - if ((sig[0] & ~(0xFF >> ((modulus_len<<3) - (modulus_bitlen)))) != 0) { - err = CRYPT_INVALID_PACKET; + if ((sig[0] & ~(0xFF >> ((modulus_len<<3) - (modulus_bitlen-1)))) != 0) { + err = CRYPT_OK; 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) { + if ((err = pkcs_1_mgf1(hash_idx, hash, hLen, mask, modulus_len - hLen - 1)) != CRYPT_OK) { goto LBL_ERR; } @@ -105,56 +110,56 @@ int ltc_pkcs_1_pss_decode_mgf1(const unsigned char *msghash, unsigned long msgh 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[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_INVALID_PACKET; + err = CRYPT_OK; goto LBL_ERR; } } /* check for the 0x01 */ if (DB[x++] != 0x01) { - err = CRYPT_INVALID_PACKET; + err = CRYPT_OK; goto LBL_ERR; } /* M = (eight) 0x00 || msghash || salt, mask = H(M) */ - if ((err = hash_descriptor[op_checked.hash_alg].init(&md)) != CRYPT_OK) { + if ((err = hash_descriptor[hash_idx].init(&md)) != CRYPT_OK) { goto LBL_ERR; } zeromem(mask, 8); - if ((err = hash_descriptor[op_checked.hash_alg].process(&md, mask, 8)) != CRYPT_OK) { + if ((err = hash_descriptor[hash_idx].process(&md, mask, 8)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = hash_descriptor[op_checked.hash_alg].process(&md, msghash, msghashlen)) != CRYPT_OK) { + if ((err = hash_descriptor[hash_idx].process(&md, msghash, msghashlen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = hash_descriptor[op_checked.hash_alg].process(&md, DB+x, saltlen)) != CRYPT_OK) { + if ((err = hash_descriptor[hash_idx].process(&md, DB+x, saltlen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = hash_descriptor[op_checked.hash_alg].done(&md, mask)) != CRYPT_OK) { + if ((err = hash_descriptor[hash_idx].done(&md, mask)) != CRYPT_OK) { goto LBL_ERR; } /* mask == hash means valid signature */ - if (XMEM_NEQ(mask, hash, hLen) == 0) { + if (memcmp(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); + zeromem(DB, modulus_len); + zeromem(mask, modulus_len); + zeromem(salt, modulus_len); + zeromem(hash, modulus_len); #endif XFREE(hash); @@ -165,4 +170,8 @@ LBL_ERR: return err; } -#endif /* LTC_PKCS_1 */ +#endif /* PKCS_1 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/pkcs1/pkcs_1_pss_encode.c b/src/pk/pkcs1/pkcs_1_pss_encode.c index bf5c2992..e435d3d9 100644 --- a/src/pk/pkcs1/pkcs_1_pss_encode.c +++ b/src/pk/pkcs1/pkcs_1_pss_encode.c @@ -1,47 +1,59 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" -/** +/** @file pkcs_1_pss_encode.c - PKCS #1 PSS Signature Padding, Tom St Denis + PKCS #1 PSS Signature Padding, Tom St Denis */ -#ifdef LTC_PKCS_1 +#ifdef 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 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 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 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, saltlen; + unsigned long x, y, hLen, modulus_len; 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) { + /* 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[op_checked.hash_alg].hashsize; - saltlen = params->params.saltlen; - modulus_bitlen--; + hLen = hash_descriptor[hash_idx].hashsize; modulus_len = (modulus_bitlen>>3) + (modulus_bitlen & 7 ? 1 : 0); /* check sizes */ @@ -73,27 +85,27 @@ int ltc_pkcs_1_pss_encode_mgf1(const unsigned char *msghash, unsigned long /* generate random salt */ if (saltlen > 0) { - if (prng_descriptor[params->wprng].read(salt, saltlen, params->prng) != saltlen) { + if (prng_descriptor[prng_idx].read(salt, saltlen, 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) { + if ((err = hash_descriptor[hash_idx].init(&md)) != CRYPT_OK) { goto LBL_ERR; } zeromem(DB, 8); - if ((err = hash_descriptor[op_checked.hash_alg].process(&md, DB, 8)) != CRYPT_OK) { + if ((err = hash_descriptor[hash_idx].process(&md, DB, 8)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = hash_descriptor[op_checked.hash_alg].process(&md, msghash, msghashlen)) != CRYPT_OK) { + if ((err = hash_descriptor[hash_idx].process(&md, msghash, msghashlen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = hash_descriptor[op_checked.hash_alg].process(&md, salt, saltlen)) != CRYPT_OK) { + if ((err = hash_descriptor[hash_idx].process(&md, salt, saltlen)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = hash_descriptor[op_checked.hash_alg].done(&md, hash)) != CRYPT_OK) { + if ((err = hash_descriptor[hash_idx].done(&md, hash)) != CRYPT_OK) { goto LBL_ERR; } @@ -103,10 +115,10 @@ int ltc_pkcs_1_pss_encode_mgf1(const unsigned char *msghash, unsigned long x += modulus_len - saltlen - hLen - 2; DB[x++] = 0x01; XMEMCPY(DB + x, salt, saltlen); - /* x += 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) { + if ((err = pkcs_1_mgf1(hash_idx, hash, hLen, mask, modulus_len - hLen - 1)) != CRYPT_OK) { goto LBL_ERR; } @@ -135,17 +147,17 @@ int ltc_pkcs_1_pss_encode_mgf1(const unsigned char *msghash, unsigned long out[y] = 0xBC; /* now clear the 8*modulus_len - modulus_bitlen most significant bits */ - out[0] &= 0xFF >> ((modulus_len<<3) - modulus_bitlen); + out[0] &= 0xFF >> ((modulus_len<<3) - (modulus_bitlen-1)); /* 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); + zeromem(DB, modulus_len); + zeromem(mask, modulus_len); + zeromem(salt, modulus_len); + zeromem(hash, modulus_len); #endif XFREE(hash); @@ -156,4 +168,8 @@ LBL_ERR: return err; } -#endif /* LTC_PKCS_1 */ +#endif /* PKCS_1 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index b4cbc88b..47e56cdb 100644 --- a/src/pk/rsa/rsa_decrypt_key.c +++ b/src/pk/rsa/rsa_decrypt_key.c @@ -1,94 +1,93 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file rsa_decrypt_key.c - RSA PKCS #1 Decryption, Tom St Denis and Andreas Lange -*/ + RSA PKCS #1 OAEP Decryption, Tom St Denis +*/ + +#ifdef MRSA -#ifdef LTC_MRSA /** - Decrypt then (PKCS #1 v2.0) OAEP or (PKCS #1 v1.5) EME depad + (PKCS #1 v2.0) decrypt then 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 params The RSA operation's parameters + @param lparam The system "lparam" value + @param lparamlen The length of the lparam value (octets) + @param hash_idx The index of the hash desired @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 rsa_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + const unsigned char *lparam, unsigned long lparamlen, + int hash_idx, int *stat, + 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); + int err; + unsigned char *tmp; + LTC_ARGCHK(out != NULL); LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(stat != NULL); - /* valid padding? */ - if ((err = rsa_key_valid_op(LTC_RSA_DECRYPT, &op_checked)) != CRYPT_OK) { - return err; + /* default to invalid */ + *stat = 0; + + /* valid hash ? */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; } - + /* get modulus len in bits */ - modulus_bitlen = ltc_mp_count_bits( (key->N)); + modulus_bitlen = mp_count_bits( (key->N)); /* outlen must be at least the size of the modulus */ - modulus_bytelen = ltc_mp_unsigned_bin_size( (key->N)); + modulus_bytelen = 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 */ + /* rsa decode 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); - } - + /* now OAEP decode the packet */ + err = pkcs_1_oaep_decode(tmp, x, lparam, lparamlen, modulus_bitlen, hash_idx, + out, outlen, stat); XFREE(tmp); return err; } -#endif /* LTC_MRSA */ +#endif /* MRSA */ + + + + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/rsa/rsa_encrypt_key.c b/src/pk/rsa/rsa_encrypt_key.c index b8797a16..91bac096 100644 --- a/src/pk/rsa/rsa_encrypt_key.c +++ b/src/pk/rsa/rsa_encrypt_key.c @@ -1,68 +1,81 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file rsa_encrypt_key.c - RSA PKCS #1 encryption, Tom St Denis and Andreas Lange -*/ + RSA PKCS OAEP encryption, Tom St Denis +*/ + +#ifdef MRSA -#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) + (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 key The RSA key to encrypt to + @return CRYPT_OK if successful +*/ +int rsa_encrypt_key(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, 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)); + int err; + + LTC_ARGCHK(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; + LTC_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 = ltc_mp_count_bits( (key->N)); + modulus_bitlen = mp_count_bits( (key->N)); /* outlen must be at least the size of the modulus */ - modulus_bytelen = ltc_mp_unsigned_bin_size( (key->N)); + modulus_bytelen = mp_unsigned_bin_size( (key->N)); if (modulus_bytelen > *outlen) { *outlen = modulus_bytelen; return CRYPT_BUFFER_OVERFLOW; } + + /* OAEP pad the key */ + x = *outlen; + if ((err = pkcs_1_oaep_encode(in, inlen, lparam, + lparamlen, modulus_bitlen, prng, prng_idx, hash_idx, + out, &x)) != CRYPT_OK) { + return err; + } - 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 */ + /* rsa exptmod the OAEP pad */ return ltc_mp.rsa_me(out, x, out, outlen, PK_PUBLIC, key); } -#endif /* LTC_MRSA */ +#endif /* MRSA */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/rsa/rsa_export.c b/src/pk/rsa/rsa_export.c index 7d99f47c..cc5e9aa2 100644 --- a/src/pk/rsa/rsa_export.c +++ b/src/pk/rsa/rsa_export.c @@ -1,91 +1,69 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file rsa_export.c Export RSA PKCS keys, Tom St Denis -*/ +*/ -#ifdef LTC_MRSA +#ifdef MRSA /** - This will export either an RSAPublicKey or RSAPrivateKey [defined in PKCS #1 v2.1] + 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) +*/ +int rsa_export(unsigned char *out, unsigned long *outlen, int type, 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; + /* type valid? */ + if (!(key->type == PK_PRIVATE) && (type == PK_PRIVATE)) { + return CRYPT_PK_INVALID_TYPE; } if (type == PK_PRIVATE) { /* private key */ - /* output is + /* 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, + 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->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_INTEGER, 1UL, key->dQ, + LTC_ASN1_INTEGER, 1UL, key->qP, LTC_ASN1_EOL, 0UL, NULL); - } - - if (type == PK_PUBLIC) { + } else { /* 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, + return der_encode_sequence_multi(out, outlen, + 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 */ +#endif /* MRSA */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/rsa/rsa_exptmod.c b/src/pk/rsa/rsa_exptmod.c index 95ddddeb..e751365e 100644 --- a/src/pk/rsa/rsa_exptmod.c +++ b/src/pk/rsa/rsa_exptmod.c @@ -1,41 +1,45 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file rsa_exptmod.c RSA PKCS exptmod, Tom St Denis - Added RSA blinding --nmav -*/ +*/ -#ifdef LTC_MRSA +#ifdef MRSA -/** - Compute an RSA modular exponentiation +/** + 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 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 + @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) + rsa_key *key) { - void *tmp, *tmpa, *tmpb; - #ifdef LTC_RSA_BLINDING - void *rnd, *rndi /* inverse of rnd */; - #endif + void *tmp, *tmpa, *tmpb; unsigned long x; - int err, has_crt_parameters; + int err; 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; @@ -47,126 +51,65 @@ int rsa_exptmod(const unsigned char *in, unsigned long inlen, } /* 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; } - + if ((err = mp_init_multi(&tmp, &tmpa, &tmpb, NULL)) != CRYPT_OK) { return err; } + if ((err = mp_read_unsigned_bin(tmp, (unsigned char *)in, (int)inlen)) != CRYPT_OK) { goto error; } /* sanity check on the input */ - if (ltc_mp_cmp(key->N, tmp) == LTC_MP_LT) { + if (mp_cmp(key->N, tmp) == LTC_MP_LT) { err = CRYPT_PK_INVALID_SIZE; - goto error; + goto done; } /* 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; - } + /* tmpa = tmp^dP mod p */ + if ((err = mp_exptmod(tmp, key->dP, key->p, tmpa)) != CRYPT_OK) { goto error; } - /* rndi = 1/rnd mod N */ - err = ltc_mp_invmod(rnd, key->N, rndi); - if (err != CRYPT_OK) { - goto error; - } + /* tmpb = tmp^dQ mod q */ + if ((err = mp_exptmod(tmp, key->dQ, key->q, tmpb)) != CRYPT_OK) { goto error; } - /* rnd = rnd^e */ - err = ltc_mp_exptmod( rnd, key->e, key->N, rnd); - if (err != CRYPT_OK) { - goto error; - } + /* tmp = (tmpa - tmpb) * qInv (mod p) */ + if ((err = mp_sub(tmpa, tmpb, tmp)) != CRYPT_OK) { goto error; } + if ((err = mp_mulmod(tmp, key->qP, key->p, tmp)) != 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 + /* tmp = tmpb + q * tmp */ + if ((err = mp_mul(tmp, key->q, tmp)) != CRYPT_OK) { goto error; } + if ((err = mp_add(tmp, tmpb, tmp)) != CRYPT_OK) { goto error; } } else { /* exptmod it */ - if ((err = ltc_mp_exptmod(tmp, key->e, key->N, tmp)) != CRYPT_OK) { goto error; } + if ((err = 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); + x = (unsigned long)mp_unsigned_bin_size(key->N); if (x > *outlen) { *outlen = x; err = CRYPT_BUFFER_OVERFLOW; - goto error; + goto done; } /* this should never happen ... */ - if (ltc_mp_unsigned_bin_size(tmp) > ltc_mp_unsigned_bin_size(key->N)) { + if (mp_unsigned_bin_size(tmp) > mp_unsigned_bin_size(key->N)) { err = CRYPT_ERROR; - goto error; + goto done; } *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; } + if ((err = mp_to_unsigned_bin(tmp, out+(x-mp_unsigned_bin_size(tmp)))) != CRYPT_OK) { goto error; } /* clean up and return */ err = CRYPT_OK; + goto done; error: - ltc_mp_deinit_multi( -#ifdef LTC_RSA_BLINDING - rndi, rnd, -#endif /* LTC_RSA_BLINDING */ - tmpb, tmpa, tmp, NULL); +done: + mp_clear_multi(tmp, tmpa, tmpb, NULL); return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/rsa/rsa_free.c b/src/pk/rsa/rsa_free.c new file mode 100644 index 00000000..b477fb91 --- /dev/null +++ b/src/pk/rsa/rsa_free.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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" + +/** + @file rsa_free.c + Free an RSA key, Tom St Denis +*/ + +#ifdef MRSA + +/** + Free an RSA key from memory + @param key The RSA key to free +*/ +void rsa_free(rsa_key *key) +{ + LTC_ARGCHKVD(key != NULL); + mp_clear_multi( key->e, key->d, key->N, key->dQ, key->dP, + key->qP, key->p, key->q, NULL); +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index bc201ad9..80df5125 100644 --- a/src/pk/rsa/rsa_import.c +++ b/src/pk/rsa/rsa_import.c @@ -1,91 +1,24 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.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 +*/ +#ifdef MRSA /** - 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 - + Import an RSAPublicKey or RSAPrivateKey [two-prime only, only support >= 1024-bit keys, defined in PKCS #1 v2.1] @param in The packet to import from @param inlen It's length (octets) @param key [out] Destination for newly imported key @@ -94,27 +27,118 @@ LBL_OUT: int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key) { int err; + void *zero; + unsigned char *tmpbuf; + unsigned long t, x, y, z, tmpoid[16]; + ltc_asn1_list ssl_pubkey_hashoid[2]; + ltc_asn1_list ssl_pubkey[2]; - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(key != NULL); + 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) { + if ((err = mp_init_multi(&key->e, &key->d, &key->N, &key->dQ, + &key->dP, &key->qP, &key->p, &key->q, NULL)) != CRYPT_OK) { return err; } - /* Try to match against PKCS #1 standards */ - if ((err = rsa_import_pkcs1(in, inlen, key)) != CRYPT_OK) { - rsa_free(key); + + /* see if the OpenSSL DER format RSA public key will work */ + tmpbuf = XCALLOC(1, MAX_RSA_SIZE*8); + 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(ssl_pubkey_hashoid, 0, LTC_ASN1_OBJECT_IDENTIFIER, tmpoid, sizeof(tmpoid)/sizeof(tmpoid[0])); + LTC_SET_ASN1(ssl_pubkey_hashoid, 1, LTC_ASN1_NULL, NULL, 0); + + /* 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(ssl_pubkey, 0, LTC_ASN1_SEQUENCE, &ssl_pubkey_hashoid, 2); + LTC_SET_ASN1(ssl_pubkey, 1, LTC_ASN1_BIT_STRING, tmpbuf, MAX_RSA_SIZE*8); + + if (der_decode_sequence(in, inlen, + ssl_pubkey, 2UL) == CRYPT_OK) { + + /* ok now we have to reassemble the BIT STRING to an OCTET STRING. Thanks OpenSSL... */ + for (t = y = z = x = 0; x < ssl_pubkey[1].size; x++) { + y = (y << 1) | tmpbuf[x]; + if (++z == 8) { + tmpbuf[t++] = y; + y = 0; + z = 0; + } + } + + /* now it should be SEQUENCE { INTEGER, INTEGER } */ + if ((err = der_decode_sequence_multi(tmpbuf, t, + LTC_ASN1_INTEGER, 1UL, key->N, + LTC_ASN1_INTEGER, 1UL, key->e, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + XFREE(tmpbuf); + goto LBL_ERR; + } + XFREE(tmpbuf); + key->type = PK_PUBLIC; + return CRYPT_OK; + } + XFREE(tmpbuf); + + /* not SSL public key, try to match against PKCS #1 standards */ + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_INTEGER, 1UL, key->N, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto LBL_ERR; + } + + if (mp_cmp_d(key->N, 0) == LTC_MP_EQ) { + if ((err = mp_init(&zero)) != CRYPT_OK) { + goto LBL_ERR; + } + /* it's a private key */ + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_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)) != CRYPT_OK) { + mp_clear(zero); + goto LBL_ERR; + } + mp_clear(zero); + key->type = PK_PRIVATE; + } else if (mp_cmp_d(key->N, 1) == LTC_MP_EQ) { + /* we don't support multi-prime RSA */ + err = CRYPT_PK_INVALID_TYPE; + goto LBL_ERR; + } else { + /* it's a public key and we lack e */ + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_INTEGER, 1UL, key->N, + LTC_ASN1_INTEGER, 1UL, key->e, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto LBL_ERR; + } + key->type = PK_PUBLIC; + } + return CRYPT_OK; +LBL_ERR: + mp_clear_multi(key->d, key->e, key->N, key->dQ, key->dP, + key->qP, key->p, key->q, NULL); return err; } -#endif /* LTC_MRSA */ +#endif /* MRSA */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 7cbecaf4..879b34c4 100644 --- a/src/pk/rsa/rsa_make_key.c +++ b/src/pk/rsa/rsa_make_key.c @@ -1,87 +1,24 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file rsa_make_key.c RSA key generation, Tom St Denis -*/ +*/ -#ifdef LTC_MRSA +#ifdef 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 +/** + Create an RSA key @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) @@ -91,75 +28,88 @@ cleanup: */ int rsa_make_key(prng_state *prng, int wprng, int size, long e, rsa_key *key) { - void *tltc_mp_e; - int err; + void *p, *q, *tmp1, *tmp2, *tmp3; + int err; + + LTC_ARGCHK(ltc_mp.name != NULL); + LTC_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; + 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) { + if ((err = prng_is_valid(wprng)) != 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; + if ((err = mp_init_multi(&p, &q, &tmp1, &tmp2, &tmp3, NULL)) != CRYPT_OK) { + return err; } + /* make primes p and q (optimization provided by Wayne Scott) */ + if ((err = mp_set_int(tmp3, e)) != CRYPT_OK) { goto error; } /* tmp3 = e */ + + /* make prime "p" */ + do { + if ((err = rand_prime( p, size/2, prng, wprng)) != CRYPT_OK) { goto done; } + if ((err = mp_sub_d( p, 1, tmp1)) != CRYPT_OK) { goto error; } /* tmp1 = p-1 */ + if ((err = mp_gcd( tmp1, tmp3, tmp2)) != CRYPT_OK) { 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/2, prng, wprng)) != CRYPT_OK) { goto done; } + if ((err = mp_sub_d( q, 1, tmp1)) != CRYPT_OK) { goto error; } /* tmp1 = q-1 */ + if ((err = mp_gcd( tmp1, tmp3, tmp2)) != CRYPT_OK) { 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)) != CRYPT_OK) { goto error; } /* tmp2 = p-1 */ + /* tmp1 = q-1 (previous do/while loop) */ + if ((err = mp_lcm( tmp1, tmp2, tmp1)) != CRYPT_OK) { 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->p, &key->q, NULL)) != CRYPT_OK) { + goto error; + } + + if ((err = mp_set_int( key->e, e)) != CRYPT_OK) { goto error2; } /* key->e = e */ + if ((err = mp_invmod( key->e, tmp1, key->d)) != CRYPT_OK) { goto error2; } /* key->d = 1/e mod lcm(p-1,q-1) */ + if ((err = mp_mul( p, q, key->N)) != CRYPT_OK) { 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)) != CRYPT_OK) { goto error2; } /* tmp1 = q-1 */ + if ((err = mp_sub_d( q, 1, tmp2)) != CRYPT_OK) { goto error2; } /* tmp2 = p-1 */ + if ((err = mp_mod( key->d, tmp1, key->dP)) != CRYPT_OK) { goto error2; } /* dP = d mod p-1 */ + if ((err = mp_mod( key->d, tmp2, key->dQ)) != CRYPT_OK) { goto error2; } /* dQ = d mod q-1 */ + if ((err = mp_invmod( q, p, key->qP)) != CRYPT_OK) { goto error2; } /* qP = 1/q mod p */ + + if ((err = mp_copy( p, key->p)) != CRYPT_OK) { goto error2; } + if ((err = mp_copy( q, key->q)) != CRYPT_OK) { goto error2; } + + /* set key type (in this case it's CRT optimized) */ + key->type = PK_PRIVATE; + + /* 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->p, key->q, NULL); +error: +done: + mp_clear_multi( tmp3, tmp2, tmp1, p, q, NULL); return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index e6d3dddc..dcaf4ed1 100644 --- a/src/pk/rsa/rsa_sign_hash.c +++ b/src/pk/rsa/rsa_sign_hash.c @@ -1,110 +1,80 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file rsa_sign_hash.c - RSA PKCS #1 v1.5 and v2 PSS sign hash, Tom St Denis and Andreas Lange -*/ + RSA PKCS v2 PSS sign hash, Tom St Denis +*/ + +#ifdef MRSA -#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 + (PKCS #1, v2.0) PSS 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 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_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_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int prng_idx, + int hash_idx, unsigned long saltlen, + rsa_key *key) { - unsigned long modulus_bitlen, modulus_bytelen, x, y; + unsigned long modulus_bitlen, modulus_bytelen, x; 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) { + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_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)); - /* 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; + /* outlen must be at least the size of the modulus */ + modulus_bytelen = mp_unsigned_bin_size( (key->N)); + if (modulus_bytelen > *outlen) { + *outlen = 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; - } + + /* PSS pad the key */ + x = *outlen; + if ((err = pkcs_1_pss_encode(in, inlen, saltlen, prng, prng_idx, + hash_idx, modulus_bitlen, out, &x)) != CRYPT_OK) { + return err; } /* RSA encode it */ - return ltc_mp.rsa_me(sig, x, sig, siglen, PK_PRIVATE, key); + return ltc_mp.rsa_me(out, x, out, outlen, PK_PRIVATE, key); } -#endif /* LTC_MRSA */ +#endif /* MRSA */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index 2337186f..aeb352b2 100644 --- a/src/pk/rsa/rsa_verify_hash.c +++ b/src/pk/rsa/rsa_verify_hash.c @@ -1,161 +1,86 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file rsa_verify_hash.c - RSA PKCS #1 v1.5 or v2 PSS signature verification, Tom St Denis and Andreas Lange -*/ + RSA PKCS v2 PSS signature verification, Tom St Denis +*/ + +#ifdef MRSA -#ifdef LTC_MRSA /** - PKCS #1 de-sign then v1.5 or PSS depad + (PKCS #1, v2.0) de-sign then 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 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_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) +int rsa_verify_hash(const unsigned char *sig, unsigned long siglen, + const unsigned char *hash, unsigned long hashlen, + int hash_idx, unsigned long saltlen, + int *stat, 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; - + unsigned long modulus_bitlen, modulus_bytelen, x; + int err; + unsigned char *tmpbuf; + LTC_ARGCHK(hash != NULL); - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(key != NULL); + LTC_ARGCHK(sig != NULL); + LTC_ARGCHK(stat != NULL); + LTC_ARGCHK(key != NULL); - if ((err = rsa_key_valid_op(LTC_RSA_VERIFY, &op_checked)) != CRYPT_OK) { - return err; + /* default to invalid */ + *stat = 0; + + /* valid hash ? */ + if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { + return err; } - + /* get modulus len in bits */ - modulus_bitlen = ltc_mp_count_bits( (key->N)); + modulus_bitlen = mp_count_bits( (key->N)); /* outlen must be at least the size of the modulus */ - modulus_bytelen = ltc_mp_unsigned_bin_size( (key->N)); + 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 = 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 + + /* PSS decode it */ + err = pkcs_1_pss_decode(hash, hashlen, tmpbuf, x, saltlen, hash_idx, modulus_bitlen, stat); XFREE(tmpbuf); return err; } -#endif /* LTC_MRSA */ +#endif /* MRSA */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 index af55fed4..72055c96 100644 --- a/src/prngs/fortuna.c +++ b/src/prngs/fortuna.c @@ -1,59 +1,44 @@ -/* 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 +/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file fortuna.c Fortuna PRNG, Tom St Denis */ - -/* Implementation of Fortuna by 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 */ +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 */ -#ifdef LTC_FORTUNA +#ifdef FORTUNA -/* requries LTC_SHA256 and AES */ -#if !(defined(LTC_RIJNDAEL) && defined(LTC_SHA256)) - #error LTC_FORTUNA requires LTC_SHA256 and LTC_RIJNDAEL (AES) +/* requries SHA256 and AES */ +#if !(defined(RIJNDAEL) && defined(SHA256)) + #error FORTUNA requires SHA256 and RIJNDAEL (AES) #endif -#ifndef LTC_FORTUNA_POOLS - #warning LTC_FORTUNA_POOLS was not previously defined (old headers?) - #define LTC_FORTUNA_POOLS 32 +#ifndef FORTUNA_POOLS + #warning FORTUNA_POOLS was not previously defined (old headers?) + #define 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 +#if FORTUNA_POOLS < 4 || FORTUNA_POOLS > 32 + #error FORTUNA_POOLS must be in [4..32] #endif const struct ltc_prng_descriptor fortuna_desc = { - "fortuna", - 64, + "fortuna", 1024, &fortuna_start, &fortuna_add_entropy, &fortuna_ready, @@ -65,79 +50,40 @@ const struct ltc_prng_descriptor fortuna_desc = { }; /* update the IV */ -static void s_fortuna_update_iv(prng_state *prng) +static void fortuna_update_iv(prng_state *prng) { int x; unsigned char *IV; /* update IV */ - IV = prng->u.fortuna.IV; + IV = prng->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) +static int 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 + ++prng->fortuna.reset_cnt; - /* new K == LTC_SHA256(K || s) where s == LTC_SHA256(P0) || LTC_SHA256(P1) ... */ + /* new K == SHA256(K || s) where s == SHA256(P0) || SHA256(P1) ... */ sha256_init(&md); - if ((err = sha256_process(&md, prng->u.fortuna.K, 32)) != CRYPT_OK) { + if ((err = sha256_process(&md, prng->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) { + for (x = 0; x < FORTUNA_POOLS; x++) { + if (x == 0 || ((prng->fortuna.reset_cnt >> (x-1)) & 1) == 0) { /* terminate this hash */ - if ((err = sha256_done(&prng->u.fortuna.pool[x], tmp)) != CRYPT_OK) { + if ((err = sha256_done(&prng->fortuna.pool[x], tmp)) != CRYPT_OK) { sha256_done(&md, tmp); - return err; + return err; } /* add it to the string */ if ((err = sha256_process(&md, tmp, 32)) != CRYPT_OK) { @@ -145,7 +91,7 @@ static int s_fortuna_reseed(prng_state *prng) return err; } /* reset this pool */ - if ((err = sha256_init(&prng->u.fortuna.pool[x])) != CRYPT_OK) { + if ((err = sha256_init(&prng->fortuna.pool[x])) != CRYPT_OK) { sha256_done(&md, tmp); return err; } @@ -155,22 +101,17 @@ static int s_fortuna_reseed(prng_state *prng) } /* finish key */ - if ((err = sha256_done(&md, prng->u.fortuna.K)) != CRYPT_OK) { + 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; } - if ((err = AES_SETUP(prng->u.fortuna.K, 32, 0, &prng->u.fortuna.skey)) != CRYPT_OK) { - return err; - } - s_fortuna_update_iv(prng); + 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; + /* reset pool len */ + prng->fortuna.pool0_len = 0; + prng->fortuna.wd = 0; #ifdef LTC_CLEAN_STACK @@ -181,192 +122,98 @@ static int s_fortuna_reseed(prng_state *prng) 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 (x = 0; x < FORTUNA_POOLS; x++) { + if ((err = sha256_init(&prng->fortuna.pool[x])) != CRYPT_OK) { for (y = 0; y < x; y++) { - sha256_done(&prng->u.fortuna.pool[y], tmp); + sha256_done(&prng->fortuna.pool[x], tmp); } return err; } } - prng->u.fortuna.pool_idx = prng->u.fortuna.pool0_len = 0; - prng->u.fortuna.reset_cnt = prng->u.fortuna.wd = 0; + prng->fortuna.pool_idx = prng->fortuna.pool0_len = prng->fortuna.reset_cnt = + prng->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); + zeromem(prng->fortuna.K, 32); + if ((err = rijndael_setup(prng->fortuna.K, 32, 0, &prng->fortuna.skey)) != CRYPT_OK) { + for (x = 0; x < FORTUNA_POOLS; x++) { + sha256_done(&prng->fortuna.pool[x], tmp); } return err; } - zeromem(prng->u.fortuna.IV, 16); - - LTC_MUTEX_INIT(&prng->lock) - + zeromem(prng->fortuna.IV, 16); + + LTC_MUTEX_INIT(&prng->fortuna.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; + unsigned char tmp[2]; + int err; + LTC_ARGCHK(in != NULL); LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen > 0); - LTC_MUTEX_LOCK(&prng->lock); + LTC_MUTEX_LOCK(&prng->fortuna.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; + /* ensure inlen <= 32 */ + if (inlen > 32) { + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); + return CRYPT_INVALID_ARG; } - LTC_MUTEX_UNLOCK(&prng->lock); + /* add s || length(in) || in to pool[pool_idx] */ + tmp[0] = 0; + tmp[1] = inlen; + if ((err = sha256_process(&prng->fortuna.pool[prng->fortuna.pool_idx], tmp, 2)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); + return err; + } + if ((err = sha256_process(&prng->fortuna.pool[prng->fortuna.pool_idx], in, inlen)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); + return err; + } + if (prng->fortuna.pool_idx == 0) { + prng->fortuna.pool0_len += inlen; + } + if (++(prng->fortuna.pool_idx) == FORTUNA_POOLS) { + prng->fortuna.pool_idx = 0; + } - return err; + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); + return CRYPT_OK; } /** 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; + return fortuna_reseed(prng); } /** @@ -375,101 +222,88 @@ int fortuna_ready(prng_state *prng) @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; + int err; + unsigned long tlen; - if (outlen == 0 || prng == NULL || out == NULL) return 0; + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(prng != NULL); - LTC_MUTEX_LOCK(&prng->lock); - - if (!prng->ready) { - goto LBL_UNLOCK; - } + LTC_MUTEX_LOCK(&prng->fortuna.prng_lock); /* do we have to reseed? */ - if (prng->u.fortuna.pool0_len >= 64) { - if (s_fortuna_reseed(prng) != CRYPT_OK) { - goto LBL_UNLOCK; + if (++prng->fortuna.wd == FORTUNA_WD || prng->fortuna.pool0_len >= 64) { + if ((err = fortuna_reseed(prng)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); + return 0; } } - /* 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 */ + /* handle whole blocks without the extra memcpy */ while (outlen >= 16) { /* encrypt the IV and store it */ - AES_ENC(prng->u.fortuna.IV, out, &prng->u.fortuna.skey); + rijndael_ecb_encrypt(prng->fortuna.IV, out, &prng->fortuna.skey); out += 16; outlen -= 16; - s_fortuna_update_iv(prng); + fortuna_update_iv(prng); } /* left over bytes? */ if (outlen > 0) { - AES_ENC(prng->u.fortuna.IV, tmp, &prng->u.fortuna.skey); + rijndael_ecb_encrypt(prng->fortuna.IV, tmp, &prng->fortuna.skey); XMEMCPY(out, tmp, outlen); - s_fortuna_update_iv(prng); + 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; + 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) { + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); + return 0; } -LBL_UNLOCK: #ifdef LTC_CLEAN_STACK zeromem(tmp, sizeof(tmp)); #endif - LTC_MUTEX_UNLOCK(&prng->lock); + LTC_MUTEX_UNLOCK(&prng->fortuna.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; + LTC_MUTEX_LOCK(&prng->fortuna.prng_lock); /* 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; + for (x = 0; x < FORTUNA_POOLS; x++) { + if ((err = sha256_done(&(prng->fortuna.pool[x]), tmp)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); + return err; } } /* 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; + + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); + return CRYPT_OK; } /** @@ -478,42 +312,104 @@ LBL_UNLOCK: @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) +*/ +int fortuna_export(unsigned char *out, unsigned long *outlen, prng_state *prng) +{ + int x, err; + hash_state *md; + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(prng != NULL); + + LTC_MUTEX_LOCK(&prng->fortuna.prng_lock); + + /* we'll write bytes for s&g's */ + if (*outlen < 32*FORTUNA_POOLS) { + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); + *outlen = 32*FORTUNA_POOLS; + return CRYPT_BUFFER_OVERFLOW; + } + + md = XMALLOC(sizeof(hash_state)); + if (md == NULL) { + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); + return CRYPT_MEM; + } + + /* to emit the state we copy each pool, terminate it then hash it again so + * an attacker who sees the state can't determine the current state of the PRNG + */ + for (x = 0; x < FORTUNA_POOLS; x++) { + /* copy the PRNG */ + XMEMCPY(md, &(prng->fortuna.pool[x]), sizeof(*md)); + + /* terminate it */ + if ((err = sha256_done(md, out+x*32)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* now hash it */ + if ((err = sha256_init(md)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = sha256_process(md, out+x*32, 32)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = sha256_done(md, out+x*32)) != CRYPT_OK) { + goto LBL_ERR; + } + } + *outlen = 32*FORTUNA_POOLS; + err = CRYPT_OK; + +LBL_ERR: +#ifdef LTC_CLEAN_STACK + zeromem(md, sizeof(*md)); +#endif + XFREE(md); + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); + return err; +} + /** 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; + int err, x; - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(prng != NULL); + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(prng != NULL); - if (inlen < (unsigned long)fortuna_desc.export_size) { + LTC_MUTEX_LOCK(&prng->fortuna.prng_lock); + if (inlen != 32*FORTUNA_POOLS) { + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); return CRYPT_INVALID_ARG; } if ((err = fortuna_start(prng)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); return err; } - - if ((err = fortuna_update_seed(in, inlen, prng)) != CRYPT_OK) { - return err; + for (x = 0; x < FORTUNA_POOLS; x++) { + if ((err = fortuna_add_entropy(in+x*32, 32, prng)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); + return err; + } } - + LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); 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 @@ -524,14 +420,13 @@ int fortuna_test(void) if ((err = sha256_test()) != CRYPT_OK) { return err; } - return AES_TEST(); + return rijndael_test(); #endif } -#undef AES_SETUP -#undef AES_ENC -#undef AES_DONE -#undef AES_TEST +#endif -#endif /* LTC_FORTUNA */ +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/prngs/rc4.c b/src/prngs/rc4.c index eb82d908..da52cb6c 100644 --- a/src/prngs/rc4.c +++ b/src/prngs/rc4.c @@ -1,43 +1,48 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** - @file prngs/rc4.c + @file rc4.c RC4 PRNG, Tom St Denis -*/ +*/ -#ifdef LTC_RC4 +#ifdef RC4 -const struct ltc_prng_descriptor rc4_desc = +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 + "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; + LTC_ARGCHK(prng != NULL); + + /* set keysize to zero */ + prng->rc4.x = 0; + + return CRYPT_OK; } /** @@ -46,63 +51,68 @@ int rc4_start(prng_state *prng) @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(in != NULL); + LTC_ARGCHK(prng != NULL); + + /* trim as required */ + if (prng->rc4.x + inlen > 256) { + if (prng->rc4.x == 256) { + /* I can't possibly accept another byte, ok maybe a mint wafer... */ + return CRYPT_OK; + } else { + /* only accept part of it */ + inlen = 256 - prng->rc4.x; + } + } - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen > 0); + while (inlen--) { + prng->rc4.buf[prng->rc4.x++] = *in++; + } - 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; + return CRYPT_OK; + } /** 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; + unsigned char key[256], tmp, *s; + int keylen, x, y, j; - LTC_ARGCHK(prng != NULL); + 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; + /* extract the key */ + s = prng->rc4.buf; + XMEMCPY(key, s, 256); + keylen = prng->rc4.x; + + /* make RC4 perm and shuffle */ + for (x = 0; x < 256; x++) { + s[x] = x; + } + + for (j = x = y = 0; x < 256; x++) { + y = (y + prng->rc4.buf[x] + key[j++]) & 255; + if (j == keylen) { + j = 0; + } + tmp = s[x]; s[x] = s[y]; s[y] = tmp; + } + prng->rc4.x = 0; + prng->rc4.y = 0; + +#ifdef LTC_CLEAN_STACK + zeromem(key, sizeof(key)); +#endif + + return CRYPT_OK; } /** @@ -111,33 +121,40 @@ LBL_UNLOCK: @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; + unsigned char x, y, *s, tmp; + unsigned long n; + + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(prng != NULL); + + n = outlen; + x = prng->rc4.x; + y = prng->rc4.y; + s = prng->rc4.buf; + while (outlen--) { + 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++ ^= s[tmp]; + } + prng->rc4.x = x; + prng->rc4.y = y; + return n; } /** 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; + return CRYPT_OK; } /** @@ -146,76 +163,103 @@ int rc4_done(prng_state *prng) @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) +*/ +int rc4_export(unsigned char *out, unsigned long *outlen, prng_state *prng) +{ + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(prng != NULL); + if (*outlen < 32) { + *outlen = 32; + return CRYPT_BUFFER_OVERFLOW; + } + + if (rc4_read(out, 32, prng) != 32) { + return CRYPT_ERROR_READPRNG; + } + *outlen = 32; + + 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 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; + LTC_ARGCHK(prng != NULL); - if ((err = rc4_start(prng)) != CRYPT_OK) return err; - if ((err = rc4_add_entropy(in, inlen, prng)) != CRYPT_OK) return err; - return CRYPT_OK; + if (inlen != 32) { + return CRYPT_INVALID_ARG; + } + + if ((err = rc4_start(prng)) != CRYPT_OK) { + return err; + } + return rc4_add_entropy(in, 32, prng); } /** 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; + static const struct { + unsigned char key[8], pt[8], ct[8]; + } tests[] = { +{ + { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }, + { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }, + { 0x75, 0xb7, 0x87, 0x80, 0x99, 0xe0, 0xc5, 0x96 } +} +}; + prng_state prng; + unsigned char dst[8]; + int err, x; + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { + if ((err = rc4_start(&prng)) != CRYPT_OK) { + return err; + } + if ((err = rc4_add_entropy(tests[x].key, 8, &prng)) != CRYPT_OK) { + return err; + } + if ((err = rc4_ready(&prng)) != CRYPT_OK) { + return err; + } + XMEMCPY(dst, tests[x].pt, 8); + if (rc4_read(dst, 8, &prng) != 8) { + return CRYPT_ERROR_READPRNG; + } + rc4_done(&prng); + if (memcmp(dst, tests[x].ct, 8)) { +#if 0 + int y; + printf("\n\nRC4 failed, I got:\n"); + for (y = 0; y < 8; y++) printf("%02x ", dst[y]); + printf("\n"); +#endif + return CRYPT_FAIL_TESTVECTOR; + } + } return CRYPT_OK; #endif } #endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/prngs/rng_get_bytes.c b/src/prngs/rng_get_bytes.c index ecb1ed56..5bf1d61d 100644 --- a/src/prngs/rng_get_bytes.c +++ b/src/prngs/rng_get_bytes.c @@ -1,64 +1,69 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.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) +#ifdef DEVRANDOM /* on *NIX read /dev/random */ -static unsigned long s_rng_nix(unsigned char *buf, unsigned long len, +static unsigned long 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 +#ifdef TRY_URANDOM_FIRST f = fopen("/dev/urandom", "rb"); - if (f == NULL) { + if (f == NULL) +#endif /* TRY_URANDOM_FIRST */ 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 */ +#endif /* DEVRANDOM */ -#if !defined(_WIN32_WCE) +/* on ANSI C platforms with 100 < CLOCKS_PER_SEC < 10000 */ +#if defined(CLOCKS_PER_SEC) #define ANSI_RNG -static unsigned long s_rng_ansic(unsigned char *buf, unsigned long len, +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; @@ -71,64 +76,41 @@ static unsigned long s_rng_ansic(unsigned char *buf, unsigned long len, } while (a == b); acc = (acc << 1) | a; } - *buf++ = acc; + *buf++ = acc; acc = 0; bits = 8; } + acc = bits = a = b = 0; return l; } -#endif +#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 +#ifdef WIN32 +#define _WIN32_WINNT 0x0400 #include #include -static unsigned long s_rng_win32(unsigned char *buf, unsigned long len, +static unsigned long rng_win32(unsigned char *buf, unsigned long len, void (*callback)(void)) { - static HCRYPTPROV hProv = 0; - LTC_UNUSED_PARAM(callback); + 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 (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; + if (CryptGenRandom(hProv, len, buf) == TRUE) { + CryptReleaseContext(hProv, 0); + return len; + } else { + CryptReleaseContext(hProv, 0); + return 0; } - - return CryptGenRandom(hProv, (DWORD)len, (BYTE *)buf) == TRUE ? len : 0; } -#endif /* Old WIN32 versions */ + #endif /* WIN32 */ /** @@ -137,31 +119,26 @@ static unsigned long s_rng_win32(unsigned char *buf, unsigned long len, @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, +*/ +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; - } - } +#if defined(DEVRANDOM) + x = rng_nix(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; } +#ifdef WIN32 + x = rng_win32(out, outlen, callback); if (x != 0) { return x; } #endif #ifdef ANSI_RNG - x = s_rng_ansic(out, outlen, callback); if (x != 0) { return x; } + x = rng_ansic(out, outlen, callback); if (x != 0) { return x; } #endif return 0; } -#endif /* #ifdef LTC_RNG_GET_BYTES */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/prngs/rng_make_prng.c b/src/prngs/rng_make_prng.c index a7b726ca..7f123606 100644 --- a/src/prngs/rng_make_prng.c +++ b/src/prngs/rng_make_prng.c @@ -1,33 +1,34 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.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 bits Number of bits of entropy desired (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, +*/ +int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void)) { - unsigned char* buf; - unsigned long bytes; + unsigned char buf[256]; int err; - + LTC_ARGCHK(prng != NULL); /* check parameter */ @@ -35,47 +36,34 @@ int rng_make_prng(int bits, int wprng, prng_state *prng, return err; } - if (bits == -1) { - bytes = prng_descriptor[wprng].export_size; - } else if (bits < 64 || bits > 1024) { + 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; + 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 (rng_get_bytes(buf, bytes, callback) != bytes) { - err = CRYPT_ERROR_READPRNG; - goto LBL_ERR; + if ((err = prng_descriptor[wprng].add_entropy(buf, (unsigned long)bits, prng)) != CRYPT_OK) { + return 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; + return err; } -LBL_ERR: #ifdef LTC_CLEAN_STACK - zeromem(buf, bytes); + zeromem(buf, sizeof(buf)); #endif - XFREE(buf); - return err; + return CRYPT_OK; } -#endif /* #ifdef LTC_RNG_MAKE_PRNG */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/prngs/sober128.c b/src/prngs/sober128.c index fcd87d48..34c0b519 100644 --- a/src/prngs/sober128.c +++ b/src/prngs/sober128.c @@ -1,43 +1,200 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** - @file prngs/sober128.c + @file 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 +#ifdef SOBER128 -const struct ltc_prng_descriptor sober128_desc = +#include "sober128tab.c" + +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 + "sober128", 64, + &sober128_start, + &sober128_add_entropy, + &sober128_ready, + &sober128_read, + &sober128_done, + &sober128_export, + &sober128_import, + &sober128_test }; +/* don't change these... */ +#define N 17 +#define FOLD N /* how many iterations of folding to do */ +#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 */ + +#define B(x,i) ((unsigned char)(((x) >> (8*i)) & 0xFF)) + +static ulong32 BYTE2WORD(unsigned char *b) +{ + ulong32 t; + LOAD32L(t, b); + return t; +} + +#define WORD2BYTE(w, b) STORE32L(b, w) + +static void XORWORD(ulong32 w, unsigned char *b) +{ + ulong32 t; + LOAD32L(t, b); + t ^= w; + STORE32L(t, b); +} + +/* 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(c,z) \ +{ \ + t = c->R[OFF(z,0)] + c->R[OFF(z,16)]; \ + t ^= Sbox[(t >> 24) & 0xFF]; \ + t = RORc(t, 8); \ + t = ((t + c->R[OFF(z,1)]) ^ c->konst) + c->R[OFF(z,6)]; \ + t ^= Sbox[(t >> 24) & 0xFF]; \ + t = t + c->R[OFF(z,13)]; \ +} + +static ulong32 nltap(struct sober128_prng *c) +{ + ulong32 t; + NLFUNC(c, 0); + return t; +} + /** 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; + int i; + struct sober128_prng *c; + + LTC_ARGCHK(prng != NULL); + + c = &(prng->sober128); + + /* Register initialised to Fibonacci numbers */ + c->R[0] = 1; + c->R[1] = 1; + for (i = 2; i < N; ++i) { + c->R[i] = c->R[i-1] + c->R[i-2]; + } + c->konst = INITKONST; + + /* next add_entropy will be the key */ + c->flag = 1; + c->set = 0; + + return CRYPT_OK; +} + +/* Save the current register state + */ +static void s128_savestate(struct sober128_prng *c) +{ + int i; + for (i = 0; i < N; ++i) { + c->initR[i] = c->R[i]; + } +} + +/* initialise to previously saved register state + */ +static void s128_reloadstate(struct sober128_prng *c) +{ + int i; + + for (i = 0; i < N; ++i) { + c->R[i] = c->initR[i]; + } +} + +/* Initialise "konst" + */ +static void s128_genkonst(struct sober128_prng *c) +{ + ulong32 newkonst; + + do { + cycle(c->R); + newkonst = nltap(c); + } while ((newkonst & 0xFF000000) == 0); + c->konst = newkonst; +} + +/* Load key material into the register + */ +#define ADDKEY(k) \ + c->R[KEYP] += (k); + +#define XORNL(nl) \ + c->R[FOLDP] ^= (nl); + +/* nonlinear diffusion of register for key */ +#define DROUND(z) STEP(c->R,z); NLFUNC(c,(z+1)); c->R[OFF((z+1),FOLDP)] ^= t; +static void s128_diffuse(struct sober128_prng *c) +{ + 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); } /** @@ -46,97 +203,168 @@ int sober128_start(prng_state *prng) @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; + struct sober128_prng *c; + ulong32 i, k; - LTC_ARGCHK(prng != NULL); - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen > 0); + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(prng != NULL); + c = &(prng->sober128); - 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; + if (c->flag == 1) { + /* this is the first call to the add_entropy so this input is the key */ + /* inlen must be multiple of 4 bytes */ + if ((inlen & 3) != 0) { + return CRYPT_INVALID_KEYSIZE; + } + + for (i = 0; i < inlen; i += 4) { + k = BYTE2WORD((unsigned char *)&in[i]); + ADDKEY(k); + cycle(c->R); + XORNL(nltap(c)); + } + + /* also fold in the length of the key */ + ADDKEY(inlen); + + /* now diffuse */ + s128_diffuse(c); + + s128_genkonst(c); + s128_savestate(c); + c->nbuf = 0; + c->flag = 0; + c->set = 1; + } else { + /* ok we are adding an IV then... */ + s128_reloadstate(c); + + /* inlen must be multiple of 4 bytes */ + if ((inlen & 3) != 0) { + return CRYPT_INVALID_KEYSIZE; + } + + for (i = 0; i < inlen; i += 4) { + k = BYTE2WORD((unsigned char *)&in[i]); + ADDKEY(k); + cycle(c->R); + XORNL(nltap(c)); + } + + /* also fold in the length of the key */ + ADDKEY(inlen); + + /* now diffuse */ + s128_diffuse(c); + c->nbuf = 0; + } + + return CRYPT_OK; } /** 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; + return prng->sober128.set == 1 ? CRYPT_OK : CRYPT_ERROR; } +/* XOR pseudo-random bytes into buffer + */ +#define SROUND(z) STEP(c->R,z); NLFUNC(c,(z+1)); XORWORD(t, out+(z*4)); + /** 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; + struct sober128_prng *c; + ulong32 t, tlen; + + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(prng != NULL); + + c = &(prng->sober128); + t = 0; + tlen = outlen; + + /* handle any previously buffered bytes */ + while (c->nbuf != 0 && outlen != 0) { + *out++ ^= c->sbuf & 0xFF; + c->sbuf >>= 8; + c->nbuf -= 8; + --outlen; + } + +#ifndef LTC_SMALL_CODE + /* do lots at a time, if there's enough to do */ + while (outlen >= 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; + outlen -= 4*N; + } +#endif + + /* do small or odd size buffers the slow way */ + while (4 <= outlen) { + cycle(c->R); + t = nltap(c); + XORWORD(t, out); + out += 4; + outlen -= 4; + } + + /* handle any trailing bytes */ + if (outlen != 0) { + cycle(c->R); + c->sbuf = nltap(c); + c->nbuf = 32; + while (c->nbuf != 0 && outlen != 0) { + *out++ ^= c->sbuf & 0xFF; + c->sbuf >>= 8; + c->nbuf -= 8; + --outlen; + } + } + + return tlen; } /** 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; + return CRYPT_OK; } /** @@ -145,76 +373,124 @@ int sober128_done(prng_state *prng) @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) +*/ +int sober128_export(unsigned char *out, unsigned long *outlen, prng_state *prng) +{ + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(prng != NULL); + if (*outlen < 64) { + *outlen = 64; + return CRYPT_BUFFER_OVERFLOW; + } + + if (sober128_read(out, 64, prng) != 64) { + return CRYPT_ERROR_READPRNG; + } + *outlen = 64; + + 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 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; + LTC_ARGCHK(prng != NULL); - if ((err = sober128_start(prng)) != CRYPT_OK) return err; - if ((err = sober128_add_entropy(in, inlen, prng)) != CRYPT_OK) return err; - return CRYPT_OK; + if (inlen != 64) { + return CRYPT_INVALID_ARG; + } + + if ((err = sober128_start(prng)) != CRYPT_OK) { + return err; + } + if ((err = sober128_add_entropy(in, 64, prng)) != CRYPT_OK) { + return err; + } + return sober128_ready(prng); } /** 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; + static const struct { + int keylen, ivlen, len; + unsigned char key[16], iv[4], out[20]; + } tests[] = { - 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; +{ + 16, 4, 20, + /* key */ + { 't', 'e', 's', 't', ' ', 'k', 'e', 'y', + ' ', '1', '2', '8', 'b', 'i', 't', 's' }, + + /* IV */ + { 0x00, 0x00, 0x00, 0x0 }, + + /* expected output */ + { 0x43, 0x50, 0x0c, 0xcf, 0x89, 0x91, 0x9f, 0x1d, + 0xaa, 0x37, 0x74, 0x95, 0xf4, 0xb4, 0x58, 0xc2, + 0x40, 0x37, 0x8b, 0xbb } +} + +}; + prng_state prng; + unsigned char dst[20]; + int err, x; + + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { + if ((err = sober128_start(&prng)) != CRYPT_OK) { + return err; + } + if ((err = sober128_add_entropy(tests[x].key, tests[x].keylen, &prng)) != CRYPT_OK) { + return err; + } + /* add IV */ + if ((err = sober128_add_entropy(tests[x].iv, tests[x].ivlen, &prng)) != CRYPT_OK) { + return err; + } + + /* ready up */ + if ((err = sober128_ready(&prng)) != CRYPT_OK) { + return err; + } + memset(dst, 0, tests[x].len); + if (sober128_read(dst, tests[x].len, &prng) != (unsigned long)tests[x].len) { + return CRYPT_ERROR_READPRNG; + } + sober128_done(&prng); + if (memcmp(dst, tests[x].out, tests[x].len)) { +#if 0 + printf("\n\nSOBER128 failed, I got:\n"); + for (y = 0; y < tests[x].len; y++) printf("%02x ", dst[y]); + printf("\n"); +#endif + return CRYPT_FAIL_TESTVECTOR; + } + } return CRYPT_OK; #endif } #endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/stream/sober128/sober128tab.c b/src/prngs/sober128tab.c similarity index 97% rename from src/stream/sober128/sober128tab.c rename to src/prngs/sober128tab.c index b3ae8260..a5754c72 100644 --- a/src/stream/sober128/sober128tab.c +++ b/src/prngs/sober128tab.c @@ -1,13 +1,7 @@ -/* 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 */ @@ -88,7 +82,7 @@ static const ulong32 Multab[256] = { * "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 @@ -163,4 +157,6 @@ static const ulong32 Sbox[256] = { 0xf9e6053f, 0xa4b0d300, 0xd499cbcc, 0xb95e3d40, }; -#endif /* LTC_SOBER128TAB_C */ +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/prngs/sprng.c b/src/prngs/sprng.c index e4047182..940af278 100644 --- a/src/prngs/sprng.c +++ b/src/prngs/sprng.c @@ -1,18 +1,26 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.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 +#ifdef SPRNG const struct ltc_prng_descriptor sprng_desc = { @@ -31,11 +39,10 @@ const struct ltc_prng_descriptor sprng_desc = 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; + return CRYPT_OK; } /** @@ -44,12 +51,9 @@ int sprng_start(prng_state *prng) @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; } @@ -57,10 +61,9 @@ int sprng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state * 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; } @@ -70,11 +73,10 @@ int sprng_ready(prng_state *prng) @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); } @@ -82,10 +84,9 @@ unsigned long sprng_read(unsigned char *out, unsigned long outlen, prng_state *p 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; } @@ -95,58 +96,41 @@ int sprng_done(prng_state *prng) @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 + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/prngs/yarrow.c b/src/prngs/yarrow.c index 40cb46a6..298ec5e9 100644 --- a/src/prngs/yarrow.c +++ b/src/prngs/yarrow.c @@ -1,13 +1,21 @@ -/* 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@gmail.com, http://libtomcrypt.com + */ +#include "tomcrypt.h" /** @file yarrow.c Yarrow PRNG, Tom St Denis -*/ +*/ -#ifdef LTC_YARROW +#ifdef YARROW const struct ltc_prng_descriptor yarrow_desc = { @@ -26,94 +34,83 @@ const struct ltc_prng_descriptor yarrow_desc = 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); +#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(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); +#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); #else - #error LTC_YARROW needs at least one CIPHER + #error YARROW needs at least one CIPHER #endif - if ((err = cipher_is_valid(prng->u.yarrow.cipher)) != CRYPT_OK) { + if ((err = cipher_is_valid(prng->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); +#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 LTC_YARROW needs at least one HASH + #error YARROW needs at least one HASH #endif - if ((err = hash_is_valid(prng->u.yarrow.hash)) != CRYPT_OK) { + if ((err = hash_is_valid(prng->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) + zeromem(prng->yarrow.pool, sizeof(prng->yarrow.pool)); + LTC_MUTEX_INIT(&prng->yarrow.prng_lock) return CRYPT_OK; } @@ -124,86 +121,91 @@ int yarrow_start(prng_state *prng) @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(in != NULL); 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; + + LTC_MUTEX_LOCK(&prng->yarrow.prng_lock); + + if ((err = hash_is_valid(prng->yarrow.hash)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return err; } /* start the hash */ - if ((err = hash_descriptor[prng->u.yarrow.hash].init(&md)) != CRYPT_OK) { - goto LBL_UNLOCK; + if ((err = hash_descriptor[prng->yarrow.hash].init(&md)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return err; } /* 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; + if ((err = hash_descriptor[prng->yarrow.hash].process(&md, prng->yarrow.pool, + hash_descriptor[prng->yarrow.hash].hashsize)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return err; } /* add the new entropy */ - if ((err = hash_descriptor[prng->u.yarrow.hash].process(&md, in, inlen)) != CRYPT_OK) { - goto LBL_UNLOCK; + if ((err = hash_descriptor[prng->yarrow.hash].process(&md, in, inlen)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return err; } /* store result */ - err = hash_descriptor[prng->u.yarrow.hash].done(&md, prng->u.yarrow.pool); + if ((err = hash_descriptor[prng->yarrow.hash].done(&md, prng->yarrow.pool)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return err; + } -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); - return err; + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return CRYPT_OK; } /** 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->yarrow.prng_lock); - LTC_MUTEX_LOCK(&prng->lock); - - if ((err = hash_is_valid(prng->u.yarrow.hash)) != CRYPT_OK) { - goto LBL_UNLOCK; + if ((err = hash_is_valid(prng->yarrow.hash)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return err; } - - if ((err = cipher_is_valid(prng->u.yarrow.cipher)) != CRYPT_OK) { - goto LBL_UNLOCK; + + if ((err = cipher_is_valid(prng->yarrow.cipher)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return err; } /* 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; + ks = (int)hash_descriptor[prng->yarrow.hash].hashsize; + if ((err = cipher_descriptor[prng->yarrow.cipher].keysize(&ks)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return err; } - 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 */ + 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 */ CTR_COUNTER_LITTLE_ENDIAN, /* little endian counter */ - &prng->u.yarrow.ctr)) != CRYPT_OK) { - goto LBL_UNLOCK; + &prng->yarrow.ctr)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return err; } - prng->ready = 1; - -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); - return err; + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return CRYPT_OK; } /** @@ -212,28 +214,23 @@ LBL_UNLOCK: @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_ARGCHK(out != NULL); + LTC_ARGCHK(prng != NULL); - LTC_MUTEX_LOCK(&prng->lock); - - if (!prng->ready) { - outlen = 0; - goto LBL_UNLOCK; - } + LTC_MUTEX_LOCK(&prng->yarrow.prng_lock); /* 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; + if (ctr_encrypt(out, out, outlen, &prng->yarrow.ctr) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return 0; } - -LBL_UNLOCK: - LTC_MUTEX_UNLOCK(&prng->lock); + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); return outlen; } @@ -241,22 +238,20 @@ LBL_UNLOCK: 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; + LTC_MUTEX_LOCK(&prng->yarrow.prng_lock); /* 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); + err = ctr_done(&prng->yarrow.ctr); + + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); return err; } @@ -266,33 +261,65 @@ int yarrow_done(prng_state *prng) @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) +*/ +int yarrow_export(unsigned char *out, unsigned long *outlen, prng_state *prng) +{ + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(prng != NULL); + LTC_MUTEX_LOCK(&prng->yarrow.prng_lock); + + /* we'll write 64 bytes for s&g's */ + if (*outlen < 64) { + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + *outlen = 64; + return CRYPT_BUFFER_OVERFLOW; + } + + if (yarrow_read(out, 64, prng) != 64) { + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return CRYPT_ERROR_READPRNG; + } + *outlen = 64; + + 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 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; + + LTC_MUTEX_LOCK(&prng->yarrow.prng_lock); - if ((err = yarrow_start(prng)) != CRYPT_OK) return err; - if ((err = yarrow_add_entropy(in, inlen, prng)) != CRYPT_OK) return err; - return CRYPT_OK; + if (inlen != 64) { + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return CRYPT_INVALID_ARG; + } + + if ((err = yarrow_start(prng)) != CRYPT_OK) { + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return err; + } + err = yarrow_add_entropy(in, 64, prng); + LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock); + return err; } /** PRNG self-test @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled -*/ +*/ int yarrow_test(void) { #ifndef LTC_TEST @@ -304,20 +331,23 @@ int yarrow_test(void) 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 ((err = cipher_descriptor[prng.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; + if ((err = hash_descriptor[prng.yarrow.hash].test()) != CRYPT_OK) { + return err; } + yarrow_done(&prng); return CRYPT_OK; #endif } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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/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/testbuild.sh b/testbuild.sh new file mode 100644 index 00000000..6a9e3e6f --- /dev/null +++ b/testbuild.sh @@ -0,0 +1,11 @@ +#!/bin/bash +echo "$1 (Build Only, $2, $3)..." +make clean 1>/dev/null 2>/dev/null +echo -n "building..." +touch testok.txt +CFLAGS="$2 $CFLAGS $4" EXTRALIBS="$5" make -f $3 test tv_gen 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/testme.sh b/testme.sh old mode 100755 new mode 100644 index 8cdf4c13..b62fda8d --- a/testme.sh +++ b/testme.sh @@ -1,67 +1,58 @@ #!/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 +# output version +echo "Testing verion" `grep "^VERSION=" makefile | sed "s/.*=//"` +#grep "VERSION=" makefile | perl -e "@a = split('=', <>); print @a[1];"` -mk="$1" +# get uname +echo "uname="`uname -a` -[ "$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 +# get gcc name +echo "gcc="`gcc -dumpversion` +echo # 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 +bash run.sh "STOCK" " " "$1" "$2" "$3" || exit 1 # SMALL code -bash .ci/run.sh "SMALL" "-DLTC_SMALL_CODE" "$mk" "$2" "$3" || exit 1 +bash run.sh "SMALL" "-DLTC_SMALL_CODE" "$1" "$2" "$3" || exit 1 # NOTABLES -bash .ci/run.sh "NOTABLES" "-DLTC_NO_TABLES" "$mk" "$2" "$3" || exit 1 +bash run.sh "NOTABLES" "-DLTC_NO_TABLES" "$1" "$2" "$3" || exit 1 # SMALL+NOTABLES -bash .ci/run.sh "SMALL+NOTABLES" "-DLTC_SMALL_CODE -DLTC_NO_TABLES" "$mk" "$2" "$3" || exit 1 +bash run.sh "SMALL+NOTABLES" "-DLTC_SMALL_CODE -DLTC_NO_TABLES" "$1" "$2" "$3" || exit 1 # CLEANSTACK -bash .ci/run.sh "CLEANSTACK" "-DLTC_CLEAN_STACK" "$mk" "$2" "$3" || exit 1 +bash run.sh "CLEANSTACK" "-DLTC_CLEAN_STACK" "$1" "$2" "$3" || exit 1 # CLEANSTACK + SMALL -bash .ci/run.sh "CLEANSTACK+SMALL" "-DLTC_SMALL_CODE -DLTC_CLEAN_STACK" "$mk" "$2" "$3" || exit 1 +bash run.sh "CLEANSTACK+SMALL" "-DLTC_SMALL_CODE -DLTC_CLEAN_STACK" "$1" "$2" "$3" || exit 1 # CLEANSTACK + NOTABLES -bash .ci/run.sh "CLEANSTACK+NOTABLES" "-DLTC_NO_TABLES -DLTC_CLEAN_STACK" "$mk" "$2" "$3" || exit 1 +bash run.sh "CLEANSTACK+NOTABLES" "-DLTC_NO_TABLES -DLTC_CLEAN_STACK" "$1" "$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 +bash run.sh "CLEANSTACK+NOTABLES+SMALL" "-DLTC_NO_TABLES -DLTC_CLEAN_STACK -DLTC_SMALL_CODE" "$1" "$2" "$3" || exit 1 # NO_FAST -bash .ci/run.sh "NO_FAST" "-DLTC_NO_FAST" "$mk" "$2" "$3" || exit 1 +bash run.sh "NO_FAST" "-DLTC_NO_FAST" "$1" "$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 +bash run.sh "NO_FAST+NOTABLES" "-DLTC_NO_FAST -DLTC_NO_TABLES" "$1" "$2" "$3" || exit 1 # NO_ASM -bash .ci/run.sh "NO_ASM" "-DLTC_NO_ASM" "$mk" "$2" "$3" || exit 1 +bash run.sh "NO_ASM" "-DLTC_NO_ASM" "$1" "$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 +# test build with no testing +bash testbuild.sh "NOTEST" "-DLTC_NO_TEST" "$1" "$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 +# test build with no file routines +bash testbuild.sh "NOFILE" "-DLTC_NO_FILE" "$1" "$2" "$3" || exit 1 + +# $Source: /cvs/libtom/libtomcrypt/testme.sh,v $ +# $Revision: 1.20 $ +# $Date: 2006/01/26 14:49:43 $ diff --git a/testprof/base64_test.c b/testprof/base64_test.c new file mode 100644 index 00000000..5ce55dd5 --- /dev/null +++ b/testprof/base64_test.c @@ -0,0 +1,24 @@ +#include + +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, &yarrow_prng); + 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)) { + fprintf(stderr, "base64 failed %lu %lu %lu", x, l1, l2); + return 1; + } + } + return 0; +} + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/cipher_hash_test.c b/testprof/cipher_hash_test.c new file mode 100644 index 00000000..666d9139 --- /dev/null +++ b/testprof/cipher_hash_test.c @@ -0,0 +1,45 @@ +/* test the ciphers and hashes using their built-in self-tests */ + +#include + +int cipher_hash_test(void) +{ + int x; + unsigned char buf[4096]; + unsigned long n; + prng_state nprng; + + /* 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()); + } + + /* test prngs (test, import/export */ + for (x = 0; prng_descriptor[x].name != NULL; x++) { + DO(prng_descriptor[x].test()); + DO(prng_descriptor[x].start(&nprng)); + DO(prng_descriptor[x].add_entropy((unsigned char *)"helloworld12", 12, &nprng)); + DO(prng_descriptor[x].ready(&nprng)); + n = sizeof(buf); + DO(prng_descriptor[x].pexport(buf, &n, &nprng)); + prng_descriptor[x].done(&nprng); + DO(prng_descriptor[x].pimport(buf, n, &nprng)); + DO(prng_descriptor[x].ready(&nprng)); + if (prng_descriptor[x].read(buf, 100, &nprng) != 100) { + fprintf(stderr, "Error reading from imported PRNG!\n"); + exit(EXIT_FAILURE); + } + prng_descriptor[x].done(&nprng); + } + + return 0; +} + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/der_tests.c b/testprof/der_tests.c new file mode 100644 index 00000000..315ba98a --- /dev/null +++ b/testprof/der_tests.c @@ -0,0 +1,809 @@ +#include +#if defined(GMP_DESC) || defined(USE_GMP) +#include +#endif + +#ifndef LTC_DER + +int der_tests(void) +{ + fprintf(stderr, "NOP"); + return 0; +} + +#else + +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; + + unsigned char strs[10][10], outbuf[128]; + unsigned long x, val, outlen; + int err; + + /* 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); + if ((err = der_encode_set(list, 3, outbuf, &outlen)) != CRYPT_OK) { + fprintf(stderr, "error encoding set: %s\n", error_to_string(err)); + exit(EXIT_FAILURE); + } + + + /* 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])); + + if ((err = der_decode_set(outbuf, outlen, list, 3)) != CRYPT_OK) { + fprintf(stderr, "error decoding set using der_decode_set: %s\n", error_to_string(err)); + exit(EXIT_FAILURE); + } + + /* 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((char*)strs[0], "one"); + strcpy((char*)strs[1], "one2"); + strcpy((char*)strs[2], "two"); + strcpy((char*)strs[3], "aaa"); + strcpy((char*)strs[4], "aaaa"); + strcpy((char*)strs[5], "aab"); + strcpy((char*)strs[6], "aaab"); + strcpy((char*)strs[7], "bbb"); + strcpy((char*)strs[8], "bbba"); + strcpy((char*)strs[9], "bbbb"); + + for (x = 0; x < 10; x++) { + LTC_SET_ASN1(list, x, LTC_ASN1_PRINTABLE_STRING, strs[x], strlen((char*)strs[x])); + } + + outlen = sizeof(outbuf); + if ((err = der_encode_setof(list, 10, outbuf, &outlen)) != CRYPT_OK) { + fprintf(stderr, "error encoding SET OF: %s\n", error_to_string(err)); + exit(EXIT_FAILURE); + } + + 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)); + + if ((err = der_decode_set(outbuf, outlen, list, 10)) != CRYPT_OK) { + fprintf(stderr, "error decoding SET OF: %s\n", error_to_string(err)); + exit(EXIT_FAILURE); + } + + /* now compare */ + for (x = 1; x < 10; x++) { + if (!(strlen((char*)strs[x-1]) <= strlen((char*)strs[x])) && strcmp((char*)strs[x-1], (char*)strs[x]) >= 0) { + fprintf(stderr, "error SET OF order at %lu is wrong\n", x); + exit(EXIT_FAILURE); + } + } + +} + + +/* we are encoding + + SEQUENCE { + PRINTABLE "printable" + IA5 "ia5" + SEQUENCE { + INTEGER 12345678 + UTCTIME { 91, 5, 6, 16, 45, 40, 1, 7, 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 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; + int err; + + ltc_asn1_list static_list[5][3], *decoded_list, *l; + + /* build list */ + LTC_SET_ASN1(static_list[0], 0, LTC_ASN1_PRINTABLE_STRING, (void *)printable_str, strlen(printable_str)); + LTC_SET_ASN1(static_list[0], 1, LTC_ASN1_IA5_STRING, (void *)ia5_str, strlen(ia5_str)); + LTC_SET_ASN1(static_list[0], 2, LTC_ASN1_SEQUENCE, static_list[1], 3); + + 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_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, strlen(set1_str)); + LTC_SET_ASN1(static_list[4], 1, LTC_ASN1_PRINTABLE_STRING, set2_str, strlen(set2_str)); + + /* encode it */ + encode_buf_len = sizeof(encode_buf); + if ((err = der_encode_sequence(&static_list[0][0], 3, encode_buf, &encode_buf_len)) != CRYPT_OK) { + fprintf(stderr, "Encoding static_list: %s\n", error_to_string(err)); + exit(EXIT_FAILURE); + } + +#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; + if ((err = der_decode_sequence_flexi(encode_buf, &decode_len, &decoded_list)) != CRYPT_OK) { + fprintf(stderr, "decoding static_list: %s\n", error_to_string(err)); + exit(EXIT_FAILURE); + } + + 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 != strlen(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 != strlen(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 (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; + + /* 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 != sizeof(oid_str)/sizeof(oid_str[0]) || 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 != strlen(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 != strlen(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_test(void) +{ + ltc_asn1_list types[7], host[1]; + unsigned char bitbuf[10], octetbuf[10], ia5buf[10], printbuf[10], outbuf[256]; + unsigned long integer, oidbuf[10], outlen, inlen, x, y; + void *mpinteger; + ltc_utctime utctime = { 91, 5, 6, 16, 45, 40, 1, 7, 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'; } + integer = 1; + for (x = 0; x < sizeof(oidbuf)/sizeof(oidbuf[0]); x++) { oidbuf[x] = x + 1; } + DO(mp_init(&mpinteger)); + + for (x = 0; x < 14; x++) { + /* setup list */ + LTC_SET_ASN1(types, 0, LTC_ASN1_PRINTABLE_STRING, printbuf, sizeof(printbuf)); + LTC_SET_ASN1(types, 1, LTC_ASN1_BIT_STRING, bitbuf, sizeof(bitbuf)); + LTC_SET_ASN1(types, 2, LTC_ASN1_OCTET_STRING, octetbuf, sizeof(octetbuf)); + LTC_SET_ASN1(types, 3, LTC_ASN1_IA5_STRING, ia5buf, sizeof(ia5buf)); + if (x > 7) { + LTC_SET_ASN1(types, 4, LTC_ASN1_SHORT_INTEGER, &integer, 1); + } else { + LTC_SET_ASN1(types, 4, LTC_ASN1_INTEGER, mpinteger, 1); + } + LTC_SET_ASN1(types, 5, LTC_ASN1_OBJECT_IDENTIFIER, oidbuf, sizeof(oidbuf)/sizeof(oidbuf[0])); + LTC_SET_ASN1(types, 6, LTC_ASN1_UTCTIME, &utctime, 1); + + LTC_SET_ASN1(host, 0, LTC_ASN1_CHOICE, types, 7); + + + /* encode */ + outlen = sizeof(outbuf); + DO(der_encode_sequence(&types[x>6?x-7:x], 1, outbuf, &outlen)); + + /* decode it */ + inlen = outlen; + DO(der_decode_sequence(outbuf, inlen, &host[0], 1)); + + for (y = 0; y < 7; y++) { + if (types[y].used && y != (x>6?x-7:x)) { + fprintf(stderr, "CHOICE, flag %lu in trial %lu was incorrectly set to one\n", y, x); + return 1; + } + if (!types[y].used && y == (x>6?x-7:x)) { + fprintf(stderr, "CHOICE, flag %lu in trial %lu was incorrectly set to zero\n", y, x); + return 1; + } + } + } + mp_clear(mpinteger); + return 0; +} + + +int der_tests(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 }; + + 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 }; + + 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 }; + + DO(mp_init_multi(&a, &b, &c, &d, &e, &f, &g, NULL)); + for (zz = 0; zz < 16; zz++) { +#ifdef USE_TFM + for (z = 0; z < 256; z++) { +#else + for (z = 0; z < 1024; z++) { +#endif + if (yarrow_read(buf[0], z, &yarrow_prng) != z) { + fprintf(stderr, "Failed to read %lu bytes from yarrow\n", z); + return 1; + } + DO(mp_read_unsigned_bin(a, buf[0], z)); +/* if (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\n"); return 1; } + mp_set_int(b, 0); + DO(der_decode_integer(buf[0], y, b)); + if (y != x || mp_cmp(a, b) != LTC_MP_EQ) { + fprintf(stderr, "%lu: %lu vs %lu\n", z, x, y); + mp_clear_multi(a, b, c, d, e, f, g, NULL); + return 1; + } + } + } + +/* test short integer */ + for (zz = 0; zz < 256; zz++) { + for (z = 1; z < 4; z++) { + if (yarrow_read(buf[0], z, &yarrow_prng) != z) { + fprintf(stderr, "Failed to read %lu bytes from yarrow\n", z); + return 1; + } + /* encode with normal */ + DO(mp_read_unsigned_bin(a, buf[0], 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(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\n", x, y); + 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"); + mp_clear_multi(a, b, c, d, e, f, g, NULL); + return 1; + } + + /* decode it */ + x = 0; + DO(der_decode_short_integer(buf[1], y, &x)); + if (x != mp_get_int(a)) { + fprintf(stderr, "DER INTEGER short decoding failed, %lu, %lu\n", x, mp_get_int(a)); + mp_clear_multi(a, b, c, d, e, f, g, NULL); + return 1; + } + } + } + mp_clear_multi(a, b, c, d, e, f, g, NULL); + + +/* Test bit string */ + for (zz = 1; zz < 1536; zz++) { + yarrow_read(buf[0], zz, &yarrow_prng); + 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; + } + } + +/* Test octet string */ + for (zz = 1; zz < 1536; zz++) { + yarrow_read(buf[0], zz, &yarrow_prng); + 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, sizeof(rsa_oid)/sizeof(rsa_oid[0]), 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 = sizeof(oid[0])/sizeof(oid[0][0]); + DO(der_decode_object_identifier(buf[0], x, oid[0], &y)); + if (y != sizeof(rsa_oid)/sizeof(rsa_oid[0]) || 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 */ + yarrow_read(buf[0], 4, &yarrow_prng); + LOAD32L(z, buf[0]); + z = 2 + (z % ((sizeof(oid[0])/sizeof(oid[0][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++) { + yarrow_read(buf[0], 4, &yarrow_prng); + 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 = sizeof(oid[0])/sizeof(oid[0][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, strlen((char*)rsa_ia5), 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, strlen((char*)rsa_ia5), &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 != strlen((char*)rsa_ia5) || memcmp(buf[1], rsa_ia5, strlen((char*)rsa_ia5))) { + fprintf(stderr, "DER IA5 failed test vector\n"); + return 1; + } + +/* Printable string */ + x = sizeof(buf[0]); + DO(der_encode_printable_string(rsa_printable, strlen((char*)rsa_printable), 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, strlen((char*)rsa_printable), &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 != strlen((char*)rsa_printable) || memcmp(buf[1], rsa_printable, strlen((char*)rsa_printable))) { + 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]); printf("\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]); printf("\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; + } + + der_set_test(); + der_flexi_test(); + return der_choice_test(); +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/dsa_test.c b/testprof/dsa_test.c new file mode 100644 index 00000000..7d0f271f --- /dev/null +++ b/testprof/dsa_test.c @@ -0,0 +1,82 @@ +#include + +#ifdef MDSA + +int dsa_test(void) +{ + unsigned char msg[16], out[1024], out2[1024]; + unsigned long x, y; + int stat1, stat2; + dsa_key key, key2; + + /* make a random key */ + DO(dsa_make_key(&yarrow_prng, find_prng("yarrow"), 20, 128, &key)); + + /* verify it */ + DO(dsa_verify_key(&key, &stat1)); + if (stat1 == 0) { fprintf(stderr, "dsa_verify_key "); return 1; } + + /* encrypt a message */ + for (x = 0; x < 16; x++) { msg[x] = x; } + 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 */ + 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) { fprintf(stderr, "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) { fprintf(stderr, "dsa_verify (import public) %d ", stat1); return 1; } + dsa_free(&key2); + dsa_free(&key); + + return 0; +} + +#else + +int dsa_test(void) +{ + fprintf(stderr, "NOP"); + return 0; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/ecc_test.c b/testprof/ecc_test.c new file mode 100644 index 00000000..d42d1fd6 --- /dev/null +++ b/testprof/ecc_test.c @@ -0,0 +1,141 @@ +#include + +#ifdef MECC + +static int sizes[] = { +#ifdef ECC192 +24, +#endif +#ifdef ECC224 +28, +#endif +#ifdef ECC256 +32, +#endif +#ifdef ECC384 +48, +#endif +#ifdef ECC521 +65 +#endif +}; + +int ecc_tests (void) +{ + unsigned char buf[4][4096]; + unsigned long x, y, z, s; + int stat, stat2; + ecc_key usera, userb, pubKey, privKey; + + DO(ecc_test ()); + DO(ecc_test ()); + DO(ecc_test ()); + DO(ecc_test ()); + DO(ecc_test ()); + + for (s = 0; s < (sizeof(sizes)/sizeof(sizes[0])); 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)); + + /* 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) { + fprintf(stderr, "ecc Shared keys are not same size."); + return 1; + } + + if (memcmp (buf[0], buf[1], x)) { + fprintf(stderr, "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) { + 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 (x = 0; x < 32; x++) { + buf[0][x] = x; + } + 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 (x = 0; x < 32; x++) { + if (buf[0][x] != x) { + fprintf(stderr, "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, &yarrow_prng, find_prng ("yarrow"), &privKey)); + DO(ecc_verify_hash (buf[1], x, buf[0], 16, &stat, &pubKey)); + buf[0][0] ^= 1; + DO(ecc_verify_hash (buf[1], x, buf[0], 16, &stat2, &privKey)); + if (!(stat == 1 && stat2 == 0)) { + fprintf(stderr, "ecc_verify_hash failed %d, %d, ", stat, stat2); + return 1; + } + ecc_free (&usera); + ecc_free (&pubKey); + ecc_free (&privKey); + } + return 0; +} + +#else + +int ecc_tests(void) +{ + fprintf(stderr, "NOP"); + return 0; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/katja_test.c b/testprof/katja_test.c new file mode 100644 index 00000000..47d01feb --- /dev/null +++ b/testprof/katja_test.c @@ -0,0 +1,231 @@ +#include + +#ifdef MKAT + +int katja_test(void) +{ + unsigned char in[1024], out[1024], tmp[1024]; + katja_key key, privKey, pubKey; + int hash_idx, prng_idx, stat, stat2, size; + unsigned long kat_msgsize, len, len2, cnt; + 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) { + fprintf(stderr, "katja_test requires SHA1 and yarrow"); + return 1; + } + +for (size = 1024; size <= 2048; size += 256) { + + /* make 10 random key */ + for (cnt = 0; cnt < 10; cnt++) { + DO(katja_make_key(&yarrow_prng, prng_idx, size/8, &key)); + if (mp_count_bits(key.N) < size - 7) { + fprintf(stderr, "katja_%d key modulus has %d bits\n", size, mp_count_bits(key.N)); + +len = mp_unsigned_bin_size(key.N); +mp_to_unsigned_bin(key.N, tmp); + fprintf(stderr, "N == \n"); +for (cnt = 0; cnt < len; ) { + fprintf(stderr, "%02x ", tmp[cnt]); + if (!(++cnt & 15)) fprintf(stderr, "\n"); +} + +len = mp_unsigned_bin_size(key.p); +mp_to_unsigned_bin(key.p, tmp); + fprintf(stderr, "p == \n"); +for (cnt = 0; cnt < len; ) { + fprintf(stderr, "%02x ", tmp[cnt]); + if (!(++cnt & 15)) fprintf(stderr, "\n"); +} + +len = mp_unsigned_bin_size(key.q); +mp_to_unsigned_bin(key.q, tmp); + fprintf(stderr, "\nq == \n"); +for (cnt = 0; cnt < len; ) { + fprintf(stderr, "%02x ", tmp[cnt]); + if (!(++cnt & 15)) fprintf(stderr, "\n"); +} + fprintf(stderr, "\n"); + + + return 1; + } + if (cnt != 9) { + katja_free(&key); + } + } + /* encrypt the key (without lparam) */ + for (cnt = 0; cnt < 4; cnt++) { + for (kat_msgsize = 1; kat_msgsize <= 42; kat_msgsize++) { + /* make a random key/msg */ + yarrow_read(in, kat_msgsize, &yarrow_prng); + + len = sizeof(out); + len2 = kat_msgsize; + + DO(katja_encrypt_key(in, kat_msgsize, out, &len, NULL, 0, &yarrow_prng, prng_idx, hash_idx, &key)); + /* change a byte */ + out[8] ^= 1; + DO(katja_decrypt_key(out, len, tmp, &len2, NULL, 0, hash_idx, &stat2, &key)); + /* change a byte back */ + out[8] ^= 1; + if (len2 != kat_msgsize) { + fprintf(stderr, "\nkatja_decrypt_key mismatch len %lu (first decrypt)", len2); + return 1; + } + + len2 = kat_msgsize; + DO(katja_decrypt_key(out, len, tmp, &len2, NULL, 0, hash_idx, &stat, &key)); + if (!(stat == 1 && stat2 == 0)) { + fprintf(stderr, "katja_decrypt_key failed"); + return 1; + } + if (len2 != kat_msgsize || memcmp(tmp, in, kat_msgsize)) { + unsigned long x; + fprintf(stderr, "\nkatja_decrypt_key mismatch, len %lu (second decrypt)\n", len2); + fprintf(stderr, "Original contents: \n"); + for (x = 0; x < kat_msgsize; ) { + fprintf(stderr, "%02x ", in[x]); + if (!(++x % 16)) { + fprintf(stderr, "\n"); + } + } + fprintf(stderr, "\n"); + fprintf(stderr, "Output contents: \n"); + for (x = 0; x < kat_msgsize; ) { + fprintf(stderr, "%02x ", out[x]); + if (!(++x % 16)) { + fprintf(stderr, "\n"); + } + } + fprintf(stderr, "\n"); + return 1; + } + } + } + + /* encrypt the key (with lparam) */ + for (kat_msgsize = 1; kat_msgsize <= 42; kat_msgsize++) { + len = sizeof(out); + len2 = kat_msgsize; + DO(katja_encrypt_key(in, kat_msgsize, out, &len, lparam, sizeof(lparam), &yarrow_prng, prng_idx, hash_idx, &key)); + /* change a byte */ + out[8] ^= 1; + DO(katja_decrypt_key(out, len, tmp, &len2, lparam, sizeof(lparam), hash_idx, &stat2, &key)); + if (len2 != kat_msgsize) { + fprintf(stderr, "\nkatja_decrypt_key mismatch len %lu (first decrypt)", len2); + return 1; + } + /* change a byte back */ + out[8] ^= 1; + + len2 = kat_msgsize; + DO(katja_decrypt_key(out, len, tmp, &len2, lparam, sizeof(lparam), hash_idx, &stat, &key)); + if (!(stat == 1 && stat2 == 0)) { + fprintf(stderr, "katja_decrypt_key failed"); + return 1; + } + if (len2 != kat_msgsize || memcmp(tmp, in, kat_msgsize)) { + fprintf(stderr, "katja_decrypt_key mismatch len %lu", len2); + return 1; + } + } + +#if 0 + + /* sign a message (unsalted, lower cholestorol and Atkins approved) now */ + len = sizeof(out); + DO(katja_sign_hash(in, 20, out, &len, &yarrow_prng, prng_idx, hash_idx, 0, &key)); + +/* export key and import as both private and public */ + len2 = sizeof(tmp); + DO(katja_export(tmp, &len2, PK_PRIVATE, &key)); + DO(katja_import(tmp, len2, &privKey)); + len2 = sizeof(tmp); + DO(katja_export(tmp, &len2, PK_PUBLIC, &key)); + DO(katja_import(tmp, len2, &pubKey)); + + /* verify with original */ + DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat, &key)); + /* change a byte */ + in[0] ^= 1; + DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat2, &key)); + + if (!(stat == 1 && stat2 == 0)) { + fprintf(stderr, "katja_verify_hash (unsalted, origKey) failed, %d, %d", stat, stat2); + katja_free(&key); + katja_free(&pubKey); + katja_free(&privKey); + return 1; + } + + /* verify with privKey */ + /* change a byte */ + in[0] ^= 1; + DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat, &privKey)); + /* change a byte */ + in[0] ^= 1; + DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat2, &privKey)); + + if (!(stat == 1 && stat2 == 0)) { + fprintf(stderr, "katja_verify_hash (unsalted, privKey) failed, %d, %d", stat, stat2); + katja_free(&key); + katja_free(&pubKey); + katja_free(&privKey); + return 1; + } + + /* verify with pubKey */ + /* change a byte */ + in[0] ^= 1; + DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat, &pubKey)); + /* change a byte */ + in[0] ^= 1; + DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat2, &pubKey)); + + if (!(stat == 1 && stat2 == 0)) { + fprintf(stderr, "katja_verify_hash (unsalted, pubkey) failed, %d, %d", stat, stat2); + katja_free(&key); + katja_free(&pubKey); + katja_free(&privKey); + return 1; + } + + /* sign a message (salted) now (use privKey to make, pubKey to verify) */ + len = sizeof(out); + DO(katja_sign_hash(in, 20, out, &len, &yarrow_prng, prng_idx, hash_idx, 8, &privKey)); + DO(katja_verify_hash(out, len, in, 20, hash_idx, 8, &stat, &pubKey)); + /* change a byte */ + in[0] ^= 1; + DO(katja_verify_hash(out, len, in, 20, hash_idx, 8, &stat2, &pubKey)); + + if (!(stat == 1 && stat2 == 0)) { + fprintf(stderr, "katja_verify_hash (salted) failed, %d, %d", stat, stat2); + katja_free(&key); + katja_free(&pubKey); + katja_free(&privKey); + return 1; + } +#endif + + katja_free(&key); + katja_free(&pubKey); + katja_free(&privKey); +} + + /* free the key and return */ + return 0; +} + +#else + +int katja_test(void) +{ + fprintf(stderr, "NOP"); + return 0; +} + +#endif diff --git a/testprof/mac_test.c b/testprof/mac_test.c new file mode 100644 index 00000000..e22a72a3 --- /dev/null +++ b/testprof/mac_test.c @@ -0,0 +1,35 @@ +/* test pmac/omac/hmac */ +#include + +int mac_test(void) +{ +#ifdef HMAC + DO(hmac_test()); +#endif +#ifdef PMAC + DO(pmac_test()); +#endif +#ifdef OMAC + DO(omac_test()); +#endif +#ifdef EAX_MODE + DO(eax_test()); +#endif +#ifdef OCB_MODE + DO(ocb_test()); +#endif +#ifdef CCM_MODE + DO(ccm_test()); +#endif +#ifdef GCM_MODE + DO(gcm_test()); +#endif +#ifdef PELICAN + DO(pelican_test()); +#endif + return 0; +} + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/makefile b/testprof/makefile new file mode 100644 index 00000000..4cc70ff5 --- /dev/null +++ b/testprof/makefile @@ -0,0 +1,24 @@ +CFLAGS += -I../src/headers -I./ -Wall -W + +# ranlib tools +ifndef RANLIB + RANLIB=ranlib +endif + +OBJECTS = base64_test.o cipher_hash_test.o der_tests.o \ +dsa_test.o ecc_test.o mac_test.o modes_test.o pkcs_1_test.o rsa_test.o \ +store_test.o test_driver.o x86_prof.o katja_test.o + +ifndef LIBTEST_S + LIBTEST_S=libtomcrypt_prof.a +endif + +default: $(LIBTEST_S) + +$(LIBTEST_S): $(OBJECTS) + $(AR) $(ARFLAGS) $@ $(OBJECTS) + $(RANLIB) $@ + +clean: + rm -f *.o *.a + diff --git a/testprof/makefile.icc b/testprof/makefile.icc new file mode 100644 index 00000000..60628ce1 --- /dev/null +++ b/testprof/makefile.icc @@ -0,0 +1,20 @@ +CFLAGS += -I../src/headers -I./ +CC=icc + +OBJECTS = base64_test.o cipher_hash_test.o der_tests.o \ +dsa_test.o ecc_test.o mac_test.o modes_test.o pkcs_1_test.o rsa_test.o \ +store_test.o test_driver.o x86_prof.o katja_test.o + +ifndef LIBTEST_S + LIBTEST_S = libtomcrypt_prof.a +endif + +default: $(LIBTEST_S) + +$(LIBTEST_S): $(OBJECTS) + $(AR) $(ARFLAGS) $@ $(OBJECTS) + ranlib $@ + +clean: + rm -f *.o *.a + diff --git a/testprof/makefile.msvc b/testprof/makefile.msvc new file mode 100644 index 00000000..d330f933 --- /dev/null +++ b/testprof/makefile.msvc @@ -0,0 +1,10 @@ +CFLAGS = /I../src/headers/ /I./ /Ox /DWIN32 /DLTC_SOURCE /W3 /Fo$@ + +OBJECTS=base64_test.obj cipher_hash_test.obj der_tests.obj \ +dsa_test.obj ecc_test.obj mac_test.obj modes_test.obj pkcs_1_test.obj \ +rsa_test.obj store_test.obj test_driver.obj x86_prof.obj katja_test.obj + +tomcrypt_prof.lib: $(OBJECTS) + lib /out:tomcrypt_prof.lib $(OBJECTS) + + diff --git a/testprof/makefile.shared b/testprof/makefile.shared new file mode 100644 index 00000000..b3abba55 --- /dev/null +++ b/testprof/makefile.shared @@ -0,0 +1,24 @@ +CC=libtool --mode=compile gcc + +CFLAGS += -I../src/headers -I./ -Wall -W + +# ranlib tools +ifndef RANLIB + RANLIB=ranlib +endif + +OBJECTS = base64_test.o cipher_hash_test.o der_tests.o \ +dsa_test.o ecc_test.o mac_test.o modes_test.o pkcs_1_test.o rsa_test.o \ +store_test.o test_driver.o x86_prof.o katja_test.o + +ifndef LIBTEST + LIBTEST=libtomcrypt_prof.la +endif + +default: $(LIBTEST) + +$(LIBTEST): $(OBJECTS) + libtool --silent --mode=link gcc $(CFLAGS) `find . -type f | grep "[.]lo" | xargs` -o $@ -rpath $(LIBPATH) -version-info $(VERSION) + +install: $(LIBTEST) + libtool --silent --mode=install install -c $(LIBTEST) $(DESTDIR)$(LIBPATH)/$(LIBTEST) diff --git a/testprof/modes_test.c b/testprof/modes_test.c new file mode 100644 index 00000000..0e7c672f --- /dev/null +++ b/testprof/modes_test.c @@ -0,0 +1,136 @@ +/* test CFB/OFB/CBC modes */ +#include + +int modes_test(void) +{ + unsigned char pt[64], ct[64], tmp[64], key[16], iv[16], iv2[16]; + int cipher_idx; +#ifdef CBC + symmetric_CBC cbc; +#endif +#ifdef CFB + symmetric_CFB cfb; +#endif +#ifdef OFB + symmetric_OFB ofb; +#endif +#ifdef CTR + symmetric_CTR ctr; +#endif + unsigned long l; + + /* make a random pt, key and iv */ + yarrow_read(pt, 64, &yarrow_prng); + yarrow_read(key, 16, &yarrow_prng); + yarrow_read(iv, 16, &yarrow_prng); + + /* get idx of AES handy */ + cipher_idx = find_cipher("aes"); + if (cipher_idx == -1) { + fprintf(stderr, "test requires AES"); + return 1; + } + +#ifdef LTC_F8_MODE + DO(f8_test_mode()); +#endif + +#ifdef LRW_MODE + DO(lrw_test()); +#endif + +#ifdef CBC + /* 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)) { + fprintf(stderr, "cbc_getiv failed"); + return 1; + } + 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)); + if (memcmp(tmp, pt, 64) != 0) { + fprintf(stderr, "CBC failed"); + return 1; + } +#endif + +#ifdef CFB + /* 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) { + fprintf(stderr, "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) { + fprintf(stderr, "CFB failed"); + return 1; + } +#endif + +#ifdef OFB + /* 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)) { + fprintf(stderr, "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) { + fprintf(stderr, "OFB failed"); + return 1; + } +#endif + +#ifdef CTR + /* test CTR mode */ + /* encode the block */ + DO(ctr_start(cipher_idx, iv, key, 16, 0, CTR_COUNTER_LITTLE_ENDIAN, &ctr)); + l = sizeof(iv2); + DO(ctr_getiv(iv2, &l, &ctr)); + if (l != 16 || memcmp(iv2, iv, 16)) { + fprintf(stderr, "ctr_getiv failed"); + return 1; + } + DO(ctr_encrypt(pt, ct, 57, &ctr)); + + /* decode the block */ + DO(ctr_setiv(iv2, l, &ctr)); + zeromem(tmp, sizeof(tmp)); + DO(ctr_decrypt(ct, tmp, 57, &ctr)); + if (memcmp(tmp, pt, 57) != 0) { + fprintf(stderr, "CTR failed"); + return 1; + } +#endif + + return 0; +} + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/pkcs_1_test.c b/testprof/pkcs_1_test.c new file mode 100644 index 00000000..aabf30b9 --- /dev/null +++ b/testprof/pkcs_1_test.c @@ -0,0 +1,96 @@ +#include + +#ifdef PKCS_1 + +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) { + fprintf(stderr, "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); + + /* 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, &yarrow_prng, 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) { + fprintf(stderr, "Outsize == %lu, should have been %lu, res1 = %d, lparamlen = %lu, msg contents follow.\n", l2, l3, res1, lparamlen); + fprintf(stderr, "ORIGINAL:\n"); + for (x = 0; x < l3; x++) { + fprintf(stderr, "%02x ", buf[0][x]); + } + fprintf(stderr, "\nRESULT:\n"); + for (x = 0; x < l2; x++) { + fprintf(stderr, "%02x ", buf[2][x]); + } + fprintf(stderr, "\n\n"); + return 1; + } + + /* test PSS */ + l1 = sizeof(buf[1]); + DO(pkcs_1_pss_encode(buf[0], l3, saltlen, &yarrow_prng, 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)) { + fprintf(stderr, "PSS failed: %d, %d, %d, %lu, %lu\n", res1, res2, res3, l3, saltlen); + return 1; + } + } + return 0; +} + +#else + +int pkcs_1_test(void) +{ + fprintf(stderr, "NOP"); + return 0; +} + +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/rsa_test.c b/testprof/rsa_test.c new file mode 100644 index 00000000..5f6ce9a7 --- /dev/null +++ b/testprof/rsa_test.c @@ -0,0 +1,353 @@ +#include + +#ifdef MRSA + +#define RSA_MSGSIZE 78 + +/* These are test keys [see file test.key] that I use to test my import/export against */ +static const unsigned char openssl_private_rsa[] = { + 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, }; + + +/*** openssl public RSA key in DER format */ +static const unsigned char 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, }; + +/* 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, }; + +static int rsa_compat_test(void) +{ + rsa_key key; + unsigned char buf[1024]; + unsigned long len; + + /* try reading the key */ + DO(rsa_import(openssl_private_rsa, sizeof(openssl_private_rsa), &key)); + + /* now try to export private/public and compare */ + len = sizeof(buf); + DO(rsa_export(buf, &len, PK_PRIVATE, &key)); + if (len != sizeof(openssl_private_rsa) || memcmp(buf, openssl_private_rsa, len)) { + fprintf(stderr, "RSA private export failed to match OpenSSL output, %lu, %lu\n", len, sizeof(openssl_private_rsa)); + return 1; + } + + len = sizeof(buf); + DO(rsa_export(buf, &len, PK_PUBLIC, &key)); + if (len != sizeof(openssl_public_rsa_stripped) || memcmp(buf, openssl_public_rsa_stripped, len)) { + fprintf(stderr, "RSA(private) public export failed to match OpenSSL output\n"); + return 1; + } + 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)); + if (len != sizeof(openssl_public_rsa_stripped) || memcmp(buf, openssl_public_rsa_stripped, len)) { + fprintf(stderr, "RSA(public) stripped public import failed to match OpenSSL output\n"); + return 1; + } + rsa_free(&key); + + /* try reading the public key */ + DO(rsa_import(openssl_public_rsa, sizeof(openssl_public_rsa), &key)); + len = sizeof(buf); + DO(rsa_export(buf, &len, PK_PUBLIC, &key)); + if (len != sizeof(openssl_public_rsa_stripped) || memcmp(buf, openssl_public_rsa_stripped, len)) { + fprintf(stderr, "RSA(public) SSL public import failed to match OpenSSL output\n"); + return 1; + } + rsa_free(&key); + + return 0; +} + +int rsa_test(void) +{ + unsigned char in[1024], out[1024], tmp[1024]; + rsa_key key, privKey, pubKey; + int hash_idx, prng_idx, stat, stat2; + unsigned long rsa_msgsize, len, len2, cnt; + static unsigned char lparam[] = { 0x01, 0x02, 0x03, 0x04 }; + + if (rsa_compat_test() != 0) { + return 1; + } + + hash_idx = find_hash("sha1"); + prng_idx = find_prng("yarrow"); + if (hash_idx == -1 || prng_idx == -1) { + fprintf(stderr, "rsa_test requires SHA1 and yarrow"); + return 1; + } + + /* make 10 random key */ + for (cnt = 0; cnt < 10; cnt++) { + DO(rsa_make_key(&yarrow_prng, prng_idx, 1024/8, 65537, &key)); + if (mp_count_bits(key.N) != 1024) { + fprintf(stderr, "rsa_1024 key modulus has %d bits\n", mp_count_bits(key.N)); + +len = mp_unsigned_bin_size(key.N); +mp_to_unsigned_bin(key.N, tmp); + fprintf(stderr, "N == \n"); +for (cnt = 0; cnt < len; ) { + fprintf(stderr, "%02x ", tmp[cnt]); + if (!(++cnt & 15)) fprintf(stderr, "\n"); +} + +len = mp_unsigned_bin_size(key.p); +mp_to_unsigned_bin(key.p, tmp); + fprintf(stderr, "p == \n"); +for (cnt = 0; cnt < len; ) { + fprintf(stderr, "%02x ", tmp[cnt]); + if (!(++cnt & 15)) fprintf(stderr, "\n"); +} + +len = mp_unsigned_bin_size(key.q); +mp_to_unsigned_bin(key.q, tmp); + fprintf(stderr, "\nq == \n"); +for (cnt = 0; cnt < len; ) { + fprintf(stderr, "%02x ", tmp[cnt]); + if (!(++cnt & 15)) fprintf(stderr, "\n"); +} + fprintf(stderr, "\n"); + + + return 1; + } + if (cnt != 9) { + rsa_free(&key); + } + } + + /* encrypt the key (without lparam) */ + for (cnt = 0; cnt < 4; cnt++) { + for (rsa_msgsize = 1; rsa_msgsize <= 86; rsa_msgsize++) { + /* make a random key/msg */ + yarrow_read(in, rsa_msgsize, &yarrow_prng); + + len = sizeof(out); + len2 = rsa_msgsize; + + DO(rsa_encrypt_key(in, rsa_msgsize, out, &len, NULL, 0, &yarrow_prng, prng_idx, hash_idx, &key)); + /* change a byte */ + out[8] ^= 1; + DO(rsa_decrypt_key(out, len, tmp, &len2, NULL, 0, hash_idx, &stat2, &key)); + /* change a byte back */ + out[8] ^= 1; + if (len2 != rsa_msgsize) { + fprintf(stderr, "\nrsa_decrypt_key mismatch len %lu (first decrypt)", len2); + return 1; + } + + len2 = rsa_msgsize; + DO(rsa_decrypt_key(out, len, tmp, &len2, NULL, 0, hash_idx, &stat, &key)); + if (!(stat == 1 && stat2 == 0)) { + fprintf(stderr, "rsa_decrypt_key failed"); + return 1; + } + if (len2 != rsa_msgsize || memcmp(tmp, in, rsa_msgsize)) { + unsigned long x; + fprintf(stderr, "\nrsa_decrypt_key mismatch, len %lu (second decrypt)\n", len2); + fprintf(stderr, "Original contents: \n"); + for (x = 0; x < rsa_msgsize; ) { + fprintf(stderr, "%02x ", in[x]); + if (!(++x % 16)) { + fprintf(stderr, "\n"); + } + } + fprintf(stderr, "\n"); + fprintf(stderr, "Output contents: \n"); + for (x = 0; x < rsa_msgsize; ) { + fprintf(stderr, "%02x ", out[x]); + if (!(++x % 16)) { + fprintf(stderr, "\n"); + } + } + fprintf(stderr, "\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), &yarrow_prng, prng_idx, hash_idx, &key)); + /* change a byte */ + out[8] ^= 1; + DO(rsa_decrypt_key(out, len, tmp, &len2, lparam, sizeof(lparam), hash_idx, &stat2, &key)); + if (len2 != rsa_msgsize) { + fprintf(stderr, "\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), hash_idx, &stat, &key)); + if (!(stat == 1 && stat2 == 0)) { + fprintf(stderr, "rsa_decrypt_key failed"); + return 1; + } + if (len2 != rsa_msgsize || memcmp(tmp, in, rsa_msgsize)) { + fprintf(stderr, "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, &yarrow_prng, prng_idx, hash_idx, 0, &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)); + + /* verify with original */ + DO(rsa_verify_hash(out, len, in, 20, hash_idx, 0, &stat, &key)); + /* change a byte */ + in[0] ^= 1; + DO(rsa_verify_hash(out, len, in, 20, hash_idx, 0, &stat2, &key)); + + if (!(stat == 1 && stat2 == 0)) { + fprintf(stderr, "rsa_verify_hash (unsalted, origKey) failed, %d, %d", stat, stat2); + rsa_free(&key); + rsa_free(&pubKey); + rsa_free(&privKey); + return 1; + } + + /* verify with privKey */ + /* change a byte */ + in[0] ^= 1; + DO(rsa_verify_hash(out, len, in, 20, hash_idx, 0, &stat, &privKey)); + /* change a byte */ + in[0] ^= 1; + DO(rsa_verify_hash(out, len, in, 20, hash_idx, 0, &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 pubKey */ + /* change a byte */ + in[0] ^= 1; + DO(rsa_verify_hash(out, len, in, 20, hash_idx, 0, &stat, &pubKey)); + /* change a byte */ + in[0] ^= 1; + DO(rsa_verify_hash(out, len, in, 20, hash_idx, 0, &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); + DO(rsa_sign_hash(in, 20, out, &len, &yarrow_prng, prng_idx, hash_idx, 8, &privKey)); + DO(rsa_verify_hash(out, len, in, 20, hash_idx, 8, &stat, &pubKey)); + /* change a byte */ + in[0] ^= 1; + DO(rsa_verify_hash(out, len, in, 20, hash_idx, 8, &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; + } + + /* free the key and return */ + rsa_free(&key); + rsa_free(&pubKey); + rsa_free(&privKey); + return 0; +} + +#else + +int rsa_test(void) +{ + fprintf(stderr, "NOP"); + return 0; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/tests/store_test.c b/testprof/store_test.c similarity index 57% rename from tests/store_test.c rename to testprof/store_test.c index d7ee7d2e..71666ba1 100644 --- a/tests/store_test.c +++ b/testprof/store_test.c @@ -1,16 +1,14 @@ -/* 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; + int y; ulong32 L, L1; ulong64 LL, LL1; #ifdef LTC_FAST - unsigned long x, z, zz; + int x, z; #endif for (y = 0; y < 4; y++) { @@ -19,13 +17,13 @@ int store_test(void) STORE32L(L, buf + y); LOAD32L(L1, buf + y); if (L1 != L) { - fprintf(stderr, "\n32L failed at offset %lu\n", y); + fprintf(stderr, "\n32L failed at offset %d\n", y); return 1; } STORE32H(L, buf + y); LOAD32H(L1, buf + y); if (L1 != L) { - fprintf(stderr, "\n32H failed at offset %lu\n", y); + fprintf(stderr, "\n32H failed at offset %d\n", y); return 1; } } @@ -36,13 +34,13 @@ int store_test(void) STORE64L(LL, buf + y); LOAD64L(LL1, buf + y); if (LL1 != LL) { - fprintf(stderr, "\n64L failed at offset %lu\n", y); + fprintf(stderr, "\n64L failed at offset %d\n", y); return 1; } STORE64H(LL, buf + y); LOAD64H(LL1, buf + y); if (LL1 != LL) { - fprintf(stderr, "\n64H failed at offset %lu\n", y); + fprintf(stderr, "\n64H failed at offset %d\n", y); return 1; } } @@ -51,26 +49,30 @@ int store_test(void) #ifdef LTC_FAST y = 16; - for (z = 0, zz = 2*y - 1; z < y; z++, zz-=2) { + for (z = 0; z < y; z++) { /* 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); + yarrow_read(buf+z, y, &yarrow_prng); + yarrow_read(buf+z+y, y, &yarrow_prng); /* 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]; + buf[2*y+z+x] = buf[z+x] ^ buf[z+y+x]; } /* 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]); + *((LTC_FAST_TYPE*)(&buf[3*y+z+x])) = *((LTC_FAST_TYPE*)(&buf[z+x])) ^ *((LTC_FAST_TYPE*)(&buf[z+y+x])); } - if (memcmp(&buf[4*y+z], &buf[5*y+z], y)) { - fprintf(stderr, "\nLTC_FAST failed at offset %lu\n", z); + if (memcmp(&buf[2*y+z], &buf[3*y+z], y)) { + fprintf(stderr, "\nLTC_FAST failed at offset %d\n", z); return 1; } } #endif return 0; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/tests/test.der b/testprof/test.der similarity index 100% rename from tests/test.der rename to testprof/test.der diff --git a/tests/test.key b/testprof/test.key similarity index 100% rename from tests/test.key rename to testprof/test.key diff --git a/testprof/test_driver.c b/testprof/test_driver.c new file mode 100644 index 00000000..721a992f --- /dev/null +++ b/testprof/test_driver.c @@ -0,0 +1,13 @@ +#include + +void run_cmd(int res, int line, char *file, char *cmd) +{ + if (res != CRYPT_OK) { + fprintf(stderr, "%s (%d)\n%s:%d:%s\n", error_to_string(res), res, file, line, cmd); + exit(EXIT_FAILURE); + } +} + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/tomcrypt_test.h b/testprof/tomcrypt_test.h new file mode 100644 index 00000000..ebcacbb4 --- /dev/null +++ b/testprof/tomcrypt_test.h @@ -0,0 +1,77 @@ + +#ifndef __TEST_H_ +#define __TEST_H_ + +#include + +/* 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 yarrow_prng; + +void run_cmd(int res, int line, char *file, char *cmd); +#define DO(x) { run_cmd((x), __LINE__, __FILE__, #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 katja_test(void); +int ecc_tests(void); +int dsa_test(void); +int der_tests(void); + +/* timing */ +#define KTIMES 25 +#define TIMES 100000 + +extern struct list { + int id; + unsigned long spd1, spd2, avg; +} results[]; + +extern int no_results; + +int sorter(const void *a, const void *b); +void tally_results(int type); +ulong64 rdtsc (void); + +void t_start(void); +ulong64 t_read(void); +void init_timer(void); + +/* register default algs */ +void reg_algs(void); +int time_keysched(void); +int time_cipher(void); +int time_cipher2(void); +int time_cipher3(void); +int time_hash(void); +void time_mult(void); +void time_sqr(void); +void time_prng(void); +void time_rsa(void); +void time_katja(void); +void time_ecc(void); +void time_macs_(unsigned long MAC_SIZE); +void time_macs(void); +void time_encmacs(void); + + + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/x86_prof.c b/testprof/x86_prof.c new file mode 100644 index 00000000..03c58d6a --- /dev/null +++ b/testprof/x86_prof.c @@ -0,0 +1,1208 @@ +#include + +prng_state yarrow_prng; + +struct list 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); + + 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 %5lu, Decrypt at %5lu\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 %5lu\n", hash_descriptor[results[x].id].name, results[x].spd1 / 1000); + } + } +} + +/* RDTSC from Scott Duplichan */ +ulong64 rdtsc (void) + { + #if defined __GNUC__ && !defined(LTC_NO_ASM) + #ifdef INTEL_CC + ulong64 a; + asm ( " rdtsc ":"=A"(a)); + return a; + #elif defined(__i386__) || defined(__x86_64__) + ulong64 a; + asm __volatile__ ("rdtsc\nmovl %%eax,(%0)\nmovl %%edx,4(%0)\n"::"r"(&a):"%eax","%edx"); + return a; + #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 + #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; + +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)>>1; + + c1 = (t1 > c1) ? t1 : c1; + c2 = (t2 > c2) ? t2 : c2; + } + skew = c2 - c1; + fprintf(stderr, "Clock Skew: %lu\n", (unsigned long)skew); +} + +void reg_algs(void) +{ + int err; +#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 KHAZAD + register_cipher (&khazad_desc); +#endif +#ifdef ANUBIS + register_cipher (&anubis_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 +#ifdef CHC_HASH + register_hash(&chc_desc); + if ((err = chc_register(register_cipher(&aes_desc))) != CRYPT_OK) { + fprintf(stderr, "chc_register error: %s\n", error_to_string(err)); + exit(EXIT_FAILURE); + } +#endif + + +#ifndef YARROW + #error This demo requires Yarrow. +#endif +register_prng(&yarrow_desc); +#ifdef FORTUNA +register_prng(&fortuna_desc); +#endif +#ifdef RC4 +register_prng(&rc4_desc); +#endif +#ifdef SOBER128 +register_prng(&sober128_desc); +#endif + + 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); + } + +} + +int 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++) { + yarrow_read(key, kl, &yarrow_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); + + return 0; +} + +int time_cipher(void) +{ + unsigned long x, y1; + ulong64 t1, t2, c1, c2, a1, a2; + symmetric_ECB ecb; + unsigned char key[MAXBLOCKSIZE], pt[4096]; + 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++) { + 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); + + return 0; +} + +#ifdef CBC +int time_cipher2(void) +{ + unsigned long x, y1; + ulong64 t1, t2, c1, c2, a1, a2; + symmetric_CBC cbc; + unsigned char key[MAXBLOCKSIZE], pt[4096]; + 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++) { + 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); + + return 0; +} +#else +int time_cipher2(void) { fprintf(stderr, "NO CBC\n"); return 0; } +#endif + +#ifdef CTR +int time_cipher3(void) +{ + unsigned long x, y1; + ulong64 t1, t2, c1, c2, a1, a2; + symmetric_CTR ctr; + unsigned char key[MAXBLOCKSIZE], pt[4096]; + 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++) { + 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); + + return 0; +} +#else +int time_cipher3(void) { fprintf(stderr, "NO CTR\n"); return 0; } +#endif + +#ifdef LRW_MODE +int time_cipher4(void) +{ + unsigned long x, y1; + ulong64 t1, t2, c1, c2, a1, a2; + symmetric_LRW lrw; + unsigned char key[MAXBLOCKSIZE], pt[4096]; + 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; + 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); + + return 0; +} +#else +int time_cipher4(void) { fprintf(stderr, "NO LRW\n"); return 0; } +#endif + + +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), err; + unsigned char pt[MAXBLOCKSIZE]; + + + fprintf(stderr, "\n\nHASH Time Trials for:\n"); + no_results = 0; + for (x = 0; hash_descriptor[x].name != NULL; x++) { + + /* 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)); + exit(EXIT_FAILURE); + } + + 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; + fprintf(stderr, "."); fflush(stdout); +#undef DO2 +#undef DO1 + } + tally_results(2); + + return 0; +} + +#undef MPI +/*#warning you need an mp_rand!!!*/ + +#ifdef MPI +void time_mult(void) +{ + ulong64 t1, t2; + unsigned long x, y; + void *a, *b, *c; + + fprintf(stderr, "Timing Multiplying:\n"); + mp_init_multi(&a,&b,&c,NULL); + for (x = 128/DIGIT_BIT; x <= 1536/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; + } + fprintf(stderr, "%4lu bits: %9llu cycles\n", x*DIGIT_BIT, 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; + + fprintf(stderr, "Timing Squaring:\n"); + mp_init_multi(&a,&b,NULL); + for (x = 128/DIGIT_BIT; x <= 1536/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; + } + fprintf(stderr, "%4lu bits: %9llu cycles\n", x*DIGIT_BIT, t2); + } + mp_clear_multi(&a,&b,NULL); + +#undef DO1 +#undef DO2 +} +#else +void time_mult(void) { fprintf(stderr, "NO MULT\n"); } +void time_sqr(void) { fprintf(stderr, "NO SQR\n"); } +#endif + +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++) { + + /* 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: %5llu ", 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, "%5llu\n", t2); +#undef DO2 +#undef DO1 + + } +} + +#ifdef MRSA +/* time various RSA operations */ +void time_rsa(void) +{ + rsa_key key; + ulong64 t1, t2; + unsigned char buf[2][4096]; + unsigned long x, y, z, zzz; + int err, zz; + + for (x = 1024; x <= 2048; x += 256) { + t2 = 0; + for (y = 0; y < 4; y++) { + t_start(); + t1 = t_read(); + if ((err = rsa_make_key(&yarrow_prng, find_prng("yarrow"), 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; + + if (y < 3) { + rsa_free(&key); + } + } + t2 >>= 2; + fprintf(stderr, "RSA-%lu make_key took %15llu 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(buf[0], 32, buf[1], &z, (const unsigned char *)"testprog", 8, &yarrow_prng, + find_prng("yarrow"), find_hash("sha1"), + &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; + } + t2 >>= 4; + fprintf(stderr, "RSA-%lu encrypt_key took %15llu 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(buf[1], z, buf[0], &zzz, (const unsigned char *)"testprog", 8, find_hash("sha1"), + &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; + } + t2 >>= 11; + fprintf(stderr, "RSA-%lu decrypt_key took %15llu cycles\n", x, t2); + + + rsa_free(&key); + } +} +#else +void time_rsa(void) { fprintf(stderr, "NO RSA\n"); } +#endif + +#ifdef MKAT +/* time various KAT operations */ +void time_katja(void) +{ + katja_key key; + ulong64 t1, t2; + unsigned char buf[2][4096]; + unsigned long x, y, z, zzz; + int err, zz; + + for (x = 1024; x <= 2048; x += 256) { + t2 = 0; + for (y = 0; y < 4; y++) { + t_start(); + t1 = t_read(); + if ((err = katja_make_key(&yarrow_prng, find_prng("yarrow"), x/8, &key)) != CRYPT_OK) { + fprintf(stderr, "\n\nkatja_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; + + if (y < 3) { + rsa_free(&key); + } + } + t2 >>= 2; + fprintf(stderr, "Katja-%lu make_key took %15llu cycles\n", x, t2); + + t2 = 0; + for (y = 0; y < 16; y++) { + t_start(); + t1 = t_read(); + z = sizeof(buf[1]); + if ((err = katja_encrypt_key(buf[0], 32, buf[1], &z, "testprog", 8, &yarrow_prng, + find_prng("yarrow"), find_hash("sha1"), + &key)) != CRYPT_OK) { + fprintf(stderr, "\n\nkatja_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; + } + t2 >>= 4; + fprintf(stderr, "Katja-%lu encrypt_key took %15llu cycles\n", x, t2); + + t2 = 0; + for (y = 0; y < 2048; y++) { + t_start(); + t1 = t_read(); + zzz = sizeof(buf[0]); + if ((err = katja_decrypt_key(buf[1], z, buf[0], &zzz, "testprog", 8, find_hash("sha1"), + &zz, &key)) != CRYPT_OK) { + fprintf(stderr, "\n\nkatja_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; + } + t2 >>= 11; + fprintf(stderr, "Katja-%lu decrypt_key took %15llu cycles\n", x, t2); + + + katja_free(&key); + } +} +#else +void time_katja(void) { fprintf(stderr, "NO Katja\n"); } +#endif + +#ifdef MECC +/* time various ECC operations */ +void time_ecc(void) +{ + ecc_key key; + ulong64 t1, t2; + unsigned char buf[2][4096]; + unsigned long i, x, y, z; + int err; + static unsigned long sizes[] = { +#ifdef ECC192 +192/8, +#endif +#ifdef ECC224 +224/8, +#endif +#ifdef ECC256 +256/8, +#endif +#ifdef ECC384 +384/8, +#endif +#ifdef ECC521 +521/8, +#endif +100000}; + + 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(&yarrow_prng, find_prng("yarrow"), 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; + + if (y < 255) { + ecc_free(&key); + } + } + t2 >>= 8; + fprintf(stderr, "ECC-%lu make_key took %15llu 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, &yarrow_prng, find_prng("yarrow"), find_hash("sha1"), + &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; + } + t2 >>= 8; + fprintf(stderr, "ECC-%lu encrypt_key took %15llu cycles\n", x*8, t2); + ecc_free(&key); + } +} +#else +void time_ecc(void) { fprintf(stderr, "NO ECC\n"); } +#endif + +void time_macs_(unsigned long MAC_SIZE) +{ + unsigned char *buf, key[16], tag[16]; + ulong64 t1, t2; + unsigned long x, z; + int err, cipher_idx, hash_idx; + + fprintf(stderr, "\nMAC Timings (cycles/byte on %luKB blocks):\n", MAC_SIZE); + + buf = XMALLOC(MAC_SIZE*1024); + if (buf == NULL) { + fprintf(stderr, "\n\nout of heap yo\n\n"); + exit(EXIT_FAILURE); + } + + cipher_idx = find_cipher("aes"); + hash_idx = find_hash("sha1"); + + if (cipher_idx == -1 || hash_idx == -1) { + fprintf(stderr, "Warning the MAC tests requires AES and SHA1 to operate... so sorry\n"); + return; + } + + yarrow_read(buf, MAC_SIZE*1024, &yarrow_prng); + yarrow_read(key, 16, &yarrow_prng); + +#ifdef OMAC + t2 = -1; + for (x = 0; x < 10000; x++) { + t_start(); + t1 = t_read(); + z = 16; + if ((err = omac_memory(cipher_idx, key, 16, buf, MAC_SIZE*1024, tag, &z)) != CRYPT_OK) { + fprintf(stderr, "\n\nomac error... %s\n", error_to_string(err)); + exit(EXIT_FAILURE); + } + t1 = t_read() - t1; + if (t1 < t2) t2 = t1; + } + fprintf(stderr, "OMAC-%s\t\t%9llu\n", cipher_descriptor[cipher_idx].name, t2/(ulong64)(MAC_SIZE*1024)); +#endif + +#ifdef PMAC + t2 = -1; + for (x = 0; x < 10000; x++) { + t_start(); + t1 = t_read(); + z = 16; + if ((err = pmac_memory(cipher_idx, key, 16, buf, MAC_SIZE*1024, tag, &z)) != CRYPT_OK) { + fprintf(stderr, "\n\npmac error... %s\n", error_to_string(err)); + exit(EXIT_FAILURE); + } + t1 = t_read() - t1; + if (t1 < t2) t2 = t1; + } + fprintf(stderr, "PMAC-AES\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); +#endif + +#ifdef PELICAN + t2 = -1; + for (x = 0; x < 10000; x++) { + t_start(); + t1 = t_read(); + z = 16; + if ((err = pelican_memory(key, 16, buf, MAC_SIZE*1024, 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%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); +#endif + +#ifdef HMAC + t2 = -1; + for (x = 0; x < 10000; x++) { + t_start(); + t1 = t_read(); + z = 16; + if ((err = hmac_memory(hash_idx, key, 16, buf, MAC_SIZE*1024, tag, &z)) != CRYPT_OK) { + fprintf(stderr, "\n\nhmac error... %s\n", error_to_string(err)); + exit(EXIT_FAILURE); + } + t1 = t_read() - t1; + if (t1 < t2) t2 = t1; + } + fprintf(stderr, "HMAC-%s\t\t%9llu\n", hash_descriptor[hash_idx].name, t2/(ulong64)(MAC_SIZE*1024)); +#endif + + XFREE(buf); +} + +void time_macs(void) +{ + time_macs_(1); + time_macs_(4); + time_macs_(32); +} + +void time_encmacs_(unsigned long MAC_SIZE) +{ + unsigned char *buf, IV[16], key[16], tag[16]; + ulong64 t1, t2; + unsigned long x, z; + int err, cipher_idx; + symmetric_key skey; + + fprintf(stderr, "\nENC+MAC Timings (zero byte AAD, 16 byte IV, cycles/byte on %luKB blocks):\n", MAC_SIZE); + + buf = XMALLOC(MAC_SIZE*1024); + if (buf == NULL) { + fprintf(stderr, "\n\nout of heap yo\n\n"); + exit(EXIT_FAILURE); + } + + cipher_idx = find_cipher("aes"); + + yarrow_read(buf, MAC_SIZE*1024, &yarrow_prng); + yarrow_read(key, 16, &yarrow_prng); + yarrow_read(IV, 16, &yarrow_prng); + +#ifdef EAX_MODE + t2 = -1; + for (x = 0; x < 10000; x++) { + t_start(); + t1 = t_read(); + z = 16; + if ((err = eax_encrypt_authenticate_memory(cipher_idx, key, 16, IV, 16, NULL, 0, buf, MAC_SIZE*1024, buf, 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%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); +#endif + +#ifdef OCB_MODE + t2 = -1; + for (x = 0; x < 10000; x++) { + t_start(); + t1 = t_read(); + z = 16; + if ((err = ocb_encrypt_authenticate_memory(cipher_idx, key, 16, IV, buf, MAC_SIZE*1024, buf, tag, &z)) != CRYPT_OK) { + fprintf(stderr, "\nOCB error... %s\n", error_to_string(err)); + exit(EXIT_FAILURE); + } + t1 = t_read() - t1; + if (t1 < t2) t2 = t1; + } + fprintf(stderr, "OCB \t\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); +#endif + +#ifdef CCM_MODE + t2 = -1; + for (x = 0; x < 10000; x++) { + t_start(); + t1 = t_read(); + z = 16; + if ((err = ccm_memory(cipher_idx, key, 16, NULL, IV, 16, NULL, 0, buf, MAC_SIZE*1024, buf, 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%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); + + cipher_descriptor[cipher_idx].setup(key, 16, 0, &skey); + t2 = -1; + for (x = 0; x < 10000; x++) { + t_start(); + t1 = t_read(); + z = 16; + if ((err = ccm_memory(cipher_idx, key, 16, &skey, IV, 16, NULL, 0, buf, MAC_SIZE*1024, buf, 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%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); + cipher_descriptor[cipher_idx].done(&skey); +#endif + +#ifdef GCM_MODE + t2 = -1; + for (x = 0; x < 100; x++) { + t_start(); + t1 = t_read(); + z = 16; + if ((err = gcm_memory(cipher_idx, key, 16, IV, 16, NULL, 0, buf, MAC_SIZE*1024, buf, 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%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); + + { + gcm_state gcm; + + if ((err = gcm_init(&gcm, cipher_idx, 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, 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, buf, MAC_SIZE*1024, 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, 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%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); + } + +#endif + +} + +void time_encmacs(void) +{ + time_encmacs_(1); + time_encmacs_(4); + time_encmacs_(32); +} + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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/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_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/updatemakes.sh b/updatemakes.sh old mode 100755 new mode 100644 index 98cd90c7..a6e19061 --- a/updatemakes.sh +++ b/updatemakes.sh @@ -1,12 +1,18 @@ #!/bin/bash -./helper.pl --update-makefiles || exit 1 +bash genlist.sh > tmplist -makefiles=(makefile makefile_include.mk makefile.shared makefile.unix makefile.mingw makefile.msvc sources.cmake tests/sources.cmake) -vcproj=(libtomcrypt_VS2008.vcproj) +perl filter.pl makefile tmplist +mv -f tmp.delme makefile -if [ $# -eq 1 ] && [ "$1" == "-c" ]; then - git add ${makefiles[@]} ${vcproj[@]} doc/Doxyfile && git commit -m 'Update makefiles' -fi +perl filter.pl makefile.icc tmplist +mv -f tmp.delme makefile.icc -exit 0 +perl filter.pl makefile.shared tmplist +mv -f tmp.delme makefile.shared + +perl filter.pl makefile.msvc tmplist +sed -e 's/\.o /.obj /g' < tmp.delme > makefile.msvc + +rm -f tmplist +rm -f tmp.delme