diff --git a/.github/workflows/curl.yml b/.github/workflows/curl.yml index a89ef94d5f..156e61b38d 100644 --- a/.github/workflows/curl.yml +++ b/.github/workflows/curl.yml @@ -58,8 +58,8 @@ jobs: with: name: wolf-install-curl - - name: untar build-dir - run: tar -xf build-dir.tgz + - name: untar build-dir + run: tar -xf build-dir.tgz - name: Build curl uses: wolfSSL/actions-build-autotools-project@v1 diff --git a/.github/workflows/os-check.yml b/.github/workflows/os-check.yml index 68557a31ab..fcad812100 100644 --- a/.github/workflows/os-check.yml +++ b/.github/workflows/os-check.yml @@ -33,6 +33,8 @@ jobs: '--enable-dtls --enable-dtls13 --enable-earlydata --enable-session-ticket --enable-psk CPPFLAGS=''-DWOLFSSL_DTLS13_NO_HRR_ON_RESUME'' ', + '--enable-experimental --enable-kyber --enable-dtls --enable-dtls13 + --enable-dtls-frag-ch', ] name: make check runs-on: ${{ matrix.os }} diff --git a/.github/workflows/sssd.yml b/.github/workflows/sssd.yml new file mode 100644 index 0000000000..685c8d0783 --- /dev/null +++ b/.github/workflows/sssd.yml @@ -0,0 +1,97 @@ +name: sssd Tests + +# START OF COMMON SECTION +on: + push: + branches: [ 'master', 'main', 'release/**' ] + pull_request: + branches: [ '*' ] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true +# END OF COMMON SECTION + +jobs: + build_wolfssl: + name: Build wolfSSL + # Just to keep it the same as the testing target + runs-on: ubuntu-latest + # This should be a safe limit for the tests to run. + timeout-minutes: 4 + steps: + - name: Build wolfSSL + uses: wolfSSL/actions-build-autotools-project@v1 + with: + path: wolfssl + configure: --enable-all CFLAGS=-DWOLFSSL_NO_ASN_STRICT + install: true + check: false + + - name: tar build-dir + run: tar -zcf build-dir.tgz build-dir + + - name: Upload built lib + uses: actions/upload-artifact@v4 + with: + name: wolf-install-sssd + path: build-dir.tgz + retention-days: 5 + + sssd_check: + strategy: + fail-fast: false + matrix: + # List of releases to test + ref: [ 2.9.1 ] + name: ${{ matrix.ref }} + runs-on: ubuntu-latest + container: + image: quay.io/sssd/ci-client-devel:ubuntu-latest + env: + LD_LIBRARY_PATH: /usr/local/lib + # This should be a safe limit for the tests to run. + timeout-minutes: 20 + needs: build_wolfssl + steps: + - name: Install dependencies + run: | + # Don't prompt for anything + export DEBIAN_FRONTEND=noninteractive + sudo apt-get update + sudo apt-get install -y build-essential autoconf libldb-dev libldb2 python3-ldb bc + + - name: Setup env + run: | + ln -s samba-4.0/ldb.h /usr/include/ldb.h + ln -s samba-4.0/ldb_errors.h /usr/include/ldb_errors.h + ln -s samba-4.0/ldb_handlers.h /usr/include/ldb_handlers.h + ln -s samba-4.0/ldb_module.h /usr/include/ldb_module.h + ln -s samba-4.0/ldb_version.h /usr/include/ldb_version.h + + - name: Download lib + uses: actions/download-artifact@v4 + with: + name: wolf-install-sssd + + - name: untar build-dir + run: tar -xf build-dir.tgz + + - name: Checkout OSP + uses: actions/checkout@v4 + with: + repository: wolfssl/osp + path: osp + + - name: Build and test sssd + uses: wolfSSL/actions-build-autotools-project@v1 + with: + repository: SSSD/sssd + ref: ${{ matrix.ref }} + path: sssd + patch-file: $GITHUB_WORKSPACE/osp/sssd/${{ matrix.ref }}.patch + configure: >- + --without-samba --without-nfsv4-idmapd-plugin --with-oidc-child=no + --without-manpages WOLFSSL_INSTALL_DIR=$GITHUB_WORKSPACE/build-dir + check: true + diff --git a/.gitignore b/.gitignore index 1ed0b20338..9ea96161cb 100644 --- a/.gitignore +++ b/.gitignore @@ -443,7 +443,13 @@ debian/control *.deb # Zig build -zig-* +zig-*/ + +# Ada/Alire files +wrapper/Ada/alire/ +wrapper/Ada/config/ +wrapper/Ada/lib/ +wrapper/Ada/obj/ # PlatformIO /**/.pio diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e6f05fc68..58b7ccea1a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1877,6 +1877,10 @@ add_option("WOLFSSL_CRYPTOCB" "Enable crypto callbacks (default: disabled)" "no" "yes;no") +add_option("WOLFSSL_CRYPTOCB_NO_SW_TEST" + "Disable crypto callback SW testing (default: disabled)" + "no" "yes;no") + add_option("WOLFSSL_PKCALLBACKS" "Enable public key callbacks (default: disabled)" "no" "yes;no") @@ -2080,6 +2084,10 @@ if(WOLFSSL_CRYPTOCB) list(APPEND WOLFSSL_DEFINITIONS "-DWOLF_CRYPTO_CB") endif() +if(WOLFSSL_CRYPTOCB_NO_SW_TEST) + list(APPEND WOLFSSL_DEFINITIONS "-DWC_TEST_NO_CRYPTOCB_SW_TEST") +endif() + # Public Key Callbacks if(WOLFSSL_PKCALLBACKS) list(APPEND WOLFSSL_DEFINITIONS "-DHAVE_PK_CALLBACKS") @@ -2335,7 +2343,7 @@ endif() foreach(DEF IN LISTS WOLFSSL_DEFINITIONS) string(REGEX MATCH "^(-D)?([^=]+)(=(.*))?$" DEF_MATCH ${DEF}) - if (DEFINED CMAKE_MATCH_4) + if (NOT "${CMAKE_MATCH_4}" STREQUAL "") set(${CMAKE_MATCH_2} ${CMAKE_MATCH_4}) # message("set(${CMAKE_MATCH_2} ${CMAKE_MATCH_4})") else() diff --git a/ChangeLog.md b/ChangeLog.md index 0939a65940..431851ad72 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -220,7 +220,7 @@ fixed this omission in several PRs for this release. * [Low] CVE-2023-6936: A potential heap overflow read is possible in servers connecting over TLS 1.3 when the optional `WOLFSSL_CALLBACKS` has been defined. The out of bounds read can occur when a server receives a malicious malformed ClientHello. Users should either discontinue use of `WOLFSSL_CALLBACKS` on the server side or update versions of wolfSSL to 5.6.6. Thanks to the tlspuffin fuzzer team for the report which was designed and developed by; Lucca Hirschi (Inria, LORIA), Steve Kremer (Inria, LORIA), and Max Ammann (Trail of Bits). The fix for this issue is located in the following GitHub Pull Request: https://github.com/wolfSSL/wolfssl/pull/6949. -* [Low] A side channel vulnerability with AES T-Tables is possible in a very controlled environment where precision sub-cache-line inspection can happen, such as inside an Intel SGX enclave. This can lead to recovery of the AES key. To prevent this type of attack, wolfSSL added an AES bitsliced implementation which can be enabled with the “`--enable-aes-bitsliced`” configure option. Thanks to Florian Sieck, Zhiyuan Zhang, Sebastian Berndt, Chitchanok Chuengsatiansup, Thomas Eisenbarth, and Yuval Yarom for the report (Universities of Lübeck, Melbourne, Adelaide and Bochum). The fix for this issue is located in the following GitHub Pull Request: https://github.com/wolfSSL/wolfssl/pull/6854. +* [Low] CVE-2024-1543: A side channel vulnerability with AES T-Tables is possible in a very controlled environment where precision sub-cache-line inspection can happen, such as inside an Intel SGX enclave. This can lead to recovery of the AES key. To prevent this type of attack, wolfSSL added an AES bitsliced implementation which can be enabled with the “`--enable-aes-bitsliced`” configure option. Thanks to Florian Sieck, Zhiyuan Zhang, Sebastian Berndt, Chitchanok Chuengsatiansup, Thomas Eisenbarth, and Yuval Yarom for the report (Universities of Lübeck, Melbourne, Adelaide and Bochum). The fix for this issue is located in the following GitHub Pull Request: https://github.com/wolfSSL/wolfssl/pull/6854. * [Low] CVE-2023-6937: wolfSSL prior to 5.6.6 did not check that messages in a single (D)TLS record do not span key boundaries. As a result, it was possible to combine (D)TLS messages using different keys into one (D)TLS record. The most extreme edge case is that, in (D)TLS 1.3, it was possible that an unencrypted (D)TLS 1.3 record from the server containing first a ServerHello message and then the rest of the first server flight would be accepted by a wolfSSL client. In (D)TLS 1.3 the handshake is encrypted after the ServerHello but a wolfSSL client would accept an unencrypted flight from the server. This does not compromise key negotiation and authentication so it is assigned a low severity rating. Thanks to Johannes Wilson for the report (Sectra Communications and Linköping University). The fix for this issue is located in the following GitHub Pull Request: https://github.com/wolfSSL/wolfssl/pull/7029. diff --git a/Docker/Dockerfile b/Docker/Dockerfile index 32b10900ce..e6c3cd35d3 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -40,10 +40,12 @@ RUN cd /opt/sources && git clone --single-branch https://github.com/cisco/hash-s # Install pkixssh to /opt/pkixssh for X509 interop testing with wolfSSH RUN mkdir /var/empty -RUN cd /opt/sources && wget -q -O- https://roumenpetrov.info/secsh/src/pkixssh-14.1.1.tar.gz | tar xzf - && cd pkixssh-14.1.1 && ./configure --prefix=/opt/pkixssh/ --exec-prefix=/opt/pkixssh/ && make install +RUN cd /opt/sources && wget -q -O- https://roumenpetrov.info/secsh/src/pkixssh-15.1.tar.gz | tar xzf - && cd pkixssh-15.1 && ./configure --prefix=/opt/pkixssh/ --exec-prefix=/opt/pkixssh/ && make install # Install udp/tcp-proxy RUN cd /opt/sources && git clone --depth=1 --single-branch --branch=main http://github.com/wolfssl/udp-proxy && cd udp-proxy && make && cp tcp_proxy udp_proxy /bin/. +# Install libbacktrace +RUN cd /opt/sources && git clone --depth=1 --single-branch https://github.com/ianlancetaylor/libbacktrace.git && cd libbacktrace && mkdir build && cd build && ../configure && make && make install # Allow non-root to use tcpdump (will need NET_RAW and NET_ADMIN capability when running the container) RUN setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/tcpdump diff --git a/Docker/buildAndPush.sh b/Docker/buildAndPush.sh index d66e2c8486..444edaca09 100755 --- a/Docker/buildAndPush.sh +++ b/Docker/buildAndPush.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Assume we're in wolfssl/Docker WOLFSSL_DIR=$(builtin cd ${BASH_SOURCE%/*}/..; pwd) @@ -18,18 +18,37 @@ docker build -t wolfssl/wolfssl-builder:${CUR_DATE} ${DOCKER_BUILD_OPTIONS} "${W docker tag wolfssl/testing-cross-compiler:${CUR_DATE} wolfssl/testing-cross-compiler:latest if [ $? -eq 0 ]; then - echo "Pushing containers to DockerHub" - docker push wolfssl/wolfssl-builder:${CUR_DATE} && docker push wolfssl/wolfssl-builder:latest && \ - docker push wolfssl/testing-cross-compiler:${CUR_DATE} && docker push wolfssl/testing-cross-compiler:latest + echo "Push containers to DockerHub [y/N]? " + read val + if [ "$val" = "y" ]; then + docker push wolfssl/wolfssl-builder:${CUR_DATE} && docker push wolfssl/wolfssl-builder:latest && \ + docker push wolfssl/testing-cross-compiler:${CUR_DATE} && docker push wolfssl/testing-cross-compiler:latest + if [ $? -ne 0 ]; then + echo "Warning: push failed. Continuing" + ((NUM_FAILURES++)) + fi + fi else echo "Warning: Build wolfssl/wolfssl-builder failed. Continuing" ((NUM_FAILURES++)) fi echo "Building wolfssl/wolfCLU:${CUR_DATE}" -docker buildx build --pull --push --build-arg DUMMY=${CUR_DATE} -t wolfssl/wolfclu:${CUR_DATE} --platform=linux/amd64,linux/arm64,linux/arm/v7 "${WOLFSSL_DIR}/Docker/wolfCLU" && \ -docker buildx build --pull --push --build-arg DUMMY=${CUR_DATE} -t wolfssl/wolfclu:latest --platform=linux/amd64,linux/arm64,linux/arm/v7 "${WOLFSSL_DIR}/Docker/wolfCLU" -if [ $? -ne 0 ]; then +DOCKER_ARGS="--pull --build-arg DUMMY=${CUR_DATE} --platform=linux/amd64,linux/arm64,linux/arm/v7 ${WOLFSSL_DIR}/Docker/wolfCLU" +docker buildx build -t wolfssl/wolfclu:${CUR_DATE} ${DOCKER_ARGS} && \ + docker buildx build -t wolfssl/wolfclu:latest ${DOCKER_ARGS} +if [ $? -eq 0 ]; then + echo "Push containers to DockerHub [y/N]? " + read val + if [ "$val" = "y" ]; then + docker buildx build ${DOCKER_ARGS} --push -t wolfssl/wolfclu:${CUR_DATE} && \ + docker buildx build ${DOCKER_ARGS} --push -t wolfssl/wolfclu:latest + if [ $? -ne 0 ]; then + echo "Warning: push failed. Continuing" + ((NUM_FAILURES++)) + fi + fi +else echo "Warning: Build wolfssl/wolfclu failed. Continuing" ((NUM_FAILURES++)) fi diff --git a/Docker/run.sh b/Docker/run.sh index 3820425bb3..880e1e44f6 100755 --- a/Docker/run.sh +++ b/Docker/run.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash echo "Running with \"${*}\"..." diff --git a/Docker/wolfCLU/Dockerfile b/Docker/wolfCLU/Dockerfile index 03b6a6fee3..da10d73dd6 100644 --- a/Docker/wolfCLU/Dockerfile +++ b/Docker/wolfCLU/Dockerfile @@ -3,7 +3,7 @@ FROM ubuntu as BUILDER ARG DEPS_WOLFSSL="build-essential autoconf libtool zlib1g-dev libuv1-dev libpam0g-dev git libpcap-dev libcurl4-openssl-dev bsdmainutils netcat-traditional iputils-ping bubblewrap" RUN DEBIAN_FRONTEND=noninteractive apt update && apt install -y apt-utils \ - && apt install -y ${DEPS_WOLFSSL} ${DEPS_LIBOQS} \ + && apt install -y ${DEPS_WOLFSSL} \ && apt clean -y && rm -rf /var/lib/apt/lists/* ARG NUM_CPU=16 diff --git a/Docker/yocto/buildAndPush.sh b/Docker/yocto/buildAndPush.sh index 8c749502c6..87558eb769 100755 --- a/Docker/yocto/buildAndPush.sh +++ b/Docker/yocto/buildAndPush.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Assume we're in wolfssl/Docker/yocto WOLFSSL_DIR=$(builtin cd ${BASH_SOURCE%/*}/../..; pwd) diff --git a/IDE/ARDUINO/sketches/wolfssl_server/README.md b/IDE/ARDUINO/sketches/wolfssl_server/README.md index 523eb08729..aee5c66307 100644 --- a/IDE/ARDUINO/sketches/wolfssl_server/README.md +++ b/IDE/ARDUINO/sketches/wolfssl_server/README.md @@ -35,7 +35,7 @@ press the reset button or power cycle the Arduino before making a connection. Here's one possible script to test the server from a command-line client: ```bash -#!/bin/bash +#!/usr/bin/env bash echo "client log " > client_log.txt counter=1 THIS_ERR=0 diff --git a/IDE/CRYPTOCELL/user_settings.h b/IDE/CRYPTOCELL/user_settings.h index 3f1866e90e..b6ffe4c781 100644 --- a/IDE/CRYPTOCELL/user_settings.h +++ b/IDE/CRYPTOCELL/user_settings.h @@ -401,6 +401,7 @@ extern "C" { /* prototypes for user heap override functions */ /* Note: Realloc only required for normal math */ + /* Note2: XFREE(NULL) must be properly handled */ #include /* for size_t */ extern void *myMalloc(size_t n, void* heap, int type); extern void myFree(void *p, void* heap, int type); diff --git a/IDE/Espressif/ESP-IDF/compileAllExamples.sh b/IDE/Espressif/ESP-IDF/compileAllExamples.sh index 536dc295c1..95a85d9068 100755 --- a/IDE/Espressif/ESP-IDF/compileAllExamples.sh +++ b/IDE/Espressif/ESP-IDF/compileAllExamples.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # # testing script: compileAllExamples # diff --git a/IDE/Espressif/ESP-IDF/examples/template/components/wolfssl/Kconfig b/IDE/Espressif/ESP-IDF/examples/template/components/wolfssl/Kconfig new file mode 100644 index 0000000000..29d69a741f --- /dev/null +++ b/IDE/Espressif/ESP-IDF/examples/template/components/wolfssl/Kconfig @@ -0,0 +1,366 @@ +# Kconfig template +# +# Copyright (C) 2006-2024 wolfSSL Inc. All rights reserved. +# +# This file is part of wolfSSL. +# +# wolfSSL is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# wolfSSL is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA +# + +# Kconfig File Version 5.7.0.001 for wolfssl_test + +# Kconfig Format Rules +# +# See: +# https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/kconfig.html +# +# Format rules for Kconfig files are as follows: +# +# Option names in any menus should have consistent prefixes. The prefix +# currently should have at least 3 characters. +# +# The unit of indentation should be 4 spaces. All sub-items belonging to a +# parent item are indented by one level deeper. For example, menu is indented +# by 0 spaces, config menu by 4 spaces, help in config by 8 spaces, and the +# text under help by 12 spaces. +# +# No trailing spaces are allowed at the end of the lines. +# +# The maximum length of options is NOT 50 characters as documented. +# kconfcheck will complain that options should be 40 at most. +# +# Fix option lengths first. Superflous errors on other lines may occur. +# +# The maximum length of lines is 120 characters. +# +# python -m kconfcheck +# +# --------------------------------------------------------------------------------------------------------------------- +# Begin main wolfSSL configuration menu +# --------------------------------------------------------------------------------------------------------------------- +menu "wolfSSL" + config TLS_STACK_WOLFSSL + bool "Include wolfSSL in ESP-TLS" + default y + select FREERTOS_ENABLE_BACKWARD_COMPATIBILITY + help + Includes wolfSSL in ESP-TLS so that it can be compiled with wolfSSL as its SSL/TLS library. + + menu "Hardening" + config ESP_WOLFSSL_WC_NO_HARDEN + bool "Disable wolfSSL hardening" + default n + help + Sets WC_NO_HARDEN + + config ESP_WOLFSSL_TFM_TIMING_RESISTANT + bool "Enable TFM Timing Resistant Code" + default n + help + Sets TFM_TIMING_RESISTANT. + + endmenu # Hardening + + config ESP_WOLFSSL_ENABLE_BENCHMARK + bool "Enable wolfSSL Benchmark Library" + default n + help + Enables wolfcrypt/benchmark/benchmark.c code for benchmark metrics. Disables NO_CRYPT_BENCHMARK. + + + menu "Benchmark Debug" + config ESP_DEBUG_WOLFSSL_BENCHMARK_TIMING + bool "Enable benchmark timing debug" + depends on ESP_WOLFSSL_ENABLE_BENCHMARK + default n + help + Enable wolfssl debug for benchmark metric timing (CPU Cycles, RTOS ticks, etc). + + config ESP_WOLFSSL_BENCHMARK_TIMER_DEBUG + bool "Enable benchmark timer debug" + depends on ESP_WOLFSSL_ENABLE_BENCHMARK + default n + help + Turn on timer debugging (used when CPU cycles not available) + + endmenu # Benchmark Debug + + # ----------------------------------------------------------------------------------------------------------------- + # wolfCrypt Test + # ----------------------------------------------------------------------------------------------------------------- + config ESP_WOLFSSL_ENABLE_TEST + bool "Enable wolfCrypt test Library" + default n + help + Enables wolfcrypt/test/test.c code for testing. Disables NO_CRYPT_TEST. + + menu "wolfCrypt tests" + config WOLFSSL_HAVE_WOLFCRYPT_TEST_OPTIONS + bool "Enable wolfCrypt Test Options" + depends on ESP_WOLFSSL_ENABLE_TEST + default n + help + Enables HAVE_WOLFCRYPT_TEST_OPTIONS + endmenu # wolfCrypt tests + + # ----------------------------------------------------------------------------------------------------------------- + # Apple HomeKit Options + # ----------------------------------------------------------------------------------------------------------------- + menu "Apple HomeKit" + config WOLFSSL_APPLE_HOMEKIT + bool "Enable Apple HomeKit options" + default n + help + Enables FP_MAX_BITS (8192 * 2), SRP, ChaCha, Poly1305, Base64 encoding needed for Apple HomeKit. + endmenu # Apple HomeKit + # ----------------------------------------------------------------------------------------------------------------- + + config ESP_WOLFSSL_DISABLE_MY_ECC + bool "Disable ECC in my project" + default "n" + help + ECC is enabled by default. Select this option to disable. + + config ESP_WOLFSSL_ENABLE_MY_USE_RSA + bool "Enable RSA in my project" + default "n" + help + RSA is disabled by default. Select this option to enable. + + config ESP_WOLFSSL_BENCHMARK + bool "Enable wolfSSL Benchmark" + default n + help + Enables user settings relevant to benchmark code + + config ESP_TLS_USING_WOLFSSL_SPECIFIED + bool "Use the specified wolfssl for ESP-TLS" + default Y + help + Includes wolfSSL from specified directory (not using esp-wolfssl). + + config ESP_WOLFSSL_NO_USE_FAST_MATH + bool "Disable FAST_MATH library and all ESP32 Hardware Acceleration" + select ESP_WOLFSSL_NO_HW + select ESP_WOLFSSL_NO_HW_AES + select ESP_WOLFSSL_NO_HW_HASH + select ESP_WOLFSSL_NO_HW_RSA_PRI + select ESP_WOLFSSL_NO_HW_RSA_PRI_MP_MUL + select ESP_WOLFSSL_NO_HW_RSA_PRI_MULMOD + select ESP_WOLFSSL_NO_HW_RSA_PRI_EXPTMOD + default n + help + When disabling all hardware acceleration for smaller memory footprint, + disabling TFM fast math provides faster wolfSSL software algorithms in an + even smaller flash memory footprint. + + menu "Protocol Config" + config WOLFSSL_HAVE_ALPN + bool "Enable ALPN (Application Layer Protocol Negotiation) in wolfSSL" + default y + + config WOLFSSL_ALLOW_TLS12 + bool "Allow TLS 1.2" + default n + help + Allow TLS to fallback to TLS1.2. Memory footprint will likely be larger for TLS1.2. + When disabled HTTPS and MQTT over TLS connections will fail if TLS1.3 not accepted. + + config WOLFSSL_HAVE_OCSP + bool "Enable OCSP (Online Certificate Status Protocol) in wolfSSL" + default n + endmenu # Protocol Config + # ----------------------------------------------------------------------------------------------------------------- + + # ----------------------------------------------------------------------------------------------------------------- + menu "wolfSSL ESP-TLS" + config TLS_STACK_WOLFSSL + bool "Include wolfSSL in ESP-TLS" + default y + select FREERTOS_ENABLE_BACKWARD_COMPATIBILITY + help + Includes wolfSSL in ESP-TLS so that it can be compiled with wolfSSL as its SSL/TLS library. + endmenu # wolfSSL ESP-TLS + # ----------------------------------------------------------------------------------------------------------------- + + # ----------------------------------------------------------------------------------------------------------------- + config ESP_WOLFSSL_ALT_HARDWARE_ACCELERATION + bool "Modify default hardware acceleration settings" + default n + help + Typically used for debugging, analysis, or optimizations. The default + hardware acceleration features can be each manually adjusted. + + menu "wolfSSL Hardware Acceleration" + + config ESP_WOLFSSL_NO_ESP32_CRYPT + bool "Disable all ESP32 Hardware Acceleration" + depends on ESP_WOLFSSL_ALT_HARDWARE_ACCELERATION + default n + select ESP_WOLFSSL_NO_HW_AES + select ESP_WOLFSSL_NO_HW_HASH + select ESP_WOLFSSL_NO_HW_RSA_PRI + select ESP_WOLFSSL_NO_HW_RSA_PRI_MP_MUL + select ESP_WOLFSSL_NO_HW_RSA_PRI_MULMOD + select ESP_WOLFSSL_NO_HW_RSA_PRI_EXPTMOD + help + Hardware acceleration enabled by default. When selected defines: NO_ESP32_CRYPT. + Consider disabling FASTMATH (other libraries are faster in software and smaller) + + config ESP_WOLFSSL_NO_HW_AES + bool "Disable all ESP32 AES Hardware Acceleration" + depends on ESP_WOLFSSL_ALT_HARDWARE_ACCELERATION + default n + help + Hardware acceleration enabled by default.When selected defines: NO_HW_AES + + config ESP_WOLFSSL_NO_HW_HASH + bool "Disable all ESP32 SHA Hash Hardware Acceleration" + depends on ESP_WOLFSSL_ALT_HARDWARE_ACCELERATION + default n + help + Hardware acceleration enabled by default. When selected defines: NO_HW_HASH + + config ESP_WOLFSSL_NO_HW_RSA_PRI + bool "Disable all ESP32 RSA Hardware Acceleration" + depends on ESP_WOLFSSL_ALT_HARDWARE_ACCELERATION + default n + select ESP_WOLFSSL_NO_HW_PRI_MP_MUL + select ESP_WOLFSSL_NO_HW_RSA_PRI_MULMOD + select ESP_WOLFSSL_NO_HW_RSA_PRI_EXPTMOD + help + Hardware acceleration enabled by default. When selected defines: NO_HW_RSA_PRI + + config ESP_WOLFSSL_NO_HW_RSA_PRI_MP_MUL + bool "Disable all ESP32 Multiplication Hardware Acceleration" + depends on ESP_WOLFSSL_ALT_HARDWARE_ACCELERATION + default n + help + Hardware acceleration enabled by default. When selected defines: NO_HW_RSA_PRI_MP_MUL + + config ESP_WOLFSSL_NO_HW_RSA_PRI_MULMOD + bool "Disable all ESP32 Modular Multiplication Hardware Acceleration" + depends on ESP_WOLFSSL_ALT_HARDWARE_ACCELERATION + default n + help + Hardware acceleration enabled by default. When selected defines: NO_HW_RSA_PRI_MULMOD + + config ESP_WOLFSSL_NO_HW_RSA_PRI_EXPTMOD + bool "Disable all ESP32 RSA Exponential Math Hardware Acceleration" + depends on ESP_WOLFSSL_ALT_HARDWARE_ACCELERATION + default n + help + Hardware acceleration enabled by default. + Select this option to force disable: NO_HW_RSA_PRI_EXPTMOD + + endmenu # wolfSSL Hardware Acceleration + # ----------------------------------------------------------------------------------------------------------------- + + # ----------------------------------------------------------------------------------------------------------------- + menu "wolfSSL Experimental Options" + + config ESP_WOLFSSL_EXPERIMENTAL_SETTINGS + bool "Enable wolfSSL Experimental Settings" + default n + help + Enables experimental settings for wolfSSL. See documentation. + + config ESP_WOLFSSL_ENABLE_KYBER + bool "Enable wolfSSL Kyber" + default n + help + Enable debugging messages for wolfSSL. See user_settings.h for additional debug options. + + endmenu # wolfSSL Experimental Options + # ----------------------------------------------------------------------------------------------------------------- + + # ----------------------------------------------------------------------------------------------------------------- + menu "wolfSSL Debug Options" + config ESP_WOLFSSL_DEBUG_WOLFSSL + bool "Enable wolfSSL Debugging" + default n + help + Enable debugging messages for wolfSSL. See user_settings.h for additional debug options. + endmenu # wolfSSL Debug Options + # ----------------------------------------------------------------------------------------------------------------- + + # ----------------------------------------------------------------------------------------------------------------- + menu "wolfSSL Customization" + config CUSTOM_SETTING_WOLFSSL_ROOT + string "Enter a path for wolfSSL source code" + default "~/workspace/wolfssl" + help + This option lets you specify a directory for the wolfSSL source code (typically a git clone). + Enter the path using forward slashes (e.g., C:/myfolder/mysubfolder) or double backslashes + (e.g., C:\\myfolder\\mysubfolder). + + endmenu # wolfSSL Customization + # ----------------------------------------------------------------------------------------------------------------- + + # ----------------------------------------------------------------------------------------------------------------- + menu "Component Config" + config IGNORE_ESP_IDF_WOLFSSL_COMPONENT + bool "Ignore the ESP-IDF component of wolfSSL (if present)" + default n + help + Ignores wolfSSL present in the esp-idf/components directory. Requires wolfssl as a local component. + + config IGNORE_LOCAL_WOLFSSL_COMPONENT + bool "Ignore the local component of wolfSSL (if present)" + default n + help + Ignores wolfSSL present in the local project components directory. + Requires wolfssl as a ESP-IDF component. + + endmenu # Component Config + # ----------------------------------------------------------------------------------------------------------------- + +endmenu # wolfSSL +# --------------------------------------------------------------------------------------------------------------------- + + +# --------------------------------------------------------------------------------------------------------------------- +menu "wolfSSH" + config ESP_ENABLE_WOLFSSH + bool "Enable wolfSSH options" + default n + help + Enables WOLFSSH_TERM, WOLFSSL_KEY_GEN, WOLFSSL_PTHREADS, WOLFSSH_TEST_SERVER, WOLFSSH_TEST_THREADING + + config ESP_WOLFSSL_DEBUG_WOLFSSH + bool "Enable wolfSSH debugging" + default n + help + Enable wolfSSH debugging macro. See user_settings.h + +endmenu # wolfSSH +# --------------------------------------------------------------------------------------------------------------------- + +# --------------------------------------------------------------------------------------------------------------------- +menu "wolfMQTT" + config ESP_ENABLE_WOLFMQTT + bool "Enable wolfMQTT options" + default n + help + Enables WOLFMQTT + + config ESP_WOLFSSL_DEBUG_WOLFMQTT + bool "Enable wolfMQTT debugging" + default n + help + Enable wolfMQTT debugging macro. See user_settings.h + +endmenu # wolfMQTT +# --------------------------------------------------------------------------------------------------------------------- diff --git a/IDE/Espressif/ESP-IDF/examples/template/components/wolfssl/include/user_settings.h b/IDE/Espressif/ESP-IDF/examples/template/components/wolfssl/include/user_settings.h index 1a13d10fe8..118e243c15 100644 --- a/IDE/Espressif/ESP-IDF/examples/template/components/wolfssl/include/user_settings.h +++ b/IDE/Espressif/ESP-IDF/examples/template/components/wolfssl/include/user_settings.h @@ -1,4 +1,4 @@ -/* user_settings.h +/* wolfssl-component include/user_settings.h * * Copyright (C) 2006-2024 wolfSSL Inc. * @@ -18,19 +18,52 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ +#define WOLFSSL_ESPIDF_COMPONENT_VERSION 0x + +/* The Espressif project config file. See also sdkconfig.defaults */ +#include "sdkconfig.h" /* This user_settings.h is for Espressif ESP-IDF * * Standardized wolfSSL Espressif ESP32 + ESP8266 user_settings.h V5.7.0-1 * - * Do not include any wolfssl headers here + * Do not include any wolfssl headers here. * * When editing this file: - * ensure wolfssl_test and wolfssl_benchmark settings match. + * ensure all examples match. The template example is the reference. */ -/* The Espressif project config file. See also sdkconfig.defaults */ -#include "sdkconfig.h" +/* Naming convention: (see also esp32-crypt.h for the reference source). + * + * CONFIG_ + * This prefix indicates the setting came from the sdkconfig / Kconfig. + * + * May or may not be related to wolfSSL. + * + * The name after this prefix must exactly match that in the Kconfig file. + * + * WOLFSSL_ + * Typical of many, but not all wolfSSL macro names. + * + * Applies to all wolfSSL products such as wolfSSH, wolfMQTT, etc. + * + * May or may not have a corresponding sdkconfig / Kconfig control. + * + * ESP_WOLFSSL_ + * These are NOT valid wolfSSL macro names. These are names only used in + * the ESP-IDF Kconfig files. When parsed, they will have a "CONFIG_" + * suffix added. See next section. + * + * CONFIG_ESP_WOLFSSL_ + * This is a wolfSSL-specific macro that has been defined in the ESP-IDF + * via the sdkconfig / menuconfig. Any text after this prefix should + * exactly match an existing wolfSSL macro name. + * + * Applies to all wolfSSL products such as wolfSSH, wolfMQTT, etc. + * + * These macros may also be specific to only the project or environment, + * and possibly not used anywhere else in the wolfSSL libraries. + */ /* The Espressif sdkconfig will have chipset info. ** @@ -46,33 +79,180 @@ #undef WOLFSSL_ESPIDF #define WOLFSSL_ESPIDF -/* We don't use WiFi, so don't compile in the esp-sdk-lib WiFi helpers: */ -#define NO_ESP_SDK_WIFI +/* Test various user_settings between applications by selecting example apps + * in `idf.py menuconfig` for Example wolfSSL Configuration settings: */ + +/* wolfSSL Examples */ +#ifdef CONFIG_WOLFSSL_EXAMPLE_NAME_TEMPLATE + /* See https://github.com/wolfSSL/wolfssl/tree/master/IDE/Espressif/ESP-IDF/examples/template */ + /* We don't use WiFi, so don't compile in the esp-sdk-lib WiFi helpers: */ + /* #define USE_WOLFSSL_ESP_SDK_WIFI */ +#elif CONFIG_WOLFSSL_EXAMPLE_NAME_TEST + /* See https://github.com/wolfSSL/wolfssl/tree/master/IDE/Espressif/ESP-IDF/examples/wolfssl_test */ + /* We don't use WiFi, so don't compile in the esp-sdk-lib WiFi helpers: */ + /* #define USE_WOLFSSL_ESP_SDK_WIFI */ + #define TEST_ESPIDF_ALL_WOLFSSL + +#elif CONFIG_WOLFSSL_EXAMPLE_NAME_BENCHMARK + /* See https://github.com/wolfSSL/wolfssl/tree/master/IDE/Espressif/ESP-IDF/examples/wolfssl_benchmark */ + /* We don't use WiFi, so don't compile in the esp-sdk-lib WiFi helpers: */ + /* #define USE_WOLFSSL_ESP_SDK_WIFI */ +#elif CONFIG_WOLFSSL_EXAMPLE_NAME_TLS_CLIENT + /* See https://github.com/wolfSSL/wolfssl/tree/master/IDE/Espressif/ESP-IDF/examples/wolfssl_client */ + #define USE_WOLFSSL_ESP_SDK_WIFI +#elif CONFIG_WOLFSSL_EXAMPLE_NAME_TLS_SERVER + /* See https://github.com/wolfSSL/wolfssl/tree/master/IDE/Espressif/ESP-IDF/examples/wolfssl_server */ + #define USE_WOLFSSL_ESP_SDK_WIFI + +/* wolfSSH Examples */ +#elif CONFIG_WOLFSSL_EXAMPLE_NAME_WOLFSSH_TEMPLATE + /* See https://github.com/wolfSSL/wolfssh/tree/master/ide/Espressif/ESP-IDF/examples/wolfssh_template */ + #define USE_WOLFSSL_ESP_SDK_WIFI +#elif CONFIG_WOLFSSL_EXAMPLE_NAME_WOLFSSH_ECHOSERVER + /* See https://github.com/wolfSSL/wolfssh/tree/master/ide/Espressif/ESP-IDF/examples/wolfssh_echoserver */ + #define USE_WOLFSSL_ESP_SDK_WIFI +#elif CONFIG_WOLFSSL_EXAMPLE_NAME_ESP32_SSH_SERVER + /* See https://github.com/wolfSSL/wolfssh-examples/tree/main/Espressif/ESP32/ESP32-SSH-Server */ + #define USE_WOLFSSL_ESP_SDK_WIFI +#elif CONFIG_WOLFSSL_EXAMPLE_NAME_ESP8266_SSH_SERVER + /* See https://github.com/wolfSSL/wolfssh-examples/tree/main/Espressif/ESP8266/ESP8266-SSH-Server */ + #define USE_WOLFSSL_ESP_SDK_WIFI + +/* wolfMQTT Examples */ +#elif CONFIG_WOLFSSL_EXAMPLE_NAME_WOLFMQTT_TEMPLATE + /* See https://github.com/wolfSSL/wolfMQTT/tree/master/IDE/Espressif/ESP-IDF/examples/wolfmqtt_template */ + #define USE_WOLFSSL_ESP_SDK_WIFI +#elif CONFIG_WOLFSSL_EXAMPLE_NAME_WOLFMQTT_AWS_IOT_MQTT + /* See https://github.com/wolfSSL/wolfMQTT/tree/master/IDE/Espressif/ESP-IDF/examples/AWS_IoT_MQTT */ + #define USE_WOLFSSL_ESP_SDK_WIFI + +/* wolfTPM Examples */ +#elif CONFIG_WOLFTPM_EXAMPLE_NAME_ESPRESSIF + /* See https://github.com/wolfSSL/wolfTPM/tree/master/IDE/Espressif */ + #define USE_WOLFSSL_ESP_SDK_WIFI + +/* Apple HomeKit Examples */ +#elif CONFIG_WOLFSSL_APPLE_HOMEKIT + /* See https://github.com/AchimPieters/esp32-homekit-demo */ + +/* no example selected */ +#elif CONFIG_WOLFSSL_EXAMPLE_NAME_NONE + /* We'll assume the app needs to use wolfSSL sdk lib function */ + #define USE_WOLFSSL_ESP_SDK_WIFI + +/* Unknown config */ +#else + /* the code is older or does not have application name defined. */ +#endif /* Example wolfSSL Configuration app settings */ + + +#if defined(CONFIG_TLS_STACK_WOLFSSL) && (CONFIG_TLS_STACK_WOLFSSL) + /* When using ESP-TLS, some old algoritms such as SHA1 are no longer + * enabled in wolfSSL, except for the OpenSSL compatibility. So enable + * that here: */ + #define OPENSSL_EXTRA +#endif /* Experimental Kyber */ -#if 0 +#ifdef CONFIG_WOLFSSL_ENABLE_KYBER /* Kyber typically needs a minimum 10K stack */ #define WOLFSSL_EXPERIMENTAL_SETTINGS #define WOLFSSL_HAVE_KYBER #define WOLFSSL_WC_KYBER #define WOLFSSL_SHA3 + #if defined(CONFIG_IDF_TARGET_ESP8266) + /* With limited RAM, we'll disable some of the Kyber sizes: */ + #define WOLFSSL_NO_KYBER1024 + #define WOLFSSL_NO_KYBER768 + #define NO_SESSION_CACHE + #endif +#endif + +/* Pick a cert buffer size: */ +/* #define USE_CERT_BUFFERS_2048 */ +/* #define USE_CERT_BUFFERS_1024 */ +#define USE_CERT_BUFFERS_2048 + +/* The Espressif sdkconfig will have chipset info. +** +** Some possible values: +** +** CONFIG_IDF_TARGET_ESP32 +** CONFIG_IDF_TARGET_ESP32S2 +** CONFIG_IDF_TARGET_ESP32S3 +** CONFIG_IDF_TARGET_ESP32C3 +** CONFIG_IDF_TARGET_ESP32C6 +*/ + +/* Optionally enable Apple HomeKit from compiler directive or Kconfig setting */ +#if defined(WOLFSSL_APPLE_HOMEKIT) || defined(CONFIG_WOLFSSL_APPLE_HOMEKIT) + /* SRP is known to need 8K; slow on some devices */ + #define FP_MAX_BITS (8192 * 2) + #define WOLFCRYPT_HAVE_SRP + #define HAVE_CHACHA + #define HAVE_POLY1305 + #define WOLFSSL_BASE64_ENCODE + #endif /* Apple HomeKit settings */ + +#if defined(CONFIG_ESP_TLS_USING_WOLFSSL) + /* The ESP-TLS */ + #define HAVE_ALPN + #define HAVE_SNI + #define OPENSSL_EXTRA_X509_SMALL #endif +/* Optionally enable some wolfSSH settings */ +#if defined(ESP_ENABLE_WOLFSSH) || defined(CONFIG_ESP_ENABLE_WOLFSSH) + /* The default SSH Windows size is massive for an embedded target. + * Limit it: */ + #define DEFAULT_WINDOW_SZ 2000 + + /* These may be defined in cmake for other examples: */ + #undef WOLFSSH_TERM + #define WOLFSSH_TERM + + /* optional debug */ + /* #undef DEBUG_WOLFSSH */ + /* #define DEBUG_WOLFSSH */ + + #undef WOLFSSL_KEY_GEN + #define WOLFSSL_KEY_GEN + + #undef WOLFSSL_PTHREADS + #define WOLFSSL_PTHREADS + + #define WOLFSSH_TEST_SERVER + #define WOLFSSH_TEST_THREADING +#endif /* ESP_ENABLE_WOLFSSH */ + + +/* Not yet using WiFi lib, so don't compile in the esp-sdk-lib WiFi helpers: */ +/* #define USE_WOLFSSL_ESP_SDK_WIFI */ + /* * ONE of these Espressif chip families will be detected from sdkconfig: * * WOLFSSL_ESP32 + * WOLFSSL_ESPWROOM32SE * WOLFSSL_ESP8266 + * + * following ifdef detection only for syntax highlighting: */ -#undef WOLFSSL_ESPWROOM32SE -#undef WOLFSSL_ESP8266 -#undef WOLFSSL_ESP32 +#ifdef WOLFSSL_ESPWROOM32SE + #undef WOLFSSL_ESPWROOM32SE +#endif +#ifdef WOLFSSL_ESP8266 + #undef WOLFSSL_ESP8266 +#endif +#ifdef WOLFSSL_ESP32 + #undef WOLFSSL_ESP32 +#endif /* See below for chipset detection from sdkconfig.h */ /* when you want to use SINGLE THREAD. Note Default ESP-IDF is FreeRTOS */ /* #define SINGLE_THREADED */ -/* SMALL_SESSION_CACHE saves a lot of RAM for ClientCache and SessionCache. +/* Small session cache saves a lot of RAM for ClientCache and SessionCache. * Memory requirement is about 5KB, otherwise 20K is needed when not specified. * If extra small footprint is needed, try MICRO_SESSION_CACHE (< 1K) * When really desperate or no TLS used, try NO_SESSION_CACHE. */ @@ -92,8 +272,128 @@ /* RSA_LOW_MEM: Half as much memory but twice as slow. */ #define RSA_LOW_MEM +/* Uncommon settings for testing only */ +#ifdef TEST_ESPIDF_ALL_WOLFSSL + #define WOLFSSL_MD2 + #define HAVE_BLAKE2 + #define HAVE_BLAKE2B + #define HAVE_BLAKE2S + + #define WC_RC2 + #define WOLFSSL_ALLOW_RC4 + + #define HAVE_POLY1305 + + #define WOLFSSL_AES_128 + #define WOLFSSL_AES_OFB + #define WOLFSSL_AES_CFB + #define WOLFSSL_AES_XTS + + /* #define WC_SRTP_KDF */ + /* TODO Causes failure with Espressif AES HW Enabled */ + /* #define HAVE_AES_ECB */ + /* #define HAVE_AESCCM */ + /* TODO sanity check when missing HAVE_AES_ECB */ + #define WOLFSSL_WOLFSSH + + #define HAVE_AESGCM + #define WOLFSSL_AES_COUNTER + + #define HAVE_FFDHE + #define HAVE_FFDHE_2048 + #if defined(CONFIG_IDF_TARGET_ESP8266) + /* TODO Full size SRP is disabled on the ESP8266 at this time. + * Low memory issue? */ + #define WOLFCRYPT_HAVE_SRP + /* MIN_FFDHE_FP_MAX_BITS = (MIN_FFDHE_BITS * 2); see settings.h */ + #define FP_MAX_BITS MIN_FFDHE_FP_MAX_BITS + #elif defined(CONFIG_IDF_TARGET_ESP32) || \ + defined(CONFIG_IDF_TARGET_ESP32S2) || \ + defined(CONFIG_IDF_TARGET_ESP32S3) + #define WOLFCRYPT_HAVE_SRP + #define FP_MAX_BITS (8192 * 2) + #elif defined(CONFIG_IDF_TARGET_ESP32C3) || \ + defined(CONFIG_IDF_TARGET_ESP32H2) + /* SRP Known to be working on this target::*/ + #define WOLFCRYPT_HAVE_SRP + #define FP_MAX_BITS (8192 * 2) + #else + /* For everything else, give a try and see if SRP working: */ + #define WOLFCRYPT_HAVE_SRP + #define FP_MAX_BITS (8192 * 2) + #endif + + #define HAVE_DH + + /* TODO: there may be a problem with HAVE_CAMELLIA with HW AES disabled. + * Do not define NO_WOLFSSL_ESP32_CRYPT_AES when enabled: */ + /* #define HAVE_CAMELLIA */ + + /* DSA requires old SHA */ + #define HAVE_DSA + /* Needs SHA512 ? */ + #define HAVE_HPKE + /* Not for Espressif? */ + #if defined(CONFIG_IDF_TARGET_ESP32C2) || \ + defined(CONFIG_IDF_TARGET_ESP8684) || \ + defined(CONFIG_IDF_TARGET_ESP32H2) || \ + defined(CONFIG_IDF_TARGET_ESP8266) + + #if defined(CONFIG_IDF_TARGET_ESP8266) + #undef HAVE_ECC + #undef HAVE_ECC_CDH + #undef HAVE_CURVE25519 + + /* TODO does CHACHA also need alignment? Failing on ESP8266 + * See SHA256 __attribute__((aligned(4))); and WC_SHA256_ALIGN */ + #ifdef HAVE_CHACHA + #error "HAVE_CHACHA not supported on ESP8266" + #endif + #ifdef HAVE_XCHACHA + #error "HAVE_XCHACHA not supported on ESP8266" + #endif + #else + #define HAVE_XCHACHA + #define HAVE_CHACHA + /* TODO Not enabled at this time, needs further testing: + * #define WC_SRTP_KDF + * #define HAVE_COMP_KEY + * #define WOLFSSL_HAVE_XMSS + */ + #endif + /* TODO AES-EAX not working on this platform */ + + /* Optionally disable DH + * #undef HAVE_DH + * #undef HAVE_FFDHE + */ + + /* ECC_SHAMIR out of memory on ESP32-C2 during ECC */ + #ifndef HAVE_ECC + #define ECC_SHAMIR + #endif + #else + #define WOLFSSL_AES_EAX + + #define ECC_SHAMIR + #endif + + /* Only for WOLFSSL_IMX6_CAAM / WOLFSSL_QNX_CAAM ? */ + /* #define WOLFSSL_CAAM */ + /* #define WOLFSSL_CAAM_BLOB */ + + #define WOLFSSL_AES_SIV + #define WOLFSSL_CMAC + + #define WOLFSSL_CERT_PIV + + /* HAVE_SCRYPT may turn on HAVE_PBKDF2 see settings.h */ + /* #define HAVE_SCRYPT */ + #define SCRYPT_TEST_ALL + #define HAVE_X963_KDF +#endif /* optionally turn off SHA512/224 SHA512/256 */ /* #define WOLFSSL_NOSHA512_224 */ @@ -133,29 +433,59 @@ /* when you want to use SHA384 */ #define WOLFSSL_SHA384 -/* when you want to use SHA512 */ -#define WOLFSSL_SHA512 - -/* when you want to use SHA3 */ -#define WOLFSSL_SHA3 - - /* ED25519 requires SHA512 */ -#define HAVE_ED25519 - /* Some features not enabled for ESP8266: */ #if defined(CONFIG_IDF_TARGET_ESP8266) || \ defined(CONFIG_IDF_TARGET_ESP32C2) + /* Some known low-memory devices have features not enabled by default. */ /* TODO determine low memory configuration for ECC. */ #else - #define HAVE_ECC - #define HAVE_CURVE25519 - #define CURVE25519_SMALL + /* when you want to use SHA512 */ + #define WOLFSSL_SHA512 + + /* when you want to use SHA3 */ + #define WOLFSSL_SHA3 + + /* ED25519 requires SHA512 */ + #define HAVE_ED25519 #endif -#define HAVE_ED25519 +#define MY_USE_ECC 1 +#define MY_USE_RSA 0 + +/* We can use either or both ECC and RSA, but must use at least one. */ +#if MY_USE_ECC || MY_USE_RSA + #if MY_USE_ECC + /* ---- ECDSA / ECC ---- */ + #define HAVE_ECC + #define HAVE_CURVE25519 + #define HAVE_ED25519 + + /* + #define HAVE_ECC384 + #define CURVE25519_SMALL + */ + #else + #define WOLFSSH_NO_ECC + /* WOLFSSH_NO_ECDSA is typically defined automatically, + * here for clarity: */ + #define WOLFSSH_NO_ECDSA + #endif + + #if MY_USE_RSA + /* ---- RSA ----- */ + /* #define RSA_LOW_MEM */ -/* Optional OPENSSL compatibility */ -#define OPENSSL_EXTRA + /* DH disabled by default, needed if ECDSA/ECC also turned off */ + #define HAVE_DH + #else + #define WOLFSSH_NO_RSA + #endif +#else + #error "Either RSA or ECC must be enabled" +#endif + +/* Optional OpenSSL compatibility */ +/* #define OPENSSL_EXTRA */ /* #Optional HAVE_PKCS7 */ /* #define HAVE_PKCS7 */ @@ -208,7 +538,7 @@ #define USE_FAST_MATH /***** Use SP_MATH *****/ -/* #undef USE_FAST_MATH */ +/* #undef USE_FAST_MATH */ /* #define SP_MATH */ /* #define WOLFSSL_SP_MATH_ALL */ /* #define WOLFSSL_SP_RISCV32 */ @@ -217,6 +547,14 @@ /* #undef USE_FAST_MATH */ /* #define USE_INTEGER_HEAP_MATH */ +/* Just syntax highlighting to check math libraries: */ +#if defined(SP_MATH) || \ + defined(USE_INTEGER_HEAP_MATH) || \ + defined(USE_INTEGER_HEAP_MATH) || \ + defined(USE_FAST_MATH) || \ + defined(WOLFSSL_SP_MATH_ALL) || \ + defined(WOLFSSL_SP_RISCV32) +#endif #define WOLFSSL_SMALL_STACK @@ -224,7 +562,9 @@ #define HAVE_VERSION_EXTENDED_INFO /* #define HAVE_WC_INTROSPECTION */ -#define HAVE_SESSION_TICKET +#ifndef NO_SESSION_CACHE + #define HAVE_SESSION_TICKET +#endif /* #define HAVE_HASHDRBG */ @@ -255,10 +595,62 @@ --enable-asn-template */ +/* optional SM4 Ciphers. See https://github.com/wolfSSL/wolfsm */ +/* +#define WOLFSSL_SM2 +#define WOLFSSL_SM3 +#define WOLFSSL_SM4 +*/ + +#if defined(WOLFSSL_SM2) || defined(WOLFSSL_SM3) || defined(WOLFSSL_SM4) + /* SM settings, possible cipher suites: + + TLS13-AES128-GCM-SHA256 + TLS13-CHACHA20-POLY1305-SHA256 + TLS13-SM4-GCM-SM3 + TLS13-SM4-CCM-SM3 + + #define WOLFSSL_ESP32_CIPHER_SUITE "TLS13-SM4-GCM-SM3" + #define WOLFSSL_ESP32_CIPHER_SUITE "TLS13-SM4-CCM-SM3" + #define WOLFSSL_ESP32_CIPHER_SUITE "ECDHE-ECDSA-SM4-CBC-SM3" + #define WOLFSSL_ESP32_CIPHER_SUITE "ECDHE-ECDSA-SM4-GCM-SM3" + #define WOLFSSL_ESP32_CIPHER_SUITE "ECDHE-ECDSA-SM4-CCM-SM3" + #define WOLFSSL_ESP32_CIPHER_SUITE "TLS13-SM4-GCM-SM3:" \ + "TLS13-SM4-CCM-SM3:" + */ + + #undef WOLFSSL_BASE16 + #define WOLFSSL_BASE16 /* required for WOLFSSL_SM2 */ + + #undef WOLFSSL_SM4_ECB + #define WOLFSSL_SM4_ECB + + #undef WOLFSSL_SM4_CBC + #define WOLFSSL_SM4_CBC + + #undef WOLFSSL_SM4_CTR + #define WOLFSSL_SM4_CTR + + #undef WOLFSSL_SM4_GCM + #define WOLFSSL_SM4_GCM + + #undef WOLFSSL_SM4_CCM + #define WOLFSSL_SM4_CCM + + #define HAVE_POLY1305 + #define HAVE_CHACHA + + #undef HAVE_AESGCM + #define HAVE_AESGCM +#else + /* default settings */ + #define USE_CERT_BUFFERS_2048 +#endif + /* Chipset detection from sdkconfig.h * Default is HW enabled unless turned off. * Uncomment lines to force SW instead of HW acceleration */ -#if defined(CONFIG_IDF_TARGET_ESP32) +#if defined(CONFIG_IDF_TARGET_ESP32) || defined(WOLFSSL_ESPWROOM32SE) #define WOLFSSL_ESP32 /* Alternatively, if there's an ECC Secure Element present: */ /* #define WOLFSSL_ESPWROOM32SE */ @@ -445,8 +837,11 @@ See wolfssl/wolfcrypt/port/Espressif/esp32-crypt.h for details on debug options #define WOLFSSL_TEST_STRAY 1 #define USE_ESP_DPORT_ACCESS_READ_BUFFER #define WOLFSSL_ESP32_HW_LOCK_DEBUG +#define WOLFSSL_DEBUG_MUTEX #define WOLFSSL_DEBUG_ESP_RSA_MULM_BITS #define ESP_DISABLE_HW_TASK_LOCK +#define ESP_MONITOR_HW_TASK_LOCK +#define USE_ESP_DPORT_ACCESS_READ_BUFFER See wolfcrypt/benchmark/benchmark.c for debug and other settings: @@ -458,7 +853,7 @@ Turn on timer debugging (used when CPU cycles not available) */ /* Pause in a loop rather than exit. */ -#define WOLFSSL_ESPIDF_ERROR_PAUSE +/* #define WOLFSSL_ESPIDF_ERROR_PAUSE */ #define WOLFSSL_HW_METRICS @@ -507,6 +902,12 @@ Turn on timer debugging (used when CPU cycles not available) * There are various certificate examples in this header file: * https://github.com/wolfSSL/wolfssl/blob/master/wolfssl/certs_test.h * + * To use the sample certificates in code (not recommended for production!): + * + * #if defined(USE_CERT_BUFFERS_2048) || defined(USE_CERT_BUFFERS_1024) + * #include + * #endif + * * To use the sets of macros below, define *one* of these: * * USE_CERT_BUFFERS_1024 - ECC 1024 bit encoded ASN1 @@ -584,6 +985,7 @@ Turn on timer debugging (used when CPU cycles not available) #define WOLFSSL_BASE16 #else #if defined(USE_CERT_BUFFERS_2048) + #define USE_CERT_BUFFERS_256 /* Be sure to include in app when using example certs: */ /* #include */ #define CTX_CA_CERT ca_cert_der_2048 @@ -605,6 +1007,7 @@ Turn on timer debugging (used when CPU cycles not available) #define CTX_CLIENT_KEY_TYPE WOLFSSL_FILETYPE_ASN1 #elif defined(USE_CERT_BUFFERS_1024) + #define USE_CERT_BUFFERS_256 /* Be sure to include in app when using example certs: */ /* #include */ #define CTX_CA_CERT ca_cert_der_1024 @@ -629,3 +1032,34 @@ Turn on timer debugging (used when CPU cycles not available) #error "Must define USE_CERT_BUFFERS_2048 or USE_CERT_BUFFERS_1024" #endif #endif /* Conditional key and cert constant names */ + +/****************************************************************************** +** Sanity Checks +******************************************************************************/ +#if defined(CONFIG_ESP_MAIN_TASK_STACK_SIZE) + #if defined(WOLFCRYPT_HAVE_SRP) + #if defined(FP_MAX_BITS) + #if FP_MAX_BITS < (8192 * 2) + #define ESP_SRP_MINIMUM_STACK_8K (24 * 1024) + #else + #define ESP_SRP_MINIMUM_STACK_8K (28 * 1024) + #endif + #else + #error "Please define FP_MAX_BITS when using WOLFCRYPT_HAVE_SRP." + #endif + + #if (CONFIG_ESP_MAIN_TASK_STACK_SIZE < ESP_SRP_MINIMUM_STACK) + #warning "WOLFCRYPT_HAVE_SRP enabled with small stack size" + #endif + #endif +#else + #warning "CONFIG_ESP_MAIN_TASK_STACK_SIZE not defined!" +#endif +/* See settings.h for some of the possible hardening options: + * + * #define NO_ESPIDF_DEFAULT + * #define WC_NO_CACHE_RESISTANT + * #define WC_AES_BITSLICED + * #define HAVE_AES_ECB + * #define HAVE_AES_DIRECT + */ diff --git a/IDE/Espressif/ESP-IDF/examples/template/main/Kconfig.projbuild b/IDE/Espressif/ESP-IDF/examples/template/main/Kconfig.projbuild new file mode 100644 index 0000000000..b43b62cb47 --- /dev/null +++ b/IDE/Espressif/ESP-IDF/examples/template/main/Kconfig.projbuild @@ -0,0 +1,123 @@ +# Kconfig main +# +# Copyright (C) 2006-2024 wolfSSL Inc. All rights reserved. +# +# This file is part of wolfSSL. +# +# wolfSSL is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# wolfSSL is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA +# + +# Kconfig File Version 5.7.2.001 for wolfssl_template + +menu "Example wolfSSL Configuration" + +choice WOLFSSL_EXAMPLE_CHOOSE + prompt "Choose Example (See wolfssl/include/user_settings.h)" + default WOLFSSL_EXAMPLE_NAME_NONE + help + The user settings file can be adjusted to specific wolfSSL examples. + + config WOLFSSL_EXAMPLE_NAME_TEMPLATE + bool "wolfSSL Template" + help + The sample template app compiles in wolfSSL and prints the current wolfSSL Version. Nothing more. + + config WOLFSSL_EXAMPLE_NAME_TEST + bool "wolfSSL Test" + help + This app tests all cryptographic functions currently enabled. See also Benchmark performance app. + + config WOLFSSL_EXAMPLE_NAME_BENCHMARK + bool "wolfSSL Benchmark" + help + Benchmark performance app. See also cryptographic test. + + config WOLFSSL_EXAMPLE_NAME_TLS_CLIENT + bool "TLS Client" + help + TLS Client Example app. Needs WiFi and a listening server on port 11111. + + config WOLFSSL_EXAMPLE_NAME_TLS_SERVER + bool "TLS Server" + help + TLS Server Example app. Needs WiFi. More interesting with a TLS client using port 11111. + + config WOLFSSL_EXAMPLE_NAME_WOLFSSH_TEMPLATE + bool "SSH Template App" + help + Bare-bones Hellow World app that only compiles in wolfSSL and wolfSSH. + See wolfSSL/wolfssh on GitHub. + + config WOLFSSL_EXAMPLE_NAME_WOLFSSH_ECHOSERVER + bool "SSH Echo Server" + help + See wolfSSL/wolfssh on GitHub. + + config WOLFSSL_EXAMPLE_NAME_WOLFSSH_ECHOSERVER + bool "SSH Echo Server" + help + See wolfSSL/wolfssh on GitHub. + + config WOLFSSL_EXAMPLE_NAME_ESP32_SSH_SERVER + bool "SSH to UART Server for the ESP32" + help + See wolfSSL/wolfssh-examples on GitHub. + + config WOLFSSL_EXAMPLE_NAME_ESP8266_SSH_SERVER + bool "SSH to UART Server for the ESP8266" + help + See wolfSSL/wolfssh-examples on GitHub. + + config WOLFSSL_EXAMPLE_NAME_WOLFMQTT_TEMPLATE + bool "MQTT Template" + help + See wolfSSL/wolfmqtt on GitHub. + + config WOLFSSL_EXAMPLE_NAME_WOLFMQTT_AWS_IOT_MQTT + bool "MQTT AWS IoT" + help + See wolfSSL/wolfmqtt on GitHub. + + config WOLFTPM_EXAMPLE_NAME_ESPRESSIF + bool "TPM Test Example for the ESP32" + help + See wolfSSL/wolfTPM on GitHub. + + config WOLFSSL_APPLE_HOMEKIT + bool "Apple HomeKit for the ESP32" + help + See AchimPieters/esp32-homekit-demo on GitHub. + + + config WOLFSSL_EXAMPLE_NAME_NONE + bool "Other" + help + A specific example app is not defined. + +endchoice + +config WOLFSSL_TARGET_HOST + string "Target host" + default "127.0.0.1" + help + host address for the example to connect + +config WOLFSSL_TARGET_PORT + int "Target port" + default 11111 + help + host port for the example to connect + +endmenu diff --git a/IDE/Espressif/ESP-IDF/examples/template/main/main.c b/IDE/Espressif/ESP-IDF/examples/template/main/main.c index f2f69bcb28..6b3abe13f6 100644 --- a/IDE/Espressif/ESP-IDF/examples/template/main/main.c +++ b/IDE/Espressif/ESP-IDF/examples/template/main/main.c @@ -50,6 +50,11 @@ void app_main(void) #ifdef WOLFSSL_ESPIDF_VERBOSE_EXIT_MESSAGE int ret = 0; #endif + +#if !defined(CONFIG_WOLFSSL_EXAMPLE_NAME_TEMPLATE) + ESP_LOGW(TAG, "Warning: Example wolfSSL misconfigured? Check menuconfig."); +#endif + ESP_LOGI(TAG, "Hello wolfSSL!"); #ifdef HAVE_VERSION_EXTENDED_INFO diff --git a/IDE/Espressif/ESP-IDF/examples/template/sdkconfig.defaults b/IDE/Espressif/ESP-IDF/examples/template/sdkconfig.defaults index 88f1e113e9..5064dfdd01 100644 --- a/IDE/Espressif/ESP-IDF/examples/template/sdkconfig.defaults +++ b/IDE/Espressif/ESP-IDF/examples/template/sdkconfig.defaults @@ -1,3 +1,6 @@ +# Set the known example app config to template example (see user_settings.h) +CONFIG_WOLFSSL_EXAMPLE_NAME_TEMPLATE=y + CONFIG_FREERTOS_HZ=1000 CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_client/main/client-tls.c b/IDE/Espressif/ESP-IDF/examples/wolfssl_client/main/client-tls.c index 1f00afa3c5..638fdf343d 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_client/main/client-tls.c +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_client/main/client-tls.c @@ -297,8 +297,8 @@ WOLFSSL_ESP_TASK tls_smp_client_task(void* args) /* see user_settings PROJECT_DH for HAVE_DH and HAVE_FFDHE_2048 */ #ifndef NO_DH - ret = wolfSSL_CTX_SetMinDhKey_Sz(ctx, (word16)minDhKeyBits); - if (ret != WOLFSSL_SUCCESS) { + ret_i = wolfSSL_CTX_SetMinDhKey_Sz(ctx, (word16)minDhKeyBits); + if (ret_i != WOLFSSL_SUCCESS) { ESP_LOGE(TAG, "Error setting minimum DH key size"); } #endif diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_test/testAll.sh b/IDE/Espressif/ESP-IDF/examples/wolfssl_test/testAll.sh index e0a7643bea..0d8de0fd6f 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_test/testAll.sh +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_test/testAll.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # # testAll.sh [keyword suffix] # diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_test/testMonitor.sh b/IDE/Espressif/ESP-IDF/examples/wolfssl_test/testMonitor.sh index f71c0f6cc9..9876995117 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_test/testMonitor.sh +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_test/testMonitor.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # # Syntax: # ./testMonitor.sh diff --git a/IDE/Espressif/ESP-IDF/setup.sh b/IDE/Espressif/ESP-IDF/setup.sh index 8d10a59b72..7a68ae4d99 100755 --- a/IDE/Espressif/ESP-IDF/setup.sh +++ b/IDE/Espressif/ESP-IDF/setup.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # check if IDF_PATH is set if [ -z "$IDF_PATH" ]; then diff --git a/IDE/Espressif/include.am b/IDE/Espressif/include.am index 7fa3887361..ab57c84ab7 100644 --- a/IDE/Espressif/include.am +++ b/IDE/Espressif/include.am @@ -22,7 +22,9 @@ EXTRA_DIST+= IDE/Espressif/ESP-IDF/user_settings.h # Template EXTRA_DIST+= IDE/Espressif/ESP-IDF/examples/template/CMakeLists.txt EXTRA_DIST+= IDE/Espressif/ESP-IDF/examples/template/components +EXTRA_DIST+= IDE/Espressif/ESP-IDF/examples/template/components/wolfssl/Kconfig EXTRA_DIST+= IDE/Espressif/ESP-IDF/examples/template/main +EXTRA_DIST+= IDE/Espressif/ESP-IDF/examples/template/main/Kconfig.projbuild EXTRA_DIST+= IDE/Espressif/ESP-IDF/examples/template/partitions_singleapp_large.csv EXTRA_DIST+= IDE/Espressif/ESP-IDF/examples/template/README.md EXTRA_DIST+= IDE/Espressif/ESP-IDF/examples/template/sdkconfig.defaults diff --git a/IDE/GCC-ARM/Header/user_settings.h b/IDE/GCC-ARM/Header/user_settings.h index e3a0922997..40986b08b4 100644 --- a/IDE/GCC-ARM/Header/user_settings.h +++ b/IDE/GCC-ARM/Header/user_settings.h @@ -419,6 +419,7 @@ extern "C" { /* prototypes for user heap override functions */ /* Note: Realloc only required for normal math */ + /* Note2: XFREE(NULL) must be properly handled */ #include /* for size_t */ extern void *myMalloc(size_t n, void* heap, int type); extern void myFree(void *p, void* heap, int type); diff --git a/IDE/HEXAGON/build.sh b/IDE/HEXAGON/build.sh index 5e09fba45e..29fc8ed0ac 100755 --- a/IDE/HEXAGON/build.sh +++ b/IDE/HEXAGON/build.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash if [ -z $1 ]; then echo "./build " exit 1 diff --git a/IDE/NETOS/user_settings.h b/IDE/NETOS/user_settings.h index 957cf82b01..efdbf01614 100644 --- a/IDE/NETOS/user_settings.h +++ b/IDE/NETOS/user_settings.h @@ -410,6 +410,7 @@ extern "C" { /* prototypes for user heap override functions */ /* Note: Realloc only required for normal math */ + /* Note2: XFREE(NULL) must be properly handled */ #include /* for size_t */ extern void *myMalloc(size_t n, void* heap, int type); extern void myFree(void *p, void* heap, int type); diff --git a/IDE/RISCV/SIFIVE-HIFIVE1/user_settings.h b/IDE/RISCV/SIFIVE-HIFIVE1/user_settings.h index d3f3de9444..75d5f54d22 100644 --- a/IDE/RISCV/SIFIVE-HIFIVE1/user_settings.h +++ b/IDE/RISCV/SIFIVE-HIFIVE1/user_settings.h @@ -397,6 +397,7 @@ extern "C" { /* prototypes for user heap override functions */ /* Note: Realloc only required for normal math */ + /* Note2: XFREE(NULL) must be properly handled */ #include /* for size_t */ extern void *myMalloc(size_t n, void* heap, int type); extern void myFree(void *p, void* heap, int type); diff --git a/IDE/Renesas/e2studio/Projects/tools/generate_rsa_keypair.sh b/IDE/Renesas/e2studio/Projects/tools/generate_rsa_keypair.sh index d221e5428d..ac9def4cc3 100755 --- a/IDE/Renesas/e2studio/Projects/tools/generate_rsa_keypair.sh +++ b/IDE/Renesas/e2studio/Projects/tools/generate_rsa_keypair.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash function usage(){ cat << _EOT_ diff --git a/IDE/Renesas/e2studio/Projects/tools/genhexbuf.pl b/IDE/Renesas/e2studio/Projects/tools/genhexbuf.pl index ca9074b201..42e547f244 100755 --- a/IDE/Renesas/e2studio/Projects/tools/genhexbuf.pl +++ b/IDE/Renesas/e2studio/Projects/tools/genhexbuf.pl @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # genhexbuf.pl # Copyright (C) 2020 wolfSSL Inc. diff --git a/IDE/Renesas/e2studio/Projects/tools/rsa_pss_sign.sh b/IDE/Renesas/e2studio/Projects/tools/rsa_pss_sign.sh index 3c1f30032a..5dde500e84 100755 --- a/IDE/Renesas/e2studio/Projects/tools/rsa_pss_sign.sh +++ b/IDE/Renesas/e2studio/Projects/tools/rsa_pss_sign.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash SIGOPT=rsa_padding_mode:pss SIGOPT2=rsa_pss_saltlen:-1 diff --git a/IDE/Renesas/e2studio/RA6M4/test/src/test_main.c b/IDE/Renesas/e2studio/RA6M4/test/src/test_main.c index 172e484c4c..5b34a46752 100644 --- a/IDE/Renesas/e2studio/RA6M4/test/src/test_main.c +++ b/IDE/Renesas/e2studio/RA6M4/test/src/test_main.c @@ -151,17 +151,11 @@ void Clr_CallbackCtx(FSPSM_ST *g) (void) g; #if defined(WOLFSSL_RENESAS_SCEPROTECT_CRYPTONLY) - if (g->wrapped_key_rsapri2048 != NULL) - XFREE(g->wrapped_key_rsapri2048, - NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(g->wrapped_key_rsapri2048, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (g->wrapped_key_rsapub2048 != NULL) - XFREE(g->wrapped_key_rsapub2048, - NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(g->wrapped_key_rsapub2048, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (g->wrapped_key_rsapri1024 != NULL) - XFREE(g->wrapped_key_rsapri1024, - NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(g->wrapped_key_rsapri1024, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (g->wrapped_key_rsapub2048 != NULL) XFREE(g->wrapped_key_rsapub1024, diff --git a/IDE/Renesas/e2studio/RA6M4/test/src/wolfssl_sce_unit_test.c b/IDE/Renesas/e2studio/RA6M4/test/src/wolfssl_sce_unit_test.c index cf62b19dfa..591ca3ddce 100644 --- a/IDE/Renesas/e2studio/RA6M4/test/src/wolfssl_sce_unit_test.c +++ b/IDE/Renesas/e2studio/RA6M4/test/src/wolfssl_sce_unit_test.c @@ -691,18 +691,10 @@ static int sce_rsa_test(int prnt, int keySize) wc_FreeRsaKey(key); XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); } - if (in != NULL) { - XFREE(in, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (in2 != NULL) { - XFREE(in2, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (out != NULL) { - XFREE(out, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (out2 != NULL) { - XFREE(out2, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(in, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(in2, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(out, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(out2, NULL, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -778,15 +770,9 @@ static int sce_rsa_SignVerify_test(int prnt, int keySize) wc_FreeRsaKey(key); XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); } - if (in != NULL) { - XFREE(in, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (in2 != NULL) { - XFREE(in2, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (out != NULL) { - XFREE(out, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(in, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(in2, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(out, NULL, DYNAMIC_TYPE_TMP_BUFFER); return ret; } diff --git a/IDE/Renesas/e2studio/RX72N/EnvisionKit/wolfssl_demo/user_settings.h b/IDE/Renesas/e2studio/RX72N/EnvisionKit/wolfssl_demo/user_settings.h index 5d4c2f341f..e9199f02b1 100644 --- a/IDE/Renesas/e2studio/RX72N/EnvisionKit/wolfssl_demo/user_settings.h +++ b/IDE/Renesas/e2studio/RX72N/EnvisionKit/wolfssl_demo/user_settings.h @@ -259,10 +259,20 @@ # undef WOLFSSL_RENESAS_TSIP_TLS # undef WOLFSSL_RENESAS_TSIP_CRYPT #endif - + /*------------------------------------------------------------------------- + * TSIP generates random numbers using the CRT-DRBG described + * in NIST SP800-90A. Recommend to define the CUSTOM_RAND_GENERATE_BLOCK + * so that wc_RNG_GenerateByte/Block() call TSIP random generatoion API + * directly. Comment out the macro will generate random number by + * wolfSSL Hash DRBG by using a seed which is generated by TSIP API. + *-----------------------------------------------------------------------*/ + #define CUSTOM_RAND_GENERATE_BLOCK wc_tsip_GenerateRandBlock #else #define OPENSSL_EXTRA #define WOLFSSL_GENSEED_FORTEST /* Warning: define your own seed gen */ + #if !defined(min) + #define min(data1, data2) _builtin_min(data1, data2) + #endif #endif @@ -276,6 +286,5 @@ /*-- strcasecmp */ #define XSTRCASECMP(s1,s2) strcmp((s1),(s2)) -#define CUSTOM_RAND_GENERATE_BLOCK wc_tsip_GenerateRandBlock /* use original ASN parsing */ #define WOLFSSL_ASN_ORIGINAL diff --git a/IDE/Renesas/e2studio/RX72N/EnvisionKit/wolfssl_demo/wolfssl_tsip_unit_test.c b/IDE/Renesas/e2studio/RX72N/EnvisionKit/wolfssl_demo/wolfssl_tsip_unit_test.c index 048add2c62..1b84878d3c 100644 --- a/IDE/Renesas/e2studio/RX72N/EnvisionKit/wolfssl_demo/wolfssl_tsip_unit_test.c +++ b/IDE/Renesas/e2studio/RX72N/EnvisionKit/wolfssl_demo/wolfssl_tsip_unit_test.c @@ -107,21 +107,13 @@ typedef struct tagInfo void Clr_CallbackCtx(TsipUserCtx *g) { - if (g->rsa1024pri_keyIdx != NULL) - XFREE(g->rsa1024pri_keyIdx, - NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(g->rsa1024pri_keyIdx, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (g->rsa1024pub_keyIdx != NULL) - XFREE(g->rsa1024pub_keyIdx, - NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(g->rsa1024pub_keyIdx, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (g->rsa2048pri_keyIdx != NULL) - XFREE(g->rsa2048pri_keyIdx, - NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(g->rsa2048pri_keyIdx, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (g->rsa2048pub_keyIdx != NULL) - XFREE(g->rsa2048pub_keyIdx, - NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(g->rsa2048pub_keyIdx, NULL, DYNAMIC_TYPE_TMP_BUFFER); XMEMSET(g, 0, sizeof(TsipUserCtx)); } @@ -789,15 +781,9 @@ static int tsip_rsa_SignVerify_test(int prnt, int keySize) wc_FreeRsaKey(key); XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); } - if (in != NULL) { - XFREE(in, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (in2 != NULL) { - XFREE(in2, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (out != NULL) { - XFREE(out, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(in, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(in2, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(out, NULL, DYNAMIC_TYPE_TMP_BUFFER); return ret; } diff --git a/IDE/Renesas/e2studio/RZN2L/test/src/test/wolfssl_rsip_unit_test.c b/IDE/Renesas/e2studio/RZN2L/test/src/test/wolfssl_rsip_unit_test.c index 1176faa4c6..795d8286e1 100644 --- a/IDE/Renesas/e2studio/RZN2L/test/src/test/wolfssl_rsip_unit_test.c +++ b/IDE/Renesas/e2studio/RZN2L/test/src/test/wolfssl_rsip_unit_test.c @@ -718,18 +718,10 @@ static int rsip_rsa_test(int prnt, int keySize) wc_FreeRsaKey(key); XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); } - if (in != NULL) { - XFREE(in, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (in2 != NULL) { - XFREE(in2, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (out != NULL) { - XFREE(out, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (out2 != NULL) { - XFREE(out2, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(in, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(in2, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(out, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(out2, NULL, DYNAMIC_TYPE_TMP_BUFFER); (void) prnt; return ret; @@ -808,15 +800,9 @@ static int rsip_rsa_SignVerify_test(int prnt, int keySize) wc_FreeRsaKey(key); XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); } - if (in != NULL) { - XFREE(in, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (in2 != NULL) { - XFREE(in2, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (out != NULL) { - XFREE(out, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(in, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(in2, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(out, NULL, DYNAMIC_TYPE_TMP_BUFFER); return ret; } diff --git a/IDE/STARCORE/user_settings.h b/IDE/STARCORE/user_settings.h index 8706865706..df74dbee70 100644 --- a/IDE/STARCORE/user_settings.h +++ b/IDE/STARCORE/user_settings.h @@ -417,6 +417,7 @@ extern "C" { /* prototypes for user heap override functions */ /* Note: Realloc only required for normal math */ + /* Note2: XFREE(NULL) must be properly handled */ #include /* for size_t */ extern void *myMalloc(size_t n, void* heap, int type); extern void myFree(void *p, void* heap, int type); diff --git a/IDE/STM32Cube/wolfssl_example.c b/IDE/STM32Cube/wolfssl_example.c index ce67b0806d..d356af5e7b 100644 --- a/IDE/STM32Cube/wolfssl_example.c +++ b/IDE/STM32Cube/wolfssl_example.c @@ -1700,9 +1700,7 @@ static int tls13_uart_server(void) } #ifdef WOLFSSL_SMALL_STACK - if (tbuf != NULL) { - XFREE(tbuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(tbuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; @@ -1795,9 +1793,7 @@ static int tls13_uart_client(void) wolfSSL_CTX_free(ctx); } #ifdef WOLFSSL_SMALL_STACK - if (tbuf != NULL) { - XFREE(tbuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(tbuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; diff --git a/IDE/SimplicityStudio/user_settings.h b/IDE/SimplicityStudio/user_settings.h index a02cbd54d7..05ba8d517d 100644 --- a/IDE/SimplicityStudio/user_settings.h +++ b/IDE/SimplicityStudio/user_settings.h @@ -337,6 +337,7 @@ extern "C" { /* prototypes for user heap override functions */ /* Note: Realloc only required for normal math */ + /* Note2: XFREE(NULL) must be properly handled */ #include /* for size_t */ extern void *myMalloc(size_t n, void* heap, int type); extern void myFree(void *p, void* heap, int type); diff --git a/IDE/WICED-STUDIO/user_settings.h b/IDE/WICED-STUDIO/user_settings.h index 927e7091f6..e4a6f2e8a5 100644 --- a/IDE/WICED-STUDIO/user_settings.h +++ b/IDE/WICED-STUDIO/user_settings.h @@ -411,6 +411,7 @@ extern "C" { /* prototypes for user heap override functions */ /* Note: Realloc only required for normal math */ + /* Note2: XFREE(NULL) must be properly handled */ #include /* for size_t */ extern void *myMalloc(size_t n, void* heap, int type); extern void myFree(void *p, void* heap, int type); diff --git a/IDE/WINCE/user_settings.h b/IDE/WINCE/user_settings.h index 02157f2a54..eca61f0436 100644 --- a/IDE/WINCE/user_settings.h +++ b/IDE/WINCE/user_settings.h @@ -491,6 +491,7 @@ extern "C" { /* prototypes for user heap override functions */ /* Note: Realloc only required for normal math */ + /* Note2: XFREE(NULL) must be properly handled */ #include /* for size_t */ extern void *myMalloc(size_t n, void* heap, int type); extern void myFree(void *p, void* heap, int type); diff --git a/IDE/XCODE-FIPSv2/macOS-C++/Intel/user_settings.h b/IDE/XCODE-FIPSv2/macOS-C++/Intel/user_settings.h index 615c8beb6e..cbbdfe3a0e 100644 --- a/IDE/XCODE-FIPSv2/macOS-C++/Intel/user_settings.h +++ b/IDE/XCODE-FIPSv2/macOS-C++/Intel/user_settings.h @@ -407,6 +407,7 @@ extern "C" { /* prototypes for user heap override functions */ /* Note: Realloc only required for normal math */ + /* Note2: XFREE(NULL) must be properly handled */ #include /* for size_t */ extern void *myMalloc(size_t n, void* heap, int type); extern void myFree(void *p, void* heap, int type); diff --git a/IDE/XCODE-FIPSv2/macOS-C++/M1/user_settings.h b/IDE/XCODE-FIPSv2/macOS-C++/M1/user_settings.h index 494348d1b6..768ed06c2a 100644 --- a/IDE/XCODE-FIPSv2/macOS-C++/M1/user_settings.h +++ b/IDE/XCODE-FIPSv2/macOS-C++/M1/user_settings.h @@ -418,6 +418,7 @@ extern "C" { /* prototypes for user heap override functions */ /* Note: Realloc only required for normal math */ + /* Note2: XFREE(NULL) must be properly handled */ #include /* for size_t */ extern void *myMalloc(size_t n, void* heap, int type); extern void myFree(void *p, void* heap, int type); diff --git a/IDE/XCODE-FIPSv2/user_settings.h b/IDE/XCODE-FIPSv2/user_settings.h index 030cd5807d..cf039344df 100644 --- a/IDE/XCODE-FIPSv2/user_settings.h +++ b/IDE/XCODE-FIPSv2/user_settings.h @@ -419,6 +419,7 @@ extern "C" { /* prototypes for user heap override functions */ /* Note: Realloc only required for normal math */ + /* Note2: XFREE(NULL) must be properly handled */ #include /* for size_t */ extern void *myMalloc(size_t n, void* heap, int type); extern void myFree(void *p, void* heap, int type); diff --git a/IDE/XCODE-FIPSv5/user_settings.h b/IDE/XCODE-FIPSv5/user_settings.h index a66b0dce70..74fdb284e2 100644 --- a/IDE/XCODE-FIPSv5/user_settings.h +++ b/IDE/XCODE-FIPSv5/user_settings.h @@ -500,6 +500,7 @@ extern "C" { /* prototypes for user heap override functions */ /* Note: Realloc only required for normal math */ + /* Note2: XFREE(NULL) must be properly handled */ #include /* for size_t */ extern void *myMalloc(size_t n, void* heap, int type); extern void myFree(void *p, void* heap, int type); diff --git a/IDE/apple-universal/build-wolfssl-framework.sh b/IDE/apple-universal/build-wolfssl-framework.sh index 85763e281b..1a09665542 100755 --- a/IDE/apple-universal/build-wolfssl-framework.sh +++ b/IDE/apple-universal/build-wolfssl-framework.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # build-wolfssl-framework.sh # diff --git a/IDE/mynewt/setup.sh b/IDE/mynewt/setup.sh index 7cec0a8253..f7b32e81d3 100755 --- a/IDE/mynewt/setup.sh +++ b/IDE/mynewt/setup.sh @@ -1,8 +1,10 @@ -#!/bin/bash -e +#!/usr/bin/env bash -# this scrypt deploy wolfssl and wolfcrypto source code to mynewt project +# this script deploys wolfssl and wolfcrypto source code to the mynewt project. # run as bash "mynewt project root directory path" +set -e + SCRIPTDIR=`dirname $0` SCRIPTDIR=`cd $SCRIPTDIR && pwd -P` WOLFSSL_MYNEWTDIR=${SCRIPTDIR} diff --git a/INSTALL b/INSTALL index d403432338..6ac6330043 100644 --- a/INSTALL +++ b/INSTALL @@ -12,6 +12,11 @@ $ make check # (optional, but highly recommended) $ sudo make install + Note: Building with configure generates a wolfssl/options.h file that contains + all the generated build options. This file needs to be included in your application + before any other wolfSSL headers. Optionally your application can define + WOLFSSL_USE_OPTIONS_H to do this automatically. + 2. Building on iOS Use on the xcode project in IDE/iOS/wolfssl.xcodeproj @@ -74,7 +79,7 @@ 13. Porting to a new platform Please see section 2.4 in the manual: - http://www.wolfssl.com/yaSSL/Docs-cyassl-manual-2-building-cyassl.html + https://www.wolfssl.com/documentation/manuals/wolfssl/chapter02.html#customizing-or-porting-wolfssl 14. Building with CMake Note: Primary development uses automake (./configure). The support for CMake @@ -91,6 +96,11 @@ a header options.h in the wolfssl directory that contains the options used to configure the build. + Note: Building with configure generates a wolfssl/options.h file that contains + all the generated build options. This file needs to be included in your application + before any other wolfSSL headers. Optionally your application can define + WOLFSSL_USE_OPTIONS_H to do this automatically. + Unix-based Platforms --- 1) Navigate to the wolfssl root directory containing "CMakeLists.txt". diff --git a/RTOS/nuttx/wolfssl/setup-wolfssl.sh b/RTOS/nuttx/wolfssl/setup-wolfssl.sh index 3c1df580d1..9cd6ef4d40 100755 --- a/RTOS/nuttx/wolfssl/setup-wolfssl.sh +++ b/RTOS/nuttx/wolfssl/setup-wolfssl.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh set -e # exit on any command failure if [ ! -d wolfssl ]; then diff --git a/async-check.sh b/async-check.sh index ccfce052a1..bb24bded2d 100755 --- a/async-check.sh +++ b/async-check.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # This script creates symbolic links to the required asynchronous # file for using the asynchronous simulator and make check diff --git a/certs/crl/gencrls.sh b/certs/crl/gencrls.sh index 98deb7e45e..9a1c67f16d 100755 --- a/certs/crl/gencrls.sh +++ b/certs/crl/gencrls.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # gencrls, crl config already done, see taoCerts.txt for setup check_result(){ diff --git a/certs/ecc/genecc.sh b/certs/ecc/genecc.sh index d068d0d028..c5c231c092 100755 --- a/certs/ecc/genecc.sh +++ b/certs/ecc/genecc.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # run from wolfssl root diff --git a/certs/ed25519/gen-ed25519-certs.sh b/certs/ed25519/gen-ed25519-certs.sh index b945e49b69..1dd1262129 100755 --- a/certs/ed25519/gen-ed25519-certs.sh +++ b/certs/ed25519/gen-ed25519-certs.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash check_result(){ if [ $1 -ne 0 ]; then diff --git a/certs/ed25519/gen-ed25519.sh b/certs/ed25519/gen-ed25519.sh index 6858d53b2f..70f41125c1 100755 --- a/certs/ed25519/gen-ed25519.sh +++ b/certs/ed25519/gen-ed25519.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash EXAMPLE=$1 echo "This uses ed25519 certificate generator from wolfssl-examples github" diff --git a/certs/ed448/gen-ed448-certs.sh b/certs/ed448/gen-ed448-certs.sh index af51bd2321..0920ab7b9b 100755 --- a/certs/ed448/gen-ed448-certs.sh +++ b/certs/ed448/gen-ed448-certs.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash check_result(){ if [ $1 -ne 0 ]; then diff --git a/certs/gen_revoked.sh b/certs/gen_revoked.sh index dfb649110d..4e5e3fcaf2 100755 --- a/certs/gen_revoked.sh +++ b/certs/gen_revoked.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash ########################################################### ########## update and sign server-revoked-key.pem ################ diff --git a/certs/p521/gen-p521-certs.sh b/certs/p521/gen-p521-certs.sh index f13cd6fee0..9ff0ffcd81 100755 --- a/certs/p521/gen-p521-certs.sh +++ b/certs/p521/gen-p521-certs.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash check_result(){ if [ $1 -ne 0 ]; then diff --git a/certs/renewcerts.sh b/certs/renewcerts.sh index d2482f5103..c46f3dda98 100755 --- a/certs/renewcerts.sh +++ b/certs/renewcerts.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # renewcerts.sh # # renews the following certs: diff --git a/certs/rsapss/renew-rsapss-certs.sh b/certs/rsapss/renew-rsapss-certs.sh index 417e7b9efd..aa5951f15d 100755 --- a/certs/rsapss/renew-rsapss-certs.sh +++ b/certs/rsapss/renew-rsapss-certs.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash check_result(){ if [ $1 -ne 0 ]; then diff --git a/certs/sm2/gen-sm2-certs.sh b/certs/sm2/gen-sm2-certs.sh index af8ad9be69..790e91f503 100755 --- a/certs/sm2/gen-sm2-certs.sh +++ b/certs/sm2/gen-sm2-certs.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash check_result(){ if [ $1 -ne 0 ]; then diff --git a/certs/statickeys/gen-static.sh b/certs/statickeys/gen-static.sh index 681a77edf5..a3fe1d5f9e 100644 --- a/certs/statickeys/gen-static.sh +++ b/certs/statickeys/gen-static.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # run from wolfssl root diff --git a/certs/test-pathlen/assemble-chains.sh b/certs/test-pathlen/assemble-chains.sh index ff917cecea..6a507d8856 100755 --- a/certs/test-pathlen/assemble-chains.sh +++ b/certs/test-pathlen/assemble-chains.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # # assemble-chains.sh # Create certs and assemble all the certificate CA path test cert chains. diff --git a/certs/test-pathlen/refreshkeys.sh b/certs/test-pathlen/refreshkeys.sh index b70b7ecca2..02ef5f0392 100755 --- a/certs/test-pathlen/refreshkeys.sh +++ b/certs/test-pathlen/refreshkeys.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash keyList=( chainA-ICA1-key.pem chainA-entity-key.pem diff --git a/certs/test/gen-badsig.sh b/certs/test/gen-badsig.sh index aafe06f97b..ca0b89d165 100755 --- a/certs/test/gen-badsig.sh +++ b/certs/test/gen-badsig.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash generate() { # read in certificate and alter the last part of the signature diff --git a/commit-tests.sh b/commit-tests.sh index ab5b5010d3..e7ba76f03b 100755 --- a/commit-tests.sh +++ b/commit-tests.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash #commit-tests.sh diff --git a/configure.ac b/configure.ac index 970cc50810..450523f3e7 100644 --- a/configure.ac +++ b/configure.ac @@ -69,7 +69,7 @@ AS_IF([ test -n "$CFLAG_VISIBILITY" ], [ AM_CFLAGS="$AM_CFLAGS $CFLAG_VISIBILITY" ]) -WOLFSSL_BUILD_DATE=$(date -R) +WOLFSSL_BUILD_DATE=$(LC_TIME=C date +"%a, %d %b %Y %T %z") AC_SUBST([WOLFSSL_BUILD_DATE]) @@ -217,11 +217,17 @@ AC_ARG_ENABLE([debug-trace-errcodes], [ ENABLED_DEBUG_TRACE_ERRCODES=no ] ) -if test "$ENABLED_DEBUG_TRACE_ERRCODES" = "yes" +if test "$ENABLED_DEBUG_TRACE_ERRCODES" != "no" then AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_DEBUG_TRACE_ERROR_CODES" fi +if test "$ENABLED_DEBUG_TRACE_ERRCODES" = "backtrace" +then + AM_CFLAGS="$AM_CFLAGS -g -funwind-tables -DWOLFSSL_DEBUG_BACKTRACE_ERROR_CODES" + AM_LDFLAGS="$AM_LDFLAGS -lbacktrace" +fi + # Start without certificates enabled and enable if a certificate algorithm is # enabled ENABLED_CERTS="no" @@ -1234,8 +1240,8 @@ do 1024) ENABLED_KYBER1024=yes ;; - ml-kem) - ENABLED_ML_KEM=yes + original) + ENABLED_ORIGINAL=yes ;; *) AC_MSG_ERROR([Invalid choice for KYBER []: $ENABLED_KYBER.]) @@ -1245,7 +1251,6 @@ done if test "$ENABLED_KYBER" != "no" then - AS_IF([ test "$ENABLED_EXPERIMENTAL" != "yes" ],[ AC_MSG_ERROR([KYBER requires --enable-experimental.]) ]) AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_HAVE_KYBER" # Use liboqs if specified. if test "$ENABLED_LIBOQS" = "no"; then @@ -1263,8 +1268,8 @@ then if test "$ENABLED_KYBER1024" = ""; then AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_NO_KYBER1024" fi - if test "$ENABLED_ML_KEM" = "yes"; then - AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ML_KEM" + if test "$ENABLED_ORIGINAL" = "yes"; then + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_KYBER_ORIGINAL" fi if test "$ENABLED_WC_KYBER" = "yes" @@ -1340,7 +1345,6 @@ done if test "$ENABLED_DILITHIUM" != "no" then - AS_IF([ test "$ENABLED_EXPERIMENTAL" != "yes" ],[ AC_MSG_ERROR([DILITHIUM requires --enable-experimental.]) ]) AM_CFLAGS="$AM_CFLAGS -DHAVE_DILITHIUM" if test "$ENABLED_MLDSA44" = ""; then @@ -3060,12 +3064,6 @@ do ;; no) ;; - zbkb) - # PACK, REV8 - ENABLED_RISCV_ASM=yes - AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_BIT_MANIPULATION" - AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_BASE_BIT_MANIPULATION" - ;; zbb) # REV8 ENABLED_RISCV_ASM=yes @@ -3076,6 +3074,16 @@ do ENABLED_RISCV_ASM=yes AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_CARRYLESS" ;; + zbkb) + # PACK, REV8 + ENABLED_RISCV_ASM=yes + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_BIT_MANIPULATION" + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_BASE_BIT_MANIPULATION" + ;; + zbt) + # FSL, FSR, FSRI, CMOV, CMIX - QEMU doesn't know about these instructions + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_BIT_MANIPULATION_TERNARY" + ;; zkn|zkned) # AES encrypt/decrpyt, SHA-2 ENABLED_RISCV_ASM=yes @@ -3085,20 +3093,20 @@ do ENABLED_RISCV_ASM=yes AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_VECTOR" ;; - zvkg) - # VGMUL, VHHSH + zvbb|zvkb) + # VBREV8 ENABLED_RISCV_ASM=yes - AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_VECTOR_GCM" + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_VECTOR_BASE_BIT_MANIPULATION" ;; zvbc) # VCLMUL, VCLMULH ENABLED_RISCV_ASM=yes AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_VECTOR_CARRYLESS" ;; - zvbb|zvkb) - # VBREV8 + zvkg) + # VGMUL, VHHSH ENABLED_RISCV_ASM=yes - AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_VECTOR_BASE_BIT_MANIPULATION" + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_RISCV_VECTOR_GCM" ;; zvkned) # Vector AES, SHA-2 @@ -5233,104 +5241,136 @@ AS_CASE([$FIPS_VERSION], # optimizations section # protocol section - AS_IF([test "$ENABLED_WOLFSSH" != "yes" && (test "$FIPS_VERSION" != "dev" || test "$enable_ssh" != "no")], + AS_IF([test "$ENABLED_WOLFSSH" != "yes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_ssh" != "no")], [enable_ssh="yes"]) - AS_IF([test "$ENABLED_HKDF" != "yes"], + AS_IF([test "$ENABLED_HKDF" != "yes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_hkdf" != "no")], [ENABLED_HKDF="yes"; AM_CFLAGS="$AM_CFLAGS -DHAVE_HKDF"]) - AS_IF([test "x$ENABLED_PWDBASED" = "xno"], + AS_IF([test "x$ENABLED_PWDBASED" = "xno" && + (test "$FIPS_VERSION" != "dev" || test "$enable_pwdbased" != "no")], [ENABLED_PWDBASED="yes"; AM_CFLAGS="$AM_CFLAGS -DHAVE_PBKDF2 -DHAVE_AESGCM"]) - AS_IF([test "x$ENABLED_SRTP" = "xno"], + AS_IF([test "x$ENABLED_SRTP" = "xno" && + (test "$FIPS_VERSION" != "dev" || test "$enable_srtp" != "no")], [ENABLED_SRTP="yes"]) - AS_IF([test "x$ENABLED_SRTP_KDF" = "xno"], + AS_IF([test "x$ENABLED_SRTP_KDF" = "xno" && + (test "$FIPS_VERSION" != "dev" || test "$enable_srtp_kdf" != "no")], [ENABLED_SRTP_KDF="yes"]) # public key section - AS_IF([test "$ENABLED_KEYGEN" != "yes" && (test "$FIPS_VERSION" != "dev" || test "$enable_keygen" != "no")], + AS_IF([test "$ENABLED_KEYGEN" != "yes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_keygen" != "no")], [ENABLED_KEYGEN="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_KEY_GEN"]) -# AS_IF([test "$ENABLED_COMPKEY" = "yes" && (test "$FIPS_VERSION" != "dev" || test "$enable_compkey" != "yes")], +# AS_IF([test "$ENABLED_COMPKEY" = "yes" && +# (test "$FIPS_VERSION" != "dev" || test "$enable_compkey" != "yes")], # [ENABLED_COMPKEY="yes"]) - AS_IF([test "$ENABLED_RSAPSS" != "yes"], + AS_IF([test "$ENABLED_RSAPSS" != "yes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_rsapss" != "no")], [ENABLED_RSAPSS="yes"; AM_CFLAGS="$AM_CFLAGS -DWC_RSA_PSS"]) - AS_IF([test "$ENABLED_ECC" != "yes"], + AS_IF([test "$ENABLED_ECC" != "yes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_ecc" != "no")], [ENABLED_ECC="yes"; AM_CFLAGS="$AM_CFLAGS -DHAVE_ECC -DTFM_ECC256" AS_IF([test "$ENABLED_ECC_SHAMIR" = "yes"], [AM_CFLAGS="$AM_CFLAGS -DECC_SHAMIR"])]) - AS_IF([test "x$ENABLED_ED25519" != "xyes"], + AS_IF([test "x$ENABLED_ED25519" != "xyes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_ed25519" != "no")], [ENABLED_ED25519="yes"; AM_CFLAGS="$AM_CFLAGS -DHAVE_ED25519 -DHAVE_ED25519_KEY_IMPORT"]) - AS_IF([test "$ENABLED_CURVE25519" = "no"], + AS_IF([test "$ENABLED_CURVE25519" = "no" && + (test "$FIPS_VERSION" != "dev" || test "$enable_curve25519" != "no")], [ENABLED_CURVE25519="yes"; AM_CFLAGS="$AM_CFLAGS -DHAVE_CURVE25519"]) - AS_IF([test "x$ENABLED_ED448" != "xyes"], + AS_IF([test "x$ENABLED_ED448" != "xyes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_ed448" != "no")], [ENABLED_ED448="yes"; AM_CFLAGS="$AM_CFLAGS -DHAVE_ED448 -DHAVE_ED448_KEY_IMPORT"]) - AS_IF([test "x$ENABLED_CURVE448" != "xyes"], + AS_IF([test "x$ENABLED_CURVE448" != "xyes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_curve448" != "no")], [ENABLED_CURVE448="yes"; AM_CFLAGS="$AM_CFLAGS -DHAVE_CURVE448"]) - AS_IF([test "x$ENABLED_ED25519_STREAM" != "xyes"], + AS_IF([test "x$ENABLED_ED25519_STREAM" != "xyes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_ed25519_stream" != "no")], [ENABLED_ED25519_STREAM="yes"]) - AS_IF([test "x$ENABLED_ED448_STREAM" != "xyes"], + AS_IF([test "x$ENABLED_ED448_STREAM" != "xyes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_ed448_stream" != "no")], [ENABLED_ED448_STREAM="yes"]) - AS_IF([test "x$ENABLED_ECCCUSTCURVES" != "xno" && test "$FIPS_VERSION" != "dev"], + AS_IF([test "x$ENABLED_ECCCUSTCURVES" != "xno" && + test "$FIPS_VERSION" != "dev"], [ENABLED_ECCCUSTCURVES="no"]) # Hashing section - AS_IF([test "x$ENABLED_SHA3" != "xyes"], + AS_IF([test "x$ENABLED_SHA3" != "xyes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_sha3" != "no")], [ENABLED_SHA3="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SHA3"]) - AS_IF([test "$ENABLED_SHA224" != "yes" && (test "$FIPS_VERSION" != "dev" || test "$enable_sha224" != "no")], + AS_IF([test "$ENABLED_SHA224" != "yes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_sha224" != "no")], [ENABLED_SHA224="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SHA224"]) - AS_IF([test "$ENABLED_SHA512" = "no"], + AS_IF([test "$ENABLED_SHA512" = "no" && + (test "$FIPS_VERSION" != "dev" || test "$enable_sha512" != "no")], [ENABLED_SHA512="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SHA512 -DWOLFSSL_SHA384"]) # SHA512-224 and SHA512-256 are SHA-2 algorithms not in our FIPS algorithm list AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_NOSHA512_224 -DWOLFSSL_NOSHA512_256" # Shake128 because we're testing SHAKE256 - AS_IF([test "x$ENABLED_SHAKE128" = "xno"], + AS_IF([test "x$ENABLED_SHAKE128" = "xno" && + (test "$FIPS_VERSION" != "dev" || test "$enable_shake128" != "no")], [ENABLED_SHAKE128="yes"]) # Shake256 mandated for ED448 - AS_IF([test "x$ENABLED_SHAKE256" = "xno"], + AS_IF([test "x$ENABLED_SHAKE256" = "xno" && + (test "$FIPS_VERSION" != "dev" || test "$enable_shake256" != "no")], [ENABLED_SHAKE256="yes"]) # Aes section - AS_IF([test "$ENABLED_AESCCM" != "yes"], + AS_IF([test "$ENABLED_AESCCM" != "yes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_aesccm" != "no")], [ENABLED_AESCCM="yes"; AM_CFLAGS="$AM_CFLAGS -DHAVE_AESCCM"]) - AS_IF([test "$ENABLED_AESCTR" != "yes"], + AS_IF([test "$ENABLED_AESCTR" != "yes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_aesctr" != "no")], [ENABLED_AESCTR="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_AES_COUNTER"]) - AS_IF([test "$ENABLED_CMAC" != "yes"], + AS_IF([test "$ENABLED_CMAC" != "yes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_cmac" != "no")], [ENABLED_CMAC="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_CMAC"]) - AS_IF([test "$ENABLED_AESGCM" = "no"], + AS_IF([test "$ENABLED_AESGCM" = "no" && + (test "$FIPS_VERSION" != "dev" || test "$enable_aesgcm" != "no")], [ENABLED_AESGCM="yes"; AM_CFLAGS="$AM_CFLAGS -DHAVE_AESGCM"; AM_CCASFLAGS="$AM_CCASFLAGS -DHAVE_AESGCM"]) # AES-GCM streaming is part of the v6 FIPS suite, but isn't implemented # for armasm on arm-v7 or earlier (see armasm setup above). - AS_IF([test "$ENABLED_AESGCM_STREAM" != "yes" && ! (test "$ENABLED_ARMASM" = "yes" && test "$ENABLED_ARMASM_CRYPTO" = "no")], + AS_IF([test "$ENABLED_AESGCM_STREAM" != "yes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_aesgcm_stream" != "no") && + ! (test "$ENABLED_ARMASM" = "yes" && test "$ENABLED_ARMASM_CRYPTO" = "no")], [ENABLED_AESGCM_STREAM="yes"]) - AS_IF([test "x$ENABLED_AESOFB" = "xno"], + AS_IF([test "x$ENABLED_AESOFB" = "xno" && + (test "$FIPS_VERSION" != "dev" || test "$enable_aesofb" != "no")], [ENABLED_AESOFB="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_AES_OFB"]) - AS_IF([test "x$ENABLED_AESCFB" = "xno"], + AS_IF([test "x$ENABLED_AESCFB" = "xno" && + (test "$FIPS_VERSION" != "dev" || test "$enable_aescfb" != "no")], [ENABLED_AESCFB="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_AES_CFB"]) - AS_IF([test "x$ENABLED_AESXTS" = "xno"], + AS_IF([test "x$ENABLED_AESXTS" = "xno" && + (test "$FIPS_VERSION" != "dev" || test "$enable_aesxts" != "no")], [ENABLED_AESXTS="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_AES_XTS"]) AS_IF([test "x$ENABLED_AESXTS" = "xyes" && test "x$ENABLED_AESNI" = "xyes"], [AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_AES_XTS"]) - AS_IF([test "x$ENABLED_AESXTS_STREAM" = "xno" && ! (test "$ENABLED_ARMASM" = "yes" || test "$ENABLED_ARMASM_CRYPTO" = "no")], + AS_IF([test "x$ENABLED_AESXTS_STREAM" = "xno" && + (test "$FIPS_VERSION" != "dev" || test "$enable_aesxts_stream" != "no") && + ! (test "$ENABLED_ARMASM" = "yes" || test "$ENABLED_ARMASM_CRYPTO" = "no")], [ENABLED_AESXTS_STREAM="yes"]) AS_IF([(test "$ENABLED_AESCCM" = "yes" && test "$HAVE_AESCCM_PORT" != "yes") || @@ -5339,7 +5379,8 @@ AS_CASE([$FIPS_VERSION], (test "$ENABLED_AESOFB" = "yes" && test "$HAVE_AESOFB_PORT" != "yes")], [AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_AES_DIRECT -DHAVE_AES_ECB"]) - AS_IF([test "x$ENABLED_AESKEYWRAP" != "xyes"], + AS_IF([test "x$ENABLED_AESKEYWRAP" != "xyes" && + (test "$FIPS_VERSION" != "dev" || test "$enable_aeskeywrap" != "no")], [ENABLED_AESKEYWRAP="yes"; AM_CFLAGS="$AM_CFLAGS -DHAVE_AES_KEYWRAP"]) # Old TLS requires MD5 + HMAC, which is not allowed under FIPS 140-3 @@ -5382,66 +5423,84 @@ AS_CASE([$FIPS_VERSION], # force various features to FIPS 140-3 defaults, unless overridden with dev: - AS_IF([test "$ENABLED_KEYGEN" != "yes" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_keygen" != "no")], + AS_IF([test "$ENABLED_KEYGEN" != "yes" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_keygen" != "no")], [ENABLED_KEYGEN="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_KEY_GEN"]) - AS_IF([test "$ENABLED_COMPKEY" = "yes" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_compkey" != "yes")], + AS_IF([test "$ENABLED_COMPKEY" = "yes" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_compkey" != "yes")], [ENABLED_COMPKEY="no"]) - AS_IF([test "$ENABLED_SHA224" != "yes" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_sha224" != "no")], + AS_IF([test "$ENABLED_SHA224" != "yes" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_sha224" != "no")], [ENABLED_SHA224="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SHA224"]) - AS_IF([test "$ENABLED_SHA3" != "yes" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_sha3" != "no")], + AS_IF([test "$ENABLED_SHA3" != "yes" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_sha3" != "no")], [ENABLED_SHA3="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SHA3"]) - AS_IF([test "$ENABLED_WOLFSSH" != "yes" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_ssh" != "no")], + AS_IF([test "$ENABLED_WOLFSSH" != "yes" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_ssh" != "no")], [enable_ssh="yes"]) # Shake128 is a SHA-3 algorithm outside the v5 FIPS algorithm list - AS_IF([test "$ENABLED_SHAKE128" != "no" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_shake128" != "yes")], + AS_IF([test "$ENABLED_SHAKE128" != "no" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_shake128" != "yes")], [ENABLED_SHAKE128=no; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_NO_SHAKE128"]) # Shake256 is a SHA-3 algorithm outside the v5 FIPS algorithm list - AS_IF([test "$ENABLED_SHAKE256" != "no" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_shake256" != "yes")], + AS_IF([test "$ENABLED_SHAKE256" != "no" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_shake256" != "yes")], [ENABLED_SHAKE256=no; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_NO_SHAKE256"]) # SHA512-224 and SHA512-256 are SHA-2 algorithms outside the v5 FIPS algorithm list AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_NOSHA512_224 -DWOLFSSL_NOSHA512_256" - AS_IF([test "$ENABLED_AESCCM" != "yes" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_aesccm" != "no")], + AS_IF([test "$ENABLED_AESCCM" != "yes" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_aesccm" != "no")], [ENABLED_AESCCM="yes"; AM_CFLAGS="$AM_CFLAGS -DHAVE_AESCCM"]) - AS_IF([test "$ENABLED_AESXTS" = "yes" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_aesxts" != "yes")], + AS_IF([test "$ENABLED_AESXTS" = "yes" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_aesxts" != "yes")], [ENABLED_AESXTS="no"]) - AS_IF([test "$ENABLED_RSAPSS" != "yes" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_rsapss" != "no")], + AS_IF([test "$ENABLED_RSAPSS" != "yes" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_rsapss" != "no")], [ENABLED_RSAPSS="yes"; AM_CFLAGS="$AM_CFLAGS -DWC_RSA_PSS"]) - AS_IF([test "$ENABLED_ECC" != "yes" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_ecc" != "no")], + AS_IF([test "$ENABLED_ECC" != "yes" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_ecc" != "no")], [ENABLED_ECC="yes"; AM_CFLAGS="$AM_CFLAGS -DHAVE_ECC -DTFM_ECC256" - AS_IF([test "$ENABLED_ECC_SHAMIR" = "yes" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_eccshamir" != "no")], + AS_IF([test "$ENABLED_ECC_SHAMIR" = "yes" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_eccshamir" != "no")], [AM_CFLAGS="$AM_CFLAGS -DECC_SHAMIR"])]) - AS_IF([test "$ENABLED_AESCTR" != "yes" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_aesctr" != "no")], + AS_IF([test "$ENABLED_AESCTR" != "yes" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_aesctr" != "no")], [ENABLED_AESCTR="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_AES_COUNTER"]) - AS_IF([test "$ENABLED_CMAC" != "yes" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_cmac" != "no")], + AS_IF([test "$ENABLED_CMAC" != "yes" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_cmac" != "no")], [ENABLED_CMAC="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_CMAC"]) - AS_IF([test "$ENABLED_HKDF" != "yes" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_hkdf" != "no")], + AS_IF([test "$ENABLED_HKDF" != "yes" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_hkdf" != "no")], [ENABLED_HKDF="yes"; AM_CFLAGS="$AM_CFLAGS -DHAVE_HKDF"]) AS_IF([test "$ENABLED_INTELASM" = "yes"], [AM_CFLAGS="$AM_CFLAGS -DFORCE_FAILURE_RDSEED"]) - AS_IF([test "$ENABLED_SHA512" = "no" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_sha512" != "no")], + AS_IF([test "$ENABLED_SHA512" = "no" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_sha512" != "no")], [ENABLED_SHA512="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SHA512 -DWOLFSSL_SHA384"]) - AS_IF([test "$ENABLED_AESGCM" = "no" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_aesgcm" != "no")], + AS_IF([test "$ENABLED_AESGCM" = "no" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_aesgcm" != "no")], [ENABLED_AESGCM="yes"; AM_CFLAGS="$AM_CFLAGS -DHAVE_AESGCM"; AM_CCASFLAGS="$AM_CCASFLAGS -DHAVE_AESGCM"]) # AES-GCM streaming isn't part of the v5 FIPS suite. - AS_IF([test "$ENABLED_AESGCM_STREAM" = "yes" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_aesgcm_stream" != "yes")], + AS_IF([test "$ENABLED_AESGCM_STREAM" = "yes" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_aesgcm_stream" != "yes")], [ENABLED_AESGCM_STREAM="no"]) # Old TLS requires MD5 + HMAC, which is not allowed under FIPS 140-3 @@ -5449,7 +5508,8 @@ AS_CASE([$FIPS_VERSION], [ENABLED_OLD_TLS="no"; AM_CFLAGS="$AM_CFLAGS -DNO_OLD_TLS"]) AS_IF([test $HAVE_FIPS_VERSION_MINOR -ge 2], - [AS_IF([test "x$ENABLED_AESOFB" = "xno" && (test "$FIPS_VERSION" != "v5-dev" || test "$enable_aesofb" != "no")], + [AS_IF([test "x$ENABLED_AESOFB" = "xno" && + (test "$FIPS_VERSION" != "v5-dev" || test "$enable_aesofb" != "no")], [ENABLED_AESOFB="yes"; AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_AES_OFB"])]) AS_IF([(test "$ENABLED_AESCCM" = "yes" && test "$HAVE_AESCCM_PORT" != "yes") || @@ -8417,6 +8477,19 @@ AC_ARG_ENABLE([cryptocb], [ ENABLED_CRYPTOCB=no ] ) +# Enable testing of cryptoCb using software crypto. On platforms where wolfCrypt tests +# are used to test a custom cryptoCb, it may be desired to disable this so wolfCrypt tests +# don't also test software implementations of every algorithm +AC_ARG_ENABLE([cryptocb-sw-test], + [AS_HELP_STRING([--disable-cryptocb-sw-test],[Disable wolfCrypt crypto callback tests using software crypto (default: enabled). Only valid with --enable-cryptocb])], + [ if test "x$ENABLED_CRYPTOCB" = "xno"; then + AC_MSG_ERROR([--disable-cryptocb-sw-test requires --enable-cryptocb]) + else + ENABLED_CRYPTOCB_SW_TEST=$enableval + fi ], + [ ENABLED_CRYPTOCB_SW_TEST=yes ] + ) + if test "x$ENABLED_PKCS11" = "xyes" || test "x$ENABLED_WOLFTPM" = "xyes" || test "$ENABLED_CAAM" != "no" then ENABLED_CRYPTOCB=yes @@ -8426,6 +8499,11 @@ then AM_CFLAGS="$AM_CFLAGS -DWOLF_CRYPTO_CB" fi +if test "$ENABLED_CRYPTOCB_SW_TEST" = "no" +then + AM_CFLAGS="$AM_CFLAGS -DWC_TEST_NO_CRYPTOCB_SW_TEST" +fi + # Asynchronous Crypto @@ -9849,7 +9927,7 @@ AX_AM_JOBSERVER([yes]) # See Automake 9.4.1 Built Sources Example AC_DEFUN([AX_OUT_OF_TREE_FILE],[ - AC_CONFIG_COMMANDS([$1], [test ! -f $srcdir/$1 && >> $srcdir/$1]) + AC_CONFIG_COMMANDS([$1], [test ! -f $srcdir/$1 && echo -n >> $srcdir/$1]) ]) AX_OUT_OF_TREE_FILE([wolfssl/wolfcrypt/async.h]) @@ -9981,7 +10059,7 @@ echo "" >> $OPTION_FILE echo "#endif /* WOLFSSL_OPTIONS_H */" >> $OPTION_FILE echo "" >> $OPTION_FILE -if test "$ENABLED_DEBUG_TRACE_ERRCODES" = "yes" +if test "$ENABLED_DEBUG_TRACE_ERRCODES" != "no" then support/gen-debug-trace-error-codes.sh || AC_MSG_ERROR([Header generation for debug-trace-errcodes failed.]) fi @@ -10329,7 +10407,7 @@ fi # $silent != yes if test "$ENABLED_ASYNCCRYPT" = "yes" && ! test -s $srcdir/wolfcrypt/src/async.c then - AC_MSG_WARN([Make sure real async files are loaded. Contact wolfSSL for details on using the asynccrypt option.]) + AC_MSG_WARN([Make sure real async files are loaded. See async-check.sh or the wolfssl/wolfAsyncCrypt GitHub repo.]) fi # MinGW static vs shared library @@ -10356,3 +10434,10 @@ if test -n "$WITH_MAX_ECC_BITS"; then fi fi +if test "$silent" != "yes"; then + +echo "---" +echo "Note: Make sure your application includes \"wolfssl/options.h\" before any other wolfSSL headers." +echo " You can define \"WOLFSSL_USE_OPTIONS_H\" in your application to include this automatically." + +fi diff --git a/doc/dox_comments/header_files/wolfio.h b/doc/dox_comments/header_files/wolfio.h index a1404fbe62..5e52e3573b 100644 --- a/doc/dox_comments/header_files/wolfio.h +++ b/doc/dox_comments/header_files/wolfio.h @@ -422,9 +422,9 @@ void wolfSSL_SetIOReadFlags( WOLFSSL* ssl, int flags); flags parameter may include one or more of the following: #define MSG_OOB 0x1 // process out-of-band data, #define MSG_DONTROUTE 0x4 // bypass routing, use direct interface. - The flag MSG_OOB is used to send ``out-of-band'' data on sockets that + The flag MSG_OOB is used to send 'out-of-band' data on sockets that support this notion (e.g. SOCK_STREAM); the underlying protocol must also - support ``out-of-band'' data. MSG_DONTROUTE is usually used only by + support 'out-of-band' data. MSG_DONTROUTE is usually used only by diagnostic or routing programs.” \return none No returns. diff --git a/doc/generate_documentation.sh b/doc/generate_documentation.sh index e5defefe30..7a7bbf9df5 100755 --- a/doc/generate_documentation.sh +++ b/doc/generate_documentation.sh @@ -1,4 +1,5 @@ -#!/bin/bash +#!/bin/sh +# This script depends on g++, cmake, git, and make to be installed POSIXLY_CORRECT=1 @@ -8,30 +9,6 @@ GEN_PDF=false GEN_ALL=false INSTALL_DOX=false -command -v g++ -if [ $? -ne "0" ]; then -echo "Please install g++" -exit 1 -fi - -command -v cmake -if [ $? -ne "0" ]; then -echo "Please install cmake" -exit 1 -fi - -command -v git -if [ $? -ne "0" ]; then -echo "Please install git" -exit 1 -fi - -command -v make -if [ $? -ne "0" ]; then -echo "Please install make" -exit 1 -fi - # Checking arguments and setting appropriate option variables for var in "$@" diff --git a/examples/async/async_client.c b/examples/async/async_client.c index 27d66df9ce..52fafbd7bd 100644 --- a/examples/async/async_client.c +++ b/examples/async/async_client.c @@ -22,6 +22,10 @@ /* TLS client demonstrating asynchronous cryptography features and optionally * using the crypto or PK callbacks */ +#ifdef HAVE_CONFIG_H + #include +#endif + /* std */ #include #include @@ -180,7 +184,7 @@ int client_async_test(int argc, char** argv) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; @@ -188,7 +192,7 @@ int client_async_test(int argc, char** argv) #endif ret = wolfSSL_connect(ssl); err = wolfSSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != WOLFSSL_SUCCESS) { fprintf(stderr, "wolfSSL_connect error %d: %s\n", err, wolfSSL_ERR_error_string(err, errBuff)); @@ -210,7 +214,7 @@ int client_async_test(int argc, char** argv) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; @@ -218,7 +222,7 @@ int client_async_test(int argc, char** argv) #endif ret = wolfSSL_write(ssl, buff, (int)len); err = wolfSSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != (int)len) { fprintf(stderr, "wolfSSL_write error %d: %s\n", err, wolfSSL_ERR_error_string(err, errBuff)); @@ -232,7 +236,7 @@ int client_async_test(int argc, char** argv) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; @@ -240,7 +244,7 @@ int client_async_test(int argc, char** argv) #endif ret = wolfSSL_read(ssl, buff, sizeof(buff)-1); err = wolfSSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) { fprintf(stderr, "wolfSSL_read error %d: %s\n", err, wolfSSL_ERR_error_string(err, errBuff)); diff --git a/examples/async/async_server.c b/examples/async/async_server.c index 6740c0b37c..122e0c37ec 100644 --- a/examples/async/async_server.c +++ b/examples/async/async_server.c @@ -22,6 +22,10 @@ /* TLS server demonstrating asynchronous cryptography features and optionally * using the crypto or PK callbacks */ +#ifdef HAVE_CONFIG_H + #include +#endif + /* std */ #include #include @@ -244,7 +248,7 @@ int server_async_test(int argc, char** argv) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; @@ -252,7 +256,7 @@ int server_async_test(int argc, char** argv) #endif ret = wolfSSL_accept(ssl); err = wolfSSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != WOLFSSL_SUCCESS) { fprintf(stderr, "wolfSSL_accept error %d: %s\n", err, wolfSSL_ERR_error_string(err, errBuff)); @@ -269,7 +273,7 @@ int server_async_test(int argc, char** argv) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; @@ -277,7 +281,7 @@ int server_async_test(int argc, char** argv) #endif ret = wolfSSL_read(ssl, buff, sizeof(buff)-1); err = wolfSSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) { fprintf(stderr, "wolfSSL_read error %d: %s\n", err, wolfSSL_ERR_error_string(err, errBuff)); @@ -304,7 +308,7 @@ int server_async_test(int argc, char** argv) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; @@ -312,7 +316,7 @@ int server_async_test(int argc, char** argv) #endif ret = wolfSSL_write(ssl, buff, (int)len); err = wolfSSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != (int)len) { fprintf(stderr, "wolfSSL_write error %d: %s\n", err, wolfSSL_ERR_error_string(err, errBuff)); diff --git a/examples/async/async_tls.c b/examples/async/async_tls.c index 4ab9de003c..ee7183042a 100644 --- a/examples/async/async_tls.c +++ b/examples/async/async_tls.c @@ -19,6 +19,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ +#ifdef HAVE_CONFIG_H + #include +#endif + #ifndef WOLFSSL_USER_SETTINGS #include #endif @@ -41,7 +45,7 @@ /* This is where you would plug-in calls to your own hardware crypto */ int AsyncTlsCryptoCb(int devIdArg, wc_CryptoInfo* info, void* ctx) { - int ret = CRYPTOCB_UNAVAILABLE; /* return this to bypass HW and use SW */ + int ret = WC_NO_ERR_TRACE(CRYPTOCB_UNAVAILABLE); /* bypass HW by default */ AsyncTlsCryptoCbCtx* myCtx = (AsyncTlsCryptoCbCtx*)ctx; if (info == NULL) diff --git a/examples/benchmark/tls_bench.c b/examples/benchmark/tls_bench.c index 585fa7b2d0..609481a3e0 100644 --- a/examples/benchmark/tls_bench.c +++ b/examples/benchmark/tls_bench.c @@ -1816,7 +1816,9 @@ static int SetupSupportedGroups(int verbose) printf("Will benchmark the following group: %s\n", groups[i].name); } - } else if (uks_ret == BAD_FUNC_ARG || uks_ret == NOT_COMPILED_IN) { + } else if (uks_ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG) || + uks_ret == WC_NO_ERR_TRACE(NOT_COMPILED_IN)) + { groups[i].group = 0; if (verbose) { printf("Will NOT benchmark the following group: %s\n", diff --git a/examples/client/client.c b/examples/client/client.c index 3a63ff74c0..b8adcc1924 100644 --- a/examples/client/client.c +++ b/examples/client/client.c @@ -183,10 +183,10 @@ static int NonBlockingSSL_Connect(WOLFSSL* ssl) while (ret != WOLFSSL_SUCCESS && (error == WOLFSSL_ERROR_WANT_READ || error == WOLFSSL_ERROR_WANT_WRITE #ifdef WOLFSSL_ASYNC_CRYPT - || error == WC_PENDING_E + || error == WC_NO_ERR_TRACE(WC_PENDING_E) #endif #ifdef WOLFSSL_NONBLOCK_OCSP - || error == OCSP_WANT_READ + || error == WC_NO_ERR_TRACE(OCSP_WANT_READ) #endif )) { int currTimeout = 1; @@ -197,7 +197,7 @@ static int NonBlockingSSL_Connect(WOLFSSL* ssl) printf("... client would write block\n"); #ifdef WOLFSSL_ASYNC_CRYPT - if (error == WC_PENDING_E) { + if (error == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } @@ -221,10 +221,10 @@ static int NonBlockingSSL_Connect(WOLFSSL* ssl) if ((select_ret == TEST_RECV_READY) || (select_ret == TEST_SEND_READY) || (select_ret == TEST_ERROR_READY) #ifdef WOLFSSL_ASYNC_CRYPT - || error == WC_PENDING_E + || error == WC_NO_ERR_TRACE(WC_PENDING_E) #endif #ifdef WOLFSSL_NONBLOCK_OCSP - || error == OCSP_WANT_READ + || error == WC_NO_ERR_TRACE(OCSP_WANT_READ) #endif ) { #ifndef WOLFSSL_CALLBACKS @@ -324,12 +324,12 @@ static void SetKeyShare(WOLFSSL* ssl, int onlyKeyShare, int useX25519, if (ret == WOLFSSL_SUCCESS) groups[count++] = WOLFSSL_ECC_X25519; #ifdef WOLFSSL_ASYNC_CRYPT - else if (ret == WC_PENDING_E) + else if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); #endif else err_sys("unable to use curve x25519"); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); #endif } else if (useX448) { @@ -339,12 +339,12 @@ static void SetKeyShare(WOLFSSL* ssl, int onlyKeyShare, int useX25519, if (ret == WOLFSSL_SUCCESS) groups[count++] = WOLFSSL_ECC_X448; #ifdef WOLFSSL_ASYNC_CRYPT - else if (ret == WC_PENDING_E) + else if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); #endif else err_sys("unable to use curve x448"); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); #endif } else { @@ -355,12 +355,12 @@ static void SetKeyShare(WOLFSSL* ssl, int onlyKeyShare, int useX25519, if (ret == WOLFSSL_SUCCESS) groups[count++] = WOLFSSL_ECC_SECP256R1; #ifdef WOLFSSL_ASYNC_CRYPT - else if (ret == WC_PENDING_E) + else if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); #endif else err_sys("unable to use curve secp256r1"); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); #endif #ifdef WOLFSSL_SM2 do { @@ -368,12 +368,12 @@ static void SetKeyShare(WOLFSSL* ssl, int onlyKeyShare, int useX25519, if (ret == WOLFSSL_SUCCESS) groups[count++] = WOLFSSL_ECC_SM2P256V1; #ifdef WOLFSSL_ASYNC_CRYPT - else if (ret == WC_PENDING_E) + else if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); #endif else err_sys("unable to use curve sm2p256v1"); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); #endif #endif } @@ -385,12 +385,12 @@ static void SetKeyShare(WOLFSSL* ssl, int onlyKeyShare, int useX25519, if (ret == WOLFSSL_SUCCESS) groups[count++] = WOLFSSL_FFDHE_2048; #ifdef WOLFSSL_ASYNC_CRYPT - else if (ret == WC_PENDING_E) + else if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); #endif else err_sys("unable to use DH 2048-bit parameters"); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); #endif } #ifdef HAVE_PQC @@ -398,24 +398,43 @@ static void SetKeyShare(WOLFSSL* ssl, int onlyKeyShare, int useX25519, if (usePqc) { int group = 0; + #ifndef WOLFSSL_NO_KYBER512 if (XSTRCMP(pqcAlg, "KYBER_LEVEL1") == 0) { group = WOLFSSL_KYBER_LEVEL1; } - else if (XSTRCMP(pqcAlg, "KYBER_LEVEL3") == 0) { + else + #endif + #ifndef WOLFSSL_NO_KYBER768 + if (XSTRCMP(pqcAlg, "KYBER_LEVEL3") == 0) { group = WOLFSSL_KYBER_LEVEL3; } - else if (XSTRCMP(pqcAlg, "KYBER_LEVEL5") == 0) { + else + #endif + #ifndef WOLFSSL_NO_KYBER1024 + if (XSTRCMP(pqcAlg, "KYBER_LEVEL5") == 0) { group = WOLFSSL_KYBER_LEVEL5; } - else if (XSTRCMP(pqcAlg, "P256_KYBER_LEVEL1") == 0) { + else + #endif + #ifndef WOLFSSL_NO_KYBER512 + if (XSTRCMP(pqcAlg, "P256_KYBER_LEVEL1") == 0) { group = WOLFSSL_P256_KYBER_LEVEL1; } - else if (XSTRCMP(pqcAlg, "P384_KYBER_LEVEL3") == 0) { + else + #endif + #ifndef WOLFSSL_NO_KYBER768 + if (XSTRCMP(pqcAlg, "P384_KYBER_LEVEL3") == 0) { group = WOLFSSL_P384_KYBER_LEVEL3; } - else if (XSTRCMP(pqcAlg, "P521_KYBER_LEVEL5") == 0) { + else + #endif + #ifndef WOLFSSL_NO_KYBER1024 + if (XSTRCMP(pqcAlg, "P521_KYBER_LEVEL5") == 0) { group = WOLFSSL_P521_KYBER_LEVEL5; - } else { + } + else + #endif + { err_sys("invalid post-quantum KEM specified"); } @@ -452,13 +471,13 @@ static void EarlyData(WOLFSSL_CTX* ctx, WOLFSSL* ssl, const char* msg, if (ret <= 0) { err = wolfSSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != msgSz) { LOG_ERROR("SSL_write_early_data msg error %d, %s\n", err, wolfSSL_ERR_error_string((unsigned long)err, buffer)); @@ -564,14 +583,14 @@ static int ClientBenchmarkConnections(WOLFSSL_CTX* ctx, char* host, word16 port, if (ret != WOLFSSL_SUCCESS) { err = wolfSSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { /* returns the number of polled items or <0 for error */ ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); #ifdef WOLFSSL_EARLY_DATA EarlyDataStatus(ssl); #endif @@ -668,13 +687,13 @@ static int ClientBenchmarkThroughput(WOLFSSL_CTX* ctx, char* host, word16 port, if (ret != WOLFSSL_SUCCESS) { err = wolfSSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret == WOLFSSL_SUCCESS) { /* Perform throughput test */ char *tx_buffer, *rx_buffer; @@ -720,13 +739,13 @@ static int ClientBenchmarkThroughput(WOLFSSL_CTX* ctx, char* host, word16 port, if (ret <= 0) { err = wolfSSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != len) { LOG_ERROR("SSL_write bench error %d!\n", err); if (!exitWithRet) @@ -746,7 +765,7 @@ static int ClientBenchmarkThroughput(WOLFSSL_CTX* ctx, char* host, word16 port, if (ret <= 0) { err = wolfSSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } @@ -909,13 +928,13 @@ static int SMTP_Shutdown(WOLFSSL* ssl, int wc_shutdown) if (ret < 0) { err = wolfSSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != (int)XSTRLEN(starttlsCmd[5])) { err_sys("failed to send SMTP QUIT command\n"); } @@ -926,13 +945,13 @@ static int SMTP_Shutdown(WOLFSSL* ssl, int wc_shutdown) if (ret < 0) { err = wolfSSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) { err_sys("failed to read SMTP closing down response\n"); } @@ -965,7 +984,7 @@ static int ClientWrite(WOLFSSL* ssl, const char* msg, int msgSz, const char* str if (ret <= 0) { err = wolfSSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } @@ -974,7 +993,7 @@ static int ClientWrite(WOLFSSL* ssl, const char* msg, int msgSz, const char* str } while (err == WOLFSSL_ERROR_WANT_WRITE || err == WOLFSSL_ERROR_WANT_READ #ifdef WOLFSSL_ASYNC_CRYPT - || err == WC_PENDING_E + || err == WC_NO_ERR_TRACE(WC_PENDING_E) #endif ); if (ret != msgSz) { @@ -1002,14 +1021,16 @@ static int ClientRead(WOLFSSL* ssl, char* reply, int replyLen, int mustRead, if (ret <= 0) { err = wolfSSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } else #endif if (err != WOLFSSL_ERROR_WANT_READ && - err != WOLFSSL_ERROR_WANT_WRITE && err != APP_DATA_READY) { + err != WOLFSSL_ERROR_WANT_WRITE && + err != WC_NO_ERR_TRACE(APP_DATA_READY)) + { LOG_ERROR("SSL_read reply error %d, %s\n", err, wolfSSL_ERR_error_string((unsigned long)err, buffer)); if (!exitWithRet) { @@ -1034,9 +1055,9 @@ static int ClientRead(WOLFSSL* ssl, char* reply, int replyLen, int mustRead, } while ((mustRead && err == WOLFSSL_ERROR_WANT_READ) || err == WOLFSSL_ERROR_WANT_WRITE #ifdef WOLFSSL_ASYNC_CRYPT - || err == WC_PENDING_E + || err == WC_NO_ERR_TRACE(WC_PENDING_E) #endif - || err == APP_DATA_READY + || err == WC_NO_ERR_TRACE(APP_DATA_READY) ); if (ret > 0) { reply[ret] = 0; /* null terminate */ @@ -1657,7 +1678,9 @@ static void Usage(void) printf("%s", msg[++msgid]); /* -D */ printf("%s", msg[++msgid]); /* -e */ printf("%s", msg[++msgid]); /* -g */ +#ifdef WOLFSSL_DTLS printf("%s", msg[++msgid]); /* -u */ +#endif #ifdef WOLFSSL_SCTP printf("%s", msg[++msgid]); /* -G */ #endif @@ -1772,7 +1795,6 @@ static void Usage(void) printf("%s", msg[++msgid]); /* --wolfsentry-config */ #endif printf("%s", msg[++msgid]); /* -7 */ - printf("%s", msg[++msgid]); /* Examples repo link */ #ifdef HAVE_PQC printf("%s", msg[++msgid]); /* --pqc */ #endif @@ -1821,7 +1843,7 @@ static int client_srtp_test(WOLFSSL *ssl, func_args *args) ret = wolfSSL_export_dtls_srtp_keying_material(ssl, NULL, &srtp_secret_length); - if (ret != LENGTH_ONLY_E) { + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) { LOG_ERROR("DTLS SRTP: Error getting keying material length\n"); return ret; } @@ -3203,7 +3225,7 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args) #if (defined(WOLFSSL_SCTP) || defined(WOLFSSL_DTLS_MTU)) && \ defined(WOLFSSL_DTLS) if (dtlsMTU) - wolfSSL_CTX_dtls_set_mtu(ctx, dtlsMTU); + wolfSSL_CTX_dtls_set_mtu(ctx, (unsigned short)dtlsMTU); #endif #ifndef NO_DH @@ -3961,13 +3983,13 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args) if (ret != WOLFSSL_SUCCESS) { err = wolfSSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); } #else timeoutConnect.tv_sec = DEFAULT_TIMEOUT_SEC; @@ -4148,7 +4170,7 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args) if (err == WOLFSSL_SUCCESS) printf("Received ALPN protocol : %s (%d)\n", protocol_name, protocol_nameSz); - else if (err == WOLFSSL_ALPN_NOT_FOUND) + else if (err == WC_NO_ERR_TRACE(WOLFSSL_ALPN_NOT_FOUND)) printf("No ALPN response received (no match with server)\n"); else printf("Getting ALPN protocol name failed\n"); @@ -4204,12 +4226,12 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args) else { do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif - if (err == APP_DATA_READY) { + if (err == WC_NO_ERR_TRACE(APP_DATA_READY)) { if (wolfSSL_read(ssl, reply, sizeof(reply)-1) < 0) { err_sys("APP DATA should be present " @@ -4225,9 +4247,9 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args) } } while (ret != WOLFSSL_SUCCESS && (err == WOLFSSL_ERROR_WANT_READ || - err == WOLFSSL_ERROR_WANT_WRITE || - err == APP_DATA_READY || - err == WC_PENDING_E)); + err == WOLFSSL_ERROR_WANT_WRITE || + err == WC_NO_ERR_TRACE(APP_DATA_READY) || + err == WC_NO_ERR_TRACE(WC_PENDING_E))); } if (ret == WOLFSSL_SUCCESS) { @@ -4254,12 +4276,12 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args) if ((ret = wolfSSL_Rehandshake(ssl)) != WOLFSSL_SUCCESS) { err = wolfSSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - while (err == WC_PENDING_E) { + while (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { err = 0; ret = wolfSSL_negotiate(ssl); if (ret != WOLFSSL_SUCCESS) { err = wolfSSL_get_error(ssl, 0); - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } @@ -4284,12 +4306,12 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args) if ((ret = wolfSSL_SecureResume(ssl)) != WOLFSSL_SUCCESS) { err = wolfSSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - while (err == WC_PENDING_E) { + while (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { err = 0; ret = wolfSSL_negotiate(ssl); if (ret != WOLFSSL_SUCCESS) { err = wolfSSL_get_error(ssl, 0); - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } @@ -4553,14 +4575,14 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args) if (ret != WOLFSSL_SUCCESS) { err = wolfSSL_get_error(sslResume, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(sslResume, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); } #else timeoutConnect.tv_sec = DEFAULT_TIMEOUT_SEC; @@ -4595,7 +4617,7 @@ THREAD_RETURN WOLFSSL_THREAD client_test(void* args) if (err == WOLFSSL_SUCCESS) printf("Received ALPN protocol : %s (%d)\n", protocol_name, protocol_nameSz); - else if (err == WOLFSSL_ALPN_NOT_FOUND) + else if (err == WC_NO_ERR_TRACE(WOLFSSL_ALPN_NOT_FOUND)) printf("Not received ALPN response (no match with server)\n"); else printf("Getting ALPN protocol name failed\n"); diff --git a/examples/configs/user_settings_all.h b/examples/configs/user_settings_all.h index 6020423b27..9340ea38c0 100644 --- a/examples/configs/user_settings_all.h +++ b/examples/configs/user_settings_all.h @@ -46,7 +46,7 @@ extern "C" { #define HAVE_EXT_CACHE #define ATOMIC_USER /* Enable Atomic Record Layer callbacks */ #define HAVE_PK_CALLBACKS /* Enable public key callbacks */ -#define WOLFSSL_ALT_NAMES /* Allow alternate cert chain validation to any trusted cert (not entire chain presented by peer) */ +#define WOLFSSL_ALT_CERT_CHAINS /* Allow alternate cert chain validation to any trusted cert (not entire chain presented by peer) */ #define HAVE_NULL_CIPHER /* Enable use of TLS cipher suites without cipher (clear text / no encryption) */ #define WOLFSSL_HAVE_CERT_SERVICE #define WOLFSSL_JNI @@ -126,6 +126,7 @@ extern "C" { #define WOLFSSL_CUSTOM_OID #define HAVE_OID_ENCODING #define WOLFSSL_ASN_TEMPLATE +#define WOLFSSL_ALT_NAMES /* Support subject alternative names extension */ /* Certificate Revocation */ #define HAVE_OCSP diff --git a/examples/configs/user_settings_template.h b/examples/configs/user_settings_template.h index b7c0700b6e..680376ad2d 100644 --- a/examples/configs/user_settings_template.h +++ b/examples/configs/user_settings_template.h @@ -354,6 +354,7 @@ extern "C" { /* prototypes for user heap override functions */ /* Note: Realloc only required for normal math */ + /* Note2: XFREE(NULL) must be properly handled */ #include /* for size_t */ extern void *myMalloc(size_t n, void* heap, int type); extern void myFree(void *p, void* heap, int type); diff --git a/examples/echoclient/echoclient.c b/examples/echoclient/echoclient.c index 89a8d6ba96..ec01e756be 100644 --- a/examples/echoclient/echoclient.c +++ b/examples/echoclient/echoclient.c @@ -248,13 +248,13 @@ void echoclient_test(void* args) if (ret != WOLFSSL_SUCCESS) { err = SSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != WOLFSSL_SUCCESS) { fprintf(stderr, "SSL_connect error %d, %s\n", err, ERR_error_string((unsigned long)err, buffer)); @@ -271,13 +271,13 @@ void echoclient_test(void* args) if (ret <= 0) { err = SSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != sendSz) { fprintf(stderr, "SSL_write msg error %d, %s\n", err, ERR_error_string((unsigned long)err, buffer)); @@ -306,13 +306,13 @@ void echoclient_test(void* args) if (ret <= 0) { err = SSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret > 0) { reply[ret] = 0; LIBCALL_CHECK_RET(fputs(reply, fout)); @@ -320,7 +320,9 @@ void echoclient_test(void* args) sendSz -= ret; } #ifdef WOLFSSL_DTLS - else if (wolfSSL_dtls(ssl) && err == DECRYPT_ERROR) { + else if (wolfSSL_dtls(ssl) && + err == WC_NO_ERR_TRACE(DECRYPT_ERROR)) + { /* This condition is OK. The packet should be dropped * silently when there is a decrypt or MAC error on * a DTLS record. */ @@ -346,13 +348,13 @@ void echoclient_test(void* args) if (ret <= 0) { err = SSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); #else SSL_shutdown(ssl); #endif diff --git a/examples/echoserver/echoserver.c b/examples/echoserver/echoserver.c index 68a86bce48..2f4d004cbf 100644 --- a/examples/echoserver/echoserver.c +++ b/examples/echoserver/echoserver.c @@ -341,13 +341,13 @@ THREAD_RETURN WOLFSSL_THREAD echoserver_test(void* args) if (ret != WOLFSSL_SUCCESS) { err = wolfSSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != WOLFSSL_SUCCESS) { fprintf(stderr, "SSL_accept error = %d, %s\n", err, wolfSSL_ERR_error_string((unsigned long)err, buffer)); @@ -381,13 +381,13 @@ THREAD_RETURN WOLFSSL_THREAD echoserver_test(void* args) if (ret <= 0) { err = wolfSSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret <= 0) { if (err != WOLFSSL_ERROR_WANT_READ && err != WOLFSSL_ERROR_ZERO_RETURN){ fprintf(stderr, "SSL_read echo error %d, %s!\n", err, @@ -444,13 +444,13 @@ THREAD_RETURN WOLFSSL_THREAD echoserver_test(void* args) if (ret <= 0) { err = wolfSSL_get_error(write_ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(write_ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != echoSz) { fprintf(stderr, "SSL_write get error = %d, %s\n", err, wolfSSL_ERR_error_string((unsigned long)err, buffer)); @@ -470,13 +470,13 @@ THREAD_RETURN WOLFSSL_THREAD echoserver_test(void* args) if (ret <= 0) { err = wolfSSL_get_error(write_ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(write_ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != echoSz) { fprintf(stderr, "SSL_write echo error = %d, %s\n", err, diff --git a/examples/pem/pem.c b/examples/pem/pem.c index 3d32e8472c..a58314d6d1 100644 --- a/examples/pem/pem.c +++ b/examples/pem/pem.c @@ -555,7 +555,7 @@ static int EncryptDer(unsigned char* in, word32 in_len, char* password, ret = wc_CreateEncryptedPKCS8Key(in, in_len, NULL, enc_len, password, (int)strlen(password), pbe_ver, pbe, enc_alg_id, salt, salt_sz, (int)iterations, &rng, NULL); - if (ret == LENGTH_ONLY_E) { + if (ret == WC_NO_ERR_TRACE(LENGTH_ONLY_E)) { ret = 0; } else if (ret == 0) { diff --git a/examples/sctp/sctp-client-dtls.c b/examples/sctp/sctp-client-dtls.c index 36be1aed41..2f925d10dc 100644 --- a/examples/sctp/sctp-client-dtls.c +++ b/examples/sctp/sctp-client-dtls.c @@ -19,6 +19,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ +#ifdef HAVE_CONFIG_H + #include +#endif /* wolfssl */ #ifndef WOLFSSL_USER_SETTINGS diff --git a/examples/sctp/sctp-client.c b/examples/sctp/sctp-client.c index b76639f484..04e3c56b86 100644 --- a/examples/sctp/sctp-client.c +++ b/examples/sctp/sctp-client.c @@ -19,6 +19,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ +#ifdef HAVE_CONFIG_H + #include +#endif + #ifndef WOLFSSL_USER_SETTINGS #include #endif diff --git a/examples/sctp/sctp-server-dtls.c b/examples/sctp/sctp-server-dtls.c index 530a4b65b5..bbe9835a05 100644 --- a/examples/sctp/sctp-server-dtls.c +++ b/examples/sctp/sctp-server-dtls.c @@ -19,6 +19,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ +#ifdef HAVE_CONFIG_H + #include +#endif + /* wolfssl */ #ifndef WOLFSSL_USER_SETTINGS #include diff --git a/examples/sctp/sctp-server.c b/examples/sctp/sctp-server.c index 71143e8057..2f33ada327 100644 --- a/examples/sctp/sctp-server.c +++ b/examples/sctp/sctp-server.c @@ -19,6 +19,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ +#ifdef HAVE_CONFIG_H + #include +#endif + #ifndef WOLFSSL_USER_SETTINGS #include #endif diff --git a/examples/server/server.c b/examples/server/server.c index 6649569080..2f42a909e3 100644 --- a/examples/server/server.c +++ b/examples/server/server.c @@ -342,7 +342,7 @@ static int NonBlockingSSL_Accept(SSL* ssl) while (ret != WOLFSSL_SUCCESS && (error == WOLFSSL_ERROR_WANT_READ || error == WOLFSSL_ERROR_WANT_WRITE #ifdef WOLFSSL_ASYNC_CRYPT - || error == WC_PENDING_E + || error == WC_NO_ERR_TRACE(WC_PENDING_E) #endif )) { if (error == WOLFSSL_ERROR_WANT_READ) { @@ -353,7 +353,7 @@ static int NonBlockingSSL_Accept(SSL* ssl) } #ifdef WOLFSSL_ASYNC_CRYPT - if (error == WC_PENDING_E) { + if (error == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } @@ -378,7 +378,7 @@ static int NonBlockingSSL_Accept(SSL* ssl) if ((select_ret == TEST_RECV_READY) || (select_ret == TEST_SEND_READY) || (select_ret == TEST_ERROR_READY) #ifdef WOLFSSL_ASYNC_CRYPT - || error == WC_PENDING_E + || error == WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { #ifndef WOLFSSL_CALLBACKS @@ -447,16 +447,17 @@ int ServerEchoData(SSL* ssl, int clientfd, int echoData, int block, if (ret <= 0) { err = SSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } else #endif if (err != WOLFSSL_ERROR_WANT_READ && - err != WOLFSSL_ERROR_WANT_WRITE && - err != WOLFSSL_ERROR_ZERO_RETURN && - err != APP_DATA_READY) { + err != WOLFSSL_ERROR_WANT_WRITE && + err != WOLFSSL_ERROR_ZERO_RETURN && + err != WC_NO_ERR_TRACE(APP_DATA_READY)) + { LOG_ERROR("SSL_read echo error %d\n", err); err_sys_ex(runWithErrors, "SSL_read failed"); break; @@ -484,13 +485,13 @@ int ServerEchoData(SSL* ssl, int clientfd, int echoData, int block, if (ret <= 0) { err = SSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != (int)min((word32)len, (word32)rx_pos)) { LOG_ERROR("SSL_write echo error %d\n", err); err_sys_ex(runWithErrors, "SSL_write failed"); @@ -545,7 +546,7 @@ static void ServerRead(WOLFSSL* ssl, char* input, int inputLen) err = SSL_get_error(ssl, ret); #ifdef HAVE_SECURE_RENEGOTIATION - if (err == APP_DATA_READY) { + if (err == WC_NO_ERR_TRACE(APP_DATA_READY)) { /* If we receive a message during renegotiation * then just print it. We return the message sent * after the renegotiation. */ @@ -563,14 +564,14 @@ static void ServerRead(WOLFSSL* ssl, char* input, int inputLen) } #endif #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } else #endif #ifdef WOLFSSL_DTLS - if (wolfSSL_dtls(ssl) && err == DECRYPT_ERROR) { + if (wolfSSL_dtls(ssl) && err == WC_NO_ERR_TRACE(DECRYPT_ERROR)) { LOG_ERROR("Dropped client's message due to a bad MAC\n"); } else @@ -579,7 +580,7 @@ static void ServerRead(WOLFSSL* ssl, char* input, int inputLen) && err != WOLFSSL_ERROR_WANT_WRITE /* Can happen during * handshake */ #ifdef HAVE_SECURE_RENEGOTIATION - && err != APP_DATA_READY + && err != WC_NO_ERR_TRACE(APP_DATA_READY) #endif ) { LOG_ERROR("SSL_read input error %d, %s\n", err, @@ -595,14 +596,14 @@ static void ServerRead(WOLFSSL* ssl, char* input, int inputLen) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif ret = wolfSSL_peek(ssl, buffer, 0); err = SSL_get_error(ssl, ret); - } while (err == WC_PENDING_E + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E) || err == WOLFSSL_ERROR_WANT_READ || err == WOLFSSL_ERROR_WANT_WRITE); if (err < 0) { @@ -611,7 +612,7 @@ static void ServerRead(WOLFSSL* ssl, char* input, int inputLen) if (wolfSSL_pending(ssl)) err = WOLFSSL_ERROR_WANT_READ; } - } while (err == WC_PENDING_E + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E) || err == WOLFSSL_ERROR_WANT_READ || err == WOLFSSL_ERROR_WANT_WRITE); if (ret > 0) { @@ -641,7 +642,7 @@ static void ServerWrite(WOLFSSL* ssl, const char* output, int outputLen) err = SSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } @@ -652,7 +653,8 @@ static void ServerWrite(WOLFSSL* ssl, const char* output, int outputLen) len = (outputLen -= ret); err = WOLFSSL_ERROR_WANT_WRITE; } - } while (err == WC_PENDING_E || err == WOLFSSL_ERROR_WANT_WRITE); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E) || + err == WOLFSSL_ERROR_WANT_WRITE); if (ret != outputLen) { char buffer[WOLFSSL_MAX_ERROR_SZ]; LOG_ERROR("SSL_write msg error %d, %s\n", err, @@ -684,12 +686,12 @@ static void SetKeyShare(WOLFSSL* ssl, int onlyKeyShare, int useX25519, if (ret == WOLFSSL_SUCCESS) groups[count++] = WOLFSSL_ECC_X25519; #ifdef WOLFSSL_ASYNC_CRYPT - else if (ret == WC_PENDING_E) + else if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); #endif else err_sys("unable to use curve x25519"); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); #endif } else if (useX448) { @@ -699,35 +701,56 @@ static void SetKeyShare(WOLFSSL* ssl, int onlyKeyShare, int useX25519, if (ret == WOLFSSL_SUCCESS) groups[count++] = WOLFSSL_ECC_X448; #ifdef WOLFSSL_ASYNC_CRYPT - else if (ret == WC_PENDING_E) + else if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); #endif else err_sys("unable to use curve x448"); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); #endif } else if (usePqc == 1) { #ifdef HAVE_PQC groups[count] = 0; + #ifndef WOLFSSL_NO_KYBER512 if (XSTRCMP(pqcAlg, "KYBER_LEVEL1") == 0) { groups[count] = WOLFSSL_KYBER_LEVEL1; } - else if (XSTRCMP(pqcAlg, "KYBER_LEVEL3") == 0) { + else + #endif + #ifndef WOLFSSL_NO_KYBER768 + if (XSTRCMP(pqcAlg, "KYBER_LEVEL3") == 0) { groups[count] = WOLFSSL_KYBER_LEVEL3; } - else if (XSTRCMP(pqcAlg, "KYBER_LEVEL5") == 0) { + else + #endif + #ifndef WOLFSSL_NO_KYBER1024 + if (XSTRCMP(pqcAlg, "KYBER_LEVEL5") == 0) { groups[count] = WOLFSSL_KYBER_LEVEL5; } - else if (XSTRCMP(pqcAlg, "P256_KYBER_LEVEL1") == 0) { + else + #endif + #ifndef WOLFSSL_NO_KYBER512 + if (XSTRCMP(pqcAlg, "P256_KYBER_LEVEL1") == 0) { groups[count] = WOLFSSL_P256_KYBER_LEVEL1; } - else if (XSTRCMP(pqcAlg, "P384_KYBER_LEVEL3") == 0) { + else + #endif + #ifndef WOLFSSL_NO_KYBER768 + if (XSTRCMP(pqcAlg, "P384_KYBER_LEVEL3") == 0) { groups[count] = WOLFSSL_P384_KYBER_LEVEL3; } - else if (XSTRCMP(pqcAlg, "P521_KYBER_LEVEL5") == 0) { + else + #endif + #ifndef WOLFSSL_NO_KYBER1024 + if (XSTRCMP(pqcAlg, "P521_KYBER_LEVEL5") == 0) { groups[count] = WOLFSSL_P521_KYBER_LEVEL5; } + else + #endif + { + err_sys("invalid post-quantum KEM specified"); + } if (groups[count] == 0) { err_sys("invalid post-quantum KEM specified"); @@ -752,24 +775,24 @@ static void SetKeyShare(WOLFSSL* ssl, int onlyKeyShare, int useX25519, if (ret == WOLFSSL_SUCCESS) groups[count++] = WOLFSSL_ECC_SECP256R1; #ifdef WOLFSSL_ASYNC_CRYPT - else if (ret == WC_PENDING_E) + else if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); #endif else err_sys("unable to use curve secp256r1"); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); #elif defined(WOLFSSL_SM2) do { ret = wolfSSL_UseKeyShare(ssl, WOLFSSL_ECC_SM2P256V1); if (ret == WOLFSSL_SUCCESS) groups[count++] = WOLFSSL_ECC_SM2P256V1; #ifdef WOLFSSL_ASYNC_CRYPT - else if (ret == WC_PENDING_E) + else if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); #endif else err_sys("unable to use curve sm2p256r1"); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); #endif #endif } @@ -781,12 +804,12 @@ static void SetKeyShare(WOLFSSL* ssl, int onlyKeyShare, int useX25519, if (ret == WOLFSSL_SUCCESS) groups[count++] = WOLFSSL_FFDHE_2048; #ifdef WOLFSSL_ASYNC_CRYPT - else if (ret == WC_PENDING_E) + else if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); #endif else err_sys("unable to use DH 2048-bit parameters"); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); #endif } if (count >= MAX_GROUP_NUMBER) @@ -1365,7 +1388,7 @@ static int server_srtp_test(WOLFSSL *ssl, func_args *args) ret = wolfSSL_export_dtls_srtp_keying_material(ssl, NULL, &srtp_secret_length); - if (ret != LENGTH_ONLY_E) { + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) { LOG_ERROR("DTLS SRTP: Error getting key material length\n"); return ret; } @@ -2661,7 +2684,7 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) #if (defined(WOLFSSL_SCTP) || defined(WOLFSSL_DTLS_MTU)) && \ defined(WOLFSSL_DTLS) if (dtlsMTU) - wolfSSL_CTX_dtls_set_mtu(ctx, dtlsMTU); + wolfSSL_CTX_dtls_set_mtu(ctx, (unsigned short)dtlsMTU); #endif #ifdef WOLFSSL_SCTP @@ -3192,14 +3215,14 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) } #ifdef WOLFSSL_ASYNC_CRYPT - else if (ret == WC_PENDING_E) { + else if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) { wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); } #endif else { err_sys("Failed wolfSSL_UseKeyShare in force-curve"); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); ret = wolfSSL_set_groups(ssl, &force_curve_group_id, 1); if (WOLFSSL_SUCCESS != ret) { err_sys("Failed wolfSSL_set_groups in force-curve"); @@ -3402,7 +3425,7 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) if (ret <= 0) { err = SSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { /* returns the number of polled items or <0 for * error */ ret = wolfSSL_AsyncPoll(ssl, @@ -3415,7 +3438,7 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) input[ret] = 0; /* null terminate message */ printf("Early Data Client message: %s\n", input); } - } while (err == WC_PENDING_E || ret > 0); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E) || ret > 0); } #endif do { @@ -3424,13 +3447,13 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) if (ret != WOLFSSL_SUCCESS) { err = SSL_get_error(ssl, 0); #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); } #else if (nonBlocking) { @@ -3533,10 +3556,8 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) size = wolfSSL_get_server_random(ssl, rnd, size); if (size == 0) { - if (rnd) { - XFREE(rnd, NULL, DYNAMIC_TYPE_TMP_BUFFER); - rnd = NULL; - } + XFREE(rnd, NULL, DYNAMIC_TYPE_TMP_BUFFER); + rnd = NULL; err_sys_ex(runWithErrors, "error getting server random buffer"); } @@ -3603,7 +3624,7 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) if (err == WOLFSSL_SUCCESS) printf("Sent ALPN protocol : %s (%d)\n", protocol_name, protocol_nameSz); - else if (err == WOLFSSL_ALPN_NOT_FOUND) + else if (err == WC_NO_ERR_TRACE(WOLFSSL_ALPN_NOT_FOUND)) printf("No ALPN response sent (no match)\n"); else printf("Getting ALPN protocol name failed\n"); @@ -3634,12 +3655,12 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) err == WOLFSSL_ERROR_WANT_WRITE) { do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } #endif - if (err == APP_DATA_READY) { + if (err == WC_NO_ERR_TRACE(APP_DATA_READY)) { if (wolfSSL_read(ssl, input, sizeof(input)-1) < 0) { err_sys("APP DATA should be present but error returned"); } @@ -3651,9 +3672,9 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) } } while (ret != WOLFSSL_SUCCESS && (err == WOLFSSL_ERROR_WANT_READ || - err == WOLFSSL_ERROR_WANT_WRITE || - err == APP_DATA_READY || - err == WC_PENDING_E)); + err == WOLFSSL_ERROR_WANT_WRITE || + err == WC_NO_ERR_TRACE(APP_DATA_READY) || + err == WC_NO_ERR_TRACE(WC_PENDING_E))); if (ret == WOLFSSL_SUCCESS) { printf("NON-BLOCKING RENEGOTIATION SUCCESSFUL\n"); @@ -3674,12 +3695,12 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) if (wolfSSL_Rehandshake(ssl) != WOLFSSL_SUCCESS) { #ifdef WOLFSSL_ASYNC_CRYPT err = wolfSSL_get_error(ssl, 0); - while (err == WC_PENDING_E) { + while (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { err = 0; ret = wolfSSL_negotiate(ssl); if (ret != WOLFSSL_SUCCESS) { err = wolfSSL_get_error(ssl, 0); - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) break; } @@ -3750,11 +3771,16 @@ THREAD_RETURN WOLFSSL_THREAD server_test(void* args) ServerRead(ssl, input, sizeof(input)-1); #endif } - else if (err == 0 || err == WOLFSSL_ERROR_ZERO_RETURN) { + else if (err == 0 || + err == WOLFSSL_ERROR_ZERO_RETURN) + { err = ServerEchoData(ssl, clientfd, echoData, block, throughput); /* Got close notify. Ignore it if not expecting a failure. */ - if (err == WOLFSSL_ERROR_ZERO_RETURN && exitWithRet == 0) + if (err == WOLFSSL_ERROR_ZERO_RETURN && + exitWithRet == 0) + { err = 0; + } if (err != 0) { SSL_free(ssl); ssl = NULL; SSL_CTX_free(ctx); ctx = NULL; diff --git a/fips-check.sh b/fips-check.sh index 4f57d2d040..a134bddabf 100755 --- a/fips-check.sh +++ b/fips-check.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # fips-check.sh # This script checks the current revision of the code against the diff --git a/fips-hash.sh b/fips-hash.sh index 8bb6de4ecf..7ae25eeebd 100755 --- a/fips-hash.sh +++ b/fips-hash.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh if test ! -x ./wolfcrypt/test/testwolfcrypt then @@ -18,4 +18,3 @@ then cp wolfcrypt/src/fips_test.c wolfcrypt/src/fips_test.c.bak sed "s/^\".*\";/\"${NEWHASH}\";/" wolfcrypt/src/fips_test.c.bak >wolfcrypt/src/fips_test.c fi - diff --git a/gencertbuf.pl b/gencertbuf.pl index 5bc018874c..a2612084b0 100755 --- a/gencertbuf.pl +++ b/gencertbuf.pl @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # gencertbuf.pl # version 1.1 diff --git a/linuxkm/Kbuild b/linuxkm/Kbuild index f29690481e..f322742a46 100644 --- a/linuxkm/Kbuild +++ b/linuxkm/Kbuild @@ -115,7 +115,8 @@ $(obj)/wolfcrypt/benchmark/benchmark.o: asflags-y = $(WOLFSSL_ASFLAGS) $(ASFLAGS asflags-y := $(WOLFSSL_ASFLAGS) $(ASFLAGS_FPUSIMD_DISABLE) # vectorized implementations that are kernel-safe are listed here. -# these are known kernel-compatible, but they still irritate objtool. +# these are known kernel-compatible, but need the vector instructions enabled in the assembler, +# and most of them still irritate objtool. $(obj)/wolfcrypt/src/aes_asm.o: asflags-y = $(WOLFSSL_ASFLAGS) $(ASFLAGS_FPU_DISABLE_SIMD_ENABLE) $(obj)/wolfcrypt/src/aes_asm.o: OBJECT_FILES_NON_STANDARD := y $(obj)/wolfcrypt/src/aes_gcm_asm.o: asflags-y = $(WOLFSSL_ASFLAGS) $(ASFLAGS_FPU_DISABLE_SIMD_ENABLE) @@ -134,6 +135,7 @@ $(obj)/wolfcrypt/src/chacha_asm.o: asflags-y = $(WOLFSSL_ASFLAGS) $(ASFLAGS_FPU_ $(obj)/wolfcrypt/src/chacha_asm.o: OBJECT_FILES_NON_STANDARD := y $(obj)/wolfcrypt/src/poly1305_asm.o: asflags-y = $(WOLFSSL_ASFLAGS) $(ASFLAGS_FPU_DISABLE_SIMD_ENABLE) $(obj)/wolfcrypt/src/poly1305_asm.o: OBJECT_FILES_NON_STANDARD := y +$(obj)/wolfcrypt/src/wc_kyber_asm.o: asflags-y = $(WOLFSSL_ASFLAGS) $(ASFLAGS_FPU_DISABLE_SIMD_ENABLE) ifeq "$(ENABLED_LINUXKM_PIE)" "yes" diff --git a/linuxkm/linuxkm_wc_port.h b/linuxkm/linuxkm_wc_port.h index 189a26e348..68592582ad 100644 --- a/linuxkm/linuxkm_wc_port.h +++ b/linuxkm/linuxkm_wc_port.h @@ -632,6 +632,10 @@ #endif #endif + #ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES + typeof(dump_stack) *dump_stack; + #endif + const void *_last_slot; }; @@ -777,6 +781,10 @@ #endif #endif + #ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES + #define dump_stack (wolfssl_linuxkm_get_pie_redirect_table()->dump_stack) + #endif + #endif /* __PIE__ */ #endif /* USE_WOLFSSL_LINUXKM_PIE_REDIRECT_TABLE */ diff --git a/linuxkm/lkcapi_glue.c b/linuxkm/lkcapi_glue.c index 7b2c135f54..c7e0683a1e 100644 --- a/linuxkm/lkcapi_glue.c +++ b/linuxkm/lkcapi_glue.c @@ -773,7 +773,7 @@ static int km_AesGcmDecrypt(struct aead_request *req) pr_err("%s: wc_AesGcmDecryptFinal failed with return code %d\n", crypto_tfm_alg_driver_name(crypto_aead_tfm(tfm)), err); - if (err == AES_GCM_AUTH_E) { + if (err == WC_NO_ERR_TRACE(AES_GCM_AUTH_E)) { return -EBADMSG; } else { @@ -2451,14 +2451,10 @@ static int aes_xts_128_test(void) test_xts_end: - if (enc2) - XFREE(enc2, NULL, DYNAMIC_TYPE_AES); - if (dec2) - XFREE(dec2, NULL, DYNAMIC_TYPE_AES); - if (src) - XFREE(src, NULL, DYNAMIC_TYPE_AES); - if (dst) - XFREE(dst, NULL, DYNAMIC_TYPE_AES); + XFREE(enc2, NULL, DYNAMIC_TYPE_AES); + XFREE(dec2, NULL, DYNAMIC_TYPE_AES); + XFREE(src, NULL, DYNAMIC_TYPE_AES); + XFREE(dst, NULL, DYNAMIC_TYPE_AES); if (req) skcipher_request_free(req); if (tfm) @@ -2466,19 +2462,14 @@ static int aes_xts_128_test(void) out: - if (large_input) - XFREE(large_input, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(large_input, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (aes_inited) wc_AesXtsFree(aes); - if (buf) - XFREE(buf, NULL, DYNAMIC_TYPE_AES); - if (cipher) - XFREE(cipher, NULL, DYNAMIC_TYPE_AES); - - if (aes) - XFREE(aes, NULL, DYNAMIC_TYPE_AES); + XFREE(buf, NULL, DYNAMIC_TYPE_AES); + XFREE(cipher, NULL, DYNAMIC_TYPE_AES); + XFREE(aes, NULL, DYNAMIC_TYPE_AES); #undef AES_XTS_128_TEST_BUF_SIZ @@ -2939,14 +2930,10 @@ static int aes_xts_256_test(void) test_xts_end: - if (enc2) - XFREE(enc2, NULL, DYNAMIC_TYPE_AES); - if (dec2) - XFREE(dec2, NULL, DYNAMIC_TYPE_AES); - if (src) - XFREE(src, NULL, DYNAMIC_TYPE_AES); - if (dst) - XFREE(dst, NULL, DYNAMIC_TYPE_AES); + XFREE(enc2, NULL, DYNAMIC_TYPE_AES); + XFREE(dec2, NULL, DYNAMIC_TYPE_AES); + XFREE(src, NULL, DYNAMIC_TYPE_AES); + XFREE(dst, NULL, DYNAMIC_TYPE_AES); if (req) skcipher_request_free(req); if (tfm) @@ -2954,19 +2941,15 @@ static int aes_xts_256_test(void) out: - if (large_input) - XFREE(large_input, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(large_input, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (aes_inited) wc_AesXtsFree(aes); - if (buf) - XFREE(buf, NULL, DYNAMIC_TYPE_AES); - if (cipher) - XFREE(cipher, NULL, DYNAMIC_TYPE_AES); + XFREE(buf, NULL, DYNAMIC_TYPE_AES); + XFREE(cipher, NULL, DYNAMIC_TYPE_AES); - if (aes) - XFREE(aes, NULL, DYNAMIC_TYPE_AES); + XFREE(aes, NULL, DYNAMIC_TYPE_AES); #undef AES_XTS_256_TEST_BUF_SIZ diff --git a/linuxkm/module_exports.c.template b/linuxkm/module_exports.c.template index 4dff197e9c..77beef5bd1 100644 --- a/linuxkm/module_exports.c.template +++ b/linuxkm/module_exports.c.template @@ -171,6 +171,9 @@ #include #endif #endif +#ifdef HAVE_DILITHIUM + #include +#endif #ifdef OPENSSL_EXTRA #ifndef WOLFCRYPT_ONLY diff --git a/linuxkm/module_hooks.c b/linuxkm/module_hooks.c index 574e2ad6f8..f2255b1080 100644 --- a/linuxkm/module_hooks.c +++ b/linuxkm/module_hooks.c @@ -105,7 +105,7 @@ static void lkmFipsCb(int ok, int err, const char* hash) { if ((! ok) || (err != 0)) pr_err("libwolfssl FIPS error: %s\n", wc_GetErrorString(err)); - if (err == IN_CORE_FIPS_E) { + if (err == WC_NO_ERR_TRACE(IN_CORE_FIPS_E)) { pr_err("In-core integrity hash check failure.\n" "Update verifyCore[] in fips_test.c with new hash \"%s\" and rebuild.\n", hash ? hash : ""); @@ -237,7 +237,7 @@ static int wolfssl_init(void) ret = wolfCrypt_GetStatus_fips(); if (ret != 0) { pr_err("wolfCrypt_GetStatus_fips() failed with code %d: %s\n", ret, wc_GetErrorString(ret)); - if (ret == IN_CORE_FIPS_E) { + if (ret == WC_NO_ERR_TRACE(IN_CORE_FIPS_E)) { const char *newhash = wolfCrypt_GetCoreHash_fips(); pr_err("Update verifyCore[] in fips_test.c with new hash \"%s\" and rebuild.\n", newhash ? newhash : ""); @@ -580,6 +580,10 @@ static int set_up_wolfssl_linuxkm_pie_redirect_table(void) { #endif #endif +#ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES + wolfssl_linuxkm_pie_redirect_table.dump_stack = dump_stack; +#endif + /* runtime assert that the table has no null slots after initialization. */ { unsigned long *i; @@ -803,16 +807,11 @@ static int updateFipsHash(void) if (tfm != NULL) crypto_free_shash(tfm); - if (desc != NULL) - XFREE(desc, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (hash != NULL) - XFREE(hash, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (base16_hash != NULL) - XFREE(base16_hash, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (binCoreKey != NULL) - XFREE(binCoreKey, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (binVerify != NULL) - XFREE(binVerify, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(desc, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(hash, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(base16_hash, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(binCoreKey, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(binVerify, NULL, DYNAMIC_TYPE_TMP_BUFFER); return ret; } diff --git a/mcapi/mcapi_test.c b/mcapi/mcapi_test.c index 64aee92639..16d929749b 100644 --- a/mcapi/mcapi_test.c +++ b/mcapi/mcapi_test.c @@ -23,7 +23,9 @@ /* Tests Microchip CRYPTO API layer */ - +#ifdef HAVE_CONFIG_H + #include +#endif /* mc api header */ #include diff --git a/pull_to_vagrant.sh b/pull_to_vagrant.sh index 15d88d97d8..9cba08d69a 100755 --- a/pull_to_vagrant.sh +++ b/pull_to_vagrant.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh SRC=vagrant DST=wolfssl diff --git a/scripts/aria-cmake-build-test.sh b/scripts/aria-cmake-build-test.sh index 0454fbb381..b501ac6fa3 100644 --- a/scripts/aria-cmake-build-test.sh +++ b/scripts/aria-cmake-build-test.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # # aria_cmake_build_test.sh # diff --git a/scripts/benchmark_compare.sh b/scripts/benchmark_compare.sh index b4ae1d603f..98c2d5a9b1 100755 --- a/scripts/benchmark_compare.sh +++ b/scripts/benchmark_compare.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # This script is designed to compare the output of wolfcrypt/benchmark test # application. If the file has an extension ".csv", then it will parse the # comma separated format, otherwise it will use the standard output format. The diff --git a/scripts/crl-revoked.test b/scripts/crl-revoked.test index da245d485f..fc193d369c 100755 --- a/scripts/crl-revoked.test +++ b/scripts/crl-revoked.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash #crl.test # if we can, isolate the network namespace to eliminate port collisions. diff --git a/scripts/dertoc.pl b/scripts/dertoc.pl index c02d7d3f35..cf5b1fa797 100755 --- a/scripts/dertoc.pl +++ b/scripts/dertoc.pl @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl # dertoc.pl # version 1.0 diff --git a/scripts/dtls.test b/scripts/dtls.test index 8229d31bdd..a563db5e08 100755 --- a/scripts/dtls.test +++ b/scripts/dtls.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # This script can be run with several environment variables set dictating its # run. You can set the following to what you like: diff --git a/scripts/dtlscid.test b/scripts/dtlscid.test index f38bf4307e..127f728f5d 100755 --- a/scripts/dtlscid.test +++ b/scripts/dtlscid.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # dtlscid.test # Copyright wolfSSL 2022-2024 diff --git a/scripts/external.test b/scripts/external.test index 671f6f9a36..abef437a05 100755 --- a/scripts/external.test +++ b/scripts/external.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # external.test diff --git a/scripts/google.test b/scripts/google.test index ab640d3590..e2b0c63d45 100755 --- a/scripts/google.test +++ b/scripts/google.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # google.test diff --git a/scripts/makedistsmall.sh b/scripts/makedistsmall.sh index 0b92e1ce86..88b5546339 100755 --- a/scripts/makedistsmall.sh +++ b/scripts/makedistsmall.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash #set -v # Script to produce a small source/header only package (with CMake support) diff --git a/scripts/memtest.sh b/scripts/memtest.sh index 34e6b07df7..5cb7c5a93c 100755 --- a/scripts/memtest.sh +++ b/scripts/memtest.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Run this script from the wolfSSL root as `./scripts/memtest.sh`. @@ -14,7 +14,7 @@ make for i in {1..1000} do - echo "Trying $i...\n" + echo -e "Trying ${i}...\n" ./tests/unit.test > ./scripts/memtest.txt 2>&1 diff --git a/scripts/ocsp-stapling-with-ca-as-responder.test b/scripts/ocsp-stapling-with-ca-as-responder.test index 5ae2ef1068..d4137395b7 100755 --- a/scripts/ocsp-stapling-with-ca-as-responder.test +++ b/scripts/ocsp-stapling-with-ca-as-responder.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # ocsp-stapling-with-ca-as-responder.test diff --git a/scripts/ocsp-stapling.test b/scripts/ocsp-stapling.test index 04d8ce9ace..90b7332a9a 100755 --- a/scripts/ocsp-stapling.test +++ b/scripts/ocsp-stapling.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # ocsp-stapling.test # Test requires HAVE_OCSP and HAVE_CERTIFICATE_STATUS_REQUEST diff --git a/scripts/ocsp-stapling2.test b/scripts/ocsp-stapling2.test index 0b3f5b12f5..f18ee1a7c4 100755 --- a/scripts/ocsp-stapling2.test +++ b/scripts/ocsp-stapling2.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # ocsp-stapling2.test # Test requires HAVE_OCSP and HAVE_CERTIFICATE_STATUS_REQUEST_V2 diff --git a/scripts/openssl.test b/scripts/openssl.test index 0be450c135..b557bb69b2 100755 --- a/scripts/openssl.test +++ b/scripts/openssl.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # openssl.test diff --git a/scripts/openssl_srtp.test b/scripts/openssl_srtp.test index 500ea5c147..509db8a6c7 100755 --- a/scripts/openssl_srtp.test +++ b/scripts/openssl_srtp.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Test WolfSSL/OpenSSL srtp interoperability # # TODO: add OpenSSL client with WolfSSL server diff --git a/scripts/pem.test b/scripts/pem.test index 7c32f8b038..65720cd6df 100755 --- a/scripts/pem.test +++ b/scripts/pem.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # pem.test # Copyright wolfSSL 2023-2023 diff --git a/scripts/ping.test b/scripts/ping.test index c823492e33..3b8d5df204 100755 --- a/scripts/ping.test +++ b/scripts/ping.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # ping.test diff --git a/scripts/pkcallbacks.test b/scripts/pkcallbacks.test index 7fcb697f08..d4bf4309d4 100755 --- a/scripts/pkcallbacks.test +++ b/scripts/pkcallbacks.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash #pkcallbacks.test diff --git a/scripts/psk.test b/scripts/psk.test index baeca0210b..58edace274 100755 --- a/scripts/psk.test +++ b/scripts/psk.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # psk.test # copyright wolfSSL 2016 diff --git a/scripts/resume.test b/scripts/resume.test index 49839b4dab..06f25be003 100755 --- a/scripts/resume.test +++ b/scripts/resume.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash #resume.test diff --git a/scripts/sniffer-gen.sh b/scripts/sniffer-gen.sh index eac160979c..4cc1207e59 100755 --- a/scripts/sniffer-gen.sh +++ b/scripts/sniffer-gen.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash #set -x # Run this script from the wolfSSL root diff --git a/scripts/sniffer-testsuite.test b/scripts/sniffer-testsuite.test index 0be4587fb2..e827da7547 100755 --- a/scripts/sniffer-testsuite.test +++ b/scripts/sniffer-testsuite.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash #sniffer-testsuite.test diff --git a/scripts/stm32l4-v4_0_1_build.sh b/scripts/stm32l4-v4_0_1_build.sh index b4eb3650ee..156ab8885a 100755 --- a/scripts/stm32l4-v4_0_1_build.sh +++ b/scripts/stm32l4-v4_0_1_build.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash WOLF_ROOT=$(eval "pwd") echo "WOLF_ROOT set to: \"$WOLF_ROOT\"" cd ../ || exit 5 diff --git a/scripts/tls13.test b/scripts/tls13.test index aa53af901c..085ffc1806 100755 --- a/scripts/tls13.test +++ b/scripts/tls13.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # tls13.test # Copyright wolfSSL 2016-2021 diff --git a/scripts/trusted_peer.test b/scripts/trusted_peer.test index 3936e79de8..cdcca7b25b 100755 --- a/scripts/trusted_peer.test +++ b/scripts/trusted_peer.test @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # trusted_peer.test # copyright wolfSSL 2016 diff --git a/src/bio.c b/src/bio.c index 43492126df..8496b894b3 100644 --- a/src/bio.c +++ b/src/bio.c @@ -353,7 +353,7 @@ int wolfSSL_BIO_read(WOLFSSL_BIO* bio, void* buf, int len) * (cannot be used with WOLFSSL_USER_IO) */ bio->flags &= ~WOLFSSL_BIO_FLAG_RETRY; ret = wolfIO_Recv(bio->num.fd, (char*)buf, len, 0); - if (ret == WOLFSSL_CBIO_ERR_WANT_READ) { + if (ret == WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_WANT_READ)) { bio->flags |= WOLFSSL_BIO_FLAG_RETRY; } if (ret < 0) { @@ -377,7 +377,7 @@ int wolfSSL_BIO_read(WOLFSSL_BIO* bio, void* buf, int len) ret = wolfIO_RecvFrom(bio->num.fd, &bio->peer_addr, (char*)buf, len, 0); } - if (ret == WOLFSSL_CBIO_ERR_WANT_READ) { + if (ret == WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_WANT_READ)) { bio->flags |= WOLFSSL_BIO_FLAG_RETRY; } if (ret < 0) { @@ -777,7 +777,7 @@ int wolfSSL_BIO_write(WOLFSSL_BIO* bio, const void* data, int len) * (cannot be used with WOLFSSL_USER_IO) */ bio->flags &= ~WOLFSSL_BIO_FLAG_RETRY; ret = wolfIO_Send(bio->num.fd, (char*)data, len, 0); - if (ret == WOLFSSL_CBIO_ERR_WANT_WRITE) { + if (ret == WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_WANT_WRITE)) { bio->flags |= WOLFSSL_BIO_FLAG_RETRY; } if (ret < 0) { @@ -800,7 +800,7 @@ int wolfSSL_BIO_write(WOLFSSL_BIO* bio, const void* data, int len) ret = SOCKET_ERROR_E; else ret = wolfIO_SendTo(bio->num.fd, &bio->peer_addr, (char*)data, len, 0); - if (ret == WOLFSSL_CBIO_ERR_WANT_WRITE) { + if (ret == WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_WANT_WRITE)) { bio->flags |= WOLFSSL_BIO_FLAG_RETRY; } if (ret < 0) { @@ -834,9 +834,7 @@ int wolfSSL_BIO_write(WOLFSSL_BIO* bio, const void* data, int len) (const char*)data, len, 0, ret); } - if (frmt != NULL) { - XFREE(frmt, front->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(frmt, front->heap, DYNAMIC_TYPE_TMP_BUFFER); #ifdef WOLFSSL_BASE64_ENCODE if (retB64 > 0 && ret > 0) @@ -1704,13 +1702,13 @@ int wolfSSL_BIO_reset(WOLFSSL_BIO *bio) if (XFSEEK(bio->ptr.fh, 0, XSEEK_SET) != 0) return WOLFSSL_BIO_ERROR; else - return 0; + return WOLFSSL_SUCCESS; #endif case WOLFSSL_BIO_BIO: bio->rdIdx = 0; bio->wrIdx = 0; - return 0; + return WOLFSSL_SUCCESS; case WOLFSSL_BIO_MEMORY: bio->rdIdx = 0; @@ -1729,7 +1727,7 @@ int wolfSSL_BIO_reset(WOLFSSL_BIO *bio) bio->mem_buf->max = 0; } } - return 0; + return WOLFSSL_SUCCESS; #ifndef WOLFCRYPT_ONLY case WOLFSSL_BIO_MD: @@ -1740,7 +1738,7 @@ int wolfSSL_BIO_reset(WOLFSSL_BIO *bio) wolfSSL_EVP_MD_CTX_init(bio->ptr.md_ctx); wolfSSL_EVP_DigestInit(bio->ptr.md_ctx, md); } - return 0; + return WOLFSSL_SUCCESS; #endif /* WOLFCRYPT_ONLY */ default: @@ -2226,7 +2224,7 @@ int wolfSSL_BIO_flush(WOLFSSL_BIO* bio) /* return the context and initialize the BIO state */ int wolfSSL_BIO_get_md_ctx(WOLFSSL_BIO *bio, WOLFSSL_EVP_MD_CTX **mdcp) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); if ((bio != NULL) && (mdcp != NULL)) { *mdcp = bio->ptr.md_ctx; @@ -2969,9 +2967,7 @@ int wolfSSL_BIO_flush(WOLFSSL_BIO* bio) bio->pair->pair = NULL; } - if (bio->ip != NULL) { - XFREE(bio->ip, bio->heap, DYNAMIC_TYPE_OPENSSL); - } + XFREE(bio->ip, bio->heap, DYNAMIC_TYPE_OPENSSL); if (bio->shutdown) { if (bio->type == WOLFSSL_BIO_SSL && bio->ptr.ssl) diff --git a/src/conf.c b/src/conf.c index cc650ad5a2..c9a35c12d2 100644 --- a/src/conf.c +++ b/src/conf.c @@ -133,7 +133,7 @@ WOLFSSL_TXT_DB *wolfSSL_TXT_DB_read(WOLFSSL_BIO *in, int num) XFREE(strBuf, NULL, DYNAMIC_TYPE_OPENSSL); goto error; } - if (wolfSSL_sk_push(ret->data, strBuf) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_push(ret->data, strBuf) <= 0) { WOLFSSL_MSG("wolfSSL_sk_push error"); XFREE(strBuf, NULL, DYNAMIC_TYPE_OPENSSL); goto error; @@ -146,9 +146,7 @@ WOLFSSL_TXT_DB *wolfSSL_TXT_DB_read(WOLFSSL_BIO *in, int num) wolfSSL_TXT_DB_free(ret); ret = NULL; } - if (buf) { - XFREE(buf, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(buf, NULL, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -228,7 +226,7 @@ int wolfSSL_TXT_DB_insert(WOLFSSL_TXT_DB *db, WOLFSSL_STRING *row) return WOLFSSL_FAILURE; } - if (wolfSSL_sk_push(db->data, row) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_push(db->data, row) <= 0) { WOLFSSL_MSG("wolfSSL_sk_push error"); return WOLFSSL_FAILURE; } @@ -452,11 +450,11 @@ int wolfSSL_CONF_add_string(WOLFSSL_CONF *conf, sk = (WOLF_STACK_OF(WOLFSSL_CONF_VALUE) *)section->value; value->section = section->section; - if (wolfSSL_sk_CONF_VALUE_push(sk, value) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_CONF_VALUE_push(sk, value) <= 0) { WOLFSSL_MSG("wolfSSL_sk_CONF_VALUE_push error"); return WOLFSSL_FAILURE; } - if (wolfSSL_sk_CONF_VALUE_push(conf->data, value) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_CONF_VALUE_push(conf->data, value) <= 0) { WOLFSSL_MSG("wolfSSL_sk_CONF_VALUE_push error"); wolfssl_sk_pop_type(sk, STACK_TYPE_CONF_VALUE); return WOLFSSL_FAILURE; @@ -499,7 +497,7 @@ WOLFSSL_CONF_VALUE *wolfSSL_CONF_new_section(WOLFSSL_CONF *conf, ret->value = (char*)sk; - if (wolfSSL_sk_CONF_VALUE_push(conf->data, ret) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_CONF_VALUE_push(conf->data, ret) <= 0) { WOLFSSL_MSG("wolfSSL_sk_CONF_VALUE_push error"); goto error; } @@ -793,8 +791,7 @@ static char* expandValue(WOLFSSL_CONF *conf, const char* section, return ret ? ret : str; expand_cleanup: - if (ret) - XFREE(ret, NULL, DYNAMIC_TYPE_OPENSSL); + XFREE(ret, NULL, DYNAMIC_TYPE_OPENSSL); return NULL; } @@ -803,7 +800,7 @@ static char* expandValue(WOLFSSL_CONF *conf, const char* section, {(idx)++;} int wolfSSL_NCONF_load(WOLFSSL_CONF *conf, const char *file, long *eline) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_BIO *in = NULL; char* buf = NULL; char* idx = NULL; @@ -961,8 +958,7 @@ int wolfSSL_NCONF_load(WOLFSSL_CONF *conf, const char *file, long *eline) cleanup: if (in) wolfSSL_BIO_free(in); - if (buf) - XFREE(buf, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(buf, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (eline) *eline = line; return ret; @@ -986,13 +982,11 @@ void wolfSSL_X509V3_conf_free(WOLFSSL_CONF_VALUE *val) if (val->name) { /* Not a section. Don't free section as it is a shared pointer. */ XFREE(val->name, NULL, DYNAMIC_TYPE_OPENSSL); - if (val->value) - XFREE(val->value, NULL, DYNAMIC_TYPE_OPENSSL); + XFREE(val->value, NULL, DYNAMIC_TYPE_OPENSSL); } else { /* Section so val->value is a stack */ - if (val->section) - XFREE(val->section, NULL, DYNAMIC_TYPE_OPENSSL); + XFREE(val->section, NULL, DYNAMIC_TYPE_OPENSSL); /* Only free the stack structures. The contained conf values * will be freed in wolfSSL_NCONF_free */ sk = (WOLF_STACK_OF(WOLFSSL_CONF_VALUE)*)val->value; @@ -1545,7 +1539,7 @@ static const conf_cmd_tbl* wolfssl_conf_find_cmd(WOLFSSL_CONF_CTX* cctx, */ int wolfSSL_CONF_cmd(WOLFSSL_CONF_CTX* cctx, const char* cmd, const char* value) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); const conf_cmd_tbl* confcmd = NULL; WOLFSSL_ENTER("wolfSSL_CONF_cmd"); diff --git a/src/crl.c b/src/crl.c index 10c83afb02..8c221b217e 100644 --- a/src/crl.c +++ b/src/crl.c @@ -219,13 +219,10 @@ static void CRL_Entry_free(CRL_Entry* crle, void* heap) tmp = next; } #endif - if (crle->signature != NULL) - XFREE(crle->signature, heap, DYNAMIC_TYPE_CRL_ENTRY); - if (crle->toBeSigned != NULL) - XFREE(crle->toBeSigned, heap, DYNAMIC_TYPE_CRL_ENTRY); + XFREE(crle->signature, heap, DYNAMIC_TYPE_CRL_ENTRY); + XFREE(crle->toBeSigned, heap, DYNAMIC_TYPE_CRL_ENTRY); #ifdef WC_RSA_PSS - if (crle->sigParams != NULL) - XFREE(crle->sigParams, heap, DYNAMIC_TYPE_CRL_ENTRY); + XFREE(crle->sigParams, heap, DYNAMIC_TYPE_CRL_ENTRY); #endif #if defined(OPENSSL_EXTRA) if (crle->issuer != NULL) { @@ -440,7 +437,7 @@ static int CheckCertCRLList(WOLFSSL_CRL* crl, byte* issuerHash, byte* serial, break; } else if (foundEntry == 0) { - ret = ASN_AFTER_DATE_E; + ret = CRL_CERT_DATE_ERR; } } } @@ -481,8 +478,9 @@ int CheckCertCRL_ex(WOLFSSL_CRL* crl, byte* issuerHash, byte* serial, if (foundEntry == 0) { /* perform embedded lookup */ if (crl->crlIOCb) { - ret = crl->crlIOCb(crl, (const char*)extCrlInfo, extCrlInfoSz); - if (ret == WOLFSSL_CBIO_ERR_WANT_READ) { + int cbRet = crl->crlIOCb(crl, (const char*)extCrlInfo, + extCrlInfoSz); + if (cbRet == WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_WANT_READ)) { ret = OCSP_WANT_READ; } else if (ret >= 0) { @@ -505,9 +503,9 @@ int CheckCertCRL_ex(WOLFSSL_CRL* crl, byte* issuerHash, byte* serial, /* When not set the folder or not use hash_dir, do nothing. */ if ((foundEntry == 0) && (ret != WC_NO_ERR_TRACE(OCSP_WANT_READ))) { if (crl->cm != NULL && crl->cm->x509_store_p != NULL) { - ret = LoadCertByIssuer(crl->cm->x509_store_p, + int loadRet = LoadCertByIssuer(crl->cm->x509_store_p, (WOLFSSL_X509_NAME*)issuerName, X509_LU_CRL); - if (ret == WOLFSSL_SUCCESS) { + if (loadRet == WOLFSSL_SUCCESS) { /* try again */ ret = CheckCertCRLList(crl, issuerHash, serial, serialSz, serialHash, &foundEntry); diff --git a/src/dtls.c b/src/dtls.c index ae4cc7e2cb..1bdb7ce464 100644 --- a/src/dtls.c +++ b/src/dtls.c @@ -953,8 +953,13 @@ int DoClientHelloStateless(WOLFSSL* ssl, const byte* input, word32 helloSz, int tlsxFound; ret = FindExtByType(&ch.cookieExt, TLSX_COOKIE, ch.extension, &tlsxFound); - if (ret != 0) + if (ret != 0) { + if (isFirstCHFrag) { + WOLFSSL_MSG("\t\tCookie probably missing from first " + "fragment. Dropping."); + } return ret; + } } } #endif @@ -1150,10 +1155,8 @@ void TLSX_ConnectionID_Free(byte* ext, void* heap) info = DtlsCidGetInfoFromExt(ext); if (info == NULL) return; - if (info->rx != NULL) - XFREE(info->rx, heap, DYNAMIC_TYPE_TLSX); - if (info->tx != NULL) - XFREE(info->tx, heap, DYNAMIC_TYPE_TLSX); + XFREE(info->rx, heap, DYNAMIC_TYPE_TLSX); + XFREE(info->tx, heap, DYNAMIC_TYPE_TLSX); XFREE(info, heap, DYNAMIC_TYPE_TLSX); DtlsCidUnsetInfoFromExt(ext); XFREE(ext, heap, DYNAMIC_TYPE_TLSX); @@ -1342,10 +1345,8 @@ int wolfSSL_dtls_cid_set(WOLFSSL* ssl, unsigned char* cid, unsigned int size) if (cidInfo == NULL) return WOLFSSL_FAILURE; - if (cidInfo->rx != NULL) { - XFREE(cidInfo->rx, ssl->heap, DYNAMIC_TYPE_TLSX); - cidInfo->rx = NULL; - } + XFREE(cidInfo->rx, ssl->heap, DYNAMIC_TYPE_TLSX); + cidInfo->rx = NULL; /* empty CID */ if (size == 0) diff --git a/src/dtls13.c b/src/dtls13.c index 0577715474..955b4198f1 100644 --- a/src/dtls13.c +++ b/src/dtls13.c @@ -395,7 +395,8 @@ int Dtls13ProcessBufferedMessages(WOLFSSL* ssl) * from there, the message can be considered processed successfully. * WANT_WRITE means that we are done with processing the msg and we are * waiting to flush the output buffer. */ - if ((ret == 0 || ret == WANT_WRITE) || (msg->type == certificate_request && + if ((ret == 0 || ret == WC_NO_ERR_TRACE(WANT_WRITE)) || + (msg->type == certificate_request && ssl->options.handShakeDone && ret == WC_NO_ERR_TRACE(WC_PENDING_E))) { if (IsAtLeastTLSv1_3(ssl->version)) @@ -811,9 +812,7 @@ static void Dtls13MaybeSaveClientHello(WOLFSSL* ssl) while (r != NULL) { if (r->handshakeType == client_hello) { Dtls13RtxRecordUnlink(ssl, prev_next, r); - if (ssl->dtls13ClientHello != NULL) - XFREE(ssl->dtls13ClientHello, ssl->heap, - DYNAMIC_TYPE_DTLS_MSG); + XFREE(ssl->dtls13ClientHello, ssl->heap, DYNAMIC_TYPE_DTLS_MSG); ssl->dtls13ClientHello = r->data; ssl->dtls13ClientHelloSz = r->length; r->data = NULL; @@ -921,7 +920,7 @@ static int Dtls13SendOneFragmentRtx(WOLFSSL* ssl, handshakeType, hashOutput, Dtls13SendNow(ssl, handshakeType)); if (rtxRecord != NULL) { - if (ret == 0 || ret == WANT_WRITE) + if (ret == 0 || ret == WC_NO_ERR_TRACE(WANT_WRITE)) Dtls13RtxAddRecord(&ssl->dtls13Rtx, rtxRecord); else Dtls13FreeRtxBufferRecord(ssl, rtxRecord); @@ -981,7 +980,7 @@ static int Dtls13SendFragmentedInternal(WOLFSSL* ssl) ret = Dtls13SendOneFragmentRtx(ssl, (enum HandShakeType)ssl->dtls13FragHandshakeType, (word16)recordLength + MAX_MSG_EXTRA, output, (word32)recordLength, 0); - if (ret == WANT_WRITE) { + if (ret == WC_NO_ERR_TRACE(WANT_WRITE)) { ssl->dtls13FragOffset += fragLength; return ret; } @@ -1563,7 +1562,7 @@ static int Dtls13RtxSendBuffered(WOLFSSL* ssl) ret = Dtls13SendFragment(ssl, output, (word16)sendSz, r->length + headerLength, (enum HandShakeType)r->handshakeType, 0, isLast || !ssl->options.groupMessages); - if (ret != 0 && ret != WANT_WRITE) + if (ret != 0 && ret != WC_NO_ERR_TRACE(WANT_WRITE)) return ret; if (r->rnIdx >= DTLS13_RETRANS_RN_SIZE) @@ -1577,7 +1576,7 @@ static int Dtls13RtxSendBuffered(WOLFSSL* ssl) r->seq[r->rnIdx] = seq; r->rnIdx++; - if (ret == WANT_WRITE) { + if (ret == WC_NO_ERR_TRACE(WANT_WRITE)) { /* this fragment will be sent eventually. Move it to the end of the list so next time we start with a new one. */ Dtls13RtxMoveToEndOfList(ssl, prevNext, r); @@ -1876,7 +1875,7 @@ int Dtls13HandshakeSend(WOLFSSL* ssl, byte* message, word16 outputSize, if (maxLen < maxFrag) { ret = Dtls13SendOneFragmentRtx(ssl, handshakeType, outputSize, message, length, hashOutput); - if (ret == 0 || ret == WANT_WRITE) + if (ret == 0 || ret == WC_NO_ERR_TRACE(WANT_WRITE)) ssl->keys.dtls_handshake_number++; } else { diff --git a/src/include.am b/src/include.am index 544ad3ea8e..36607f5ce9 100644 --- a/src/include.am +++ b/src/include.am @@ -286,6 +286,9 @@ src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha3-asm src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-sha3-asm.S endif !BUILD_ARMASM_INLINE endif BUILD_ARMASM +if BUILD_RISCV_ASM +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-sha3.c +endif BUILD_RISCV_ASM if !BUILD_X86_ASM if BUILD_INTELASM src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha3_asm.S @@ -447,6 +450,9 @@ src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha3-asm src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-sha3-asm.S endif !BUILD_ARMASM_INLINE endif BUILD_ARMASM +if BUILD_RISCV_ASM +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-sha3.c +endif BUILD_RISCV_ASM if BUILD_INTELASM src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha3_asm.S endif @@ -800,6 +806,9 @@ src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-32-sha3-asm src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/thumb2-sha3-asm.S endif !BUILD_ARMASM_INLINE endif BUILD_ARMASM +if BUILD_RISCV_ASM +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-sha3.c +endif BUILD_RISCV_ASM if !BUILD_X86_ASM if BUILD_INTELASM src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/sha3_asm.S @@ -914,6 +923,9 @@ if BUILD_POLY1305 if BUILD_ARMASM src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-poly1305.c endif +if BUILD_RISCV_ASM +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-poly1305.c +endif src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/poly1305.c if !BUILD_X86_ASM if BUILD_INTELASM @@ -980,14 +992,13 @@ src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/blake2s.c endif if BUILD_CHACHA +src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/chacha.c if BUILD_ARMASM_NEON src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/arm/armv8-chacha.c else if BUILD_RISCV_ASM src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/port/riscv/riscv-64-chacha.c -else -src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/chacha.c -endif !BUILD_RISCV_ASM +endif BUILD_RISCV_ASM if !BUILD_X86_ASM if BUILD_INTELASM src_libwolfssl@LIBSUFFIX@_la_SOURCES += wolfcrypt/src/chacha_asm.S diff --git a/src/internal.c b/src/internal.c index 6395f0a23d..8cc28ac53f 100644 --- a/src/internal.c +++ b/src/internal.c @@ -19,8 +19,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ - - #ifdef HAVE_CONFIG_H #include #endif @@ -2576,8 +2574,7 @@ static void FreeEchConfigs(WOLFSSL_EchConfig* configs, void* heap) XFREE(working_config->cipherSuites, heap, DYNAMIC_TYPE_TMP_BUFFER); XFREE(working_config->publicName, heap, DYNAMIC_TYPE_TMP_BUFFER); - if (working_config->raw != NULL) - XFREE(working_config->raw, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(working_config->raw, heap, DYNAMIC_TYPE_TMP_BUFFER); if (working_config->receiverPrivkey != NULL) { wc_HpkeFreeKey(NULL, working_config->kemId, @@ -2624,10 +2621,8 @@ void SSL_CtxResourceFree(WOLFSSL_CTX* ctx) XFREE(ctx->method, heapAtCTXInit, DYNAMIC_TYPE_METHOD); ctx->method = NULL; - if (ctx->suites) { - XFREE(ctx->suites, ctx->heap, DYNAMIC_TYPE_SUITES); - ctx->suites = NULL; - } + XFREE(ctx->suites, ctx->heap, DYNAMIC_TYPE_SUITES); + ctx->suites = NULL; #ifndef NO_DH XFREE(ctx->serverDH_G.buffer, ctx->heap, DYNAMIC_TYPE_PUBLIC_KEY); @@ -2726,10 +2721,8 @@ void SSL_CtxResourceFree(WOLFSSL_CTX* ctx) XFREE((void*)ctx->alpn_cli_protos, ctx->heap, DYNAMIC_TYPE_OPENSSL); ctx->alpn_cli_protos = NULL; } - if (ctx->param) { - XFREE(ctx->param, heapAtCTXInit, DYNAMIC_TYPE_OPENSSL); - ctx->param = NULL; - } + XFREE(ctx->param, heapAtCTXInit, DYNAMIC_TYPE_OPENSSL); + ctx->param = NULL; if (ctx->x509_store.param) { XFREE(ctx->x509_store.param, heapAtCTXInit, DYNAMIC_TYPE_OPENSSL); @@ -4575,23 +4568,17 @@ void FreeX509(WOLFSSL_X509* x509) x509->authKeyId = NULL; XFREE(x509->subjKeyId, x509->heap, DYNAMIC_TYPE_X509_EXT); x509->subjKeyId = NULL; - if (x509->authInfo != NULL) { - XFREE(x509->authInfo, x509->heap, DYNAMIC_TYPE_X509_EXT); - x509->authInfo = NULL; - } - if (x509->rawCRLInfo != NULL) { - XFREE(x509->rawCRLInfo, x509->heap, DYNAMIC_TYPE_X509_EXT); - x509->rawCRLInfo = NULL; - } - if (x509->CRLInfo != NULL) { - XFREE(x509->CRLInfo, x509->heap, DYNAMIC_TYPE_X509_EXT); - x509->CRLInfo = NULL; - } + wolfSSL_ASN1_STRING_free(x509->subjKeyIdStr); + x509->subjKeyIdStr = NULL; + XFREE(x509->authInfo, x509->heap, DYNAMIC_TYPE_X509_EXT); + x509->authInfo = NULL; + XFREE(x509->rawCRLInfo, x509->heap, DYNAMIC_TYPE_X509_EXT); + x509->rawCRLInfo = NULL; + XFREE(x509->CRLInfo, x509->heap, DYNAMIC_TYPE_X509_EXT); + x509->CRLInfo = NULL; #if defined(OPENSSL_ALL) || defined(OPENSSL_EXTRA) || \ defined(WOLFSSL_QT) - if (x509->authInfoCaIssuer != NULL) { - XFREE(x509->authInfoCaIssuer, x509->heap, DYNAMIC_TYPE_X509_EXT); - } + XFREE(x509->authInfoCaIssuer, x509->heap, DYNAMIC_TYPE_X509_EXT); if (x509->ext_sk != NULL) { wolfSSL_sk_X509_EXTENSION_pop_free(x509->ext_sk, NULL); } @@ -4647,14 +4634,10 @@ void FreeX509(WOLFSSL_X509* x509) } #ifdef WOLFSSL_DUAL_ALG_CERTS - if (x509->sapkiDer) { - XFREE(x509->sapkiDer, x509->heap, DYNAMIC_TYPE_X509_EXT); - x509->sapkiDer = NULL; - } - if (x509->altSigAlgDer) { - XFREE(x509->altSigAlgDer, x509->heap, DYNAMIC_TYPE_X509_EXT); - x509->altSigAlgDer = NULL; - } + XFREE(x509->sapkiDer, x509->heap, DYNAMIC_TYPE_X509_EXT); + x509->sapkiDer = NULL; + XFREE(x509->altSigAlgDer, x509->heap, DYNAMIC_TYPE_X509_EXT); + x509->altSigAlgDer = NULL; if (x509->altSigValDer) { XFREE(x509->altSigValDer, x509->heap, DYNAMIC_TYPE_X509_EXT); x509->altSigValDer= NULL; @@ -6820,9 +6803,35 @@ int SetSSL_CTX(WOLFSSL* ssl, WOLFSSL_CTX* ctx, int writeDup) #endif /* HAVE_RPK */ #ifndef NO_CERTS +#ifdef WOLFSSL_COPY_CERT + /* If WOLFSSL_COPY_CERT is defined, always copy the cert */ + if (ctx->certificate != NULL) { + ret = AllocCopyDer(&ssl->buffers.certificate, ctx->certificate->buffer, + ctx->certificate->length, ctx->certificate->type, + ctx->certificate->heap); + if (ret != 0) { + return ret; + } + + ssl->buffers.weOwnCert = 1; + ret = WOLFSSL_SUCCESS; + } + if (ctx->certChain != NULL) { + ret = AllocCopyDer(&ssl->buffers.certChain, ctx->certChain->buffer, + ctx->certChain->length, ctx->certChain->type, + ctx->certChain->heap); + if (ret != 0) { + return ret; + } + + ssl->buffers.weOwnCertChain = 1; + ret = WOLFSSL_SUCCESS; + } +#else /* ctx still owns certificate, certChain, key, dh, and cm */ ssl->buffers.certificate = ctx->certificate; ssl->buffers.certChain = ctx->certChain; +#endif #ifdef WOLFSSL_TLS13 ssl->buffers.certChainCnt = ctx->certChainCnt; #endif @@ -6932,12 +6941,12 @@ int SetSSL_CTX(WOLFSSL* ssl, WOLFSSL_CTX* ctx, int writeDup) #endif #if defined(OPENSSL_EXTRA) && !defined(NO_BIO) /* Don't change recv callback if currently using BIO's */ - if (ssl->CBIORecv != BioReceive) + if (ssl->CBIORecv != SslBioReceive) #endif ssl->CBIORecv = ctx->CBIORecv; #if defined(OPENSSL_EXTRA) && !defined(NO_BIO) /* Don't change send callback if currently using BIO's */ - if (ssl->CBIOSend != BioSend) + if (ssl->CBIOSend != SslBioSend) #endif ssl->CBIOSend = ctx->CBIOSend; ssl->verifyDepth = ctx->verifyDepth; @@ -7566,7 +7575,7 @@ int InitSSL(WOLFSSL* ssl, WOLFSSL_CTX* ctx, int writeDup) /* requires valid arrays and suites unless writeDup ing */ if ((ret = SetSSL_CTX(ssl, ctx, writeDup)) != WOLFSSL_SUCCESS #ifdef WOLFSSL_NO_INIT_CTX_KEY - && ret != NO_PRIVATE_KEY + && ret != WC_NO_ERR_TRACE(NO_PRIVATE_KEY) #endif ) { WOLFSSL_MSG_EX("SetSSL_CTX failed. err = %d", ret); @@ -8376,9 +8385,7 @@ void SSL_ResourceFree(WOLFSSL* ssl) } #endif #ifdef OPENSSL_EXTRA - if (ssl->param) { - XFREE(ssl->param, ssl->heap, DYNAMIC_TYPE_OPENSSL); - } + XFREE(ssl->param, ssl->heap, DYNAMIC_TYPE_OPENSSL); #endif #if defined(WOLFSSL_TLS13) && defined(WOLFSSL_POST_HANDSHAKE_AUTH) while (ssl->certReqCtx != NULL) { @@ -8921,8 +8928,7 @@ void DtlsMsgDelete(DtlsMsg* item, void* heap) DtlsMsgDestroyFragBucket(item->fragBucketList, heap); item->fragBucketList = next; } - if (item->raw != NULL) - XFREE(item->raw, heap, DYNAMIC_TYPE_DTLS_FRAG); + XFREE(item->raw, heap, DYNAMIC_TYPE_DTLS_FRAG); XFREE(item, heap, DYNAMIC_TYPE_DTLS_MSG); } } @@ -10472,7 +10478,7 @@ static int wolfSSLReceive(WOLFSSL* ssl, byte* buf, word32 sz) recvd = ssl->CBIORecv(ssl, (char *)buf, (int)sz, ssl->IOCB_ReadCtx); if (recvd < 0) { switch (recvd) { - case WOLFSSL_CBIO_ERR_GENERAL: /* general/unknown error */ + case WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_GENERAL): #ifdef WOLFSSL_APACHE_HTTPD #ifndef NO_BIO if (ssl->biord) { @@ -10486,15 +10492,15 @@ static int wolfSSLReceive(WOLFSSL* ssl, byte* buf, word32 sz) #endif return -1; - case WOLFSSL_CBIO_ERR_WANT_READ: /* want read, would block */ + case WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_WANT_READ): if (retryLimit > 0 && ssl->ctx->autoRetry && !ssl->options.handShakeDone && !ssl->options.dtls) { retryLimit--; goto retry; } - return WANT_READ; + return WC_NO_ERR_TRACE(WANT_READ); - case WOLFSSL_CBIO_ERR_CONN_RST: /* connection reset */ + case WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_CONN_RST): #ifdef USE_WINDOWS_API if (ssl->options.dtls) { goto retry; @@ -10503,7 +10509,7 @@ static int wolfSSLReceive(WOLFSSL* ssl, byte* buf, word32 sz) ssl->options.connReset = 1; return -1; - case WOLFSSL_CBIO_ERR_ISR: /* interrupt */ + case WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_ISR): /* interrupt */ /* see if we got our timeout */ #ifdef WOLFSSL_CALLBACKS if (ssl->toInfoOn) { @@ -10523,11 +10529,11 @@ static int wolfSSLReceive(WOLFSSL* ssl, byte* buf, word32 sz) #endif goto retry; - case WOLFSSL_CBIO_ERR_CONN_CLOSE: /* peer closed connection */ + case WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_CONN_CLOSE): ssl->options.isClosed = 1; return -1; - case WOLFSSL_CBIO_ERR_TIMEOUT: + case WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_TIMEOUT): #ifdef WOLFSSL_DTLS #ifdef WOLFSSL_DTLS13 if (ssl->options.dtls && IsAtLeastTLSv1_3(ssl->version)) { @@ -10643,19 +10649,19 @@ int SendBuffered(WOLFSSL* ssl) if (sent < 0) { switch (sent) { - case WOLFSSL_CBIO_ERR_WANT_WRITE: /* would block */ + case WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_WANT_WRITE): if (retryLimit > 0 && ssl->ctx->autoRetry && !ssl->options.handShakeDone && !ssl->options.dtls) { retryLimit--; goto retry; } - return WANT_WRITE; + return WC_NO_ERR_TRACE(WANT_WRITE); - case WOLFSSL_CBIO_ERR_CONN_RST: /* connection reset */ + case WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_CONN_RST): ssl->options.connReset = 1; break; - case WOLFSSL_CBIO_ERR_ISR: /* interrupt */ + case WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_ISR): /* interrupt */ /* see if we got our timeout */ #ifdef WOLFSSL_CALLBACKS if (ssl->toInfoOn) { @@ -10675,7 +10681,7 @@ int SendBuffered(WOLFSSL* ssl) #endif continue; - case WOLFSSL_CBIO_ERR_CONN_CLOSE: /* epipe / conn closed */ + case WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_CONN_CLOSE): /* epipe */ ssl->options.connReset = 1; /* treat same as reset */ break; @@ -13263,12 +13269,9 @@ static int ProcessCSR(WOLFSSL* ssl, byte* input, word32* inOutIdx, DYNAMIC_TYPE_OCSP_REQUEST); if (status == NULL || single == NULL || response == NULL) { - if (status) - XFREE(status, ssl->heap, DYNAMIC_TYPE_OCSP_STATUS); - if (single) - XFREE(single, ssl->heap, DYNAMIC_TYPE_OCSP_ENTRY); - if (response) - XFREE(response, ssl->heap, DYNAMIC_TYPE_OCSP_REQUEST); + XFREE(status, ssl->heap, DYNAMIC_TYPE_OCSP_STATUS); + XFREE(single, ssl->heap, DYNAMIC_TYPE_OCSP_ENTRY); + XFREE(response, ssl->heap, DYNAMIC_TYPE_OCSP_REQUEST); return MEMORY_ERROR; } @@ -13557,8 +13560,7 @@ int SetupStoreCtxCallback(WOLFSSL_X509_STORE_CTX** store_pt, if (x509 != NULL) wolfSSL_X509_free(x509); #endif - if (domain != NULL) - XFREE(domain, heap, DYNAMIC_TYPE_STRING); + XFREE(domain, heap, DYNAMIC_TYPE_STRING); return MEMORY_E; } @@ -13837,15 +13839,11 @@ static void FreeProcPeerCertArgs(WOLFSSL* ssl, void* pArgs) (void)ssl; - if (args->certs) { - XFREE(args->certs, ssl->heap, DYNAMIC_TYPE_DER); - args->certs = NULL; - } + XFREE(args->certs, ssl->heap, DYNAMIC_TYPE_DER); + args->certs = NULL; #ifdef WOLFSSL_TLS13 - if (args->exts) { - XFREE(args->exts, ssl->heap, DYNAMIC_TYPE_CERT_EXT); - args->exts = NULL; - } + XFREE(args->exts, ssl->heap, DYNAMIC_TYPE_CERT_EXT); + args->exts = NULL; #endif if (args->dCert) { if (args->dCertInit) { @@ -13955,9 +13953,7 @@ int LoadCertByIssuer(WOLFSSL_X509_STORE* store, X509_NAME* issuer, int type) /* / .(r)N\0 */ /*|1| 8 |1|1|1|1| => 13 */ len = (int)XSTRLEN(entry->dir_name) + 13; - if (filename != NULL) { - XFREE(filename, NULL, DYNAMIC_TYPE_OPENSSL); - } + XFREE(filename, NULL, DYNAMIC_TYPE_OPENSSL); filename = (char*)XMALLOC(len, NULL, DYNAMIC_TYPE_OPENSSL); if (filename == NULL) { @@ -14032,7 +14028,8 @@ int LoadCertByIssuer(WOLFSSL_X509_STORE* store, X509_NAME* issuer, int type) ph->hash_value = hash; ph->last_suffix = suffix; - ret = wolfSSL_sk_BY_DIR_HASH_push(entry->hashes, ph); + ret = wolfSSL_sk_BY_DIR_HASH_push(entry->hashes, ph) > 0 + ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE; } } wc_UnLockMutex(&lookup->dirs->lock); @@ -14836,7 +14833,9 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx, #ifdef HAVE_OCSP #ifdef HAVE_CERTIFICATE_STATUS_REQUEST_V2 addToPendingCAs = 0; - if (ssl->status_request_v2 && TLSX_CSR2_IsMulti(ssl->extensions)) { + if (ssl->options.side == WOLFSSL_CLIENT_END && + ssl->status_request_v2 && + TLSX_CSR2_IsMulti(ssl->extensions)) { ret = TLSX_CSR2_InitRequests(ssl->extensions, args->dCert, 0, ssl->heap); addToPendingCAs = 1; @@ -15038,8 +15037,7 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx, if (dCertAdd_inited) FreeDecodedCert(dCertAdd); #ifdef WOLFSSL_SMALL_STACK - if (dCertAdd) - XFREE(dCertAdd, ssl->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(dCertAdd, ssl->heap, DYNAMIC_TYPE_TMP_BUFFER); #endif if (ret != 0) goto exit_ppc; @@ -15381,9 +15379,9 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx, if (ssl->peerVerifyRet == 0) { /* Return first cert error here */ ssl->peerVerifyRet = - ret == OCSP_CERT_REVOKED - ? WOLFSSL_X509_V_ERR_CERT_REVOKED - : WOLFSSL_X509_V_ERR_CERT_REJECTED; + ret == WC_NO_ERR_TRACE(OCSP_CERT_REVOKED) + ? WOLFSSL_X509_V_ERR_CERT_REVOKED + : WOLFSSL_X509_V_ERR_CERT_REJECTED; } #endif } @@ -15412,7 +15410,7 @@ int ProcessPeerCerts(WOLFSSL* ssl, byte* input, word32* inOutIdx, if (ssl->peerVerifyRet == 0) { /* Return first cert error here */ ssl->peerVerifyRet = - ret == CRL_CERT_REVOKED + ret == WC_NO_ERR_TRACE(CRL_CERT_REVOKED) ? WOLFSSL_X509_V_ERR_CERT_REVOKED : WOLFSSL_X509_V_ERR_CERT_REJECTED; } @@ -16227,12 +16225,9 @@ static int DoCertificateStatus(WOLFSSL* ssl, byte* input, word32* inOutIdx, DYNAMIC_TYPE_OCSP_REQUEST); if (status == NULL || single == NULL || response == NULL) { - if (status) - XFREE(status, ssl->heap, DYNAMIC_TYPE_OCSP_STATUS); - if (single) - XFREE(single, ssl->heap, DYNAMIC_TYPE_OCSP_ENTRY); - if (response) - XFREE(response, ssl->heap, DYNAMIC_TYPE_OCSP_REQUEST); + XFREE(status, ssl->heap, DYNAMIC_TYPE_OCSP_STATUS); + XFREE(single, ssl->heap, DYNAMIC_TYPE_OCSP_ENTRY); + XFREE(response, ssl->heap, DYNAMIC_TYPE_OCSP_REQUEST); return MEMORY_ERROR; } @@ -17112,10 +17107,10 @@ int DoHandShakeMsgType(WOLFSSL* ssl, byte* input, word32* inOutIdx, /* hello_request not hashed */ if (type != hello_request #ifdef WOLFSSL_ASYNC_CRYPT - && ssl->error != WC_PENDING_E + && ssl->error != WC_NO_ERR_TRACE(WC_PENDING_E) #endif #ifdef WOLFSSL_NONBLOCK_OCSP - && ssl->error != OCSP_WANT_READ + && ssl->error != WC_NO_ERR_TRACE(OCSP_WANT_READ) #endif ) { ret = HashInput(ssl, input + *inOutIdx, (int)size); @@ -20685,7 +20680,11 @@ static void LogAlert(int type) typeStr = AlertTypeToString(type); if (typeStr != NULL) { char buff[60]; - XSNPRINTF(buff, sizeof(buff), "Alert type: %s", typeStr); + if (XSNPRINTF(buff, sizeof(buff), "Alert type: %s", typeStr) + >= (int)sizeof(buff)) + { + buff[sizeof(buff) - 1] = 0; + } WOLFSSL_MSG(buff); } #else @@ -20839,8 +20838,8 @@ static int GetInputData(WOLFSSL *ssl, word32 size) ssl->buffers.inputBuffer.buffer + ssl->buffers.inputBuffer.length, (word32)inSz); - if (in == WANT_READ) - return WANT_READ; + if (in == WC_NO_ERR_TRACE(WANT_READ)) + return WC_NO_ERR_TRACE(WANT_READ); if (in < 0) { WOLFSSL_ERROR_VERBOSE(SOCKET_ERROR_E); @@ -21079,15 +21078,17 @@ int ProcessReplyEx(WOLFSSL* ssl, int allowSocketErr) atomicUser = 1; #endif - if (ssl->error != 0 && ssl->error != WANT_READ && ssl->error != WANT_WRITE + if (ssl->error != 0 && + ssl->error != WC_NO_ERR_TRACE(WANT_READ) && + ssl->error != WC_NO_ERR_TRACE(WANT_WRITE) #if defined(HAVE_SECURE_RENEGOTIATION) || defined(WOLFSSL_DTLS13) - && ssl->error != APP_DATA_READY + && ssl->error != WC_NO_ERR_TRACE(APP_DATA_READY) #endif #ifdef WOLFSSL_ASYNC_CRYPT - && ssl->error != WC_PENDING_E + && ssl->error != WC_NO_ERR_TRACE(WC_PENDING_E) #endif #ifdef WOLFSSL_NONBLOCK_OCSP - && ssl->error != OCSP_WANT_READ + && ssl->error != WC_NO_ERR_TRACE(OCSP_WANT_READ) #endif && (allowSocketErr != 1 || ssl->error != WC_NO_ERR_TRACE(SOCKET_ERROR_E)) @@ -21321,7 +21322,7 @@ int ProcessReplyEx(WOLFSSL* ssl, int allowSocketErr) if (!ssl->options.dtls) { if ((ret = GetInputData(ssl, ssl->curSize)) < 0) { #ifdef WOLFSSL_EXTRA_ALERTS - if (ret != WANT_READ) + if (ret != WC_NO_ERR_TRACE(WANT_READ)) SendAlert(ssl, alert_fatal, bad_record_mac); #endif return ret; @@ -21844,7 +21845,7 @@ int ProcessReplyEx(WOLFSSL* ssl, int allowSocketErr) * calling DtlsMsgPoolSend. This msg is done * processing so let's move on. */ && (!ssl->options.dtls - || ret != WANT_WRITE) + || ret != WC_NO_ERR_TRACE(WANT_WRITE)) #ifdef WOLFSSL_ASYNC_CRYPT /* In async case, on pending, move onto next message. * Current message should have been DtlsMsgStore'ed and @@ -23766,7 +23767,7 @@ int SendCertificate(WOLFSSL* ssl) ret = SendBuffered(ssl); } - if (ret != WANT_WRITE) { + if (ret != WC_NO_ERR_TRACE(WANT_WRITE)) { /* Clean up the fragment offset. */ ssl->options.buildingMsg = 0; ssl->fragOffset = 0; @@ -24489,9 +24490,9 @@ int SendData(WOLFSSL* ssl, const void* data, int sz) int groupMsgs = 0; #endif - if (ssl->error == WANT_WRITE + if (ssl->error == WC_NO_ERR_TRACE(WANT_WRITE) #ifdef WOLFSSL_ASYNC_CRYPT - || ssl->error == WC_PENDING_E + || ssl->error == WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { ssl->error = 0; @@ -24748,7 +24749,9 @@ int ReceiveData(WOLFSSL* ssl, byte* output, int sz, int peek) WOLFSSL_ENTER("ReceiveData"); /* reset error state */ - if (ssl->error == WANT_READ || ssl->error == WOLFSSL_ERROR_WANT_READ) { + if (ssl->error == WC_NO_ERR_TRACE(WANT_READ) || + ssl->error == WOLFSSL_ERROR_WANT_READ) + { ssl->error = 0; } @@ -24765,12 +24768,12 @@ int ReceiveData(WOLFSSL* ssl, byte* output, int sz, int peek) } #endif /* WOLFSSL_DTLS */ - if (ssl->error != 0 && ssl->error != WANT_WRITE + if (ssl->error != 0 && ssl->error != WC_NO_ERR_TRACE(WANT_WRITE) #ifdef WOLFSSL_ASYNC_CRYPT - && ssl->error != WC_PENDING_E + && ssl->error != WC_NO_ERR_TRACE(WC_PENDING_E) #endif #if defined(HAVE_SECURE_RENEGOTIATION) || defined(WOLFSSL_DTLS13) - && ssl->error != APP_DATA_READY + && ssl->error != WC_NO_ERR_TRACE(APP_DATA_READY) #endif ) { WOLFSSL_MSG("User calling wolfSSL_read in error state, not allowed"); @@ -24813,7 +24816,7 @@ int ReceiveData(WOLFSSL* ssl, byte* output, int sz, int peek) while (ssl->buffers.clearOutputBuffer.length == 0) { if ( (ssl->error = ProcessReply(ssl)) < 0) { - if (ssl->error == ZERO_RETURN) { + if (ssl->error == WC_NO_ERR_TRACE(ZERO_RETURN)) { WOLFSSL_MSG("Zero return, no more data coming"); return 0; /* no more data coming */ } @@ -24965,7 +24968,7 @@ static int SendAlert_ex(WOLFSSL* ssl, int severity, int type) /* If CheckAvailableSize returned WANT_WRITE due to a blocking write * then discard pending output and just send the alert. */ if (ssl->options.dtls) { - if (ret != WANT_WRITE || severity != alert_fatal) + if (ret != WC_NO_ERR_TRACE(WANT_WRITE) || severity != alert_fatal) return ret; ShrinkOutputBuffer(ssl); if ((ret = CheckAvailableSize(ssl, outputSz)) != 0) { @@ -25062,6 +25065,20 @@ static int SendAlert_ex(WOLFSSL* ssl, int severity, int type) } #endif + /* + * We check if we are trying to send a + * CLOSE_NOTIFY alert. + * */ + if (type == close_notify) { + if (!ssl->options.sentNotify) { + ssl->options.sentNotify = 1; + } + else { + /* CLOSE_NOTIFY already sent */ + return 0; + } + } + ssl->buffers.outputBuffer.length += sendSz; ret = SendBuffered(ssl); @@ -25144,16 +25161,19 @@ const char* wolfSSL_ERR_reason_error_string(unsigned long e) } /* pass to wolfCrypt */ - if (error < MAX_CODE_E && error > MIN_CODE_E) { + if (error <= WC_FIRST_E && error >= WC_LAST_E) { return wc_GetErrorString(error); } - switch (error) { - + if (error == 0) { #ifdef OPENSSL_EXTRA - case 0 : return "ok"; +#else + return "unknown error number"; #endif + } + + switch ((enum wolfSSL_ErrorCodes)error) { case UNSUPPORTED_SUITE : return "unsupported cipher suite"; @@ -25263,9 +25283,6 @@ const char* wolfSSL_ERR_reason_error_string(unsigned long e) case -WOLFSSL_ERROR_WANT_X509_LOOKUP: return "application client cert callback asked to be called again"; - case -WOLFSSL_ERROR_SSL: - return "fatal TLS protocol error"; - case BUFFER_ERROR : return "malformed buffer input error"; @@ -25421,6 +25438,9 @@ const char* wolfSSL_ERR_reason_error_string(unsigned long e) case SESSION_TICKET_EXPECT_E: return "Session Ticket Error"; + case SCR_DIFFERENT_CERT_E: + return "SCR Different cert error"; + case SESSION_SECRET_CB_E: return "Session Secret Callback Error"; @@ -25586,81 +25606,133 @@ const char* wolfSSL_ERR_reason_error_string(unsigned long e) case UNSUPPORTED_CERTIFICATE: return "Unsupported certificate type"; -#ifdef HAVE_HTTP_CLIENT case HTTP_TIMEOUT: return "HTTP timeout for OCSP or CRL req"; + case HTTP_RECV_ERR: return "HTTP Receive error"; + case HTTP_HEADER_ERR: return "HTTP Header error"; + case HTTP_PROTO_ERR: return "HTTP Protocol error"; + case HTTP_STATUS_ERR: return "HTTP Status error"; + case HTTP_VERSION_ERR: return "HTTP Version error"; + case HTTP_APPSTR_ERR: return "HTTP Application string error"; -#endif -#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER) + + case UNSUPPORTED_PROTO_VERSION: + #ifdef OPENSSL_EXTRA + return "WRONG_SSL_VERSION"; + #else + return "bad/unsupported protocol version"; + #endif + + case FALCON_KEY_SIZE_E: + return "Wrong key size for Falcon."; + + case DILITHIUM_KEY_SIZE_E: + return "Wrong key size for Dilithium."; + + case QUIC_TP_MISSING_E: + return "QUIC transport parameter not set"; + + case QUIC_WRONG_ENC_LEVEL: + return "QUIC data received at wrong encryption level"; + + case DTLS_CID_ERROR: + return "DTLS ConnectionID mismatch or missing"; + + case DTLS_TOO_MANY_FRAGMENTS_E: + return "Received too many fragmented messages from peer error"; + + case DUPLICATE_TLS_EXT_E: + return "Duplicate TLS extension in message."; + + case WOLFSSL_ALPN_NOT_FOUND: + return "TLS extension not found"; + + case WOLFSSL_BAD_CERTTYPE: + return "Certificate type not supported"; + + case WOLFSSL_BAD_STAT: + return "bad status"; + + case WOLFSSL_BAD_PATH: + return "No certificates found at designated path"; + + case WOLFSSL_BAD_FILETYPE: + return "Data format not supported"; + + case WOLFSSL_BAD_FILE: + return "Input/output error on file"; + + case WOLFSSL_NOT_IMPLEMENTED: + return "Function not implemented"; + + case WOLFSSL_UNKNOWN: + return "Unknown algorithm (EVP)"; + + case WOLFSSL_FATAL_ERROR: + return "fatal error"; + } + +#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) || \ + defined(HAVE_WEBSERVER) || defined(HAVE_MEMCACHED) + + switch (error) { /* TODO: -WOLFSSL_X509_V_ERR_CERT_SIGNATURE_FAILURE. Conflicts with - * -WOLFSSL_ERROR_WANT_CONNECT. */ + * -WOLFSSL_ERROR_WANT_CONNECT. + */ + case -WOLFSSL_X509_V_ERR_CERT_NOT_YET_VALID: return "certificate not yet valid"; + case -WOLFSSL_X509_V_ERR_CERT_HAS_EXPIRED: return "certificate has expired"; + case -WOLFSSL_X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: return "certificate signature failure"; + case -WOLFSSL_X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: return "format error in certificate's notAfter field"; + case -WOLFSSL_X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: return "self-signed certificate in certificate chain"; + case -WOLFSSL_X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: return "unable to get local issuer certificate"; + case -WOLFSSL_X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE: return "unable to verify the first certificate"; + case -WOLFSSL_X509_V_ERR_CERT_CHAIN_TOO_LONG: return "certificate chain too long"; + case -WOLFSSL_X509_V_ERR_CERT_REVOKED: return "certificate revoked"; + case -WOLFSSL_X509_V_ERR_INVALID_CA: return "invalid CA certificate"; + case -WOLFSSL_X509_V_ERR_PATH_LENGTH_EXCEEDED: return "path length constraint exceeded"; + case -WOLFSSL_X509_V_ERR_CERT_REJECTED: return "certificate rejected"; + case -WOLFSSL_X509_V_ERR_SUBJECT_ISSUER_MISMATCH: return "subject issuer mismatch"; -#endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL || HAVE_WEBSERVER */ - case UNSUPPORTED_PROTO_VERSION: - #ifdef OPENSSL_EXTRA - return "WRONG_SSL_VERSION"; - #else - return "bad/unsupported protocol version"; - #endif - - case FALCON_KEY_SIZE_E: - return "Wrong key size for Falcon."; - case DILITHIUM_KEY_SIZE_E: - return "Wrong key size for Dilithium."; - -#ifdef WOLFSSL_QUIC - case QUIC_TP_MISSING_E: - return "QUIC transport parameter not set"; - case QUIC_WRONG_ENC_LEVEL: - return "QUIC data received at wrong encryption level"; -#endif - case DTLS_CID_ERROR: - return "DTLS ConnectionID mismatch or missing"; - case DTLS_TOO_MANY_FRAGMENTS_E: - return "Received too many fragmented messages from peer error"; - - case DUPLICATE_TLS_EXT_E: - return "Duplicate TLS extension in message."; - - default : - return "unknown error number"; } +#endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL || HAVE_WEBSERVER || HAVE_MEMCACHED */ + + return "unknown error number"; #endif /* NO_ERROR_STRINGS */ } @@ -26540,7 +26612,7 @@ const char* GetCipherMacStr(char n[][MAX_SEGMENT_SZ]) { /* Returns the number of bits based on the cipher enc string, or 0 on failure */ int SetCipherBits(const char* enc) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); if ((XSTRCMP(enc,"AESGCM(256)") == 0) || (XSTRCMP(enc,"AES(256)") == 0) || @@ -29593,6 +29665,10 @@ static int HashSkeData(WOLFSSL* ssl, enum wc_HashType hashType, #ifdef WOLFSSL_DTLS if (ssl->options.dtls) { DtlsMsgPoolReset(ssl); +#ifdef WOLFSSL_DTLS_CID + if (ssl->options.useDtlsCID) + DtlsCIDOnExtensionsParsed(ssl); +#endif /* WOLFSSL_DTLS_CID */ } #endif @@ -30318,7 +30394,7 @@ static int HashSkeData(WOLFSSL* ssl, enum wc_HashType hashType, if (ret == 0) { if (wolfSSL_sk_X509_NAME_push(ssl->client_ca_names, name) - == WOLFSSL_FAILURE) + <= 0) { ret = MEMORY_ERROR; } @@ -30513,10 +30589,8 @@ static void FreeDskeArgs(WOLFSSL* ssl, void* pArgs) #if !defined(NO_DH) || defined(HAVE_ECC) || defined(HAVE_CURVE25519) || \ defined(HAVE_CURVE448) - if (args->verifySig) { - XFREE(args->verifySig, ssl->heap, DYNAMIC_TYPE_SIGNATURE); - args->verifySig = NULL; - } + XFREE(args->verifySig, ssl->heap, DYNAMIC_TYPE_SIGNATURE); + args->verifySig = NULL; #endif } @@ -31852,14 +31926,10 @@ static void FreeSckeArgs(WOLFSSL* ssl, void* pArgs) (void)ssl; - if (args->encSecret) { - XFREE(args->encSecret, ssl->heap, DYNAMIC_TYPE_SECRET); - args->encSecret = NULL; - } - if (args->input) { - XFREE(args->input, ssl->heap, DYNAMIC_TYPE_IN_BUFFER); - args->input = NULL; - } + XFREE(args->encSecret, ssl->heap, DYNAMIC_TYPE_SECRET); + args->encSecret = NULL; + XFREE(args->input, ssl->heap, DYNAMIC_TYPE_IN_BUFFER); + args->input = NULL; } /* handle generation client_key_exchange (16) */ @@ -32661,7 +32731,7 @@ int SendClientKeyExchange(WOLFSSL* ssl) ); if (!ssl->specs.static_ecdh #ifdef WOLFSSL_ASYNC_CRYPT - && ret != WC_PENDING_E + && ret != WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { FreeKey(ssl, DYNAMIC_TYPE_CURVE25519, @@ -32682,7 +32752,7 @@ int SendClientKeyExchange(WOLFSSL* ssl) ); if (!ssl->specs.static_ecdh #ifdef WOLFSSL_ASYNC_CRYPT - && ret != WC_PENDING_E + && ret != WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { FreeKey(ssl, DYNAMIC_TYPE_CURVE448, @@ -32729,7 +32799,7 @@ int SendClientKeyExchange(WOLFSSL* ssl) ); if (!ssl->specs.static_ecdh #ifdef WOLFSSL_ASYNC_CRYPT - && ret != WC_PENDING_E + && ret != WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { FreeKey(ssl, DYNAMIC_TYPE_CURVE25519, @@ -32750,7 +32820,7 @@ int SendClientKeyExchange(WOLFSSL* ssl) ); if (!ssl->specs.static_ecdh #ifdef WOLFSSL_ASYNC_CRYPT - && ret != WC_PENDING_E + && ret != WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { FreeKey(ssl, DYNAMIC_TYPE_CURVE448, @@ -32773,7 +32843,7 @@ int SendClientKeyExchange(WOLFSSL* ssl) if (!ssl->specs.static_ecdh #ifdef WOLFSSL_ASYNC_CRYPT - && ret != WC_PENDING_E + && ret != WC_NO_ERR_TRACE(WC_PENDING_E) #endif && !ssl->options.keepResources) { FreeKey(ssl, DYNAMIC_TYPE_ECC, @@ -33035,7 +33105,7 @@ int SendClientKeyExchange(WOLFSSL* ssl) if (!ssl->options.groupMessages) { ret = SendBuffered(ssl); } - if (ret == 0 || ret == WANT_WRITE) { + if (ret == 0 || ret == WC_NO_ERR_TRACE(WANT_WRITE)) { int tmpRet = MakeMasterSecret(ssl); if (tmpRet != 0) { ret = tmpRet; /* save WANT_WRITE unless more serious */ @@ -33065,7 +33135,9 @@ int SendClientKeyExchange(WOLFSSL* ssl) #ifdef WOLFSSL_ASYNC_IO /* Handle async operation */ - if (ret == WC_NO_ERR_TRACE(WC_PENDING_E) || ret == WANT_WRITE) { + if (ret == WC_NO_ERR_TRACE(WC_PENDING_E) || + ret == WC_NO_ERR_TRACE(WANT_WRITE)) + { if (ssl->options.buildingMsg) return ret; /* If we have completed all states then we will not enter this function @@ -33124,15 +33196,11 @@ static void FreeScvArgs(WOLFSSL* ssl, void* pArgs) (void)ssl; #ifndef NO_RSA - if (args->verifySig) { - XFREE(args->verifySig, ssl->heap, DYNAMIC_TYPE_SIGNATURE); - args->verifySig = NULL; - } + XFREE(args->verifySig, ssl->heap, DYNAMIC_TYPE_SIGNATURE); + args->verifySig = NULL; #endif - if (args->input) { - XFREE(args->input, ssl->heap, DYNAMIC_TYPE_IN_BUFFER); - args->input = NULL; - } + XFREE(args->input, ssl->heap, DYNAMIC_TYPE_IN_BUFFER); + args->input = NULL; } /* handle generation of certificate_verify (15) */ @@ -33622,9 +33690,9 @@ int SendCertificateVerify(WOLFSSL* ssl) #ifdef WOLFSSL_ASYNC_IO /* Handle async operation */ - if (ret == WANT_WRITE + if (ret == WC_NO_ERR_TRACE(WANT_WRITE) #ifdef WOLFSSL_ASYNC_CRYPT - || ret == WC_PENDING_E + || ret == WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) return ret; @@ -34251,16 +34319,12 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx, (void)ssl; #if defined(HAVE_ECC) || defined(HAVE_CURVE25519) || defined(HAVE_CURVE448) - if (args->exportBuf) { - XFREE(args->exportBuf, ssl->heap, DYNAMIC_TYPE_DER); - args->exportBuf = NULL; - } + XFREE(args->exportBuf, ssl->heap, DYNAMIC_TYPE_DER); + args->exportBuf = NULL; #endif #ifndef NO_RSA - if (args->verifySig) { - XFREE(args->verifySig, ssl->heap, DYNAMIC_TYPE_SIGNATURE); - args->verifySig = NULL; - } + XFREE(args->verifySig, ssl->heap, DYNAMIC_TYPE_SIGNATURE); + args->verifySig = NULL; #endif (void)args; } @@ -35857,9 +35921,9 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx, #ifdef WOLFSSL_ASYNC_IO /* Handle async operation */ - if (ret == WANT_WRITE + if (ret == WC_NO_ERR_TRACE(WANT_WRITE) #ifdef WOLFSSL_ASYNC_CRYPT - || ret == WC_PENDING_E + || ret == WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) return ret; @@ -37157,8 +37221,7 @@ static int DoSessionTicket(WOLFSSL* ssl, const byte* input, word32* inOutIdx, ssl->clSuites = NULL; #endif #ifdef WOLFSSL_SMALL_STACK - if (clSuites != NULL) - XFREE(clSuites, ssl->heap, DYNAMIC_TYPE_SUITES); + XFREE(clSuites, ssl->heap, DYNAMIC_TYPE_SUITES); #endif WOLFSSL_LEAVE("DoClientHello", ret); WOLFSSL_END(WC_FUNC_CLIENT_HELLO_DO); @@ -40455,7 +40518,7 @@ static int DefTicketEncCb(WOLFSSL* ssl, byte key_name[WOLFSSL_TICKET_NAME_SZ], ); if (!ssl->specs.static_ecdh #ifdef WOLFSSL_ASYNC_CRYPT - && ret != WC_PENDING_E + && ret != WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { FreeKey(ssl, DYNAMIC_TYPE_ECC, @@ -41185,9 +41248,7 @@ void wolfSSL_BY_DIR_entry_free(WOLFSSL_BY_DIR_entry* entry) wolfSSL_sk_BY_DIR_HASH_free(entry->hashes); } - if (entry->dir_name != NULL) { - XFREE(entry->dir_name, NULL, DYNAMIC_TYPE_OPENSSL); - } + XFREE(entry->dir_name, NULL, DYNAMIC_TYPE_OPENSSL); XFREE(entry, NULL, DYNAMIC_TYPE_OPENSSL); } diff --git a/src/keys.c b/src/keys.c index 38b1f88d1b..3123a610e0 100644 --- a/src/keys.c +++ b/src/keys.c @@ -3876,12 +3876,12 @@ int DeriveKeys(WOLFSSL* ssl) if (shaOutput == NULL || md5Input == NULL || shaInput == NULL || keyData == NULL || md5 == NULL || sha == NULL) { - if (shaOutput) XFREE(shaOutput, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (md5Input) XFREE(md5Input, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (shaInput) XFREE(shaInput, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (keyData) XFREE(keyData, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (md5) XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (sha) XFREE(sha, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(shaOutput, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(md5Input, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(shaInput, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(keyData, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(sha, NULL, DYNAMIC_TYPE_TMP_BUFFER); return MEMORY_E; } @@ -4013,11 +4013,11 @@ static int MakeSslMasterSecret(WOLFSSL* ssl) if (shaOutput == NULL || md5Input == NULL || shaInput == NULL || md5 == NULL || sha == NULL) { - if (shaOutput) XFREE(shaOutput, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (md5Input) XFREE(md5Input, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (shaInput) XFREE(shaInput, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (md5) XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (sha) XFREE(sha, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(shaOutput, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(md5Input, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(shaInput, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(sha, NULL, DYNAMIC_TYPE_TMP_BUFFER); return MEMORY_E; } diff --git a/src/ocsp.c b/src/ocsp.c index 70f6bf6f87..f0c426e315 100644 --- a/src/ocsp.c +++ b/src/ocsp.c @@ -90,8 +90,7 @@ static void FreeOcspEntry(OcspEntry* entry, void* heap) for (status = entry->status; status; status = next) { next = status->next; - if (status->rawOcspResponse) - XFREE(status->rawOcspResponse, heap, DYNAMIC_TYPE_OCSP_STATUS); + XFREE(status->rawOcspResponse, heap, DYNAMIC_TYPE_OCSP_STATUS); #ifdef OPENSSL_EXTRA if (status->serialInt) { @@ -318,9 +317,9 @@ int CheckOcspResponse(WOLFSSL_OCSP *ocsp, byte *response, int responseSz, DYNAMIC_TYPE_OCSP_REQUEST); if (newStatus == NULL || newSingle == NULL || ocspResponse == NULL) { - if (newStatus) XFREE(newStatus, NULL, DYNAMIC_TYPE_OCSP_STATUS); - if (newSingle) XFREE(newSingle, NULL, DYNAMIC_TYPE_OCSP_ENTRY); - if (ocspResponse) XFREE(ocspResponse, NULL, DYNAMIC_TYPE_OCSP_REQUEST); + XFREE(newStatus, NULL, DYNAMIC_TYPE_OCSP_STATUS); + XFREE(newSingle, NULL, DYNAMIC_TYPE_OCSP_ENTRY); + XFREE(ocspResponse, NULL, DYNAMIC_TYPE_OCSP_REQUEST); WOLFSSL_LEAVE("CheckCertOCSP", MEMORY_ERROR); return MEMORY_E; @@ -375,10 +374,7 @@ int CheckOcspResponse(WOLFSSL_OCSP *ocsp, byte *response, int responseSz, } if (status != NULL) { - if (status->rawOcspResponse) { - XFREE(status->rawOcspResponse, ocsp->cm->heap, - DYNAMIC_TYPE_OCSP_STATUS); - } + XFREE(status->rawOcspResponse, ocsp->cm->heap, DYNAMIC_TYPE_OCSP_STATUS); /* Replace existing certificate entry with updated */ ocspResponse->single->status->next = status->next; @@ -493,8 +489,7 @@ int CheckOcspRequest(WOLFSSL_OCSP* ocsp, OcspRequest* ocspRequest, ret = wolfSSL_get_ocsp_response(ssl, &response); ret = CheckOcspResponse(ocsp, response, ret, responseBuffer, status, entry, NULL, heap); - if (response != NULL) - XFREE(response, NULL, DYNAMIC_TYPE_OPENSSL); + XFREE(response, NULL, DYNAMIC_TYPE_OPENSSL); break; case SSL_TLSEXT_ERR_NOACK: ret = OCSP_LOOKUP_FAIL; @@ -538,7 +533,7 @@ int CheckOcspRequest(WOLFSSL_OCSP* ocsp, OcspRequest* ocspRequest, responseSz = ocsp->cm->ocspIOCb(ioCtx, url, urlSz, request, requestSz, &response); } - if (responseSz == WOLFSSL_CBIO_ERR_WANT_READ) { + if (responseSz == WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_WANT_READ)) { ret = OCSP_WANT_READ; } @@ -829,16 +824,15 @@ WOLFSSL_OCSP_CERTID* wolfSSL_OCSP_cert_to_id( if (ret != 0) { if (derCert != NULL) FreeDer(&derCert); - if (certId != NULL) { + if (cm != NULL) { XFREE(certId, cm->heap, DYNAMIC_TYPE_OPENSSL); certId = NULL; - } - if (certStatus) XFREE(certStatus, cm->heap, DYNAMIC_TYPE_OPENSSL); + } } #ifdef WOLFSSL_SMALL_STACK - if (cert != NULL) + if (cm != NULL) XFREE(cert, cm->heap, DYNAMIC_TYPE_DCERT); #endif @@ -928,8 +922,7 @@ void wolfSSL_OCSP_RESPONSE_free(OcspResponse* response) XFREE(response->single, NULL, DYNAMIC_TYPE_OCSP_ENTRY); } - if (response->source != NULL) - XFREE(response->source, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(response->source, NULL, DYNAMIC_TYPE_TMP_BUFFER); XFREE(response, NULL, DYNAMIC_TYPE_OCSP_REQUEST); } @@ -1060,6 +1053,9 @@ OcspResponse* wolfSSL_d2i_OCSP_RESPONSE(OcspResponse** response, if (GetSequence(*data, &idx, &length, (word32)len) >= 0) (*data) += (unsigned char) ((int)idx + length); + if (response != NULL && *response == NULL) + *response = resp; + return resp; } @@ -1112,10 +1108,8 @@ WOLFSSL_OCSP_BASICRESP* wolfSSL_OCSP_response_get1_basic(OcspResponse* response) DYNAMIC_TYPE_OCSP_ENTRY); bs->source = (byte*)XMALLOC(bs->maxIdx, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (bs->single == NULL || bs->source == NULL) { - if (bs->single) { - XFREE(bs->single, NULL, DYNAMIC_TYPE_OCSP_ENTRY); - bs->single = NULL; - } + XFREE(bs->single, NULL, DYNAMIC_TYPE_OCSP_ENTRY); + bs->single = NULL; wolfSSL_OCSP_RESPONSE_free(bs); bs = NULL; } @@ -1149,6 +1143,9 @@ int wolfSSL_i2d_OCSP_REQUEST(OcspRequest* request, unsigned char** data) { int size; + if (request == NULL) + return BAD_FUNC_ARG; + size = EncodeOcspRequest(request, NULL, 0); if (size <= 0 || data == NULL) return size; @@ -1170,8 +1167,7 @@ WOLFSSL_OCSP_ONEREQ* wolfSSL_OCSP_request_add0_id(OcspRequest *req, XMEMCPY(req->issuerHash, cid->issuerHash, KEYID_SIZE); XMEMCPY(req->issuerKeyHash, cid->issuerKeyHash, KEYID_SIZE); if (cid->status->serialSz > req->serialSz) { - if (req->serial != NULL) - XFREE(req->serial, req->heap, DYNAMIC_TYPE_OCSP); + XFREE(req->serial, req->heap, DYNAMIC_TYPE_OCSP); req->serial = (byte*)XMALLOC((size_t)cid->status->serialSz, req->heap, DYNAMIC_TYPE_OCSP_REQUEST); if (req->serial == NULL) @@ -1403,6 +1399,325 @@ WOLFSSL_OCSP_SINGLERESP* wolfSSL_OCSP_resp_get0(WOLFSSL_OCSP_BASICRESP *bs, int return single; } +#endif /* OPENSSL_EXTRA */ + +#ifdef OPENSSL_ALL + +/******************************************************************************* + * START OF WOLFSSL_OCSP_REQ_CTX API + ******************************************************************************/ + +enum ocspReqStates { + ORS_INVALID = 0, + ORS_HEADER_ADDED, + ORS_REQ_DONE +}; + +enum ocspReqIOStates { + ORIOS_INVALID = 0, + ORIOS_WRITE, + ORIOS_READ +}; + +WOLFSSL_OCSP_REQ_CTX* wolfSSL_OCSP_REQ_CTX_new(WOLFSSL_BIO *bio, int maxline) +{ + WOLFSSL_OCSP_REQ_CTX* ret = NULL; + + WOLFSSL_ENTER("wolfSSL_OCSP_REQ_CTX_new"); + + if (maxline <= 0) + maxline = OCSP_MAX_REQUEST_SZ; + + ret = (WOLFSSL_OCSP_REQ_CTX*)XMALLOC(sizeof(*ret), NULL, + DYNAMIC_TYPE_OPENSSL); + if (ret != NULL) { + XMEMSET(ret, 0, sizeof(*ret)); + ret->buf = (byte*)XMALLOC((word32)maxline, NULL, DYNAMIC_TYPE_OPENSSL); + if (ret->buf == NULL) + goto error; + ret->reqResp = wolfSSL_BIO_new(wolfSSL_BIO_s_mem()); + ret->bufLen = maxline; + ret->bio = bio; + ret->ioState = ORIOS_WRITE; + } + + return ret; +error: + wolfSSL_OCSP_REQ_CTX_free(ret); + return NULL; +} + +void wolfSSL_OCSP_REQ_CTX_free(WOLFSSL_OCSP_REQ_CTX *ctx) +{ + WOLFSSL_ENTER("wolfSSL_OCSP_REQ_CTX_free"); + if (ctx != NULL) { + if (ctx->buf != NULL) + XFREE(ctx->buf, NULL, DYNAMIC_TYPE_OPENSSL); + if (ctx->reqResp != NULL) + wolfSSL_BIO_free(ctx->reqResp); + XFREE(ctx, NULL, DYNAMIC_TYPE_OPENSSL); + } +} + +WOLFSSL_OCSP_REQ_CTX* wolfSSL_OCSP_sendreq_new(WOLFSSL_BIO *bio, + const char *path, OcspRequest *req, int maxline) +{ + WOLFSSL_OCSP_REQ_CTX* ret = NULL; + + WOLFSSL_ENTER("wolfSSL_OCSP_sendreq_new"); + + ret = wolfSSL_OCSP_REQ_CTX_new(bio, maxline); + if (ret == NULL) + return NULL; + + if (wolfSSL_OCSP_REQ_CTX_http(ret, "POST", path) != WOLFSSL_SUCCESS) + goto error; + + if (req != NULL && + wolfSSL_OCSP_REQ_CTX_set1_req(ret, req) != WOLFSSL_SUCCESS) + goto error; + + return ret; +error: + wolfSSL_OCSP_REQ_CTX_free(ret); + return NULL; +} + +int wolfSSL_OCSP_REQ_CTX_add1_header(WOLFSSL_OCSP_REQ_CTX *ctx, + const char *name, const char *value) +{ + WOLFSSL_ENTER("wolfSSL_OCSP_REQ_CTX_add1_header"); + + if (name == NULL) { + WOLFSSL_MSG("Bad parameter"); + return WOLFSSL_FAILURE; + } + if (wolfSSL_BIO_puts(ctx->reqResp, name) <= 0) { + WOLFSSL_MSG("wolfSSL_BIO_puts error"); + return WOLFSSL_FAILURE; + } + if (value != NULL) { + if (wolfSSL_BIO_write(ctx->reqResp, ": ", 2) != 2) { + WOLFSSL_MSG("wolfSSL_BIO_write error"); + return WOLFSSL_FAILURE; + } + if (wolfSSL_BIO_puts(ctx->reqResp, value) <= 0) { + WOLFSSL_MSG("wolfSSL_BIO_puts error"); + return WOLFSSL_FAILURE; + } + } + if (wolfSSL_BIO_write(ctx->reqResp, "\r\n", 2) != 2) { + WOLFSSL_MSG("wolfSSL_BIO_write error"); + return WOLFSSL_FAILURE; + } + + ctx->state = ORS_HEADER_ADDED; + + return WOLFSSL_SUCCESS; +} + +int wolfSSL_OCSP_REQ_CTX_http(WOLFSSL_OCSP_REQ_CTX *ctx, const char *op, + const char *path) +{ + static const char http_hdr[] = "%s %s HTTP/1.0\r\n"; + + WOLFSSL_ENTER("wolfSSL_OCSP_REQ_CTX_http"); + + if (ctx == NULL || op == NULL) { + WOLFSSL_MSG("Bad parameter"); + return WOLFSSL_FAILURE; + } + + if (path == NULL) + path = "/"; + + if (wolfSSL_BIO_printf(ctx->reqResp, http_hdr, op, path) <= 0) { + WOLFSSL_MSG("WOLFSSL_OCSP_REQ_CTX: wolfSSL_BIO_printf error"); + return WOLFSSL_FAILURE; + } + + ctx->state = ORS_HEADER_ADDED; + + return WOLFSSL_SUCCESS; +} + +int wolfSSL_OCSP_REQ_CTX_set1_req(WOLFSSL_OCSP_REQ_CTX *ctx, OcspRequest *req) +{ + static const char req_hdr[] = + "Content-Type: application/ocsp-request\r\n" + "Content-Length: %d\r\n\r\n"; + /* Should be enough to hold Content-Length */ + char req_hdr_buf[sizeof(req_hdr) + 10]; + int req_hdr_buf_len; + int req_len = wolfSSL_i2d_OCSP_REQUEST(req, NULL); + + WOLFSSL_ENTER("wolfSSL_OCSP_REQ_CTX_set1_req"); + + if (ctx == NULL || req == NULL) { + WOLFSSL_MSG("Bad parameters"); + return WOLFSSL_FAILURE; + } + + if (req_len <= 0) { + WOLFSSL_MSG("wolfSSL_OCSP_REQ_CTX_set1_req: request len error"); + return WOLFSSL_FAILURE; + } + + req_hdr_buf_len = + XSNPRINTF(req_hdr_buf, sizeof(req_hdr_buf), req_hdr, req_len); + if (req_hdr_buf_len >= (int)sizeof(req_hdr_buf)) { + WOLFSSL_MSG("wolfSSL_OCSP_REQ_CTX_set1_req: request too long"); + return WOLFSSL_FAILURE; + } + + if (wolfSSL_BIO_write(ctx->reqResp, req_hdr_buf, req_hdr_buf_len) <= 0) { + WOLFSSL_MSG("wolfSSL_OCSP_REQ_CTX_set1_req: wolfSSL_BIO_write error"); + return WOLFSSL_FAILURE; + } + + if (wolfSSL_i2d_OCSP_REQUEST_bio(ctx->reqResp, req) <= 0) { + WOLFSSL_MSG("wolfSSL_OCSP_REQ_CTX_set1_req: request i2d error"); + return WOLFSSL_FAILURE; + } + + ctx->state = ORS_REQ_DONE; + + return WOLFSSL_SUCCESS; +} + +static int OCSP_REQ_CTX_bio_cb(char *buf, int sz, void *ctx) +{ + return BioReceiveInternal((WOLFSSL_BIO*)ctx, NULL, buf, sz); +} + +int wolfSSL_OCSP_REQ_CTX_nbio(WOLFSSL_OCSP_REQ_CTX *ctx) +{ + WOLFSSL_ENTER("wolfSSL_OCSP_REQ_CTX_nbio"); + + if (ctx == NULL) { + WOLFSSL_MSG("Bad parameters"); + return WOLFSSL_FAILURE; + } + + switch ((enum ocspReqIOStates)ctx->ioState) { + case ORIOS_WRITE: + case ORIOS_READ: + break; + case ORIOS_INVALID: + default: + WOLFSSL_MSG("Invalid ctx->ioState state"); + return WOLFSSL_FAILURE; + } + + if (ctx->ioState == ORIOS_WRITE) { + switch ((enum ocspReqStates)ctx->state) { + case ORS_HEADER_ADDED: + /* Write final new line to complete http header */ + if (wolfSSL_BIO_write(ctx->reqResp, "\r\n", 2) != 2) { + WOLFSSL_MSG("wolfSSL_BIO_write error"); + return WOLFSSL_FAILURE; + } + break; + case ORS_REQ_DONE: + break; + case ORS_INVALID: + default: + WOLFSSL_MSG("Invalid WOLFSSL_OCSP_REQ_CTX state"); + return WOLFSSL_FAILURE; + } + } + + switch ((enum ocspReqIOStates)ctx->ioState) { + case ORIOS_WRITE: + { + const unsigned char *req; + int reqLen = wolfSSL_BIO_get_mem_data(ctx->reqResp, &req); + if (reqLen <= 0) { + WOLFSSL_MSG("wolfSSL_BIO_get_mem_data error"); + return WOLFSSL_FAILURE; + } + while (ctx->sent < reqLen) { + int sent = wolfSSL_BIO_write(ctx->bio, req + ctx->sent, + reqLen - ctx->sent); + if (sent <= 0) { + if (wolfSSL_BIO_should_retry(ctx->bio)) + return -1; + WOLFSSL_MSG("wolfSSL_BIO_write error"); + ctx->ioState = ORIOS_INVALID; + return 0; + } + ctx->sent += sent; + } + ctx->sent = 0; + ctx->ioState = ORIOS_READ; + (void)wolfSSL_BIO_reset(ctx->reqResp); + FALL_THROUGH; + } + case ORIOS_READ: + { + byte* resp = NULL; + int respLen; + int ret; + + if (ctx->buf == NULL) /* Should be allocated in new call */ + return WOLFSSL_FAILURE; + + ret = wolfIO_HttpProcessResponseOcspGenericIO(OCSP_REQ_CTX_bio_cb, + ctx->bio, &resp, ctx->buf, ctx->bufLen, NULL); + if (ret <= 0) { + if (resp != NULL) + XFREE(resp, NULL, DYNAMIC_TYPE_OCSP); + if (ret == WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_WANT_READ) || + ret == WC_NO_ERR_TRACE(OCSP_WANT_READ)) + { + return -1; + } + return WOLFSSL_FAILURE; + } + respLen = ret; + ret = wolfSSL_BIO_write(ctx->reqResp, resp, respLen); + XFREE(resp, NULL, DYNAMIC_TYPE_OCSP); + if (ret != respLen) { + WOLFSSL_MSG("wolfSSL_BIO_write error"); + return WOLFSSL_FAILURE; + } + break; + } + case ORIOS_INVALID: + default: + WOLFSSL_MSG("Invalid ctx->ioState state"); + return WOLFSSL_FAILURE; + } + + return WOLFSSL_SUCCESS; +} + +int wolfSSL_OCSP_sendreq_nbio(OcspResponse **presp, WOLFSSL_OCSP_REQ_CTX *ctx) +{ + int ret; + int len; + const unsigned char *resp = NULL; + + WOLFSSL_ENTER("wolfSSL_OCSP_sendreq_nbio"); + + if (presp == NULL) + return WOLFSSL_FAILURE; + + ret = wolfSSL_OCSP_REQ_CTX_nbio(ctx); + if (ret != WOLFSSL_SUCCESS) + return ret; + + len = wolfSSL_BIO_get_mem_data(ctx->reqResp, &resp); + if (len <= 0) + return WOLFSSL_FAILURE; + return wolfSSL_d2i_OCSP_RESPONSE(presp, &resp, len) != NULL + ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE; +} + +/******************************************************************************* + * END OF WOLFSSL_OCSP_REQ_CTX API + ******************************************************************************/ + #ifndef NO_WOLFSSL_STUB int wolfSSL_OCSP_REQUEST_add_ext(OcspRequest* req, WOLFSSL_X509_EXTENSION* ext, int idx) @@ -1595,7 +1910,8 @@ int wolfSSL_OCSP_check_nonce(OcspRequest* req, WOLFSSL_OCSP_BASICRESP* bs) /* nonces are present but not equal */ return 0; } -#endif /* OPENSSL_EXTRA */ + +#endif /* OPENSSL_ALL */ #else /* HAVE_OCSP */ diff --git a/src/pk.c b/src/pk.c index 2c06eca20e..34cdf8d5b4 100644 --- a/src/pk.c +++ b/src/pk.c @@ -2052,6 +2052,32 @@ WOLFSSL_RSA *wolfSSL_PEM_read_bio_RSA_PUBKEY(WOLFSSL_BIO* bio, } return rsa; } + +WOLFSSL_RSA *wolfSSL_d2i_RSA_PUBKEY_bio(WOLFSSL_BIO *bio, WOLFSSL_RSA **out) +{ + char* data = NULL; + int dataSz = 0; + int memAlloced = 0; + WOLFSSL_RSA* rsa = NULL; + + WOLFSSL_ENTER("wolfSSL_d2i_RSA_PUBKEY_bio"); + + if (bio == NULL) + return NULL; + + if (wolfssl_read_bio(bio, &data, &dataSz, &memAlloced) != 0) { + if (memAlloced) + XFREE(data, NULL, DYNAMIC_TYPE_TMP_BUFFER); + return NULL; + } + + rsa = wolfssl_rsa_d2i(out, (const unsigned char*)data, dataSz, + WOLFSSL_RSA_LOAD_PUBLIC); + if (memAlloced) + XFREE(data, NULL, DYNAMIC_TYPE_TMP_BUFFER); + + return rsa; +} #endif /* !NO_BIO */ #ifndef NO_FILESYSTEM @@ -4691,8 +4717,9 @@ int wolfSSL_RSA_GenAdd(WOLFSSL_RSA* rsa) mp_clear(t); #ifdef WOLFSSL_SMALL_STACK - if (tmp != NULL) + if (rsa != NULL) { XFREE(tmp, rsa->heap, DYNAMIC_TYPE_TMP_BUFFER); + } #endif return ret; @@ -5914,8 +5941,7 @@ int wolfSSL_PEM_write_mem_DSAPrivateKey(WOLFSSL_DSA* dsa, if (tmp == NULL) { WOLFSSL_MSG("malloc failed"); XFREE(derBuf, NULL, DYNAMIC_TYPE_DER); - if (cipherInfo != NULL) - XFREE(cipherInfo, NULL, DYNAMIC_TYPE_STRING); + XFREE(cipherInfo, NULL, DYNAMIC_TYPE_STRING); return 0; } @@ -5926,13 +5952,11 @@ int wolfSSL_PEM_write_mem_DSAPrivateKey(WOLFSSL_DSA* dsa, WOLFSSL_MSG("wc_DerToPemEx failed"); XFREE(derBuf, NULL, DYNAMIC_TYPE_DER); XFREE(tmp, NULL, DYNAMIC_TYPE_PEM); - if (cipherInfo != NULL) - XFREE(cipherInfo, NULL, DYNAMIC_TYPE_STRING); + XFREE(cipherInfo, NULL, DYNAMIC_TYPE_STRING); return 0; } XFREE(derBuf, NULL, DYNAMIC_TYPE_DER); - if (cipherInfo != NULL) - XFREE(cipherInfo, NULL, DYNAMIC_TYPE_STRING); + XFREE(cipherInfo, NULL, DYNAMIC_TYPE_STRING); *pem = (byte*)XMALLOC((size_t)((*pLen)+1), NULL, DYNAMIC_TYPE_KEY); if (*pem == NULL) { @@ -7802,9 +7826,7 @@ static int wolfssl_dhparams_to_der(WOLFSSL_DH* dh, unsigned char** out, *out = der; der = NULL; } - if (der != NULL) { - XFREE(der, heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(der, heap, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -9176,13 +9198,19 @@ void wolfSSL_EC_GROUP_free(WOLFSSL_EC_GROUP *group) * @return NULL on error. */ static WOLFSSL_EC_GROUP* wolfssl_ec_group_d2i(WOLFSSL_EC_GROUP** group, - const unsigned char* in, long inSz) + const unsigned char** in_pp, long inSz) { int err = 0; WOLFSSL_EC_GROUP* ret = NULL; word32 idx = 0; word32 oid = 0; int id = 0; + const unsigned char* in; + + if (in_pp == NULL || *in_pp == NULL) + return NULL; + + in = *in_pp; /* Use the group passed in. */ if ((group != NULL) && (*group != NULL)) { @@ -9231,6 +9259,9 @@ static WOLFSSL_EC_GROUP* wolfssl_ec_group_d2i(WOLFSSL_EC_GROUP** group, } ret = NULL; } + else { + *in_pp += idx; + } return ret; } @@ -9262,7 +9293,8 @@ WOLFSSL_EC_GROUP* wolfSSL_PEM_read_bio_ECPKParameters(WOLFSSL_BIO* bio, } if (!err) { /* Create EC group from DER encoding. */ - ret = wolfssl_ec_group_d2i(group, der->buffer, der->length); + const byte** p = (const byte**)&der->buffer; + ret = wolfssl_ec_group_d2i(group, p, der->length); if (ret == NULL) { WOLFSSL_ERROR_MSG("Error loading DER buffer into WOLFSSL_EC_GROUP"); } @@ -9273,6 +9305,11 @@ WOLFSSL_EC_GROUP* wolfSSL_PEM_read_bio_ECPKParameters(WOLFSSL_BIO* bio, return ret; } +WOLFSSL_EC_GROUP *wolfSSL_d2i_ECPKParameters(WOLFSSL_EC_GROUP **out, + const unsigned char **in, long len) +{ + return wolfssl_ec_group_d2i(out, in, len); +} #endif /* !NO_BIO */ #if defined(OPENSSL_ALL) && !defined(NO_CERTS) @@ -12331,6 +12368,56 @@ int wolfSSL_EC_KEY_LoadDer_ex(WOLFSSL_EC_KEY* key, const unsigned char* derBuf, return res; } + +#ifndef NO_BIO + +WOLFSSL_EC_KEY *wolfSSL_d2i_EC_PUBKEY_bio(WOLFSSL_BIO *bio, + WOLFSSL_EC_KEY **out) +{ + char* data = NULL; + int dataSz = 0; + int memAlloced = 0; + WOLFSSL_EC_KEY* ec = NULL; + int err = 0; + + WOLFSSL_ENTER("wolfSSL_d2i_EC_PUBKEY_bio"); + + if (bio == NULL) + return NULL; + + if (err == 0 && wolfssl_read_bio(bio, &data, &dataSz, &memAlloced) != 0) { + WOLFSSL_ERROR_MSG("wolfssl_read_bio failed"); + err = 1; + } + + if (err == 0 && (ec = wolfSSL_EC_KEY_new()) == NULL) { + WOLFSSL_ERROR_MSG("wolfSSL_EC_KEY_new failed"); + err = 1; + } + + /* Load the EC key with the public key from the DER encoding. */ + if (err == 0 && wolfSSL_EC_KEY_LoadDer_ex(ec, (const unsigned char*)data, + dataSz, WOLFSSL_EC_KEY_LOAD_PUBLIC) != 1) { + WOLFSSL_ERROR_MSG("wolfSSL_EC_KEY_LoadDer_ex failed"); + err = 1; + } + + if (memAlloced) + XFREE(data, NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (err) { /* on error */ + wolfSSL_EC_KEY_free(ec); + ec = NULL; + } + else { /* on success */ + if (out != NULL) + *out = ec; + } + + return ec; +} + +#endif /* !NO_BIO */ + /* * EC key PEM APIs */ diff --git a/src/quic.c b/src/quic.c index d28abe5a02..8633cf06db 100644 --- a/src/quic.c +++ b/src/quic.c @@ -614,7 +614,7 @@ int wolfSSL_quic_do_handshake(WOLFSSL* ssl) else { ret = wolfSSL_read_early_data(ssl, tmpbuffer, sizeof(tmpbuffer), &len); - if (ret < 0 && ssl->error == ZERO_RETURN) { + if (ret < 0 && ssl->error == WC_NO_ERR_TRACE(ZERO_RETURN)) { /* this is expected, since QUIC handles the actual early * data separately. */ ret = WOLFSSL_SUCCESS; @@ -634,7 +634,9 @@ int wolfSSL_quic_do_handshake(WOLFSSL* ssl) cleanup: if (ret <= 0 && ssl->options.handShakeState == HANDSHAKE_DONE - && (ssl->error == ZERO_RETURN || ssl->error == WANT_READ)) { + && (ssl->error == WC_NO_ERR_TRACE(ZERO_RETURN) || + ssl->error == WC_NO_ERR_TRACE(WANT_READ))) + { ret = WOLFSSL_SUCCESS; } if (ret == WOLFSSL_SUCCESS) { diff --git a/src/sniffer.c b/src/sniffer.c index 8c5b4cf275..31d54a949f 100644 --- a/src/sniffer.c +++ b/src/sniffer.c @@ -851,14 +851,11 @@ static void FreeSnifferSession(SnifferSession* session) XFREE(session->hash, NULL, DYNAMIC_TYPE_HASHES); #endif #ifdef WOLFSSL_TLS13 - if (session->cliKeyShare) - XFREE(session->cliKeyShare, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(session->cliKeyShare, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif #ifdef HAVE_MAX_FRAGMENT - if (session->tlsFragBuf) { - XFREE(session->tlsFragBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); - session->tlsFragBuf = NULL; - } + XFREE(session->tlsFragBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); + session->tlsFragBuf = NULL; #endif } XFREE(session, NULL, DYNAMIC_TYPE_SNIFFER_SESSION); @@ -4723,10 +4720,8 @@ static int DoHandShake(const byte* input, int* sslBytes, exit: #endif #ifdef HAVE_MAX_FRAGMENT - if (session->tlsFragBuf) { - XFREE(session->tlsFragBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); - session->tlsFragBuf = NULL; - } + XFREE(session->tlsFragBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); + session->tlsFragBuf = NULL; #endif *sslBytes = startBytes - size; /* actual bytes of full process */ diff --git a/src/ssl.c b/src/ssl.c index 13450e8ce7..b4bf407446 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -1034,9 +1034,7 @@ WOLFSSL_CTX* wolfSSL_CTX_new_ex(WOLFSSL_METHOD* method, void* heap) if (ret != WOLFSSL_SUCCESS) { WOLFSSL_MSG("wolfSSL_Init failed"); WOLFSSL_LEAVE("wolfSSL_CTX_new_ex", 0); - if (method != NULL) { - XFREE(method, heap, DYNAMIC_TYPE_METHOD); - } + XFREE(method, heap, DYNAMIC_TYPE_METHOD); return NULL; } } @@ -1132,10 +1130,8 @@ void wolfSSL_CTX_free(WOLFSSL_CTX* ctx) #if defined(OPENSSL_EXTRA) && defined(WOLFCRYPT_HAVE_SRP) \ && !defined(NO_SHA256) && !defined(WC_NO_RNG) if (ctx->srp != NULL) { - if (ctx->srp_password != NULL){ - XFREE(ctx->srp_password, ctx->heap, DYNAMIC_TYPE_SRP); - ctx->srp_password = NULL; - } + XFREE(ctx->srp_password, ctx->heap, DYNAMIC_TYPE_SRP); + ctx->srp_password = NULL; wc_SrpTerm(ctx->srp); XFREE(ctx->srp, ctx->heap, DYNAMIC_TYPE_SRP); ctx->srp = NULL; @@ -2050,7 +2046,7 @@ static int DtlsSrtpSelProfiles(word16* id, const char* profile_str) int wolfSSL_CTX_set_tlsext_use_srtp(WOLFSSL_CTX* ctx, const char* profile_str) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); if (ctx != NULL) { ret = DtlsSrtpSelProfiles(&ctx->dtlsSrtpProfiles, profile_str); } @@ -2058,7 +2054,7 @@ int wolfSSL_CTX_set_tlsext_use_srtp(WOLFSSL_CTX* ctx, const char* profile_str) } int wolfSSL_set_tlsext_use_srtp(WOLFSSL* ssl, const char* profile_str) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); if (ssl != NULL) { ret = DtlsSrtpSelProfiles(&ssl->dtlsSrtpProfiles, profile_str); } @@ -2403,7 +2399,7 @@ int wolfSSL_mcast_set_highwater_ctx(WOLFSSL* ssl, void* ctx) /* return underlying connect or accept, WOLFSSL_SUCCESS on ok */ int wolfSSL_negotiate(WOLFSSL* ssl) { - int err = WOLFSSL_FATAL_ERROR; + int err = WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR); WOLFSSL_ENTER("wolfSSL_negotiate"); @@ -2909,9 +2905,9 @@ static int wolfSSL_read_internal(WOLFSSL* ssl, void* data, int sz, int peek) #ifdef HAVE_WRITE_DUP if (ssl->dupWrite) { - if (ssl->error != 0 && ssl->error != WANT_READ + if (ssl->error != 0 && ssl->error != WC_NO_ERR_TRACE(WANT_READ) #ifdef WOLFSSL_ASYNC_CRYPT - && ssl->error != WC_PENDING_E + && ssl->error != WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { int notifyErr; @@ -3632,7 +3628,7 @@ static int _Rehandshake(WOLFSSL* ssl) ssl->secure_renegotiation->cache_status = SCR_CACHE_NEEDED; -#if !defined(NO_WOLFSSL_SERVER) +#if !defined(NO_WOLFSSL_SERVER) && !defined(WOLFSSL_NO_TLS12) if (ssl->options.side == WOLFSSL_SERVER_END) { ret = SendHelloRequest(ssl); if (ret != 0) { @@ -3640,7 +3636,7 @@ static int _Rehandshake(WOLFSSL* ssl) return WOLFSSL_FATAL_ERROR; } } -#endif /* !NO_WOLFSSL_SERVER */ +#endif /* !NO_WOLFSSL_SERVER && !WOLFSSL_NO_TLS12 */ ret = InitHandshakeHashes(ssl); if (ret != 0) { @@ -3984,7 +3980,7 @@ int wolfSSL_recv(WOLFSSL* ssl, void* data, int sz, int flags) int wolfSSL_SendUserCanceled(WOLFSSL* ssl) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_ENTER("wolfSSL_recv"); if (ssl != NULL) { @@ -4006,7 +4002,7 @@ int wolfSSL_SendUserCanceled(WOLFSSL* ssl) WOLFSSL_ABI int wolfSSL_shutdown(WOLFSSL* ssl) { - int ret = WOLFSSL_FATAL_ERROR; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR); WOLFSSL_ENTER("wolfSSL_shutdown"); if (ssl == NULL) @@ -4048,7 +4044,7 @@ int wolfSSL_shutdown(WOLFSSL* ssl) /* call wolfSSL_shutdown again for bidirectional shutdown */ if (ssl->options.sentNotify && !ssl->options.closeNotify) { ret = ProcessReply(ssl); - if ((ret == ZERO_RETURN) || + if ((ret == WC_NO_ERR_TRACE(ZERO_RETURN)) || (ret == WC_NO_ERR_TRACE(SOCKET_ERROR_E))) { /* simulate OpenSSL behavior */ ssl->options.shutdownDone = 1; @@ -4106,12 +4102,15 @@ int wolfSSL_get_error(WOLFSSL* ssl, int ret) WOLFSSL_LEAVE("wolfSSL_get_error", ssl->error); /* make sure converted types are handled in SetErrorString() too */ - if (ssl->error == WANT_READ) + if (ssl->error == WC_NO_ERR_TRACE(WANT_READ)) return WOLFSSL_ERROR_WANT_READ; /* convert to OpenSSL type */ - else if (ssl->error == WANT_WRITE) + else if (ssl->error == WC_NO_ERR_TRACE(WANT_WRITE)) return WOLFSSL_ERROR_WANT_WRITE; /* convert to OpenSSL type */ - else if (ssl->error == ZERO_RETURN || ssl->options.shutdownDone) + else if (ssl->error == WC_NO_ERR_TRACE(ZERO_RETURN) || + ssl->options.shutdownDone) + { return WOLFSSL_ERROR_ZERO_RETURN; /* convert to OpenSSL type */ + } #ifdef OPENSSL_EXTRA else if (ssl->error == WC_NO_ERR_TRACE(SOCKET_PEER_CLOSED_E)) return WOLFSSL_ERROR_SYSCALL; /* convert to OpenSSL type */ @@ -4135,9 +4134,9 @@ int wolfSSL_want(WOLFSSL* ssl) { int rw_state = SSL_NOTHING; if (ssl) { - if (ssl->error == WANT_READ) + if (ssl->error == WC_NO_ERR_TRACE(WANT_READ)) rw_state = SSL_READING; - else if (ssl->error == WANT_WRITE) + else if (ssl->error == WC_NO_ERR_TRACE(WANT_WRITE)) rw_state = SSL_WRITING; } return rw_state; @@ -4148,7 +4147,7 @@ int wolfSSL_want(WOLFSSL* ssl) int wolfSSL_want_read(WOLFSSL* ssl) { WOLFSSL_ENTER("wolfSSL_want_read"); - if (ssl->error == WANT_READ) + if (ssl->error == WC_NO_ERR_TRACE(WANT_READ)) return 1; return 0; @@ -4159,7 +4158,7 @@ int wolfSSL_want_read(WOLFSSL* ssl) int wolfSSL_want_write(WOLFSSL* ssl) { WOLFSSL_ENTER("wolfSSL_want_write"); - if (ssl->error == WANT_WRITE) + if (ssl->error == WC_NO_ERR_TRACE(WANT_WRITE)) return 1; return 0; @@ -8907,7 +8906,7 @@ int wolfSSL_dtls_got_timeout(WOLFSSL* ssl) if (ssl->options.dtls && IsAtLeastTLSv1_3(ssl->version)) { result = Dtls13RtxTimeout(ssl); if (result < 0) { - if (result == WANT_WRITE) + if (result == WC_NO_ERR_TRACE(WANT_WRITE)) ssl->dtls13SendingAckOrRtx = 1; ssl->error = result; WOLFSSL_ERROR(result); @@ -9247,7 +9246,7 @@ int wolfSSL_DTLS_SetCookieSecret(WOLFSSL* ssl, #ifdef WOLFSSL_ASYNC_CRYPT /* do not send buffered or advance state if last error was an async pending operation */ - && ssl->error != WC_PENDING_E + && ssl->error != WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { ret = SendBuffered(ssl); @@ -9346,7 +9345,7 @@ int wolfSSL_DTLS_SetCookieSecret(WOLFSSL* ssl, * should just ignore the message */ ssl->dtls13Rtx.sendAcks = 0; if ((ssl->error = SendDtls13Ack(ssl)) < 0) { - if (ssl->error == WANT_WRITE) + if (ssl->error == WC_NO_ERR_TRACE(WANT_WRITE)) ssl->dtls13SendingAckOrRtx = 1; WOLFSSL_ERROR(ssl->error); return WOLFSSL_FATAL_ERROR; @@ -9447,7 +9446,7 @@ int wolfSSL_DTLS_SetCookieSecret(WOLFSSL* ssl, ProcessReplyEx(ssl, 1); /* See if an alert was sent. */ #endif #ifdef WOLFSSL_EXTRA_ALERTS - if (ssl->error == NO_PEER_KEY || + if (ssl->error == WC_NO_ERR_TRACE(NO_PEER_KEY) || ssl->error == WC_NO_ERR_TRACE(PSK_KEY_ERROR)) { SendAlert(ssl, alert_fatal, handshake_failure); } @@ -9798,7 +9797,7 @@ int wolfSSL_DTLS_SetCookieSecret(WOLFSSL* ssl, #ifdef WOLFSSL_ASYNC_CRYPT /* do not send buffered or advance state if last error was an async pending operation */ - && ssl->error != WC_PENDING_E + && ssl->error != WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { ret = SendBuffered(ssl); @@ -10922,8 +10921,11 @@ int wolfSSL_set_compression(WOLFSSL* ssl) { WOLFSSL_ENTER("wolfSSL_OpenSSL_add_all_algorithms_noconf"); - if (wolfSSL_add_all_algorithms() == WOLFSSL_FATAL_ERROR) + if (wolfSSL_add_all_algorithms() == + WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) + { return WOLFSSL_FATAL_ERROR; + } return WOLFSSL_SUCCESS; } @@ -10936,7 +10938,9 @@ int wolfSSL_set_compression(WOLFSSL* ssl) the use of a wolfssl.cnf type configuration file and is only used for OpenSSL compatibility. */ - if (wolfSSL_add_all_algorithms() == WOLFSSL_FATAL_ERROR) { + if (wolfSSL_add_all_algorithms() == + WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) + { return WOLFSSL_FATAL_ERROR; } return WOLFSSL_SUCCESS; @@ -11007,12 +11011,12 @@ int wolfSSL_set_compression(WOLFSSL* ssl) if ((flags & WOLFSSL_BIO_FLAG_READ) && (((ssl->cbioFlag & WOLFSSL_CBIO_RECV) == 0))) { - ssl->CBIORecv = BioReceive; + ssl->CBIORecv = SslBioReceive; } if ((flags & WOLFSSL_BIO_FLAG_WRITE) && (((ssl->cbioFlag & WOLFSSL_CBIO_SEND) == 0))) { - ssl->CBIOSend = BioSend; + ssl->CBIOSend = SslBioSend; } /* User programs should always retry reading from these BIOs */ @@ -11335,8 +11339,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl) return WOLFSSL_FAILURE; } - if (wolfSSL_sk_X509_NAME_push(ctx->client_ca_names, nameCopy) != - WOLFSSL_SUCCESS) { + if (wolfSSL_sk_X509_NAME_push(ctx->client_ca_names, nameCopy) <= 0) { WOLFSSL_MSG("wolfSSL_sk_X509_NAME_push error"); wolfSSL_X509_NAME_free(nameCopy); return WOLFSSL_FAILURE; @@ -11391,8 +11394,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl) */ nameCopy->x509 = NULL; - if (wolfSSL_sk_X509_NAME_push(list, nameCopy) != - WOLFSSL_SUCCESS) { + if (wolfSSL_sk_X509_NAME_push(list, nameCopy) <= 0) { WOLFSSL_MSG("wolfSSL_sk_X509_NAME_push error"); /* Do free in loop because nameCopy is now responsibility * of list to free and adding jumps to cleanup after this @@ -11553,16 +11555,12 @@ int wolfSSL_set_compression(WOLFSSL* ssl) wc_FreeRng(&rng); return WOLFSSL_FAILURE; } - if (ctx->srp_password != NULL){ - XFREE(ctx->srp_password,NULL, - DYNAMIC_TYPE_SRP); - ctx->srp_password = NULL; - } + XFREE(ctx->srp_password, NULL, DYNAMIC_TYPE_SRP); + ctx->srp_password = NULL; wc_FreeRng(&rng); } else { /* save password for wolfSSL_set_srp_username */ - if (ctx->srp_password != NULL) - XFREE(ctx->srp_password,ctx->heap, DYNAMIC_TYPE_SRP); + XFREE(ctx->srp_password, ctx->heap, DYNAMIC_TYPE_SRP); ctx->srp_password = (byte*)XMALLOC(XSTRLEN(password) + 1, ctx->heap, DYNAMIC_TYPE_SRP); @@ -12593,7 +12591,7 @@ static int Set_CTX_max_proto_version(WOLFSSL_CTX* ctx, int ver) int wolfSSL_CTX_set_max_proto_version(WOLFSSL_CTX* ctx, int version) { int i; - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); int minProto; WOLFSSL_ENTER("wolfSSL_CTX_set_max_proto_version"); @@ -12714,7 +12712,7 @@ static int Set_SSL_min_proto_version(WOLFSSL* ssl, int ver) int wolfSSL_set_min_proto_version(WOLFSSL* ssl, int version) { int i; - int ret = WOLFSSL_FAILURE;; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE);; WOLFSSL_ENTER("wolfSSL_set_min_proto_version"); @@ -12782,7 +12780,7 @@ static int Set_SSL_max_proto_version(WOLFSSL* ssl, int ver) int wolfSSL_set_max_proto_version(WOLFSSL* ssl, int version) { int i; - int ret = WOLFSSL_FAILURE;; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE);; WOLFSSL_ENTER("wolfSSL_set_max_proto_version"); @@ -12920,7 +12918,7 @@ int wolfSSL_CTX_get_max_proto_version(WOLFSSL_CTX* ctx) WOLFSSL_LEAVE("wolfSSL_CTX_get_max_proto_version", ret); - if (ret == WOLFSSL_FATAL_ERROR) { + if (ret == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) { WOLFSSL_MSG("Error getting max proto version"); ret = 0; /* setting ret to 0 to match compat return */ } @@ -13473,7 +13471,7 @@ static int PushCAx509Chain(WOLFSSL_CERT_MANAGER* cm, i--; for (; i >= 0; i--) { if (push) { - if (wolfSSL_sk_X509_push(sk, issuer[i]) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_X509_push(sk, issuer[i]) <= 0) { wolfSSL_X509_free(issuer[i]); ret = WOLFSSL_FATAL_ERROR; push = 0; /* Free the rest of the unpushed certs */ @@ -13519,13 +13517,13 @@ WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_set_peer_cert_chain(WOLFSSL* ssl) * first if we have one for this cert */ SSL_CM_WARNING(ssl); if (PushCAx509Chain(SSL_CM(ssl), x509, sk) - == WOLFSSL_FATAL_ERROR) { + == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) { ret = WOLFSSL_FATAL_ERROR; } } #endif - if (ret != 0 || wolfSSL_sk_X509_push(sk, x509) != WOLFSSL_SUCCESS) { + if (ret != 0 || wolfSSL_sk_X509_push(sk, x509) <= 0) { WOLFSSL_MSG("Error decoding cert"); wolfSSL_X509_free(x509); wolfSSL_sk_X509_pop_free(sk, NULL); @@ -13620,66 +13618,80 @@ static WC_INLINE int compare_WOLFSSL_CIPHER( #endif /* OPENSSL_ALL || WOLFSSL_QT */ -/* return 1 on success 0 on fail */ +/* return number of elements on success 0 on fail */ int wolfSSL_sk_push(WOLFSSL_STACK* sk, const void *data) +{ + WOLFSSL_ENTER("wolfSSL_sk_push"); + + return wolfSSL_sk_insert(sk, data, 0); +} + +/* return number of elements on success 0 on fail */ +int wolfSSL_sk_insert(WOLFSSL_STACK *sk, const void *data, int idx) { WOLFSSL_STACK* node; #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) WOLFSSL_CIPHER ciph; #endif - WOLFSSL_ENTER("wolfSSL_sk_push"); + WOLFSSL_ENTER("wolfSSL_sk_insert"); - if (!sk) { + if (!sk) + return WOLFSSL_FATAL_ERROR; + if (!data) return WOLFSSL_FAILURE; - } - /* Check if empty data */ - switch (sk->type) { - case STACK_TYPE_CIPHER: + if (idx == 0 || sk->num == 0) { + /* Check if empty data */ + switch (sk->type) { + case STACK_TYPE_CIPHER: #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) - /* check if entire struct is zero */ - XMEMSET(&ciph, 0, sizeof(WOLFSSL_CIPHER)); - if (compare_WOLFSSL_CIPHER(&sk->data.cipher, &ciph) == 0) { - sk->data.cipher = *(WOLFSSL_CIPHER*)data; - sk->num = 1; - if (sk->hash_fn) { - sk->hash = sk->hash_fn(&sk->data.cipher); + /* check if entire struct is zero */ + XMEMSET(&ciph, 0, sizeof(WOLFSSL_CIPHER)); + if (compare_WOLFSSL_CIPHER(&sk->data.cipher, &ciph) == 0) { + sk->data.cipher = *(WOLFSSL_CIPHER*)data; + sk->num = 1; + if (sk->hash_fn) { + sk->hash = sk->hash_fn(&sk->data.cipher); + } + return (int)sk->num; } - return WOLFSSL_SUCCESS; - } - break; + if (sk->num == 0) + sk->num = 1; /* confirmed at least one element */ + break; #endif - case STACK_TYPE_X509: - case STACK_TYPE_GEN_NAME: - case STACK_TYPE_BIO: - case STACK_TYPE_OBJ: - case STACK_TYPE_STRING: - case STACK_TYPE_ACCESS_DESCRIPTION: - case STACK_TYPE_X509_EXT: - case STACK_TYPE_X509_REQ_ATTR: - case STACK_TYPE_NULL: - case STACK_TYPE_X509_NAME: - case STACK_TYPE_X509_NAME_ENTRY: - case STACK_TYPE_CONF_VALUE: - case STACK_TYPE_X509_INFO: - case STACK_TYPE_BY_DIR_entry: - case STACK_TYPE_BY_DIR_hash: - case STACK_TYPE_X509_OBJ: - case STACK_TYPE_DIST_POINT: - case STACK_TYPE_X509_CRL: - default: - /* All other types are pointers */ - if (!sk->data.generic) { - sk->data.generic = (void*)data; - sk->num = 1; + case STACK_TYPE_X509: + case STACK_TYPE_GEN_NAME: + case STACK_TYPE_BIO: + case STACK_TYPE_OBJ: + case STACK_TYPE_STRING: + case STACK_TYPE_ACCESS_DESCRIPTION: + case STACK_TYPE_X509_EXT: + case STACK_TYPE_X509_REQ_ATTR: + case STACK_TYPE_NULL: + case STACK_TYPE_X509_NAME: + case STACK_TYPE_X509_NAME_ENTRY: + case STACK_TYPE_CONF_VALUE: + case STACK_TYPE_X509_INFO: + case STACK_TYPE_BY_DIR_entry: + case STACK_TYPE_BY_DIR_hash: + case STACK_TYPE_X509_OBJ: + case STACK_TYPE_DIST_POINT: + case STACK_TYPE_X509_CRL: + default: + /* All other types are pointers */ + if (!sk->data.generic) { + sk->data.generic = (void*)data; + sk->num = 1; #ifdef OPENSSL_ALL - if (sk->hash_fn) { - sk->hash = sk->hash_fn(sk->data.generic); - } + if (sk->hash_fn) + sk->hash = sk->hash_fn(sk->data.generic); #endif - return WOLFSSL_SUCCESS; - } - break; + return (int)sk->num; + } + if (sk->num == 0) + sk->num = 1; /* confirmed at least one element */ + break; + } } /* stack already has value(s) create a new node and add more */ @@ -13688,26 +13700,71 @@ int wolfSSL_sk_push(WOLFSSL_STACK* sk, const void *data) WOLFSSL_MSG("Memory error"); return WOLFSSL_FAILURE; } - - /* push new x509 onto head of stack */ - node->next = sk->next; node->type = sk->type; - sk->next = node; sk->num += 1; - #ifdef OPENSSL_ALL node->hash_fn = sk->hash_fn; - node->hash = sk->hash; - sk->hash = 0; #endif + + if (idx == 0) { + /* Special case where we need to change the values in the head element + * to avoid changing the initial pointer. */ + /* push new item onto head of stack */ + node->next = sk->next; + sk->next = node; +#ifdef OPENSSL_ALL + node->hash = sk->hash; + sk->hash = 0; +#endif + switch (sk->type) { + case STACK_TYPE_CIPHER: +#if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) + node->data.cipher = sk->data.cipher; + sk->data.cipher = *(WOLFSSL_CIPHER*)data; + if (sk->hash_fn) { + sk->hash = sk->hash_fn(&sk->data.cipher); + } + break; +#endif + case STACK_TYPE_X509: + case STACK_TYPE_GEN_NAME: + case STACK_TYPE_BIO: + case STACK_TYPE_OBJ: + case STACK_TYPE_STRING: + case STACK_TYPE_ACCESS_DESCRIPTION: + case STACK_TYPE_X509_EXT: + case STACK_TYPE_X509_REQ_ATTR: + case STACK_TYPE_NULL: + case STACK_TYPE_X509_NAME: + case STACK_TYPE_X509_NAME_ENTRY: + case STACK_TYPE_CONF_VALUE: + case STACK_TYPE_X509_INFO: + case STACK_TYPE_BY_DIR_entry: + case STACK_TYPE_BY_DIR_hash: + case STACK_TYPE_X509_OBJ: + case STACK_TYPE_DIST_POINT: + case STACK_TYPE_X509_CRL: + default: + /* All other types are pointers */ + node->data.generic = sk->data.generic; + sk->data.generic = (void*)data; +#ifdef OPENSSL_ALL + if (sk->hash_fn) + sk->hash = sk->hash_fn(sk->data.generic); +#endif + break; + } + + return (int)sk->num; + } + + /* populate node */ switch (sk->type) { case STACK_TYPE_CIPHER: #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) - node->data.cipher = sk->data.cipher; - sk->data.cipher = *(WOLFSSL_CIPHER*)data; - if (sk->hash_fn) { - sk->hash = sk->hash_fn(&sk->data.cipher); - } + node->data.cipher = *(WOLFSSL_CIPHER*)data; + if (node->hash_fn) + node->hash = node->hash_fn(&node->data.cipher); break; #endif case STACK_TYPE_X509: @@ -13730,17 +13787,25 @@ int wolfSSL_sk_push(WOLFSSL_STACK* sk, const void *data) case STACK_TYPE_X509_CRL: default: /* All other types are pointers */ - node->data.generic = sk->data.generic; - sk->data.generic = (void*)data; + node->data.generic = (void*)data; #ifdef OPENSSL_ALL - if (sk->hash_fn) { - sk->hash = sk->hash_fn(sk->data.generic); - } + if (node->hash_fn) + node->hash = node->hash_fn(node->data.generic); #endif break; } + { + /* insert node into stack. not using sk since we return sk->num after */ + WOLFSSL_STACK* prev_node = sk; + while (idx != 0 && prev_node->next != NULL) { + prev_node = prev_node->next; + idx--; + } + node->next = prev_node->next; + prev_node->next = node; + } - return WOLFSSL_SUCCESS; + return (int)sk->num; } #endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */ @@ -14612,7 +14677,9 @@ int wolfSSL_sk_CIPHER_description(WOLFSSL_CIPHER* cipher) authStr = GetCipherAuthStr(n); /* encStr */ encStr = GetCipherEncStr(n); - if ((cipher->bits = SetCipherBits(encStr)) == WOLFSSL_FAILURE) { + if ((cipher->bits = SetCipherBits(encStr)) == + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) + { WOLFSSL_MSG("Cipher Bits Not Set."); } /* macStr */ @@ -14957,20 +15024,80 @@ char* wolfSSL_CIPHER_description(const WOLFSSL_CIPHER* cipher, char* in, return ret; } - -#ifndef NO_WOLFSSL_STUB -int wolfSSL_OCSP_parse_url(char* url, char** host, char** port, char** path, - int* ssl) +int wolfSSL_OCSP_parse_url(const char* url, char** host, char** port, + char** path, int* ssl) { - (void)url; - (void)host; - (void)port; - (void)path; - (void)ssl; - WOLFSSL_STUB("OCSP_parse_url"); - return 0; + const char* u = url; + const char* upath; /* path in u */ + const char* uport; /* port in u */ + const char* hostEnd; + + WOLFSSL_ENTER("OCSP_parse_url"); + + *host = NULL; + *port = NULL; + *path = NULL; + *ssl = 0; + + if (*(u++) != 'h') goto err; + if (*(u++) != 't') goto err; + if (*(u++) != 't') goto err; + if (*(u++) != 'p') goto err; + if (*u == 's') { + *ssl = 1; + u++; + *port = CopyString("443", -1, NULL, DYNAMIC_TYPE_OPENSSL); + } + else if (*u == ':') { + *ssl = 0; + *port = CopyString("80", -1, NULL, DYNAMIC_TYPE_OPENSSL); + } + else + goto err; + if (*port == NULL) + goto err; + if (*(u++) != ':') goto err; + if (*(u++) != '/') goto err; + if (*(u++) != '/') goto err; + + /* Look for path */ + upath = XSTRSTR(u, "/"); + *path = CopyString(upath == NULL ? "/" : upath, -1, NULL, + DYNAMIC_TYPE_OPENSSL); + + /* Look for port */ + uport = XSTRSTR(u, ":"); + if (uport != NULL) { + if (*(++uport) == '\0') + goto err; + /* port must be before path */ + if (upath != NULL && uport >= upath) + goto err; + XFREE(*port, NULL, DYNAMIC_TYPE_OPENSSL); + *port = CopyString(uport, upath != NULL ? (int)(upath - uport) : -1, + NULL, DYNAMIC_TYPE_OPENSSL); + if (*port == NULL) + goto err; + hostEnd = uport - 1; + } + else + hostEnd = upath; + + *host = CopyString(u, hostEnd != NULL ? (int)(hostEnd - u) : -1, NULL, + DYNAMIC_TYPE_OPENSSL); + if (*host == NULL) + goto err; + + return WOLFSSL_SUCCESS; +err: + XFREE(*host, NULL, DYNAMIC_TYPE_OPENSSL); + *host = NULL; + XFREE(*port, NULL, DYNAMIC_TYPE_OPENSSL); + *port = NULL; + XFREE(*path, NULL, DYNAMIC_TYPE_OPENSSL); + *path = NULL; + return WOLFSSL_FAILURE; } -#endif #ifndef NO_WOLFSSL_STUB WOLFSSL_COMP_METHOD* wolfSSL_COMP_zlib(void) @@ -15369,7 +15496,9 @@ int wolfSSL_ERR_GET_REASON(unsigned long err) ret = 0 - ret; /* setting as negative value */ /* wolfCrypt range is less than MAX (-100) wolfSSL range is MIN (-300) and lower */ - if (ret < MAX_CODE_E && ret > MIN_CODE_E) { + if ((ret <= WC_FIRST_E && ret >= WC_LAST_E) || + (ret <= WOLFSSL_FIRST_E && ret >= WOLFSSL_LAST_E)) + { return ret; } else { @@ -16911,7 +17040,7 @@ int wolfSSL_sk_SSL_COMP_num(WOLF_STACK_OF(WOLFSSL_COMP)* sk) #if defined(HAVE_EX_DATA) && !defined(NO_FILESYSTEM) int wolfSSL_cmp_peer_cert_to_file(WOLFSSL* ssl, const char *fname) { - int ret = WOLFSSL_FATAL_ERROR; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR); WOLFSSL_ENTER("wolfSSL_cmp_peer_cert_to_file"); if (ssl != NULL && fname != NULL) @@ -19204,11 +19333,11 @@ unsigned long wolfSSL_ERR_peek_last_error_line(const char **file, int *line) } #if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) \ || defined(WOLFSSL_HAPROXY) - if (ret == -ASN_NO_PEM_HEADER) + if (ret == -WC_NO_ERR_TRACE(ASN_NO_PEM_HEADER)) return (ERR_LIB_PEM << 24) | PEM_R_NO_START_LINE; #endif #if defined(OPENSSL_ALL) && defined(WOLFSSL_PYTHON) - if (ret == ASN1_R_HEADER_TOO_LONG) { + if (ret == WC_NO_ERR_TRACE(ASN1_R_HEADER_TOO_LONG)) { return (ERR_LIB_ASN1 << 24) | ASN1_R_HEADER_TOO_LONG; } #endif @@ -20038,7 +20167,7 @@ int wolfSSL_FIPS_mode_set(int r) int wolfSSL_CIPHER_get_bits(const WOLFSSL_CIPHER *c, int *alg_bits) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_ENTER("wolfSSL_CIPHER_get_bits"); #if defined(WOLFSSL_QT) || defined(OPENSSL_ALL) @@ -20159,9 +20288,41 @@ WOLFSSL_CTX* wolfSSL_set_SSL_CTX(WOLFSSL* ssl, WOLFSSL_CTX* ctx) ssl->ctx = ctx; #ifndef NO_CERTS +#ifdef WOLFSSL_COPY_CERT + /* If WOLFSSL_COPY_CERT defined, always make new copy of cert from ctx */ + if (ctx->certificate != NULL) { + if (ssl->buffers.certificate != NULL) { + FreeDer(&ssl->buffers.certificate); + } + ret = AllocCopyDer(&ssl->buffers.certificate, ctx->certificate->buffer, + ctx->certificate->length, ctx->certificate->type, + ctx->certificate->heap); + if (ret != 0) { + return NULL; + } + + ssl->buffers.weOwnCert = 1; + ret = WOLFSSL_SUCCESS; + } + if (ctx->certChain != NULL) { + if (ssl->buffers.certChain != NULL) { + FreeDer(&ssl->buffers.certChain); + } + ret = AllocCopyDer(&ssl->buffers.certChain, ctx->certChain->buffer, + ctx->certChain->length, ctx->certChain->type, + ctx->certChain->heap); + if (ret != 0) { + return NULL; + } + + ssl->buffers.weOwnCertChain = 1; + ret = WOLFSSL_SUCCESS; + } +#else /* ctx owns certificate, certChain and key */ ssl->buffers.certificate = ctx->certificate; ssl->buffers.certChain = ctx->certChain; +#endif #ifdef WOLFSSL_TLS13 ssl->buffers.certChainCnt = ctx->certChainCnt; #endif @@ -20327,10 +20488,10 @@ unsigned long wolfSSL_ERR_peek_last_error(void) WOLFSSL_MSG("Issue peeking at error node in queue"); return 0; } - if (ret == -ASN_NO_PEM_HEADER) + if (ret == -WC_NO_ERR_TRACE(ASN_NO_PEM_HEADER)) return (ERR_LIB_PEM << 24) | PEM_R_NO_START_LINE; #if defined(WOLFSSL_PYTHON) - if (ret == ASN1_R_HEADER_TOO_LONG) + if (ret == WC_NO_ERR_TRACE(ASN1_R_HEADER_TOO_LONG)) return (ERR_LIB_ASN1 << 24) | ASN1_R_HEADER_TOO_LONG; #endif return (unsigned long)ret; @@ -21316,8 +21477,7 @@ void wolfSSL_WOLFSSL_STRING_free(WOLFSSL_STRING s) { WOLFSSL_ENTER("wolfSSL_WOLFSSL_STRING_free"); - if (s != NULL) - XFREE(s, NULL, DYNAMIC_TYPE_OPENSSL); + XFREE(s, NULL, DYNAMIC_TYPE_OPENSSL); } void wolfSSL_sk_WOLFSSL_STRING_free(WOLF_STACK_OF(WOLFSSL_STRING)* sk) @@ -23639,10 +23799,8 @@ int wolfSSL_BUF_MEM_resize(WOLFSSL_BUF_MEM* buf, size_t len) void wolfSSL_BUF_MEM_free(WOLFSSL_BUF_MEM* buf) { if (buf) { - if (buf->data) { - XFREE(buf->data, NULL, DYNAMIC_TYPE_OPENSSL); - buf->data = NULL; - } + XFREE(buf->data, NULL, DYNAMIC_TYPE_OPENSSL); + buf->data = NULL; buf->max = 0; buf->length = 0; XFREE(buf, NULL, DYNAMIC_TYPE_OPENSSL); @@ -23687,7 +23845,7 @@ static int wolfSSL_RAND_InitMutex(void) */ int wolfSSL_RAND_Init(void) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); #ifdef HAVE_GLOBAL_RNG if (wc_LockMutex(&globalRNGMutex) == 0) { if (initGlobalRNG == 0) { @@ -24217,8 +24375,7 @@ int wolfSSL_RAND_bytes(unsigned char* buf, int num) if (initTmpRng) wc_FreeRng(tmpRNG); #ifdef WOLFSSL_SMALL_STACK - if (tmpRNG) - XFREE(tmpRNG, NULL, DYNAMIC_TYPE_RNG); + XFREE(tmpRNG, NULL, DYNAMIC_TYPE_RNG); #endif return ret; @@ -24704,7 +24861,7 @@ void wolfSSL_aes_ctr_iv(WOLFSSL_EVP_CIPHER_CTX* ctx, int doset, #if defined(OPENSSL_EXTRA) && !defined(WC_NO_RNG) && defined(HAVE_HASHDRBG) int wolfSSL_FIPS_drbg_init(WOLFSSL_DRBG_CTX *ctx, int type, unsigned int flags) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); if (ctx != NULL) { XMEMSET(ctx, 0, sizeof(WOLFSSL_DRBG_CTX)); ctx->type = type; @@ -24716,7 +24873,7 @@ int wolfSSL_FIPS_drbg_init(WOLFSSL_DRBG_CTX *ctx, int type, unsigned int flags) } WOLFSSL_DRBG_CTX* wolfSSL_FIPS_drbg_new(int type, unsigned int flags) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_DRBG_CTX* ctx = (WOLFSSL_DRBG_CTX*)XMALLOC(sizeof(WOLFSSL_DRBG_CTX), NULL, DYNAMIC_TYPE_OPENSSL); ret = wolfSSL_FIPS_drbg_init(ctx, type, flags); @@ -24733,7 +24890,7 @@ WOLFSSL_DRBG_CTX* wolfSSL_FIPS_drbg_new(int type, unsigned int flags) int wolfSSL_FIPS_drbg_instantiate(WOLFSSL_DRBG_CTX* ctx, const unsigned char* pers, size_t perslen) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); if (ctx != NULL && ctx->rng == NULL) { #if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || \ (defined(HAVE_FIPS) && FIPS_VERSION_GE(5,0))) @@ -24767,7 +24924,7 @@ int wolfSSL_FIPS_drbg_set_callbacks(WOLFSSL_DRBG_CTX* ctx, size_t entropy_blocklen, drbg_nonce_get none_get, drbg_nonce_clean nonce_clean) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); if (ctx != NULL) { ctx->entropy_get = entropy_get; ctx->entropy_clean = entropy_clean; @@ -24788,7 +24945,7 @@ void wolfSSL_FIPS_rand_add(const void* buf, int num, double entropy) int wolfSSL_FIPS_drbg_reseed(WOLFSSL_DRBG_CTX* ctx, const unsigned char* adin, size_t adinlen) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); if (ctx != NULL && ctx->rng != NULL) { #if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || \ (defined(HAVE_FIPS) && FIPS_VERSION_GE(2,0))) @@ -24807,7 +24964,7 @@ int wolfSSL_FIPS_drbg_generate(WOLFSSL_DRBG_CTX* ctx, unsigned char* out, size_t outlen, int prediction_resistance, const unsigned char* adin, size_t adinlen) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); if (ctx != NULL && ctx->rng != NULL) { ret = wc_RNG_GenerateBlock(ctx->rng, out, (word32)outlen); if (ret == 0) { diff --git a/src/ssl_asn1.c b/src/ssl_asn1.c index 0cae277dc8..22b36b577e 100644 --- a/src/ssl_asn1.c +++ b/src/ssl_asn1.c @@ -46,212 +46,197 @@ #ifdef OPENSSL_ALL -/* Create an ASN1 item of the specified type. - * - * @param [out] item Pointer to location to place new ASN1 item. - * @param [in] type Type of ASN1 item to create. - * @return 0 on success. - * @return 1 when item type not supported. - * @return 1 when item type allocation fails. - */ -static int wolfssl_asn1_item_new(void** item, int type) +/* Provides access to the member of the obj offset by offset */ +#define asn1Mem(obj, offset) (*(void**)(((byte*)(obj)) + (offset))) +#define asn1Type(obj, offset) (*(int*)(((byte*)(obj)) + (offset))) + +static void* asn1_new_tpl(const WOLFSSL_ASN1_TEMPLATE *mem) { - int err = 0; + if (mem->sequence) + return wolfSSL_sk_new_null(); + else + return mem->new_func(); +} - switch (type) { - case WOLFSSL_X509_ALGOR_ASN1: - *(WOLFSSL_X509_ALGOR**)item = wolfSSL_X509_ALGOR_new(); +static void* asn1_item_alloc(const WOLFSSL_ASN1_ITEM* item) +{ + void* ret = NULL; + + /* allocation */ + switch (item->type) { + case WOLFSSL_ASN1_SEQUENCE: + case WOLFSSL_ASN1_CHOICE: + ret = (void *)XMALLOC(item->size, NULL, DYNAMIC_TYPE_OPENSSL); + if (ret != NULL) + XMEMSET(ret, 0, item->size); break; - case WOLFSSL_ASN1_BIT_STRING_ASN1: - *(WOLFSSL_ASN1_BIT_STRING**)item = wolfSSL_ASN1_BIT_STRING_new(); + case WOLFSSL_ASN1_OBJECT_TYPE: + if (item->mcount != 1 || item->members->offset) { + WOLFSSL_MSG("incorrect member count or offset"); + return NULL; + } + ret = asn1_new_tpl(item->members); break; - case WOLFSSL_ASN1_INTEGER_ASN1: - *(WOLFSSL_ASN1_INTEGER**)item = wolfSSL_ASN1_INTEGER_new(); - break; default: - WOLFSSL_MSG("Type not supported in wolfSSL_ASN1_item_new"); - *(void**)item = NULL; + WOLFSSL_MSG("ASN1 type not implemented"); + return NULL; } - /* Check whether an item was put in. */ - if (*(void**)item == NULL) { - err = 1; + + return ret; +} + +static int asn1_item_init(void* obj, const WOLFSSL_ASN1_ITEM* item) +{ + const WOLFSSL_ASN1_TEMPLATE *mem = NULL; + size_t i; + int ret = 0; + + switch (item->type) { + case WOLFSSL_ASN1_SEQUENCE: + for (mem = item->members, i = 0; i < item->mcount; mem++, i++) { + asn1Mem(obj, mem->offset) = asn1_new_tpl(mem); + if (asn1Mem(obj, mem->offset) == NULL) { + ret = -1; + break; + } + } + break; + case WOLFSSL_ASN1_OBJECT_TYPE: + /* Initialized by new_func. Nothing to do. */ + break; + case WOLFSSL_ASN1_CHOICE: + asn1Type(obj, item->toffset) = -1; + /* We don't know what to initialize. Nothing to do. */ + break; + default: + WOLFSSL_MSG("ASN1 type not implemented"); + ret = -1; + break; } - return err; + return ret; } /* Create a new ASN1 item based on a template. * - * @param [in] tpl Template of ASN1 items. + * @param [in] item Info about ASN1 items. * @return A new ASN1 item on success. - * @return NULL when tpl is NULL, dynamic memory allocation fails or ASN1 + * @return NULL when item is NULL, dynamic memory allocation fails or ASN1 * item type not supported. */ -void* wolfSSL_ASN1_item_new(const WOLFSSL_ASN1_ITEM* tpl) +void* wolfSSL_ASN1_item_new(const WOLFSSL_ASN1_ITEM* item) { - int err = 0; void* ret = NULL; - const WOLFSSL_ASN1_TEMPLATE *mem = NULL; - size_t i; WOLFSSL_ENTER("wolfSSL_ASN1_item_new"); - if (tpl != NULL) { - ret = (void *)XMALLOC(tpl->size, NULL, DYNAMIC_TYPE_OPENSSL); - } + if (item == NULL) + return NULL; - if (ret != NULL) { - XMEMSET(ret, 0, tpl->size); - for (mem = tpl->members, i = 0; i < tpl->mcount; mem++, i++) { - if ((err = wolfssl_asn1_item_new( - (void**)(((byte*)ret) + mem->offset), mem->type))) { - break; - } - } - } + /* allocation */ + ret = asn1_item_alloc(item); + if (ret == NULL) + return NULL; - if (err) { - wolfSSL_ASN1_item_free(ret, tpl); + /* initialization */ + if (asn1_item_init(ret, item) != 0) { + wolfSSL_ASN1_item_free(ret, item); ret = NULL; } + return ret; } -/* Dispose of an ASN1 item of the specified type. - * - * @param [in, out] item Pointer to an anonymized ASN1 item to free. - * @param [in] type Type of ASN1 item to free. - */ -static void wolfssl_asn1_item_free(void** item, int type) +static void asn1_free_tpl(void *obj, const WOLFSSL_ASN1_TEMPLATE *mem) { - switch (type) { - case WOLFSSL_X509_ALGOR_ASN1: - wolfSSL_X509_ALGOR_free(*(WOLFSSL_X509_ALGOR**)item); - break; - case WOLFSSL_ASN1_BIT_STRING_ASN1: - wolfSSL_ASN1_BIT_STRING_free(*(WOLFSSL_ASN1_BIT_STRING**)item); - break; - case WOLFSSL_ASN1_INTEGER_ASN1: - wolfSSL_ASN1_INTEGER_free(*(WOLFSSL_ASN1_INTEGER**)item); - break; - default: - WOLFSSL_MSG("Type not supported in wolfSSL_ASN1_item_free"); + if (obj != NULL) { + if (mem->sequence) + wolfSSL_sk_pop_free((WOLFSSL_STACK *)obj, mem->free_func); + else + mem->free_func(obj); } } /* Dispose of ASN1 item based on a template. * * @param [in, out] val ASN item to free. - * @param [in, tpl Template of ASN1 items. + * @param [in, item Info about ASN1 items. */ -void wolfSSL_ASN1_item_free(void *items, const WOLFSSL_ASN1_ITEM *tpl) +void wolfSSL_ASN1_item_free(void *obj, const WOLFSSL_ASN1_ITEM *item) { const WOLFSSL_ASN1_TEMPLATE *mem = NULL; size_t i; WOLFSSL_ENTER("wolfSSL_ASN1_item_free"); - if (items != NULL) { - for (mem = tpl->members, i = 0; i < tpl->mcount; mem++, i++) { - wolfssl_asn1_item_free((void**)(((byte*)items) + mem->offset), - mem->type); + if (obj != NULL) { + switch (item->type) { + case WOLFSSL_ASN1_SEQUENCE: + for (mem = item->members, i = 0; i < item->mcount; mem++, i++) + asn1_free_tpl(asn1Mem(obj, mem->offset), mem); + XFREE(obj, NULL, DYNAMIC_TYPE_OPENSSL); + break; + case WOLFSSL_ASN1_CHOICE: + if (asn1Type(obj, item->toffset) < 0) + break; /* type not set */ + for (mem = item->members, i = 0; i < item->mcount; mem++, i++) { + if (asn1Type(obj, item->toffset) == mem->tag) { + asn1_free_tpl(asn1Mem(obj, mem->offset), mem); + break; + } + } + XFREE(obj, NULL, DYNAMIC_TYPE_OPENSSL); + break; + case WOLFSSL_ASN1_OBJECT_TYPE: + asn1_free_tpl(obj, item->members); + break; + default: + WOLFSSL_MSG("ASN1 type not implemented"); + break; } } - XFREE(items, NULL, DYNAMIC_TYPE_OPENSSL); } -/* Offset buf if not NULL or NULL. */ -#define bufLenOrNull(buf, len) (((buf) != NULL) ? ((buf) + (len)) : NULL) - -/* Encode X509 algorithm as DER. - * - * @param [in] algor X509 algorithm object. - * @param [in, out] buf Buffer to encode into. May be NULL. - * @return Length of DER encoding on success. - * @return 0 on failure. - */ -static int wolfSSL_i2d_X509_ALGOR(const WOLFSSL_X509_ALGOR* algor, byte* buf) -{ - int ret; - word32 oid = 0; - word32 idx = 0; - - if (algor->algorithm == 0) { - WOLFSSL_MSG("X509_ALGOR algorithm not set"); - ret = 0; - } - else if (GetObjectId(algor->algorithm->obj, &idx, &oid, - (word32)algor->algorithm->grp, algor->algorithm->objSz) < 0) { - WOLFSSL_MSG("Issue getting OID of object"); - ret = 0; - } - else { - ret = (int)SetAlgoID((int)oid, buf, algor->algorithm->grp, 0); - } - - return ret; -} - -/* Encode ASN.1 BIT_STRING as DER. - * - * @param [in] bit_str BIT_STRING object. - * @param [in, out] buf Buffer to encode into. May be NULL. - * @return Length of DER encoding on success. - */ -static int wolfSSL_i2d_ASN1_BIT_STRING(const WOLFSSL_ASN1_BIT_STRING* bit_str, - byte* buf) -{ - int len; - - len = (int)SetBitString((word32)bit_str->length, 0, buf); - if ((buf != NULL) && (bit_str->data != NULL)) { - XMEMCPY(buf + len, bit_str->data, (size_t)bit_str->length); - } - - return len + bit_str->length; -} - -/* Encode ASN item as DER. - * - * @param [in] item Pointer to anonymized ASN item. - * @param [in, out] buf Buffer to encode into. May be NULL. - * @return Length of DER encoding on success. - * @return 0 on failure. - */ -static int wolfssl_i2d_asn1_item(void** item, int type, byte* buf) +static int i2d_asn1_items(const void* obj, byte** buf, + const WOLFSSL_ASN1_TEMPLATE* mem) { - int len; - - switch (type) { - case WOLFSSL_X509_ALGOR_ASN1: - len = wolfSSL_i2d_X509_ALGOR(*(const WOLFSSL_X509_ALGOR**)item, - buf); - break; - case WOLFSSL_ASN1_BIT_STRING_ASN1: - len = wolfSSL_i2d_ASN1_BIT_STRING( - *(const WOLFSSL_ASN1_BIT_STRING**)item, buf); - break; - case WOLFSSL_ASN1_INTEGER_ASN1: - { - byte *tmp_buf = buf; - len = wolfSSL_i2d_ASN1_INTEGER( - *(const WOLFSSL_ASN1_INTEGER**)item, &tmp_buf); - if ((buf == NULL) && (tmp_buf != NULL)) { - XFREE(tmp_buf, NULL, DYNAMIC_TYPE_ASN1); - tmp_buf = NULL; + int len = 0; + int ret = 0; + if (mem->sequence) { + const WOLFSSL_STACK* sk = (WOLFSSL_STACK *)asn1Mem(obj, mem->offset); + int ski; /* stack index */ + int innerLen = 0; + /* Figure out the inner length first */ + for (ski = 0; ski < wolfSSL_sk_num(sk); ski++) { + ret = mem->i2d_func(wolfSSL_sk_value(sk, ski), NULL); + if (ret <= 0) + break; + innerLen += ret; + } + if (ret <= 0) + return 0; + if (buf != NULL && *buf != NULL) { + /* Now write it out */ + int writeLen = 0; + *buf += SetSequence((word32)innerLen, *buf); + for (ski = 0; ski < wolfSSL_sk_num(sk); ski++) { + ret = mem->i2d_func(wolfSSL_sk_value(sk, ski), buf); + if (ret <= 0) + break; + writeLen += ret; } + if (ret <= 0 || writeLen != innerLen) + return 0; } - break; - default: - WOLFSSL_MSG("Type not support in processMembers"); - len = 0; + len = (int)SetSequence((word32)innerLen, NULL) + innerLen; } - - if (len < 0) { - len = 0; /* wolfSSL_i2d_ASN1_INTEGER can return a value less than 0 - * on error */ + else { + ret = mem->i2d_func(asn1Mem(obj, mem->offset), + buf != NULL && *buf != NULL ? buf : NULL); + if (ret <= 0) + return 0; + len = ret; } - return len; } @@ -264,7 +249,7 @@ static int wolfssl_i2d_asn1_item(void** item, int type, byte* buf) * @return Length of DER encoding on success. * @return 0 on failure. */ -static int wolfssl_i2d_asn1_items(const void* src, byte*buf, +static int wolfssl_i2d_asn1_items(const void* obj, byte* buf, const WOLFSSL_ASN1_TEMPLATE* members, size_t mcount) { const WOLFSSL_ASN1_TEMPLATE* mem = NULL; @@ -275,12 +260,34 @@ static int wolfssl_i2d_asn1_items(const void* src, byte*buf, WOLFSSL_ENTER("wolfssl_i2d_asn1_items"); for (mem = members, i = 0; i < mcount; mem++, i++) { - ret = wolfssl_i2d_asn1_item((void**)(((byte*)src) + mem->offset), - mem->type, bufLenOrNull(buf, len)); - if (ret == 0) { + byte* tmp = buf; + if (mem->ex && mem->tag >= 0) { + /* Figure out the inner length */ + int innerLen = 0; + int hdrLen = 0; + ret = i2d_asn1_items(obj, NULL, mem); + if (ret <= 0) { + len = 0; + break; + } + innerLen = ret; + hdrLen = SetExplicit((byte)mem->tag, (word32)innerLen, buf, 0); + len += hdrLen; + if (buf != NULL) + buf += hdrLen; + } + + ret = i2d_asn1_items(obj, &buf, mem); + if (ret <= 0) { len = 0; break; } + if (buf != NULL && !mem->ex && mem->tag >= 0) { + /* Encode the implicit tag */ + byte imp[ASN_TAG_SZ + MAX_LENGTH_SZ]; + SetImplicit(tmp[0], mem->tag, 0, imp, 0); + tmp[0] = imp[0]; + } len += ret; } @@ -297,25 +304,55 @@ static int wolfssl_i2d_asn1_items(const void* src, byte*buf, * @return Length of DER encoding on success. * @return 0 on failure. */ -static int i2d_ASN_SEQUENCE(const void* src, byte* buf, - const WOLFSSL_ASN1_ITEM* tpl) +static int i2d_ASN_SEQUENCE(const void* obj, byte* buf, + const WOLFSSL_ASN1_ITEM* item) { word32 seq_len; word32 len = 0; - seq_len = (word32)wolfssl_i2d_asn1_items(src, NULL, tpl->members, - tpl->mcount); + seq_len = (word32)wolfssl_i2d_asn1_items(obj, NULL, item->members, + item->mcount); if (seq_len != 0) { len = SetSequence(seq_len, buf); if (buf != NULL) { - wolfssl_i2d_asn1_items(src, buf + len, tpl->members, tpl->mcount); + if (wolfssl_i2d_asn1_items(obj, buf + len, item->members, + item->mcount) > 0) + len += seq_len; /* success */ + else + len = 0; /* error */ } - len += seq_len; + else + len += seq_len; } return (int)len; } +static int i2d_ASN_CHOICE(const void* obj, byte* buf, + const WOLFSSL_ASN1_ITEM* item) +{ + const WOLFSSL_ASN1_TEMPLATE* mem = NULL; + size_t i; + + if (asn1Type(obj, item->toffset) < 0) + return 0; /* type not set */ + for (mem = item->members, i = 0; i < item->mcount; mem++, i++) { + if (asn1Type(obj, item->toffset) == mem->tag) { + return wolfssl_i2d_asn1_items(obj, buf, mem, 1); + } + } + return 0; +} + +static int i2d_ASN_OBJECT_TYPE(const void* obj, byte* buf, + const WOLFSSL_ASN1_ITEM* item) +{ + /* To be able to use wolfssl_i2d_asn1_items without any modifications, + * pass in a pointer to obj so that asn1Mem uses the correct pointer. */ + const void ** obj_pp = &obj; + return wolfssl_i2d_asn1_items(obj_pp, buf, item->members, item->mcount); +} + /* Encode ASN1 template item. * * @param [in] src ASN1 items to encode. @@ -324,14 +361,20 @@ static int i2d_ASN_SEQUENCE(const void* src, byte* buf, * @return Length of DER encoding on success. * @return 0 on failure. */ -static int wolfssl_asn1_item_encode(const void* src, byte* buf, - const WOLFSSL_ASN1_ITEM* tpl) +static int wolfssl_asn1_item_encode(const void* obj, byte* buf, + const WOLFSSL_ASN1_ITEM* item) { int len; - switch (tpl->type) { - case ASN_SEQUENCE: - len = i2d_ASN_SEQUENCE(src, buf, tpl); + switch (item->type) { + case WOLFSSL_ASN1_SEQUENCE: + len = i2d_ASN_SEQUENCE(obj, buf, item); + break; + case WOLFSSL_ASN1_OBJECT_TYPE: + len = i2d_ASN_OBJECT_TYPE(obj, buf, item); + break; + case WOLFSSL_ASN1_CHOICE: + len = i2d_ASN_CHOICE(obj, buf, item); break; default: WOLFSSL_MSG("Type not supported in wolfSSL_ASN1_item_i2d"); @@ -347,10 +390,10 @@ static int wolfssl_asn1_item_encode(const void* src, byte* buf, * @param [in, out] dest Pointer to buffer to encode into. May be NULL. * @param [in] tpl Template of ASN1 items. * @return Length of DER encoding on success. - * @return 0 on failure. + * @return WOLFSSL_FATAL_ERROR on failure. */ -int wolfSSL_ASN1_item_i2d(const void* src, byte** dest, - const WOLFSSL_ASN1_ITEM* tpl) +int wolfSSL_ASN1_item_i2d(const void* obj, byte** dest, + const WOLFSSL_ASN1_ITEM* item) { int ret = 1; int len = 0; @@ -359,35 +402,319 @@ int wolfSSL_ASN1_item_i2d(const void* src, byte** dest, WOLFSSL_ENTER("wolfSSL_ASN1_item_i2d"); /* Validate parameters. */ - if ((src == NULL) || (tpl == NULL)) { + if ((obj == NULL) || (item == NULL)) { ret = 0; } - if ((ret == 1) && ((len = wolfssl_asn1_item_encode(src, NULL, tpl)) == 0)) { + if ((ret == 1) && ((len = wolfssl_asn1_item_encode(obj, NULL, item)) == 0)) ret = 0; - } if ((ret == 1) && (dest != NULL)) { if (*dest == NULL) { buf = (byte*)XMALLOC((size_t)len, NULL, DYNAMIC_TYPE_ASN1); if (buf == NULL) ret = 0; - *dest = buf; } + else + buf = *dest; if (ret == 1) { - len = wolfssl_asn1_item_encode(src, *dest, tpl); + len = wolfssl_asn1_item_encode(obj, buf, item); + if (len <= 0) + ret = 0; + } + + if (ret == 1) { + if (*dest == NULL) + *dest = buf; + else + *dest += len; } } if (ret == 0) { - XFREE(buf, NULL, DYNAMIC_TYPE_ASN1); - len = 0; + if (*dest == NULL) + XFREE(buf, NULL, DYNAMIC_TYPE_ASN1); + len = WOLFSSL_FATAL_ERROR; } WOLFSSL_LEAVE("wolfSSL_ASN1_item_i2d", len); return len; } +static void* d2i_obj(const WOLFSSL_ASN1_TEMPLATE* mem, const byte** src, + long* len) +{ + void* ret; + const byte* tmp = *src; + ret = mem->d2i_func(NULL, &tmp, *len); + if (ret == NULL) { + WOLFSSL_MSG("d2i error"); + return NULL; + } + if (tmp <= *src) { + WOLFSSL_MSG("ptr not advanced"); + mem->free_func(ret); /* never a stack so we can call this directly */ + return NULL; + } + *len -= (tmp - *src); + *src = tmp; + return ret; +} + +static void* d2i_generic_obj(const WOLFSSL_ASN1_TEMPLATE* mem, const byte** src, + long* len) +{ + void* ret = NULL; + if (mem->sequence) { + long skl = 0; + int slen = 0; + WOLFSSL_STACK* sk = NULL; + word32 idx = 0; + const byte* tmp = *src; + if (GetSequence(tmp, &idx, &slen, (word32)*len) < 0) + goto error; + skl = (long)slen; + tmp += idx; + ret = sk = wolfSSL_sk_new_null(); + while (skl > 0) { + void* new_obj = d2i_obj(mem, &tmp, &skl); + if (new_obj == NULL) { + WOLFSSL_MSG("d2i_obj failed"); + goto error; + } + if (wolfSSL_sk_insert(sk, new_obj, -1) <= 0) { + mem->free_func(new_obj); + WOLFSSL_MSG("push failed"); + goto error; + } + } + if (skl != 0) { + WOLFSSL_MSG("l not zero after sequence"); + goto error; + } + *len -= (long)slen; + *src = tmp; + } + else { + ret = d2i_obj(mem, src, len); + } + return ret; +error: + asn1_free_tpl(ret, mem); + return NULL; +} + +static int d2i_handle_tags(const WOLFSSL_ASN1_TEMPLATE* mem, const byte** src, + long* len, byte** impBuf, int* asnLen) +{ + if (mem->tag >= 0) { + byte tag = 0; + word32 idx = 0; + if (mem->ex) { + if (GetASNTag(*src, &idx, &tag, (word32)*len) < 0 || + (byte)(ASN_CONTEXT_SPECIFIC | ASN_CONSTRUCTED | mem->tag) + != tag || + GetLength(*src, &idx, asnLen, (word32)*len) < 0) { + WOLFSSL_MSG("asn tag error"); + return -1; + } + *len -= idx; + *src += idx; + } + else { + /* Underlying d2i functions won't be able to handle the implicit + * tag so we substitute it for the expected tag. */ + if (mem->first_byte == 0) { + WOLFSSL_MSG("first byte not set"); + return -1; + } + if (GetASNTag(*src, &idx, &tag, (word32)*len) < 0 || + (byte)mem->tag != (tag & ASN_TYPE_MASK) || + GetLength(*src, &idx, asnLen, (word32)*len) < 0) { + WOLFSSL_MSG("asn tag error"); + return -1; + } + *asnLen += idx; /* total buffer length */ + *impBuf = (byte*)XMALLOC(*asnLen, NULL, + DYNAMIC_TYPE_TMP_BUFFER); + if (*impBuf == NULL) { + WOLFSSL_MSG("malloc error"); + return -1; + } + XMEMCPY(*impBuf, *src, *asnLen); + (*impBuf)[0] = mem->first_byte; + } + } + return 0; +} + +static void* d2i_generic(const WOLFSSL_ASN1_TEMPLATE* mem, + const byte** src, long* len) +{ + int asnLen = -1; + const byte *tmp = NULL; + void* ret = NULL; + byte* impBuf = NULL; + long l; + + if (*len <= 0) { + WOLFSSL_MSG("buffer too short"); + return NULL; + } + + if (d2i_handle_tags(mem, src, len, &impBuf, &asnLen) != 0) { + WOLFSSL_MSG("tags error"); + goto error; + } + + if (impBuf != NULL) + tmp = impBuf; + else + tmp = *src; + l = (long)(asnLen >= 0 ? asnLen : *len); + ret = d2i_generic_obj(mem, &tmp, &l); + if (l < 0) { + WOLFSSL_MSG("ptr advanced too far"); + goto error; + } + if (impBuf != NULL) { + tmp = *src + (tmp - impBuf); /* for the next calculation */ + XFREE(impBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); + } + if (asnLen >= 0 && (int)(tmp - *src) != asnLen) { + WOLFSSL_MSG("ptr not advanced enough"); + goto error; + } + *len -= tmp - *src; + *src = tmp; + return ret; +error: + asn1_free_tpl(ret, mem); + if (impBuf != NULL) + XFREE(impBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); + return NULL; +} + +static int d2i_ASN_SEQUENCE(void* obj, const byte **src, long len, + const WOLFSSL_ASN1_ITEM* item) +{ + const WOLFSSL_ASN1_TEMPLATE* mem = NULL; + int err; + word32 idx = 0; + int slen = 0; + size_t i; + const byte* s = *src; + + err = GetSequence(s, &idx, &slen, (word32)len); + if (err <= 0) { + WOLFSSL_MSG("GetSequence error"); + return -1; + } + s += idx; + len -= idx; + + for (mem = item->members, i = 0; i < item->mcount; mem++, i++) { + asn1Mem(obj, mem->offset) = d2i_generic(mem, &s, &len); + if (asn1Mem(obj, mem->offset) == NULL) { + WOLFSSL_MSG("d2i error"); + return -1; + } + } + *src = s; + return 0; +} + +static int d2i_ASN_CHOICE(void* obj, const byte **src, long len, + const WOLFSSL_ASN1_ITEM* item) +{ + const WOLFSSL_ASN1_TEMPLATE* mem = NULL; + size_t i; + + for (mem = item->members, i = 0; i < item->mcount; mem++, i++) { + asn1Mem(obj, mem->offset) = d2i_generic(mem, src, &len); + if (asn1Mem(obj, mem->offset) != NULL) { + asn1Type(obj, item->toffset) = mem->tag; + return 0; + } + } + WOLFSSL_MSG("der does not decode with any CHOICE"); + return -1; +} + +static void* d2i_ASN_OBJECT_TYPE(const byte **src, long len, + const WOLFSSL_ASN1_ITEM* item) +{ + return d2i_generic(item->members, src, &len); +} + +void* wolfSSL_ASN1_item_d2i(void** dst, const byte **src, long len, + const WOLFSSL_ASN1_ITEM* item) +{ + void* obj = NULL; + int err = 0; + const byte *tmp; + + WOLFSSL_ENTER("wolfSSL_ASN1_item_d2i"); + + if (src == NULL || *src == NULL || len <= 0 || item == NULL) { + WOLFSSL_LEAVE("wolfSSL_ASN1_item_d2i", 0); + return NULL; + } + + tmp = *src; + + /* Create an empty object. */ + + switch (item->type) { + case WOLFSSL_ASN1_SEQUENCE: + case WOLFSSL_ASN1_CHOICE: + obj = asn1_item_alloc(item); + if (obj == NULL) + return NULL; + break; + case WOLFSSL_ASN1_OBJECT_TYPE: + /* allocated later */ + break; + default: + WOLFSSL_MSG("Type not supported in wolfSSL_ASN1_item_d2i"); + return NULL; + } + + switch (item->type) { + case WOLFSSL_ASN1_SEQUENCE: + err = d2i_ASN_SEQUENCE(obj, &tmp, len, item); + break; + case WOLFSSL_ASN1_CHOICE: + err = d2i_ASN_CHOICE(obj, &tmp, len, item); + break; + case WOLFSSL_ASN1_OBJECT_TYPE: + obj = d2i_ASN_OBJECT_TYPE(&tmp, len, item); + if (obj == NULL) + err = -1; + break; + default: + WOLFSSL_MSG("Type not supported in wolfSSL_ASN1_item_d2i"); + err = -1; + break; + } + + if (err == 0) + *src = tmp; + else { + wolfSSL_ASN1_item_free(obj, item); + obj = NULL; + } + + if (dst != NULL && obj != NULL) { + if (*dst != NULL) + wolfSSL_ASN1_item_free(*dst, item); + *dst = obj; + } + + WOLFSSL_LEAVE("wolfSSL_ASN1_item_d2i", obj != NULL); + return obj; +} + #endif /* OPENSSL_ALL */ #endif /* OPENSSL_EXTRA */ @@ -453,9 +780,6 @@ int wolfSSL_ASN1_BIT_STRING_get_bit(const WOLFSSL_ASN1_BIT_STRING* bitStr, return bit; } -#endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */ - -#if defined(OPENSSL_ALL) && !defined(NO_CERTS) /* Grow data to require length. * @@ -478,7 +802,8 @@ static int wolfssl_asn1_bit_string_grow(WOLFSSL_ASN1_BIT_STRING* bitStr, } else { /* Clear out new, top bytes. */ - XMEMSET(tmp + bitStr->length, 0, (size_t)(len - bitStr->length)); + if (len > bitStr->length) + XMEMSET(tmp + bitStr->length, 0, (size_t)(len - bitStr->length)); bitStr->data = tmp; bitStr->length = len; } @@ -527,7 +852,99 @@ int wolfSSL_ASN1_BIT_STRING_set_bit(WOLFSSL_ASN1_BIT_STRING* bitStr, int idx, return ret; } -#endif /* OPENSSL_ALL && !NO_CERTS */ +/* Serialize object to DER encoding + * + * @param bstr Object to serialize + * @param pp Output + * @return Length on success + * Negative number on failure + */ +int wolfSSL_i2d_ASN1_BIT_STRING(const WOLFSSL_ASN1_BIT_STRING* bstr, + unsigned char** pp) +{ + int len; + unsigned char* buf; + + if (bstr == NULL || (bstr->data == NULL && bstr->length != 0)) + return WOLFSSL_FATAL_ERROR; + + len = (int)SetBitString((word32)bstr->length, 0, NULL) + bstr->length; + if (pp != NULL) { + word32 idx; + + if (*pp != NULL) + buf = *pp; + else { + buf = (byte*)XMALLOC((size_t)len, NULL, DYNAMIC_TYPE_ASN1); + if (buf == NULL) + return WOLFSSL_FATAL_ERROR; + } + + idx = SetBitString((word32)bstr->length, 0, buf); + if (bstr->length > 0) + XMEMCPY(buf + idx, bstr->data, (size_t)bstr->length); + + if (*pp != NULL) + *pp += len; + else + *pp = buf; + } + + return len; +} + +WOLFSSL_ASN1_BIT_STRING* wolfSSL_d2i_ASN1_BIT_STRING( + WOLFSSL_ASN1_BIT_STRING** out, const byte** src, long len) +{ + WOLFSSL_ASN1_BIT_STRING* ret = NULL; +#ifdef WOLFSSL_ASN_TEMPLATE + word32 idx = 0; + byte tag = 0; + int length = 0; + + WOLFSSL_ENTER("wolfSSL_d2i_ASN1_BIT_STRING"); + + if (src == NULL || *src == NULL || len == 0) + return NULL; + + if (GetASNTag(*src, &idx, &tag, (word32)len) < 0) + return NULL; + if (tag != ASN_BIT_STRING) + return NULL; + if (GetLength(*src, &idx, &length, (word32)len) < 0) + return NULL; + if (GetASN_BitString(*src, idx, length) != 0) + return NULL; + idx++; /* step over unused bits */ + length--; + + ret = wolfSSL_ASN1_BIT_STRING_new(); + if (ret == NULL) + return NULL; + + if (wolfssl_asn1_bit_string_grow(ret, length) != 1) { + wolfSSL_ASN1_BIT_STRING_free(ret); + return NULL; + } + + XMEMCPY(ret->data, *src + idx, length); + *src += idx + (word32)length; + + if (out != NULL) { + if (*out != NULL) + wolfSSL_ASN1_BIT_STRING_free(*out); + *out = ret; + } +#else + WOLFSSL_MSG("d2i_ASN1_BIT_STRING needs --enable-asn=template"); + (void)out; + (void)src; + (void)len; +#endif + return ret; +} + +#endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */ /******************************************************************************* * ASN1_INTEGER APIs @@ -772,7 +1189,7 @@ static void wolfssl_twos_compl(byte* data, int length) /* Calculate 2's complement of DER encoding. * - * @param [in] data Array that is number. + * @param [in|out] data Array that is number. * @param [in] length Number of bytes in array. * @param [out] neg When NULL, 2's complement data. * When not NULL, check for negative first and return. @@ -811,60 +1228,48 @@ static int wolfssl_asn1_int_twos_compl(byte* data, int length, byte* neg) * @return -1 when a is NULL or no data, out is NULL, dynamic memory allocation * fails or encoding length fails. */ -int wolfSSL_i2d_ASN1_INTEGER(const WOLFSSL_ASN1_INTEGER* a, unsigned char** out) +int wolfSSL_i2d_ASN1_INTEGER(const WOLFSSL_ASN1_INTEGER* a, unsigned char** pp) { - int ret = 0; - byte* buf = NULL; - WOLFSSL_ENTER("wolfSSL_i2d_ASN1_INTEGER"); /* Validate parameters. */ - if ((a == NULL) || (a->data == NULL) || (a->length <= 0) || (out == NULL)) { + if (a == NULL || a->data == NULL || a->length <= 0) { WOLFSSL_MSG("Bad parameter."); - ret = -1; + return WOLFSSL_FATAL_ERROR; } - if ((ret == 0) && (*out == NULL)) { - /* Allocate buffer to hold encoding. */ - buf = (unsigned char*)XMALLOC((size_t)a->length, NULL, - DYNAMIC_TYPE_ASN1); - if (buf == NULL) { - WOLFSSL_MSG("Failed to allocate output buffer."); - ret = -1; + if (pp != NULL) { + byte* buf; + + if (*pp != NULL) + buf = *pp; + else { + buf = (byte*)XMALLOC((size_t)a->length, NULL, DYNAMIC_TYPE_ASN1); + if (buf == NULL) + return WOLFSSL_FATAL_ERROR; } - /* Return any allocated buffer. */ - *out = buf; - } - if (ret == 0) { + /* Copy the data (including tag and length) into output buffer. */ - XMEMCPY(*out, a->data, (size_t)a->length); + XMEMCPY(buf, a->data, (size_t)a->length); /* Only magnitude of the number stored (i.e. the sign isn't encoded). * The "negative" field is 1 if the value must be interpreted as * negative and we need to output the 2's complement of the value in * the DER output. */ - if (a->negative) { - ret = wolfssl_asn1_int_twos_compl(*out, a->length, NULL); + if (a->negative && + wolfssl_asn1_int_twos_compl(buf, a->length, NULL) != 0) { + if (*pp == NULL) + XFREE(buf, NULL, DYNAMIC_TYPE_ASN1); + return WOLFSSL_FATAL_ERROR; } - } - if (ret == 0) { - ret = a->length; - /* Move pointer on passed encoding when buffer passed in. */ - if (buf == NULL) { - *out += a->length; - } - } - /* Dispose of any dynamically allocated data on error. */ - else if (buf != NULL) { - /* Dispose of buffer allocated locally on error. */ - XFREE(buf, NULL, DYNAMIC_TYPE_ASN1); - /* Don't return freed buffer. */ - *out = NULL; - } - WOLFSSL_LEAVE("wolfSSL_i2d_ASN1_INTEGER", ret); + if (*pp != NULL) + *pp += a->length; + else + *pp = buf; + } - return ret; + return a->length; } /* Decode DER encoding of ASN.1 INTEGER. @@ -1700,6 +2105,36 @@ int wolfSSL_ASN1_get_object(const unsigned char **in, long *len, int *tag, return ret; } +int wolfssl_asn1_obj_set(WOLFSSL_ASN1_OBJECT* obj, const byte* der, word32 len, + int addHdr) +{ + word32 idx = 0; + + if (obj == NULL || der == NULL || len == 0) + return WOLFSSL_FAILURE; + + if (addHdr) + idx = SetHeader(ASN_OBJECT_ID, (word32)len, NULL, 0); + + if (obj->obj != NULL) { + XFREE((void*)obj->obj, obj->heap, DYNAMIC_TYPE_ASN1); + obj->obj = NULL; + obj->dynamic &= ~WOLFSSL_ASN1_DYNAMIC_DATA; + } + + obj->obj =(unsigned char*)XMALLOC(idx + len, obj->heap, DYNAMIC_TYPE_ASN1); + if (obj->obj == NULL) + return WOLFSSL_FAILURE; + + if (addHdr) + SetHeader(ASN_OBJECT_ID, (word32)len, (byte*)obj->obj, 0); + + XMEMCPY((byte*)obj->obj + idx, der, len); + obj->objSz = (unsigned int)(idx + len); + obj->dynamic |= WOLFSSL_ASN1_DYNAMIC_DATA; + return WOLFSSL_SUCCESS; +} + /* Creates and ASN.1 OBJECT_ID object from DER encoding. * * @param [out] a Pointer to return new ASN.1 OBJECT_ID through. @@ -1714,38 +2149,43 @@ WOLFSSL_ASN1_OBJECT *wolfSSL_d2i_ASN1_OBJECT(WOLFSSL_ASN1_OBJECT **a, const unsigned char **der, long length) { WOLFSSL_ASN1_OBJECT* ret = NULL; - int err = 0; - const unsigned char *d; - long len = 0; - int tag = 0; - int cls; + int len = 0; + word32 idx = 0; WOLFSSL_ENTER("wolfSSL_d2i_ASN1_OBJECT"); /* Validate parameters. */ if ((der == NULL) || (*der == NULL) || (length <= 0)) { WOLFSSL_MSG("Bad parameter"); - err = 1; + return NULL; } - if (!err) { - /* Get pointer to be modified along the way. */ - d = *der; - /* Move d to value and get length and tag. */ - if (wolfSSL_ASN1_get_object(&d, &len, &tag, &cls, length) & 0x80) { - WOLFSSL_MSG("wolfSSL_ASN1_get_object error"); - err = 1; - } + if (GetASNHeader(*der, ASN_OBJECT_ID, &idx, &len, (word32)length) < 0) { + WOLFSSL_MSG("error getting tag"); + return NULL; } - /* Check it DER encoding is of an OBJECT_ID. */ - if ((!err) && (tag != ASN_OBJECT_ID)) { - WOLFSSL_MSG("Not an ASN object"); - err = 1; + + if (len <= 0) { + WOLFSSL_MSG("zero length"); + return NULL; + } + + ret = wolfSSL_ASN1_OBJECT_new(); + if (ret == NULL) { + WOLFSSL_MSG("wolfSSL_ASN1_OBJECT_new error"); + return NULL; } - /* Create an ASN.1 OBJECT_ID_object from value. TODO: not DER encoding? */ - if ((!err) && ((ret = wolfSSL_c2i_ASN1_OBJECT(a, &d, len)) != NULL)) { - /* Update pointer to after decoded bytes. */ - *der = d; + + if (wolfssl_asn1_obj_set(ret, *der, idx + len, 0) != WOLFSSL_SUCCESS) { + wolfSSL_ASN1_OBJECT_free(ret); + return NULL; + } + + *der += idx + len; + if (a != NULL) { + if (*a != NULL) + wolfSSL_ASN1_OBJECT_free(*a); + *a = ret; } return ret; @@ -1821,7 +2261,6 @@ int wolfSSL_i2d_ASN1_OBJECT(WOLFSSL_ASN1_OBJECT *a, unsigned char **pp) WOLFSSL_ASN1_OBJECT *wolfSSL_c2i_ASN1_OBJECT(WOLFSSL_ASN1_OBJECT **a, const unsigned char **pp, long len) { - int err = 0; WOLFSSL_ASN1_OBJECT* ret = NULL; WOLFSSL_ENTER("wolfSSL_c2i_ASN1_OBJECT"); @@ -1829,40 +2268,29 @@ WOLFSSL_ASN1_OBJECT *wolfSSL_c2i_ASN1_OBJECT(WOLFSSL_ASN1_OBJECT **a, /* Validate parameters. */ if ((pp == NULL) || (*pp == NULL) || (len <= 0)) { WOLFSSL_MSG("Bad parameter"); - err = 1; + return NULL; } /* Create a new ASN.1 OBJECT_ID object. */ - if ((!err) && ((ret = wolfSSL_ASN1_OBJECT_new()) == NULL)) { + ret = wolfSSL_ASN1_OBJECT_new(); + if (ret == NULL) { WOLFSSL_MSG("wolfSSL_ASN1_OBJECT_new error"); - err = 1; + return NULL; } - if (!err) { - /* Allocate memory for content octets. */ - ret->obj = (const unsigned char*)XMALLOC((size_t)len, NULL, - DYNAMIC_TYPE_ASN1); - if (ret->obj == NULL) { - WOLFSSL_MSG("error allocating asn data memory"); - wolfSSL_ASN1_OBJECT_free(ret); - ret = NULL; - err = 1; - } + if (wolfssl_asn1_obj_set(ret, *pp, (word32)len, 1) != WOLFSSL_SUCCESS) { + WOLFSSL_MSG("wolfssl_asn1_obj_set error"); + wolfSSL_ASN1_OBJECT_free(ret); + return NULL; } - if (!err) { - /* Content octets buffer was dynamically allocated. */ - ret->dynamic |= WOLFSSL_ASN1_DYNAMIC_DATA; - /* Copy in content octets and set size. */ - XMEMCPY((byte*)ret->obj, *pp, (size_t)len); - ret->objSz = (unsigned int)len; - - /* Move pointer to after data copied out. */ - *pp += len; - /* Return ASN.1 OBJECT_ID object through a if required. */ - if (a != NULL) { - *a = ret; - } + /* Move pointer to after data copied out. */ + *pp += len; + /* Return ASN.1 OBJECT_ID object through a if required. */ + if (a != NULL) { + if (*a != NULL) + wolfSSL_ASN1_OBJECT_free(*a); + *a = ret; } return ret; @@ -1992,16 +2420,9 @@ void wolfSSL_sk_ASN1_OBJECT_pop_free(WOLF_STACK_OF(WOLFSSL_ASN1_OBJECT)* sk, int wolfSSL_sk_ASN1_OBJECT_push(WOLF_STACK_OF(WOLFSSL_ASN1_OBJECT)* sk, WOLFSSL_ASN1_OBJECT* obj) { - int ret = 0; - WOLFSSL_ENTER("wolfSSL_sk_ASN1_OBJECT_push"); - /* Push on when we have a stack and object to work with. */ - if ((sk != NULL) && (obj != NULL)) { - ret = wolfSSL_sk_push(sk, obj); - } - - return ret; + return wolfSSL_sk_push(sk, obj); } /* Pop off a WOLFSSL_ASN1_OBJECT from the stack. @@ -2318,7 +2739,7 @@ int wolfSSL_ASN1_STRING_to_UTF8(unsigned char **out, WOLFSSL_ASN1_STRING *asn1) } #endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */ -#if defined(OPENSSL_EXTRA) +#if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL) /* Encode ASN.1 STRING data as hex digits separated by colon. * @@ -2397,7 +2818,155 @@ char* wolfSSL_i2s_ASN1_STRING(WOLFSSL_v3_ext_method *method, return ret; } -#endif /* OPENSSL_EXTRA */ + +static int i2d_ASN1_STRING(WOLFSSL_ASN1_STRING* s, + unsigned char **pp, byte tag) +{ + int idx; + int len; + unsigned char* out; + + if (s == NULL || s->data == NULL || s->length == 0) + return -1; + + len = SetHeader(tag, s->length, NULL, 0) + s->length; + + if (pp == NULL) + return len; + + if (*pp == NULL) { + out = (unsigned char*)XMALLOC(len, NULL, DYNAMIC_TYPE_ASN1); + if (out == NULL) + return WOLFSSL_FATAL_ERROR; + } + else { + out = *pp; + } + + idx = (int)SetHeader(tag, s->length, out, 0); + XMEMCPY(out + idx, s->data, s->length); + if (*pp == NULL) + *pp = out; + else + *pp += len; + + return len; +} + +int wolfSSL_i2d_ASN1_GENERALSTRING(WOLFSSL_ASN1_STRING* s, unsigned char **pp) +{ + WOLFSSL_ENTER("wolfSSL_i2d_ASN1_GENERALSTRING"); + + return i2d_ASN1_STRING(s, pp, ASN_GENERALSTRING); +} + +int wolfSSL_i2d_ASN1_OCTET_STRING(WOLFSSL_ASN1_STRING* s, unsigned char **pp) +{ + WOLFSSL_ENTER("wolfSSL_i2d_ASN1_OCTET_STRING"); + + return i2d_ASN1_STRING(s, pp, ASN_OCTET_STRING); +} + +int wolfSSL_i2d_ASN1_UTF8STRING(WOLFSSL_ASN1_STRING* s, unsigned char **pp) +{ + WOLFSSL_ENTER("wolfSSL_i2d_ASN1_UTF8STRING"); + + return i2d_ASN1_STRING(s, pp, ASN_UTF8STRING); +} + +int wolfSSL_i2d_ASN1_SEQUENCE(WOLFSSL_ASN1_STRING* s, + unsigned char **pp) +{ + unsigned char* out; + + if (s == NULL || s->data == NULL || s->length == 0) + return -1; + + if (pp == NULL) + return s->length; + + if (*pp == NULL) { + out = (unsigned char*)XMALLOC(s->length, NULL, DYNAMIC_TYPE_ASN1); + if (out == NULL) + return WOLFSSL_FATAL_ERROR; + } + else { + out = *pp; + } + + XMEMCPY(out, s->data, s->length); + if (*pp == NULL) + *pp = out; + else + *pp += s->length; + + return s->length; +} + +static WOLFSSL_ASN1_STRING* d2i_ASN1_STRING(WOLFSSL_ASN1_STRING** out, + const byte** src, long len, byte expTag) +{ + WOLFSSL_ASN1_STRING* ret = NULL; + word32 idx = 0; + byte tag = 0; + int length = 0; + + WOLFSSL_ENTER("d2i_ASN1_GENERALSTRING"); + + if (src == NULL || *src == NULL || len == 0) + return NULL; + + if (GetASNTag(*src, &idx, &tag, (word32)len) < 0) + return NULL; + if (tag != expTag) + return NULL; + if (GetLength(*src, &idx, &length, (word32)len) < 0) + return NULL; + + ret = wolfSSL_ASN1_STRING_new(); + if (ret == NULL) + return NULL; + + if (wolfSSL_ASN1_STRING_set(ret, *src + idx, length) != 1) { + wolfSSL_ASN1_STRING_free(ret); + return NULL; + } + + if (out != NULL) { + if (*out != NULL) + wolfSSL_ASN1_STRING_free(*out); + *out = ret; + } + *src += idx + length; + + return ret; +} + +WOLFSSL_ASN1_STRING* wolfSSL_d2i_ASN1_GENERALSTRING(WOLFSSL_ASN1_STRING** out, + const byte** src, long len) +{ + WOLFSSL_ENTER("wolfSSL_d2i_ASN1_GENERALSTRING"); + + return d2i_ASN1_STRING(out, src, len, ASN_GENERALSTRING); +} + +WOLFSSL_ASN1_STRING* wolfSSL_d2i_ASN1_OCTET_STRING(WOLFSSL_ASN1_STRING** out, + const byte** src, long len) +{ + WOLFSSL_ENTER("wolfSSL_d2i_ASN1_OCTET_STRING"); + + return d2i_ASN1_STRING(out, src, len, ASN_OCTET_STRING); +} + +WOLFSSL_ASN1_STRING* wolfSSL_d2i_ASN1_UTF8STRING(WOLFSSL_ASN1_STRING** out, + const byte** src, long len) +{ + WOLFSSL_ENTER("wolfSSL_d2i_ASN1_UTF8STRING"); + + return d2i_ASN1_STRING(out, src, len, ASN_UTF8STRING); +} + +#endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */ #endif /* NO_ASN */ #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) @@ -2470,7 +3039,7 @@ unsigned char* wolfSSL_ASN1_STRING_data(WOLFSSL_ASN1_STRING* asn) * @return String length on success. * @return 0 when asn is NULL or no data set. */ -int wolfSSL_ASN1_STRING_length(WOLFSSL_ASN1_STRING* asn) +int wolfSSL_ASN1_STRING_length(const WOLFSSL_ASN1_STRING* asn) { int len = 0; @@ -3002,9 +3571,7 @@ int wolfSSL_ASN1_STRING_print_ex(WOLFSSL_BIO *bio, WOLFSSL_ASN1_STRING *str, void wolfSSL_ASN1_GENERALIZEDTIME_free(WOLFSSL_ASN1_TIME* asn1Time) { WOLFSSL_ENTER("wolfSSL_ASN1_GENERALIZEDTIME_free"); - if (asn1Time != NULL) { - XFREE(asn1Time, NULL, DYNAMIC_TYPE_OPENSSL); - } + XFREE(asn1Time, NULL, DYNAMIC_TYPE_OPENSSL); } #ifndef NO_BIO @@ -3419,7 +3986,7 @@ unsigned char* wolfSSL_ASN1_TIME_get_data(const WOLFSSL_ASN1_TIME *t) */ int wolfSSL_ASN1_TIME_check(const WOLFSSL_ASN1_TIME* a) { - int ret = 1; + int ret = WOLFSSL_SUCCESS; char buf[MAX_TIME_STRING_SZ]; WOLFSSL_ENTER("wolfSSL_ASN1_TIME_check"); @@ -3427,7 +3994,7 @@ int wolfSSL_ASN1_TIME_check(const WOLFSSL_ASN1_TIME* a) /* If can convert to human readable then format good. */ if (wolfSSL_ASN1_TIME_to_string((WOLFSSL_ASN1_TIME*)a, buf, MAX_TIME_STRING_SZ) == NULL) { - ret = 0; + ret = WOLFSSL_FAILURE; } return ret; @@ -3445,7 +4012,7 @@ int wolfSSL_ASN1_TIME_check(const WOLFSSL_ASN1_TIME* a) */ int wolfSSL_ASN1_TIME_set_string(WOLFSSL_ASN1_TIME *t, const char *str) { - int ret = 1; + int ret = WOLFSSL_SUCCESS; int slen = 0; WOLFSSL_ENTER("wolfSSL_ASN1_TIME_set_string"); @@ -3454,15 +4021,15 @@ int wolfSSL_ASN1_TIME_set_string(WOLFSSL_ASN1_TIME *t, const char *str) WOLFSSL_MSG("Bad parameter"); ret = 0; } - if (ret == 1) { + if (ret == WOLFSSL_SUCCESS) { /* Get length of string including NUL terminator. */ slen = (int)XSTRLEN(str) + 1; if (slen > CTC_DATE_SIZE) { WOLFSSL_MSG("Date string too long"); - ret = 0; + ret = WOLFSSL_FAILURE; } } - if ((ret == 1) && (t != NULL)) { + if ((ret == WOLFSSL_SUCCESS) && (t != NULL)) { /* Copy in string including NUL terminator. */ XMEMCPY(t->data, str, (size_t)slen); /* Do not include NUL terminator in length. */ @@ -3475,6 +4042,21 @@ int wolfSSL_ASN1_TIME_set_string(WOLFSSL_ASN1_TIME *t, const char *str) return ret; } +int wolfSSL_ASN1_TIME_set_string_X509(WOLFSSL_ASN1_TIME *t, const char *str) +{ + int ret = WOLFSSL_SUCCESS; + + WOLFSSL_ENTER("wolfSSL_ASN1_TIME_set_string_X509"); + + if (t == NULL) + ret = WOLFSSL_FAILURE; + if (ret == WOLFSSL_SUCCESS) + ret = wolfSSL_ASN1_TIME_set_string(t, str); + if (ret == WOLFSSL_SUCCESS) + ret = wolfSSL_ASN1_TIME_check(t); + return ret; +} + /* Convert ASN.1 TIME object to ASN.1 GENERALIZED TIME object. * * @param [in] t ASN.1 TIME object. @@ -3547,6 +4129,7 @@ WOLFSSL_ASN1_TIME* wolfSSL_ASN1_TIME_to_generalizedtime(WOLFSSL_ASN1_TIME *t, return ret; } +#if !defined(USER_TIME) && !defined(TIME_OVERRIDES) WOLFSSL_ASN1_TIME* wolfSSL_ASN1_UTCTIME_set(WOLFSSL_ASN1_TIME *s, time_t t) { WOLFSSL_ASN1_TIME* ret = s; @@ -3572,7 +4155,7 @@ WOLFSSL_ASN1_TIME* wolfSSL_ASN1_UTCTIME_set(WOLFSSL_ASN1_TIME *s, time_t t) return ret; } - +#endif /* !USER_TIME && !TIME_OVERRIDES */ #endif /* OPENSSL_EXTRA */ #if defined(WOLFSSL_MYSQL_COMPATIBLE) || defined(OPENSSL_EXTRA) @@ -4006,6 +4589,7 @@ static void wolfssl_asn1_type_free_value(WOLFSSL_ASN1_TYPE* at) #endif break; case V_ASN1_UTF8STRING: + case V_ASN1_OCTET_STRING: case V_ASN1_PRINTABLESTRING: case V_ASN1_T61STRING: case V_ASN1_IA5STRING: @@ -4033,6 +4617,41 @@ void wolfSSL_ASN1_TYPE_free(WOLFSSL_ASN1_TYPE* at) XFREE(at, NULL, DYNAMIC_TYPE_OPENSSL); } +int wolfSSL_i2d_ASN1_TYPE(WOLFSSL_ASN1_TYPE* at, unsigned char** pp) +{ + int ret = WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR); + + if (at == NULL) + return WOLFSSL_FATAL_ERROR; + + switch (at->type) { + case V_ASN1_NULL: + break; + case V_ASN1_OBJECT: + ret = wolfSSL_i2d_ASN1_OBJECT(at->value.object, pp); + break; + case V_ASN1_UTF8STRING: + ret = wolfSSL_i2d_ASN1_UTF8STRING(at->value.utf8string, pp); + break; + case V_ASN1_GENERALIZEDTIME: + ret = wolfSSL_i2d_ASN1_GENERALSTRING(at->value.utf8string, pp); + break; + case V_ASN1_SEQUENCE: + ret = wolfSSL_i2d_ASN1_SEQUENCE(at->value.sequence, pp); + break; + case V_ASN1_UTCTIME: + case V_ASN1_PRINTABLESTRING: + case V_ASN1_T61STRING: + case V_ASN1_IA5STRING: + case V_ASN1_UNIVERSALSTRING: + default: + WOLFSSL_MSG("asn1 i2d type not supported"); + break; + } + + return ret; +} + #endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */ #if defined(OPENSSL_ALL) || defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS) || \ @@ -4070,6 +4689,7 @@ void wolfSSL_ASN1_TYPE_set(WOLFSSL_ASN1_TYPE *a, int type, void *value) case V_ASN1_UTCTIME: case V_ASN1_GENERALIZEDTIME: case V_ASN1_UTF8STRING: + case V_ASN1_OCTET_STRING: case V_ASN1_PRINTABLESTRING: case V_ASN1_T61STRING: case V_ASN1_IA5STRING: @@ -4089,6 +4709,14 @@ void wolfSSL_ASN1_TYPE_set(WOLFSSL_ASN1_TYPE *a, int type, void *value) } } +int wolfSSL_ASN1_TYPE_get(const WOLFSSL_ASN1_TYPE *a) +{ + if (a != NULL && (a->type == V_ASN1_BOOLEAN || a->type == V_ASN1_NULL + || a->value.ptr != NULL)) + return a->type; + return 0; +} + #endif /* OPENSSL_ALL || OPENSSL_EXTRA || WOLFSSL_WPAS */ #endif /* !NO_ASN */ diff --git a/src/ssl_bn.c b/src/ssl_bn.c index d4ecee4f22..acd0e05ea5 100644 --- a/src/ssl_bn.c +++ b/src/ssl_bn.c @@ -492,7 +492,7 @@ WOLFSSL_BIGNUM* wolfSSL_BN_bin2bn(const unsigned char* data, int len, WOLFSSL_ENTER("wolfSSL_BN_bin2bn"); /* Validate parameters. */ - if ((data == NULL) || (len < 0)) { + if (len < 0) { ret = NULL; } /* Allocate a new big number when ret is NULL. */ @@ -507,7 +507,7 @@ WOLFSSL_BIGNUM* wolfSSL_BN_bin2bn(const unsigned char* data, int len, if (ret->internal == NULL) { ret = NULL; } - else { + else if (data != NULL) { /* Decode into big number. */ if (mp_read_unsigned_bin((mp_int*)ret->internal, data, (word32)len) != 0) { @@ -520,6 +520,9 @@ WOLFSSL_BIGNUM* wolfSSL_BN_bin2bn(const unsigned char* data, int len, bn = NULL; } } + else if (data == NULL) { + wolfSSL_BN_zero(ret); + } } /* Dispose of allocated BN not being returned. */ diff --git a/src/ssl_certman.c b/src/ssl_certman.c index f9d87450ec..09f2607ee2 100644 --- a/src/ssl_certman.c +++ b/src/ssl_certman.c @@ -398,7 +398,7 @@ WOLFSSL_STACK* wolfSSL_CertManagerGetCerts(WOLFSSL_CERT_MANAGER* cm) } /* Decode certificate. */ - if ((!err) && (wolfSSL_sk_X509_push(sk, x509) != WOLFSSL_SUCCESS)) { + if ((!err) && (wolfSSL_sk_X509_push(sk, x509) <= 0)) { wolfSSL_X509_free(x509); err = 1; } @@ -1382,9 +1382,7 @@ int CM_SaveCertCache(WOLFSSL_CERT_MANAGER* cm, const char* fname) ret = FWRITE_ERROR; } } - if (mem != NULL) { - XFREE(mem, cm->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(mem, cm->heap, DYNAMIC_TYPE_TMP_BUFFER); /* Unlock CA table. */ wc_UnLockMutex(&cm->caLock); diff --git a/src/ssl_crypto.c b/src/ssl_crypto.c index 296e74a14f..b529708fe8 100644 --- a/src/ssl_crypto.c +++ b/src/ssl_crypto.c @@ -45,8 +45,7 @@ void wolfSSL_MD4_Init(WOLFSSL_MD4_CTX* md4) { /* Ensure WOLFSSL_MD4_CTX is big enough for wolfCrypt Md4. */ - typedef char ok[sizeof(md4->buffer) >= sizeof(Md4) ? 1 : -1]; - (void)sizeof(ok); + WOLFSSL_ASSERT_SIZEOF_GE(md4->buffer, Md4); WOLFSSL_ENTER("MD4_Init"); @@ -97,8 +96,7 @@ void wolfSSL_MD4_Final(unsigned char* digest, WOLFSSL_MD4_CTX* md4) int wolfSSL_MD5_Init(WOLFSSL_MD5_CTX* md5) { /* Ensure WOLFSSL_MD5_CTX is big enough for wolfCrypt wc_Md5. */ - typedef char md5_test[sizeof(WOLFSSL_MD5_CTX) >= sizeof(wc_Md5) ? 1 : -1]; - (void)sizeof(md5_test); + WOLFSSL_ASSERT_SIZEOF_GE(WOLFSSL_MD5_CTX, wc_Md5); WOLFSSL_ENTER("MD5_Init"); @@ -212,8 +210,7 @@ unsigned char* wolfSSL_MD5(const unsigned char* data, size_t len, int wolfSSL_SHA_Init(WOLFSSL_SHA_CTX* sha) { /* Ensure WOLFSSL_SHA_CTX is big enough for wolfCrypt wc_Sha. */ - typedef char sha_test[sizeof(WOLFSSL_SHA_CTX) >= sizeof(wc_Sha) ? 1 : -1]; - (void)sizeof(sha_test); + WOLFSSL_ASSERT_SIZEOF_GE(WOLFSSL_SHA_CTX, wc_Sha); WOLFSSL_ENTER("SHA_Init"); @@ -362,8 +359,7 @@ int wolfSSL_SHA1_Transform(WOLFSSL_SHA_CTX* sha, const unsigned char* data) int wolfSSL_SHA224_Init(WOLFSSL_SHA224_CTX* sha224) { /* Ensure WOLFSSL_SHA224_CTX is big enough for wolfCrypt wc_Sha224. */ - typedef char sha_test[sizeof(SHA224_CTX) >= sizeof(wc_Sha224) ? 1 : -1]; - (void)sizeof(sha_test); + WOLFSSL_ASSERT_SIZEOF_GE(SHA224_CTX, wc_Sha224); WOLFSSL_ENTER("SHA224_Init"); @@ -422,8 +418,7 @@ int wolfSSL_SHA224_Final(byte* output, WOLFSSL_SHA224_CTX* sha224) int wolfSSL_SHA256_Init(WOLFSSL_SHA256_CTX* sha256) { /* Ensure WOLFSSL_SHA256_CTX is big enough for wolfCrypt wc_Sha256. */ - typedef char sha_test[sizeof(SHA256_CTX) >= sizeof(wc_Sha256) ? 1 : -1]; - (void)sizeof(sha_test); + WOLFSSL_ASSERT_SIZEOF_GE(SHA256_CTX, wc_Sha256); WOLFSSL_ENTER("SHA256_Init"); @@ -512,8 +507,7 @@ int wolfSSL_SHA256_Transform(WOLFSSL_SHA256_CTX* sha256, int wolfSSL_SHA384_Init(WOLFSSL_SHA384_CTX* sha384) { /* Ensure WOLFSSL_SHA384_CTX is big enough for wolfCrypt wc_Sha384. */ - typedef char sha_test[sizeof(SHA384_CTX) >= sizeof(wc_Sha384) ? 1 : -1]; - (void)sizeof(sha_test); + WOLFSSL_ASSERT_SIZEOF_GE(SHA384_CTX, wc_Sha384); WOLFSSL_ENTER("SHA384_Init"); @@ -572,8 +566,7 @@ int wolfSSL_SHA384_Final(byte* output, WOLFSSL_SHA384_CTX* sha384) int wolfSSL_SHA512_Init(WOLFSSL_SHA512_CTX* sha512) { /* Ensure WOLFSSL_SHA512_CTX is big enough for wolfCrypt wc_Sha512. */ - typedef char sha_test[sizeof(SHA512_CTX) >= sizeof(wc_Sha512) ? 1 : -1]; - (void)sizeof(sha_test); + WOLFSSL_ASSERT_SIZEOF_GE(SHA512_CTX, wc_Sha512); WOLFSSL_ENTER("SHA512_Init"); @@ -809,8 +802,7 @@ int wolfSSL_SHA512_256_Transform(WOLFSSL_SHA512_CTX* sha512, int wolfSSL_SHA3_224_Init(WOLFSSL_SHA3_224_CTX* sha3_224) { /* Ensure WOLFSSL_SHA3_224_CTX is big enough for wolfCrypt wc_Sha3. */ - typedef char sha_test[sizeof(SHA3_224_CTX) >= sizeof(wc_Sha3) ? 1 : -1]; - (void)sizeof(sha_test); + WOLFSSL_ASSERT_SIZEOF_GE(SHA3_224_CTX, wc_Sha3); WOLFSSL_ENTER("SHA3_224_Init"); @@ -869,8 +861,7 @@ int wolfSSL_SHA3_224_Final(byte* output, WOLFSSL_SHA3_224_CTX* sha3) int wolfSSL_SHA3_256_Init(WOLFSSL_SHA3_256_CTX* sha3_256) { /* Ensure WOLFSSL_SHA3_256_CTX is big enough for wolfCrypt wc_Sha3. */ - typedef char sha_test[sizeof(SHA3_256_CTX) >= sizeof(wc_Sha3) ? 1 : -1]; - (void)sizeof(sha_test); + WOLFSSL_ASSERT_SIZEOF_GE(SHA3_256_CTX, wc_Sha3); WOLFSSL_ENTER("SHA3_256_Init"); @@ -929,8 +920,7 @@ int wolfSSL_SHA3_256_Final(byte* output, WOLFSSL_SHA3_256_CTX* sha3) int wolfSSL_SHA3_384_Init(WOLFSSL_SHA3_384_CTX* sha3_384) { /* Ensure WOLFSSL_SHA3_384_CTX is big enough for wolfCrypt wc_Sha3. */ - typedef char sha_test[sizeof(SHA3_384_CTX) >= sizeof(wc_Sha3) ? 1 : -1]; - (void)sizeof(sha_test); + WOLFSSL_ASSERT_SIZEOF_GE(SHA3_384_CTX, wc_Sha3); WOLFSSL_ENTER("SHA3_384_Init"); @@ -989,8 +979,7 @@ int wolfSSL_SHA3_384_Final(byte* output, WOLFSSL_SHA3_384_CTX* sha3) int wolfSSL_SHA3_512_Init(WOLFSSL_SHA3_512_CTX* sha3_512) { /* Ensure WOLFSSL_SHA3_512_CTX is big enough for wolfCrypt wc_Sha3. */ - typedef char sha_test[sizeof(SHA3_512_CTX) >= sizeof(wc_Sha3) ? 1 : -1]; - (void)sizeof(sha_test); + WOLFSSL_ASSERT_SIZEOF_GE(SHA3_512_CTX, wc_Sha3); WOLFSSL_ENTER("SHA3_512_Init"); diff --git a/src/ssl_load.c b/src/ssl_load.c index da4279e39e..31e47bb3da 100644 --- a/src/ssl_load.c +++ b/src/ssl_load.c @@ -913,7 +913,7 @@ static int ProcessBufferTryDecodeFalcon(WOLFSSL_CTX* ctx, WOLFSSL* ssl, /* Free dynamically allocated data in key. */ wc_falcon_free(key); } - else if ((ret == ALGO_ID_E) && (*keyFormat == 0)) { + else if ((ret == WC_NO_ERR_TRACE(ALGO_ID_E)) && (*keyFormat == 0)) { WOLFSSL_MSG("Not a Falcon key"); /* Format unknown so keep trying. */ ret = 0; @@ -1021,7 +1021,7 @@ static int ProcessBufferTryDecodeDilithium(WOLFSSL_CTX* ctx, WOLFSSL* ssl, /* Free dynamically allocated data in key. */ wc_dilithium_free(key); } - else if ((ret == ALGO_ID_E) && (*keyFormat == 0)) { + else if ((ret == WC_NO_ERR_TRACE(ALGO_ID_E)) && (*keyFormat == 0)) { WOLFSSL_MSG("Not a Dilithium key"); /* Format unknown so keep trying. */ ret = 0; @@ -1560,7 +1560,9 @@ static void ProcessBufferCertSetHave(WOLFSSL_CTX* ctx, WOLFSSL* ssl, } #endif #ifndef WC_STRICT_SIG - wolfssl_set_have_from_key_oid(ctx, ssl, cert->keyOID); + if ((ctx != NULL) || (ssl != NULL)) { + wolfssl_set_have_from_key_oid(ctx, ssl, cert->keyOID); + } #else /* Set whether ECC is available based on signature available. */ if (ssl != NULL) { @@ -2367,7 +2369,7 @@ int ProcessBuffer(WOLFSSL_CTX* ctx, const unsigned char* buff, long sz, if (ret == 0) { ret = 1; } - else if (ret == WOLFSSL_FATAL_ERROR) { + else if (ret == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) { ret = 0; } WOLFSSL_LEAVE("ProcessBuffer", ret); @@ -4809,7 +4811,8 @@ int wolfSSL_CTX_add1_chain_cert(WOLFSSL_CTX* ctx, WOLFSSL_X509* x509) } if (ret == 1) { /* Push the X509 object onto stack. */ - ret = wolfSSL_sk_X509_push(ctx->x509Chain, x509); + ret = wolfSSL_sk_X509_push(ctx->x509Chain, x509) > 0 + ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE; } if (ret != 1) { @@ -4873,7 +4876,8 @@ int wolfSSL_add0_chain_cert(WOLFSSL* ssl, WOLFSSL_X509* x509) } if (ret == 1) { /* Push X509 object onto stack to be freed. */ - ret = wolfSSL_sk_X509_push(ssl->ourCertChain, x509); + ret = wolfSSL_sk_X509_push(ssl->ourCertChain, x509) > 0 + ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE; if (ret != 1) { /* Free it now on error. */ wolfSSL_X509_free(x509); @@ -5139,7 +5143,7 @@ int wolfSSL_CTX_set_default_verify_paths(WOLFSSL_CTX* ctx) #elif defined(WOLFSSL_SYS_CA_CERTS) /* Load the system CA certificates. */ ret = wolfSSL_CTX_load_system_CA_certs(ctx); - if (ret == WOLFSSL_BAD_PATH) { + if (ret == WC_NO_ERR_TRACE(WOLFSSL_BAD_PATH)) { /* OpenSSL doesn't treat the lack of a system CA cert directory as a * failure. We do the same here. */ diff --git a/src/ssl_misc.c b/src/ssl_misc.c index 38fa511467..9a5f4b042a 100644 --- a/src/ssl_misc.c +++ b/src/ssl_misc.c @@ -165,7 +165,15 @@ static int wolfssl_read_bio(WOLFSSL_BIO* bio, char** data, int* dataSz, if (bio->type == WOLFSSL_BIO_MEMORY) { ret = wolfSSL_BIO_get_mem_data(bio, data); if (ret > 0) { - bio->rdIdx += ret; + /* Advance the write index in the memory bio */ + WOLFSSL_BIO* mem_bio = bio; + for (; mem_bio != NULL; mem_bio = mem_bio->next) { + if (mem_bio->type == WOLFSSL_BIO_MEMORY) + break; + } + if (mem_bio == NULL) + mem_bio = bio; /* Default to input */ + mem_bio->rdIdx += ret; } *memAlloced = 0; } diff --git a/src/ssl_p7p12.c b/src/ssl_p7p12.c index 11b6c40a9a..d2f35b0226 100644 --- a/src/ssl_p7p12.c +++ b/src/ssl_p7p12.c @@ -94,8 +94,7 @@ void wolfSSL_PKCS7_free(PKCS7* pkcs7) WOLFSSL_PKCS7* p7 = (WOLFSSL_PKCS7*)pkcs7; if (p7 != NULL) { - if (p7->data != NULL) - XFREE(p7->data, NULL, DYNAMIC_TYPE_PKCS7); + XFREE(p7->data, NULL, DYNAMIC_TYPE_PKCS7); wc_PKCS7_Free(&p7->pkcs7); if (p7->certs) wolfSSL_sk_pop_free(p7->certs, NULL); @@ -230,7 +229,7 @@ WOLFSSL_STACK* wolfSSL_PKCS7_to_stack(PKCS7* pkcs7) if (!ret) ret = wolfSSL_sk_X509_new_null(); if (x509) { - if (wolfSSL_sk_X509_push(ret, x509) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_X509_push(ret, x509) <= 0) { wolfSSL_X509_free(x509); WOLFSSL_MSG("wolfSSL_sk_X509_push error"); goto error; @@ -295,7 +294,7 @@ WOLFSSL_STACK* wolfSSL_PKCS7_get0_signers(PKCS7* pkcs7, WOLFSSL_STACK* certs, return NULL; } - if (wolfSSL_sk_X509_push(signers, x509) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_X509_push(signers, x509) <= 0) { wolfSSL_sk_X509_pop_free(signers, NULL); return NULL; } @@ -352,7 +351,7 @@ int wolfSSL_i2d_PKCS7(PKCS7 *p7, unsigned char **out) int localBuf = 0; int len; WC_RNG rng; - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_ENTER("wolfSSL_i2d_PKCS7"); if (!out || !p7) { @@ -397,9 +396,9 @@ int wolfSSL_i2d_PKCS7(PKCS7 *p7, unsigned char **out) wc_FreeRng(&rng); p7->rng = NULL; } - if (ret == WOLFSSL_FAILURE && localBuf && output) + if (ret == WC_NO_ERR_TRACE(WOLFSSL_FAILURE) && localBuf) XFREE(output, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (ret != WOLFSSL_FAILURE) + if (ret != WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) *out = output; return ret; } @@ -408,7 +407,7 @@ int wolfSSL_i2d_PKCS7_bio(WOLFSSL_BIO *bio, PKCS7 *p7) { byte* output = NULL; int len; - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_ENTER("wolfSSL_i2d_PKCS7_bio"); if (!bio || !p7) { @@ -416,7 +415,9 @@ int wolfSSL_i2d_PKCS7_bio(WOLFSSL_BIO *bio, PKCS7 *p7) return WOLFSSL_FAILURE; } - if ((len = wolfSSL_i2d_PKCS7(p7, &output)) == WOLFSSL_FAILURE) { + if ((len = wolfSSL_i2d_PKCS7(p7, &output)) == + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) + { WOLFSSL_MSG("wolfSSL_i2d_PKCS7 error"); goto cleanup; } @@ -428,8 +429,7 @@ int wolfSSL_i2d_PKCS7_bio(WOLFSSL_BIO *bio, PKCS7 *p7) ret = WOLFSSL_SUCCESS; cleanup: - if (output) - XFREE(output, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(output, NULL, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -627,9 +627,7 @@ static int wolfSSL_BIO_to_MIME_crlf(WOLFSSL_BIO* in, WOLFSSL_BIO* out) } } - if (canonLine != NULL) { - XFREE(canonLine, NULL, DYNAMIC_TYPE_PKCS7); - } + XFREE(canonLine, NULL, DYNAMIC_TYPE_PKCS7); #ifdef WOLFSSL_SMALL_STACK XFREE(line, in->heap, DYNAMIC_TYPE_TMP_BUFFER); #endif @@ -718,9 +716,7 @@ int wolfSSL_PKCS7_final(PKCS7* pkcs7, WOLFSSL_BIO* in, int flags) } } - if (mem != NULL) { - XFREE(mem, in->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(mem, in->heap, DYNAMIC_TYPE_TMP_BUFFER); } else { #ifdef HAVE_SMIME @@ -746,9 +742,7 @@ int wolfSSL_PKCS7_final(PKCS7* pkcs7, WOLFSSL_BIO* in, int flags) } if (ret == 1) { - if (p7->data != NULL) { - XFREE(p7->data, NULL, DYNAMIC_TYPE_PKCS7); - } + XFREE(p7->data, NULL, DYNAMIC_TYPE_PKCS7); p7->data = (byte*)XMALLOC(memSz, NULL, DYNAMIC_TYPE_PKCS7); if (p7->data == NULL) { ret = 0; @@ -1040,19 +1034,11 @@ int wolfSSL_PEM_write_bio_PKCS7(WOLFSSL_BIO* bio, PKCS7* p7) error: #ifdef WOLFSSL_SMALL_STACK - if (outputHead) { - XFREE(outputHead, bio->heap, DYNAMIC_TYPE_TMP_BUFFER); - } - if (outputFoot) { - XFREE(outputFoot, bio->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(outputHead, bio->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(outputFoot, bio->heap, DYNAMIC_TYPE_TMP_BUFFER); #endif - if (output) { - XFREE(output, bio->heap, DYNAMIC_TYPE_TMP_BUFFER); - } - if (pem) { - XFREE(pem, bio->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(output, bio->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(pem, bio->heap, DYNAMIC_TYPE_TMP_BUFFER); return WOLFSSL_FAILURE; } @@ -1168,7 +1154,8 @@ PKCS7* wolfSSL_SMIME_read_PKCS7(WOLFSSL_BIO* in, } XMEMSET(boundary, 0, (word32)(boundLen+1)); boundary[0] = boundary[1] = '-'; - XSTRNCPY(&boundary[2], curParam->value, boundLen-2); + /* analyzers have issues with using strncpy and strcpy here */ + XMEMCPY(&boundary[2], curParam->value, boundLen - 2); /* Parse up to first boundary, ignore everything here. */ lineLen = wolfSSL_BIO_gets(in, section, remainLen); @@ -1387,10 +1374,8 @@ PKCS7* wolfSSL_SMIME_read_PKCS7(WOLFSSL_BIO* in, XFREE(boundary, NULL, DYNAMIC_TYPE_PKCS7); XFREE(outHead, NULL, DYNAMIC_TYPE_PKCS7); XFREE(section, NULL, DYNAMIC_TYPE_PKCS7); - if (canonSection != NULL) - XFREE(canonSection, NULL, DYNAMIC_TYPE_PKCS7); - if (canonLine != NULL) - XFREE(canonLine, NULL, DYNAMIC_TYPE_PKCS7); + XFREE(canonSection, NULL, DYNAMIC_TYPE_PKCS7); + XFREE(canonLine, NULL, DYNAMIC_TYPE_PKCS7); if (bcont) { wolfSSL_BIO_free(*bcont); *bcont = NULL; /* reset 'bcount' pointer to NULL on failure */ @@ -1491,7 +1476,9 @@ int wolfSSL_SMIME_write_PKCS7(WOLFSSL_BIO* out, PKCS7* pkcs7, WOLFSSL_BIO* in, if (ret > 0) { /* Generate signedData bundle, DER in output (dynamic) */ - if ((len = wolfSSL_i2d_PKCS7((PKCS7*)p7, &p7out)) == WOLFSSL_FAILURE) { + if ((len = wolfSSL_i2d_PKCS7((PKCS7*)p7, &p7out)) == + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) + { WOLFSSL_MSG("Error in wolfSSL_i2d_PKCS7"); ret = 0; } @@ -1607,12 +1594,8 @@ int wolfSSL_SMIME_write_PKCS7(WOLFSSL_BIO* out, PKCS7* pkcs7, WOLFSSL_BIO* in, } } - if (p7out != NULL) { - XFREE(p7out, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (sigBase64 != NULL) { - XFREE(sigBase64, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(p7out, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(sigBase64, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (ret > 0) { return WOLFSSL_SUCCESS; @@ -1704,8 +1687,7 @@ WC_PKCS12* wolfSSL_d2i_PKCS12_bio(WOLFSSL_BIO* bio, WC_PKCS12** pkcs12) } /* cleanup */ - if (mem != NULL) - XFREE(mem, bio->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(mem, bio->heap, DYNAMIC_TYPE_TMP_BUFFER); if (ret < 0 && localPkcs12 != NULL) { wc_PKCS12_free(localPkcs12); localPkcs12 = NULL; @@ -1725,7 +1707,7 @@ WC_PKCS12* wolfSSL_d2i_PKCS12_bio(WOLFSSL_BIO* bio, WC_PKCS12** pkcs12) */ int wolfSSL_i2d_PKCS12_bio(WOLFSSL_BIO *bio, WC_PKCS12 *pkcs12) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_ENTER("wolfSSL_i2d_PKCS12_bio"); @@ -1740,9 +1722,7 @@ int wolfSSL_i2d_PKCS12_bio(WOLFSSL_BIO *bio, WC_PKCS12 *pkcs12) } } - if (certDer != NULL) { - XFREE(certDer, NULL, DYNAMIC_TYPE_PKCS); - } + XFREE(certDer, NULL, DYNAMIC_TYPE_PKCS); } return ret; @@ -1904,12 +1884,8 @@ int wolfSSL_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw, *ca = (WOLF_STACK_OF(WOLFSSL_X509)*)XMALLOC( sizeof(WOLF_STACK_OF(WOLFSSL_X509)), heap, DYNAMIC_TYPE_X509); if (*ca == NULL) { - if (pk != NULL) { - XFREE(pk, heap, DYNAMIC_TYPE_PUBLIC_KEY); - } - if (certData != NULL) { - XFREE(certData, heap, DYNAMIC_TYPE_PKCS); - } + XFREE(pk, heap, DYNAMIC_TYPE_PUBLIC_KEY); + XFREE(certData, heap, DYNAMIC_TYPE_PKCS); /* Free up WC_DerCertList and move on */ while (current != NULL) { WC_DerCertList* next = current->next; @@ -1943,12 +1919,8 @@ int wolfSSL_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw, FreeDecodedCert(DeCert); wolfSSL_X509_free(x509); wolfSSL_sk_X509_pop_free(*ca, NULL); *ca = NULL; - if (pk != NULL) { - XFREE(pk, heap, DYNAMIC_TYPE_PUBLIC_KEY); - } - if (certData != NULL) { - XFREE(certData, heap, DYNAMIC_TYPE_PKCS); - } + XFREE(pk, heap, DYNAMIC_TYPE_PUBLIC_KEY); + XFREE(certData, heap, DYNAMIC_TYPE_PKCS); /* Free up WC_DerCertList */ while (current != NULL) { WC_DerCertList* next = current->next; @@ -1962,16 +1934,12 @@ int wolfSSL_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw, } FreeDecodedCert(DeCert); - if (wolfSSL_sk_X509_push(*ca, x509) != 1) { + if (wolfSSL_sk_X509_push(*ca, x509) <= 0) { WOLFSSL_MSG("Failed to push x509 onto stack"); wolfSSL_X509_free(x509); wolfSSL_sk_X509_pop_free(*ca, NULL); *ca = NULL; - if (pk != NULL) { - XFREE(pk, heap, DYNAMIC_TYPE_PUBLIC_KEY); - } - if (certData != NULL) { - XFREE(certData, heap, DYNAMIC_TYPE_PKCS); - } + XFREE(pk, heap, DYNAMIC_TYPE_PUBLIC_KEY); + XFREE(certData, heap, DYNAMIC_TYPE_PKCS); /* Free up WC_DerCertList */ while (current != NULL) { @@ -1997,9 +1965,7 @@ int wolfSSL_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw, *cert = (WOLFSSL_X509*)XMALLOC(sizeof(WOLFSSL_X509), heap, DYNAMIC_TYPE_X509); if (*cert == NULL) { - if (pk != NULL) { - XFREE(pk, heap, DYNAMIC_TYPE_PUBLIC_KEY); - } + XFREE(pk, heap, DYNAMIC_TYPE_PUBLIC_KEY); if (ca != NULL) { wolfSSL_sk_X509_pop_free(*ca, NULL); *ca = NULL; } @@ -2015,9 +1981,7 @@ int wolfSSL_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw, if (CopyDecodedToX509(*cert, DeCert) != 0) { WOLFSSL_MSG("Failed to copy decoded cert"); FreeDecodedCert(DeCert); - if (pk != NULL) { - XFREE(pk, heap, DYNAMIC_TYPE_PUBLIC_KEY); - } + XFREE(pk, heap, DYNAMIC_TYPE_PUBLIC_KEY); if (ca != NULL) { wolfSSL_sk_X509_pop_free(*ca, NULL); *ca = NULL; } @@ -2064,8 +2028,7 @@ int wolfSSL_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw, } } #endif /* HAVE_ECC */ - if (pk != NULL) - XFREE(pk, heap, DYNAMIC_TYPE_PKCS); + XFREE(pk, heap, DYNAMIC_TYPE_PKCS); if (ret != 0) { /* if is in fail state and no PKEY then fail */ wolfSSL_X509_free(*cert); *cert = NULL; if (ca != NULL) { diff --git a/src/ssl_sess.c b/src/ssl_sess.c index 90b09b7363..b11925eab0 100644 --- a/src/ssl_sess.c +++ b/src/ssl_sess.c @@ -1309,8 +1309,7 @@ int wolfSSL_GetSessionFromCache(WOLFSSL* ssl, WOLFSSL_SESSION* output) output->ticketLenAlloc = 0; } #ifdef WOLFSSL_SMALL_STACK - if (tmpTicket != NULL) - XFREE(tmpTicket, output->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(tmpTicket, output->heap, DYNAMIC_TYPE_TMP_BUFFER); #endif return WOLFSSL_FAILURE; } @@ -1330,16 +1329,12 @@ int wolfSSL_GetSessionFromCache(WOLFSSL* ssl, WOLFSSL_SESSION* output) output->ticketLenAlloc = 0; } #ifdef WOLFSSL_TLS13 - if (preallocNonce != NULL) { - XFREE(preallocNonce, output->heap, DYNAMIC_TYPE_SESSION_TICK); - preallocNonce = NULL; - } + XFREE(preallocNonce, output->heap, DYNAMIC_TYPE_SESSION_TICK); + preallocNonce = NULL; #endif /* WOLFSSL_TLS13 */ #ifdef WOLFSSL_SMALL_STACK - if (tmpTicket != NULL) { - XFREE(tmpTicket, output->heap, DYNAMIC_TYPE_TMP_BUFFER); - tmpTicket = NULL; - } + XFREE(tmpTicket, output->heap, DYNAMIC_TYPE_TMP_BUFFER); + tmpTicket = NULL; #endif #endif } @@ -1417,8 +1412,7 @@ int wolfSSL_GetSessionFromCache(WOLFSSL* ssl, WOLFSSL_SESSION* output) } } #ifdef WOLFSSL_SMALL_STACK - if (tmpTicket != NULL) - XFREE(tmpTicket, output->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(tmpTicket, output->heap, DYNAMIC_TYPE_TMP_BUFFER); #endif #if defined(WOLFSSL_TLS13) && defined(WOLFSSL_TICKET_NONCE_MALLOC) && \ @@ -1455,8 +1449,7 @@ int wolfSSL_GetSessionFromCache(WOLFSSL* ssl, WOLFSSL_SESSION* output) preallocNonce = NULL; } } - if (preallocNonce != NULL) - XFREE(preallocNonce, output->heap, DYNAMIC_TYPE_SESSION_TICK); + XFREE(preallocNonce, output->heap, DYNAMIC_TYPE_SESSION_TICK); #endif /* WOLFSSL_TLS13 && WOLFSSL_TICKET_NONCE_MALLOC && FIPS_VERSION_GE(5,3)*/ #endif @@ -1718,12 +1711,12 @@ WOLFSSL_SESSION* ClientSessionToSession(const WOLFSSL_SESSION* session) WOLFSSL_MSG("Client cache serverRow or serverIdx invalid"); error = -1; } - /* Prevent memory access before clientSession->serverRow and - * clientSession->serverIdx are sanitized. */ - XFENCE(); if (error == 0) { /* Lock row */ sessRow = &SessionCache[clientSession->serverRow]; + /* Prevent memory access before clientSession->serverRow and + * clientSession->serverIdx are sanitized. */ + XFENCE(); error = SESSION_ROW_RD_LOCK(sessRow); if (error != 0) { WOLFSSL_MSG("Session cache row lock failure"); @@ -1736,6 +1729,8 @@ WOLFSSL_SESSION* ClientSessionToSession(const WOLFSSL_SESSION* session) #else cacheSession = &sessRow->Sessions[clientSession->serverIdx]; #endif + /* Prevent memory access */ + XFENCE(); if (cacheSession && cacheSession->sessionIDSz == 0) { cacheSession = NULL; WOLFSSL_MSG("Session cache entry not set"); @@ -1839,8 +1834,7 @@ int AddSessionToCache(WOLFSSL_CTX* ctx, WOLFSSL_SESSION* addSession, preallocNonce = (byte*)XMALLOC(addSession->ticketNonce.len, addSession->heap, DYNAMIC_TYPE_SESSION_TICK); if (preallocNonce == NULL) { - if (ticBuff != NULL) - XFREE(ticBuff, addSession->heap, DYNAMIC_TYPE_SESSION_TICK); + XFREE(ticBuff, addSession->heap, DYNAMIC_TYPE_SESSION_TICK); return MEMORY_E; } preallocNonceLen = addSession->ticketNonce.len; @@ -1994,10 +1988,12 @@ int AddSessionToCache(WOLFSSL_CTX* ctx, WOLFSSL_SESSION* addSession, #if defined(HAVE_SESSION_TICKET) && defined(WOLFSSL_TLS13) && \ defined(WOLFSSL_TICKET_NONCE_MALLOC) && \ (!defined(HAVE_FIPS) || (defined(FIPS_VERSION_GE) && FIPS_VERSION_GE(5,3))) - ret = wolfSSL_DupSessionEx(addSession, cacheSession, 1, preallocNonce, - &preallocNonceLen, &preallocNonceUsed) == WOLFSSL_FAILURE; + ret = (wolfSSL_DupSessionEx(addSession, cacheSession, 1, preallocNonce, + &preallocNonceLen, &preallocNonceUsed) + == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #else - ret = wolfSSL_DupSession(addSession, cacheSession, 1) == WOLFSSL_FAILURE; + ret = (wolfSSL_DupSession(addSession, cacheSession, 1) + == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif /* HAVE_SESSION_TICKET && WOLFSSL_TLS13 && WOLFSSL_TICKET_NONCE_MALLOC && FIPS_VERSION_GE(5,3)*/ #if defined(SESSION_CERTS) && defined(OPENSSL_EXTRA) @@ -3906,8 +3902,7 @@ static int wolfSSL_DupSessionEx(const WOLFSSL_SESSION* input, } } else { - if (ticBuff != NULL) - XFREE(ticBuff, output->heap, DYNAMIC_TYPE_SESSION_TICK); + XFREE(ticBuff, output->heap, DYNAMIC_TYPE_SESSION_TICK); output->ticket = output->staticTicket; output->ticketLenAlloc = 0; } @@ -4237,7 +4232,7 @@ const byte* wolfSSL_get_sessionID(const WOLFSSL_SESSION* session) int wolfSSL_SESSION_set_ex_data(WOLFSSL_SESSION* session, int idx, void* data) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_ENTER("wolfSSL_SESSION_set_ex_data"); #ifdef HAVE_EX_DATA session = ClientSessionToSession(session); diff --git a/src/tls.c b/src/tls.c index 472c6519f3..f61a6e25e8 100644 --- a/src/tls.c +++ b/src/tls.c @@ -2682,8 +2682,7 @@ static void TLSX_TCA_Free(TCA* tca, void* heap) (void)heap; if (tca) { - if (tca->id) - XFREE(tca->id, heap, DYNAMIC_TYPE_TLSX); + XFREE(tca->id, heap, DYNAMIC_TYPE_TLSX); XFREE(tca, heap, DYNAMIC_TYPE_TLSX); } } @@ -5975,9 +5974,7 @@ static TlsxSrtp* TLSX_UseSRTP_New(word16 ids, void* heap) static void TLSX_UseSRTP_Free(TlsxSrtp *srtp, void* heap) { - if (srtp != NULL) { - XFREE(srtp, heap, DYNAMIC_TYPE_TLSX); - } + XFREE(srtp, heap, DYNAMIC_TYPE_TLSX); (void)heap; } @@ -6594,8 +6591,7 @@ static void TLSX_Cookie_FreeAll(Cookie* cookie, void* heap) { (void)heap; - if (cookie != NULL) - XFREE(cookie, heap, DYNAMIC_TYPE_TLSX); + XFREE(cookie, heap, DYNAMIC_TYPE_TLSX); } /* Get the size of the encoded Cookie extension. @@ -6748,8 +6744,7 @@ int TLSX_Cookie_Use(const WOLFSSL* ssl, const byte* data, word16 len, byte* mac, if (mac != NULL) XMEMCPY(cookie->data + len, mac, macSz); - if (extension->data != NULL) - XFREE(extension->data, ssl->heap, DYNAMIC_TYPE_TLSX); + XFREE(extension->data, ssl->heap, DYNAMIC_TYPE_TLSX); extension->data = (void*)cookie; extension->resp = (byte)resp; @@ -6915,8 +6910,7 @@ static int TLSX_CA_Names_Parse(WOLFSSL *ssl, const byte* input, if (ret == 0) { CopyDecodedName(name, cert, ASN_SUBJECT); - if (wolfSSL_sk_X509_NAME_push(ssl->client_ca_names, name) - == WOLFSSL_FAILURE) + if (wolfSSL_sk_X509_NAME_push(ssl->client_ca_names, name) <= 0) ret = MEMORY_ERROR; } @@ -7392,21 +7386,15 @@ static int TLSX_KeyShare_GenDhKey(WOLFSSL *ssl, KeyShareEntry* kse) * The DhKey will be setup again in TLSX_KeyShare_ProcessDh */ if (dhKey != NULL) wc_FreeDhKey(dhKey); - if (kse->key != NULL) { - XFREE(kse->key, ssl->heap, DYNAMIC_TYPE_DH); - kse->key = NULL; - } + XFREE(kse->key, ssl->heap, DYNAMIC_TYPE_DH); + kse->key = NULL; if (ret != 0) { /* Cleanup on error, otherwise data owned by key share entry */ - if (kse->privKey != NULL) { - XFREE(kse->privKey, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); - kse->privKey = NULL; - } - if (kse->pubKey != NULL) { - XFREE(kse->pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); - kse->pubKey = NULL; - } + XFREE(kse->privKey, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); + kse->privKey = NULL; + XFREE(kse->pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); + kse->pubKey = NULL; } #else (void)ssl; @@ -7488,16 +7476,12 @@ static int TLSX_KeyShare_GenX25519Key(WOLFSSL *ssl, KeyShareEntry* kse) if (ret != 0) { /* Data owned by key share entry otherwise. */ - if (kse->pubKey != NULL) { - XFREE(kse->pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); - kse->pubKey = NULL; - } + XFREE(kse->pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); + kse->pubKey = NULL; if (key != NULL) wc_curve25519_free(key); - if (kse->key != NULL) { - XFREE(kse->key, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); - kse->key = NULL; - } + XFREE(kse->key, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); + kse->key = NULL; } #else (void)ssl; @@ -7576,16 +7560,12 @@ static int TLSX_KeyShare_GenX448Key(WOLFSSL *ssl, KeyShareEntry* kse) if (ret != 0) { /* Data owned by key share entry otherwise. */ - if (kse->pubKey != NULL) { - XFREE(kse->pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); - kse->pubKey = NULL; - } + XFREE(kse->pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); + kse->pubKey = NULL; if (key != NULL) wc_curve448_free(key); - if (kse->key != NULL) { - XFREE(kse->key, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); - kse->key = NULL; - } + XFREE(kse->key, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); + kse->key = NULL; } #else (void)ssl; @@ -7739,16 +7719,12 @@ static int TLSX_KeyShare_GenEccKey(WOLFSSL *ssl, KeyShareEntry* kse) if (ret != 0) { /* Cleanup on error, otherwise data owned by key share entry */ - if (kse->pubKey != NULL) { - XFREE(kse->pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); - kse->pubKey = NULL; - } + XFREE(kse->pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); + kse->pubKey = NULL; if (eccKey != NULL) wc_ecc_free(eccKey); - if (kse->key != NULL) { - XFREE(kse->key, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); - kse->key = NULL; - } + XFREE(kse->key, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); + kse->key = NULL; } #else (void)ssl; @@ -7957,10 +7933,8 @@ static int TLSX_KeyShare_GenPqcKey(WOLFSSL *ssl, KeyShareEntry* kse) wc_KyberKey_Free(kem); TLSX_KeyShare_FreeAll(ecc_kse, ssl->heap); - if (pubKey != NULL) - XFREE(pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); - if (privKey != NULL) - XFREE(privKey, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); + XFREE(pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); + XFREE(privKey, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); return ret; } @@ -8024,10 +7998,8 @@ static void TLSX_KeyShare_FreeAll(KeyShareEntry* list, void* heap) if (current->key != NULL) { ForceZero((byte*)current->key, current->keyLen); } - if (current->pubKey != NULL) { - XFREE(current->pubKey, heap, DYNAMIC_TYPE_PUBLIC_KEY); - current->pubKey = NULL; - } + XFREE(current->pubKey, heap, DYNAMIC_TYPE_PUBLIC_KEY); + current->pubKey = NULL; if (current->privKey != NULL) { ForceZero(current->privKey, current->privKeyLen); XFREE(current->privKey, heap, DYNAMIC_TYPE_PRIVATE_KEY); @@ -8246,18 +8218,12 @@ static int TLSX_KeyShare_ProcessDh(WOLFSSL* ssl, KeyShareEntry* keyShareEntry) /* done with key share, release resources */ if (dhKey) wc_FreeDhKey(dhKey); - if (keyShareEntry->key) { - XFREE(keyShareEntry->key, ssl->heap, DYNAMIC_TYPE_DH); - keyShareEntry->key = NULL; - } - if (keyShareEntry->privKey != NULL) { - XFREE(keyShareEntry->privKey, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); - keyShareEntry->privKey = NULL; - } - if (keyShareEntry->pubKey != NULL) { - XFREE(keyShareEntry->pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); - keyShareEntry->pubKey = NULL; - } + XFREE(keyShareEntry->key, ssl->heap, DYNAMIC_TYPE_DH); + keyShareEntry->key = NULL; + XFREE(keyShareEntry->privKey, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); + keyShareEntry->privKey = NULL; + XFREE(keyShareEntry->pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); + keyShareEntry->pubKey = NULL; XFREE(keyShareEntry->ke, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); keyShareEntry->ke = NULL; #else @@ -8335,10 +8301,8 @@ static int TLSX_KeyShare_ProcessX25519(WOLFSSL* ssl, wc_curve25519_free(peerX25519Key); XFREE(peerX25519Key, ssl->heap, DYNAMIC_TYPE_TLSX); wc_curve25519_free((curve25519_key*)keyShareEntry->key); - if (keyShareEntry->key != NULL) { - XFREE(keyShareEntry->key, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); - keyShareEntry->key = NULL; - } + XFREE(keyShareEntry->key, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); + keyShareEntry->key = NULL; #else (void)ssl; (void)keyShareEntry; @@ -8415,10 +8379,8 @@ static int TLSX_KeyShare_ProcessX448(WOLFSSL* ssl, KeyShareEntry* keyShareEntry) wc_curve448_free(peerX448Key); XFREE(peerX448Key, ssl->heap, DYNAMIC_TYPE_TLSX); wc_curve448_free((curve448_key*)keyShareEntry->key); - if (keyShareEntry->key != NULL) { - XFREE(keyShareEntry->key, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); - keyShareEntry->key = NULL; - } + XFREE(keyShareEntry->key, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); + keyShareEntry->key = NULL; #else (void)ssl; (void)keyShareEntry; @@ -8735,9 +8697,7 @@ static int TLSX_KeyShare_ProcessPqc(WOLFSSL* ssl, KeyShareEntry* keyShareEntry) ssl->arrays->preMasterSz = (word32) sharedSecretLen; } - if (sharedSecret != NULL) { - XFREE(sharedSecret, ssl->heap, DYNAMIC_TYPE_SECRET); - } + XFREE(sharedSecret, ssl->heap, DYNAMIC_TYPE_SECRET); wc_ecc_free(&eccpubkey); wc_KyberKey_Free(kem); @@ -9224,9 +9184,7 @@ static int server_generate_pqc_ciphertext(WOLFSSL* ssl, } if (ret == 0) { - if (keyShareEntry->ke != NULL) { - XFREE(keyShareEntry->ke, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); - } + XFREE(keyShareEntry->ke, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); keyShareEntry->ke = sharedSecret; keyShareEntry->keLen = outlen + ssSz; @@ -9244,10 +9202,8 @@ static int server_generate_pqc_ciphertext(WOLFSSL* ssl, } TLSX_KeyShare_FreeAll(ecc_kse, ssl->heap); - if (sharedSecret != NULL) - XFREE(sharedSecret, ssl->heap, DYNAMIC_TYPE_SECRET); - if (ciphertext != NULL) - XFREE(ciphertext, ssl->heap, DYNAMIC_TYPE_TLSX); + XFREE(sharedSecret, ssl->heap, DYNAMIC_TYPE_SECRET); + XFREE(ciphertext, ssl->heap, DYNAMIC_TYPE_TLSX); wc_ecc_free(&eccpubkey); wc_KyberKey_Free(kem); return ret; @@ -9312,9 +9268,7 @@ int TLSX_KeyShare_Use(const WOLFSSL* ssl, word16 group, word16 len, byte* data, else #endif if (data != NULL) { - if (keyShareEntry->ke != NULL) { - XFREE(keyShareEntry->ke, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); - } + XFREE(keyShareEntry->ke, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); keyShareEntry->ke = data; keyShareEntry->keLen = len; } @@ -9965,7 +9919,7 @@ int TLSX_KeyShare_Setup(WOLFSSL *ssl, KeyShareEntry* clientKSE) /* for async do setup of serverKSE below, but return WC_PENDING_E */ if (ret != 0 #ifdef WOLFSSL_ASYNC_CRYPT - && ret != WC_PENDING_E + && ret != WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { TLSX_KeyShare_FreeAll(list, ssl->heap); @@ -12106,8 +12060,7 @@ static int TLSX_ExtractEch(WOLFSSL_ECH* ech, WOLFSSL_EchConfig* echConfig, ech->hpke = NULL; } - if (info != NULL) - XFREE(info, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(info, heap, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -12263,13 +12216,11 @@ static int TLSX_ECH_Parse(WOLFSSL* ssl, const byte* readBuf, word16 size, /* free the ech struct and the dynamic buffer it uses */ static void TLSX_ECH_Free(WOLFSSL_ECH* ech, void* heap) { - if (ech->innerClientHello != NULL) - XFREE(ech->innerClientHello, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(ech->innerClientHello, heap, DYNAMIC_TYPE_TMP_BUFFER); if (ech->ephemeralKey != NULL) wc_HpkeFreeKey(ech->hpke, ech->hpke->kem, ech->ephemeralKey, ech->hpke->heap); - if (ech->hpke != NULL) - XFREE(ech->hpke, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(ech->hpke, heap, DYNAMIC_TYPE_TMP_BUFFER); XFREE(ech, heap, DYNAMIC_TYPE_TMP_BUFFER); (void)heap; @@ -13190,7 +13141,7 @@ static int TLSX_PopulateSupportedGroups(WOLFSSL* ssl, TLSX** extensions) ret = TLSX_UseSupportedCurve(extensions, WOLFSSL_P384_KYBER_LEVEL3, ssl->heap); #endif -#ifdef WOLFSSL_KYBER768 +#ifdef WOLFSSL_KYBER1024 if (ret == WOLFSSL_SUCCESS) ret = TLSX_UseSupportedCurve(extensions, WOLFSSL_KYBER_LEVEL5, ssl->heap); diff --git a/src/tls13.c b/src/tls13.c index aa2ab160de..bbca4fac57 100644 --- a/src/tls13.c +++ b/src/tls13.c @@ -4455,8 +4455,17 @@ int SendTls13ClientHello(WOLFSSL* ssl) if (ret != 0) return ret; + /* Total message size. */ + args->sendSz = + (int)(args->length + HANDSHAKE_HEADER_SZ + RECORD_HEADER_SZ); + +#ifdef WOLFSSL_DTLS13 + if (ssl->options.dtls) + args->sendSz += DTLS_RECORD_EXTRA + DTLS_HANDSHAKE_EXTRA; +#endif /* WOLFSSL_DTLS13 */ + #ifdef WOLFSSL_DTLS_CH_FRAG - if (ssl->options.dtls && args->length > maxFrag && + if (ssl->options.dtls && args->sendSz > maxFrag && TLSX_Find(ssl->extensions, TLSX_COOKIE) == NULL) { /* Try again with an empty key share if we would be fragmenting * without a cookie */ @@ -4467,7 +4476,9 @@ int SendTls13ClientHello(WOLFSSL* ssl) ret = TLSX_GetRequestSize(ssl, client_hello, &args->length); if (ret != 0) return ret; - if (args->length > maxFrag) { + args->sendSz = (int)(args->length + + DTLS_HANDSHAKE_HEADER_SZ + DTLS_RECORD_HEADER_SZ); + if (args->sendSz > maxFrag) { WOLFSSL_MSG("Can't fit first CH in one fragment."); return BUFFER_ERROR; } @@ -4476,14 +4487,6 @@ int SendTls13ClientHello(WOLFSSL* ssl) #endif } - /* Total message size. */ - args->sendSz = (int)(args->length + HANDSHAKE_HEADER_SZ + RECORD_HEADER_SZ); - -#ifdef WOLFSSL_DTLS13 - if (ssl->options.dtls) - args->sendSz += DTLS_RECORD_EXTRA + DTLS_HANDSHAKE_EXTRA; -#endif /* WOLFSSL_DTLS13 */ - /* Check buffers are big enough and grow if needed. */ if ((ret = CheckAvailableSize(ssl, args->sendSz)) != 0) return ret; @@ -8459,12 +8462,13 @@ static int SendTls13Certificate(WOLFSSL* ssl) int ret = 0; word32 certSz, certChainSz, headerSz, listSz, payloadSz; word16 extSz = 0; - word32 length, maxFragment; + word32 maxFragment; word32 len = 0; word32 idx = 0; word32 offset = OPAQUE16_LEN; byte* p = NULL; byte certReqCtxLen = 0; + sword32 length; #ifdef WOLFSSL_POST_HANDSHAKE_AUTH byte* certReqCtx = NULL; #endif @@ -8510,7 +8514,7 @@ static int SendTls13Certificate(WOLFSSL* ssl) listSz = 0; } else { - if (!ssl->buffers.certificate) { + if (!ssl->buffers.certificate || !ssl->buffers.certificate->buffer) { WOLFSSL_MSG("Send Cert missing certificate buffer"); return NO_CERT_ERROR; } @@ -8601,7 +8605,7 @@ static int SendTls13Certificate(WOLFSSL* ssl) #endif /* WOLFSSL_DTLS13 */ } else { - fragSz = min(length, maxFragment); + fragSz = min((word32)length, maxFragment); sendSz += fragSz; } @@ -8722,7 +8726,7 @@ static int SendTls13Certificate(WOLFSSL* ssl) } } - if (ret != WANT_WRITE) { + if (ret != WC_NO_ERR_TRACE(WANT_WRITE)) { /* Clean up the fragment offset. */ ssl->options.buildingMsg = 0; ssl->fragOffset = 0; @@ -10903,7 +10907,7 @@ static int SendTls13Finished(WOLFSSL* ssl) dtlsRet = Dtls13HandshakeSend(ssl, output, (word16)outputSz, (word16)(Dtls13GetRlHeaderLength(ssl, 1) + headerSz + finishedSz), finished, 1); - if (dtlsRet != 0 && dtlsRet != WANT_WRITE) + if (dtlsRet != 0 && dtlsRet != WC_NO_ERR_TRACE(WANT_WRITE)) return ret; } else @@ -11141,7 +11145,7 @@ static int SendTls13KeyUpdate(WOLFSSL* ssl) ret = SendBuffered(ssl); - if (ret != 0 && ret != WANT_WRITE) + if (ret != 0 && ret != WC_NO_ERR_TRACE(WANT_WRITE)) return ret; } @@ -12347,7 +12351,7 @@ int DoTls13HandShakeMsgType(WOLFSSL* ssl, byte* input, word32* inOutIdx, { int ret = 0, tmp; word32 inIdx = *inOutIdx; - int alertType = invalid_alert; + int alertType; #if defined(HAVE_ECH) TLSX* echX = NULL; word32 echInOutIdx; @@ -12932,7 +12936,7 @@ int wolfSSL_connect_TLSv13(WOLFSSL* ssl) #ifdef WOLFSSL_ASYNC_CRYPT /* do not send buffered or advance state if last error was an async pending operation */ - && ssl->error != WC_PENDING_E + && ssl->error != WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { if ((ret = SendBuffered(ssl)) == 0) { @@ -13086,6 +13090,14 @@ int wolfSSL_connect_TLSv13(WOLFSSL* ssl) case HELLO_AGAIN_REPLY: /* Get the response/s from the server. */ while (ssl->options.serverState < SERVER_FINISHED_COMPLETE) { +#ifdef WOLFSSL_DTLS13 + if (!IsAtLeastTLSv1_3(ssl->version)) { + #ifndef WOLFSSL_NO_TLS12 + if (ssl->options.downgrade) + return wolfSSL_connect(ssl); + #endif + } +#endif /* WOLFSSL_DTLS13 */ if ((ssl->error = ProcessReply(ssl)) < 0) { WOLFSSL_ERROR(ssl->error); return WOLFSSL_FATAL_ERROR; @@ -13606,7 +13618,7 @@ int wolfSSL_update_keys(WOLFSSL* ssl) { int ret; ret = Tls13UpdateKeys(ssl); - if (ret == WANT_WRITE) + if (ret == WC_NO_ERR_TRACE(WANT_WRITE)) ret = WOLFSSL_ERROR_WANT_WRITE; else if (ret == 0) ret = WOLFSSL_SUCCESS; @@ -13707,7 +13719,7 @@ int wolfSSL_request_certificate(WOLFSSL* ssl) ssl->msgsReceived.got_finished = 0; ret = SendTls13CertificateRequest(ssl, &certReqCtx->ctx, certReqCtx->len); - if (ret == WANT_WRITE) + if (ret == WC_NO_ERR_TRACE(WANT_WRITE)) ret = WOLFSSL_ERROR_WANT_WRITE; else if (ret == 0) ret = WOLFSSL_SUCCESS; @@ -14062,7 +14074,7 @@ int wolfSSL_accept_TLSv13(WOLFSSL* ssl) #ifdef WOLFSSL_ASYNC_CRYPT /* do not send buffered or advance state if last error was an async pending operation */ - && ssl->error != WC_PENDING_E + && ssl->error != WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { @@ -14674,7 +14686,7 @@ int wolfSSL_read_early_data(WOLFSSL* ssl, void* data, int sz, int* outSz) ret = ReceiveData(ssl, (byte*)data, sz, FALSE); if (ret > 0) *outSz = ret; - if (ssl->error == ZERO_RETURN) { + if (ssl->error == WC_NO_ERR_TRACE(ZERO_RETURN)) { ssl->error = WOLFSSL_ERROR_NONE; #ifdef WOLFSSL_DTLS13 if (ssl->options.dtls) { diff --git a/src/wolfio.c b/src/wolfio.c index 90c4ff271a..658dfe9339 100644 --- a/src/wolfio.c +++ b/src/wolfio.c @@ -259,57 +259,58 @@ static int TranslateIoReturnCode(int err, SOCKET_T sd, int direction) #ifdef OPENSSL_EXTRA #ifndef NO_BIO -/* Use the WOLFSSL read BIO for receiving data. This is set by the function - * wolfSSL_set_bio and can also be set by wolfSSL_CTX_SetIORecv. - * - * ssl WOLFSSL struct passed in that has this function set as the receive - * callback. - * buf buffer to fill with data read - * sz size of buf buffer - * ctx a user set context - * - * returns the amount of data read or want read. See WOLFSSL_CBIO_ERR_* values. - */ + +int BioSend(WOLFSSL* ssl, char *buf, int sz, void *ctx) +{ + return SslBioSend(ssl, buf, sz, ctx); +} + int BioReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx) { - int recvd = WOLFSSL_CBIO_ERR_GENERAL; + return SslBioReceive(ssl, buf, sz, ctx); +} + +int BioReceiveInternal(WOLFSSL_BIO* biord, WOLFSSL_BIO* biowr, char* buf, + int sz) +{ + int recvd = WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_GENERAL); - WOLFSSL_ENTER("BioReceive"); + WOLFSSL_ENTER("SslBioReceive"); - if (ssl->biord == NULL) { + if (biord == NULL) { WOLFSSL_MSG("WOLFSSL biord not set"); return WOLFSSL_CBIO_ERR_GENERAL; } - recvd = wolfSSL_BIO_read(ssl->biord, buf, sz); + recvd = wolfSSL_BIO_read(biord, buf, sz); if (recvd <= 0) { if (/* ssl->biowr->wrIdx is checked for Bind9 */ - wolfSSL_BIO_method_type(ssl->biowr) == WOLFSSL_BIO_BIO && - wolfSSL_BIO_wpending(ssl->biowr) != 0 && + wolfSSL_BIO_method_type(biowr) == WOLFSSL_BIO_BIO && + wolfSSL_BIO_wpending(biowr) != 0 && /* Not sure this pending check is necessary but let's double * check that the read BIO is empty before we signal a write * need */ - wolfSSL_BIO_supports_pending(ssl->biord) && - wolfSSL_BIO_ctrl_pending(ssl->biord) == 0) { + wolfSSL_BIO_supports_pending(biord) && + wolfSSL_BIO_ctrl_pending(biord) == 0) { /* Let's signal to the app layer that we have * data pending that needs to be sent. */ return WOLFSSL_CBIO_ERR_WANT_WRITE; } - else if (ssl->biord->type == WOLFSSL_BIO_SOCKET) { + else if (biord->type == WOLFSSL_BIO_SOCKET) { if (recvd == 0) { - WOLFSSL_MSG("BioReceive connection closed"); + WOLFSSL_MSG("SslBioReceive connection closed"); return WOLFSSL_CBIO_ERR_CONN_CLOSE; } #ifdef USE_WOLFSSL_IO - recvd = TranslateIoReturnCode(recvd, ssl->biord->num.fd, + recvd = TranslateIoReturnCode(recvd, biord->num.fd, SOCKET_RECEIVING); #endif return recvd; } /* If retry and read flags are set, return WANT_READ */ - if ((ssl->biord->flags & WOLFSSL_BIO_FLAG_READ) && - (ssl->biord->flags & WOLFSSL_BIO_FLAG_RETRY)) { + if ((biord->flags & WOLFSSL_BIO_FLAG_READ) && + (biord->flags & WOLFSSL_BIO_FLAG_RETRY)) { return WOLFSSL_CBIO_ERR_WANT_READ; } @@ -317,10 +318,27 @@ int BioReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx) return WOLFSSL_CBIO_ERR_GENERAL; } - (void)ctx; return recvd; } +/* Use the WOLFSSL read BIO for receiving data. This is set by the function + * wolfSSL_set_bio and can also be set by wolfSSL_CTX_SetIORecv. + * + * ssl WOLFSSL struct passed in that has this function set as the receive + * callback. + * buf buffer to fill with data read + * sz size of buf buffer + * ctx a user set context + * + * returns the amount of data read or want read. See WOLFSSL_CBIO_ERR_* values. + */ +int SslBioReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx) +{ + WOLFSSL_ENTER("SslBioReceive"); + (void)ctx; + return BioReceiveInternal(ssl->biord, ssl->biowr, buf, sz); +} + /* Use the WOLFSSL write BIO for sending data. This is set by the function * wolfSSL_set_bio and can also be set by wolfSSL_CTX_SetIOSend. @@ -332,11 +350,11 @@ int BioReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx) * * returns the amount of data sent or want send. See WOLFSSL_CBIO_ERR_* values. */ -int BioSend(WOLFSSL* ssl, char *buf, int sz, void *ctx) +int SslBioSend(WOLFSSL* ssl, char *buf, int sz, void *ctx) { - int sent = WOLFSSL_CBIO_ERR_GENERAL; + int sent = WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_GENERAL); - WOLFSSL_ENTER("BioSend"); + WOLFSSL_ENTER("SslBioSend"); if (ssl->biowr == NULL) { WOLFSSL_MSG("WOLFSSL biowr not set"); @@ -763,7 +781,7 @@ int EmbedReceiveFrom(WOLFSSL *ssl, char *buf, int sz, void *ctx) if (recvd < 0) { WOLFSSL_MSG("Embed Receive From error"); - if (recvd == WOLFSSL_CBIO_ERR_WANT_READ && + if (recvd == WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_WANT_READ) && !wolfSSL_dtls_get_using_nonblock(ssl)) { recvd = WOLFSSL_CBIO_ERR_TIMEOUT; } @@ -876,7 +894,7 @@ int EmbedReceiveFromMcast(WOLFSSL *ssl, char *buf, int sz, void *ctx) if (recvd < 0) { WOLFSSL_MSG("Embed Receive From error"); - if (recvd == WOLFSSL_CBIO_ERR_WANT_READ && + if (recvd == WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_WANT_READ) && !wolfSSL_dtls_get_using_nonblock(ssl)) { recvd = WOLFSSL_CBIO_ERR_TIMEOUT; } @@ -1659,8 +1677,9 @@ int wolfIO_DecodeUrl(const char* url, int urlSz, char* outName, char* outPath, return result; } -static int wolfIO_HttpProcessResponseBuf(int sfd, byte **recvBuf, - int* recvBufSz, int chunkSz, char* start, int len, int dynType, void* heap) +static int wolfIO_HttpProcessResponseBuf(WolfSSLGenericIORecvCb ioCb, + void* ioCbCtx, byte **recvBuf, int* recvBufSz, int chunkSz, char* start, + int len, int dynType, void* heap) { byte* newRecvBuf = NULL; int newRecvSz = *recvBufSz + chunkSz; @@ -1713,7 +1732,7 @@ static int wolfIO_HttpProcessResponseBuf(int sfd, byte **recvBuf, /* receive the remainder of chunk */ while (len < chunkSz) { - int rxSz = wolfIO_Recv(sfd, (char*)&newRecvBuf[pos], chunkSz-len, 0); + int rxSz = ioCb((char*)&newRecvBuf[pos], chunkSz-len, ioCbCtx); if (rxSz > 0) { len += rxSz; pos += rxSz; @@ -1731,8 +1750,9 @@ static int wolfIO_HttpProcessResponseBuf(int sfd, byte **recvBuf, return 0; } -int wolfIO_HttpProcessResponse(int sfd, const char** appStrList, - byte** respBuf, byte* httpBuf, int httpBufSz, int dynType, void* heap) +int wolfIO_HttpProcessResponseGenericIO(WolfSSLGenericIORecvCb ioCb, + void* ioCbCtx, const char** appStrList, unsigned char** respBuf, + unsigned char* httpBuf, int httpBufSz, int dynType, void* heap) { static const char HTTP_PROTO[] = "HTTP/1."; static const char HTTP_STATUS_200[] = "200"; @@ -1753,8 +1773,8 @@ int wolfIO_HttpProcessResponse(int sfd, const char** appStrList, do { if (state == phr_get_chunk_data) { /* get chunk of data */ - result = wolfIO_HttpProcessResponseBuf(sfd, respBuf, &respBufSz, - chunkSz, start, len, dynType, heap); + result = wolfIO_HttpProcessResponseBuf(ioCb, ioCbCtx, respBuf, + &respBufSz, chunkSz, start, len, dynType, heap); state = (result != 0) ? phr_http_end : phr_get_chunk_len; end = NULL; @@ -1768,14 +1788,14 @@ int wolfIO_HttpProcessResponse(int sfd, const char** appStrList, * can. */ } - result = wolfIO_Recv(sfd, (char*)httpBuf+len, httpBufSz-len-1, 0); + result = ioCb((char*)httpBuf+len, httpBufSz-len-1, ioCbCtx); if (result > 0) { len += result; start = (char*)httpBuf; start[len] = 0; } else { - if (result == WOLFSSL_CBIO_ERR_WANT_READ) { + if (result == WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_WANT_READ)) { return OCSP_WANT_READ; } @@ -1894,8 +1914,8 @@ int wolfIO_HttpProcessResponse(int sfd, const char** appStrList, } while (state != phr_http_end); if (!isChunked) { - result = wolfIO_HttpProcessResponseBuf(sfd, respBuf, &respBufSz, chunkSz, - start, len, dynType, heap); + result = wolfIO_HttpProcessResponseBuf(ioCb, ioCbCtx, respBuf, + &respBufSz, chunkSz, start, len, dynType, heap); } if (result >= 0) { @@ -1907,6 +1927,22 @@ int wolfIO_HttpProcessResponse(int sfd, const char** appStrList, return result; } + +static int httpResponseIoCb(char* buf, int sz, void* ctx) +{ + /* Double cast to silence the compiler int/pointer width msg */ + return wolfIO_Recv((SOCKET_T)(uintptr_t)ctx, buf, sz, 0); +} + +int wolfIO_HttpProcessResponse(int sfd, const char** appStrList, + byte** respBuf, byte* httpBuf, int httpBufSz, int dynType, void* heap) +{ + return wolfIO_HttpProcessResponseGenericIO(httpResponseIoCb, + /* Double cast to silence the compiler int/pointer width msg */ + (void*)(uintptr_t)sfd, appStrList, respBuf, httpBuf, httpBufSz, + dynType, heap); +} + int wolfIO_HttpBuildRequest(const char *reqType, const char *domainName, const char *path, int pathLen, int reqSz, const char *contentType, byte *buf, int bufSize) @@ -2028,17 +2064,25 @@ int wolfIO_HttpBuildRequestOcsp(const char* domainName, const char* path, ocspReqSz, "application/ocsp-request", cacheCtl, buf, bufSize); } +static const char* ocspAppStrList[] = { + "application/ocsp-response", + NULL +}; + +WOLFSSL_API int wolfIO_HttpProcessResponseOcspGenericIO( + WolfSSLGenericIORecvCb ioCb, void* ioCbCtx, unsigned char** respBuf, + unsigned char* httpBuf, int httpBufSz, void* heap) +{ + return wolfIO_HttpProcessResponseGenericIO(ioCb, ioCbCtx, + ocspAppStrList, respBuf, httpBuf, httpBufSz, DYNAMIC_TYPE_OCSP, heap); +} + /* return: >0 OCSP Response Size * -1 error */ int wolfIO_HttpProcessResponseOcsp(int sfd, byte** respBuf, byte* httpBuf, int httpBufSz, void* heap) { - const char* appStrList[] = { - "application/ocsp-response", - NULL - }; - - return wolfIO_HttpProcessResponse(sfd, appStrList, + return wolfIO_HttpProcessResponse(sfd, ocspAppStrList, respBuf, httpBuf, httpBufSz, DYNAMIC_TYPE_OCSP, heap); } @@ -2125,8 +2169,7 @@ int EmbedOcspLookup(void* ctx, const char* url, int urlSz, /* in default callback ctx is heap hint */ void EmbedOcspRespFree(void* ctx, byte *resp) { - if (resp) - XFREE(resp, ctx, DYNAMIC_TYPE_OCSP); + XFREE(resp, ctx, DYNAMIC_TYPE_OCSP); (void)ctx; } diff --git a/src/x509.c b/src/x509.c index cbe3b92421..ea5bdf6a69 100644 --- a/src/x509.c +++ b/src/x509.c @@ -362,71 +362,9 @@ WOLFSSL_STACK* wolfSSL_sk_new_x509_ext(void) * OpenSSL. */ int wolfSSL_sk_X509_EXTENSION_push(WOLFSSL_STACK* sk,WOLFSSL_X509_EXTENSION* ext) { - WOLFSSL_STACK* node; - WOLFSSL_ENTER("wolfSSL_sk_X509_EXTENSION_push"); - if (sk == NULL || ext == NULL) { - return WOLFSSL_FAILURE; - } - - /* no previous values in stack */ - if (sk->data.ext == NULL) { - sk->data.ext = ext; - sk->num += 1; - return (int)sk->num; - } - - /* stack already has value(s) create a new node and add more */ - node = (WOLFSSL_STACK*)XMALLOC(sizeof(WOLFSSL_STACK), NULL, - DYNAMIC_TYPE_X509); - if (node == NULL) { - WOLFSSL_MSG("Memory error"); - return WOLFSSL_FAILURE; - } - XMEMSET(node, 0, sizeof(WOLFSSL_STACK)); - - /* push new obj onto head of stack */ - node->data.ext = sk->data.ext; - node->next = sk->next; - node->type = sk->type; - sk->next = node; - sk->data.ext = ext; - sk->num += 1; - - return (int)sk->num; -} - -/* Free the structure for X509_EXTENSION stack - * - * sk stack to free nodes in - */ -void wolfSSL_sk_X509_EXTENSION_free(WOLFSSL_STACK* sk) -{ - WOLFSSL_STACK* node; - - WOLFSSL_ENTER("wolfSSL_sk_X509_EXTENSION_free"); - - if (sk == NULL) { - return; - } - - /* parse through stack freeing each node */ - node = sk->next; - while ((node != NULL) && (sk->num > 1)) { - WOLFSSL_STACK* tmp = node; - node = node->next; - - wolfSSL_X509_EXTENSION_free(tmp->data.ext); - XFREE(tmp, NULL, DYNAMIC_TYPE_X509); - sk->num -= 1; - } - - /* free head of stack */ - if (sk->num == 1) { - wolfSSL_X509_EXTENSION_free(sk->data.ext); - } - XFREE(sk, NULL, DYNAMIC_TYPE_X509); + return wolfSSL_sk_push(sk, ext); } static WOLFSSL_STACK* generateExtStack(const WOLFSSL_X509 *x) @@ -535,8 +473,8 @@ int wolfSSL_X509_get_ext_by_OBJ(const WOLFSSL_X509 *x, if (lastpos < 0) lastpos = 0; for (; lastpos < wolfSSL_sk_num(sk); lastpos++) - if (wolfSSL_OBJ_cmp((WOLFSSL_ASN1_OBJECT*)wolfSSL_sk_value(sk, - lastpos), obj) == 0) + if (wolfSSL_OBJ_cmp(wolfSSL_sk_X509_EXTENSION_value(sk, + lastpos)->obj, obj) == 0) return lastpos; return -1; } @@ -556,10 +494,10 @@ static int wolfssl_dns_entry_othername_to_gn(DNS_entry* dns, WOLFSSL_GENERAL_NAME* gn) { int ret = 0; - WOLFSSL_ASN1_OBJECT* obj; - WOLFSSL_ASN1_TYPE* type; - WOLFSSL_ASN1_STRING* str; - byte tag; + WOLFSSL_ASN1_OBJECT* obj = NULL; + WOLFSSL_ASN1_TYPE* type = NULL; + WOLFSSL_ASN1_STRING* str = NULL; + byte tag = 0; unsigned char* p = (unsigned char *)dns->name; long len = dns->len; @@ -594,7 +532,7 @@ static int wolfssl_dns_entry_othername_to_gn(DNS_entry* dns, goto err; } - tag = ASN_UTF8STRING; + tag = V_ASN1_UTF8STRING; } else #endif @@ -604,39 +542,23 @@ static int wolfssl_dns_entry_othername_to_gn(DNS_entry* dns, /* Create an object id for general name from DER encoding. */ obj = wolfSSL_d2i_ASN1_OBJECT(NULL, (const unsigned char**)&p, len); - if (obj == NULL) { + if (obj == NULL) goto err; - } /* Pointer moved on and now update length of remaining data. */ len -= (long)((size_t)p - (size_t)dns->name); - /* Next is: [0]. Check tag and length. */ - if (GetASNTag(p, &idx, &tag, (word32)len) < 0) { - wolfSSL_ASN1_OBJECT_free(obj); - goto err; - } - if (tag != (ASN_CONTEXT_SPECIFIC | ASN_CONSTRUCTED | 0)) { - wolfSSL_ASN1_OBJECT_free(obj); - goto err; - } - if (GetLength(p, &idx, &nameLen, (word32)len) <= 1) { - wolfSSL_ASN1_OBJECT_free(obj); - goto err; - } - - /* Next is a string of some type. */ - if (GetASNTag(p, &idx, &tag, (word32)len) < 0) { - wolfSSL_ASN1_OBJECT_free(obj); + /* Next is "value [0] EXPLICIT ANY DEFINED BY type-id" */ + if (GetASNHeader(p, ASN_CONTEXT_SPECIFIC | ASN_CONSTRUCTED | 0, + &idx, &nameLen, (word32)len) < 0) goto err; - } - if (GetLength(p, &idx, &nameLen, (word32)len) <= 0) { - wolfSSL_ASN1_OBJECT_free(obj); - goto err; - } p += idx; len -= idx; + + /* Set the tag to object so that it gets output in raw form */ + tag = V_ASN1_SEQUENCE; } + /* Create a WOLFSSL_ASN1_STRING from the DER. */ str = wolfSSL_ASN1_STRING_type_new(tag); if (str == NULL) { @@ -647,11 +569,8 @@ static int wolfssl_dns_entry_othername_to_gn(DNS_entry* dns, /* Wrap string in a WOLFSSL_ASN1_TYPE. */ type = wolfSSL_ASN1_TYPE_new(); - if (type == NULL) { - wolfSSL_ASN1_OBJECT_free(obj); - wolfSSL_ASN1_STRING_free(str); + if (type == NULL) goto err; - } wolfSSL_ASN1_TYPE_set(type, tag, str); /* Store the object and string in general name. */ @@ -660,6 +579,10 @@ static int wolfssl_dns_entry_othername_to_gn(DNS_entry* dns, ret = 1; err: + if (ret != 1) { + wolfSSL_ASN1_OBJECT_free(obj); + wolfSSL_ASN1_STRING_free(str); + } return ret; } #endif /* OPENSSL_ALL || WOLFSSL_WPAS_SMALL */ @@ -722,7 +645,7 @@ static int wolfssl_x509_alt_names_to_gn(WOLFSSL_X509* x509, } } - if (wolfSSL_sk_GENERAL_NAME_push(sk, gn) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_GENERAL_NAME_push(sk, gn) <= 0) { WOLFSSL_MSG("Error pushing onto stack"); wolfSSL_GENERAL_NAME_free(gn); wolfSSL_sk_pop_free(sk, NULL); @@ -917,11 +840,37 @@ WOLFSSL_X509_EXTENSION* wolfSSL_X509_set_ext(WOLFSSL_X509* x509, int loc) switch (oid) { case BASIC_CA_OID: + { + word32 dataIdx = idx; + word32 dummyOid; + int dataLen = 0; + if (!isSet) break; /* Set pathlength */ a = wolfSSL_ASN1_INTEGER_new(); - if (a == NULL) { + + /* Set the data */ + ret = GetObjectId(input, &dataIdx, &dummyOid, oidCertExtType, + (word32)sz) == 0; + if (ret && dataIdx < (word32)sz) { + /* Skip the critical information */ + if (input[dataIdx] == ASN_BOOLEAN) { + dataIdx++; + ret = GetLength(input, &dataIdx, &dataLen, sz) >= 0; + dataIdx += dataLen; + } + } + if (ret) { + ret = GetOctetString(input, &dataIdx, &dataLen, + (word32)sz) > 0; + } + if (ret) { + ret = wolfSSL_ASN1_STRING_set(&ext->value, input + dataIdx, + dataLen) == 1; + } + + if (a == NULL || !ret) { wolfSSL_X509_EXTENSION_free(ext); FreeDecodedCert(cert); #ifdef WOLFSSL_SMALL_STACK @@ -937,7 +886,7 @@ WOLFSSL_X509_EXTENSION* wolfSSL_X509_set_ext(WOLFSSL_X509* x509, int loc) ext->obj->ca = x509->isCa; ext->crit = x509->basicConstCrit; break; - + } case AUTH_INFO_OID: if (!isSet) break; @@ -976,7 +925,8 @@ WOLFSSL_X509_EXTENSION* wolfSSL_X509_set_ext(WOLFSSL_X509* x509, int loc) obj->grp = oidCertAuthInfoType; obj->nid = NID_ad_ca_issuers; - ret = wolfSSL_sk_ASN1_OBJECT_push(sk, obj); + ret = wolfSSL_sk_ASN1_OBJECT_push(sk, obj) > 0 + ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE; if (ret != WOLFSSL_SUCCESS) { WOLFSSL_MSG("Error pushing ASN1 object onto stack"); wolfSSL_ASN1_OBJECT_free(obj); @@ -1011,7 +961,8 @@ WOLFSSL_X509_EXTENSION* wolfSSL_X509_set_ext(WOLFSSL_X509* x509, int loc) obj->grp = oidCertAuthInfoType; obj->nid = NID_ad_OCSP; - ret = wolfSSL_sk_ASN1_OBJECT_push(sk, obj); + ret = wolfSSL_sk_ASN1_OBJECT_push(sk, obj) > 0 + ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE; if (ret != WOLFSSL_SUCCESS) { WOLFSSL_MSG("Error pushing ASN1 object onto stack"); wolfSSL_ASN1_OBJECT_free(obj); @@ -1251,7 +1202,7 @@ WOLFSSL_X509_EXTENSION* wolfSSL_X509_set_ext(WOLFSSL_X509* x509, int loc) */ if (x509->ext_sk == NULL) x509->ext_sk = wolfSSL_sk_new_x509_ext(); - if (wolfSSL_sk_X509_EXTENSION_push(x509->ext_sk, ext) == WOLFSSL_FAILURE) { + if (wolfSSL_sk_insert(x509->ext_sk, ext, -1) <= 0) { wolfSSL_X509_EXTENSION_free(ext); ext = NULL; } @@ -1340,7 +1291,7 @@ int wolfSSL_X509_add_ext(WOLFSSL_X509 *x509, WOLFSSL_X509_EXTENSION *ext, int lo word32 len = 0; len = SetOthername(gn->d.otherName, NULL); - if (len == WOLFSSL_FAILURE) { + if (len == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) { return WOLFSSL_FAILURE; } @@ -1356,7 +1307,7 @@ int wolfSSL_X509_add_ext(WOLFSSL_X509 *x509, WOLFSSL_X509_EXTENSION *ext, int lo ret = wolfSSL_X509_add_altname_ex(x509, buf, len, ASN_OTHER_TYPE); XFREE(buf, x509->heap, DYNAMIC_TYPE_X509_EXT); - if (ret == WOLFSSL_FAILURE) { + if (ret == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) { WOLFSSL_MSG("wolfSSL_X509_add_altname_ex() failed"); return WOLFSSL_FAILURE; } @@ -1491,7 +1442,7 @@ int wolfSSL_X509V3_EXT_print(WOLFSSL_BIO *out, WOLFSSL_X509_EXTENSION *ext, ASN1_OBJECT* obj; ASN1_STRING* str; int nid; - int rc = WOLFSSL_FAILURE; + int rc = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); char tmp[CTC_NAME_SIZE*2 + 1]; const int tmpSz = sizeof(tmp); int tmpLen = 0; @@ -1813,7 +1764,8 @@ static WOLFSSL_AUTHORITY_INFO_ACCESS* wolfssl_x509v3_ext_aia_d2i( break; } /* Push onto AUTHORITY_INFO_ACCESS stack. */ - ret = wolfSSL_sk_ACCESS_DESCRIPTION_push(aia, ad); + ret = wolfSSL_sk_ACCESS_DESCRIPTION_push(aia, ad) > 0 + ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE; if (ret != WOLFSSL_SUCCESS) { WOLFSSL_MSG("Error pushing ASN1 AD onto stack"); err = 1; @@ -2311,8 +2263,7 @@ void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509, int nid, int* c, } dns = dns->next; - if (wolfSSL_sk_GENERAL_NAME_push(sk, gn) != - WOLFSSL_SUCCESS) { + if (wolfSSL_sk_GENERAL_NAME_push(sk, gn) <= 0) { WOLFSSL_MSG("Error pushing ASN1 object onto stack"); goto err; } @@ -2367,13 +2318,13 @@ void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509, int nid, int* c, /* push GENERAL_NAME onto fullname stack */ if (wolfSSL_sk_GENERAL_NAME_push(dp->distpoint->name.fullname, - gn) != WOLFSSL_SUCCESS) { + gn) <= 0) { WOLFSSL_MSG("wolfSSL_sk_GENERAL_NAME_push error"); goto err; } /* push DIST_POINT onto stack */ - if (wolfSSL_sk_DIST_POINT_push(sk, dp) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_DIST_POINT_push(sk, dp) <= 0) { WOLFSSL_MSG("Error pushing DIST_POINT onto stack"); goto err; } @@ -2488,8 +2439,7 @@ void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509, int nid, int* c, obj->grp = oidCertExtType; obj->obj = (byte*)(x509->certPolicies[i]); obj->objSz = MAX_CERTPOL_SZ; - if (wolfSSL_sk_ASN1_OBJECT_push(sk, obj) - != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_ASN1_OBJECT_push(sk, obj) <= 0) { WOLFSSL_MSG("Error pushing ASN1 object onto stack"); wolfSSL_ASN1_OBJECT_free(obj); wolfSSL_sk_ASN1_OBJECT_pop_free(sk, NULL); @@ -2565,6 +2515,44 @@ void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509, int nid, int* c, case EXT_KEY_USAGE_OID: if (x509->extKeyUsageSrc != NULL) { + const byte* ekuSrc = x509->extKeyUsageSrc; + word32 i; + + sk = wolfSSL_sk_new_asn1_obj(); + if (sk == NULL) { + WOLFSSL_MSG("Issue creating stack"); + return NULL; + } + + for (i = 0; i < x509->extKeyUsageCount; i++) { + long ekuSrcLen = (long)(x509->extKeyUsageSz - + (word32)(ekuSrc - x509->extKeyUsageSrc)); + WOLFSSL_ASN1_OBJECT* ekuObj = wolfSSL_d2i_ASN1_OBJECT(NULL, + &ekuSrc, ekuSrcLen); + if (ekuObj == NULL) { + wolfSSL_sk_ASN1_OBJECT_pop_free(sk, NULL); + WOLFSSL_MSG("d2i obj error"); + return NULL; + } + ekuObj->type = EXT_KEY_USAGE_OID; + ekuObj->grp = oidCertExtType; + /* Push to end to maintain order */ + if (wolfSSL_sk_insert(sk, ekuObj, -1) <= 0) { + wolfSSL_ASN1_OBJECT_free(ekuObj); + wolfSSL_sk_ASN1_OBJECT_pop_free(sk, NULL); + WOLFSSL_MSG("d2i obj error"); + return NULL; + } + } + + if ((word32)(ekuSrc - x509->extKeyUsageSrc) + != x509->extKeyUsageSz || + i != x509->extKeyUsageCount) { + wolfSSL_sk_ASN1_OBJECT_pop_free(sk, NULL); + WOLFSSL_MSG("incorrect eku count or buffer not exhausted"); + return NULL; + } + if (c != NULL) { if (x509->extKeyUsageCount > 1) { *c = -2; @@ -2573,15 +2561,6 @@ void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509, int nid, int* c, *c = x509->extKeyUsageCrit; } } - obj = wolfSSL_ASN1_OBJECT_new(); - if (obj == NULL) { - WOLFSSL_MSG("Issue creating WOLFSSL_ASN1_OBJECT struct"); - return NULL; - } - obj->type = EXT_KEY_USAGE_OID; - obj->grp = oidCertExtType; - obj->obj = x509->extKeyUsageSrc; - obj->objSz = x509->extKeyUsageSz; } else { WOLFSSL_MSG("No Extended Key Usage set"); @@ -2628,7 +2607,7 @@ void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509, int nid, int* c, } } if (obj) { - if (wolfSSL_sk_ASN1_OBJECT_push(sk, obj) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_ASN1_OBJECT_push(sk, obj) <= 0) { WOLFSSL_MSG("Error pushing ASN1_OBJECT object onto " "stack."); goto err; @@ -2801,7 +2780,7 @@ static WOLFSSL_X509_EXTENSION* createExtFromStr(int nid, const char *value) WOLFSSL_MSG("wolfSSL_GENERAL_NAME_new error"); goto err_cleanup; } - if (wolfSSL_sk_GENERAL_NAME_push(gns, gn) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_GENERAL_NAME_push(gns, gn) <= 0) { WOLFSSL_MSG("wolfSSL_sk_GENERAL_NAME_push error"); wolfSSL_GENERAL_NAME_free(gn); goto err_cleanup; @@ -3669,6 +3648,24 @@ WOLFSSL_X509* wolfSSL_X509_REQ_d2i(WOLFSSL_X509** x509, { return d2i_X509orX509REQ(x509, in, len, 1, NULL); } + +WOLFSSL_X509* wolfSSL_d2i_X509_REQ_INFO(WOLFSSL_X509** req, + const unsigned char** in, int len) +{ + WOLFSSL_X509* ret = NULL; + WOLFSSL_ENTER("wolfSSL_d2i_X509_REQ_INFO"); + + if (in == NULL) { + WOLFSSL_MSG("NULL input for wolfSSL_d2i_X509"); + return NULL; + } + + ret = wolfSSL_X509_REQ_d2i(req, *in, len); + if (ret != NULL) { + *in += ret->derCert->length; + } + return ret; +} #endif #endif /* KEEP_PEER_CERT || SESSION_CERTS || OPENSSL_EXTRA || @@ -4464,39 +4461,9 @@ int wolfSSL_GENERAL_NAME_set0_othername(WOLFSSL_GENERAL_NAME* gen, int wolfSSL_sk_GENERAL_NAME_push(WOLFSSL_GENERAL_NAMES* sk, WOLFSSL_GENERAL_NAME* gn) { - WOLFSSL_STACK* node; WOLFSSL_ENTER("wolfSSL_sk_GENERAL_NAME_push"); - if (sk == NULL || gn == NULL) { - return WOLFSSL_FAILURE; - } - - /* no previous values in stack */ - if (sk->data.gn == NULL) { - sk->data.gn = gn; - sk->num += 1; - - return WOLFSSL_SUCCESS; - } - - /* stack already has value(s) create a new node and add more */ - node = (WOLFSSL_STACK*)XMALLOC(sizeof(WOLFSSL_STACK), NULL, - DYNAMIC_TYPE_ASN1); - if (node == NULL) { - WOLFSSL_MSG("Memory error"); - return WOLFSSL_FAILURE; - } - XMEMSET(node, 0, sizeof(WOLFSSL_STACK)); - - /* push new obj onto head of stack */ - node->type = STACK_TYPE_GEN_NAME; - node->data.gn = sk->data.gn; - node->next = sk->next; - sk->next = node; - sk->data.gn = gn; - sk->num += 1; - - return WOLFSSL_SUCCESS; + return wolfSSL_sk_push(sk, gn); } #endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */ @@ -5045,7 +5012,7 @@ int wolfSSL_GENERAL_NAME_print(WOLFSSL_BIO* out, WOLFSSL_GENERAL_NAME* gen) break; } - if (ret == WOLFSSL_FAILURE) + if (ret == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) return WOLFSSL_FAILURE; else return WOLFSSL_SUCCESS; @@ -5074,19 +5041,9 @@ int wolfSSL_sk_X509_EXTENSION_num(WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk) /* returns null on failure and pointer to internal value on success */ WOLFSSL_X509_EXTENSION* wolfSSL_sk_X509_EXTENSION_value( - WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk, int idx) + const WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk, int idx) { - WOLFSSL_STACK* ret; - - if (sk == NULL) { - return NULL; - } - - ret = wolfSSL_sk_get_node(sk, idx); - if (ret != NULL) { - return ret->data.ext; - } - return NULL; + return (WOLFSSL_X509_EXTENSION*)wolfSSL_sk_value(sk, idx); } /* frees all of the nodes and the values in stack */ @@ -5097,6 +5054,11 @@ void wolfSSL_sk_X509_EXTENSION_pop_free( wolfSSL_sk_pop_free(sk, (wolfSSL_sk_freefunc)f); } +void wolfSSL_sk_X509_EXTENSION_free(WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk) +{ + wolfSSL_sk_pop_free(sk, NULL); +} + #endif /* OPENSSL_EXTRA */ #if defined(OPENSSL_EXTRA) && !defined(NO_FILESYSTEM) && !defined(NO_STDIO_FILESYSTEM) @@ -5783,6 +5745,37 @@ int wolfSSL_X509_cmp(const WOLFSSL_X509 *a, const WOLFSSL_X509 *b) return id; } + + const WOLFSSL_ASN1_STRING *wolfSSL_X509_get0_subject_key_id( + WOLFSSL_X509 *x509) + { + WOLFSSL_ASN1_STRING* ret = NULL; + + WOLFSSL_ENTER("wolfSSL_X509_get0_subject_key_id"); + + if (x509 != NULL && x509->subjKeyIdSet) { + if (x509->subjKeyIdStr == NULL) { + x509->subjKeyIdStr = wolfSSL_ASN1_STRING_new(); + if (x509->subjKeyIdStr != NULL) { + if (wolfSSL_ASN1_STRING_set(x509->subjKeyIdStr, + x509->subjKeyId, x509->subjKeyIdSz) == 1) { + ret = x509->subjKeyIdStr; + } + else { + wolfSSL_ASN1_STRING_free(x509->subjKeyIdStr); + x509->subjKeyIdStr = NULL; + } + } + } + else { + ret = x509->subjKeyIdStr; + } + } + + WOLFSSL_LEAVE("wolfSSL_X509_get0_subject_key_id", ret != NULL); + + return ret; + } #endif /* OPENSSL_EXTRA */ #if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL) || \ @@ -6205,7 +6198,7 @@ static int X509PrintExtensions(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, int indent) return WOLFSSL_FAILURE; } - for (i = 0; (i < count) && (ret != WOLFSSL_FAILURE); i++) { + for (i = 0; (i < count) && (ret != WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); i++) { WOLFSSL_X509_EXTENSION* ext; ext = wolfSSL_X509_get_ext(x509, i); @@ -6222,7 +6215,7 @@ static int X509PrintExtensions(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, int indent) break; } if (wolfSSL_OBJ_obj2txt(buf, MAX_WIDTH, obj, 0) - == WOLFSSL_FAILURE) + == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) { ret = WOLFSSL_FAILURE; break; @@ -6285,7 +6278,7 @@ static int X509PrintExtensions(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, int indent) XMEMCPY(scratch + scratchLen, val, valLen); scratchLen += valLen; } - if (ret == WOLFSSL_FAILURE) + if (ret == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) break; if (wolfSSL_BIO_write(bio, scratch, scratchLen) <= 0) { @@ -6334,7 +6327,7 @@ static int X509PrintExtensions(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, int indent) XMEMCPY(scratch + scratchLen, val, valLen); scratchLen += valLen; } - if (ret == WOLFSSL_FAILURE) + if (ret == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) break; if (wolfSSL_BIO_write(bio, scratch, scratchLen) <= 0) { @@ -6391,9 +6384,7 @@ static int X509PrintExtensions(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, int indent) } } - if (buf != NULL) { - XFREE(buf, x509->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(buf, x509->heap, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -6434,7 +6425,7 @@ static int X509PrintSignature_ex(WOLFSSL_BIO* bio, byte* sig, } if (ret == WOLFSSL_SUCCESS) { if (wolfSSL_OBJ_obj2txt(scratch, MAX_WIDTH, obj, 0) - == WOLFSSL_FAILURE) + == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) { ret = WOLFSSL_FAILURE; } @@ -6573,9 +6564,7 @@ static int X509PrintSignature(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, return WOLFSSL_FAILURE; } - if (sig != NULL) { - XFREE(sig, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(sig, NULL, DYNAMIC_TYPE_TMP_BUFFER); } @@ -6731,7 +6720,7 @@ static int X509PrintReqAttributes(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, const byte* data; if (wolfSSL_OBJ_obj2txt(lName, lNameSz, attr->object, 0) - == WOLFSSL_FAILURE) + == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) { return WOLFSSL_FAILURE; } @@ -7191,8 +7180,7 @@ int wolfSSL_X509_LOOKUP_load_file(WOLFSSL_X509_LOOKUP* lookup, while (ret == WOLFSSL_SUCCESS); end: - if (pem != NULL) - XFREE(pem, 0, DYNAMIC_TYPE_PEM); + XFREE(pem, 0, DYNAMIC_TYPE_PEM); XFCLOSE(fp); return WS_RETURN_CODE(ret, (int)WOLFSSL_FAILURE); #else @@ -7310,8 +7298,7 @@ static int x509AddCertDir(WOLFSSL_BY_DIR *ctx, const char *argc, long argl) XSTRNCPY(entry->dir_name, buf, pathLen); entry->dir_name[pathLen] = '\0'; - if (wolfSSL_sk_BY_DIR_entry_push(ctx->dir_entry, entry) - != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_BY_DIR_entry_push(ctx->dir_entry, entry) <= 0) { wolfSSL_BY_DIR_entry_free(entry); #ifdef WOLFSSL_SMALL_STACK XFREE(buf, 0, DYNAMIC_TYPE_OPENSSL); @@ -7357,7 +7344,7 @@ static int x509AddCertDir(WOLFSSL_BY_DIR *ctx, const char *argc, long argl) int wolfSSL_X509_LOOKUP_ctrl(WOLFSSL_X509_LOOKUP *ctx, int cmd, const char *argc, long argl, char **ret) { - int lret = WOLFSSL_FAILURE; + int lret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_ENTER("wolfSSL_X509_LOOKUP_ctrl"); #if !defined(NO_FILESYSTEM) @@ -7416,7 +7403,7 @@ static int wolfssl_x509_make_der(WOLFSSL_X509* x509, int req, */ static int loadX509orX509REQFromBio(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, int req) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); /* Get large buffer to hold cert der */ int derSz = X509_BUFFER_SZ; #ifdef WOLFSSL_SMALL_STACK @@ -7793,8 +7780,7 @@ static void *wolfSSL_d2i_X509_fp_ex(XFILE file, void **x509, int type) } #endif _exit: - if (fileBuffer != NULL) - XFREE(fileBuffer, NULL, DYNAMIC_TYPE_FILE); + XFREE(fileBuffer, NULL, DYNAMIC_TYPE_FILE); return newx509; } @@ -7969,9 +7955,7 @@ WOLFSSL_API WOLFSSL_X509_CRL *wolfSSL_d2i_X509_CRL_bio(WOLFSSL_BIO *bp, } } - if (der != NULL) { - XFREE(der, 0, DYNAMIC_TYPE_DER); - } + XFREE(der, 0, DYNAMIC_TYPE_DER); return crl; } @@ -7993,7 +7977,7 @@ WOLFSSL_API int wolfSSL_X509_load_crl_file(WOLFSSL_X509_LOOKUP *ctx, const char *file, int type) { #ifndef NO_BIO - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); int count = 0; WOLFSSL_BIO *bio = NULL; WOLFSSL_X509_CRL *crl = NULL; @@ -8027,7 +8011,7 @@ WOLFSSL_API int wolfSSL_X509_load_crl_file(WOLFSSL_X509_LOOKUP *ctx, } ret = wolfSSL_X509_STORE_add_crl(ctx->store, crl); - if (ret == WOLFSSL_FAILURE) { + if (ret == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) { WOLFSSL_MSG("Adding crl failed"); break; } @@ -8044,7 +8028,7 @@ WOLFSSL_API int wolfSSL_X509_load_crl_file(WOLFSSL_X509_LOOKUP *ctx, WOLFSSL_MSG("Load crl failed"); } else { ret = wolfSSL_X509_STORE_add_crl(ctx->store, crl); - if (ret == WOLFSSL_FAILURE) { + if (ret == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) { WOLFSSL_MSG("Adding crl failed"); } else { ret = 1;/* handled a file */ @@ -8060,7 +8044,7 @@ WOLFSSL_API int wolfSSL_X509_load_crl_file(WOLFSSL_X509_LOOKUP *ctx, WOLFSSL_LEAVE("wolfSSL_X509_load_crl_file", ret); return ret; #else - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); int count = 0; XFILE fp; WOLFSSL_X509_CRL *crl = NULL; @@ -8084,7 +8068,7 @@ WOLFSSL_API int wolfSSL_X509_load_crl_file(WOLFSSL_X509_LOOKUP *ctx, } ret = wolfSSL_X509_STORE_add_crl(ctx->store, crl); - if (ret == WOLFSSL_FAILURE) { + if (ret == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) { WOLFSSL_MSG("Adding crl failed"); break; } @@ -8103,7 +8087,7 @@ WOLFSSL_API int wolfSSL_X509_load_crl_file(WOLFSSL_X509_LOOKUP *ctx, } else { ret = wolfSSL_X509_STORE_add_crl(ctx->store, crl); - if (ret == WOLFSSL_FAILURE) { + if (ret == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) { WOLFSSL_MSG("Adding crl failed"); } else { @@ -8332,9 +8316,7 @@ static int X509CRLPrintSignature(WOLFSSL_BIO* bio, WOLFSSL_X509_CRL* crl, return WOLFSSL_FAILURE; } - if (sig != NULL) { - XFREE(sig, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(sig, NULL, DYNAMIC_TYPE_TMP_BUFFER); } @@ -8710,8 +8692,7 @@ WOLFSSL_X509_VERIFY_PARAM* wolfSSL_X509_VERIFY_PARAM_new(void) void wolfSSL_X509_VERIFY_PARAM_free(WOLFSSL_X509_VERIFY_PARAM *param) { - if (param != NULL) - XFREE(param, NULL, DYNAMIC_TYPE_OPENSSL); + XFREE(param, NULL, DYNAMIC_TYPE_OPENSSL); } @@ -8719,7 +8700,7 @@ void wolfSSL_X509_VERIFY_PARAM_free(WOLFSSL_X509_VERIFY_PARAM *param) int wolfSSL_X509_VERIFY_PARAM_set_flags(WOLFSSL_X509_VERIFY_PARAM *param, unsigned long flags) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); if (param != NULL) { param->flags |= flags; @@ -8745,7 +8726,7 @@ int wolfSSL_X509_VERIFY_PARAM_get_flags(WOLFSSL_X509_VERIFY_PARAM *param) int wolfSSL_X509_VERIFY_PARAM_clear_flags(WOLFSSL_X509_VERIFY_PARAM *param, unsigned long flags) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); if (param != NULL) { param->flags &= ~flags; @@ -8803,7 +8784,7 @@ const WOLFSSL_X509_VERIFY_PARAM *wolfSSL_X509_VERIFY_PARAM_lookup(const char *na int wolfSSL_X509_VERIFY_PARAM_inherit(WOLFSSL_X509_VERIFY_PARAM *to, const WOLFSSL_X509_VERIFY_PARAM *from) { - int ret = WOLFSSL_FAILURE; + int ret = WOLFSSL_SUCCESS; int isOverWrite = 0; int isDefault = 0; unsigned int flags; @@ -8905,7 +8886,7 @@ int wolfSSL_X509_VERIFY_PARAM_set1_host(WOLFSSL_X509_VERIFY_PARAM* pParam, int wolfSSL_X509_VERIFY_PARAM_set1(WOLFSSL_X509_VERIFY_PARAM *to, const WOLFSSL_X509_VERIFY_PARAM *from) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); unsigned int _inherit_flags; if (!to) { @@ -8947,7 +8928,7 @@ void wolfSSL_X509_VERIFY_PARAM_set_hostflags(WOLFSSL_X509_VERIFY_PARAM* param, int wolfSSL_X509_VERIFY_PARAM_set1_ip_asc(WOLFSSL_X509_VERIFY_PARAM *param, const char *ipasc) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); if (param != NULL) { if (ipasc == NULL) { @@ -8972,7 +8953,7 @@ int wolfSSL_X509_VERIFY_PARAM_set1_ip_asc(WOLFSSL_X509_VERIFY_PARAM *param, int wolfSSL_X509_VERIFY_PARAM_set1_ip(WOLFSSL_X509_VERIFY_PARAM* param, const unsigned char* ip, size_t iplen) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); #ifndef NO_FILESYSTEM char* buf = NULL; char* p = NULL; @@ -9108,7 +9089,7 @@ int wolfSSL_X509_cmp_current_time(const WOLFSSL_ASN1_TIME* asnTime) */ int wolfSSL_X509_cmp_time(const WOLFSSL_ASN1_TIME* asnTime, time_t* cmpTime) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); time_t tmpTime, *pTime = &tmpTime; struct tm ts, *tmpTs, *ct; #if defined(NEED_TMP_TIME) @@ -9355,6 +9336,110 @@ int wolfSSL_X509_ALGOR_set0(WOLFSSL_X509_ALGOR *algor, WOLFSSL_ASN1_OBJECT *aobj return WOLFSSL_SUCCESS; } +/** + * Serialize object to DER encoding + * + * @param alg Object to serialize + * @param pp Output + * @return Length on success + * Negative number on failure + */ +int wolfSSL_i2d_X509_ALGOR(const WOLFSSL_X509_ALGOR* alg, + unsigned char** pp) +{ + int len; + word32 oid = 0; + word32 idx = 0; + unsigned char* buf = NULL; + + if (alg == NULL || alg->algorithm == 0) { + WOLFSSL_MSG("alg is NULL or algorithm not set"); + return WOLFSSL_FATAL_ERROR; + } + + if (GetObjectId(alg->algorithm->obj, &idx, &oid, + (word32)alg->algorithm->grp, alg->algorithm->objSz) < 0) { + WOLFSSL_MSG("Issue getting OID of object"); + return WOLFSSL_FATAL_ERROR; + } + + len = (int)SetAlgoID((int)oid, NULL, alg->algorithm->grp, 0); + if (len == 0) { + WOLFSSL_MSG("SetAlgoID error"); + return WOLFSSL_FATAL_ERROR; + } + + if (pp != NULL) { + if (*pp != NULL) + buf = *pp; + else { + buf = (byte*)XMALLOC((size_t)len, NULL, DYNAMIC_TYPE_ASN1); + if (buf == NULL) + return WOLFSSL_FATAL_ERROR; + } + + len = (int)SetAlgoID((int)oid, buf, alg->algorithm->grp, 0); + if (len == 0) { + WOLFSSL_MSG("SetAlgoID error"); + if (*pp == NULL) + XFREE(buf, NULL, DYNAMIC_TYPE_ASN1); + return WOLFSSL_FATAL_ERROR; + } + + if (*pp != NULL) + *pp += len; + else + *pp = buf; + } + + return len; +} + +WOLFSSL_X509_ALGOR* wolfSSL_d2i_X509_ALGOR(WOLFSSL_X509_ALGOR** out, + const byte** src, long len) +{ + WOLFSSL_X509_ALGOR* ret = NULL; + word32 idx = 0; + word32 oid = 0; + int grp; + + WOLFSSL_ENTER("wolfSSL_d2i_X509_ALGOR"); + + if (src == NULL || *src == NULL || len == 0) + return NULL; + + if (GetAlgoId(*src, &idx, &oid, oidIgnoreType, (word32)len) != 0) + return NULL; + + /* Try to guess the type */ + for (grp = 0; grp < oidIgnoreType; grp++) { + word32 oidSz; + if (OidFromId(oid, (word32)grp, &oidSz) != NULL) + break; + } + if (grp == oidIgnoreType) + return NULL; + + ret = wolfSSL_X509_ALGOR_new(); + if (ret == NULL) + return NULL; + + ret->algorithm = wolfSSL_OBJ_nid2obj(oid2nid(oid, grp)); + if (ret->algorithm == NULL) { + wolfSSL_X509_ALGOR_free(ret); + return NULL; + } + *src += idx; + + if (out != NULL) { + if (*out != NULL) + wolfSSL_X509_ALGOR_free(*out); + *out = ret; + } + + return ret; +} + /** * Allocate a new WOLFSSL_X509_PUBKEY object. * @@ -9761,7 +9846,7 @@ WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_chain_up_ref( static int CopyX509NameToCert(WOLFSSL_X509_NAME* n, byte* out) { unsigned char* der = NULL; - int length = BAD_FUNC_ARG, ret; + int length = WC_NO_ERR_TRACE(BAD_FUNC_ARG), ret; word32 idx = 0; ret = wolfSSL_i2d_X509_NAME(n, &der); @@ -9779,8 +9864,7 @@ WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_chain_up_ref( XMEMCPY(out, der + idx, length); } - if (der != NULL) - XFREE(der, NULL, DYNAMIC_TYPE_OPENSSL); + XFREE(der, NULL, DYNAMIC_TYPE_OPENSSL); return length; } @@ -9829,7 +9913,7 @@ WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_chain_up_ref( #if defined(OPENSSL_ALL) idx = wolfSSL_X509_REQ_get_attr_by_NID(req, NID_pkcs9_unstructuredName, -1); - if (idx != WOLFSSL_FATAL_ERROR) { + if (idx != WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) { WOLFSSL_X509_ATTRIBUTE *attr; attr = wolfSSL_X509_REQ_get_attr(req, idx); if (attr != NULL) { @@ -10113,7 +10197,9 @@ WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_chain_up_ref( int sigType = WOLFSSL_FAILURE; /* Convert key type and hash algorithm to a signature algorithm */ - if (wolfSSL_EVP_get_hashinfo(md, &hashType, NULL) == WOLFSSL_FAILURE) { + if (wolfSSL_EVP_get_hashinfo(md, &hashType, NULL) + == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) + { return WOLFSSL_FAILURE; } @@ -10208,7 +10294,7 @@ WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_chain_up_ref( static int wolfssl_x509_make_der(WOLFSSL_X509* x509, int req, unsigned char* der, int* derSz, int includeSig) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); int totalLen; Cert* cert = NULL; void* key = NULL; @@ -10652,7 +10738,7 @@ WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_chain_up_ref( WOLFSSL_ENTER("wolfSSL_X509_resign_cert"); sigType = wolfSSL_sigTypeFromPKEY(md, pkey); - if (sigType == WOLFSSL_FAILURE) { + if (sigType == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) { WOLFSSL_MSG("Error getting signature type from pkey"); return WOLFSSL_FATAL_ERROR; } @@ -10782,8 +10868,7 @@ WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_chain_up_ref( } out: - if (der) - XFREE(der, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(der, NULL, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -11412,9 +11497,7 @@ int wolfSSL_i2d_X509_NAME(WOLFSSL_X509_NAME* name, unsigned char** out) } err: - if(pem != NULL) { - XFREE(pem, 0, DYNAMIC_TYPE_PEM); - } + XFREE(pem, 0, DYNAMIC_TYPE_PEM); if(der != NULL) { FreeDer(&der); } @@ -11511,8 +11594,7 @@ int wolfSSL_i2d_X509_NAME(WOLFSSL_X509_NAME* name, unsigned char** out) return newx509; err_exit: - if (pem != NULL) - XFREE(pem, NULL, DYNAMIC_TYPE_PEM); + XFREE(pem, NULL, DYNAMIC_TYPE_PEM); if (der != NULL) FreeDer(&der); @@ -11777,8 +11859,7 @@ int wolfSSL_i2d_X509_NAME(WOLFSSL_X509_NAME* name, unsigned char** out) #endif return WOLFSSL_SUCCESS; err: - if (pem) - XFREE(pem, 0, DYNAMIC_TYPE_PEM); + XFREE(pem, 0, DYNAMIC_TYPE_PEM); #ifdef HAVE_CRL if (der) FreeDer(&der); @@ -11868,8 +11949,7 @@ int wolfSSL_i2d_X509_NAME(WOLFSSL_X509_NAME* name, unsigned char** out) ret = MEMORY_E; break; } - if (wolfSSL_sk_X509_INFO_push(localSk, current) != - WOLFSSL_SUCCESS) { + if (wolfSSL_sk_X509_INFO_push(localSk, current) <= 0) { wolfSSL_X509_INFO_free(current); current = NULL; ret = WOLFSSL_FAILURE; @@ -12246,8 +12326,7 @@ WOLFSSL_ASN1_OBJECT* wolfSSL_X509_NAME_ENTRY_get_object( if (name->entries == NULL) { name->entries = wolfSSL_sk_X509_NAME_new(NULL); } - if (wolfSSL_sk_X509_NAME_ENTRY_push(name->entries, current - ) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_X509_NAME_ENTRY_push(name->entries, current) <= 0) { ret = WOLFSSL_FAILURE; } #endif @@ -12275,7 +12354,7 @@ WOLFSSL_ASN1_OBJECT* wolfSSL_X509_NAME_ENTRY_get_object( const unsigned char *bytes, int len, int loc, int set) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); int nid; WOLFSSL_X509_NAME_ENTRY* entry; @@ -12579,8 +12658,7 @@ int wolfSSL_PEM_write_bio_X509(WOLFSSL_BIO *bio, WOLFSSL_X509 *cert) return WOLFSSL_SUCCESS; error: - if (pem) - XFREE(pem, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(pem, NULL, DYNAMIC_TYPE_TMP_BUFFER); return WOLFSSL_FAILURE; } #endif /* WOLFSSL_CERT_GEN */ @@ -12879,7 +12957,7 @@ WOLF_STACK_OF(WOLFSSL_X509_NAME) *wolfSSL_dup_CA_list( for (i = 0; i < num; i++) { name = wolfSSL_X509_NAME_dup(wolfSSL_sk_X509_NAME_value(sk, i)); - if (name == NULL || WOLFSSL_SUCCESS != wolfSSL_sk_X509_NAME_push(copy, name)) { + if (name == NULL || wolfSSL_sk_X509_NAME_push(copy, name) <= 0) { WOLFSSL_MSG("Memory error"); wolfSSL_sk_X509_NAME_pop_free(copy, wolfSSL_X509_NAME_free); wolfSSL_X509_NAME_free(name); @@ -13277,6 +13355,28 @@ void wolfSSL_X509_OBJECT_free(WOLFSSL_X509_OBJECT *obj) XFREE(obj, NULL, DYNAMIC_TYPE_OPENSSL); } } + +WOLFSSL_X509_OBJECT *wolfSSL_X509_OBJECT_retrieve_by_subject( + WOLF_STACK_OF(WOLFSSL_X509_OBJECT) *sk, + WOLFSSL_X509_LOOKUP_TYPE type, + WOLFSSL_X509_NAME *name) +{ + int i; + + WOLFSSL_ENTER("wolfSSL_X509_OBJECT_retrieve_by_subject"); + + if (sk == NULL || name == NULL) + return NULL; + + for (i = 0; i < wolfSSL_sk_X509_OBJECT_num(sk); i++) { + WOLFSSL_X509_OBJECT* obj = (WOLFSSL_X509_OBJECT *)wolfSSL_sk_X509_OBJECT_value(sk, i); + if (obj != NULL && obj->type == type && + wolfSSL_X509_NAME_cmp( + wolfSSL_X509_get_subject_name(obj->data.x509), name) == 0) + return obj; + } + return NULL; +} #endif /* OPENSSL_ALL */ #ifndef NO_WOLFSSL_STUB @@ -13476,7 +13576,7 @@ int wolfSSL_X509_check_host(WOLFSSL_X509 *x, const char *chk, size_t chklen, int wolfSSL_X509_check_ip_asc(WOLFSSL_X509 *x, const char *ipasc, unsigned int flags) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); #ifdef WOLFSSL_SMALL_STACK DecodedCert *dCert = NULL; #else @@ -13525,8 +13625,7 @@ int wolfSSL_X509_check_ip_asc(WOLFSSL_X509 *x, const char *ipasc, } #ifdef WOLFSSL_SMALL_STACK - if (dCert != NULL) - XFREE(dCert, x->heap, DYNAMIC_TYPE_DCERT); + XFREE(dCert, x->heap, DYNAMIC_TYPE_DCERT); #endif return ret; @@ -14192,7 +14291,7 @@ void wolfSSL_X509V3_set_ctx(WOLFSSL_X509V3_CTX* ctx, WOLFSSL_X509* issuer, int wolfSSL_i2d_X509_REQ(WOLFSSL_X509* req, unsigned char** out) { int derSz = 0; - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_BIO* bio = NULL; WOLFSSL_ENTER("wolfSSL_i2d_X509_REQ"); @@ -14304,7 +14403,7 @@ int wolfSSL_X509_REQ_sign_ctx(WOLFSSL_X509 *req, static int regenX509REQDerBuffer(WOLFSSL_X509* x509) { int derSz = X509_BUFFER_SZ; - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); #ifdef WOLFSSL_SMALL_STACK byte* der; der = (byte*)XMALLOC(derSz, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -14501,8 +14600,10 @@ int wolfSSL_X509_REQ_add1_attr_by_NID(WOLFSSL_X509 *req, req->reqAttributes->type = STACK_TYPE_X509_REQ_ATTR; } } - if (req->reqAttributes->type == STACK_TYPE_X509_REQ_ATTR) - ret = wolfSSL_sk_push(req->reqAttributes, attr); + if (req->reqAttributes->type == STACK_TYPE_X509_REQ_ATTR) { + ret = wolfSSL_sk_push(req->reqAttributes, attr) > 0 + ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE; + } else ret = WOLFSSL_FAILURE; if (ret != WOLFSSL_SUCCESS) diff --git a/src/x509_str.c b/src/x509_str.c index bfdaf413dc..9b90c4b72c 100644 --- a/src/x509_str.c +++ b/src/x509_str.c @@ -76,10 +76,8 @@ void wolfSSL_X509_STORE_CTX_free(WOLFSSL_X509_STORE_CTX* ctx) #endif #ifdef OPENSSL_EXTRA - if (ctx->param != NULL) { - XFREE(ctx->param, ctx->heap, DYNAMIC_TYPE_OPENSSL); - ctx->param = NULL; - } + XFREE(ctx->param, ctx->heap, DYNAMIC_TYPE_OPENSSL); + ctx->param = NULL; #endif XFREE(ctx, ctx->heap, DYNAMIC_TYPE_X509_CTX); @@ -186,10 +184,8 @@ void wolfSSL_X509_STORE_CTX_cleanup(WOLFSSL_X509_STORE_CTX* ctx) { if (ctx != NULL) { - if (ctx->param != NULL) { - XFREE(ctx->param, ctx->heap, DYNAMIC_TYPE_OPENSSL); - ctx->param = NULL; - } + XFREE(ctx->param, ctx->heap, DYNAMIC_TYPE_OPENSSL); + ctx->param = NULL; wolfSSL_X509_STORE_CTX_init(ctx, NULL, NULL, NULL); } @@ -225,6 +221,10 @@ int GetX509Error(int e) case WC_NO_ERR_TRACE(ASN_SIG_HASH_E): case WC_NO_ERR_TRACE(ASN_SIG_KEY_E): return WOLFSSL_X509_V_ERR_CERT_SIGNATURE_FAILURE; + /* We can't disambiguate if its the before or after date that caused + * the error. Assume expired. */ + case WC_NO_ERR_TRACE(CRL_CERT_DATE_ERR): + return X509_V_ERR_CRL_HAS_EXPIRED; case WC_NO_ERR_TRACE(CRL_CERT_REVOKED): return WOLFSSL_X509_V_ERR_CERT_REVOKED; case WC_NO_ERR_TRACE(CRL_MISSING): @@ -269,6 +269,10 @@ int wolfSSL_X509_verify_cert(WOLFSSL_X509_STORE_CTX* ctx) ctx->current_cert->derCert->length, WOLFSSL_FILETYPE_ASN1); SetupStoreCtxError(ctx, ret); + #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) + if (ctx->store && ctx->store->verify_cb) + ret = ctx->store->verify_cb(ret >= 0 ? 1 : 0, ctx) == 1 ? 0 : ret; + #endif #ifndef NO_ASN_TIME if (ret != WC_NO_ERR_TRACE(ASN_BEFORE_DATE_E) && @@ -289,14 +293,14 @@ int wolfSSL_X509_verify_cert(WOLFSSL_X509_STORE_CTX* ctx) ret = ASN_BEFORE_DATE_E; } SetupStoreCtxError(ctx, ret); + #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) + if (ctx->store && ctx->store->verify_cb) + ret = ctx->store->verify_cb(ret >= 0 ? 1 : 0, + ctx) == 1 ? 0 : -1; + #endif } #endif - #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) - if (ctx->store && ctx->store->verify_cb) - ret = ctx->store->verify_cb(ret >= 0 ? 1 : 0, ctx) == 1 ? 0 : -1; - #endif - return ret >= 0 ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE; } return WOLFSSL_FATAL_ERROR; @@ -541,7 +545,7 @@ WOLFSSL_STACK* wolfSSL_X509_STORE_CTX_get_chain(WOLFSSL_X509_STORE_CTX* ctx) * signed and that a issuer was found */ if (issuer != NULL && wolfSSL_X509_NAME_cmp(&x509->issuer, &x509->subject) != 0) { - if (wolfSSL_sk_X509_push(sk, issuer) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_X509_push(sk, issuer) <= 0) { WOLFSSL_MSG("Unable to load CA x509 into stack"); error = 1; } @@ -573,7 +577,7 @@ WOLFSSL_STACK* wolfSSL_X509_STORE_CTX_get_chain(WOLFSSL_X509_STORE_CTX* ctx) break; } - if (wolfSSL_sk_X509_push(sk, x509) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_X509_push(sk, x509) <= 0) { WOLFSSL_MSG("Unable to load x509 into stack"); wolfSSL_X509_free(x509); error = 1; @@ -692,13 +696,13 @@ WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_STORE_get1_certs( if (certToFilterName != NULL) { if (wolfSSL_X509_NAME_cmp(certToFilterName, name) == 0) { filteredCert = wolfSSL_X509_dup(certToFilter->data.x509); - if (filteredCert == NULL) { + if (filteredCert == NULL || + wolfSSL_sk_X509_push(filteredCerts, filteredCert) + <= 0) { err = 1; + wolfSSL_X509_free(filteredCert); break; } - else { - wolfSSL_sk_X509_push(filteredCerts, filteredCert); - } } } certToFilter = certToFilter->next; @@ -851,10 +855,8 @@ void wolfSSL_X509_STORE_free(WOLFSSL_X509_STORE* store) } #endif #if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL) - if (store->param != NULL) { - XFREE(store->param, NULL, DYNAMIC_TYPE_OPENSSL); - store->param = NULL; - } + XFREE(store->param, NULL, DYNAMIC_TYPE_OPENSSL); + store->param = NULL; if (store->lookup.dirs != NULL) { #if defined(OPENSSL_ALL) && !defined(NO_FILESYSTEM) && !defined(NO_WOLFSSL_DIR) @@ -1009,7 +1011,7 @@ WOLFSSL_X509_LOOKUP* wolfSSL_X509_STORE_add_lookup(WOLFSSL_X509_STORE* store, int wolfSSL_X509_STORE_add_cert(WOLFSSL_X509_STORE* store, WOLFSSL_X509* x509) { - int result = WOLFSSL_FATAL_ERROR; + int result = WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR); WOLFSSL_ENTER("wolfSSL_X509_STORE_add_cert"); if (store != NULL && store->cm != NULL && x509 != NULL @@ -1254,7 +1256,7 @@ WOLFSSL_STACK* wolfSSL_X509_STORE_GetCerts(WOLFSSL_X509_STORE_CTX* s) if (CopyDecodedToX509(x509, dCert) == 0) { - if (wolfSSL_sk_X509_push(sk, x509) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_X509_push(sk, x509) <= 0) { WOLFSSL_MSG("Unable to load x509 into stack"); wolfSSL_X509_free(x509); goto error; @@ -1333,7 +1335,7 @@ WOLF_STACK_OF(WOLFSSL_X509_OBJECT)* wolfSSL_X509_STORE_get0_objects( WOLFSSL_MSG("wolfSSL_X509_OBJECT_new error"); goto err_cleanup; } - if (wolfSSL_sk_X509_OBJECT_push(ret, obj) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_X509_OBJECT_push(ret, obj) <= 0) { WOLFSSL_MSG("wolfSSL_sk_X509_OBJECT_push error"); wolfSSL_X509_OBJECT_free(obj); goto err_cleanup; @@ -1351,7 +1353,7 @@ WOLF_STACK_OF(WOLFSSL_X509_OBJECT)* wolfSSL_X509_STORE_get0_objects( WOLFSSL_MSG("wolfSSL_X509_OBJECT_new error"); goto err_cleanup; } - if (wolfSSL_sk_X509_OBJECT_push(ret, obj) != WOLFSSL_SUCCESS) { + if (wolfSSL_sk_X509_OBJECT_push(ret, obj) <= 0) { WOLFSSL_MSG("wolfSSL_sk_X509_OBJECT_push error"); wolfSSL_X509_OBJECT_free(obj); goto err_cleanup; @@ -1385,6 +1387,16 @@ WOLFSSL_X509_VERIFY_PARAM *wolfSSL_X509_STORE_get0_param( return NULL; return ctx->param; } + +#ifdef OPENSSL_EXTRA +int wolfSSL_X509_STORE_set1_param(WOLFSSL_X509_STORE *ctx, + WOLFSSL_X509_VERIFY_PARAM *param) +{ + if (ctx == NULL) + return WOLFSSL_FAILURE; + return wolfSSL_X509_VERIFY_PARAM_set1(ctx->param, param); +} +#endif #endif /******************************************************************************* diff --git a/sslSniffer/sslSnifferTest/snifftest.c b/sslSniffer/sslSnifferTest/snifftest.c index d39020a08e..0cfb388597 100644 --- a/sslSniffer/sslSnifferTest/snifftest.c +++ b/sslSniffer/sslSnifferTest/snifftest.c @@ -677,10 +677,8 @@ static void ssl_Free_SnifferWorker(SnifferWorker* worker) { wm_SemFree(&worker->sem); - if (worker->head) { - XFREE(worker->head, NULL, DYNAMIC_TYPE_TMP_BUFFER); - worker->head = NULL; - } + XFREE(worker->head, NULL, DYNAMIC_TYPE_TMP_BUFFER); + worker->head = NULL; } static int SnifferWorkerPacketAdd(SnifferWorker* worker, int lastRet, diff --git a/support/gen-debug-trace-error-codes.sh b/support/gen-debug-trace-error-codes.sh index 1aba489d9e..0b181ae38e 100755 --- a/support/gen-debug-trace-error-codes.sh +++ b/support/gen-debug-trace-error-codes.sh @@ -12,10 +12,18 @@ BEGIN { print("#undef WOLFSSL_DEBUG_TRACE_ERROR_CODES_H") >> "wolfssl/debug-untrace-error-codes.h"; } { - if (match($0, "^[[:space:]]+([A-Z][A-Z0-9_]+)[[:space:]]*=[[:space:]]*(-[0-9]+)[,[:space:]]", errcode_a)) { + if (match($0, "^[[:space:]]+([A-Z][A-Z0-9_]+)[[:space:]]*=[[:space:]]*(-[0-9]+)([,[:space:]]|$)")) { + + # for mawkward compatibility -- gawk allows errcode_a as the 3rd arg to match(). + gsub("^[[:space:]]+", "", $0); + split($0, errcode_a, "[[:space:]=,]+"); + if ((errcode_a[1] == "MIN_CODE_E") || + (errcode_a[1] == "MAX_CODE_E") || + (errcode_a[1] == "WC_FIRST_E") || (errcode_a[1] == "WC_LAST_E") || - (errcode_a[1] == "MAX_CODE_E")) + (errcode_a[1] == "WOLFSSL_FIRST_E") || + (errcode_a[1] == "WOLFSSL_LAST_E")) { next; } diff --git a/tests/api.c b/tests/api.c index 1df7d0e6ca..c9264fbe4b 100644 --- a/tests/api.c +++ b/tests/api.c @@ -716,14 +716,14 @@ static int test_wc_LoadStaticMemory_ex(void) /* Pass in zero everything. */ ExpectIntEQ(wc_LoadStaticMemory_ex(NULL, 0, NULL, NULL, NULL, 0, 0, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Set the heap pointer to NULL. */ ExpectIntEQ(wc_LoadStaticMemory_ex(NULL, WOLFMEM_DEF_BUCKETS, sizeList, distList, staticMemory, (word32)sizeof(staticMemory), 0, 1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Set other pointer values to NULL one at a time. */ heap = NULL; @@ -731,19 +731,19 @@ static int test_wc_LoadStaticMemory_ex(void) WOLFMEM_DEF_BUCKETS, NULL, distList, staticMemory, (word32)sizeof(staticMemory), 0, 1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); heap = NULL; ExpectIntEQ(wc_LoadStaticMemory_ex(&heap, WOLFMEM_DEF_BUCKETS, sizeList, NULL, staticMemory, (word32)sizeof(staticMemory), 0, 1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); heap = NULL; ExpectIntEQ(wc_LoadStaticMemory_ex(&heap, WOLFMEM_DEF_BUCKETS, sizeList, distList, NULL, (word32)sizeof(staticMemory), 0, 1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Set the size of the static buffer to 0. */ heap = NULL; @@ -751,7 +751,7 @@ static int test_wc_LoadStaticMemory_ex(void) WOLFMEM_DEF_BUCKETS, sizeList, distList, staticMemory, 0, 0, 1), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); /* Set the size of the static buffer to one less than minimum allowed. */ heap = NULL; @@ -760,7 +760,7 @@ static int test_wc_LoadStaticMemory_ex(void) staticMemory, (word32)(sizeof(WOLFSSL_HEAP) + sizeof(WOLFSSL_HEAP_HINT)) - 1, 0, 1), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); /* Set the size of the static buffer to exactly the minimum size. */ heap = NULL; @@ -1782,13 +1782,13 @@ static int test_wolfSSL_CTX_use_certificate_ASN1(void) /* Failure cases. */ ExpectIntEQ(SSL_CTX_use_certificate_ASN1(NULL, 0, NULL ), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(SSL_CTX_use_certificate_ASN1(ctx , 0, NULL ), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(SSL_CTX_use_certificate_ASN1(NULL, 0, server_cert_der_2048), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(SSL_CTX_use_certificate_ASN1(ctx , 0, server_cert_der_2048), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(SSL_CTX_use_certificate_ASN1(ctx, sizeof_server_cert_der_2048, server_cert_der_2048), WOLFSSL_SUCCESS); @@ -1815,13 +1815,13 @@ static int test_wolfSSL_CTX_use_certificate_buffer(void) /* Invalid parameters. */ ExpectIntEQ(wolfSSL_CTX_use_certificate_buffer(NULL, NULL, 0, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_use_certificate_buffer(ctx, NULL, 0, - WOLFSSL_FILETYPE_ASN1), ASN_PARSE_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_PARSE_E)); ExpectIntEQ(wolfSSL_CTX_use_certificate_buffer(NULL, server_cert_der_2048, - 0, WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + 0, WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_use_certificate_buffer(ctx, server_cert_der_2048, 0, - WOLFSSL_FILETYPE_ASN1), ASN_PARSE_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_PARSE_E)); ExpectIntEQ(wolfSSL_CTX_use_certificate_buffer(ctx, server_cert_der_2048, sizeof_server_cert_der_2048, @@ -1846,13 +1846,13 @@ static int test_wolfSSL_use_certificate_buffer(void) /* Invalid parameters. */ ExpectIntEQ(wolfSSL_use_certificate_buffer(NULL, NULL, 0, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_use_certificate_buffer(ssl, NULL, 0, - WOLFSSL_FILETYPE_ASN1), ASN_PARSE_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_PARSE_E)); ExpectIntEQ(wolfSSL_use_certificate_buffer(NULL, client_cert_der_2048, 0, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_use_certificate_buffer(ssl, client_cert_der_2048, 0, - WOLFSSL_FILETYPE_ASN1), ASN_PARSE_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_PARSE_E)); ExpectIntEQ(wolfSSL_use_certificate_buffer(ssl, client_cert_der_2048, sizeof_client_cert_der_2048, @@ -1908,19 +1908,19 @@ static int test_wolfSSL_CTX_use_RSAPrivateKey_file(void) /* invalid context */ ExpectIntEQ(wolfSSL_CTX_use_RSAPrivateKey_file(NULL, svrKeyFile, - WOLFSSL_FILETYPE_PEM), WOLFSSL_FAILURE); + WOLFSSL_FILETYPE_PEM), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* invalid key file */ ExpectIntEQ(wolfSSL_CTX_use_RSAPrivateKey_file(ctx, bogusFile, - WOLFSSL_FILETYPE_PEM), WOLFSSL_FAILURE); + WOLFSSL_FILETYPE_PEM), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* invalid key type */ ExpectIntEQ(wolfSSL_CTX_use_RSAPrivateKey_file(ctx, svrKeyFile, 9999), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* success */ #ifdef NO_RSA /* rsa needed */ ExpectIntEQ(wolfSSL_CTX_use_RSAPrivateKey_file(ctx, svrKeyFile, - WOLFSSL_FILETYPE_PEM), WOLFSSL_FAILURE); + WOLFSSL_FILETYPE_PEM), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #else /* success */ ExpectIntEQ(wolfSSL_CTX_use_RSAPrivateKey_file(ctx, svrKeyFile, @@ -1945,19 +1945,19 @@ static int test_wolfSSL_use_RSAPrivateKey_file(void) /* invalid context */ ExpectIntEQ(wolfSSL_use_RSAPrivateKey_file(NULL, svrKeyFile, - WOLFSSL_FILETYPE_PEM), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_PEM), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* invalid key file */ ExpectIntEQ(wolfSSL_use_RSAPrivateKey_file(ssl, bogusFile, - WOLFSSL_FILETYPE_PEM), WOLFSSL_FAILURE); + WOLFSSL_FILETYPE_PEM), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* invalid key type */ ExpectIntEQ(wolfSSL_use_RSAPrivateKey_file(ssl, svrKeyFile, 9999), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* success */ #ifdef NO_RSA /* rsa needed */ ExpectIntEQ(wolfSSL_use_RSAPrivateKey_file(ssl, svrKeyFile, - WOLFSSL_FILETYPE_PEM), WOLFSSL_FAILURE); + WOLFSSL_FILETYPE_PEM), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #else /* success */ ExpectIntEQ(wolfSSL_use_RSAPrivateKey_file(ssl, svrKeyFile, @@ -1984,11 +1984,11 @@ static int test_wolfSSL_CTX_use_PrivateKey(void) ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_server_method())); ExpectNotNull(pkey = wolfSSL_EVP_PKEY_new()); - ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(NULL, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(NULL, pkey), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(NULL, pkey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* No data. */ - ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, pkey), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, pkey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); wolfSSL_EVP_PKEY_free(pkey); pkey = NULL; @@ -2000,7 +2000,7 @@ static int test_wolfSSL_CTX_use_PrivateKey(void) #if defined(WOLFSSL_KEY_GEN) ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, pkey), WOLFSSL_SUCCESS); #else - ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, pkey), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, pkey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif wolfSSL_EVP_PKEY_free(pkey); pkey = NULL; @@ -2013,9 +2013,9 @@ static int test_wolfSSL_CTX_use_PrivateKey(void) #if !defined(HAVE_SELFTEST) && (defined(WOLFSSL_KEY_GEN) || \ defined(WOLFSSL_CERT_GEN)) /* Not supported in ProcessBuffer. */ - ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, pkey), WOLFSSL_BAD_FILE); + ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, pkey), WC_NO_ERR_TRACE(WOLFSSL_BAD_FILE)); #else - ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, pkey), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, pkey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif wolfSSL_EVP_PKEY_free(pkey); pkey = NULL; @@ -2027,7 +2027,7 @@ static int test_wolfSSL_CTX_use_PrivateKey(void) ExpectNotNull(pkey = d2i_PrivateKey(EVP_PKEY_DH, NULL, &p, sizeof_dh_ffdhe_statickey_der_2048)); /* Not supported. */ - ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, pkey), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, pkey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); wolfSSL_EVP_PKEY_free(pkey); pkey = NULL; #endif @@ -2042,7 +2042,7 @@ static int test_wolfSSL_CTX_use_PrivateKey(void) #endif ExpectNotNull(pkey = wolfSSL_EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, (unsigned char*)"01234567012345670123456701234567", 32)); - ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, pkey), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_CTX_use_PrivateKey(ctx, pkey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); wolfSSL_EVP_PKEY_free(pkey); pkey = NULL; @@ -2155,13 +2155,14 @@ static int test_wolfSSL_CTX_load_verify_locations(void) /* invalid arguments */ ExpectIntEQ(wolfSSL_CTX_load_verify_locations(NULL, caCertFile, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_load_verify_locations(ctx, NULL, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* invalid ca file */ ExpectIntEQ(wolfSSL_CTX_load_verify_locations(ctx, bogusFile, NULL), - WS_RETURN_CODE(WOLFSSL_BAD_FILE,WOLFSSL_FAILURE)); + WS_RETURN_CODE(WC_NO_ERR_TRACE(WOLFSSL_BAD_FILE), + WC_NO_ERR_TRACE(WOLFSSL_FAILURE))); #if !defined(NO_WOLFSSL_DIR) && !defined(WOLFSSL_TIRTOS) && \ @@ -2169,7 +2170,7 @@ static int test_wolfSSL_CTX_load_verify_locations(void) !(WOLFSSL_LOAD_VERIFY_DEFAULT_FLAGS & WOLFSSL_LOAD_FLAG_IGNORE_BAD_PATH_ERR)) /* invalid path */ ExpectIntEQ(wolfSSL_CTX_load_verify_locations(ctx, NULL, bogusFile), - WS_RETURN_CODE(BAD_PATH_ERROR,WOLFSSL_FAILURE)); + WS_RETURN_CODE(WC_NO_ERR_TRACE(BAD_PATH_ERROR),WC_NO_ERR_TRACE(WOLFSSL_FAILURE))); #endif #if defined(WOLFSSL_QT) || defined(WOLFSSL_IGNORE_BAD_CERT_PATH) /* test ignoring the invalid path */ @@ -2193,47 +2194,47 @@ static int test_wolfSSL_CTX_load_verify_locations(void) DYNAMIC_TYPE_TMP_BUFFER)); ExpectIntEQ(wolfSSL_CTX_memsave_cert_cache(NULL, NULL, -1, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memsave_cert_cache(ctx, NULL, -1, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memsave_cert_cache(NULL, cache, -1, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memsave_cert_cache(NULL, NULL, cacheSz, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memsave_cert_cache(NULL, NULL, -1, &used), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memsave_cert_cache(NULL, cache, cacheSz, &used), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memsave_cert_cache(ctx, NULL, cacheSz, &used), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memsave_cert_cache(ctx, cache, -1, &used), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memsave_cert_cache(ctx, cache, cacheSz, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memsave_cert_cache(ctx, cache, cacheSz - 10, &used), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); ExpectIntEQ(wolfSSL_CTX_memsave_cert_cache(ctx, cache, cacheSz, &used), 1); ExpectIntEQ(cacheSz, used); ExpectIntEQ(wolfSSL_CTX_memrestore_cert_cache(NULL, NULL, -1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memrestore_cert_cache(ctx, NULL, -1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memrestore_cert_cache(NULL, cache, -1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memrestore_cert_cache(NULL, NULL, cacheSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memrestore_cert_cache(NULL, cache, cacheSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memrestore_cert_cache(ctx, NULL, cacheSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_memrestore_cert_cache(ctx, cache, -1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Smaller than header. */ - ExpectIntEQ(wolfSSL_CTX_memrestore_cert_cache(ctx, cache, 1), BUFFER_E); + ExpectIntEQ(wolfSSL_CTX_memrestore_cert_cache(ctx, cache, 1), WC_NO_ERR_TRACE(BUFFER_E)); for (i = 1; i < cacheSz; i++) { ExpectIntEQ(wolfSSL_CTX_memrestore_cert_cache(ctx, cache, cacheSz - i), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); } if (EXPECT_SUCCESS()) { /* Modify header for bad results! */ @@ -2241,22 +2242,22 @@ static int test_wolfSSL_CTX_load_verify_locations(void) /* version */ t = p[0]; p[0] = 0xff; ExpectIntEQ(wolfSSL_CTX_memrestore_cert_cache(ctx, cache, cacheSz), - CACHE_MATCH_ERROR); + WC_NO_ERR_TRACE(CACHE_MATCH_ERROR)); p[0] = t; p++; /* rows */ t = p[0]; p[0] = 0xff; ExpectIntEQ(wolfSSL_CTX_memrestore_cert_cache(ctx, cache, cacheSz), - CACHE_MATCH_ERROR); + WC_NO_ERR_TRACE(CACHE_MATCH_ERROR)); p[0] = t; p++; /* columns[0] */ t = p[0]; p[0] = -1; ExpectIntEQ(wolfSSL_CTX_memrestore_cert_cache(ctx, cache, cacheSz), - PARSE_ERROR); + WC_NO_ERR_TRACE(PARSE_ERROR)); p[0] = t; p += CA_TABLE_SIZE; /* signerSz*/ t = p[0]; p[0] = 0xff; ExpectIntEQ(wolfSSL_CTX_memrestore_cert_cache(ctx, cache, cacheSz), - CACHE_MATCH_ERROR); + WC_NO_ERR_TRACE(CACHE_MATCH_ERROR)); p[0] = t; } @@ -2264,20 +2265,20 @@ static int test_wolfSSL_CTX_load_verify_locations(void) ExpectIntEQ(cacheSz = wolfSSL_CTX_get_cert_cache_memsize(ctx), used); #ifndef NO_FILESYSTEM - ExpectIntEQ(wolfSSL_CTX_save_cert_cache(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CTX_save_cert_cache(ctx, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CTX_save_cert_cache(NULL, cacheFile), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_save_cert_cache(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CTX_save_cert_cache(ctx, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CTX_save_cert_cache(NULL, cacheFile), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_save_cert_cache(ctx, cacheFile), 1); - ExpectIntEQ(wolfSSL_CTX_restore_cert_cache(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CTX_restore_cert_cache(ctx, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CTX_restore_cert_cache(NULL, cacheFile), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_restore_cert_cache(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CTX_restore_cert_cache(ctx, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CTX_restore_cert_cache(NULL, cacheFile), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_restore_cert_cache(ctx, "no-file"), - WOLFSSL_BAD_FILE); + WC_NO_ERR_TRACE(WOLFSSL_BAD_FILE)); ExpectIntEQ(wolfSSL_CTX_restore_cert_cache(ctx, cacheFile), 1); /* File contents is not a cache. */ ExpectIntEQ(wolfSSL_CTX_restore_cert_cache(ctx, "./certs/ca-cert.pem"), - CACHE_MATCH_ERROR); + WC_NO_ERR_TRACE(CACHE_MATCH_ERROR)); #endif XFREE(cache, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -2319,7 +2320,8 @@ static int test_wolfSSL_CTX_load_verify_locations(void) /* Test loading path with no files */ ExpectIntEQ(wolfSSL_CTX_load_verify_locations_ex(ctx, NULL, - load_no_certs_path, WOLFSSL_LOAD_FLAG_PEM_CA_ONLY), WOLFSSL_FAILURE); + load_no_certs_path, WOLFSSL_LOAD_FLAG_PEM_CA_ONLY), + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Test loading expired CA certificates */ #ifdef NO_RSA @@ -2337,7 +2339,7 @@ static int test_wolfSSL_CTX_load_verify_locations(void) /* Test loading CA certificates and ignoring all errors */ #ifdef NO_RSA ExpectIntEQ(wolfSSL_CTX_load_verify_locations_ex(ctx, NULL, load_certs_path, - WOLFSSL_LOAD_FLAG_IGNORE_ERR), WOLFSSL_FAILURE); + WOLFSSL_LOAD_FLAG_IGNORE_ERR), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #else ExpectIntEQ(wolfSSL_CTX_load_verify_locations_ex(ctx, NULL, load_certs_path, WOLFSSL_LOAD_FLAG_IGNORE_ERR), WOLFSSL_SUCCESS); @@ -2566,31 +2568,31 @@ static int test_wolfSSL_CertManagerAPI(void) wolfSSL_CertManagerFree(NULL); ExpectIntEQ(wolfSSL_CertManager_up_ref(NULL), 0); - ExpectIntEQ(wolfSSL_CertManagerUnloadCAs(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CertManagerUnloadCAs(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifdef WOLFSSL_TRUST_PEER_CERT - ExpectIntEQ(wolfSSL_CertManagerUnload_trust_peers(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CertManagerUnload_trust_peers(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif ExpectIntEQ(wolfSSL_CertManagerLoadCABuffer_ex(NULL, &c, 1, - WOLFSSL_FILETYPE_ASN1, 0, 0), WOLFSSL_FATAL_ERROR); + WOLFSSL_FILETYPE_ASN1, 0, 0), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); #if !defined(NO_WOLFSSL_CLIENT) || !defined(WOLFSSL_NO_CLIENT_AUTH) ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(NULL, NULL, -1, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, NULL, -1, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(NULL, &c, -1, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(NULL, NULL, 1, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(NULL, &c, 1, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, NULL, 1, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, &c, -1, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, &c, 1, -1), - WOLFSSL_BAD_FILETYPE); + WC_NO_ERR_TRACE(WOLFSSL_BAD_FILETYPE)); #endif #if !defined(NO_FILESYSTEM) @@ -2603,37 +2605,37 @@ static int test_wolfSSL_CertManagerAPI(void) #if !defined(NO_WOLFSSL_CLIENT) || !defined(WOLFSSL_NO_CLIENT_AUTH) ExpectIntEQ(wolfSSL_CertManagerVerify(NULL, NULL, -1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerVerify(cm, NULL, WOLFSSL_FILETYPE_ASN1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerVerify(NULL, ca_cert, - WOLFSSL_FILETYPE_PEM), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_PEM), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerVerify(cm, ca_cert, -1), - WOLFSSL_BAD_FILETYPE); + WC_NO_ERR_TRACE(WOLFSSL_BAD_FILETYPE)); ExpectIntEQ(wolfSSL_CertManagerVerify(cm, "no-file", - WOLFSSL_FILETYPE_ASN1), WOLFSSL_BAD_FILE); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(WOLFSSL_BAD_FILE)); ExpectIntEQ(wolfSSL_CertManagerVerify(cm, ca_cert_der, - WOLFSSL_FILETYPE_PEM), ASN_NO_PEM_HEADER); + WOLFSSL_FILETYPE_PEM), WC_NO_ERR_TRACE(ASN_NO_PEM_HEADER)); #endif ExpectIntEQ(wolfSSL_CertManagerLoadCA(NULL, NULL, NULL), - WOLFSSL_FATAL_ERROR); + WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); ExpectIntEQ(wolfSSL_CertManagerLoadCA(NULL, ca_cert, NULL), - WOLFSSL_FATAL_ERROR); + WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); ExpectIntEQ(wolfSSL_CertManagerLoadCA(NULL, NULL, ca_path), - WOLFSSL_FATAL_ERROR); + WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); ExpectIntEQ(wolfSSL_CertManagerLoadCA(NULL, ca_cert, ca_path), - WOLFSSL_FATAL_ERROR); + WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); } #endif #ifdef OPENSSL_COMPATIBLE_DEFAULTS ExpectIntEQ(wolfSSL_CertManagerEnableCRL(cm, 0), 1); #elif !defined(HAVE_CRL) - ExpectIntEQ(wolfSSL_CertManagerEnableCRL(cm, 0), NOT_COMPILED_IN); + ExpectIntEQ(wolfSSL_CertManagerEnableCRL(cm, 0), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); #endif - ExpectIntEQ(wolfSSL_CertManagerDisableCRL(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CertManagerDisableCRL(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerDisableCRL(cm), 1); #ifdef HAVE_CRL /* Test APIs when CRL is disabled. */ @@ -2646,43 +2648,43 @@ static int test_wolfSSL_CertManagerAPI(void) #endif /* OCSP */ - ExpectIntEQ(wolfSSL_CertManagerEnableOCSP(NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CertManagerDisableOCSP(NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CertManagerEnableOCSPStapling(NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CertManagerDisableOCSPStapling(NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CertManagerEnableOCSPMustStaple(NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CertManagerDisableOCSPMustStaple(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CertManagerEnableOCSP(NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CertManagerDisableOCSP(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CertManagerEnableOCSPStapling(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CertManagerDisableOCSPStapling(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CertManagerEnableOCSPMustStaple(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CertManagerDisableOCSPMustStaple(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #if !defined(HAVE_CERTIFICATE_STATUS_REQUEST) && \ !defined(HAVE_CERTIFICATE_STATUS_REQUEST_V2) - ExpectIntEQ(wolfSSL_CertManagerDisableOCSPStapling(cm), NOT_COMPILED_IN); - ExpectIntEQ(wolfSSL_CertManagerEnableOCSPMustStaple(cm), NOT_COMPILED_IN); - ExpectIntEQ(wolfSSL_CertManagerDisableOCSPMustStaple(cm), NOT_COMPILED_IN); + ExpectIntEQ(wolfSSL_CertManagerDisableOCSPStapling(cm), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); + ExpectIntEQ(wolfSSL_CertManagerEnableOCSPMustStaple(cm), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); + ExpectIntEQ(wolfSSL_CertManagerDisableOCSPMustStaple(cm), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); #endif #ifdef HAVE_OCSP - ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(NULL, NULL, -1), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(cm, NULL, -1), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(NULL, &c, -1), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(NULL, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(NULL, &c, 1), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(cm, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(cm, &c, -1), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(NULL, NULL, -1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(cm, NULL, -1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(NULL, &c, -1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(NULL, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(NULL, &c, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(cm, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(cm, &c, -1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerCheckOCSPResponse(NULL, NULL, 0, - NULL, NULL, NULL, NULL), BAD_FUNC_ARG); + NULL, NULL, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerCheckOCSPResponse(cm, NULL, 1, - NULL, NULL, NULL, NULL), BAD_FUNC_ARG); + NULL, NULL, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerCheckOCSPResponse(NULL, &c, 1, - NULL, NULL, NULL, NULL), BAD_FUNC_ARG); + NULL, NULL, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerSetOCSPOverrideURL(NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerSetOCSPOverrideURL(NULL, ""), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerSetOCSPOverrideURL(cm, NULL), 1); ExpectIntEQ(wolfSSL_CertManagerSetOCSP_Cb(NULL, NULL, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerSetOCSP_Cb(cm, NULL, NULL, NULL), 1); ExpectIntEQ(wolfSSL_CertManagerDisableOCSP(cm), 1); @@ -2737,7 +2739,7 @@ static int test_wolfSSL_CertManagerLoadCABuffer(void) ExpectIntLE(ret = test_cm_load_ca_file(ca_cert), 1); #if defined(NO_WOLFSSL_CLIENT) && defined(NO_WOLFSSL_SERVER) - ExpectIntEQ(ret, WOLFSSL_FATAL_ERROR); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); #elif defined(NO_RSA) ExpectIntEQ(ret, ASN_UNKNOWN_OID_E); #else @@ -2746,12 +2748,12 @@ static int test_wolfSSL_CertManagerLoadCABuffer(void) ExpectIntLE(ret = test_cm_load_ca_file(ca_expired_cert), 1); #if defined(NO_WOLFSSL_CLIENT) && defined(NO_WOLFSSL_SERVER) - ExpectIntEQ(ret, WOLFSSL_FATAL_ERROR); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); #elif defined(NO_RSA) ExpectIntEQ(ret, ASN_UNKNOWN_OID_E); #elif !(WOLFSSL_LOAD_VERIFY_DEFAULT_FLAGS & WOLFSSL_LOAD_FLAG_DATE_ERR_OKAY) && \ !defined(NO_ASN_TIME) - ExpectIntEQ(ret, ASN_AFTER_DATE_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(ASN_AFTER_DATE_E)); #else ExpectIntEQ(ret, WOLFSSL_SUCCESS); #endif @@ -2770,7 +2772,7 @@ static int test_wolfSSL_CertManagerLoadCABuffer_ex(void) ExpectIntLE(ret = test_cm_load_ca_file_ex(ca_cert, WOLFSSL_LOAD_FLAG_NONE), 1); #if defined(NO_WOLFSSL_CLIENT) && defined(NO_WOLFSSL_SERVER) - ExpectIntEQ(ret, WOLFSSL_FATAL_ERROR); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); #elif defined(NO_RSA) ExpectIntEQ(ret, ASN_UNKNOWN_OID_E); #else @@ -2780,13 +2782,13 @@ static int test_wolfSSL_CertManagerLoadCABuffer_ex(void) ExpectIntLE(ret = test_cm_load_ca_file_ex(ca_expired_cert, WOLFSSL_LOAD_FLAG_DATE_ERR_OKAY), 1); #if defined(NO_WOLFSSL_CLIENT) && defined(NO_WOLFSSL_SERVER) - ExpectIntEQ(ret, WOLFSSL_FATAL_ERROR); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); #elif defined(NO_RSA) ExpectIntEQ(ret, ASN_UNKNOWN_OID_E); #elif !(WOLFSSL_LOAD_VERIFY_DEFAULT_FLAGS & WOLFSSL_LOAD_FLAG_DATE_ERR_OKAY) && \ !defined(NO_ASN_TIME) && defined(WOLFSSL_TRUST_PEER_CERT) && \ defined(OPENSSL_COMPATIBLE_DEFAULTS) - ExpectIntEQ(ret, ASN_AFTER_DATE_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(ASN_AFTER_DATE_E)); #else ExpectIntEQ(ret, WOLFSSL_SUCCESS); #endif @@ -2832,10 +2834,10 @@ static int test_wolfSSL_CertManagerGetCerts(void) /* Check that ASN_SELF_SIGNED_E is returned for a self-signed cert for QT * and full OpenSSL compatibility */ ExpectIntEQ(ret = wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, - WOLFSSL_FILETYPE_ASN1), ASN_SELF_SIGNED_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_SELF_SIGNED_E)); #else ExpectIntEQ(ret = wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, - WOLFSSL_FILETYPE_ASN1), ASN_NO_SIGNER_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_NO_SIGNER_E)); #endif ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_CertManagerLoadCA(cm, @@ -2903,7 +2905,7 @@ static int test_wolfSSL_CertManagerSetVerify(void) myVerifyAction = VERIFY_FORCE_FAIL; ExpectIntEQ(wolfSSL_CertManagerVerify(cm, verifyCert, - WOLFSSL_FILETYPE_ASN1), VERIFY_CERT_ERROR); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(VERIFY_CERT_ERROR)); } #endif @@ -3008,7 +3010,7 @@ static int test_wolfSSL_CertManagerNameConstraint(void) ExpectNotNull(cm = wolfSSL_CertManagerNew()); ExpectIntEQ(wolfSSL_CertManagerLoadCABuffer(cm, der, derSz, - WOLFSSL_FILETYPE_ASN1), ASN_PARSE_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_PARSE_E)); wolfSSL_CertManagerFree(cm); XFREE(der, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -3086,7 +3088,7 @@ static int test_wolfSSL_CertManagerNameConstraint(void) ExpectNotNull((der = (byte*)wolfSSL_X509_get_der(x509, &derSz))); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, - WOLFSSL_FILETYPE_ASN1), ASN_NAME_INVALID_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_NAME_INVALID_E)); wolfSSL_CertManagerFree(cm); wolfSSL_X509_free(x509); @@ -3196,7 +3198,7 @@ static int test_wolfSSL_CertManagerNameConstraint2(void) ExpectNotNull((der = wolfSSL_X509_get_der(x509, &derSz))); #ifndef WOLFSSL_NO_ASN_STRICT ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, - WOLFSSL_FILETYPE_ASN1), ASN_NAME_INVALID_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_NAME_INVALID_E)); #else ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, WOLFSSL_FILETYPE_ASN1), WOLFSSL_SUCCESS); @@ -3222,7 +3224,7 @@ static int test_wolfSSL_CertManagerNameConstraint2(void) ExpectNotNull((der = wolfSSL_X509_get_der(x509, &derSz))); #ifndef WOLFSSL_NO_ASN_STRICT ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, - WOLFSSL_FILETYPE_ASN1), ASN_NAME_INVALID_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_NAME_INVALID_E)); #else ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, WOLFSSL_FILETYPE_ASN1), WOLFSSL_SUCCESS); @@ -3247,7 +3249,7 @@ static int test_wolfSSL_CertManagerNameConstraint2(void) ExpectNotNull((der = wolfSSL_X509_get_der(x509, &derSz))); #ifndef WOLFSSL_NO_ASN_STRICT ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, - WOLFSSL_FILETYPE_ASN1), ASN_NAME_INVALID_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_NAME_INVALID_E)); #else ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, WOLFSSL_FILETYPE_ASN1), WOLFSSL_SUCCESS); @@ -3282,7 +3284,7 @@ static int test_wolfSSL_CertManagerNameConstraint2(void) ExpectNotNull((der = wolfSSL_X509_get_der(x509, &derSz))); #ifndef WOLFSSL_NO_ASN_STRICT ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, - WOLFSSL_FILETYPE_ASN1), ASN_NAME_INVALID_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_NAME_INVALID_E)); #else ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, WOLFSSL_FILETYPE_ASN1), WOLFSSL_SUCCESS); @@ -3411,7 +3413,7 @@ static int test_wolfSSL_CertManagerNameConstraint3(void) ExpectNotNull((der = (byte*)wolfSSL_X509_get_der(x509, &derSz))); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, - WOLFSSL_FILETYPE_ASN1), ASN_NAME_INVALID_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_NAME_INVALID_E)); wolfSSL_CertManagerFree(cm); wolfSSL_X509_free(x509); @@ -3559,7 +3561,7 @@ static int test_wolfSSL_CertManagerNameConstraint4(void) ExpectNotNull((der = (byte*)wolfSSL_X509_get_der(x509, &derSz))); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, - WOLFSSL_FILETYPE_ASN1), ASN_NAME_INVALID_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_NAME_INVALID_E)); wolfSSL_X509_free(x509); x509 = NULL; @@ -3584,7 +3586,7 @@ static int test_wolfSSL_CertManagerNameConstraint4(void) ExpectNotNull((der = (byte*)wolfSSL_X509_get_der(x509, &derSz))); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, - WOLFSSL_FILETYPE_ASN1), ASN_NAME_INVALID_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_NAME_INVALID_E)); wolfSSL_CertManagerFree(cm); wolfSSL_X509_free(x509); @@ -3678,7 +3680,7 @@ static int test_wolfSSL_CertManagerNameConstraint5(void) ExpectNotNull((der = (byte*)wolfSSL_X509_get_der(x509, &derSz))); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, - WOLFSSL_FILETYPE_ASN1), ASN_NAME_INVALID_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_NAME_INVALID_E)); wolfSSL_X509_free(x509); x509 = NULL; @@ -3704,7 +3706,7 @@ static int test_wolfSSL_CertManagerNameConstraint5(void) ExpectNotNull((der = (byte*)wolfSSL_X509_get_der(x509, &derSz))); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, - WOLFSSL_FILETYPE_ASN1), ASN_NAME_INVALID_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_NAME_INVALID_E)); wolfSSL_X509_free(x509); x509 = NULL; @@ -3730,7 +3732,7 @@ static int test_wolfSSL_CertManagerNameConstraint5(void) ExpectNotNull((der = (byte*)wolfSSL_X509_get_der(x509, &derSz))); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, der, derSz, - WOLFSSL_FILETYPE_ASN1), ASN_NAME_INVALID_E); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_NAME_INVALID_E)); wolfSSL_X509_free(x509); x509 = NULL; @@ -3847,7 +3849,7 @@ static int test_wolfSSL_CertManagerCRL(void) ExpectNotNull(cm = wolfSSL_CertManagerNew()); - ExpectIntEQ(wolfSSL_CertManagerEnableCRL(NULL, 0), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CertManagerEnableCRL(NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerEnableCRL(cm, WOLFSSL_CRL_CHECKALL), 1); ExpectIntEQ(wolfSSL_CertManagerEnableCRL(cm, WOLFSSL_CRL_CHECK), 1); ExpectIntEQ(wolfSSL_CertManagerEnableCRL(cm, @@ -3855,59 +3857,59 @@ static int test_wolfSSL_CertManagerCRL(void) ExpectIntEQ(wolfSSL_CertManagerEnableCRL(cm, 16), 1); ExpectIntEQ(wolfSSL_CertManagerEnableCRL(cm, WOLFSSL_CRL_CHECKALL), 1); - ExpectIntEQ(wolfSSL_CertManagerCheckCRL(NULL, NULL, -1), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CertManagerCheckCRL(cm, NULL, -1), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CertManagerCheckCRL(NULL, NULL, -1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CertManagerCheckCRL(cm, NULL, -1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerCheckCRL(NULL, server_cert_der_2048, -1), - BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CertManagerCheckCRL(NULL, NULL, 1), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CertManagerCheckCRL(NULL, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerCheckCRL(NULL, server_cert_der_2048, 1), - BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CertManagerCheckCRL(cm, NULL, 1), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CertManagerCheckCRL(cm, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerCheckCRL(cm, server_cert_der_2048, -1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerCheckCRL(cm, server_cert_der_2048, - sizeof_server_cert_der_2048), ASN_NO_SIGNER_E); + sizeof_server_cert_der_2048), WC_NO_ERR_TRACE(ASN_NO_SIGNER_E)); - ExpectIntEQ(wolfSSL_CertManagerSetCRL_Cb(NULL, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CertManagerSetCRL_Cb(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerSetCRL_Cb(cm, NULL), 1); #ifdef HAVE_CRL_IO - ExpectIntEQ(wolfSSL_CertManagerSetCRL_IOCb(NULL, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CertManagerSetCRL_IOCb(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerSetCRL_IOCb(cm, NULL), 1); #endif #ifndef NO_FILESYSTEM ExpectIntEQ(wolfSSL_CertManagerLoadCRL(NULL, NULL, WOLFSSL_FILETYPE_ASN1, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerLoadCRL(cm, NULL, WOLFSSL_FILETYPE_ASN1, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* -1 seen as !WOLFSSL_FILETYPE_PEM */ ExpectIntEQ(wolfSSL_CertManagerLoadCRL(cm, "./certs/crl", -1, 0), 1); ExpectIntEQ(wolfSSL_CertManagerLoadCRLFile(NULL, NULL, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerLoadCRLFile(cm, NULL, WOLFSSL_FILETYPE_ASN1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* -1 seen as !WOLFSSL_FILETYPE_PEM */ ExpectIntEQ(wolfSSL_CertManagerLoadCRLFile(cm, "./certs/crl/crl.pem", -1), - ASN_PARSE_E); + WC_NO_ERR_TRACE(ASN_PARSE_E)); #endif ExpectIntEQ(wolfSSL_CertManagerLoadCRLBuffer(NULL, NULL, -1, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerLoadCRLBuffer(cm, NULL, -1, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerLoadCRLBuffer(NULL, crl_buff, -1, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerLoadCRLBuffer(NULL, NULL, 1, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerLoadCRLBuffer(NULL, crl_buff, 1, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerLoadCRLBuffer(cm, NULL, 1, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CertManagerLoadCRLBuffer(cm, crl_buff, -1, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wolfSSL_CertManagerFreeCRL(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CertManagerFreeCRL(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wolfSSL_CertManagerFreeCRL(cm), 1); ExpectIntEQ(WOLFSSL_SUCCESS, @@ -3924,9 +3926,9 @@ static int test_wolfSSL_CertManagerCRL(void) ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_CertManagerLoadCA(cm, ca_cert, NULL)); ExpectIntEQ(wolfSSL_CertManagerCheckCRL(cm, server_cert_der_2048, - sizeof_server_cert_der_2048), CRL_MISSING); + sizeof_server_cert_der_2048), WC_NO_ERR_TRACE(CRL_MISSING)); ExpectIntEQ(wolfSSL_CertManagerVerifyBuffer(cm, server_cert_der_2048, - sizeof_server_cert_der_2048, WOLFSSL_FILETYPE_ASN1), CRL_MISSING); + sizeof_server_cert_der_2048, WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(CRL_MISSING)); #endif /* !WOLFSSL_CRL_ALLOW_MISSING_CDP */ ExpectIntEQ(wolfSSL_CertManagerLoadCRLBuffer(cm, crl_buff, sizeof(crl_buff), @@ -3935,7 +3937,7 @@ static int test_wolfSSL_CertManagerCRL(void) #if !defined(NO_FILESYSTEM) && defined(WC_RSA_PSS) /* loading should fail without the CA set */ ExpectIntEQ(wolfSSL_CertManagerLoadCRLFile(cm, crl_rsapss, - WOLFSSL_FILETYPE_PEM), ASN_CRL_NO_SIGNER_E); + WOLFSSL_FILETYPE_PEM), WC_NO_ERR_TRACE(ASN_CRL_NO_SIGNER_E)); /* now successfully load the RSA-PSS crl once loading in it's CA */ ExpectIntEQ(WOLFSSL_SUCCESS, @@ -4255,7 +4257,7 @@ static int test_wolfSSL_CertManagerCheckOCSPResponse(void) #ifndef NO_FILESYSTEM ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(cm, server_cert_der_2048, - sizeof(server_cert_der_2048)), ASN_NO_SIGNER_E); + sizeof(server_cert_der_2048)), WC_NO_ERR_TRACE(ASN_NO_SIGNER_E)); ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_CertManagerLoadCA(cm, ca_cert, NULL)); ExpectIntEQ(wolfSSL_CertManagerCheckOCSP(cm, server_cert_der_2048, @@ -4472,13 +4474,13 @@ static int test_wolfSSL_FPKI(void) wc_InitDecodedCert(&cert, buf, (word32)bytes, NULL); ExpectIntEQ(wc_ParseCert(&cert, CERT_TYPE, 0, NULL), 0); - ExpectIntEQ(wc_GetFASCNFromCert(&cert, NULL, &fascnSz), LENGTH_ONLY_E) ; + ExpectIntEQ(wc_GetFASCNFromCert(&cert, NULL, &fascnSz), WC_NO_ERR_TRACE(LENGTH_ONLY_E)); ExpectNotNull(fascn = (byte*)XMALLOC(fascnSz, NULL, DYNAMIC_TYPE_TMP_BUFFER)); ExpectIntEQ(wc_GetFASCNFromCert(&cert, fascn, &fascnSz), 0); XFREE(fascn, NULL, DYNAMIC_TYPE_TMP_BUFFER); - ExpectIntEQ(wc_GetUUIDFromCert(&cert, NULL, &uuidSz), LENGTH_ONLY_E); + ExpectIntEQ(wc_GetUUIDFromCert(&cert, NULL, &uuidSz), WC_NO_ERR_TRACE(LENGTH_ONLY_E)); ExpectNotNull(uuid = (byte*)XMALLOC(uuidSz, NULL, DYNAMIC_TYPE_TMP_BUFFER)); ExpectIntEQ(wc_GetUUIDFromCert(&cert, uuid, &uuidSz), 0); XFREE(uuid, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -4660,12 +4662,12 @@ static int test_wolfSSL_CTX_load_verify_buffer_ex(void) /* Fail when ctx is NULL. */ ExpectIntEQ(wolfSSL_CTX_load_verify_buffer_ex(NULL, ca_expired_cert, sizeof_ca_expired_cert, WOLFSSL_FILETYPE_ASN1, 0, - WOLFSSL_LOAD_FLAG_DATE_ERR_OKAY), BAD_FUNC_ARG); + WOLFSSL_LOAD_FLAG_DATE_ERR_OKAY), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Load as modified cert - bad initial length. */ ca_expired_cert[2] = 0x7f; ExpectIntEQ(wolfSSL_CTX_load_verify_buffer_ex(ctx, ca_expired_cert, sizeof_ca_expired_cert, WOLFSSL_FILETYPE_ASN1, 1, - WOLFSSL_LOAD_FLAG_DATE_ERR_OKAY), ASN_PARSE_E); + WOLFSSL_LOAD_FLAG_DATE_ERR_OKAY), WC_NO_ERR_TRACE(ASN_PARSE_E)); wolfSSL_CTX_free(ctx); #endif /* !NO_WOLFSSL_CLIENT || !NO_WOLFSSL_SERVER */ @@ -4796,24 +4798,24 @@ static int test_wolfSSL_CTX_use_certificate_chain_buffer_format(void) /* Invalid parameters. */ ExpectIntEQ(wolfSSL_CTX_use_certificate_chain_buffer_format(NULL, - NULL, 0, WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + NULL, 0, WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_use_certificate_chain_buffer_format(ctx, - NULL, 0, WOLFSSL_FILETYPE_ASN1), ASN_PARSE_E); + NULL, 0, WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(ASN_PARSE_E)); ExpectIntEQ(wolfSSL_CTX_use_certificate_chain_buffer_format(NULL, server_cert_der_2048, sizeof_server_cert_der_2048, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_use_certificate_chain_buffer(NULL, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_use_certificate_chain_buffer(ctx, NULL, 0), - ASN_NO_PEM_HEADER); + WC_NO_ERR_TRACE(ASN_NO_PEM_HEADER)); ExpectIntEQ(wolfSSL_CTX_use_certificate_chain_buffer(NULL, buf, (long)len), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_use_certificate_chain_buffer(NULL, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_use_certificate_chain_buffer(ssl, NULL, 0), - ASN_NO_PEM_HEADER); + WC_NO_ERR_TRACE(ASN_NO_PEM_HEADER)); ExpectIntEQ(wolfSSL_use_certificate_chain_buffer(NULL, buf, (long)len), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_use_certificate_chain_buffer_format(ctx, server_cert_der_2048, sizeof_server_cert_der_2048, @@ -4825,12 +4827,12 @@ static int test_wolfSSL_CTX_use_certificate_chain_buffer_format(void) ExpectIntEQ(wolfSSL_CTX_use_certificate_chain_buffer(ctx, buf, (long)len), WOLFSSL_SUCCESS); ExpectIntEQ(wolfSSL_CTX_use_certificate_chain_buffer(ctx, - server_cert_der_2048, sizeof_server_cert_der_2048), ASN_NO_PEM_HEADER); + server_cert_der_2048, sizeof_server_cert_der_2048), WC_NO_ERR_TRACE(ASN_NO_PEM_HEADER)); ExpectIntEQ(wolfSSL_use_certificate_chain_buffer(ssl, buf, (long)len), WOLFSSL_SUCCESS); ExpectIntEQ(wolfSSL_use_certificate_chain_buffer(ssl, server_cert_der_2048, - sizeof_server_cert_der_2048), ASN_NO_PEM_HEADER); + sizeof_server_cert_der_2048), WC_NO_ERR_TRACE(ASN_NO_PEM_HEADER)); wolfSSL_free(ssl); wolfSSL_CTX_free(ctx); @@ -4888,17 +4890,18 @@ static int test_wolfSSL_use_certificate_chain_file(void) /* Invalid parameters. */ ExpectIntEQ(wolfSSL_use_certificate_chain_file_format(NULL, NULL, - WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_use_certificate_chain_file_format(ssl, NULL, - WOLFSSL_FILETYPE_ASN1), WOLFSSL_FAILURE); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_use_certificate_chain_file_format(NULL, - server_chain_der, WOLFSSL_FILETYPE_ASN1), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_use_certificate_chain_file(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_use_certificate_chain_file(ssl, NULL), WOLFSSL_FAILURE); + server_chain_der, WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_use_certificate_chain_file(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_use_certificate_chain_file(ssl, NULL), + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_use_certificate_chain_file(NULL, client_single_pem), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_use_certificate_chain_file(ssl, server_chain_der), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_use_certificate_chain_file_format(ssl, server_chain_der, WOLFSSL_FILETYPE_ASN1), WOLFSSL_SUCCESS); @@ -5015,7 +5018,7 @@ static int test_wolfSSL_CTX_SetMinMaxDhKey_Sz(void) ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_CTX_SetMinDhKey_Sz(ctx, 3072)); - ExpectIntEQ(DH_KEY_SIZE_E, wolfSSL_CTX_SetTmpDH_buffer(ctx, dh_key_der_2048, + ExpectIntEQ(WC_NO_ERR_TRACE(DH_KEY_SIZE_E), wolfSSL_CTX_SetTmpDH_buffer(ctx, dh_key_der_2048, sizeof_dh_key_der_2048, WOLFSSL_FILETYPE_ASN1)); ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_CTX_SetMinDhKey_Sz(ctx, 2048)); @@ -5026,7 +5029,7 @@ static int test_wolfSSL_CTX_SetMinMaxDhKey_Sz(void) ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_CTX_SetMaxDhKey_Sz(ctx, 1024)); - ExpectIntEQ(DH_KEY_SIZE_E, wolfSSL_CTX_SetTmpDH_buffer(ctx, + ExpectIntEQ(WC_NO_ERR_TRACE(DH_KEY_SIZE_E), wolfSSL_CTX_SetTmpDH_buffer(ctx, dh_key_der_2048, sizeof_dh_key_der_2048, WOLFSSL_FILETYPE_ASN1)); @@ -5054,7 +5057,7 @@ static int test_wolfSSL_CTX_der_load_verify_locations(void) /* der load Case 1 ctx NULL */ ExpectIntEQ(wolfSSL_CTX_der_load_verify_locations(ctx, derCert, - WOLFSSL_FILETYPE_ASN1), WOLFSSL_FAILURE); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #ifndef NO_WOLFSSL_CLIENT ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_client_method())); @@ -5064,16 +5067,16 @@ static int test_wolfSSL_CTX_der_load_verify_locations(void) /* Case 2 filePath NULL */ ExpectIntEQ(wolfSSL_CTX_der_load_verify_locations(ctx, nullPath, - WOLFSSL_FILETYPE_ASN1), WOLFSSL_FAILURE); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Case 3 invalid format */ ExpectIntEQ(wolfSSL_CTX_der_load_verify_locations(ctx, derCert, - WOLFSSL_FILETYPE_PEM), WOLFSSL_FAILURE); + WOLFSSL_FILETYPE_PEM), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Case 4 filePath not valid */ ExpectIntEQ(wolfSSL_CTX_der_load_verify_locations(ctx, invalidPath, - WOLFSSL_FILETYPE_ASN1), WOLFSSL_FAILURE); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Case 5 filePath empty */ ExpectIntEQ(wolfSSL_CTX_der_load_verify_locations(ctx, emptyPath, - WOLFSSL_FILETYPE_ASN1), WOLFSSL_FAILURE); + WOLFSSL_FILETYPE_ASN1), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #ifndef NO_RSA /* Case 6 success case */ ExpectIntEQ(wolfSSL_CTX_der_load_verify_locations(ctx, derCert, @@ -5093,27 +5096,27 @@ static int test_wolfSSL_CTX_enable_disable(void) WOLFSSL_CTX* ctx = NULL; #ifdef HAVE_CRL - ExpectIntEQ(wolfSSL_CTX_DisableCRL(ctx), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CTX_EnableCRL(ctx, 0), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_DisableCRL(ctx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CTX_EnableCRL(ctx, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #ifdef HAVE_OCSP - ExpectIntEQ(wolfSSL_CTX_DisableOCSP(ctx), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CTX_EnableOCSP(ctx, 0), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_DisableOCSP(ctx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CTX_EnableOCSP(ctx, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #if defined(HAVE_CERTIFICATE_STATUS_REQUEST) || \ defined(HAVE_CERTIFICATE_STATUS_REQUEST_V2) - ExpectIntEQ(wolfSSL_CTX_DisableOCSPStapling(ctx), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CTX_EnableOCSPStapling(ctx), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CTX_DisableOCSPMustStaple(ctx), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CTX_EnableOCSPMustStaple(ctx), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_DisableOCSPStapling(ctx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CTX_EnableOCSPStapling(ctx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CTX_DisableOCSPMustStaple(ctx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CTX_EnableOCSPMustStaple(ctx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #ifndef NO_WOLFSSL_CLIENT #ifdef HAVE_EXTENDED_MASTER - ExpectIntEQ(wolfSSL_CTX_DisableExtendedMasterSecret(ctx), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_DisableExtendedMasterSecret(ctx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_client_method())); @@ -5189,14 +5192,14 @@ static int test_wolfSSL_set_minmax_proto_version(void) ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_client_method())); ExpectNotNull(ssl = wolfSSL_new(ctx)); - ExpectIntEQ(wolfSSL_CTX_set_min_proto_version(NULL, 0), SSL_FAILURE); - ExpectIntEQ(wolfSSL_CTX_set_max_proto_version(NULL, 0), SSL_FAILURE); + ExpectIntEQ(wolfSSL_CTX_set_min_proto_version(NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_CTX_set_max_proto_version(NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_set_min_proto_version(ctx, 0), SSL_SUCCESS); ExpectIntEQ(wolfSSL_CTX_set_max_proto_version(ctx, 0), SSL_SUCCESS); - ExpectIntEQ(wolfSSL_set_min_proto_version(NULL, 0), SSL_FAILURE); + ExpectIntEQ(wolfSSL_set_min_proto_version(NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_set_min_proto_version(ssl, 0), SSL_SUCCESS); - ExpectIntEQ(wolfSSL_set_max_proto_version(NULL, 0), SSL_FAILURE); + ExpectIntEQ(wolfSSL_set_max_proto_version(NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_set_max_proto_version(ssl, 0), SSL_SUCCESS); wolfSSL_free(ssl); @@ -5206,8 +5209,8 @@ static int test_wolfSSL_set_minmax_proto_version(void) #ifndef NO_WOLFSSL_SERVER ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_server_method())); - ExpectIntEQ(wolfSSL_CTX_set_min_proto_version(NULL, 0), SSL_FAILURE); - ExpectIntEQ(wolfSSL_CTX_set_max_proto_version(NULL, 0), SSL_FAILURE); + ExpectIntEQ(wolfSSL_CTX_set_min_proto_version(NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_CTX_set_max_proto_version(NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_set_min_proto_version(ctx, 0), SSL_SUCCESS); ExpectIntEQ(wolfSSL_CTX_set_max_proto_version(ctx, 0), SSL_SUCCESS); @@ -5464,7 +5467,7 @@ static int test_wolfSSL_SetMinMaxDhKey_Sz(void) ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_CTX_SetMaxDhKey_Sz(ctx, 1024)); ExpectNotNull(ssl2 = wolfSSL_new(ctx2)); - ExpectIntEQ(DH_KEY_SIZE_E, wolfSSL_SetTmpDH_buffer(ssl, dh_key_der_2048, + ExpectIntEQ(WC_NO_ERR_TRACE(DH_KEY_SIZE_E), wolfSSL_SetTmpDH_buffer(ssl, dh_key_der_2048, sizeof_dh_key_der_2048, WOLFSSL_FILETYPE_ASN1)); ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_SetMinDhKey_Sz(ssl, 2048)); @@ -5472,7 +5475,7 @@ static int test_wolfSSL_SetMinMaxDhKey_Sz(void) sizeof_dh_key_der_2048, WOLFSSL_FILETYPE_ASN1)); ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_SetMinDhKey_Sz(ssl, 3072)); - ExpectIntEQ(DH_KEY_SIZE_E, wolfSSL_SetTmpDH_buffer(ssl, dh_key_der_2048, + ExpectIntEQ(WC_NO_ERR_TRACE(DH_KEY_SIZE_E), wolfSSL_SetTmpDH_buffer(ssl, dh_key_der_2048, sizeof_dh_key_der_2048, WOLFSSL_FILETYPE_ASN1)); ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_SetTmpDH_buffer(ssl2, dh_key_der_2048, @@ -5483,7 +5486,7 @@ static int test_wolfSSL_SetMinMaxDhKey_Sz(void) sizeof_dh_key_der_2048, WOLFSSL_FILETYPE_ASN1)); ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_SetMaxDhKey_Sz(ssl2, 1024)); - ExpectIntEQ(DH_KEY_SIZE_E, wolfSSL_SetTmpDH_buffer(ssl, dh_key_der_2048, + ExpectIntEQ(WC_NO_ERR_TRACE(DH_KEY_SIZE_E), wolfSSL_SetTmpDH_buffer(ssl, dh_key_der_2048, sizeof_dh_key_der_2048, WOLFSSL_FILETYPE_ASN1)); wolfSSL_free(ssl2); @@ -6865,7 +6868,7 @@ static int test_wolfSSL_EVP_CIPHER_CTX(void) ExpectIntEQ(EVP_CIPHER_nid(test), NID_aes_128_cbc); ExpectIntEQ(EVP_CIPHER_CTX_reset(ctx), WOLFSSL_SUCCESS); - ExpectIntEQ(EVP_CIPHER_CTX_reset(NULL), WOLFSSL_FAILURE); + ExpectIntEQ(EVP_CIPHER_CTX_reset(NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); EVP_CIPHER_CTX_free(ctx); /* test EVP_CIPHER_CTX_cleanup with NULL */ @@ -7503,7 +7506,7 @@ static int nonblocking_accept_read(void* args, WOLFSSL* ssl, SOCKET_T* sockfd) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } @@ -7521,7 +7524,7 @@ static int nonblocking_accept_read(void* args, WOLFSSL* ssl, SOCKET_T* sockfd) return WOLFSSL_FATAL_ERROR; } } - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != WOLFSSL_SUCCESS) { char buff[WOLFSSL_MAX_ERROR_SZ]; fprintf(stderr, "error = %d, %s\n", err, @@ -7790,14 +7793,14 @@ static THREAD_RETURN WOLFSSL_THREAD test_server_nofail(void* args) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif ret = wolfSSL_negotiate(ssl); err = wolfSSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != WOLFSSL_SUCCESS) { char buff[WOLFSSL_MAX_ERROR_SZ]; fprintf(stderr, "error = %d, %s\n", err, @@ -8015,14 +8018,14 @@ static THREAD_RETURN WOLFSSL_THREAD test_server_loop(void* args) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif ret = wolfSSL_accept(ssl); err = wolfSSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != WOLFSSL_SUCCESS) { char buff[WOLFSSL_MAX_ERROR_SZ]; fprintf(stderr, "error = %d, %s\n", err, @@ -8238,14 +8241,14 @@ static int test_client_nofail(void* args, cbType cb) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif ret = wolfSSL_negotiate(ssl); err = wolfSSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != WOLFSSL_SUCCESS) { char buff[WOLFSSL_MAX_ERROR_SZ]; fprintf(stderr, "error = %d, %s\n", err, @@ -8489,14 +8492,14 @@ static void test_client_reuse_WOLFSSLobj(void* args, cbType cb, #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif ret = wolfSSL_connect(ssl); err = wolfSSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != WOLFSSL_SUCCESS) { char buff[WOLFSSL_MAX_ERROR_SZ]; fprintf(stderr, "error = %d, %s\n", err, @@ -8553,14 +8556,14 @@ static void test_client_reuse_WOLFSSLobj(void* args, cbType cb, #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif ret = wolfSSL_connect(ssl); err = wolfSSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != WOLFSSL_SUCCESS) { char buff[WOLFSSL_MAX_ERROR_SZ]; fprintf(stderr, "error = %d, %s\n", err, @@ -8808,14 +8811,14 @@ static THREAD_RETURN WOLFSSL_THREAD run_wolfssl_server(void* args) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif ret = wolfSSL_accept(ssl); err = wolfSSL_get_error(ssl, ret); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != WOLFSSL_SUCCESS) { char buff[WOLFSSL_MAX_ERROR_SZ]; fprintf(stderr, "accept error = %d, %s\n", err, @@ -8828,14 +8831,14 @@ static THREAD_RETURN WOLFSSL_THREAD run_wolfssl_server(void* args) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif idx = wolfSSL_read(ssl, input, sizeof(input)-1); err = wolfSSL_get_error(ssl, idx); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (idx > 0) { input[idx] = 0; fprintf(stderr, "Client message: %s\n", input); @@ -8846,14 +8849,14 @@ static THREAD_RETURN WOLFSSL_THREAD run_wolfssl_server(void* args) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif ret = wolfSSL_write(ssl, msg, len); err = wolfSSL_get_error(ssl, ret); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (len != ret) { goto cleanup; } @@ -9026,14 +9029,14 @@ static void run_wolfssl_client(void* args) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif ret = wolfSSL_connect(ssl); err = wolfSSL_get_error(ssl, ret); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != WOLFSSL_SUCCESS) { char buff[WOLFSSL_MAX_ERROR_SZ]; fprintf(stderr, "error = %d, %s\n", err, @@ -9046,14 +9049,14 @@ static void run_wolfssl_client(void* args) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif ret = wolfSSL_write(ssl, msg, len); err = wolfSSL_get_error(ssl, ret); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (len != ret) goto cleanup; @@ -9062,14 +9065,14 @@ static void run_wolfssl_client(void* args) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif ret = wolfSSL_read(ssl, input, sizeof(input)-1); err = wolfSSL_get_error(ssl, ret); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret > 0) { input[ret] = '\0'; /* null term */ fprintf(stderr, "Server response: %s\n", input); @@ -9331,8 +9334,8 @@ static int test_wolfSSL_CTX_verifyDepth_ServerClient_3(void) ExpectIntEQ(client_cbf.return_code, TEST_FAIL); ExpectIntEQ(server_cbf.return_code, TEST_FAIL); - ExpectIntEQ(client_cbf.last_err, MAX_CHAIN_ERROR); - ExpectIntEQ(server_cbf.last_err, FATAL_ERROR); + ExpectIntEQ(client_cbf.last_err, WC_NO_ERR_TRACE(MAX_CHAIN_ERROR)); + ExpectIntEQ(server_cbf.last_err, WC_NO_ERR_TRACE(FATAL_ERROR)); #endif /* OPENSSL_EXTRA && HAVE_SSL_MEMIO_TESTS_DEPENDENCIES */ return EXPECT_RESULT(); @@ -11178,12 +11181,13 @@ static void use_PSEUDO_MANDATORY_SNI_at_ctx(WOLFSSL_CTX* ctx) static void verify_UNKNOWN_SNI_on_server(WOLFSSL* ssl) { - AssertIntEQ(UNKNOWN_SNI_HOST_NAME_E, wolfSSL_get_error(ssl, 0)); + AssertIntEQ(WC_NO_ERR_TRACE(UNKNOWN_SNI_HOST_NAME_E), + wolfSSL_get_error(ssl, 0)); } static void verify_SNI_ABSENT_on_server(WOLFSSL* ssl) { - AssertIntEQ(SNI_ABSENT_ERROR, wolfSSL_get_error(ssl, 0)); + AssertIntEQ(WC_NO_ERR_TRACE(SNI_ABSENT_ERROR), wolfSSL_get_error(ssl, 0)); } static void verify_SNI_no_matching(WOLFSSL* ssl) @@ -11221,7 +11225,7 @@ static void verify_SNI_fake_matching(WOLFSSL* ssl) static void verify_FATAL_ERROR_on_client(WOLFSSL* ssl) { - AssertIntEQ(FATAL_ERROR, wolfSSL_get_error(ssl, 0)); + AssertIntEQ(WC_NO_ERR_TRACE(FATAL_ERROR), wolfSSL_get_error(ssl, 0)); } /* END of connection tests callbacks */ @@ -11436,19 +11440,19 @@ static int test_wolfSSL_SNI_GetFromBuffer(void) ExpectIntEQ(0, wolfSSL_SNI_GetFromBuffer(buff2, sizeof(buff2), 1, result, &length)); - ExpectIntEQ(BUFFER_ERROR, wolfSSL_SNI_GetFromBuffer(buff, sizeof(buff), + ExpectIntEQ(WC_NO_ERR_TRACE(BUFFER_ERROR), wolfSSL_SNI_GetFromBuffer(buff, sizeof(buff), 0, result, &length)); buff[0] = 0x16; - ExpectIntEQ(BUFFER_ERROR, wolfSSL_SNI_GetFromBuffer(buff, sizeof(buff), + ExpectIntEQ(WC_NO_ERR_TRACE(BUFFER_ERROR), wolfSSL_SNI_GetFromBuffer(buff, sizeof(buff), 0, result, &length)); buff[1] = 0x03; - ExpectIntEQ(SNI_UNSUPPORTED, wolfSSL_SNI_GetFromBuffer(buff, + ExpectIntEQ(WC_NO_ERR_TRACE(SNI_UNSUPPORTED), wolfSSL_SNI_GetFromBuffer(buff, sizeof(buff), 0, result, &length)); buff[2] = 0x03; - ExpectIntEQ(INCOMPLETE_DATA, wolfSSL_SNI_GetFromBuffer(buff, + ExpectIntEQ(WC_NO_ERR_TRACE(INCOMPLETE_DATA), wolfSSL_SNI_GetFromBuffer(buff, sizeof(buff), 0, result, &length)); buff[4] = 0x64; @@ -11467,19 +11471,19 @@ static int test_wolfSSL_SNI_GetFromBuffer(void) ExpectStrEQ("api.textmate.org", (const char*) result); /* SSL v2.0 tests */ - ExpectIntEQ(SNI_UNSUPPORTED, wolfSSL_SNI_GetFromBuffer(buff5, + ExpectIntEQ(WC_NO_ERR_TRACE(SNI_UNSUPPORTED), wolfSSL_SNI_GetFromBuffer(buff5, sizeof(buff5), 0, result, &length)); buff5[2] = 0x02; - ExpectIntEQ(BUFFER_ERROR, wolfSSL_SNI_GetFromBuffer(buff5, + ExpectIntEQ(WC_NO_ERR_TRACE(BUFFER_ERROR), wolfSSL_SNI_GetFromBuffer(buff5, sizeof(buff5), 0, result, &length)); buff5[2] = 0x01; buff5[6] = 0x08; - ExpectIntEQ(BUFFER_ERROR, wolfSSL_SNI_GetFromBuffer(buff5, + ExpectIntEQ(WC_NO_ERR_TRACE(BUFFER_ERROR), wolfSSL_SNI_GetFromBuffer(buff5, sizeof(buff5), 0, result, &length)); buff5[6] = 0x09; buff5[8] = 0x01; - ExpectIntEQ(BUFFER_ERROR, wolfSSL_SNI_GetFromBuffer(buff5, + ExpectIntEQ(WC_NO_ERR_TRACE(BUFFER_ERROR), wolfSSL_SNI_GetFromBuffer(buff5, sizeof(buff5), 0, result, &length)); return EXPECT_RESULT(); @@ -11697,7 +11701,7 @@ static int test_wolfSSL_UseMaxFragment(void) /* success case */ #ifdef OPENSSL_EXTRA - ExpectIntEQ(BAD_FUNC_ARG, CTX_UseMaxFragment(ctx, WOLFSSL_MFL_2_8)); + ExpectIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), CTX_UseMaxFragment(ctx, WOLFSSL_MFL_2_8)); #else ExpectIntEQ(WOLFSSL_SUCCESS, CTX_UseMaxFragment(ctx, WOLFSSL_MFL_2_8)); #endif @@ -11706,9 +11710,9 @@ static int test_wolfSSL_UseMaxFragment(void) ExpectIntEQ(WOLFSSL_SUCCESS, CTX_UseMaxFragment(ctx, WOLFSSL_MFL_2_11)); ExpectIntEQ(WOLFSSL_SUCCESS, CTX_UseMaxFragment(ctx, WOLFSSL_MFL_2_12)); #ifdef OPENSSL_EXTRA - ExpectIntEQ(BAD_FUNC_ARG, CTX_UseMaxFragment(ctx, WOLFSSL_MFL_2_13)); + ExpectIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), CTX_UseMaxFragment(ctx, WOLFSSL_MFL_2_13)); - ExpectIntEQ(BAD_FUNC_ARG, UseMaxFragment( ssl, WOLFSSL_MFL_2_8)); + ExpectIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), UseMaxFragment( ssl, WOLFSSL_MFL_2_8)); #else ExpectIntEQ(WOLFSSL_SUCCESS, CTX_UseMaxFragment(ctx, WOLFSSL_MFL_2_13)); @@ -11720,7 +11724,7 @@ static int test_wolfSSL_UseMaxFragment(void) ExpectIntEQ(WOLFSSL_SUCCESS, UseMaxFragment( ssl, WOLFSSL_MFL_2_12)); #ifdef OPENSSL_EXTRA - ExpectIntEQ(BAD_FUNC_ARG, UseMaxFragment( ssl, WOLFSSL_MFL_2_13)); + ExpectIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), UseMaxFragment( ssl, WOLFSSL_MFL_2_13)); #else ExpectIntEQ(WOLFSSL_SUCCESS, UseMaxFragment( ssl, WOLFSSL_MFL_2_13)); #endif @@ -11834,7 +11838,7 @@ static int test_wolfSSL_UseSupportedCurve(void) static void verify_ALPN_FATAL_ERROR_on_client(WOLFSSL* ssl) { - AssertIntEQ(UNKNOWN_ALPN_PROTOCOL_NAME_E, wolfSSL_get_error(ssl, 0)); + AssertIntEQ(WC_NO_ERR_TRACE(UNKNOWN_ALPN_PROTOCOL_NAME_E), wolfSSL_get_error(ssl, 0)); } static void use_ALPN_all(WOLFSSL* ssl) @@ -11908,7 +11912,7 @@ static void verify_ALPN_not_matching_continue(WOLFSSL* ssl) char *proto = NULL; word16 protoSz = 0; - AssertIntEQ(WOLFSSL_ALPN_NOT_FOUND, + AssertIntEQ(WC_NO_ERR_TRACE(WOLFSSL_ALPN_NOT_FOUND), wolfSSL_ALPN_GetProtocol(ssl, &proto, &protoSz)); /* check value */ @@ -12354,11 +12358,11 @@ static int test_wolfSSL_SCR_Reconnect(void) ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_UseSecureRenegotiation(ssl_s)); ExpectIntEQ(test_memio_do_handshake(ssl_c, ssl_s, 10, NULL), 0); /* WOLFSSL_FATAL_ERROR since it will block */ - ExpectIntEQ(wolfSSL_Rehandshake(ssl_s), WOLFSSL_FATAL_ERROR); - ExpectIntEQ(wolfSSL_get_error(ssl_s, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_Rehandshake(ssl_s), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); + ExpectIntEQ(wolfSSL_get_error(ssl_s, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); - ExpectIntEQ(wolfSSL_read(ssl_c, &data, 1), WOLFSSL_FATAL_ERROR); - ExpectIntEQ(wolfSSL_get_error(ssl_s, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_read(ssl_c, &data, 1), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); + ExpectIntEQ(wolfSSL_get_error(ssl_s, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); ExpectIntEQ(test_memio_do_handshake(ssl_c, ssl_s, 10, NULL), 0); wolfSSL_free(ssl_c); @@ -12478,8 +12482,8 @@ static int test_tls_ext_duplicate(void) ExpectIntNE(wolfSSL_accept(ssl), WOLFSSL_SUCCESS); /* can return duplicate ext error or socket error if the peer closed down * while sending alert */ - if (wolfSSL_get_error(ssl, 0) != SOCKET_ERROR_E) { - ExpectIntEQ(wolfSSL_get_error(ssl, 0), DUPLICATE_TLS_EXT_E); + if (wolfSSL_get_error(ssl, 0) != WC_NO_ERR_TRACE(SOCKET_ERROR_E)) { + ExpectIntEQ(wolfSSL_get_error(ssl, 0), WC_NO_ERR_TRACE(DUPLICATE_TLS_EXT_E)); } wolfSSL_free(ssl); @@ -13255,7 +13259,7 @@ static int test_wolfSSL_PKCS8(void) #else /* if HAVE_ECC is not defined then BEGIN EC PRIVATE KEY is not found */ ExpectIntEQ((bytes = wc_KeyPemToDer(buff, bytes, der, - (word32)sizeof(der), NULL)), ASN_NO_PEM_HEADER); + (word32)sizeof(der), NULL)), WC_NO_ERR_TRACE(ASN_NO_PEM_HEADER)); #endif /* HAVE_ECC */ wolfSSL_CTX_free(ctx); @@ -13449,7 +13453,7 @@ static int test_wolfSSL_X509_verify(void) bufSz = 2048; ExpectIntEQ(wolfSSL_X509_get_pubkey_buffer(ca, buf, &bufSz), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_X509_get_pubkey_type(NULL), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_X509_get_pubkey_type(NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_X509_get_pubkey_type(ca), RSAk); @@ -13472,10 +13476,10 @@ static int test_wolfSSL_X509_verify(void) WOLFSSL_SUCCESS); pt = buf; ExpectNotNull(pkey = wolfSSL_d2i_PUBKEY(NULL, &pt, bufSz)); - ExpectIntEQ(wolfSSL_X509_verify(serv, pkey), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_X509_verify(serv, pkey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); - ExpectIntEQ(wolfSSL_X509_verify(NULL, pkey), WOLFSSL_FATAL_ERROR); - ExpectIntEQ(wolfSSL_X509_verify(serv, NULL), WOLFSSL_FATAL_ERROR); + ExpectIntEQ(wolfSSL_X509_verify(NULL, pkey), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); + ExpectIntEQ(wolfSSL_X509_verify(serv, NULL), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); wolfSSL_EVP_PKEY_free(pkey); wolfSSL_FreeX509(ca); @@ -13727,13 +13731,13 @@ static int test_wolfSSL_UseOCSPStapling(void) ExpectNotNull(ssl = wolfSSL_new(ctx)); ExpectIntEQ(wolfSSL_UseOCSPStapling(NULL, WOLFSSL_CSR2_OCSP, - WOLFSSL_CSR2_OCSP_USE_NONCE), BAD_FUNC_ARG); + WOLFSSL_CSR2_OCSP_USE_NONCE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT ExpectIntEQ(wolfSSL_UseOCSPStapling(ssl, WOLFSSL_CSR2_OCSP, WOLFSSL_CSR2_OCSP_USE_NONCE), 1); #else ExpectIntEQ(wolfSSL_UseOCSPStapling(ssl, WOLFSSL_CSR2_OCSP, - WOLFSSL_CSR2_OCSP_USE_NONCE), BAD_FUNC_ARG); + WOLFSSL_CSR2_OCSP_USE_NONCE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif wolfSSL_free(ssl); @@ -13772,13 +13776,13 @@ static int test_wolfSSL_UseOCSPStaplingV2(void) ExpectNotNull(ssl = wolfSSL_new(ctx)); ExpectIntEQ(wolfSSL_UseOCSPStaplingV2(NULL, WOLFSSL_CSR2_OCSP, - WOLFSSL_CSR2_OCSP_USE_NONCE), BAD_FUNC_ARG); + WOLFSSL_CSR2_OCSP_USE_NONCE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT ExpectIntEQ(wolfSSL_UseOCSPStaplingV2(ssl, WOLFSSL_CSR2_OCSP, WOLFSSL_CSR2_OCSP_USE_NONCE), 1); #else ExpectIntEQ(wolfSSL_UseOCSPStaplingV2(ssl, WOLFSSL_CSR2_OCSP, - WOLFSSL_CSR2_OCSP_USE_NONCE), BAD_FUNC_ARG); + WOLFSSL_CSR2_OCSP_USE_NONCE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif wolfSSL_free(ssl); @@ -13845,11 +13849,11 @@ static int test_wc_InitBlake2b(void) /* Test good arg. */ ExpectIntEQ(wc_InitBlake2b(&blake, 64), 0); /* Test bad arg. */ - ExpectIntEQ(wc_InitBlake2b(NULL, 64), BAD_FUNC_ARG); - ExpectIntEQ(wc_InitBlake2b(NULL, 128), BAD_FUNC_ARG); - ExpectIntEQ(wc_InitBlake2b(&blake, 128), BAD_FUNC_ARG); - ExpectIntEQ(wc_InitBlake2b(NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_InitBlake2b(&blake, 0), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitBlake2b(NULL, 64), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_InitBlake2b(NULL, 128), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_InitBlake2b(&blake, 128), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_InitBlake2b(NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_InitBlake2b(&blake, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); } /* END test_wc_InitBlake2b*/ @@ -13872,9 +13876,9 @@ static int test_wc_InitBlake2b_WithKey(void) ExpectIntEQ(wc_InitBlake2b_WithKey(&blake, digestSz, key, keylen), 0); /* Test bad args. */ ExpectIntEQ(wc_InitBlake2b_WithKey(NULL, digestSz, key, keylen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_InitBlake2b_WithKey(&blake, digestSz, key, 256), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_InitBlake2b_WithKey(&blake, digestSz, NULL, keylen), 0); #endif return EXPECT_RESULT(); @@ -13896,9 +13900,9 @@ static int test_wc_InitBlake2s_WithKey(void) ExpectIntEQ(wc_InitBlake2s_WithKey(&blake, digestSz, key, keylen), 0); /* Test bad args. */ ExpectIntEQ(wc_InitBlake2s_WithKey(NULL, digestSz, key, keylen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_InitBlake2s_WithKey(&blake, digestSz, key, 256), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_InitBlake2s_WithKey(&blake, digestSz, NULL, keylen), 0); #endif return EXPECT_RESULT(); @@ -13916,7 +13920,7 @@ static int test_wc_InitMd5(void) /* Test good arg. */ ExpectIntEQ(wc_InitMd5(&md5), 0); /* Test bad arg. */ - ExpectIntEQ(wc_InitMd5(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitMd5(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Md5Free(&md5); #endif @@ -13960,9 +13964,9 @@ static int test_wc_Md5Update(void) c.input = NULL; c.inLen = WC_MD5_DIGEST_SIZE; ExpectIntEQ(wc_Md5Update(&md5, (byte*)c.input, (word32)c.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Md5Update(NULL, (byte*)a.input, (word32)a.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Md5Free(&md5); #endif @@ -13997,9 +14001,9 @@ static int test_wc_Md5Final(void) } /* Test bad args. */ - ExpectIntEQ(wc_Md5Final(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Md5Final(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Md5Final(&md5, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Md5Final(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Md5Final(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Md5Final(&md5, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Md5Free(&md5); #endif @@ -14018,7 +14022,7 @@ static int test_wc_InitSha(void) /* Test good arg. */ ExpectIntEQ(wc_InitSha(&sha), 0); /* Test bad arg. */ - ExpectIntEQ(wc_InitSha(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitSha(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_ShaFree(&sha); #endif @@ -14065,9 +14069,9 @@ static int test_wc_ShaUpdate(void) c.input = NULL; c.inLen = WC_SHA_DIGEST_SIZE; ExpectIntEQ(wc_ShaUpdate(&sha, (byte*)c.input, (word32)c.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ShaUpdate(NULL, (byte*)a.input, (word32)a.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_ShaFree(&sha); #endif @@ -14101,9 +14105,9 @@ static int test_wc_ShaFinal(void) } /* Test bad args. */ - ExpectIntEQ(wc_ShaFinal(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_ShaFinal(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(wc_ShaFinal(&sha, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ShaFinal(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ShaFinal(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ShaFinal(&sha, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_ShaFree(&sha); #endif @@ -14123,7 +14127,7 @@ static int test_wc_InitSha256(void) /* Test good arg. */ ExpectIntEQ(wc_InitSha256(&sha256), 0); /* Test bad arg. */ - ExpectIntEQ(wc_InitSha256(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitSha256(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha256Free(&sha256); #endif @@ -14176,9 +14180,9 @@ static int test_wc_Sha256Update(void) c.input = NULL; c.inLen = WC_SHA256_DIGEST_SIZE; ExpectIntEQ(wc_Sha256Update(&sha256, (byte*)c.input, (word32)c.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sha256Update(NULL, (byte*)a.input, (word32)a.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha256Free(&sha256); #endif @@ -14212,9 +14216,9 @@ static int test_wc_Sha256Final(void) } /* Test bad args. */ - ExpectIntEQ(wc_Sha256Final(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha256Final(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha256Final(&sha256, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha256Final(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha256Final(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha256Final(&sha256, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha256Free(&sha256); #endif @@ -14248,9 +14252,9 @@ static int test_wc_Sha256FinalRaw(void) } /* Test bad args. */ - ExpectIntEQ(wc_Sha256FinalRaw(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha256FinalRaw(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha256FinalRaw(&sha256, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha256FinalRaw(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha256FinalRaw(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha256FinalRaw(&sha256, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha256Free(&sha256); #endif @@ -14307,9 +14311,9 @@ static int test_wc_Sha256GetHash(void) ExpectIntEQ(wc_Sha256GetHash(&sha256, hash1), 0); /* test bad arguments*/ - ExpectIntEQ(wc_Sha256GetHash(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha256GetHash(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha256GetHash(&sha256, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha256GetHash(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha256GetHash(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha256GetHash(&sha256, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha256Free(&sha256); #endif @@ -14335,9 +14339,9 @@ static int test_wc_Sha256Copy(void) ExpectIntEQ(wc_Sha256Copy(&sha256, &temp), 0); /* test bad arguments*/ - ExpectIntEQ(wc_Sha256Copy(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha256Copy(NULL, &temp), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha256Copy(&sha256, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha256Copy(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha256Copy(NULL, &temp), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha256Copy(&sha256, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha256Free(&sha256); wc_Sha256Free(&temp); @@ -14356,7 +14360,7 @@ static int test_wc_InitSha512(void) /* Test good arg. */ ExpectIntEQ(wc_InitSha512(&sha512), 0); /* Test bad arg. */ - ExpectIntEQ(wc_InitSha512(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitSha512(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha512Free(&sha512); #endif @@ -14412,9 +14416,9 @@ static int test_wc_Sha512Update(void) c.input = NULL; c.inLen = WC_SHA512_DIGEST_SIZE; ExpectIntEQ(wc_Sha512Update(&sha512, (byte*)c.input, (word32)c.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sha512Update(NULL, (byte*)a.input, (word32)a.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha512Free(&sha512); #endif @@ -14499,9 +14503,9 @@ static int test_Sha512_Family_Final(int type, int isRaw) ExpectIntEQ(finalFp(&sha512, hash_test[i]), 0); } /* Test bad args. */ - ExpectIntEQ(finalFp(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(finalFp(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(finalFp(&sha512, NULL), BAD_FUNC_ARG); + ExpectIntEQ(finalFp(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(finalFp(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(finalFp(&sha512, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); freeFp(&sha512); @@ -14536,9 +14540,9 @@ static int test_wc_Sha512Final(void) } /* Test bad args. */ - ExpectIntEQ(wc_Sha512Final(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512Final(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512Final(&sha512, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha512Final(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512Final(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512Final(&sha512, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha512Free(&sha512); #endif @@ -14593,9 +14597,9 @@ static int test_wc_Sha512FinalRaw(void) } /* Test bad args. */ - ExpectIntEQ(wc_Sha512FinalRaw(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512FinalRaw(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512FinalRaw(&sha512, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha512FinalRaw(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512FinalRaw(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512FinalRaw(&sha512, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha512Free(&sha512); #endif @@ -14657,9 +14661,9 @@ static int test_Sha512_Family_GetHash(int type ) ExpectIntEQ(ghashFp(&sha512, hash1), 0); /* test bad arguments*/ - ExpectIntEQ(ghashFp(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(ghashFp(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(ghashFp(&sha512, NULL), BAD_FUNC_ARG); + ExpectIntEQ(ghashFp(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(ghashFp(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(ghashFp(&sha512, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha512Free(&sha512); return EXPECT_RESULT(); @@ -14683,9 +14687,9 @@ static int test_wc_Sha512GetHash(void) ExpectIntEQ(wc_Sha512GetHash(&sha512, hash1), 0); /* test bad arguments*/ - ExpectIntEQ(wc_Sha512GetHash(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512GetHash(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512GetHash(&sha512, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha512GetHash(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512GetHash(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512GetHash(&sha512, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha512Free(&sha512); #endif @@ -14712,9 +14716,9 @@ static int test_wc_Sha512Copy(void) ExpectIntEQ(wc_Sha512Copy(&sha512, &temp), 0); /* test bad arguments*/ - ExpectIntEQ(wc_Sha512Copy(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512Copy(NULL, &temp), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512Copy(&sha512, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha512Copy(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512Copy(NULL, &temp), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512Copy(&sha512, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha512Free(&sha512); wc_Sha512Free(&temp); @@ -14732,7 +14736,7 @@ static int test_wc_InitSha512_224(void) /* Test good arg. */ ExpectIntEQ(wc_InitSha512_224(&sha512), 0); /* Test bad arg. */ - ExpectIntEQ(wc_InitSha512_224(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitSha512_224(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha512_224Free(&sha512); #endif /* WOLFSSL_SHA512 && !WOLFSSL_NOSHA512_224 */ @@ -14774,9 +14778,9 @@ static int test_wc_Sha512_224Update(void) c.input = NULL; c.inLen = WC_SHA512_224_DIGEST_SIZE; ExpectIntEQ(wc_Sha512_224Update(&sha512, (byte*)c.input, (word32)c.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sha512_224Update(NULL, (byte*)a.input, (word32)a.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha512_224Free(&sha512); #endif /* WOLFSSL_SHA512 && !WOLFSSL_NOSHA512_224 */ @@ -14879,9 +14883,9 @@ static int test_wc_Sha512_224Copy(void) ExpectIntEQ(wc_Sha512_224Copy(&sha512, &temp), 0); /* test bad arguments*/ - ExpectIntEQ(wc_Sha512_224Copy(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512_224Copy(NULL, &temp), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512_224Copy(&sha512, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha512_224Copy(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512_224Copy(NULL, &temp), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512_224Copy(&sha512, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha512_224Free(&sha512); wc_Sha512_224Free(&temp); @@ -14900,7 +14904,7 @@ static int test_wc_InitSha512_256(void) /* Test good arg. */ ExpectIntEQ(wc_InitSha512_256(&sha512), 0); /* Test bad arg. */ - ExpectIntEQ(wc_InitSha512_256(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitSha512_256(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha512_256Free(&sha512); #endif /* WOLFSSL_SHA512 && !WOLFSSL_NOSHA512_256 */ @@ -14943,9 +14947,9 @@ static int test_wc_Sha512_256Update(void) c.input = NULL; c.inLen = WC_SHA512_256_DIGEST_SIZE; ExpectIntEQ(wc_Sha512_256Update(&sha512, (byte*)c.input, (word32)c.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sha512_256Update(NULL, (byte*)a.input, (word32)a.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha512_256Free(&sha512); #endif /* WOLFSSL_SHA512 && !WOLFSSL_NOSHA512_256 */ @@ -15047,9 +15051,9 @@ static int test_wc_Sha512_256Copy(void) ExpectIntEQ(wc_Sha512_256Copy(&sha512, &temp), 0); /* test bad arguments*/ - ExpectIntEQ(wc_Sha512_256Copy(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512_256Copy(NULL, &temp), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512_256Copy(&sha512, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha512_256Copy(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512_256Copy(NULL, &temp), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512_256Copy(&sha512, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha512_256Free(&sha512); wc_Sha512_256Free(&temp); @@ -15072,7 +15076,7 @@ static int test_wc_InitSha384(void) /* Test good arg. */ ExpectIntEQ(wc_InitSha384(&sha384), 0); /* Test bad arg. */ - ExpectIntEQ(wc_InitSha384(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitSha384(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha384Free(&sha384); #endif @@ -15120,9 +15124,9 @@ static int test_wc_Sha384Update(void) c.input = NULL; c.inLen = WC_SHA384_DIGEST_SIZE; ExpectIntEQ( wc_Sha384Update(&sha384, (byte*)c.input, (word32)c.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sha384Update(NULL, (byte*)a.input, (word32)a.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha384Free(&sha384); #endif @@ -15156,9 +15160,9 @@ static int test_wc_Sha384Final(void) } /* Test bad args. */ - ExpectIntEQ(wc_Sha384Final(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha384Final(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha384Final(&sha384, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha384Final(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha384Final(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha384Final(&sha384, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha384Free(&sha384); #endif @@ -15213,9 +15217,9 @@ static int test_wc_Sha384FinalRaw(void) } /* Test bad args. */ - ExpectIntEQ(wc_Sha384FinalRaw(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha384FinalRaw(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha384FinalRaw(&sha384, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha384FinalRaw(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha384FinalRaw(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha384FinalRaw(&sha384, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha384Free(&sha384); #endif @@ -15250,9 +15254,9 @@ static int test_wc_Sha384GetHash(void) ExpectIntEQ(wc_Sha384GetHash(&sha384, hash1), 0); /* test bad arguments*/ - ExpectIntEQ(wc_Sha384GetHash(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha384GetHash(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha384GetHash(&sha384, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha384GetHash(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha384GetHash(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha384GetHash(&sha384, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha384Free(&sha384); #endif @@ -15277,9 +15281,9 @@ static int test_wc_Sha384Copy(void) ExpectIntEQ(wc_Sha384Copy(&sha384, &temp), 0); /* test bad arguments*/ - ExpectIntEQ(wc_Sha384Copy(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha384Copy(NULL, &temp), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha384Copy(&sha384, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha384Copy(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha384Copy(NULL, &temp), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha384Copy(&sha384, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha384Free(&sha384); wc_Sha384Free(&temp); @@ -15299,7 +15303,7 @@ static int test_wc_InitSha224(void) /* Test good arg. */ ExpectIntEQ(wc_InitSha224(&sha224), 0); /* Test bad arg. */ - ExpectIntEQ(wc_InitSha224(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitSha224(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha224Free(&sha224); #endif @@ -15344,9 +15348,9 @@ static int test_wc_Sha224Update(void) c.input = NULL; c.inLen = WC_SHA224_DIGEST_SIZE; ExpectIntEQ(wc_Sha224Update(&sha224, (byte*)c.input, (word32)c.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sha224Update(NULL, (byte*)a.input, (word32)a.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha224Free(&sha224); #endif @@ -15381,9 +15385,9 @@ static int test_wc_Sha224Final(void) } /* Test bad args. */ - ExpectIntEQ(wc_Sha224Final(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha224Final(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha224Final(&sha224, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha224Final(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha224Final(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha224Final(&sha224, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha224Free(&sha224); #endif @@ -15463,9 +15467,9 @@ static int test_wc_Sha224GetHash(void) ExpectIntEQ(wc_Sha224GetHash(&sha224, hash1), 0); /* test bad arguments*/ - ExpectIntEQ(wc_Sha224GetHash(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha224GetHash(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha224GetHash(&sha224, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha224GetHash(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha224GetHash(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha224GetHash(&sha224, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha224Free(&sha224); #endif @@ -15491,9 +15495,9 @@ static int test_wc_Sha224Copy(void) ExpectIntEQ(wc_Sha224Copy(&sha224, &temp), 0); /* test bad arguments*/ - ExpectIntEQ(wc_Sha224Copy(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha224Copy(NULL, &temp), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha224Copy(&sha224, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha224Copy(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha224Copy(NULL, &temp), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha224Copy(&sha224, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha224Free(&sha224); wc_Sha224Free(&temp); @@ -15514,7 +15518,7 @@ static int test_wc_InitRipeMd(void) /* Test good arg. */ ExpectIntEQ(wc_InitRipeMd(&ripemd), 0); /* Test bad arg. */ - ExpectIntEQ(wc_InitRipeMd(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitRipeMd(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); @@ -15556,9 +15560,9 @@ static int test_wc_RipeMdUpdate(void) c.input = NULL; c.inLen = RIPEMD_DIGEST_SIZE; ExpectIntEQ(wc_RipeMdUpdate(&ripemd, (byte*)c.input, (word32)c.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RipeMdUpdate(NULL, (byte*)a.input, (word32)a.inLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); } /* END test_wc_RipeMdUdpate */ @@ -15590,9 +15594,9 @@ static int test_wc_RipeMdFinal(void) } /* Test bad args. */ - ExpectIntEQ(wc_RipeMdFinal(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_RipeMdFinal(NULL, hash1), BAD_FUNC_ARG); - ExpectIntEQ(wc_RipeMdFinal(&ripemd, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_RipeMdFinal(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_RipeMdFinal(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_RipeMdFinal(&ripemd, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); } /* END test_wc_RipeMdFinal */ @@ -15613,25 +15617,25 @@ static int test_wc_InitSha3(void) #if !defined(WOLFSSL_NOSHA3_224) ExpectIntEQ(wc_InitSha3_224(&sha3, HEAP_HINT, testDevId), 0); /* Test bad args. */ - ExpectIntEQ(wc_InitSha3_224(NULL, HEAP_HINT, testDevId), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitSha3_224(NULL, HEAP_HINT, testDevId), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_224_Free(&sha3); #endif /* NOSHA3_224 */ #if !defined(WOLFSSL_NOSHA3_256) ExpectIntEQ(wc_InitSha3_256(&sha3, HEAP_HINT, testDevId), 0); /* Test bad args. */ - ExpectIntEQ(wc_InitSha3_256(NULL, HEAP_HINT, testDevId), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitSha3_256(NULL, HEAP_HINT, testDevId), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_256_Free(&sha3); #endif /* NOSHA3_256 */ #if !defined(WOLFSSL_NOSHA3_384) ExpectIntEQ(wc_InitSha3_384(&sha3, HEAP_HINT, testDevId), 0); /* Test bad args. */ - ExpectIntEQ(wc_InitSha3_384(NULL, HEAP_HINT, testDevId), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitSha3_384(NULL, HEAP_HINT, testDevId), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_384_Free(&sha3); #endif /* NOSHA3_384 */ #if !defined(WOLFSSL_NOSHA3_512) ExpectIntEQ(wc_InitSha3_512(&sha3, HEAP_HINT, testDevId), 0); /* Test bad args. */ - ExpectIntEQ(wc_InitSha3_512(NULL, HEAP_HINT, testDevId), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitSha3_512(NULL, HEAP_HINT, testDevId), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_512_Free(&sha3); #endif /* NOSHA3_512 */ #endif @@ -15669,8 +15673,8 @@ static int testing_wc_Sha3_Update(void) ExpectIntEQ(XMEMCMP(sha3.t, msgCmp, msgCmplen), 0); /* Pass bad args. */ - ExpectIntEQ(wc_Sha3_224_Update(NULL, msg2, msg2len), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_224_Update(&sha3, NULL, 5), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_224_Update(NULL, msg2, msg2len), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_224_Update(&sha3, NULL, 5), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_224_Free(&sha3); ExpectIntEQ(wc_InitSha3_224(&sha3, HEAP_HINT, testDevId), 0); @@ -15690,8 +15694,8 @@ static int testing_wc_Sha3_Update(void) ExpectIntEQ(XMEMCMP(sha3.t, msgCmp, msgCmplen), 0); /* Pass bad args. */ - ExpectIntEQ(wc_Sha3_256_Update(NULL, msg2, msg2len), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_256_Update(&sha3, NULL, 5), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_256_Update(NULL, msg2, msg2len), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_256_Update(&sha3, NULL, 5), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_256_Free(&sha3); ExpectIntEQ(wc_InitSha3_256(&sha3, HEAP_HINT, testDevId), 0); @@ -15711,8 +15715,8 @@ static int testing_wc_Sha3_Update(void) ExpectIntEQ(XMEMCMP(sha3.t, msgCmp, msgCmplen), 0); /* Pass bad args. */ - ExpectIntEQ(wc_Sha3_384_Update(NULL, msg2, msg2len), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_384_Update(&sha3, NULL, 5), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_384_Update(NULL, msg2, msg2len), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_384_Update(&sha3, NULL, 5), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_384_Free(&sha3); ExpectIntEQ(wc_InitSha3_384(&sha3, HEAP_HINT, testDevId), 0); @@ -15732,8 +15736,8 @@ static int testing_wc_Sha3_Update(void) ExpectIntEQ(XMEMCMP(sha3.t, msgCmp, msgCmplen), 0); /* Pass bad args. */ - ExpectIntEQ(wc_Sha3_512_Update(NULL, msg2, msg2len), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_512_Update(&sha3, NULL, 5), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_512_Update(NULL, msg2, msg2len), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_512_Update(&sha3, NULL, 5), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_512_Free(&sha3); ExpectIntEQ(wc_InitSha3_512(&sha3, HEAP_HINT, testDevId), 0); @@ -15771,8 +15775,8 @@ static int test_wc_Sha3_224_Final(void) ExpectIntEQ(XMEMCMP(expOut, hash, WC_SHA3_224_DIGEST_SIZE), 0); /* Test bad args. */ - ExpectIntEQ(wc_Sha3_224_Final(NULL, hash), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_224_Final(&sha3, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_224_Final(NULL, hash), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_224_Final(&sha3, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_224_Free(&sha3); ExpectIntEQ(wc_InitSha3_224(&sha3, HEAP_HINT, testDevId), 0); @@ -15785,8 +15789,8 @@ static int test_wc_Sha3_224_Final(void) ExpectIntEQ(XMEMCMP(hash, hashRet, WC_SHA3_224_DIGEST_SIZE), 0); /* Test bad args. */ - ExpectIntEQ(wc_Sha3_224_GetHash(NULL, hashRet), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_224_GetHash(&sha3, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_224_GetHash(NULL, hashRet), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_224_GetHash(&sha3, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_224_Free(&sha3); #endif @@ -15819,8 +15823,8 @@ static int test_wc_Sha3_256_Final(void) ExpectIntEQ(XMEMCMP(expOut, hash, WC_SHA3_256_DIGEST_SIZE), 0); /* Test bad args. */ - ExpectIntEQ(wc_Sha3_256_Final(NULL, hash), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_256_Final(&sha3, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_256_Final(NULL, hash), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_256_Final(&sha3, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_256_Free(&sha3); ExpectIntEQ(wc_InitSha3_256(&sha3, HEAP_HINT, testDevId), 0); @@ -15833,8 +15837,8 @@ static int test_wc_Sha3_256_Final(void) ExpectIntEQ(XMEMCMP(hash, hashRet, WC_SHA3_256_DIGEST_SIZE), 0); /* Test bad args. */ - ExpectIntEQ(wc_Sha3_256_GetHash(NULL, hashRet), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_256_GetHash(&sha3, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_256_GetHash(NULL, hashRet), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_256_GetHash(&sha3, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_256_Free(&sha3); #endif @@ -15868,8 +15872,8 @@ static int test_wc_Sha3_384_Final(void) ExpectIntEQ(XMEMCMP(expOut, hash, WC_SHA3_384_DIGEST_SIZE), 0); /* Test bad args. */ - ExpectIntEQ(wc_Sha3_384_Final(NULL, hash), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_384_Final(&sha3, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_384_Final(NULL, hash), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_384_Final(&sha3, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_384_Free(&sha3); ExpectIntEQ(wc_InitSha3_384(&sha3, HEAP_HINT, testDevId), 0); @@ -15882,8 +15886,8 @@ static int test_wc_Sha3_384_Final(void) ExpectIntEQ(XMEMCMP(hash, hashRet, WC_SHA3_384_DIGEST_SIZE), 0); /* Test bad args. */ - ExpectIntEQ(wc_Sha3_384_GetHash(NULL, hashRet), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_384_GetHash(&sha3, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_384_GetHash(NULL, hashRet), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_384_GetHash(&sha3, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_384_Free(&sha3); #endif @@ -15920,8 +15924,8 @@ static int test_wc_Sha3_512_Final(void) ExpectIntEQ(XMEMCMP(expOut, hash, WC_SHA3_512_DIGEST_SIZE), 0); /* Test bad args. */ - ExpectIntEQ(wc_Sha3_512_Final(NULL, hash), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_512_Final(&sha3, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_512_Final(NULL, hash), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_512_Final(&sha3, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_512_Free(&sha3); ExpectIntEQ(wc_InitSha3_512(&sha3, HEAP_HINT, testDevId), 0); @@ -15934,8 +15938,8 @@ static int test_wc_Sha3_512_Final(void) ExpectIntEQ(XMEMCMP(hash, hashRet, WC_SHA3_512_DIGEST_SIZE), 0); /* Test bad args. */ - ExpectIntEQ(wc_Sha3_512_GetHash(NULL, hashRet), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_512_GetHash(&sha3, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_512_GetHash(NULL, hashRet), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_512_GetHash(&sha3, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_512_Free(&sha3); #endif @@ -15970,8 +15974,8 @@ static int test_wc_Sha3_224_Copy(void) ExpectIntEQ(XMEMCMP(hash, hashCpy, sizeof(hash)), 0); /* Test bad args. */ - ExpectIntEQ(wc_Sha3_224_Copy(NULL, &sha3), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_224_Copy(&sha3Cpy, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_224_Copy(NULL, &sha3), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_224_Copy(&sha3Cpy, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_224_Free(&sha3); wc_Sha3_224_Free(&sha3Cpy); @@ -16008,8 +16012,8 @@ static int test_wc_Sha3_256_Copy(void) ExpectIntEQ(XMEMCMP(hash, hashCpy, sizeof(hash)), 0); /* Test bad args. */ - ExpectIntEQ(wc_Sha3_256_Copy(NULL, &sha3), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_256_Copy(&sha3Cpy, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_256_Copy(NULL, &sha3), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_256_Copy(&sha3Cpy, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_256_Free(&sha3); wc_Sha3_256_Free(&sha3Cpy); @@ -16046,8 +16050,8 @@ static int test_wc_Sha3_384_Copy(void) ExpectIntEQ(XMEMCMP(hash, hashCpy, sizeof(hash)), 0); /* Test bad args. */ - ExpectIntEQ(wc_Sha3_384_Copy(NULL, &sha3), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_384_Copy(&sha3Cpy, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_384_Copy(NULL, &sha3), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_384_Copy(&sha3Cpy, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_384_Free(&sha3); wc_Sha3_384_Free(&sha3Cpy); @@ -16083,8 +16087,8 @@ static int test_wc_Sha3_512_Copy(void) ExpectIntEQ(XMEMCMP(hash, hashCpy, sizeof(hash)), 0); /* Test bad args. */ - ExpectIntEQ(wc_Sha3_512_Copy(NULL, &sha3), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha3_512_Copy(&sha3Cpy, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha3_512_Copy(NULL, &sha3), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha3_512_Copy(&sha3Cpy, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Sha3_512_Free(&sha3); wc_Sha3_512_Free(&sha3Cpy); @@ -16119,7 +16123,7 @@ static int test_wc_InitShake256(void) ExpectIntEQ(wc_InitShake256(&shake, HEAP_HINT, testDevId), 0); /* Test bad args. */ - ExpectIntEQ(wc_InitShake256(NULL, HEAP_HINT, testDevId), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitShake256(NULL, HEAP_HINT, testDevId), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Shake256_Free(&shake); #endif @@ -16152,8 +16156,8 @@ static int testing_wc_Shake256_Update(void) ExpectIntEQ(XMEMCMP(shake.t, msgCmp, msgCmplen), 0); /* Pass bad args. */ - ExpectIntEQ(wc_Shake256_Update(NULL, msg2, msg2len), BAD_FUNC_ARG); - ExpectIntEQ(wc_Shake256_Update(&shake, NULL, 5), BAD_FUNC_ARG); + ExpectIntEQ(wc_Shake256_Update(NULL, msg2, msg2len), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Shake256_Update(&shake, NULL, 5), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Shake256_Free(&shake); ExpectIntEQ(wc_InitShake256(&shake, HEAP_HINT, testDevId), 0); @@ -16194,9 +16198,9 @@ static int test_wc_Shake256_Final(void) /* Test bad args. */ ExpectIntEQ(wc_Shake256_Final(NULL, hash, (word32)sizeof(hash)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Shake256_Final(&shake, NULL, (word32)sizeof(hash)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Shake256_Free(&shake); #endif @@ -16230,8 +16234,8 @@ static int test_wc_Shake256_Copy(void) ExpectIntEQ(XMEMCMP(hash, hashCpy, sizeof(hash)), 0); /* Test bad args. */ - ExpectIntEQ(wc_Shake256_Copy(NULL, &shake), BAD_FUNC_ARG); - ExpectIntEQ(wc_Shake256_Copy(&shakeCpy, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Shake256_Copy(NULL, &shake), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Shake256_Copy(&shakeCpy, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Shake256_Free(&shake); wc_Shake256_Free(&shakeCpy); @@ -16269,7 +16273,7 @@ static int test_wc_InitSm3Free(void) wc_Sm3 sm3; /* Invalid Parameters */ - ExpectIntEQ(wc_InitSm3(NULL, NULL, INVALID_DEVID), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitSm3(NULL, NULL, INVALID_DEVID), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid Parameters */ ExpectIntEQ(wc_InitSm3(&sm3, NULL, INVALID_DEVID), 0); @@ -16305,9 +16309,9 @@ static int test_wc_Sm3UpdateFinal(void) ExpectIntEQ(wc_InitSm3(&sm3, NULL, INVALID_DEVID), 0); /* Invalid Parameters */ - ExpectIntEQ(wc_Sm3Update(NULL, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm3Update(&sm3, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm3Update(NULL, data, 1), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm3Update(NULL, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm3Update(&sm3, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm3Update(NULL, data, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid Parameters */ ExpectIntEQ(wc_Sm3Update(&sm3, NULL, 0), 0); @@ -16320,9 +16324,9 @@ static int test_wc_Sm3UpdateFinal(void) ExpectIntEQ(wc_Sm3Update(&sm3, data, WC_SM3_PAD_SIZE), 0); /* Invalid Parameters */ - ExpectIntEQ(wc_Sm3Final(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm3Final(&sm3, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm3Final(NULL, hash), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm3Final(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm3Final(&sm3, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm3Final(NULL, hash), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid Parameters */ ExpectIntEQ(wc_Sm3Final(&sm3, hash), 0); @@ -16368,9 +16372,9 @@ static int test_wc_Sm3GetHash(void) ExpectIntEQ(wc_Sm3Final(&sm3, calcHash), 0); /* Invalid Parameters */ - ExpectIntEQ(wc_Sm3GetHash(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm3GetHash(&sm3, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm3GetHash(NULL, hash), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm3GetHash(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm3GetHash(&sm3, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm3GetHash(NULL, hash), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid Parameters */ ExpectIntEQ(wc_Sm3GetHash(&sm3, hash), 0); @@ -16405,9 +16409,9 @@ static int test_wc_Sm3Copy(void) ExpectIntEQ(wc_InitSm3(&sm3Copy, NULL, INVALID_DEVID), 0); /* Invalid Parameters */ - ExpectIntEQ(wc_Sm3Copy(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm3Copy(&sm3, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm3Copy(NULL, &sm3Copy), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm3Copy(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm3Copy(&sm3, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm3Copy(NULL, &sm3Copy), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid Parameters */ ExpectIntEQ(wc_Sm3Copy(&sm3, &sm3Copy), 0); @@ -16453,9 +16457,9 @@ static int test_wc_Sm3FinalRaw(void) ExpectIntEQ(wc_InitSm3(&sm3, NULL, INVALID_DEVID), 0); /* Invalid Parameters */ - ExpectIntEQ(wc_Sm3FinalRaw(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm3FinalRaw(&sm3, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm3FinalRaw(NULL, hash1), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm3FinalRaw(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm3FinalRaw(&sm3, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm3FinalRaw(NULL, hash1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); times = sizeof(hash_test) / sizeof(byte*); for (i = 0; i < times; i++) { @@ -16512,8 +16516,8 @@ static int test_wc_Sm3Hash(void) byte hash[WC_SM3_DIGEST_SIZE]; /* Invalid parameters. */ - ExpectIntEQ(wc_Sm3Hash(NULL, sizeof(data), hash), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm3Hash(data, sizeof(data), NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm3Hash(NULL, sizeof(data), hash), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm3Hash(data, sizeof(data), NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid parameters. */ ExpectIntEQ(wc_Sm3Hash(data, sizeof(data), hash), 0); @@ -16548,7 +16552,7 @@ static int test_wc_Md5HmacSetKey(void) (word32)XSTRLEN(keys[itr])); #if defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION >= 5) wc_HmacFree(&hmac); - ExpectIntEQ(ret, BAD_FUNC_ARG); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #else ExpectIntEQ(ret, 0); #endif @@ -16556,14 +16560,14 @@ static int test_wc_Md5HmacSetKey(void) /* Bad args. */ ExpectIntEQ(wc_HmacSetKey(NULL, WC_MD5, (byte*)keys[0], - (word32)XSTRLEN(keys[0])), BAD_FUNC_ARG); + (word32)XSTRLEN(keys[0])), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacSetKey(&hmac, WC_MD5, NULL, (word32)XSTRLEN(keys[0])), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacSetKey(&hmac, 21, (byte*)keys[0], - (word32)XSTRLEN(keys[0])), BAD_FUNC_ARG); + (word32)XSTRLEN(keys[0])), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ret = wc_HmacSetKey(&hmac, WC_MD5, (byte*)keys[0], 0); #if defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION >= 5) - ExpectIntEQ(ret, BAD_FUNC_ARG); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #elif defined(HAVE_FIPS) ExpectIntEQ(ret, HMAC_MIN_KEYLEN_E); #else @@ -16608,11 +16612,11 @@ static int test_wc_ShaHmacSetKey(void) /* Bad args. */ ExpectIntEQ(wc_HmacSetKey(NULL, WC_SHA, (byte*)keys[0], - (word32)XSTRLEN(keys[0])), BAD_FUNC_ARG); + (word32)XSTRLEN(keys[0])), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacSetKey(&hmac, WC_SHA, NULL, (word32)XSTRLEN(keys[0])), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacSetKey(&hmac, 21, (byte*)keys[0], - (word32)XSTRLEN(keys[0])), BAD_FUNC_ARG); + (word32)XSTRLEN(keys[0])), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ret = wc_HmacSetKey(&hmac, WC_SHA, (byte*)keys[0], 0); #ifdef HAVE_FIPS @@ -16657,11 +16661,11 @@ static int test_wc_Sha224HmacSetKey(void) /* Bad args. */ ExpectIntEQ(wc_HmacSetKey(NULL, WC_SHA224, (byte*)keys[0], - (word32)XSTRLEN(keys[0])), BAD_FUNC_ARG); + (word32)XSTRLEN(keys[0])), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacSetKey(&hmac, WC_SHA224, NULL, (word32)XSTRLEN(keys[0])), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacSetKey(&hmac, 21, (byte*)keys[0], - (word32)XSTRLEN(keys[0])), BAD_FUNC_ARG); + (word32)XSTRLEN(keys[0])), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ret = wc_HmacSetKey(&hmac, WC_SHA224, (byte*)keys[0], 0); #ifdef HAVE_FIPS ExpectIntEQ(ret, HMAC_MIN_KEYLEN_E); @@ -16705,11 +16709,11 @@ static int test_wc_Sha256HmacSetKey(void) /* Bad args. */ ExpectIntEQ(wc_HmacSetKey(NULL, WC_SHA256, (byte*)keys[0], - (word32)XSTRLEN(keys[0])), BAD_FUNC_ARG); + (word32)XSTRLEN(keys[0])), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacSetKey(&hmac, WC_SHA256, NULL, (word32)XSTRLEN(keys[0])), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacSetKey(&hmac, 21, (byte*)keys[0], - (word32)XSTRLEN(keys[0])), BAD_FUNC_ARG); + (word32)XSTRLEN(keys[0])), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ret = wc_HmacSetKey(&hmac, WC_SHA256, (byte*)keys[0], 0); #ifdef HAVE_FIPS ExpectIntEQ(ret, HMAC_MIN_KEYLEN_E); @@ -16754,11 +16758,11 @@ static int test_wc_Sha384HmacSetKey(void) /* Bad args. */ ExpectIntEQ(wc_HmacSetKey(NULL, WC_SHA384, (byte*)keys[0], - (word32)XSTRLEN(keys[0])), BAD_FUNC_ARG); + (word32)XSTRLEN(keys[0])), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacSetKey(&hmac, WC_SHA384, NULL, (word32)XSTRLEN(keys[0])), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacSetKey(&hmac, 21, (byte*)keys[0], - (word32)XSTRLEN(keys[0])), BAD_FUNC_ARG); + (word32)XSTRLEN(keys[0])), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ret = wc_HmacSetKey(&hmac, WC_SHA384, (byte*)keys[0], 0); #ifdef HAVE_FIPS ExpectIntEQ(ret, HMAC_MIN_KEYLEN_E); @@ -16802,8 +16806,8 @@ static int test_wc_Md5HmacUpdate(void) /* Test bad args. */ ExpectIntEQ(wc_HmacUpdate(NULL, (byte*)a.input, (word32)a.inLen), - BAD_FUNC_ARG); - ExpectIntEQ(wc_HmacUpdate(&hmac, NULL, (word32)a.inLen), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_HmacUpdate(&hmac, NULL, (word32)a.inLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacUpdate(&hmac, (byte*)a.input, 0), 0); @@ -16842,8 +16846,8 @@ static int test_wc_ShaHmacUpdate(void) /* Test bad args. */ ExpectIntEQ(wc_HmacUpdate(NULL, (byte*)a.input, (word32)a.inLen), - BAD_FUNC_ARG); - ExpectIntEQ(wc_HmacUpdate(&hmac, NULL, (word32)a.inLen), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_HmacUpdate(&hmac, NULL, (word32)a.inLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacUpdate(&hmac, (byte*)a.input, 0), 0); @@ -16882,8 +16886,8 @@ static int test_wc_Sha224HmacUpdate(void) /* Test bad args. */ ExpectIntEQ(wc_HmacUpdate(NULL, (byte*)a.input, (word32)a.inLen), - BAD_FUNC_ARG); - ExpectIntEQ(wc_HmacUpdate(&hmac, NULL, (word32)a.inLen), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_HmacUpdate(&hmac, NULL, (word32)a.inLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacUpdate(&hmac, (byte*)a.input, 0), 0); @@ -16922,8 +16926,8 @@ static int test_wc_Sha256HmacUpdate(void) /* Test bad args. */ ExpectIntEQ(wc_HmacUpdate(NULL, (byte*)a.input, (word32)a.inLen), - BAD_FUNC_ARG); - ExpectIntEQ(wc_HmacUpdate(&hmac, NULL, (word32)a.inLen), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_HmacUpdate(&hmac, NULL, (word32)a.inLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacUpdate(&hmac, (byte*)a.input, 0), 0); @@ -16962,8 +16966,8 @@ static int test_wc_Sha384HmacUpdate(void) /* Test bad args. */ ExpectIntEQ(wc_HmacUpdate(NULL, (byte*)a.input, (word32)a.inLen), - BAD_FUNC_ARG); - ExpectIntEQ(wc_HmacUpdate(&hmac, NULL, (word32)a.inLen), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_HmacUpdate(&hmac, NULL, (word32)a.inLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HmacUpdate(&hmac, (byte*)a.input, 0), 0); @@ -17000,9 +17004,9 @@ static int test_wc_Md5HmacFinal(void) ExpectIntEQ(XMEMCMP(hash, a.output, WC_MD5_DIGEST_SIZE), 0); /* Try bad parameters. */ - ExpectIntEQ(wc_HmacFinal(NULL, hash), BAD_FUNC_ARG); + ExpectIntEQ(wc_HmacFinal(NULL, hash), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef HAVE_FIPS - ExpectIntEQ(wc_HmacFinal(&hmac, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_HmacFinal(&hmac, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif wc_HmacFree(&hmac); @@ -17038,9 +17042,9 @@ static int test_wc_ShaHmacFinal(void) ExpectIntEQ(XMEMCMP(hash, a.output, WC_SHA_DIGEST_SIZE), 0); /* Try bad parameters. */ - ExpectIntEQ(wc_HmacFinal(NULL, hash), BAD_FUNC_ARG); + ExpectIntEQ(wc_HmacFinal(NULL, hash), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef HAVE_FIPS - ExpectIntEQ(wc_HmacFinal(&hmac, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_HmacFinal(&hmac, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif wc_HmacFree(&hmac); @@ -17077,9 +17081,9 @@ static int test_wc_Sha224HmacFinal(void) ExpectIntEQ(XMEMCMP(hash, a.output, WC_SHA224_DIGEST_SIZE), 0); /* Try bad parameters. */ - ExpectIntEQ(wc_HmacFinal(NULL, hash), BAD_FUNC_ARG); + ExpectIntEQ(wc_HmacFinal(NULL, hash), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef HAVE_FIPS - ExpectIntEQ(wc_HmacFinal(&hmac, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_HmacFinal(&hmac, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif wc_HmacFree(&hmac); @@ -17116,9 +17120,9 @@ static int test_wc_Sha256HmacFinal(void) ExpectIntEQ(XMEMCMP(hash, a.output, WC_SHA256_DIGEST_SIZE), 0); /* Try bad parameters. */ - ExpectIntEQ(wc_HmacFinal(NULL, hash), BAD_FUNC_ARG); + ExpectIntEQ(wc_HmacFinal(NULL, hash), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef HAVE_FIPS - ExpectIntEQ(wc_HmacFinal(&hmac, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_HmacFinal(&hmac, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif wc_HmacFree(&hmac); @@ -17156,9 +17160,9 @@ static int test_wc_Sha384HmacFinal(void) ExpectIntEQ(XMEMCMP(hash, a.output, WC_SHA384_DIGEST_SIZE), 0); /* Try bad parameters. */ - ExpectIntEQ(wc_HmacFinal(NULL, hash), BAD_FUNC_ARG); + ExpectIntEQ(wc_HmacFinal(NULL, hash), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef HAVE_FIPS - ExpectIntEQ(wc_HmacFinal(&hmac, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_HmacFinal(&hmac, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif wc_HmacFree(&hmac); @@ -17218,10 +17222,10 @@ static int test_wc_InitCmac(void) wc_AesFree(&cmac3.aes); /* Test bad args. */ - ExpectIntEQ(wc_InitCmac(NULL, key3, key3Sz, type, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_InitCmac(&cmac3, NULL, key3Sz, type, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_InitCmac(&cmac3, key3, 0, type, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_InitCmac(&cmac3, key3, key3Sz, 0, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitCmac(NULL, key3, key3Sz, type, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_InitCmac(&cmac3, NULL, key3Sz, type, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_InitCmac(&cmac3, key3, 0, type, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_InitCmac(&cmac3, key3, key3Sz, 0, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); } /* END test_wc_InitCmac */ @@ -17254,8 +17258,8 @@ static int test_wc_CmacUpdate(void) ExpectIntEQ(wc_CmacUpdate(&cmac, in, inSz), 0); /* Test bad args. */ - ExpectIntEQ(wc_CmacUpdate(NULL, in, inSz), BAD_FUNC_ARG); - ExpectIntEQ(wc_CmacUpdate(&cmac, NULL, 30), BAD_FUNC_ARG); + ExpectIntEQ(wc_CmacUpdate(NULL, in, inSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_CmacUpdate(&cmac, NULL, 30), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_AesFree(&cmac.aes); #endif return EXPECT_RESULT(); @@ -17305,9 +17309,9 @@ static int test_wc_CmacFinal(void) #if (!defined(HAVE_FIPS) || FIPS_VERSION_GE(5, 3)) && !defined(HAVE_SELFTEST) /* Pass in bad args. */ - ExpectIntEQ(wc_CmacFinalNoFree(NULL, mac, &macSz), BAD_FUNC_ARG); - ExpectIntEQ(wc_CmacFinalNoFree(&cmac, NULL, &macSz), BAD_FUNC_ARG); - ExpectIntEQ(wc_CmacFinalNoFree(&cmac, mac, &badMacSz), BUFFER_E); + ExpectIntEQ(wc_CmacFinalNoFree(NULL, mac, &macSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_CmacFinalNoFree(&cmac, NULL, &macSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_CmacFinalNoFree(&cmac, mac, &badMacSz), WC_NO_ERR_TRACE(BUFFER_E)); /* For the last call, use the API with implicit wc_CmacFree(). */ ExpectIntEQ(wc_CmacFinal(&cmac, mac, &macSz), 0); @@ -17317,9 +17321,9 @@ static int test_wc_CmacFinal(void) ExpectIntEQ(XMEMCMP(mac, expMac, expMacSz), 0); /* Pass in bad args. */ - ExpectIntEQ(wc_CmacFinal(NULL, mac, &macSz), BAD_FUNC_ARG); - ExpectIntEQ(wc_CmacFinal(&cmac, NULL, &macSz), BAD_FUNC_ARG); - ExpectIntEQ(wc_CmacFinal(&cmac, mac, &badMacSz), BUFFER_E); + ExpectIntEQ(wc_CmacFinal(NULL, mac, &macSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_CmacFinal(&cmac, NULL, &macSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_CmacFinal(&cmac, mac, &badMacSz), WC_NO_ERR_TRACE(BUFFER_E)); #endif /* !HAVE_FIPS || FIPS>=5.3 */ #endif return EXPECT_RESULT(); @@ -17354,26 +17358,26 @@ static int test_wc_AesCmacGenerate(void) /* Pass in bad args. */ ExpectIntEQ(wc_AesCmacGenerate(NULL, &macSz, msg, msgSz, key, keySz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCmacGenerate(mac, &macSz, msg, msgSz, NULL, keySz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCmacGenerate(mac, &macSz, msg, msgSz, key, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCmacGenerate(mac, &macSz, NULL, msgSz, key, keySz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCmacVerify(mac, macSz, msg, msgSz, key, keySz), 0); /* Test bad args. */ ExpectIntEQ(wc_AesCmacVerify(NULL, macSz, msg, msgSz, key, keySz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCmacVerify(mac, 0, msg, msgSz, key, keySz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCmacVerify(mac, macSz, msg, msgSz, NULL, keySz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCmacVerify(mac, macSz, msg, msgSz, key, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCmacVerify(mac, macSz, NULL, msgSz, key, keySz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); @@ -17425,77 +17429,77 @@ static int test_wc_AesGcmStream(void) ExpectIntEQ(wc_AesInit(aesDec, NULL, INVALID_DEVID), 0); /* BadParameters to streaming init. */ - ExpectIntEQ(wc_AesGcmEncryptInit(NULL, NULL, 0, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_AesGcmDecryptInit(NULL, NULL, 0, NULL, 0), BAD_FUNC_ARG); + ExpectIntEQ(wc_AesGcmEncryptInit(NULL, NULL, 0, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_AesGcmDecryptInit(NULL, NULL, 0, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmDecryptInit(aesEnc, NULL, AES_128_KEY_SIZE, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmDecryptInit(aesEnc, NULL, 0, NULL, GCM_NONCE_MID_SZ), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Bad parameters to encrypt update. */ ExpectIntEQ(wc_AesGcmEncryptUpdate(NULL, NULL, NULL, 0, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmEncryptUpdate(aesEnc, NULL, NULL, 1, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmEncryptUpdate(aesEnc, NULL, in, 1, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmEncryptUpdate(aesEnc, out, NULL, 1, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmEncryptUpdate(aesEnc, NULL, NULL, 0, NULL, 1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Bad parameters to decrypt update. */ ExpectIntEQ(wc_AesGcmDecryptUpdate(NULL, NULL, NULL, 0, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmDecryptUpdate(aesDec, NULL, NULL, 1, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmDecryptUpdate(aesDec, NULL, in, 1, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmDecryptUpdate(aesDec, out, NULL, 1, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmDecryptUpdate(aesDec, NULL, NULL, 0, NULL, 1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Bad parameters to encrypt final. */ - ExpectIntEQ(wc_AesGcmEncryptFinal(NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_AesGcmEncryptFinal(NULL, tag, 0), BAD_FUNC_ARG); + ExpectIntEQ(wc_AesGcmEncryptFinal(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_AesGcmEncryptFinal(NULL, tag, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmEncryptFinal(NULL, NULL, AES_BLOCK_SIZE), - BAD_FUNC_ARG); - ExpectIntEQ(wc_AesGcmEncryptFinal(aesEnc, tag, 0), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_AesGcmEncryptFinal(aesEnc, tag, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmEncryptFinal(aesEnc, NULL, AES_BLOCK_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmEncryptFinal(aesEnc, tag, AES_BLOCK_SIZE + 1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Bad parameters to decrypt final. */ - ExpectIntEQ(wc_AesGcmDecryptFinal(NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_AesGcmDecryptFinal(NULL, tag, 0), BAD_FUNC_ARG); + ExpectIntEQ(wc_AesGcmDecryptFinal(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_AesGcmDecryptFinal(NULL, tag, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmDecryptFinal(NULL, NULL, AES_BLOCK_SIZE), - BAD_FUNC_ARG); - ExpectIntEQ(wc_AesGcmDecryptFinal(aesDec, tag, 0), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_AesGcmDecryptFinal(aesDec, tag, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmDecryptFinal(aesDec, NULL, AES_BLOCK_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmDecryptFinal(aesDec, tag, AES_BLOCK_SIZE + 1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Check calling final before setting key fails. */ - ExpectIntEQ(wc_AesGcmEncryptFinal(aesEnc, tag, sizeof(tag)), MISSING_KEY); - ExpectIntEQ(wc_AesGcmEncryptFinal(aesDec, tag, sizeof(tag)), MISSING_KEY); + ExpectIntEQ(wc_AesGcmEncryptFinal(aesEnc, tag, sizeof(tag)), WC_NO_ERR_TRACE(MISSING_KEY)); + ExpectIntEQ(wc_AesGcmEncryptFinal(aesDec, tag, sizeof(tag)), WC_NO_ERR_TRACE(MISSING_KEY)); /* Check calling update before setting key else fails. */ ExpectIntEQ(wc_AesGcmEncryptUpdate(aesEnc, NULL, NULL, 0, aad, 1), - MISSING_KEY); + WC_NO_ERR_TRACE(MISSING_KEY)); ExpectIntEQ(wc_AesGcmDecryptUpdate(aesDec, NULL, NULL, 0, aad, 1), - MISSING_KEY); + WC_NO_ERR_TRACE(MISSING_KEY)); /* Set key but not IV. */ ExpectIntEQ(wc_AesGcmInit(aesEnc, key, sizeof(key), NULL, 0), 0); ExpectIntEQ(wc_AesGcmInit(aesDec, key, sizeof(key), NULL, 0), 0); /* Check calling final before setting IV fails. */ - ExpectIntEQ(wc_AesGcmEncryptFinal(aesEnc, tag, sizeof(tag)), MISSING_IV); - ExpectIntEQ(wc_AesGcmEncryptFinal(aesDec, tag, sizeof(tag)), MISSING_IV); + ExpectIntEQ(wc_AesGcmEncryptFinal(aesEnc, tag, sizeof(tag)), WC_NO_ERR_TRACE(MISSING_IV)); + ExpectIntEQ(wc_AesGcmEncryptFinal(aesDec, tag, sizeof(tag)), WC_NO_ERR_TRACE(MISSING_IV)); /* Check calling update before setting IV else fails. */ ExpectIntEQ(wc_AesGcmEncryptUpdate(aesEnc, NULL, NULL, 0, aad, 1), - MISSING_IV); + WC_NO_ERR_TRACE(MISSING_IV)); ExpectIntEQ(wc_AesGcmDecryptUpdate(aesDec, NULL, NULL, 0, aad, 1), - MISSING_IV); + WC_NO_ERR_TRACE(MISSING_IV)); /* Set IV using fixed part IV and external IV APIs. */ ExpectIntEQ(wc_AesGcmSetIV(aesEnc, GCM_NONCE_MID_SZ, iv, AES_IV_FIXED_SZ, @@ -17626,7 +17630,7 @@ static int test_wc_Sm4(void) #endif /* Invalid parameters - wc_Sm4Init */ - ExpectIntEQ(wc_Sm4Init(NULL, NULL, INVALID_DEVID), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm4Init(NULL, NULL, INVALID_DEVID), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid cases - wc_Sm4Init */ ExpectIntEQ(wc_Sm4Init(&sm4, NULL, INVALID_DEVID), 0); @@ -17636,15 +17640,15 @@ static int test_wc_Sm4(void) XMEMSET(key, 0, sizeof(key)); /* Invalid parameters - wc_Sm4SetKey. */ - ExpectIntEQ(wc_Sm4SetKey(NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4SetKey(&sm4, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4SetKey(NULL, key, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4SetKey(NULL, NULL, SM4_KEY_SIZE), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4SetKey(&sm4, key, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4SetKey(&sm4, NULL, SM4_KEY_SIZE), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4SetKey(NULL, key, SM4_KEY_SIZE), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4SetKey(&sm4, key, SM4_KEY_SIZE-1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4SetKey(&sm4, key, SM4_KEY_SIZE+1), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm4SetKey(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4SetKey(&sm4, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4SetKey(NULL, key, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4SetKey(NULL, NULL, SM4_KEY_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4SetKey(&sm4, key, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4SetKey(&sm4, NULL, SM4_KEY_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4SetKey(NULL, key, SM4_KEY_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4SetKey(&sm4, key, SM4_KEY_SIZE-1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4SetKey(&sm4, key, SM4_KEY_SIZE+1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid cases - wc_Sm4SetKey. */ ExpectIntEQ(wc_Sm4SetKey(&sm4, key, SM4_KEY_SIZE), 0); @@ -17654,9 +17658,9 @@ static int test_wc_Sm4(void) XMEMSET(iv, 0, sizeof(iv)); /* Invalid parameters - wc_Sm4SetIV. */ - ExpectIntEQ(wc_Sm4SetIV(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4SetIV(&sm4, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4SetIV(NULL, iv), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm4SetIV(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4SetIV(&sm4, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4SetIV(NULL, iv), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid cases - wc_Sm4SetIV. */ ExpectIntEQ(wc_Sm4SetIV(&sm4, iv), 0); @@ -17689,22 +17693,22 @@ static int test_wc_Sm4Ecb(void) XMEMSET(in, 0, sizeof(in)); ExpectIntEQ(wc_Sm4Init(&sm4, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_Sm4EcbEncrypt(&sm4, out, in, 0), MISSING_KEY); - ExpectIntEQ(wc_Sm4EcbDecrypt(&sm4, out, in, 0), MISSING_KEY); + ExpectIntEQ(wc_Sm4EcbEncrypt(&sm4, out, in, 0), WC_NO_ERR_TRACE(MISSING_KEY)); + ExpectIntEQ(wc_Sm4EcbDecrypt(&sm4, out, in, 0), WC_NO_ERR_TRACE(MISSING_KEY)); /* Tested in test_wc_Sm4. */ ExpectIntEQ(wc_Sm4SetKey(&sm4, key, SM4_KEY_SIZE), 0); /* Invalid parameters - wc_Sm4EcbEncrypt. */ - ExpectIntEQ(wc_Sm4EcbEncrypt(NULL, NULL, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbEncrypt(&sm4, NULL, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbEncrypt(NULL, out, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbEncrypt(NULL, NULL, in, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbEncrypt(NULL, NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbEncrypt(NULL, out, in, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbEncrypt(&sm4, NULL, in, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbEncrypt(&sm4, out, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbEncrypt(&sm4, out, in, 1), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm4EcbEncrypt(NULL, NULL, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbEncrypt(&sm4, NULL, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbEncrypt(NULL, out, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbEncrypt(NULL, NULL, in, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbEncrypt(NULL, NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbEncrypt(NULL, out, in, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbEncrypt(&sm4, NULL, in, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbEncrypt(&sm4, out, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbEncrypt(&sm4, out, in, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid cases - wc_Sm4EcbEncrypt. */ ExpectIntEQ(wc_Sm4EcbEncrypt(&sm4, out, in, 0), 0); @@ -17716,15 +17720,15 @@ static int test_wc_Sm4Ecb(void) ExpectIntEQ(XMEMCMP(in, out, SM4_BLOCK_SIZE * 2), 0); /* Invalid parameters - wc_Sm4EcbDecrypt. */ - ExpectIntEQ(wc_Sm4EcbDecrypt(NULL, NULL, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbDecrypt(&sm4, NULL, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbDecrypt(NULL, out, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbDecrypt(NULL, NULL, in, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbDecrypt(NULL, NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbDecrypt(NULL, out, in, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbDecrypt(&sm4, NULL, in, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbDecrypt(&sm4, out, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4EcbDecrypt(&sm4, out, in, 1), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm4EcbDecrypt(NULL, NULL, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbDecrypt(&sm4, NULL, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbDecrypt(NULL, out, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbDecrypt(NULL, NULL, in, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbDecrypt(NULL, NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbDecrypt(NULL, out, in, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbDecrypt(&sm4, NULL, in, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbDecrypt(&sm4, out, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4EcbDecrypt(&sm4, out, in, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid cases - wc_Sm4EcbDecrypt. */ ExpectIntEQ(wc_Sm4EcbDecrypt(&sm4, out, in, 0), 0); @@ -17762,25 +17766,25 @@ static int test_wc_Sm4Cbc(void) XMEMSET(in, 0, sizeof(in)); ExpectIntEQ(wc_Sm4Init(&sm4, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_Sm4CbcEncrypt(&sm4, out, in, 0), MISSING_KEY); - ExpectIntEQ(wc_Sm4CbcDecrypt(&sm4, out, in, 0), MISSING_KEY); + ExpectIntEQ(wc_Sm4CbcEncrypt(&sm4, out, in, 0), WC_NO_ERR_TRACE(MISSING_KEY)); + ExpectIntEQ(wc_Sm4CbcDecrypt(&sm4, out, in, 0), WC_NO_ERR_TRACE(MISSING_KEY)); /* Tested in test_wc_Sm4. */ ExpectIntEQ(wc_Sm4SetKey(&sm4, key, SM4_KEY_SIZE), 0); - ExpectIntEQ(wc_Sm4CbcEncrypt(&sm4, out, in, 0), MISSING_IV); - ExpectIntEQ(wc_Sm4CbcDecrypt(&sm4, out, in, 0), MISSING_IV); + ExpectIntEQ(wc_Sm4CbcEncrypt(&sm4, out, in, 0), WC_NO_ERR_TRACE(MISSING_IV)); + ExpectIntEQ(wc_Sm4CbcDecrypt(&sm4, out, in, 0), WC_NO_ERR_TRACE(MISSING_IV)); /* Tested in test_wc_Sm4. */ ExpectIntEQ(wc_Sm4SetIV(&sm4, iv), 0); /* Invalid parameters - wc_Sm4CbcEncrypt. */ - ExpectIntEQ(wc_Sm4CbcEncrypt(NULL, NULL, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcEncrypt(&sm4, NULL, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcEncrypt(NULL, out, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcEncrypt(NULL, NULL, in, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcEncrypt(NULL, NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcEncrypt(NULL, out, in, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcEncrypt(&sm4, NULL, in, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcEncrypt(&sm4, out, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcEncrypt(&sm4, out, in, 1), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm4CbcEncrypt(NULL, NULL, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcEncrypt(&sm4, NULL, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcEncrypt(NULL, out, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcEncrypt(NULL, NULL, in, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcEncrypt(NULL, NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcEncrypt(NULL, out, in, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcEncrypt(&sm4, NULL, in, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcEncrypt(&sm4, out, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcEncrypt(&sm4, out, in, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid cases - wc_Sm4CbcEncrypt. */ ExpectIntEQ(wc_Sm4CbcEncrypt(&sm4, out, in, 0), 0); @@ -17794,15 +17798,15 @@ static int test_wc_Sm4Cbc(void) ExpectIntEQ(XMEMCMP(in, out, SM4_BLOCK_SIZE * 2), 0); /* Invalid parameters - wc_Sm4CbcDecrypt. */ - ExpectIntEQ(wc_Sm4CbcDecrypt(NULL, NULL, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcDecrypt(&sm4, NULL, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcDecrypt(NULL, out, NULL, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcDecrypt(NULL, NULL, in, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcDecrypt(NULL, NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcDecrypt(NULL, out, in, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcDecrypt(&sm4, NULL, in, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcDecrypt(&sm4, out, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CbcDecrypt(&sm4, out, in, 1), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm4CbcDecrypt(NULL, NULL, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcDecrypt(&sm4, NULL, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcDecrypt(NULL, out, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcDecrypt(NULL, NULL, in, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcDecrypt(NULL, NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcDecrypt(NULL, out, in, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcDecrypt(&sm4, NULL, in, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcDecrypt(&sm4, out, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CbcDecrypt(&sm4, out, in, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4SetIV(&sm4, iv), 0); /* Valid cases - wc_Sm4CbcDecrypt. */ @@ -17845,21 +17849,21 @@ static int test_wc_Sm4Ctr(void) XMEMSET(in, 0, sizeof(in)); ExpectIntEQ(wc_Sm4Init(&sm4, NULL, INVALID_DEVID), 0); - ExpectIntEQ(wc_Sm4CtrEncrypt(&sm4, out, in, 0), MISSING_KEY); + ExpectIntEQ(wc_Sm4CtrEncrypt(&sm4, out, in, 0), WC_NO_ERR_TRACE(MISSING_KEY)); /* Tested in test_wc_Sm4. */ ExpectIntEQ(wc_Sm4SetKey(&sm4, key, SM4_KEY_SIZE), 0); - ExpectIntEQ(wc_Sm4CtrEncrypt(&sm4, out, in, 0), MISSING_IV); + ExpectIntEQ(wc_Sm4CtrEncrypt(&sm4, out, in, 0), WC_NO_ERR_TRACE(MISSING_IV)); /* Tested in test_wc_Sm4. */ ExpectIntEQ(wc_Sm4SetIV(&sm4, iv), 0); /* Invalid parameters - wc_Sm4CtrEncrypt. */ - ExpectIntEQ(wc_Sm4CtrEncrypt(NULL, NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CtrEncrypt(&sm4, NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CtrEncrypt(NULL, out, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CtrEncrypt(NULL, NULL, in, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CtrEncrypt(&sm4, out, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CtrEncrypt(&sm4, NULL, in, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4CtrEncrypt(NULL, out, in, 0), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm4CtrEncrypt(NULL, NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CtrEncrypt(&sm4, NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CtrEncrypt(NULL, out, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CtrEncrypt(NULL, NULL, in, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CtrEncrypt(&sm4, out, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CtrEncrypt(&sm4, NULL, in, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4CtrEncrypt(NULL, out, in, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid cases - wc_Sm4CtrEncrypt. */ ExpectIntEQ(wc_Sm4CtrEncrypt(&sm4, out, in, 0), 0); @@ -17939,81 +17943,81 @@ static int test_wc_Sm4Gcm(void) ExpectIntEQ(wc_Sm4Init(&sm4, NULL, INVALID_DEVID), 0); ExpectIntEQ(wc_Sm4GcmEncrypt(&sm4, out, in, 0, nonce, GCM_NONCE_MID_SZ, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), MISSING_KEY); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(MISSING_KEY)); ExpectIntEQ(wc_Sm4GcmDecrypt(&sm4, out, in, 0, nonce, GCM_NONCE_MID_SZ, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), MISSING_KEY); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(MISSING_KEY)); /* Invalid parameters - wc_Sm4GcmSetKey. */ - ExpectIntEQ(wc_Sm4GcmSetKey(NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4GcmSetKey(&sm4, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4GcmSetKey(NULL, key, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4GcmSetKey(NULL, NULL, SM4_KEY_SIZE), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4GcmSetKey(&sm4, key, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4GcmSetKey(&sm4, NULL, SM4_KEY_SIZE), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sm4GcmSetKey(NULL, key, SM4_KEY_SIZE), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sm4GcmSetKey(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4GcmSetKey(&sm4, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4GcmSetKey(NULL, key, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4GcmSetKey(NULL, NULL, SM4_KEY_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4GcmSetKey(&sm4, key, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4GcmSetKey(&sm4, NULL, SM4_KEY_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sm4GcmSetKey(NULL, key, SM4_KEY_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid parameters - wc_Sm4GcmSetKey. */ ExpectIntEQ(wc_Sm4GcmSetKey(&sm4, key, SM4_KEY_SIZE), 0); /* Invalid parameters - wc_Sm4GcmEncrypt. */ ExpectIntEQ(wc_Sm4GcmEncrypt(NULL, NULL, NULL, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmEncrypt(&sm4, NULL, NULL, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmEncrypt(NULL, out, NULL, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmEncrypt(NULL, NULL, in, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmEncrypt(NULL, NULL, NULL, 1, nonce, GCM_NONCE_MID_SZ, - NULL, 0, NULL, 0), BAD_FUNC_ARG); + NULL, 0, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmEncrypt(NULL, NULL, NULL, 1, NULL, 0, tag, - SM4_BLOCK_SIZE, NULL, 0), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmEncrypt(NULL, out, in, 1, nonce, GCM_NONCE_MID_SZ, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmEncrypt(&sm4, NULL, in, 1, nonce, GCM_NONCE_MID_SZ, - tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmEncrypt(&sm4, out, NULL, 1, nonce, GCM_NONCE_MID_SZ, - tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmEncrypt(&sm4, out, in, 1, NULL, GCM_NONCE_MID_SZ, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmEncrypt(&sm4, out, in, 1, nonce, 0, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmEncrypt(&sm4, out, in, 1, nonce, GCM_NONCE_MID_SZ, - NULL, SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + NULL, SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmEncrypt(&sm4, out, in, 1, nonce, GCM_NONCE_MID_SZ, tag, - WOLFSSL_MIN_AUTH_TAG_SZ-1, aad, sizeof(aad)), BAD_FUNC_ARG); + WOLFSSL_MIN_AUTH_TAG_SZ-1, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmEncrypt(&sm4, out, in, 1, nonce, GCM_NONCE_MID_SZ, tag, - SM4_BLOCK_SIZE+1, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE+1, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Invalid parameters - wc_Sm4GcmDecrypt. */ ExpectIntEQ(wc_Sm4GcmDecrypt(NULL, NULL, NULL, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmDecrypt(&sm4, NULL, NULL, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmDecrypt(NULL, out, NULL, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmDecrypt(NULL, NULL, in, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmDecrypt(NULL, NULL, NULL, 1, nonce, GCM_NONCE_MID_SZ, - NULL, 0, NULL, 0), BAD_FUNC_ARG); + NULL, 0, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmDecrypt(NULL, NULL, NULL, 1, NULL, 0, tag, - SM4_BLOCK_SIZE, NULL, 0), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmDecrypt(NULL, out, in, 1, nonce, GCM_NONCE_MID_SZ, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmDecrypt(&sm4, NULL, in, 1, nonce, GCM_NONCE_MID_SZ, - tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmDecrypt(&sm4, out, NULL, 1, nonce, GCM_NONCE_MID_SZ, - tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmDecrypt(&sm4, out, in, 1, NULL, GCM_NONCE_MID_SZ, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmDecrypt(&sm4, out, in, 1, nonce, 0, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmDecrypt(&sm4, out, in, 1, nonce, GCM_NONCE_MID_SZ, - NULL, SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + NULL, SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmDecrypt(&sm4, out, in, 1, nonce, GCM_NONCE_MID_SZ, tag, - WOLFSSL_MIN_AUTH_TAG_SZ-1, aad, sizeof(aad)), BAD_FUNC_ARG); + WOLFSSL_MIN_AUTH_TAG_SZ-1, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4GcmDecrypt(&sm4, out, in, 1, nonce, GCM_NONCE_MID_SZ, tag, - SM4_BLOCK_SIZE+1, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE+1, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid cases - wc_Sm4GcmEncrypt/wc_Sm4GcmDecrypt. */ ExpectIntEQ(wc_Sm4GcmEncrypt(&sm4, NULL, NULL, 0, nonce, GCM_NONCE_MID_SZ, @@ -18128,70 +18132,70 @@ static int test_wc_Sm4Ccm(void) ExpectIntEQ(wc_Sm4Init(&sm4, NULL, INVALID_DEVID), 0); ExpectIntEQ(wc_Sm4CcmEncrypt(&sm4, out, in, 0, nonce, CCM_NONCE_MAX_SZ, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), MISSING_KEY); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(MISSING_KEY)); ExpectIntEQ(wc_Sm4CcmDecrypt(&sm4, out, in, 0, nonce, CCM_NONCE_MAX_SZ, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), MISSING_KEY); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(MISSING_KEY)); ExpectIntEQ(wc_Sm4SetKey(&sm4, key, SM4_KEY_SIZE), 0); /* Invalid parameters - wc_Sm4CcmEncrypt. */ ExpectIntEQ(wc_Sm4CcmEncrypt(NULL, NULL, NULL, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmEncrypt(&sm4, NULL, NULL, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmEncrypt(NULL, out, NULL, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmEncrypt(NULL, NULL, in, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmEncrypt(NULL, NULL, NULL, 1, nonce, CCM_NONCE_MAX_SZ, - NULL, 0, NULL, 0), BAD_FUNC_ARG); + NULL, 0, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmEncrypt(NULL, NULL, NULL, 1, NULL, 0, tag, - SM4_BLOCK_SIZE, NULL, 0), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmEncrypt(NULL, out, in, 1, nonce, CCM_NONCE_MAX_SZ, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmEncrypt(&sm4, NULL, in, 1, nonce, CCM_NONCE_MAX_SZ, - tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmEncrypt(&sm4, out, NULL, 1, nonce, CCM_NONCE_MAX_SZ, - tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmEncrypt(&sm4, out, in, 1, NULL, CCM_NONCE_MAX_SZ, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmEncrypt(&sm4, out, in, 1, nonce, 0, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmEncrypt(&sm4, out, in, 1, nonce, CCM_NONCE_MAX_SZ, - NULL, SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + NULL, SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmEncrypt(&sm4, out, in, 1, nonce, CCM_NONCE_MAX_SZ, tag, - WOLFSSL_MIN_AUTH_TAG_SZ-1, aad, sizeof(aad)), BAD_FUNC_ARG); + WOLFSSL_MIN_AUTH_TAG_SZ-1, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmEncrypt(&sm4, out, in, 1, nonce, CCM_NONCE_MAX_SZ, tag, - SM4_BLOCK_SIZE+1, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE+1, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Invalid parameters - wc_Sm4CcmDecrypt. */ ExpectIntEQ(wc_Sm4CcmDecrypt(NULL, NULL, NULL, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(&sm4, NULL, NULL, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(NULL, out, NULL, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(NULL, NULL, in, 1, NULL, 0, NULL, 0, NULL, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(NULL, NULL, NULL, 1, nonce, CCM_NONCE_MAX_SZ, - NULL, 0, NULL, 0), BAD_FUNC_ARG); + NULL, 0, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(NULL, NULL, NULL, 1, NULL, 0, tag, - SM4_BLOCK_SIZE, NULL, 0), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(NULL, out, in, 1, nonce, CCM_NONCE_MAX_SZ, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(&sm4, NULL, in, 1, nonce, CCM_NONCE_MAX_SZ, - tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(&sm4, out, NULL, 1, nonce, CCM_NONCE_MAX_SZ, - tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(&sm4, out, in, 1, NULL, CCM_NONCE_MAX_SZ, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(&sm4, out, in, 1, nonce, 0, tag, - SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(&sm4, out, in, 1, nonce, CCM_NONCE_MAX_SZ, - NULL, SM4_BLOCK_SIZE, aad, sizeof(aad)), BAD_FUNC_ARG); + NULL, SM4_BLOCK_SIZE, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(&sm4, out, in, 1, nonce, CCM_NONCE_MAX_SZ, tag, - WOLFSSL_MIN_AUTH_TAG_SZ - 1, aad, sizeof(aad)), BAD_FUNC_ARG); + WOLFSSL_MIN_AUTH_TAG_SZ - 1, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(&sm4, out, in, 1, nonce, CCM_NONCE_MAX_SZ, tag, - SM4_BLOCK_SIZE + 1, aad, sizeof(aad)), BAD_FUNC_ARG); + SM4_BLOCK_SIZE + 1, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid cases - wc_Sm4CcmEncrypt/wc_Sm4CcmDecrypt. */ ExpectIntEQ(wc_Sm4CcmEncrypt(&sm4, NULL, NULL, 0, nonce, CCM_NONCE_MAX_SZ, @@ -18235,16 +18239,16 @@ static int test_wc_Sm4Ccm(void) /* Check invalid values of tag size - wc_Sm4CcmEncrypt/wc_Sm4CcmDecrypt. */ for (i = 0; i < 4; i++) { ExpectIntEQ(wc_Sm4CcmEncrypt(&sm4, out, in, SM4_BLOCK_SIZE, nonce, - CCM_NONCE_MAX_SZ, tag, i * 2 + 1, aad, sizeof(aad)), BAD_FUNC_ARG); + CCM_NONCE_MAX_SZ, tag, i * 2 + 1, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(&sm4, in, out, SM4_BLOCK_SIZE, nonce, - CCM_NONCE_MAX_SZ, tag, i * 2 + 1, aad, sizeof(aad)), BAD_FUNC_ARG); + CCM_NONCE_MAX_SZ, tag, i * 2 + 1, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); } /* Odd values in range 4..SM4_BLOCK_SIZE. */ for (i = 2; i < SM4_BLOCK_SIZE / 2; i++) { ExpectIntEQ(wc_Sm4CcmEncrypt(&sm4, out, in, SM4_BLOCK_SIZE, nonce, - CCM_NONCE_MAX_SZ, tag, i * 2 + 1, aad, sizeof(aad)), BAD_FUNC_ARG); + CCM_NONCE_MAX_SZ, tag, i * 2 + 1, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sm4CcmDecrypt(&sm4, in, out, SM4_BLOCK_SIZE, nonce, - CCM_NONCE_MAX_SZ, tag, i * 2 + 1, aad, sizeof(aad)), BAD_FUNC_ARG); + CCM_NONCE_MAX_SZ, tag, i * 2 + 1, aad, sizeof(aad)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); } /* Check valid values of tag size - wc_Sm4CcmEncrypt/wc_Sm4CcmDecrypt. * Even values in range 4..SM4_BLOCK_SIZE. @@ -18322,7 +18326,7 @@ static int test_wc_Des3_SetIV(void) #ifndef HAVE_FIPS /* no sanity checks with FIPS wrapper */ /* Test explicitly wc_Des3_SetIV() */ - ExpectIntEQ(wc_Des3_SetIV(NULL, iv), BAD_FUNC_ARG); + ExpectIntEQ(wc_Des3_SetIV(NULL, iv), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Des3_SetIV(&des, NULL), 0); #endif wc_Des3Free(&des); @@ -18359,9 +18363,9 @@ static int test_wc_Des3_SetKey(void) ExpectIntEQ(XMEMCMP(iv, des.reg, DES_BLOCK_SIZE), 0); /* Test bad args. */ - ExpectIntEQ(wc_Des3_SetKey(NULL, key, iv, DES_ENCRYPTION), BAD_FUNC_ARG); - ExpectIntEQ(wc_Des3_SetKey(&des, NULL, iv, DES_ENCRYPTION), BAD_FUNC_ARG); - ExpectIntEQ(wc_Des3_SetKey(&des, key, iv, -1), BAD_FUNC_ARG); + ExpectIntEQ(wc_Des3_SetKey(NULL, key, iv, DES_ENCRYPTION), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Des3_SetKey(&des, NULL, iv, DES_ENCRYPTION), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Des3_SetKey(&des, key, iv, -1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Default case. Should return 0. */ ExpectIntEQ(wc_Des3_SetKey(&des, key, NULL, DES_ENCRYPTION), 0); @@ -18409,14 +18413,14 @@ static int test_wc_Des3_CbcEncryptDecrypt(void) ExpectIntEQ(XMEMCMP(plain, vector, 24), 0); /* Pass in bad args. */ - ExpectIntEQ(wc_Des3_CbcEncrypt(NULL, cipher, vector, 24), BAD_FUNC_ARG); - ExpectIntEQ(wc_Des3_CbcEncrypt(&des, NULL, vector, 24), BAD_FUNC_ARG); + ExpectIntEQ(wc_Des3_CbcEncrypt(NULL, cipher, vector, 24), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Des3_CbcEncrypt(&des, NULL, vector, 24), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Des3_CbcEncrypt(&des, cipher, NULL, sizeof(vector)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_Des3_CbcDecrypt(NULL, plain, cipher, 24), BAD_FUNC_ARG); - ExpectIntEQ(wc_Des3_CbcDecrypt(&des, NULL, cipher, 24), BAD_FUNC_ARG); - ExpectIntEQ(wc_Des3_CbcDecrypt(&des, plain, NULL, 24), BAD_FUNC_ARG); + ExpectIntEQ(wc_Des3_CbcDecrypt(NULL, plain, cipher, 24), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Des3_CbcDecrypt(&des, NULL, cipher, 24), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Des3_CbcDecrypt(&des, plain, NULL, 24), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Des3Free(&des); #endif @@ -18460,20 +18464,20 @@ static int test_wc_Des3_CbcEncryptDecryptWithKey(void) /* pass in bad args. */ ExpectIntEQ(wc_Des3_CbcEncryptWithKey(NULL, vector, vectorSz, key, iv), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Des3_CbcEncryptWithKey(cipher, NULL, vectorSz, key, iv), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Des3_CbcEncryptWithKey(cipher, vector, vectorSz, NULL, iv), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Des3_CbcEncryptWithKey(cipher, vector, vectorSz, key, NULL), 0); ExpectIntEQ(wc_Des3_CbcDecryptWithKey(NULL, cipher, cipherSz, key, iv), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Des3_CbcDecryptWithKey(plain, NULL, cipherSz, key, iv), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Des3_CbcDecryptWithKey(plain, cipher, cipherSz, NULL, iv), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Des3_CbcDecryptWithKey(plain, cipher, cipherSz, key, NULL), 0); #endif @@ -18511,11 +18515,11 @@ static int test_wc_Des3_EcbEncrypt(void) ExpectIntEQ(wc_Des3_SetKey(&des, key, iv, DES_ENCRYPTION), 0); /* Bad Cases */ - ExpectIntEQ(wc_Des3_EcbEncrypt(NULL, 0, NULL, 0), BAD_FUNC_ARG); + ExpectIntEQ(wc_Des3_EcbEncrypt(NULL, 0, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Des3_EcbEncrypt(NULL, cipher, vector, cipherSz), - BAD_FUNC_ARG); - ExpectIntEQ(wc_Des3_EcbEncrypt(&des, 0, vector, cipherSz), BAD_FUNC_ARG); - ExpectIntEQ(wc_Des3_EcbEncrypt(&des, cipher, NULL, cipherSz), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Des3_EcbEncrypt(&des, 0, vector, cipherSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Des3_EcbEncrypt(&des, cipher, NULL, cipherSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Des3_EcbEncrypt(&des, cipher, vector, 0), 0); /* Good Cases */ @@ -18546,12 +18550,12 @@ static int test_wc_Chacha_SetKey(void) XMEMSET(cipher, 0, sizeof(cipher)); ExpectIntEQ(wc_Chacha_SetKey(&ctx, key, keySz), 0); /* Test bad args. */ - ExpectIntEQ(wc_Chacha_SetKey(NULL, key, keySz), BAD_FUNC_ARG); - ExpectIntEQ(wc_Chacha_SetKey(&ctx, key, 18), BAD_FUNC_ARG); + ExpectIntEQ(wc_Chacha_SetKey(NULL, key, keySz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Chacha_SetKey(&ctx, key, 18), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Chacha_SetIV(&ctx, cipher, 0), 0); /* Test bad args. */ - ExpectIntEQ(wc_Chacha_SetIV(NULL, cipher, 0), BAD_FUNC_ARG); + ExpectIntEQ(wc_Chacha_SetIV(NULL, cipher, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); } /* END test_wc_Chacha_SetKey */ @@ -18576,9 +18580,9 @@ static int test_wc_Poly1305SetKey(void) ExpectIntEQ(wc_Poly1305SetKey(&ctx, key, keySz), 0); /* Test bad args. */ - ExpectIntEQ(wc_Poly1305SetKey(NULL, key,keySz), BAD_FUNC_ARG); - ExpectIntEQ(wc_Poly1305SetKey(&ctx, NULL, keySz), BAD_FUNC_ARG); - ExpectIntEQ(wc_Poly1305SetKey(&ctx, key, 18), BAD_FUNC_ARG); + ExpectIntEQ(wc_Poly1305SetKey(NULL, key,keySz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Poly1305SetKey(&ctx, NULL, keySz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Poly1305SetKey(&ctx, key, 18), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); } /* END test_wc_Poly1305_SetKey() */ @@ -18699,7 +18703,7 @@ static int test_wc_Chacha_Process(void) /* Test bad args. */ ExpectIntEQ(wc_Chacha_Process(NULL, cipher, (byte*)input, (word32)inlen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); } /* END test_wc_Chacha_Process */ @@ -18781,20 +18785,20 @@ static int test_wc_ChaCha20Poly1305_aead(void) /* Test bad args. */ ExpectIntEQ(wc_ChaCha20Poly1305_Encrypt(NULL, iv, aad, sizeof(aad), plaintext, sizeof(plaintext), generatedCiphertext, generatedAuthTag), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ChaCha20Poly1305_Encrypt(key, NULL, aad, sizeof(aad), plaintext, sizeof(plaintext), generatedCiphertext, generatedAuthTag), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ChaCha20Poly1305_Encrypt(key, iv, aad, sizeof(aad), NULL, sizeof(plaintext), generatedCiphertext, generatedAuthTag), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ChaCha20Poly1305_Encrypt(key, iv, aad, sizeof(aad), NULL, sizeof(plaintext), generatedCiphertext, generatedAuthTag), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ChaCha20Poly1305_Encrypt(key, iv, aad, sizeof(aad), - plaintext, sizeof(plaintext), NULL, generatedAuthTag), BAD_FUNC_ARG); + plaintext, sizeof(plaintext), NULL, generatedAuthTag), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ChaCha20Poly1305_Encrypt(key, iv, aad, sizeof(aad), - plaintext, sizeof(plaintext), generatedCiphertext, NULL), BAD_FUNC_ARG); + plaintext, sizeof(plaintext), generatedCiphertext, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ChaCha20Poly1305_Decrypt(key, iv, aad, sizeof(aad), cipher, sizeof(cipher), authTag, generatedPlaintext), 0); @@ -18803,17 +18807,17 @@ static int test_wc_ChaCha20Poly1305_aead(void) /* Test bad args. */ ExpectIntEQ(wc_ChaCha20Poly1305_Decrypt(NULL, iv, aad, sizeof(aad), cipher, - sizeof(cipher), authTag, generatedPlaintext), BAD_FUNC_ARG); + sizeof(cipher), authTag, generatedPlaintext), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ChaCha20Poly1305_Decrypt(key, NULL, aad, sizeof(aad), - cipher, sizeof(cipher), authTag, generatedPlaintext), BAD_FUNC_ARG); + cipher, sizeof(cipher), authTag, generatedPlaintext), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ChaCha20Poly1305_Decrypt(key, iv, aad, sizeof(aad), NULL, - sizeof(cipher), authTag, generatedPlaintext), BAD_FUNC_ARG); + sizeof(cipher), authTag, generatedPlaintext), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ChaCha20Poly1305_Decrypt(key, iv, aad, sizeof(aad), cipher, - sizeof(cipher), NULL, generatedPlaintext), BAD_FUNC_ARG); + sizeof(cipher), NULL, generatedPlaintext), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ChaCha20Poly1305_Decrypt(key, iv, aad, sizeof(aad), cipher, - sizeof(cipher), authTag, NULL), BAD_FUNC_ARG); + sizeof(cipher), authTag, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ChaCha20Poly1305_Decrypt(key, iv, aad, sizeof(aad), NULL, - sizeof(cipher), authTag, generatedPlaintext), BAD_FUNC_ARG); + sizeof(cipher), authTag, generatedPlaintext), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); } /* END test_wc_ChaCha20Poly1305_aead */ @@ -18840,10 +18844,10 @@ static int test_wc_Rc2SetKey(void) /* bad arguments */ /* null Rc2 struct */ ExpectIntEQ(wc_Rc2SetKey(NULL, key40, (word32) sizeof(key40) / sizeof(byte), - iv, 40), BAD_FUNC_ARG); + iv, 40), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* null key */ ExpectIntEQ(wc_Rc2SetKey(&rc2, NULL, (word32) sizeof(key40) / sizeof(byte), - iv, 40), BAD_FUNC_ARG); + iv, 40), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* key size == 0 */ ExpectIntEQ(wc_Rc2SetKey(&rc2, key40, 0, iv, 40), WC_KEY_SIZE_E); /* key size > 128 */ @@ -18874,8 +18878,8 @@ static int test_wc_Rc2SetIV(void) ExpectIntEQ(wc_Rc2SetIV(&rc2, NULL), 0); /* bad arguments */ - ExpectIntEQ(wc_Rc2SetIV(NULL, iv), BAD_FUNC_ARG); - ExpectIntEQ(wc_Rc2SetIV(NULL, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Rc2SetIV(NULL, iv), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Rc2SetIV(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); } /* END test_wc_Rc2SetIV */ @@ -18909,28 +18913,28 @@ static int test_wc_Rc2EcbEncryptDecrypt(void) /* Rc2EcbEncrypt bad arguments */ /* null Rc2 struct */ ExpectIntEQ(wc_Rc2EcbEncrypt(NULL, cipher, input, RC2_BLOCK_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* null out buffer */ ExpectIntEQ(wc_Rc2EcbEncrypt(&rc2, NULL, input, RC2_BLOCK_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* null input buffer */ ExpectIntEQ(wc_Rc2EcbEncrypt(&rc2, cipher, NULL, RC2_BLOCK_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* output buffer sz != RC2_BLOCK_SIZE (8) */ - ExpectIntEQ(wc_Rc2EcbEncrypt(&rc2, cipher, input, 7), BUFFER_E); + ExpectIntEQ(wc_Rc2EcbEncrypt(&rc2, cipher, input, 7), WC_NO_ERR_TRACE(BUFFER_E)); /* Rc2EcbDecrypt bad arguments */ /* null Rc2 struct */ ExpectIntEQ(wc_Rc2EcbDecrypt(NULL, plain, output, RC2_BLOCK_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* null out buffer */ ExpectIntEQ(wc_Rc2EcbDecrypt(&rc2, NULL, output, RC2_BLOCK_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* null input buffer */ ExpectIntEQ(wc_Rc2EcbDecrypt(&rc2, plain, NULL, RC2_BLOCK_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* output buffer sz != RC2_BLOCK_SIZE (8) */ - ExpectIntEQ(wc_Rc2EcbDecrypt(&rc2, plain, output, 7), BUFFER_E); + ExpectIntEQ(wc_Rc2EcbDecrypt(&rc2, plain, output, 7), WC_NO_ERR_TRACE(BUFFER_E)); #endif return EXPECT_RESULT(); } /* END test_wc_Rc2EcbEncryptDecrypt */ @@ -18978,26 +18982,26 @@ static int test_wc_Rc2CbcEncryptDecrypt(void) /* Rc2CbcEncrypt bad arguments */ /* null Rc2 struct */ ExpectIntEQ(wc_Rc2CbcEncrypt(NULL, cipher, input, sizeof(input)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* null out buffer */ ExpectIntEQ(wc_Rc2CbcEncrypt(&rc2, NULL, input, sizeof(input)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* null input buffer */ ExpectIntEQ(wc_Rc2CbcEncrypt(&rc2, cipher, NULL, sizeof(input)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Rc2CbcDecrypt bad arguments */ /* in size is 0 */ ExpectIntEQ(wc_Rc2CbcDecrypt(&rc2, plain, output, 0), 0); /* null Rc2 struct */ ExpectIntEQ(wc_Rc2CbcDecrypt(NULL, plain, output, sizeof(output)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* null out buffer */ ExpectIntEQ(wc_Rc2CbcDecrypt(&rc2, NULL, output, sizeof(output)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* null input buffer */ ExpectIntEQ(wc_Rc2CbcDecrypt(&rc2, plain, NULL, sizeof(output)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); } /* END test_wc_Rc2CbcEncryptDecrypt */ @@ -19032,7 +19036,7 @@ static int test_wc_AesSetIV(void) /* Test bad args. */ if (ret == 0) { ret = wc_AesSetIV(NULL, iv1); - if (ret == BAD_FUNC_ARG) { + if (ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { /* NULL iv should return 0. */ ret = wc_AesSetIV(&aes, NULL); } @@ -19101,10 +19105,10 @@ static int test_wc_AesSetKey(void) /* Pass in bad args. */ ExpectIntEQ(wc_AesSetKey(NULL, key16, (word32)sizeof(key16) / sizeof(byte), - iv, AES_ENCRYPTION), BAD_FUNC_ARG); + iv, AES_ENCRYPTION), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesSetKey(&aes, badKey16, (word32)sizeof(badKey16) / sizeof(byte), iv, AES_ENCRYPTION), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_AesFree(&aes); #endif @@ -19163,14 +19167,14 @@ static int test_wc_AesCbcEncryptDecrypt(void) /* Pass in bad args */ ExpectIntEQ(wc_AesCbcEncrypt(NULL, enc, vector, sizeof(vector)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCbcEncrypt(&aes, NULL, vector, sizeof(vector)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCbcEncrypt(&aes, enc, NULL, sizeof(vector)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifdef WOLFSSL_AES_CBC_LENGTH_CHECKS ExpectIntEQ(wc_AesCbcEncrypt(&aes, enc, vector, sizeof(vector) - 1), - BAD_LENGTH_E); + WC_NO_ERR_TRACE(BAD_LENGTH_E)); #endif #if defined(HAVE_FIPS) && defined(HAVE_FIPS_VERSION) && \ (HAVE_FIPS_VERSION == 2) && defined(WOLFSSL_AESNI) @@ -19188,17 +19192,17 @@ static int test_wc_AesCbcEncryptDecrypt(void) } #endif - ExpectIntEQ(wc_AesCbcDecrypt(NULL, dec, enc, AES_BLOCK_SIZE), BAD_FUNC_ARG); + ExpectIntEQ(wc_AesCbcDecrypt(NULL, dec, enc, AES_BLOCK_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCbcDecrypt(&aes, NULL, enc, AES_BLOCK_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCbcDecrypt(&aes, dec, NULL, AES_BLOCK_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifdef WOLFSSL_AES_CBC_LENGTH_CHECKS ExpectIntEQ(wc_AesCbcDecrypt(&aes, dec, enc, AES_BLOCK_SIZE * 2 - 1), - BAD_LENGTH_E); + WC_NO_ERR_TRACE(BAD_LENGTH_E)); #else ExpectIntEQ(wc_AesCbcDecrypt(&aes, dec, enc, AES_BLOCK_SIZE * 2 - 1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif /* Test passing in size of 0 */ @@ -19212,13 +19216,13 @@ static int test_wc_AesCbcEncryptDecrypt(void) } ExpectIntEQ(wc_AesCbcDecryptWithKey(NULL, enc, AES_BLOCK_SIZE, - key32, sizeof(key32)/sizeof(byte), iv), BAD_FUNC_ARG); + key32, sizeof(key32)/sizeof(byte), iv), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCbcDecryptWithKey(dec2, NULL, AES_BLOCK_SIZE, - key32, sizeof(key32)/sizeof(byte), iv), BAD_FUNC_ARG); + key32, sizeof(key32)/sizeof(byte), iv), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCbcDecryptWithKey(dec2, enc, AES_BLOCK_SIZE, - NULL, sizeof(key32)/sizeof(byte), iv), BAD_FUNC_ARG); + NULL, sizeof(key32)/sizeof(byte), iv), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCbcDecryptWithKey(dec2, enc, AES_BLOCK_SIZE, - key32, sizeof(key32)/sizeof(byte), NULL), BAD_FUNC_ARG); + key32, sizeof(key32)/sizeof(byte), NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_AesFree(&aes); #endif @@ -19271,11 +19275,11 @@ static int test_wc_AesCtrEncryptDecrypt(void) /* Test bad args. */ ExpectIntEQ(wc_AesCtrEncrypt(NULL, dec, enc, sizeof(enc)/sizeof(byte)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCtrEncrypt(&aesDec, NULL, enc, sizeof(enc)/sizeof(byte)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCtrEncrypt(&aesDec, dec, NULL, sizeof(enc)/sizeof(byte)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_AesFree(&aesEnc); wc_AesFree(&aesDec); @@ -19342,11 +19346,11 @@ static int test_wc_AesGcmSetKey(void) /* Pass in bad args. */ ExpectIntEQ(wc_AesGcmSetKey(&aes, badKey16, sizeof(badKey16)/sizeof(byte)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmSetKey(&aes, badKey24, sizeof(badKey24)/sizeof(byte)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmSetKey(&aes, badKey32, sizeof(badKey32)/sizeof(byte)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_AesFree(&aes); #endif @@ -19403,13 +19407,13 @@ static int test_wc_AesGcmEncryptDecrypt(void) /* Test bad args for wc_AesGcmEncrypt and wc_AesGcmDecrypt */ ExpectIntEQ(wc_AesGcmEncrypt(NULL, enc, vector, sizeof(vector), iv, sizeof(iv)/sizeof(byte), resultT, sizeof(resultT), a, sizeof(a)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmEncrypt(&aes, enc, vector, sizeof(vector), iv, sizeof(iv)/sizeof(byte), resultT, sizeof(resultT) + 1, a, sizeof(a)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmEncrypt(&aes, enc, vector, sizeof(vector), iv, sizeof(iv)/sizeof(byte), resultT, sizeof(resultT) - 5, a, sizeof(a)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #if (defined(HAVE_FIPS) && defined(HAVE_FIPS_VERSION) && \ (HAVE_FIPS_VERSION == 2)) || defined(HAVE_SELFTEST) || \ @@ -19417,7 +19421,7 @@ static int test_wc_AesGcmEncryptDecrypt(void) /* FIPS does not check the lower bound of ivSz */ #else ExpectIntEQ(wc_AesGcmEncrypt(&aes, enc, vector, sizeof(vector), iv, 0, - resultT, sizeof(resultT), a, sizeof(a)), BAD_FUNC_ARG); + resultT, sizeof(resultT), a, sizeof(a)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif /* This case is now considered good. Long IVs are now allowed. @@ -19437,19 +19441,19 @@ static int test_wc_AesGcmEncryptDecrypt(void) #ifdef HAVE_AES_DECRYPT ExpectIntEQ(wc_AesGcmDecrypt(NULL, dec, enc, sizeof(enc)/sizeof(byte), iv, sizeof(iv)/sizeof(byte), resultT, sizeof(resultT), a, sizeof(a)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmDecrypt(&aes, NULL, enc, sizeof(enc)/sizeof(byte), iv, sizeof(iv)/sizeof(byte), resultT, sizeof(resultT), a, sizeof(a)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmDecrypt(&aes, dec, NULL, sizeof(enc)/sizeof(byte), iv, sizeof(iv)/sizeof(byte), resultT, sizeof(resultT), a, sizeof(a)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmDecrypt(&aes, dec, enc, sizeof(enc)/sizeof(byte), NULL, sizeof(iv)/sizeof(byte), resultT, sizeof(resultT), a, sizeof(a)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesGcmDecrypt(&aes, dec, enc, sizeof(enc)/sizeof(byte), iv, sizeof(iv)/sizeof(byte), NULL, sizeof(resultT), a, sizeof(a)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #if (defined(HAVE_FIPS) && FIPS_VERSION_LE(2,0) && defined(WOLFSSL_ARMASM)) ExpectIntEQ(wc_AesGcmDecrypt(&aes, dec, enc, sizeof(enc)/sizeof(byte), iv, sizeof(iv)/sizeof(byte), resultT, sizeof(resultT) + 1, a, sizeof(a)), @@ -19457,7 +19461,7 @@ static int test_wc_AesGcmEncryptDecrypt(void) #else ExpectIntEQ(wc_AesGcmDecrypt(&aes, dec, enc, sizeof(enc)/sizeof(byte), iv, sizeof(iv)/sizeof(byte), resultT, sizeof(resultT) + 1, a, sizeof(a)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #if ((defined(HAVE_FIPS) && defined(HAVE_FIPS_VERSION) && \ (HAVE_FIPS_VERSION == 2)) || defined(HAVE_SELFTEST)) && \ @@ -19465,7 +19469,7 @@ static int test_wc_AesGcmEncryptDecrypt(void) /* FIPS does not check the lower bound of ivSz */ #else ExpectIntEQ(wc_AesGcmDecrypt(&aes, dec, enc, sizeof(enc)/sizeof(byte), - iv, 0, resultT, sizeof(resultT), a, sizeof(a)), BAD_FUNC_ARG); + iv, 0, resultT, sizeof(resultT), a, sizeof(a)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #endif /* HAVE_AES_DECRYPT */ @@ -19595,15 +19599,15 @@ static int test_wc_GmacSetKey(void) /* Pass in bad args. */ ExpectIntEQ(wc_GmacSetKey(NULL, key16, sizeof(key16)/sizeof(byte)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_GmacSetKey(&gmac, NULL, sizeof(key16)/sizeof(byte)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_GmacSetKey(&gmac, badKey16, sizeof(badKey16)/sizeof(byte)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_GmacSetKey(&gmac, badKey24, sizeof(badKey24)/sizeof(byte)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_GmacSetKey(&gmac, badKey32, sizeof(badKey32)/sizeof(byte)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_AesFree(&gmac.aes); #endif @@ -19729,11 +19733,11 @@ static int test_wc_GmacUpdate(void) /* Pass bad args. */ ExpectIntEQ(wc_AesInit(&gmac.aes, NULL, INVALID_DEVID), 0); ExpectIntEQ(wc_GmacUpdate(NULL, iv3, sizeof(iv3), authIn3, sizeof(authIn3), - tagOut3, sizeof(tag3)), BAD_FUNC_ARG); + tagOut3, sizeof(tag3)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_GmacUpdate(&gmac, iv3, sizeof(iv3), authIn3, sizeof(authIn3), - tagOut3, sizeof(tag3) - 5), BAD_FUNC_ARG); + tagOut3, sizeof(tag3) - 5), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_GmacUpdate(&gmac, iv3, sizeof(iv3), authIn3, sizeof(authIn3), - tagOut3, sizeof(tag3) + 1), BAD_FUNC_ARG); + tagOut3, sizeof(tag3) + 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_AesFree(&gmac.aes); #endif @@ -19787,7 +19791,7 @@ static int test_wc_CamelliaSetKey(void) /* Bad args. */ ExpectIntEQ(wc_CamelliaSetKey(NULL, key32, (word32)sizeof(key32), iv), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); } /* END test_wc_CammeliaSetKey */ @@ -19809,8 +19813,8 @@ static int test_wc_CamelliaSetIV(void) ExpectIntEQ(wc_CamelliaSetIV(&camellia, NULL), 0); /* Bad args. */ - ExpectIntEQ(wc_CamelliaSetIV(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_CamelliaSetIV(NULL, iv), BAD_FUNC_ARG); + ExpectIntEQ(wc_CamelliaSetIV(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_CamelliaSetIV(NULL, iv), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); } /* END test_wc_CamelliaSetIV*/ @@ -19850,14 +19854,14 @@ static int test_wc_CamelliaEncryptDecryptDirect(void) ExpectIntEQ(XMEMCMP(plainT, dec, CAMELLIA_BLOCK_SIZE), 0); /* Pass bad args. */ - ExpectIntEQ(wc_CamelliaEncryptDirect(NULL, enc, plainT), BAD_FUNC_ARG); + ExpectIntEQ(wc_CamelliaEncryptDirect(NULL, enc, plainT), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CamelliaEncryptDirect(&camellia, NULL, plainT), - BAD_FUNC_ARG); - ExpectIntEQ(wc_CamelliaEncryptDirect(&camellia, enc, NULL), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_CamelliaEncryptDirect(&camellia, enc, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_CamelliaDecryptDirect(NULL, dec, enc), BAD_FUNC_ARG); - ExpectIntEQ(wc_CamelliaDecryptDirect(&camellia, NULL, enc), BAD_FUNC_ARG); - ExpectIntEQ(wc_CamelliaDecryptDirect(&camellia, dec, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_CamelliaDecryptDirect(NULL, dec, enc), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_CamelliaDecryptDirect(&camellia, NULL, enc), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_CamelliaDecryptDirect(&camellia, dec, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); } /* END test-wc_CamelliaEncryptDecryptDirect */ @@ -19899,18 +19903,18 @@ static int test_wc_CamelliaCbcEncryptDecrypt(void) /* Pass in bad args. */ ExpectIntEQ(wc_CamelliaCbcEncrypt(NULL, enc, plainT, CAMELLIA_BLOCK_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CamelliaCbcEncrypt(&camellia, NULL, plainT, - CAMELLIA_BLOCK_SIZE), BAD_FUNC_ARG); + CAMELLIA_BLOCK_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CamelliaCbcEncrypt(&camellia, enc, NULL, - CAMELLIA_BLOCK_SIZE), BAD_FUNC_ARG); + CAMELLIA_BLOCK_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CamelliaCbcDecrypt(NULL, dec, enc, CAMELLIA_BLOCK_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CamelliaCbcDecrypt(&camellia, NULL, enc, - CAMELLIA_BLOCK_SIZE), BAD_FUNC_ARG); + CAMELLIA_BLOCK_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CamelliaCbcDecrypt(&camellia, dec, NULL, - CAMELLIA_BLOCK_SIZE), BAD_FUNC_ARG); + CAMELLIA_BLOCK_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); } /* END test_wc_CamelliaCbcEncryptDecrypt */ @@ -19929,9 +19933,9 @@ static int test_wc_Arc4SetKey(void) ExpectIntEQ(wc_Arc4SetKey(&arc, (byte*)key, (word32)keyLen), 0); /* Test bad args. */ - ExpectIntEQ(wc_Arc4SetKey(NULL, (byte*)key, (word32)keyLen), BAD_FUNC_ARG); - ExpectIntEQ(wc_Arc4SetKey(&arc, NULL , (word32)keyLen), BAD_FUNC_ARG); - ExpectIntEQ(wc_Arc4SetKey(&arc, (byte*)key, 0 ), BAD_FUNC_ARG); + ExpectIntEQ(wc_Arc4SetKey(NULL, (byte*)key, (word32)keyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Arc4SetKey(&arc, NULL , (word32)keyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Arc4SetKey(&arc, (byte*)key, 0 ), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif return EXPECT_RESULT(); @@ -19970,9 +19974,9 @@ static int test_wc_Arc4Process(void) ExpectIntEQ(XMEMCMP(plain, input, keyLen), 0); /* Bad args. */ - ExpectIntEQ(wc_Arc4Process(NULL, plain, cipher, (word32)keyLen), BAD_FUNC_ARG); - ExpectIntEQ(wc_Arc4Process(&dec, NULL, cipher, (word32)keyLen), BAD_FUNC_ARG); - ExpectIntEQ(wc_Arc4Process(&dec, plain, NULL, (word32)keyLen), BAD_FUNC_ARG); + ExpectIntEQ(wc_Arc4Process(NULL, plain, cipher, (word32)keyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Arc4Process(&dec, NULL, cipher, (word32)keyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Arc4Process(&dec, plain, NULL, (word32)keyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_Arc4Free(&enc); wc_Arc4Free(&dec); @@ -19996,7 +20000,7 @@ static int test_wc_InitRsaKey(void) ExpectIntEQ(wc_InitRsaKey(&key, HEAP_HINT), 0); /* Test bad args. */ - ExpectIntEQ(wc_InitRsaKey(NULL, HEAP_HINT), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitRsaKey(NULL, HEAP_HINT), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRsaKey(&key), 0); #endif @@ -20036,11 +20040,11 @@ static int test_wc_RsaPrivateKeyDecode(void) /* Test bad args. */ ExpectIntEQ(wc_RsaPrivateKeyDecode(NULL, &idx, &key, (word32)bytes), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPrivateKeyDecode(tmp, NULL, &key, (word32)bytes), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPrivateKeyDecode(tmp, &idx, NULL, (word32)bytes), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); XFREE(tmp, NULL, DYNAMIC_TYPE_TMP_BUFFER); DoExpectIntEQ(wc_FreeRsaKey(&key), 0); @@ -20090,11 +20094,11 @@ static int test_wc_RsaPublicKeyDecode(void) /* Pass in bad args. */ ExpectIntEQ(wc_RsaPublicKeyDecode(NULL, &idx, &keyPub, (word32)bytes), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPublicKeyDecode(tmp, NULL, &keyPub, (word32)bytes), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPublicKeyDecode(tmp, &idx, NULL, (word32)bytes), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRsaKey(&keyPub), 0); @@ -20146,11 +20150,11 @@ static int test_wc_RsaPublicKeyDecodeRaw(void) /* Pass in bad args. */ ExpectIntEQ(wc_RsaPublicKeyDecodeRaw(NULL, nSz, &e, eSz, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPublicKeyDecodeRaw(&n, nSz, NULL, eSz, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPublicKeyDecodeRaw(&n, nSz, &e, eSz, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRsaKey(&key), 0); @@ -20200,56 +20204,56 @@ static int test_wc_RsaPrivateKeyDecodeRaw(void) ExpectIntEQ(wc_RsaPrivateKeyDecodeRaw(NULL, sizeof(n), &e, sizeof(e), &d, sizeof(d), &u, sizeof(u), &p, sizeof(p), &q, sizeof(q), &dp, sizeof(dp), - &dq, sizeof(dq), &key), BAD_FUNC_ARG); + &dq, sizeof(dq), &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPrivateKeyDecodeRaw(&n, 0, &e, sizeof(e), &d, sizeof(d), &u, sizeof(u), &p, sizeof(p), &q, sizeof(q), &dp, sizeof(dp), - &dq, sizeof(dq), &key), BAD_FUNC_ARG); + &dq, sizeof(dq), &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPrivateKeyDecodeRaw(&n, sizeof(n), NULL, sizeof(e), &d, sizeof(d), &u, sizeof(u), &p, sizeof(p), &q, sizeof(q), &dp, sizeof(dp), - &dq, sizeof(dq), &key), BAD_FUNC_ARG); + &dq, sizeof(dq), &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPrivateKeyDecodeRaw(&n, sizeof(n), &e, 0, &d, sizeof(d), &u, sizeof(u), &p, sizeof(p), &q, sizeof(q), &dp, sizeof(dp), - &dq, sizeof(dq), &key), BAD_FUNC_ARG); + &dq, sizeof(dq), &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPrivateKeyDecodeRaw(&n, sizeof(n), &e, sizeof(e), NULL, sizeof(d), &u, sizeof(u), &p, sizeof(p), &q, sizeof(q), &dp, sizeof(dp), - &dq, sizeof(dq), &key), BAD_FUNC_ARG); + &dq, sizeof(dq), &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPrivateKeyDecodeRaw(&n, sizeof(n), &e, sizeof(e), &d, 0, &u, sizeof(u), &p, sizeof(p), &q, sizeof(q), &dp, sizeof(dp), - &dq, sizeof(dq), &key), BAD_FUNC_ARG); + &dq, sizeof(dq), &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPrivateKeyDecodeRaw(&n, sizeof(n), &e, sizeof(e), &d, sizeof(d), &u, sizeof(u), NULL, sizeof(p), &q, sizeof(q), &dp, sizeof(dp), - &dq, sizeof(dq), &key), BAD_FUNC_ARG); + &dq, sizeof(dq), &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPrivateKeyDecodeRaw(&n, sizeof(n), &e, sizeof(e), &d, sizeof(d), &u, sizeof(u), &p, 0, &q, sizeof(q), &dp, sizeof(dp), - &dq, sizeof(dq), &key), BAD_FUNC_ARG); + &dq, sizeof(dq), &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPrivateKeyDecodeRaw(&n, sizeof(n), &e, sizeof(e), &d, sizeof(d), &u, sizeof(u), &p, sizeof(p), NULL, sizeof(q), &dp, sizeof(dp), - &dq, sizeof(dq), &key), BAD_FUNC_ARG); + &dq, sizeof(dq), &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPrivateKeyDecodeRaw(&n, sizeof(n), &e, sizeof(e), &d, sizeof(d), &u, sizeof(u), &p, sizeof(p), &q, 0, &dp, sizeof(dp), - &dq, sizeof(dq), &key), BAD_FUNC_ARG); + &dq, sizeof(dq), &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #if defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA) || !defined(RSA_LOW_MEM) ExpectIntEQ(wc_RsaPrivateKeyDecodeRaw(&n, sizeof(n), &e, sizeof(e), &d, sizeof(d), &u, 0, &p, sizeof(p), &q, sizeof(q), &dp, sizeof(dp), - &dq, sizeof(dq), &key), BAD_FUNC_ARG); + &dq, sizeof(dq), &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPrivateKeyDecodeRaw(&n, sizeof(n), &e, sizeof(e), &d, sizeof(d), NULL, sizeof(u), &p, sizeof(p), &q, sizeof(q), &dp, sizeof(dp), - &dq, sizeof(dq), &key), BAD_FUNC_ARG); + &dq, sizeof(dq), &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPrivateKeyDecodeRaw(&n, sizeof(n), &e, sizeof(e), &d, sizeof(d), &u, 0, &p, sizeof(p), &q, sizeof(q), &dp, sizeof(dp), - &dq, sizeof(dq), &key), BAD_FUNC_ARG); + &dq, sizeof(dq), &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif DoExpectIntEQ(wc_FreeRsaKey(&key), 0); @@ -20269,7 +20273,7 @@ static int test_wc_RsaPrivateKeyDecodeRaw(void) for (;;) { ret = wc_MakeRsaKey(key, size, e, rng); - if (ret != PRIME_GEN_E) break; + if (ret != WC_NO_ERR_TRACE(PRIME_GEN_E)) break; fprintf(stderr, "MakeRsaKey couldn't find prime; " "trying again.\n"); } @@ -20309,13 +20313,13 @@ static int test_wc_MakeRsaKey(void) DoExpectIntEQ(wc_FreeRsaKey(&genKey), 0); /* Test bad args. */ - ExpectIntEQ(MAKE_RSA_KEY(NULL, bits, WC_RSA_EXPONENT, &rng), BAD_FUNC_ARG); + ExpectIntEQ(MAKE_RSA_KEY(NULL, bits, WC_RSA_EXPONENT, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(MAKE_RSA_KEY(&genKey, bits, WC_RSA_EXPONENT, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* e < 3 */ - ExpectIntEQ(MAKE_RSA_KEY(&genKey, bits, 2, &rng), BAD_FUNC_ARG); + ExpectIntEQ(MAKE_RSA_KEY(&genKey, bits, 2, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* e & 1 == 0 */ - ExpectIntEQ(MAKE_RSA_KEY(&genKey, bits, 6, &rng), BAD_FUNC_ARG); + ExpectIntEQ(MAKE_RSA_KEY(&genKey, bits, 6, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); #endif @@ -20373,14 +20377,14 @@ static int test_RsaDecryptBoundsCheck(void) flatC[flatCSz-1] = 1; ExpectIntEQ(wc_RsaDirect(flatC, flatCSz, out, &outSz, &key, - RSA_PRIVATE_DECRYPT, &rng), RSA_OUT_OF_RANGE_E); + RSA_PRIVATE_DECRYPT, &rng), WC_NO_ERR_TRACE(RSA_OUT_OF_RANGE_E)); if (EXPECT_SUCCESS()) { mp_int c; ExpectIntEQ(mp_init_copy(&c, &key.n), 0); ExpectIntEQ(mp_sub_d(&c, 1, &c), 0); ExpectIntEQ(mp_to_unsigned_bin(&c, flatC), 0); ExpectIntEQ(wc_RsaDirect(flatC, flatCSz, out, &outSz, &key, - RSA_PRIVATE_DECRYPT, NULL), RSA_OUT_OF_RANGE_E); + RSA_PRIVATE_DECRYPT, NULL), WC_NO_ERR_TRACE(RSA_OUT_OF_RANGE_E)); mp_clear(&c); } } @@ -20409,12 +20413,12 @@ static int test_wc_SetKeyUsage(void) ExpectIntEQ(wc_SetKeyUsage(&myCert, "cRLSign,keyCertSign"), 0); /* Test bad args. */ - ExpectIntEQ(wc_SetKeyUsage(NULL, "decipherOnly"), BAD_FUNC_ARG); - ExpectIntEQ(wc_SetKeyUsage(&myCert, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_SetKeyUsage(&myCert, ""), KEYUSAGE_E); - ExpectIntEQ(wc_SetKeyUsage(&myCert, ","), KEYUSAGE_E); + ExpectIntEQ(wc_SetKeyUsage(NULL, "decipherOnly"), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_SetKeyUsage(&myCert, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_SetKeyUsage(&myCert, ""), WC_NO_ERR_TRACE(KEYUSAGE_E)); + ExpectIntEQ(wc_SetKeyUsage(&myCert, ","), WC_NO_ERR_TRACE(KEYUSAGE_E)); ExpectIntEQ(wc_SetKeyUsage(&myCert, "digitalSignature, cRLSign"), - KEYUSAGE_E); + WC_NO_ERR_TRACE(KEYUSAGE_E)); #endif return EXPECT_RESULT(); } /* END test_wc_SetKeyUsage */ @@ -20460,19 +20464,19 @@ static int test_wc_CheckProbablePrime(void) /* Bad cases */ ExpectIntEQ(wc_CheckProbablePrime(NULL, pSz, q, qSz, e, eSz, nlen, isPrime), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CheckProbablePrime(p, 0, q, qSz, e, eSz, nlen, isPrime), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CheckProbablePrime(p, pSz, NULL, qSz, e, eSz, nlen, isPrime), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CheckProbablePrime(p, pSz, q, 0, e, eSz, nlen, isPrime), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CheckProbablePrime(p, pSz, q, qSz, NULL, eSz, nlen, isPrime), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CheckProbablePrime(p, pSz, q, qSz, e, 0, nlen, isPrime), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CheckProbablePrime(NULL, 0, NULL, 0, NULL, 0, nlen, isPrime), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Good case */ ExpectIntEQ(wc_CheckProbablePrime(p, pSz, q, qSz, e, eSz, nlen, isPrime), @@ -20515,13 +20519,13 @@ static int test_wc_RsaPSS_Verify(void) /* Bad cases */ ExpectIntEQ(wc_RsaPSS_Verify(NULL, (word32)sz, pt, outLen, - WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), BAD_FUNC_ARG); + WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPSS_Verify(pSignature, 0, pt, outLen, - WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), BAD_FUNC_ARG); + WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPSS_Verify(pSignature, (word32)sz, NULL, outLen, - WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), BAD_FUNC_ARG); + WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPSS_Verify(NULL, 0, NULL, outLen, - WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), BAD_FUNC_ARG); + WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Good case */ ExpectIntGT(wc_RsaPSS_Verify(pSignature, (word32)sz, pt, outLen, @@ -20570,13 +20574,13 @@ static int test_wc_RsaPSS_VerifyCheck(void) /* Bad cases */ ExpectIntEQ(wc_RsaPSS_VerifyCheck(NULL, (word32)sz, pt, outLen, digest, - digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), BAD_FUNC_ARG); + digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPSS_VerifyCheck(pSignature, 0, pt, outLen, digest, - digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), BAD_FUNC_ARG); + digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPSS_VerifyCheck(pSignature, (word32)sz, NULL, outLen, digest, - digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), BAD_FUNC_ARG); + digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPSS_VerifyCheck(NULL, 0, NULL, outLen, digest, - digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), BAD_FUNC_ARG); + digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Good case */ ExpectIntGT(wc_RsaPSS_VerifyCheck(pSignature, (word32)sz, pt, outLen, digest, @@ -20623,13 +20627,13 @@ static int test_wc_RsaPSS_VerifyCheckInline(void) /* Bad Cases */ ExpectIntEQ(wc_RsaPSS_VerifyCheckInline(NULL, (word32)sz, &pt, digest, - digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), BAD_FUNC_ARG); + digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPSS_VerifyCheckInline(pSignature, 0, NULL, digest, - digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), BAD_FUNC_ARG); + digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPSS_VerifyCheckInline(NULL, 0, &pt, digest, - digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), BAD_FUNC_ARG); + digestSz, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaPSS_VerifyCheckInline(pSignature, (word32)sz, &pt, digest, - digestSz, WC_HASH_TYPE_SHA, WC_MGF1SHA256, &key), BAD_FUNC_ARG); + digestSz, WC_HASH_TYPE_SHA, WC_MGF1SHA256, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Good case */ ExpectIntGT(wc_RsaPSS_VerifyCheckInline(pSignature, (word32)sz, &pt, digest, @@ -20663,7 +20667,7 @@ static int test_wc_LockMutex_ex(void) int line = 0; /* without SetMutexCb */ - ExpectIntEQ(wc_LockMutex_ex(flag, type, file, line), BAD_STATE_E); + ExpectIntEQ(wc_LockMutex_ex(flag, type, file, line), WC_NO_ERR_TRACE(BAD_STATE_E)); /* with SetMutexCb */ ExpectIntEQ(wc_SetMutexCb(sample_mutex_cb), 0); ExpectIntEQ(wc_LockMutex_ex(flag, type, file, line), 0); @@ -20720,12 +20724,12 @@ static int test_wc_RsaKeyToDer(void) ExpectIntGT(wc_RsaKeyToDer(&genKey, der, derSz), 0); /* Pass good/bad args. */ - ExpectIntEQ(wc_RsaKeyToDer(NULL, der, FOURK_BUF), BAD_FUNC_ARG); + ExpectIntEQ(wc_RsaKeyToDer(NULL, der, FOURK_BUF), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Get just the output length */ ExpectIntGT(wc_RsaKeyToDer(&genKey, NULL, 0), 0); /* Try Public Key. */ genKey.type = 0; - ExpectIntEQ(wc_RsaKeyToDer(&genKey, der, FOURK_BUF), BAD_FUNC_ARG); + ExpectIntEQ(wc_RsaKeyToDer(&genKey, der, FOURK_BUF), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifdef WOLFSSL_CHECK_MEM_ZERO /* Put back to Private Key */ genKey.type = 1; @@ -20775,9 +20779,9 @@ static int test_wc_RsaKeyToPublicDer(void) ExpectIntGT(wc_RsaKeyToPublicDer_ex(&key, der, derLen, 0), 0); /* Pass in bad args. */ - ExpectIntEQ(wc_RsaKeyToPublicDer(NULL, der, derLen), BAD_FUNC_ARG); + ExpectIntEQ(wc_RsaKeyToPublicDer(NULL, der, derLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntLT(ret = wc_RsaKeyToPublicDer(&key, der, -1), 0); - ExpectTrue((ret == BUFFER_E) || (ret == BAD_FUNC_ARG)); + ExpectTrue((ret == WC_NO_ERR_TRACE(BUFFER_E)) || (ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG))); XFREE(der, NULL, DYNAMIC_TYPE_TMP_BUFFER); DoExpectIntEQ(wc_FreeRsaKey(&key), 0); @@ -20965,26 +20969,26 @@ static int test_wc_RsaSSL_SignVerify(void) /* Test bad args. */ ExpectIntEQ(wc_RsaSSL_Sign(NULL, inLen, out, outSz, &key, &rng), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaSSL_Sign(in, 0, out, outSz, &key, &rng), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaSSL_Sign(in, inLen, NULL, outSz, &key, &rng), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaSSL_Sign(in, inLen, out, outSz, NULL, &rng), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Verify. */ ExpectIntEQ(wc_RsaSSL_Verify(out, idx, plain, plainSz, &key), (int)inLen); /* Pass bad args. */ ExpectIntEQ(wc_RsaSSL_Verify(NULL, idx, plain, plainSz, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaSSL_Verify(out, 0, plain, plainSz, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaSSL_Verify(out, idx, NULL, plainSz, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaSSL_Verify(out, idx, plain, plainSz, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); WC_FREE_VAR(in, NULL); WC_FREE_VAR(out, NULL); @@ -21024,7 +21028,7 @@ static int test_wc_RsaEncryptSize(void) ExpectIntEQ(wc_RsaEncryptSize(&key), 256); /* Pass in bad arg. */ - ExpectIntEQ(wc_RsaEncryptSize(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_RsaEncryptSize(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRsaKey(&key), 0); DoExpectIntEQ(wc_FreeRng(&rng), 0); @@ -21064,15 +21068,15 @@ static int test_wc_RsaFlattenPublicKey(void) /* Pass bad args. */ ExpectIntEQ(wc_RsaFlattenPublicKey(NULL, e, &eSz, n, &nSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaFlattenPublicKey(&key, NULL, &eSz, n, &nSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaFlattenPublicKey(&key, e, NULL, n, &nSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaFlattenPublicKey(&key, e, &eSz, NULL, &nSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_RsaFlattenPublicKey(&key, e, &eSz, n, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRsaKey(&key), 0); DoExpectIntEQ(wc_FreeRng(&rng), 0); @@ -21122,9 +21126,9 @@ static int test_wc_AesCcmSetKey(void) #endif /* Test bad args. */ - ExpectIntEQ(wc_AesCcmSetKey(&aes, key16, sizeof(key16) - 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_AesCcmSetKey(&aes, key24, sizeof(key24) - 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_AesCcmSetKey(&aes, key32, sizeof(key32) - 1), BAD_FUNC_ARG); + ExpectIntEQ(wc_AesCcmSetKey(&aes, key16, sizeof(key16) - 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_AesCcmSetKey(&aes, key24, sizeof(key24) - 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_AesCcmSetKey(&aes, key32, sizeof(key32) - 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_AesFree(&aes); #endif @@ -21190,49 +21194,49 @@ static int test_wc_AesCcmEncryptDecrypt(void) /* Pass in bad args. Encrypt*/ ExpectIntEQ(wc_AesCcmEncrypt(NULL, cipherOut, plainT, sizeof(cipherOut), iv, sizeof(iv), authTag, sizeof(authTag), authIn , sizeof(authIn)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCcmEncrypt(&aes, NULL, plainT, sizeof(cipherOut), iv, sizeof(iv), authTag, sizeof(authTag), authIn , sizeof(authIn)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCcmEncrypt(&aes, cipherOut, NULL, sizeof(cipherOut), iv, sizeof(iv), authTag, sizeof(authTag), authIn , sizeof(authIn)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCcmEncrypt(&aes, cipherOut, plainT, sizeof(cipherOut), NULL, sizeof(iv), authTag, sizeof(authTag), authIn , sizeof(authIn)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCcmEncrypt(&aes, cipherOut, plainT, sizeof(cipherOut), iv, sizeof(iv), NULL, sizeof(authTag), authIn , sizeof(authIn)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCcmEncrypt(&aes, cipherOut, plainT, sizeof(cipherOut), iv, sizeof(iv) + 1, authTag, sizeof(authTag), authIn , sizeof(authIn)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCcmEncrypt(&aes, cipherOut, plainT, sizeof(cipherOut), iv, sizeof(iv) - 7, authTag, sizeof(authTag), authIn , sizeof(authIn)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifdef HAVE_AES_DECRYPT /* Pass in bad args. Decrypt*/ ExpectIntEQ(wc_AesCcmDecrypt(NULL, plainOut, cipherOut, sizeof(plainOut), iv, sizeof(iv), authTag, sizeof(authTag), authIn, sizeof(authIn)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCcmDecrypt(&aes, NULL, cipherOut, sizeof(plainOut), iv, sizeof(iv), authTag, sizeof(authTag), authIn, sizeof(authIn)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCcmDecrypt(&aes, plainOut, NULL, sizeof(plainOut), iv, sizeof(iv), authTag, sizeof(authTag), authIn, sizeof(authIn)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCcmDecrypt(&aes, plainOut, cipherOut, sizeof(plainOut), NULL, sizeof(iv), authTag, sizeof(authTag), authIn, sizeof(authIn)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCcmDecrypt(&aes, plainOut, cipherOut, sizeof(plainOut), iv, sizeof(iv), NULL, sizeof(authTag), authIn, sizeof(authIn)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCcmDecrypt(&aes, plainOut, cipherOut, sizeof(plainOut), iv, sizeof(iv) + 1, authTag, sizeof(authTag), authIn, sizeof(authIn)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesCcmDecrypt(&aes, plainOut, cipherOut, sizeof(plainOut), iv, sizeof(iv) - 7, authTag, sizeof(authTag), authIn, sizeof(authIn)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif wc_AesFree(&aes); @@ -22530,42 +22534,42 @@ static int test_wc_AesEaxEncryptAuth(void) iv, sizeof(iv), authtag, (word32)len, aad, sizeof(aad)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesEaxEncryptAuth(key, sizeof(key), NULL, msg, sizeof(msg), iv, sizeof(iv), authtag, (word32)len, aad, sizeof(aad)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesEaxEncryptAuth(key, sizeof(key), ciphertext, NULL, sizeof(msg), iv, sizeof(iv), authtag, (word32)len, aad, sizeof(aad)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesEaxEncryptAuth(key, sizeof(key), ciphertext, msg, sizeof(msg), NULL, sizeof(iv), authtag, (word32)len, aad, sizeof(aad)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesEaxEncryptAuth(key, sizeof(key), ciphertext, msg, sizeof(msg), iv, sizeof(iv), NULL, (word32)len, aad, sizeof(aad)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesEaxEncryptAuth(key, sizeof(key), ciphertext, msg, sizeof(msg), iv, sizeof(iv), authtag, (word32)len, NULL, sizeof(aad)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Test bad key lengths */ for (i = 0; i <= 32; i++) { @@ -22575,7 +22579,7 @@ static int test_wc_AesEaxEncryptAuth(void) exp_ret = 0; } else { - exp_ret = BAD_FUNC_ARG; + exp_ret = WC_NO_ERR_TRACE(BAD_FUNC_ARG); } ExpectIntEQ(wc_AesEaxEncryptAuth(key, (word32)i, @@ -22596,7 +22600,7 @@ static int test_wc_AesEaxEncryptAuth(void) iv, sizeof(iv), authtag, (word32)len, aad, sizeof(aad)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); return EXPECT_RESULT(); } /* END test_wc_AesEaxEncryptAuth() */ @@ -22634,7 +22638,7 @@ static int test_wc_AesEaxDecryptAuth(void) iv, sizeof(iv), tag, (word32)len, aad, sizeof(aad)), - AES_EAX_AUTH_E); + WC_NO_ERR_TRACE(AES_EAX_AUTH_E)); /* Test null checking */ ExpectIntEQ(wc_AesEaxDecryptAuth(NULL, sizeof(key), @@ -22643,52 +22647,52 @@ static int test_wc_AesEaxDecryptAuth(void) iv, sizeof(iv), tag, (word32)len, aad, sizeof(aad)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesEaxDecryptAuth(key, sizeof(key), NULL, ct, sizeof(ct), iv, sizeof(iv), tag, (word32)len, aad, sizeof(aad)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesEaxDecryptAuth(key, sizeof(key), plaintext, NULL, sizeof(ct), iv, sizeof(iv), tag, (word32)len, aad, sizeof(aad)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesEaxDecryptAuth(key, sizeof(key), plaintext, ct, sizeof(ct), NULL, sizeof(iv), tag, (word32)len, aad, sizeof(aad)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesEaxDecryptAuth(key, sizeof(key), plaintext, ct, sizeof(ct), iv, sizeof(iv), NULL, (word32)len, aad, sizeof(aad)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AesEaxDecryptAuth(key, sizeof(key), plaintext, ct, sizeof(ct), iv, sizeof(iv), tag, (word32)len, NULL, sizeof(aad)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Test bad key lengths */ for (i = 0; i <= 32; i++) { int exp_ret; if (i == AES_128_KEY_SIZE || i == AES_192_KEY_SIZE || i == AES_256_KEY_SIZE) { - exp_ret = AES_EAX_AUTH_E; + exp_ret = WC_NO_ERR_TRACE(AES_EAX_AUTH_E); } else { - exp_ret = BAD_FUNC_ARG; + exp_ret = WC_NO_ERR_TRACE(BAD_FUNC_ARG); } ExpectIntEQ(wc_AesEaxDecryptAuth(key, (word32)i, @@ -22709,7 +22713,7 @@ static int test_wc_AesEaxDecryptAuth(void) iv, sizeof(iv), tag, (word32)len, aad, sizeof(aad)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); return EXPECT_RESULT(); } /* END test_wc_AesEaxDecryptAuth() */ @@ -22732,7 +22736,7 @@ static int test_wc_InitDsaKey(void) ExpectIntEQ(wc_InitDsaKey(&key), 0); /* Pass in bad args. */ - ExpectIntEQ(wc_InitDsaKey(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_InitDsaKey(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_FreeDsaKey(&key); #endif @@ -22788,28 +22792,28 @@ static int test_wc_DsaSignVerify(void) /* Sign. */ ExpectIntEQ(wc_DsaSign(hash, signature, &key, &rng), 0); /* Test bad args. */ - ExpectIntEQ(wc_DsaSign(NULL, signature, &key, &rng), BAD_FUNC_ARG); - ExpectIntEQ(wc_DsaSign(hash, NULL, &key, &rng), BAD_FUNC_ARG); - ExpectIntEQ(wc_DsaSign(hash, signature, NULL, &rng), BAD_FUNC_ARG); - ExpectIntEQ(wc_DsaSign(hash, signature, &key, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_DsaSign(NULL, signature, &key, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_DsaSign(hash, NULL, &key, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_DsaSign(hash, signature, NULL, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_DsaSign(hash, signature, &key, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Verify. */ ExpectIntEQ(wc_DsaVerify(hash, signature, &key, &answer), 0); ExpectIntEQ(answer, 1); /* Pass in bad args. */ - ExpectIntEQ(wc_DsaVerify(NULL, signature, &key, &answer), BAD_FUNC_ARG); - ExpectIntEQ(wc_DsaVerify(hash, NULL, &key, &answer), BAD_FUNC_ARG); - ExpectIntEQ(wc_DsaVerify(hash, signature, NULL, &answer), BAD_FUNC_ARG); - ExpectIntEQ(wc_DsaVerify(hash, signature, &key, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_DsaVerify(NULL, signature, &key, &answer), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_DsaVerify(hash, NULL, &key, &answer), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_DsaVerify(hash, signature, NULL, &answer), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_DsaVerify(hash, signature, &key, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #if !defined(HAVE_FIPS) && defined(WOLFSSL_PUBLIC_MP) /* hard set q to 0 and test fail case */ mp_free(&key.q); mp_init(&key.q); - ExpectIntEQ(wc_DsaSign(hash, signature, &key, &rng), BAD_FUNC_ARG); + ExpectIntEQ(wc_DsaSign(hash, signature, &key, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); mp_set(&key.q, 1); - ExpectIntEQ(wc_DsaSign(hash, signature, &key, &rng), BAD_FUNC_ARG); + ExpectIntEQ(wc_DsaSign(hash, signature, &key, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif DoExpectIntEQ(wc_FreeRng(&rng),0); @@ -22855,22 +22859,22 @@ static int test_wc_DsaPublicPrivateKeyDecode(void) ExpectIntEQ(wc_InitDsaKey(&key), 0); ExpectIntEQ(wc_DsaPrivateKeyDecode(tmp, &idx, &key, bytes), 0); /* Test bad args. */ - ExpectIntEQ(wc_DsaPrivateKeyDecode(NULL, &idx, &key, bytes), BAD_FUNC_ARG); - ExpectIntEQ(wc_DsaPrivateKeyDecode(tmp, NULL, &key, bytes), BAD_FUNC_ARG); - ExpectIntEQ(wc_DsaPrivateKeyDecode(tmp, &idx, NULL, bytes), BAD_FUNC_ARG); + ExpectIntEQ(wc_DsaPrivateKeyDecode(NULL, &idx, &key, bytes), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_DsaPrivateKeyDecode(tmp, NULL, &key, bytes), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_DsaPrivateKeyDecode(tmp, &idx, NULL, bytes), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntLT(ret = wc_DsaPrivateKeyDecode(tmp, &idx, &key, bytes), 0); - ExpectTrue((ret == ASN_PARSE_E) || (ret == BUFFER_E)); + ExpectTrue((ret == WC_NO_ERR_TRACE(ASN_PARSE_E)) || (ret == WC_NO_ERR_TRACE(BUFFER_E))); wc_FreeDsaKey(&key); ExpectIntEQ(wc_InitDsaKey(&key), 0); idx = 0; /* Reset */ ExpectIntEQ(wc_DsaPublicKeyDecode(tmp, &idx, &key, bytes), 0); /* Test bad args. */ - ExpectIntEQ(wc_DsaPublicKeyDecode(NULL, &idx, &key, bytes), BAD_FUNC_ARG); - ExpectIntEQ(wc_DsaPublicKeyDecode(tmp, NULL, &key, bytes), BAD_FUNC_ARG); - ExpectIntEQ(wc_DsaPublicKeyDecode(tmp, &idx, NULL, bytes), BAD_FUNC_ARG); + ExpectIntEQ(wc_DsaPublicKeyDecode(NULL, &idx, &key, bytes), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_DsaPublicKeyDecode(tmp, NULL, &key, bytes), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_DsaPublicKeyDecode(tmp, &idx, NULL, bytes), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntLT(ret = wc_DsaPublicKeyDecode(tmp, &idx, &key, bytes), 0); - ExpectTrue((ret == ASN_PARSE_E) || (ret == BUFFER_E)); + ExpectTrue((ret == WC_NO_ERR_TRACE(ASN_PARSE_E)) || (ret == WC_NO_ERR_TRACE(BUFFER_E))); wc_FreeDsaKey(&key); #endif /* !NO_DSA */ return EXPECT_RESULT(); @@ -22896,15 +22900,15 @@ static int test_wc_MakeDsaKey(void) ExpectIntEQ(wc_MakeDsaParameters(&rng, ONEK_BUF, &genKey), 0); /* Test bad args. */ - ExpectIntEQ(wc_MakeDsaParameters(NULL, ONEK_BUF, &genKey), BAD_FUNC_ARG); - ExpectIntEQ(wc_MakeDsaParameters(&rng, ONEK_BUF, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_MakeDsaParameters(NULL, ONEK_BUF, &genKey), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MakeDsaParameters(&rng, ONEK_BUF, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_MakeDsaParameters(&rng, ONEK_BUF + 1, &genKey), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_MakeDsaKey(&rng, &genKey), 0); /* Test bad args. */ - ExpectIntEQ(wc_MakeDsaKey(NULL, &genKey), BAD_FUNC_ARG); - ExpectIntEQ(wc_MakeDsaKey(&rng, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_MakeDsaKey(NULL, &genKey), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_MakeDsaKey(&rng, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_FreeDsaKey(&genKey); @@ -22959,8 +22963,8 @@ static int test_wc_DsaKeyToDer(void) ExpectIntEQ(XMEMCMP(der, tmp, bytes), 0); /* Test bad args. */ - ExpectIntEQ(wc_DsaKeyToDer(NULL, der, FOURK_BUF), BAD_FUNC_ARG); - ExpectIntEQ(wc_DsaKeyToDer(&key, NULL, FOURK_BUF), BAD_FUNC_ARG); + ExpectIntEQ(wc_DsaKeyToDer(NULL, der, FOURK_BUF), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_DsaKeyToDer(&key, NULL, FOURK_BUF), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_FreeDsaKey(&key); #endif /* !NO_DSA && WOLFSSL_KEY_GEN */ @@ -23006,8 +23010,8 @@ static int test_wc_DsaKeyToPublicDer(void) ExpectIntEQ(wc_DsaPublicKeyDecode(der, &idx, &key, sz), 0); /* Test bad args. */ - ExpectIntEQ(wc_DsaKeyToPublicDer(NULL, der, FOURK_BUF), BAD_FUNC_ARG); - ExpectIntEQ(wc_DsaKeyToPublicDer(&key, NULL, FOURK_BUF), BAD_FUNC_ARG); + ExpectIntEQ(wc_DsaKeyToPublicDer(NULL, der, FOURK_BUF), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_DsaKeyToPublicDer(&key, NULL, FOURK_BUF), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_FreeDsaKey(&key); @@ -23051,13 +23055,13 @@ static int test_wc_DsaImportParamsRaw(void) /* test bad args */ /* null key struct */ - ExpectIntEQ(wc_DsaImportParamsRaw(NULL, p, q, g), BAD_FUNC_ARG); + ExpectIntEQ(wc_DsaImportParamsRaw(NULL, p, q, g), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* null param pointers */ - ExpectIntEQ(wc_DsaImportParamsRaw(&key, NULL, NULL, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_DsaImportParamsRaw(&key, NULL, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* illegal p length */ - ExpectIntEQ(wc_DsaImportParamsRaw(&key, invalidP, q, g), BAD_FUNC_ARG); + ExpectIntEQ(wc_DsaImportParamsRaw(&key, invalidP, q, g), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* illegal q length */ - ExpectIntEQ(wc_DsaImportParamsRaw(&key, p, invalidQ, g), BAD_FUNC_ARG); + ExpectIntEQ(wc_DsaImportParamsRaw(&key, p, invalidQ, g), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_FreeDsaKey(&key); #endif @@ -23098,16 +23102,16 @@ static int test_wc_DsaImportParamsRawCheck(void) /* test bad args */ /* null key struct */ ExpectIntEQ(wc_DsaImportParamsRawCheck(NULL, p, q, g, trusted, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* null param pointers */ ExpectIntEQ(wc_DsaImportParamsRawCheck(&key, NULL, NULL, NULL, trusted, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* illegal p length */ ExpectIntEQ(wc_DsaImportParamsRawCheck(&key, invalidP, q, g, trusted, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* illegal q length */ ExpectIntEQ(wc_DsaImportParamsRawCheck(&key, p, invalidQ, g, trusted, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_FreeDsaKey(&key); #endif @@ -23185,27 +23189,27 @@ static int test_wc_DsaExportParamsRaw(void) /* test bad args */ /* null key struct */ ExpectIntEQ(wc_DsaExportParamsRaw(NULL, pOut, &pOutSz, qOut, &qOutSz, gOut, - &gOutSz), BAD_FUNC_ARG); + &gOutSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* null output pointers */ ExpectIntEQ(wc_DsaExportParamsRaw(&key, NULL, &pOutSz, NULL, &qOutSz, NULL, - &gOutSz), LENGTH_ONLY_E); + &gOutSz), WC_NO_ERR_TRACE(LENGTH_ONLY_E)); /* null output size pointers */ ExpectIntEQ( wc_DsaExportParamsRaw(&key, pOut, NULL, qOut, NULL, gOut, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* p output buffer size too small */ pOutSz = 1; ExpectIntEQ(wc_DsaExportParamsRaw(&key, pOut, &pOutSz, qOut, &qOutSz, gOut, - &gOutSz), BUFFER_E); + &gOutSz), WC_NO_ERR_TRACE(BUFFER_E)); pOutSz = sizeof(pOut); /* q output buffer size too small */ qOutSz = 1; ExpectIntEQ(wc_DsaExportParamsRaw(&key, pOut, &pOutSz, qOut, &qOutSz, gOut, - &gOutSz), BUFFER_E); + &gOutSz), WC_NO_ERR_TRACE(BUFFER_E)); qOutSz = sizeof(qOut); /* g output buffer size too small */ gOutSz = 1; ExpectIntEQ(wc_DsaExportParamsRaw(&key, pOut, &pOutSz, qOut, &qOutSz, gOut, - &gOutSz), BUFFER_E); + &gOutSz), WC_NO_ERR_TRACE(BUFFER_E)); wc_FreeDsaKey(&key); #endif @@ -23241,22 +23245,22 @@ static int test_wc_DsaExportKeyRaw(void) /* test bad args */ /* null key struct */ ExpectIntEQ(wc_DsaExportKeyRaw(NULL, xOut, &xOutSz, yOut, &yOutSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* null output pointers */ ExpectIntEQ(wc_DsaExportKeyRaw(&key, NULL, &xOutSz, NULL, &yOutSz), - LENGTH_ONLY_E); + WC_NO_ERR_TRACE(LENGTH_ONLY_E)); /* null output size pointers */ ExpectIntEQ(wc_DsaExportKeyRaw(&key, xOut, NULL, yOut, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* x output buffer size too small */ xOutSz = 1; ExpectIntEQ(wc_DsaExportKeyRaw(&key, xOut, &xOutSz, yOut, &yOutSz), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); xOutSz = sizeof(xOut); /* y output buffer size too small */ yOutSz = 1; ExpectIntEQ(wc_DsaExportKeyRaw(&key, xOut, &xOutSz, yOut, &yOutSz), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_FreeDsaKey(&key); @@ -23284,20 +23288,20 @@ static int test_wc_ed25519_make_key(void) ExpectIntEQ(wc_InitRng(&rng), 0); ExpectIntEQ(wc_ed25519_make_public(&key, pubkey, (word32)pubkey_sz), - ECC_PRIV_KEY_E); + WC_NO_ERR_TRACE(ECC_PRIV_KEY_E)); ExpectIntEQ(wc_ed25519_make_public(&key, pubkey+1, (word32)pubkey_sz), - ECC_PRIV_KEY_E); + WC_NO_ERR_TRACE(ECC_PRIV_KEY_E)); ExpectIntEQ(wc_ed25519_make_key(&rng, ED25519_KEY_SIZE, &key), 0); /* Test bad args. */ ExpectIntEQ(wc_ed25519_make_key(NULL, ED25519_KEY_SIZE, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_make_key(&rng, ED25519_KEY_SIZE, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_make_key(&rng, ED25519_KEY_SIZE - 1, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_make_key(&rng, ED25519_KEY_SIZE + 1, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_ed25519_free(&key); @@ -23318,7 +23322,7 @@ static int test_wc_ed25519_init(void) ExpectIntEQ(wc_ed25519_init(&key), 0); /* Test bad args. */ - ExpectIntEQ(wc_ed25519_init(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed25519_init(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_ed25519_free(&key); #endif @@ -23360,15 +23364,15 @@ static int test_wc_ed25519_sign_msg(void) /* Test bad args. */ ExpectIntEQ(wc_ed25519_sign_msg(NULL, msglen, sig, &siglen, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_sign_msg(msg, msglen, NULL, &siglen, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_sign_msg(msg, msglen, sig, NULL, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_sign_msg(msg, msglen, sig, &siglen, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_sign_msg(msg, msglen, sig, &badSigLen, &key), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); ExpectIntEQ(badSigLen, ED25519_SIG_SIZE); badSigLen -= 1; @@ -23379,19 +23383,19 @@ static int test_wc_ed25519_sign_msg(void) /* Test bad args. */ ExpectIntEQ(wc_ed25519_verify_msg(sig+1, siglen - 1, msg, msglen, - &verify_ok, &key), BAD_FUNC_ARG); + &verify_ok, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_verify_msg(sig+1, siglen + 1, msg, msglen, - &verify_ok, &key), BAD_FUNC_ARG); + &verify_ok, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_verify_msg(NULL, siglen, msg, msglen, &verify_ok, - &key), BAD_FUNC_ARG); + &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_verify_msg(sig+1, siglen, NULL, msglen, &verify_ok, - &key), BAD_FUNC_ARG); + &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_verify_msg(sig+1, siglen, msg, msglen, NULL, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_verify_msg(sig+1, siglen, msg, msglen, &verify_ok, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_verify_msg(sig+1, badSigLen, msg, msglen, &verify_ok, - &key), BAD_FUNC_ARG); + &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif /* Verify. */ DoExpectIntEQ(wc_FreeRng(&rng), 0); @@ -23426,9 +23430,9 @@ static int test_wc_ed25519_import_public(void) ExpectIntEQ(XMEMCMP(in, pubKey.p, inlen), 0); /* Test bad args. */ - ExpectIntEQ(wc_ed25519_import_public(NULL, inlen, &pubKey), BAD_FUNC_ARG); - ExpectIntEQ(wc_ed25519_import_public(in, inlen, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_ed25519_import_public(in, inlen - 1, &pubKey), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed25519_import_public(NULL, inlen, &pubKey), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ed25519_import_public(in, inlen, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ed25519_import_public(in, inlen - 1, &pubKey), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_ed25519_free(&pubKey); @@ -23480,17 +23484,17 @@ static int test_wc_ed25519_import_private_key(void) /* Test bad args. */ ExpectIntEQ(wc_ed25519_import_private_key(NULL, privKeySz, pubKey, pubKeySz, - &key), BAD_FUNC_ARG); + &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_import_private_key(privKey, privKeySz, NULL, - pubKeySz, &key), BAD_FUNC_ARG); + pubKeySz, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_import_private_key(privKey, privKeySz, pubKey, - pubKeySz, NULL), BAD_FUNC_ARG); + pubKeySz, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_import_private_key(privKey, privKeySz - 1, pubKey, - pubKeySz, &key), BAD_FUNC_ARG); + pubKeySz, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_import_private_key(privKey, privKeySz, pubKey, - pubKeySz - 1, &key), BAD_FUNC_ARG); + pubKeySz - 1, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_import_private_key(privKey, privKeySz, NULL, 0, - &key), BAD_FUNC_ARG); + &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_ed25519_free(&key); @@ -23543,20 +23547,20 @@ static int test_wc_ed25519_export(void) ExpectIntEQ(pubSz, ED25519_KEY_SIZE); ExpectIntEQ(XMEMCMP(key.p, pub, pubSz), 0); /* Test bad args. */ - ExpectIntEQ(wc_ed25519_export_public(NULL, pub, &pubSz), BAD_FUNC_ARG); - ExpectIntEQ(wc_ed25519_export_public(&key, NULL, &pubSz), BAD_FUNC_ARG); - ExpectIntEQ(wc_ed25519_export_public(&key, pub, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed25519_export_public(NULL, pub, &pubSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ed25519_export_public(&key, NULL, &pubSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ed25519_export_public(&key, pub, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_export_private_only(&key, priv, &privSz), 0); ExpectIntEQ(privSz, ED25519_KEY_SIZE); ExpectIntEQ(XMEMCMP(key.k, priv, privSz), 0); /* Test bad args. */ ExpectIntEQ(wc_ed25519_export_private_only(NULL, priv, &privSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_export_private_only(&key, NULL, &privSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_export_private_only(&key, priv, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); PRIVATE_KEY_LOCK(); DoExpectIntEQ(wc_FreeRng(&rng), 0); @@ -23603,19 +23607,19 @@ static int test_wc_ed25519_size(void) ExpectIntEQ(wc_ed25519_size(&key), ED25519_KEY_SIZE); /* Test bad args. */ - ExpectIntEQ(wc_ed25519_size(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed25519_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_sig_size(&key), ED25519_SIG_SIZE); /* Test bad args. */ - ExpectIntEQ(wc_ed25519_sig_size(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed25519_sig_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_pub_size(&key), ED25519_PUB_KEY_SIZE); /* Test bad args. */ - ExpectIntEQ(wc_ed25519_pub_size(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed25519_pub_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_priv_size(&key), ED25519_PRV_KEY_SIZE); /* Test bad args. */ - ExpectIntEQ(wc_ed25519_priv_size(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed25519_priv_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_ed25519_free(&key); @@ -23669,23 +23673,23 @@ static int test_wc_ed25519_exportKey(void) ExpectIntEQ(wc_ed25519_export_private(&key, privOnly, &privOnlySz), 0); /* Test bad args. */ ExpectIntEQ(wc_ed25519_export_private(NULL, privOnly, &privOnlySz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_export_private(&key, NULL, &privOnlySz), - BAD_FUNC_ARG); - ExpectIntEQ(wc_ed25519_export_private(&key, privOnly, NULL), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ed25519_export_private(&key, privOnly, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_export_key(&key, priv, &privSz, pub, &pubSz), 0); /* Test bad args. */ ExpectIntEQ(wc_ed25519_export_key(NULL, priv, &privSz, pub, &pubSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_export_key(&key, NULL, &privSz, pub, &pubSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_export_key(&key, priv, NULL, pub, &pubSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_export_key(&key, priv, &privSz, NULL, &pubSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_export_key(&key, priv, &privSz, pub, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); PRIVATE_KEY_LOCK(); /* Cross check output. */ @@ -23711,9 +23715,9 @@ static int test_wc_Ed25519PublicKeyToDer(void) XMEMSET(&key, 0, sizeof(ed25519_key)); /* Test bad args */ - ExpectIntEQ(wc_Ed25519PublicKeyToDer(NULL, NULL, 0, 0), BAD_FUNC_ARG); + ExpectIntEQ(wc_Ed25519PublicKeyToDer(NULL, NULL, 0, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed25519_init(&key), 0); - ExpectIntEQ(wc_Ed25519PublicKeyToDer(&key, derBuf, 0, 0), BUFFER_E); + ExpectIntEQ(wc_Ed25519PublicKeyToDer(&key, derBuf, 0, 0), WC_NO_ERR_TRACE(BUFFER_E)); wc_ed25519_free(&key); /* Test good args */ @@ -23749,7 +23753,7 @@ static int test_wc_curve25519_init(void) ExpectIntEQ(wc_curve25519_init(&key), 0); /* Test bad args for wc_curve25519_init */ - ExpectIntEQ(wc_curve25519_init(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_curve25519_init(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Test good args for wc_curve_25519_free */ wc_curve25519_free(&key); @@ -23807,23 +23811,23 @@ static int test_wc_curve25519_export_key_raw(void) prvkSz = CURVE25519_KEYSIZE; pubkSz = CURVE25519_KEYSIZE; ExpectIntEQ(wc_curve25519_export_key_raw(NULL, privateKey, &prvkSz, - publicKey, &pubkSz), BAD_FUNC_ARG); + publicKey, &pubkSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); prvkSz = CURVE25519_KEYSIZE; pubkSz = CURVE25519_KEYSIZE; ExpectIntEQ(wc_curve25519_export_key_raw(&key, NULL, &prvkSz, publicKey, - &pubkSz), BAD_FUNC_ARG); + &pubkSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); prvkSz = CURVE25519_KEYSIZE; pubkSz = CURVE25519_KEYSIZE; ExpectIntEQ(wc_curve25519_export_key_raw(&key, privateKey, NULL, - publicKey, &pubkSz), BAD_FUNC_ARG); + publicKey, &pubkSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* prvkSz = CURVE25519_KEYSIZE; */ pubkSz = CURVE25519_KEYSIZE; ExpectIntEQ(wc_curve25519_export_key_raw(&key, privateKey, &prvkSz, - NULL, &pubkSz), BAD_FUNC_ARG); + NULL, &pubkSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); prvkSz = CURVE25519_KEYSIZE; pubkSz = CURVE25519_KEYSIZE; ExpectIntEQ(wc_curve25519_export_key_raw(&key, privateKey, &prvkSz, - publicKey, NULL), BAD_FUNC_ARG); + publicKey, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* cross-testing */ prksz = CURVE25519_KEYSIZE; @@ -23875,49 +23879,49 @@ static int test_wc_curve25519_export_key_raw_ex(void) prvkSz = CURVE25519_KEYSIZE; pubkSz = CURVE25519_KEYSIZE; ExpectIntEQ(wc_curve25519_export_key_raw_ex(NULL, privateKey, - &prvkSz, publicKey, &pubkSz, EC25519_LITTLE_ENDIAN), BAD_FUNC_ARG); + &prvkSz, publicKey, &pubkSz, EC25519_LITTLE_ENDIAN), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); prvkSz = CURVE25519_KEYSIZE; pubkSz = CURVE25519_KEYSIZE; ExpectIntEQ(wc_curve25519_export_key_raw_ex(&key, NULL, - &prvkSz, publicKey, &pubkSz, EC25519_LITTLE_ENDIAN), BAD_FUNC_ARG); + &prvkSz, publicKey, &pubkSz, EC25519_LITTLE_ENDIAN), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); prvkSz = CURVE25519_KEYSIZE; pubkSz = CURVE25519_KEYSIZE; ExpectIntEQ(wc_curve25519_export_key_raw_ex(&key, privateKey, - NULL, publicKey, &pubkSz, EC25519_LITTLE_ENDIAN), BAD_FUNC_ARG); + NULL, publicKey, &pubkSz, EC25519_LITTLE_ENDIAN), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* prvkSz = CURVE25519_KEYSIZE; */ pubkSz = CURVE25519_KEYSIZE; ExpectIntEQ(wc_curve25519_export_key_raw_ex(&key, privateKey, - &prvkSz, NULL, &pubkSz, EC25519_LITTLE_ENDIAN), BAD_FUNC_ARG); + &prvkSz, NULL, &pubkSz, EC25519_LITTLE_ENDIAN), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); prvkSz = CURVE25519_KEYSIZE; pubkSz = CURVE25519_KEYSIZE; ExpectIntEQ(wc_curve25519_export_key_raw_ex(&key, privateKey, - &prvkSz, publicKey, NULL, EC25519_LITTLE_ENDIAN), BAD_FUNC_ARG); + &prvkSz, publicKey, NULL, EC25519_LITTLE_ENDIAN), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); prvkSz = CURVE25519_KEYSIZE; /* pubkSz = CURVE25519_KEYSIZE; */ ExpectIntEQ(wc_curve25519_export_key_raw_ex(NULL, privateKey, - &prvkSz, publicKey, &pubkSz, EC25519_BIG_ENDIAN), BAD_FUNC_ARG); + &prvkSz, publicKey, &pubkSz, EC25519_BIG_ENDIAN), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); prvkSz = CURVE25519_KEYSIZE; pubkSz = CURVE25519_KEYSIZE; ExpectIntEQ(wc_curve25519_export_key_raw_ex(&key, NULL, - &prvkSz, publicKey, &pubkSz, EC25519_BIG_ENDIAN), BAD_FUNC_ARG); + &prvkSz, publicKey, &pubkSz, EC25519_BIG_ENDIAN), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); prvkSz = CURVE25519_KEYSIZE; pubkSz = CURVE25519_KEYSIZE; ExpectIntEQ(wc_curve25519_export_key_raw_ex(&key, privateKey, - NULL, publicKey, &pubkSz, EC25519_BIG_ENDIAN), BAD_FUNC_ARG); + NULL, publicKey, &pubkSz, EC25519_BIG_ENDIAN), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* prvkSz = CURVE25519_KEYSIZE; */ pubkSz = CURVE25519_KEYSIZE; ExpectIntEQ(wc_curve25519_export_key_raw_ex(&key, privateKey, - &prvkSz, NULL, &pubkSz, EC25519_BIG_ENDIAN), BAD_FUNC_ARG); + &prvkSz, NULL, &pubkSz, EC25519_BIG_ENDIAN), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); prvkSz = CURVE25519_KEYSIZE; pubkSz = CURVE25519_KEYSIZE; ExpectIntEQ(wc_curve25519_export_key_raw_ex(&key, privateKey, - &prvkSz, publicKey, NULL, EC25519_BIG_ENDIAN), BAD_FUNC_ARG); + &prvkSz, publicKey, NULL, EC25519_BIG_ENDIAN), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* illegal value for endian */ prvkSz = CURVE25519_KEYSIZE; /* pubkSz = CURVE25519_KEYSIZE; */ ExpectIntEQ(wc_curve25519_export_key_raw_ex(&key, privateKey, &prvkSz, - publicKey, NULL, EC25519_BIG_ENDIAN + 10), BAD_FUNC_ARG); + publicKey, NULL, EC25519_BIG_ENDIAN + 10), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* cross-testing */ prksz = CURVE25519_KEYSIZE; @@ -23973,10 +23977,10 @@ static int test_wc_curve25519_make_key(void) ExpectIntEQ(keysize = wc_curve25519_size(&key), CURVE25519_KEYSIZE); ExpectIntEQ(wc_curve25519_make_key(&rng, keysize, &key), 0); /* test bad cases*/ - ExpectIntEQ(wc_curve25519_make_key(NULL, 0, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_curve25519_make_key(&rng, keysize, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_curve25519_make_key(NULL, keysize, &key), BAD_FUNC_ARG); - ExpectIntEQ(wc_curve25519_make_key(&rng, 0, &key), ECC_BAD_ARG_E); + ExpectIntEQ(wc_curve25519_make_key(NULL, 0, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_curve25519_make_key(&rng, keysize, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_curve25519_make_key(NULL, keysize, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_curve25519_make_key(&rng, 0, &key), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_curve25519_free(&key); @@ -24012,25 +24016,25 @@ static int test_wc_curve25519_shared_secret_ex(void) /* test bad cases*/ ExpectIntEQ(wc_curve25519_shared_secret_ex(NULL, NULL, NULL, 0, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_shared_secret_ex(NULL, &public_key, out, &outLen, - endian), BAD_FUNC_ARG); + endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_shared_secret_ex(&private_key, NULL, out, &outLen, - endian), BAD_FUNC_ARG); + endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_shared_secret_ex(&private_key, &public_key, NULL, - &outLen, endian), BAD_FUNC_ARG); + &outLen, endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_shared_secret_ex(&private_key, &public_key, out, - NULL, endian), BAD_FUNC_ARG); + NULL, endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* curve25519.c is checking for public_key size less than or equal to 0x7f, * increasing to 0x8f checks for error being returned*/ public_key.p.point[CURVE25519_KEYSIZE-1] = 0x8F; ExpectIntEQ(wc_curve25519_shared_secret_ex(&private_key, &public_key, out, - &outLen, endian), ECC_BAD_ARG_E); + &outLen, endian), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); outLen = outLen - 2; ExpectIntEQ(wc_curve25519_shared_secret_ex(&private_key, &public_key, out, - &outLen, endian), BAD_FUNC_ARG); + &outLen, endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_curve25519_free(&private_key); @@ -24060,17 +24064,17 @@ static int test_wc_curve25519_make_pub(void) (int)sizeof(key.k), key.k), 0); /* test bad cases*/ ExpectIntEQ(wc_curve25519_make_pub((int)sizeof(key.k) - 1, key.k, - (int)sizeof out, out), ECC_BAD_ARG_E); + (int)sizeof out, out), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_curve25519_make_pub((int)sizeof out, out, (int)sizeof(key.k), - NULL), ECC_BAD_ARG_E); + NULL), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_curve25519_make_pub((int)sizeof out - 1, out, - (int)sizeof(key.k), key.k), ECC_BAD_ARG_E); + (int)sizeof(key.k), key.k), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_curve25519_make_pub((int)sizeof out, NULL, - (int)sizeof(key.k), key.k), ECC_BAD_ARG_E); + (int)sizeof(key.k), key.k), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); /* verify clamping test */ key.k[0] |= ~248; ExpectIntEQ(wc_curve25519_make_pub((int)sizeof out, out, (int)sizeof(key.k), - key.k), ECC_BAD_ARG_E); + key.k), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); key.k[0] &= 248; /* repeat the expected-to-succeed test. */ ExpectIntEQ(wc_curve25519_make_pub((int)sizeof out, out, (int)sizeof(key.k), @@ -24105,16 +24109,16 @@ static int test_wc_curve25519_export_public_ex(void) ExpectIntEQ(wc_curve25519_export_public_ex(&key, out, &outLen, endian), 0); /* test bad cases*/ ExpectIntEQ(wc_curve25519_export_public_ex(NULL, NULL, NULL, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_export_public_ex(NULL, out, &outLen, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_export_public_ex(&key, NULL, &outLen, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_export_public_ex(&key, out, NULL, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); outLen = outLen - 2; ExpectIntEQ(wc_curve25519_export_public_ex(&key, out, &outLen, endian), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_curve25519_free(&key); @@ -24149,17 +24153,17 @@ static int test_wc_curve25519_import_private_raw_ex(void) &key, endian), 0); /* test bad cases*/ ExpectIntEQ(wc_curve25519_import_private_raw_ex(NULL, 0, NULL, 0, NULL, - endian), BAD_FUNC_ARG); + endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_import_private_raw_ex(NULL, privSz, pub, pubSz, - &key, endian), BAD_FUNC_ARG); + &key, endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_import_private_raw_ex(priv, privSz, NULL, pubSz, - &key, endian), BAD_FUNC_ARG); + &key, endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_import_private_raw_ex(priv, privSz, pub, pubSz, - NULL, endian), BAD_FUNC_ARG); + NULL, endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_import_private_raw_ex(priv, 0, pub, pubSz, - &key, endian), ECC_BAD_ARG_E); + &key, endian), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_curve25519_import_private_raw_ex(priv, privSz, pub, 0, - &key, endian), ECC_BAD_ARG_E); + &key, endian), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_curve25519_import_private_raw_ex(priv, privSz, pub, pubSz, &key, EC25519_LITTLE_ENDIAN), 0); @@ -24214,18 +24218,18 @@ static int test_wc_curve25519_export_private_raw_ex(void) 0); /* test bad cases*/ ExpectIntEQ(wc_curve25519_export_private_raw_ex(NULL, NULL, NULL, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_export_private_raw_ex(NULL, out, &outLen, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_export_private_raw_ex(&key, NULL, &outLen, - endian), BAD_FUNC_ARG); + endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_export_private_raw_ex(&key, out, NULL, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve25519_export_private_raw_ex(&key, out, &outLen, EC25519_LITTLE_ENDIAN), 0); outLen = outLen - 2; ExpectIntEQ(wc_curve25519_export_private_raw_ex(&key, out, &outLen, endian), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); wc_curve25519_free(&key); #endif @@ -24250,15 +24254,15 @@ static int test_wc_ed448_make_key(void) ExpectIntEQ(wc_InitRng(&rng), 0); ExpectIntEQ(wc_ed448_make_public(&key, pubkey, sizeof(pubkey)), - ECC_PRIV_KEY_E); + WC_NO_ERR_TRACE(ECC_PRIV_KEY_E)); ExpectIntEQ(wc_ed448_make_key(&rng, ED448_KEY_SIZE, &key), 0); /* Test bad args. */ - ExpectIntEQ(wc_ed448_make_key(NULL, ED448_KEY_SIZE, &key), BAD_FUNC_ARG); - ExpectIntEQ(wc_ed448_make_key(&rng, ED448_KEY_SIZE, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed448_make_key(NULL, ED448_KEY_SIZE, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ed448_make_key(&rng, ED448_KEY_SIZE, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_make_key(&rng, ED448_KEY_SIZE - 1, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_make_key(&rng, ED448_KEY_SIZE + 1, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_ed448_free(&key); @@ -24280,7 +24284,7 @@ static int test_wc_ed448_init(void) ExpectIntEQ(wc_ed448_init(&key), 0); /* Test bad args. */ - ExpectIntEQ(wc_ed448_init(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed448_init(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_ed448_free(&key); #endif @@ -24319,15 +24323,15 @@ static int test_wc_ed448_sign_msg(void) ExpectIntEQ(siglen, ED448_SIG_SIZE); /* Test bad args. */ ExpectIntEQ(wc_ed448_sign_msg(NULL, msglen, sig, &siglen, &key, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_sign_msg(msg, msglen, NULL, &siglen, &key, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_sign_msg(msg, msglen, sig, NULL, &key, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_sign_msg(msg, msglen, sig, &siglen, NULL, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_sign_msg(msg, msglen, sig, &badSigLen, &key, NULL, 0), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); ExpectIntEQ(badSigLen, ED448_SIG_SIZE); badSigLen -= 1; @@ -24337,19 +24341,19 @@ static int test_wc_ed448_sign_msg(void) ExpectIntEQ(verify_ok, 1); /* Test bad args. */ ExpectIntEQ(wc_ed448_verify_msg(sig, siglen - 1, msg, msglen, &verify_ok, - &key, NULL, 0), BAD_FUNC_ARG); + &key, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_verify_msg(sig, siglen + 1, msg, msglen, &verify_ok, - &key, NULL, 0), BAD_FUNC_ARG); + &key, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_verify_msg(NULL, siglen, msg, msglen, &verify_ok, - &key, NULL, 0), BAD_FUNC_ARG); + &key, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_verify_msg(sig, siglen, NULL, msglen, &verify_ok, - &key, NULL, 0), BAD_FUNC_ARG); + &key, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_verify_msg(sig, siglen, msg, msglen, NULL, - &key, NULL, 0), BAD_FUNC_ARG); + &key, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_verify_msg(sig, siglen, msg, msglen, &verify_ok, - NULL, NULL, 0), BAD_FUNC_ARG); + NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_verify_msg(sig, badSigLen, msg, msglen, &verify_ok, - &key, NULL, 0), BAD_FUNC_ARG); + &key, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif /* Verify. */ DoExpectIntEQ(wc_FreeRng(&rng), 0); @@ -24381,9 +24385,9 @@ static int test_wc_ed448_import_public(void) ExpectIntEQ(wc_ed448_import_public_ex(in, inlen, &pubKey, 1), 0); ExpectIntEQ(XMEMCMP(in, pubKey.p, inlen), 0); /* Test bad args. */ - ExpectIntEQ(wc_ed448_import_public(NULL, inlen, &pubKey), BAD_FUNC_ARG); - ExpectIntEQ(wc_ed448_import_public(in, inlen, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_ed448_import_public(in, inlen - 1, &pubKey), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed448_import_public(NULL, inlen, &pubKey), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ed448_import_public(in, inlen, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ed448_import_public(in, inlen - 1, &pubKey), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_ed448_free(&pubKey); @@ -24435,17 +24439,17 @@ static int test_wc_ed448_import_private_key(void) /* Test bad args. */ ExpectIntEQ(wc_ed448_import_private_key(NULL, privKeySz, pubKey, pubKeySz, - &key), BAD_FUNC_ARG); + &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_import_private_key(privKey, privKeySz, NULL, pubKeySz, - &key), BAD_FUNC_ARG); + &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_import_private_key(privKey, privKeySz, pubKey, - pubKeySz, NULL), BAD_FUNC_ARG); + pubKeySz, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_import_private_key(privKey, privKeySz - 1, pubKey, - pubKeySz, &key), BAD_FUNC_ARG); + pubKeySz, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_import_private_key(privKey, privKeySz, pubKey, - pubKeySz - 1, &key), BAD_FUNC_ARG); + pubKeySz - 1, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_import_private_key(privKey, privKeySz, NULL, 0, &key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_ed448_free(&key); @@ -24478,9 +24482,9 @@ static int test_wc_ed448_export(void) ExpectIntEQ(pubSz, ED448_KEY_SIZE); ExpectIntEQ(XMEMCMP(key.p, pub, pubSz), 0); /* Test bad args. */ - ExpectIntEQ(wc_ed448_export_public(NULL, pub, &pubSz), BAD_FUNC_ARG); - ExpectIntEQ(wc_ed448_export_public(&key, NULL, &pubSz), BAD_FUNC_ARG); - ExpectIntEQ(wc_ed448_export_public(&key, pub, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed448_export_public(NULL, pub, &pubSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ed448_export_public(&key, NULL, &pubSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ed448_export_public(&key, pub, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); PRIVATE_KEY_UNLOCK(); ExpectIntEQ(wc_ed448_export_private_only(&key, priv, &privSz), 0); @@ -24488,10 +24492,10 @@ static int test_wc_ed448_export(void) ExpectIntEQ(XMEMCMP(key.k, priv, privSz), 0); /* Test bad args. */ ExpectIntEQ(wc_ed448_export_private_only(NULL, priv, &privSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_export_private_only(&key, NULL, &privSz), - BAD_FUNC_ARG); - ExpectIntEQ(wc_ed448_export_private_only(&key, priv, NULL), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ed448_export_private_only(&key, priv, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); PRIVATE_KEY_LOCK(); DoExpectIntEQ(wc_FreeRng(&rng), 0); @@ -24519,19 +24523,19 @@ static int test_wc_ed448_size(void) ExpectIntEQ(wc_ed448_size(&key), ED448_KEY_SIZE); /* Test bad args. */ - ExpectIntEQ(wc_ed448_size(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed448_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_sig_size(&key), ED448_SIG_SIZE); /* Test bad args. */ - ExpectIntEQ(wc_ed448_sig_size(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed448_sig_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_pub_size(&key), ED448_PUB_KEY_SIZE); /* Test bad args. */ - ExpectIntEQ(wc_ed448_pub_size(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed448_pub_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_priv_size(&key), ED448_PRV_KEY_SIZE); /* Test bad args. */ - ExpectIntEQ(wc_ed448_priv_size(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ed448_priv_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_ed448_free(&key); @@ -24566,22 +24570,22 @@ static int test_wc_ed448_exportKey(void) ExpectIntEQ(wc_ed448_export_private(&key, privOnly, &privOnlySz), 0); /* Test bad args. */ ExpectIntEQ(wc_ed448_export_private(NULL, privOnly, &privOnlySz), - BAD_FUNC_ARG); - ExpectIntEQ(wc_ed448_export_private(&key, NULL, &privOnlySz), BAD_FUNC_ARG); - ExpectIntEQ(wc_ed448_export_private(&key, privOnly, NULL), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ed448_export_private(&key, NULL, &privOnlySz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ed448_export_private(&key, privOnly, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_export_key(&key, priv, &privSz, pub, &pubSz), 0); /* Test bad args. */ ExpectIntEQ(wc_ed448_export_key(NULL, priv, &privSz, pub, &pubSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_export_key(&key, NULL, &privSz, pub, &pubSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_export_key(&key, priv, NULL, pub, &pubSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_export_key(&key, priv, &privSz, NULL, &pubSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_export_key(&key, priv, &privSz, pub, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); PRIVATE_KEY_LOCK(); /* Cross check output. */ @@ -24607,10 +24611,10 @@ static int test_wc_Ed448PublicKeyToDer(void) XMEMSET(&key, 0, sizeof(ed448_key)); /* Test bad args */ - ExpectIntEQ(wc_Ed448PublicKeyToDer(NULL, NULL, 0, 0), BAD_FUNC_ARG); + ExpectIntEQ(wc_Ed448PublicKeyToDer(NULL, NULL, 0, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ed448_init(&key), 0); - ExpectIntEQ(wc_Ed448PublicKeyToDer(&key, derBuf, 0, 0), BUFFER_E); + ExpectIntEQ(wc_Ed448PublicKeyToDer(&key, derBuf, 0, 0), WC_NO_ERR_TRACE(BUFFER_E)); wc_ed448_free(&key); /* Test good args */ @@ -24647,7 +24651,7 @@ static int test_wc_curve448_init(void) /* Test bad args for wc_curve448_init */ ExpectIntEQ(wc_curve448_init(&key), 0); /* Test bad args for wc_curve448_init */ - ExpectIntEQ(wc_curve448_init(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_curve448_init(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Test good args for wc_curve_448_free */ wc_curve448_free(&key); @@ -24678,10 +24682,10 @@ static int test_wc_curve448_make_key(void) ExpectIntEQ(wc_curve448_make_key(&rng, keysize, &key), 0); /* test bad cases */ - ExpectIntEQ(wc_curve448_make_key(NULL, 0, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_curve448_make_key(&rng, keysize, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_curve448_make_key(NULL, keysize, &key), BAD_FUNC_ARG); - ExpectIntEQ(wc_curve448_make_key(&rng, 0, &key), ECC_BAD_ARG_E); + ExpectIntEQ(wc_curve448_make_key(NULL, 0, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_curve448_make_key(&rng, keysize, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_curve448_make_key(NULL, keysize, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_curve448_make_key(&rng, 0, &key), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_curve448_free(&key); @@ -24715,18 +24719,18 @@ static int test_wc_curve448_shared_secret_ex(void) /* test bad cases */ ExpectIntEQ(wc_curve448_shared_secret_ex(NULL, NULL, NULL, 0, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_shared_secret_ex(NULL, &public_key, out, &outLen, - endian), BAD_FUNC_ARG); + endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_shared_secret_ex(&private_key, NULL, out, &outLen, - endian), BAD_FUNC_ARG); + endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_shared_secret_ex(&private_key, &public_key, NULL, - &outLen, endian), BAD_FUNC_ARG); + &outLen, endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_shared_secret_ex(&private_key, &public_key, out, - NULL, endian), BAD_FUNC_ARG); + NULL, endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); outLen = outLen - 2; ExpectIntEQ(wc_curve448_shared_secret_ex(&private_key, &public_key, out, - &outLen, endian), BAD_FUNC_ARG); + &outLen, endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_curve448_free(&private_key); @@ -24758,16 +24762,16 @@ static int test_wc_curve448_export_public_ex(void) ExpectIntEQ(wc_curve448_export_public_ex(&key, out, &outLen, endian), 0); /* test bad cases*/ ExpectIntEQ(wc_curve448_export_public_ex(NULL, NULL, NULL, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_export_public_ex(NULL, out, &outLen, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_export_public_ex(&key, NULL, &outLen, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_export_public_ex(&key, out, NULL, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); outLen = outLen - 2; ExpectIntEQ(wc_curve448_export_public_ex(&key, out, &outLen, endian), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_curve448_free(&key); @@ -24792,18 +24796,18 @@ static int test_wc_curve448_export_private_raw_ex(void) 0); /* test bad cases*/ ExpectIntEQ(wc_curve448_export_private_raw_ex(NULL, NULL, NULL, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_export_private_raw_ex(NULL, out, &outLen, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_export_private_raw_ex(&key, NULL, &outLen, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_export_private_raw_ex(&key, out, NULL, endian), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_export_private_raw_ex(&key, out, &outLen, EC448_LITTLE_ENDIAN), 0); outLen = outLen - 2; ExpectIntEQ(wc_curve448_export_private_raw_ex(&key, out, &outLen, endian), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); wc_curve448_free(&key); #endif @@ -24837,17 +24841,17 @@ static int test_wc_curve448_import_private_raw_ex(void) &key, endian), 0); /* test bad cases */ ExpectIntEQ(wc_curve448_import_private_raw_ex(NULL, 0, NULL, 0, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_import_private_raw_ex(NULL, privSz, pub, pubSz, - &key, endian), BAD_FUNC_ARG); + &key, endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_import_private_raw_ex(priv, privSz, NULL, pubSz, - &key, endian), BAD_FUNC_ARG); + &key, endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_import_private_raw_ex(priv, privSz, pub, pubSz, - NULL, endian), BAD_FUNC_ARG); + NULL, endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_curve448_import_private_raw_ex(priv, 0, pub, pubSz, - &key, endian), ECC_BAD_ARG_E); + &key, endian), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_curve448_import_private_raw_ex(priv, privSz, pub, 0, - &key, endian), ECC_BAD_ARG_E); + &key, endian), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_curve448_import_private_raw_ex(priv, privSz, pub, pubSz, &key, EC448_LITTLE_ENDIAN), 0); @@ -24957,8 +24961,8 @@ static int test_wc_ecc_make_key(void) ExpectIntEQ(ret, 0); /* Pass in bad args. */ - ExpectIntEQ(wc_ecc_make_key(NULL, KEY14, &key), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_make_key(&rng, KEY14, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_make_key(NULL, KEY14, &key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_make_key(&rng, KEY14, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_ecc_free(&key); @@ -24984,7 +24988,7 @@ static int test_wc_ecc_init(void) ExpectIntEQ(wc_ecc_init(&key), 0); /* Pass in bad args. */ - ExpectIntEQ(wc_ecc_init(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_init(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_ecc_free(&key); #endif @@ -25016,7 +25020,7 @@ static int test_wc_ecc_check_key(void) ExpectIntEQ(wc_ecc_check_key(&key), 0); /* Pass in bad args. */ - ExpectIntEQ(wc_ecc_check_key(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_check_key(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_ecc_free(&key); @@ -25152,15 +25156,15 @@ static int test_wc_ecc_signVerify_hash(void) /* Check bad args. */ ExpectIntEQ(wc_ecc_sign_hash(NULL, digestlen, sig, &siglen, &rng, &key), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_sign_hash(digest, digestlen, NULL, &siglen, &rng, &key), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_sign_hash(digest, digestlen, sig, NULL, &rng, &key), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_sign_hash(digest, digestlen, sig, &siglen, NULL, &key), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_sign_hash(digest, digestlen, sig, &siglen, &rng, NULL), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); #ifdef HAVE_ECC_VERIFY ExpectIntEQ(wc_ecc_verify_hash(sig, siglen, digest, digestlen, &verify, @@ -25182,13 +25186,13 @@ static int test_wc_ecc_signVerify_hash(void) /* Test bad args. */ ExpectIntEQ(wc_ecc_verify_hash(NULL, siglen, digest, digestlen, &verify, - &key), ECC_BAD_ARG_E); + &key), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_verify_hash(sig, siglen, NULL, digestlen, &verify, &key), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_verify_hash(sig, siglen, digest, digestlen, NULL, &key), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_verify_hash(sig, siglen, digest, digestlen, &verify, - NULL), ECC_BAD_ARG_E); + NULL), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); #endif /* HAVE_ECC_VERIFY */ DoExpectIntEQ(wc_FreeRng(&rng), 0); @@ -25278,17 +25282,17 @@ static int test_wc_ecc_shared_secret(void) /* Test bad args. */ ExpectIntEQ(wc_ecc_shared_secret(NULL, &pubKey, out, &outlen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_shared_secret(&key, NULL, out, &outlen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_shared_secret(&key, &pubKey, NULL, &outlen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_shared_secret(&key, &pubKey, out, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Invalid length */ outlen = 1; ExpectIntEQ(wc_ecc_shared_secret(&key, &pubKey, out, &outlen), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_ecc_free(&pubKey); @@ -25334,11 +25338,11 @@ static int test_wc_ecc_export_x963(void) ExpectIntEQ(wc_ecc_export_x963(&key, out, &outlen), 0); /* Test bad args. */ - ExpectIntEQ(wc_ecc_export_x963(NULL, out, &outlen), ECC_BAD_ARG_E); - ExpectIntEQ(wc_ecc_export_x963(&key, NULL, &outlen), LENGTH_ONLY_E); - ExpectIntEQ(wc_ecc_export_x963(&key, out, NULL), ECC_BAD_ARG_E); + ExpectIntEQ(wc_ecc_export_x963(NULL, out, &outlen), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); + ExpectIntEQ(wc_ecc_export_x963(&key, NULL, &outlen), WC_NO_ERR_TRACE(LENGTH_ONLY_E)); + ExpectIntEQ(wc_ecc_export_x963(&key, out, NULL), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); key.idx = -4; - ExpectIntEQ(wc_ecc_export_x963(&key, out, &outlen), ECC_BAD_ARG_E); + ExpectIntEQ(wc_ecc_export_x963(&key, out, &outlen), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_ecc_free(&key); @@ -25391,28 +25395,28 @@ static int test_wc_ecc_export_x963_ex(void) /* Test bad args. */ #ifdef HAVE_COMP_KEY - ExpectIntEQ(wc_ecc_export_x963_ex(NULL, out, &outlen, COMP), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_export_x963_ex(&key, NULL, &outlen, COMP), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_export_x963_ex(&key, out, NULL, COMP), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_export_x963_ex(NULL, out, &outlen, COMP), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_export_x963_ex(&key, NULL, &outlen, COMP), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_export_x963_ex(&key, out, NULL, COMP), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #if defined(HAVE_FIPS) && (!defined(FIPS_VERSION_LT) || FIPS_VERSION_LT(5,3)) - ExpectIntEQ(wc_ecc_export_x963_ex(&key, out, &badOutLen, COMP), BUFFER_E); + ExpectIntEQ(wc_ecc_export_x963_ex(&key, out, &badOutLen, COMP), WC_NO_ERR_TRACE(BUFFER_E)); #else ExpectIntEQ(wc_ecc_export_x963_ex(&key, out, &badOutLen, COMP), - LENGTH_ONLY_E); + WC_NO_ERR_TRACE(LENGTH_ONLY_E)); #endif key.idx = -4; - ExpectIntEQ(wc_ecc_export_x963_ex(&key, out, &outlen, COMP), ECC_BAD_ARG_E); + ExpectIntEQ(wc_ecc_export_x963_ex(&key, out, &outlen, COMP), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); #else ExpectIntEQ(wc_ecc_export_x963_ex(NULL, out, &outlen, NOCOMP), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_export_x963_ex(&key, NULL, &outlen, NOCOMP), - LENGTH_ONLY_E); - ExpectIntEQ(wc_ecc_export_x963_ex(&key, out, &outlen, 1), NOT_COMPILED_IN); + WC_NO_ERR_TRACE(LENGTH_ONLY_E)); + ExpectIntEQ(wc_ecc_export_x963_ex(&key, out, &outlen, 1), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); ExpectIntEQ(wc_ecc_export_x963_ex(&key, out, NULL, NOCOMP), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); key.idx = -4; ExpectIntEQ(wc_ecc_export_x963_ex(&key, out, &outlen, NOCOMP), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); #endif PRIVATE_KEY_LOCK(); @@ -25468,9 +25472,9 @@ static int test_wc_ecc_import_x963(void) ExpectIntEQ(wc_ecc_import_x963(x963, x963Len, &pubKey), 0); /* Test bad args. */ - ExpectIntEQ(wc_ecc_import_x963(NULL, x963Len, &pubKey), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_import_x963(x963, x963Len, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_import_x963(x963, x963Len + 1, &pubKey), ECC_BAD_ARG_E); + ExpectIntEQ(wc_ecc_import_x963(NULL, x963Len, &pubKey), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_import_x963(x963, x963Len, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_import_x963(x963, x963Len + 1, &pubKey), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); DoExpectIntEQ(wc_FreeRng(&rng), 0); wc_ecc_free(&key); @@ -25526,9 +25530,9 @@ static int test_wc_ecc_import_private_key(void) x963KeySz, &keyImp), 0); /* Pass in bad args. */ ExpectIntEQ(wc_ecc_import_private_key(privKey, privKeySz, x963Key, - x963KeySz, NULL), BAD_FUNC_ARG); + x963KeySz, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_import_private_key(NULL, privKeySz, x963Key, x963KeySz, - &keyImp), BAD_FUNC_ARG); + &keyImp), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); PRIVATE_KEY_LOCK(); DoExpectIntEQ(wc_FreeRng(&rng), 0); @@ -25572,9 +25576,9 @@ static int test_wc_ecc_export_private_only(void) ExpectIntEQ(wc_ecc_export_private_only(&key, out, &outlen), 0); /* Pass in bad args. */ - ExpectIntEQ(wc_ecc_export_private_only(NULL, out, &outlen), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_export_private_only(&key, NULL, &outlen), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_export_private_only(&key, out, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_export_private_only(NULL, out, &outlen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_export_private_only(&key, NULL, &outlen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_export_private_only(&key, out, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); PRIVATE_KEY_LOCK(); DoExpectIntEQ(wc_FreeRng(&rng), 0); @@ -25616,22 +25620,22 @@ static int test_wc_ecc_rs_to_sig(void) ExpectIntEQ(wc_ecc_rs_to_sig(R, S, sig, &siglen), 0); ExpectIntEQ(wc_ecc_sig_to_rs(sig, siglen, r, &rlen, s, &slen), 0); /* Test bad args. */ - ExpectIntEQ(wc_ecc_rs_to_sig(NULL, S, sig, &siglen), ECC_BAD_ARG_E); - ExpectIntEQ(wc_ecc_rs_to_sig(R, NULL, sig, &siglen), ECC_BAD_ARG_E); - ExpectIntEQ(wc_ecc_rs_to_sig(R, S, sig, NULL), ECC_BAD_ARG_E); - ExpectIntEQ(wc_ecc_rs_to_sig(R, S, NULL, &siglen), ECC_BAD_ARG_E); - ExpectIntEQ(wc_ecc_rs_to_sig(R, zeroStr, sig, &siglen), MP_ZERO_E); - ExpectIntEQ(wc_ecc_rs_to_sig(zeroStr, S, sig, &siglen), MP_ZERO_E); + ExpectIntEQ(wc_ecc_rs_to_sig(NULL, S, sig, &siglen), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); + ExpectIntEQ(wc_ecc_rs_to_sig(R, NULL, sig, &siglen), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); + ExpectIntEQ(wc_ecc_rs_to_sig(R, S, sig, NULL), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); + ExpectIntEQ(wc_ecc_rs_to_sig(R, S, NULL, &siglen), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); + ExpectIntEQ(wc_ecc_rs_to_sig(R, zeroStr, sig, &siglen), WC_NO_ERR_TRACE(MP_ZERO_E)); + ExpectIntEQ(wc_ecc_rs_to_sig(zeroStr, S, sig, &siglen), WC_NO_ERR_TRACE(MP_ZERO_E)); ExpectIntEQ(wc_ecc_sig_to_rs(NULL, siglen, r, &rlen, s, &slen), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_sig_to_rs(sig, siglen, NULL, &rlen, s, &slen), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_sig_to_rs(sig, siglen, r, NULL, s, &slen), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_sig_to_rs(sig, siglen, r, &rlen, NULL, &slen), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_sig_to_rs(sig, siglen, r, &rlen, s, NULL), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); #endif return EXPECT_RESULT(); } /* END test_wc_ecc_rs_to_sig */ @@ -25661,17 +25665,17 @@ static int test_wc_ecc_import_raw(void) ExpectIntEQ(wc_ecc_import_raw(&key, qx, qy, d, curveName), 0); /* Test bad args. */ - ExpectIntEQ(wc_ecc_import_raw(NULL, qx, qy, d, curveName), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_import_raw(&key, NULL, qy, d, curveName), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_import_raw(&key, qx, NULL, d, curveName), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_import_raw(&key, qx, qy, d, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_import_raw(NULL, qx, qy, d, curveName), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_import_raw(&key, NULL, qy, d, curveName), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_import_raw(&key, qx, NULL, d, curveName), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_import_raw(&key, qx, qy, d, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifdef WOLFSSL_VALIDATE_ECC_IMPORT #if !defined(USE_FAST_MATH) && !defined(WOLFSSL_SP_MATH) wc_ecc_free(&key); #endif ExpectIntLT(ret = wc_ecc_import_raw(&key, kNullStr, kNullStr, kNullStr, curveName), 0); - ExpectTrue((ret == ECC_INF_E) || (ret == BAD_FUNC_ARG)); + ExpectTrue((ret == WC_NO_ERR_TRACE(ECC_INF_E)) || (ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG))); #endif #if !defined(HAVE_SELFTEST) && !defined(HAVE_FIPS) #if !defined(USE_FAST_MATH) && !defined(WOLFSSL_SP_MATH) @@ -25679,7 +25683,7 @@ static int test_wc_ecc_import_raw(void) #endif #ifdef WOLFSSL_VALIDATE_ECC_IMPORT ExpectIntLT(ret = wc_ecc_import_raw(&key, "0", qy, d, curveName), 0); - ExpectTrue((ret == BAD_FUNC_ARG) || (ret == MP_VAL)); + ExpectTrue((ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) || (ret == WC_NO_ERR_TRACE(MP_VAL))); #else ExpectIntEQ(wc_ecc_import_raw(&key, "0", qy, d, curveName), 0); #endif @@ -25688,14 +25692,14 @@ static int test_wc_ecc_import_raw(void) #endif #ifdef WOLFSSL_VALIDATE_ECC_IMPORT ExpectIntLT(ret = wc_ecc_import_raw(&key, qx, "0", d, curveName), 0); - ExpectTrue((ret == BAD_FUNC_ARG) || (ret == MP_VAL)); + ExpectTrue((ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) || (ret == WC_NO_ERR_TRACE(MP_VAL))); #else ExpectIntEQ(wc_ecc_import_raw(&key, qx, "0", d, curveName), 0); #endif #if !defined(USE_FAST_MATH) && !defined(WOLFSSL_SP_MATH) wc_ecc_free(&key); #endif - ExpectIntEQ(wc_ecc_import_raw(&key, "0", "0", d, curveName), ECC_INF_E); + ExpectIntEQ(wc_ecc_import_raw(&key, "0", "0", d, curveName), WC_NO_ERR_TRACE(ECC_INF_E)); #endif wc_ecc_free(&key); @@ -25742,17 +25746,17 @@ static int test_wc_ecc_import_unsigned(void) curveId), 0); /* Test bad args. */ ExpectIntEQ(wc_ecc_import_unsigned(NULL, (byte*)qx, (byte*)qy, (byte*)d, - curveId), BAD_FUNC_ARG); + curveId), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_import_unsigned(&key, NULL, (byte*)qy, (byte*)d, - curveId), BAD_FUNC_ARG); + curveId), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_import_unsigned(&key, (byte*)qx, NULL, (byte*)d, - curveId), BAD_FUNC_ARG); + curveId), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_import_unsigned(&key, (byte*)qx, (byte*)qy, (byte*)d, - ECC_CURVE_INVALID), BAD_FUNC_ARG); + ECC_CURVE_INVALID), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifdef WOLFSSL_VALIDATE_ECC_IMPORT ExpectIntLT(ret = wc_ecc_import_unsigned(&key, (byte*)nullBytes, (byte*)nullBytes, (byte*)nullBytes, curveId), 0); - ExpectTrue((ret == ECC_INF_E) || (ret == BAD_FUNC_ARG)); + ExpectTrue((ret == WC_NO_ERR_TRACE(ECC_INF_E)) || (ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG))); #endif wc_ecc_free(&key); @@ -25842,8 +25846,8 @@ static int test_wc_ecc_ctx_reset(void) ExpectIntEQ(wc_ecc_ctx_reset(ctx, &rng), 0); /* Pass in bad args. */ - ExpectIntEQ(wc_ecc_ctx_reset(NULL, &rng), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_ctx_reset(ctx, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_ctx_reset(NULL, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_ctx_reset(ctx, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_ecc_ctx_free(ctx); DoExpectIntEQ(wc_FreeRng(&rng), 0); @@ -25878,8 +25882,8 @@ static int test_wc_ecc_ctx_set_peer_salt(void) ExpectIntEQ(wc_ecc_ctx_set_peer_salt(cliCtx, servSalt), 0); /* Test bad args. */ - ExpectIntEQ(wc_ecc_ctx_set_peer_salt(NULL, servSalt), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_ctx_set_peer_salt(cliCtx, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_ctx_set_peer_salt(NULL, servSalt), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_ctx_set_peer_salt(cliCtx, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_ecc_ctx_free(cliCtx); wc_ecc_ctx_free(servCtx); @@ -25910,10 +25914,10 @@ static int test_wc_ecc_ctx_set_info(void) ExpectIntEQ(wc_ecc_ctx_set_info(ctx, (byte*)optInfo, optInfoSz), 0); /* Test bad args. */ ExpectIntEQ(wc_ecc_ctx_set_info(NULL, (byte*)optInfo, optInfoSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_ctx_set_info(ctx, (byte*)badOptInfo, optInfoSz), - BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_ctx_set_info(ctx, (byte*)optInfo, -1), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_ctx_set_info(ctx, (byte*)optInfo, -1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_ecc_ctx_free(ctx); DoExpectIntEQ(wc_FreeRng(&rng), 0); @@ -25986,15 +25990,15 @@ static int test_wc_ecc_encryptDecrypt(void) &outSz, NULL), 0); /* Test bad args. */ ExpectIntEQ(wc_ecc_encrypt(NULL, &srvKey, (byte*)msg, msgSz, out, &outSz, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_encrypt(&cliKey, NULL, (byte*)msg, msgSz, out, &outSz, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_encrypt(&cliKey, &srvKey, NULL, msgSz, out, &outSz, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_encrypt(&cliKey, &srvKey, (byte*)msg, msgSz, NULL, - &outSz, NULL), BAD_FUNC_ARG); + &outSz, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_encrypt(&cliKey, &srvKey, (byte*)msg, msgSz, out, NULL, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifdef WOLFSSL_ECIES_OLD tmpKey.dp = cliKey.dp; @@ -26004,19 +26008,19 @@ static int test_wc_ecc_encryptDecrypt(void) ExpectIntEQ(wc_ecc_decrypt(&srvKey, &tmpKey, out, outSz, plain, &plainSz, NULL), 0); ExpectIntEQ(wc_ecc_decrypt(NULL, &tmpKey, out, outSz, plain, &plainSz, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifdef WOLFSSL_ECIES_OLD /* NULL parameter allowed in new implementations - public key comes from * the message. */ ExpectIntEQ(wc_ecc_decrypt(&srvKey, NULL, out, outSz, plain, &plainSz, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif ExpectIntEQ(wc_ecc_decrypt(&srvKey, &tmpKey, NULL, outSz, plain, &plainSz, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_decrypt(&srvKey, &tmpKey, out, outSz, NULL, &plainSz, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_decrypt(&srvKey, &tmpKey, out, outSz, plain, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(XMEMCMP(msg, plain, msgSz), 0); @@ -26083,46 +26087,46 @@ static int test_wc_ecc_pointFns(void) /* Export */ ExpectIntEQ(wc_ecc_export_point_der((idx = key.idx), &key.pubkey, NULL, - &derlenChk), LENGTH_ONLY_E); + &derlenChk), WC_NO_ERR_TRACE(LENGTH_ONLY_E)); /* Check length value. */ ExpectIntEQ(derSz, derlenChk); ExpectIntEQ(wc_ecc_export_point_der((idx = key.idx), &key.pubkey, der, &derSz), 0); /* Test bad args. */ ExpectIntEQ(wc_ecc_export_point_der(-2, &key.pubkey, der, &derSz), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_export_point_der((idx = key.idx), NULL, der, &derSz), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_export_point_der((idx = key.idx), &key.pubkey, der, - NULL), ECC_BAD_ARG_E); + NULL), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); /* Import */ ExpectIntEQ(wc_ecc_import_point_der(der, derSz, idx, point), 0); ExpectIntEQ(wc_ecc_cmp_point(&key.pubkey, point), 0); /* Test bad args. */ ExpectIntEQ( wc_ecc_import_point_der(NULL, derSz, idx, point), - ECC_BAD_ARG_E); - ExpectIntEQ(wc_ecc_import_point_der(der, derSz, idx, NULL), ECC_BAD_ARG_E); - ExpectIntEQ(wc_ecc_import_point_der(der, derSz, -1, point), ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); + ExpectIntEQ(wc_ecc_import_point_der(der, derSz, idx, NULL), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); + ExpectIntEQ(wc_ecc_import_point_der(der, derSz, -1, point), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_import_point_der(der, derSz + 1, idx, point), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); /* Copy */ ExpectIntEQ(wc_ecc_copy_point(point, cpypt), 0); /* Test bad args. */ - ExpectIntEQ(wc_ecc_copy_point(NULL, cpypt), ECC_BAD_ARG_E); - ExpectIntEQ(wc_ecc_copy_point(point, NULL), ECC_BAD_ARG_E); + ExpectIntEQ(wc_ecc_copy_point(NULL, cpypt), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); + ExpectIntEQ(wc_ecc_copy_point(point, NULL), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); /* Compare point */ ExpectIntEQ(wc_ecc_cmp_point(point, cpypt), 0); /* Test bad args. */ - ExpectIntEQ(wc_ecc_cmp_point(NULL, cpypt), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_cmp_point(point, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_cmp_point(NULL, cpypt), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_cmp_point(point, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* At infinity if return == 1, otherwise return == 0. */ ExpectIntEQ(wc_ecc_point_is_at_infinity(point), 0); /* Test bad args. */ - ExpectIntEQ(wc_ecc_point_is_at_infinity(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_point_is_at_infinity(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || \ (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION>2))) @@ -26130,8 +26134,8 @@ static int test_wc_ecc_pointFns(void) /* On curve if ret == 0 */ ExpectIntEQ(wc_ecc_point_is_on_curve(point, idx), 0); /* Test bad args. */ - ExpectIntEQ(wc_ecc_point_is_on_curve(NULL, idx), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_point_is_on_curve(point, 1000), ECC_BAD_ARG_E); + ExpectIntEQ(wc_ecc_point_is_on_curve(NULL, idx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_point_is_on_curve(point, 1000), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); #endif /* USE_ECC_B_PARAM */ #endif /* !HAVE_SELFTEST && (!HAVE_FIPS || HAVE_FIPS_VERSION > 2) */ @@ -26203,16 +26207,16 @@ static int test_wc_ecc_shared_secret_ssh(void) &secretLen), 0); /* Pass in bad args. */ ExpectIntEQ(wc_ecc_shared_secret_ssh(NULL, &key2.pubkey, secret, - &secretLen), BAD_FUNC_ARG); + &secretLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_shared_secret_ssh(&key, NULL, secret, &secretLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_shared_secret_ssh(&key, &key2.pubkey, NULL, &secretLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_shared_secret_ssh(&key, &key2.pubkey, secret, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); key.type = ECC_PUBLICKEY; ExpectIntEQ(wc_ecc_shared_secret_ssh(&key, &key2.pubkey, secret, - &secretLen), ECC_BAD_ARG_E); + &secretLen), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); PRIVATE_KEY_LOCK(); DoExpectIntEQ(wc_FreeRng(&rng), 0); @@ -26285,32 +26289,32 @@ static int test_wc_ecc_verify_hash_ex(void) /* Test bad args. */ ExpectIntEQ(wc_ecc_sign_hash_ex(NULL, hashlen, &rng, &key, &r, &s), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_sign_hash_ex(hash, hashlen, NULL, &key, &r, &s), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_sign_hash_ex(hash, hashlen, &rng, NULL, &r, &s), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_sign_hash_ex(hash, hashlen, &rng, &key, NULL, &s), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_sign_hash_ex(hash, hashlen, &rng, &key, &r, NULL), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); /* Test bad args. */ ExpectIntEQ(wc_ecc_verify_hash_ex(NULL, &s, shortHash, shortHashLen, - &verify_ok, &key), ECC_BAD_ARG_E); + &verify_ok, &key), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_verify_hash_ex(&r, NULL, shortHash, shortHashLen, - &verify_ok, &key), ECC_BAD_ARG_E); + &verify_ok, &key), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_verify_hash_ex(&z, &s, shortHash, shortHashLen, - &verify_ok, &key), MP_ZERO_E); + &verify_ok, &key), WC_NO_ERR_TRACE(MP_ZERO_E)); ExpectIntEQ(wc_ecc_verify_hash_ex(&r, &z, shortHash, shortHashLen, - &verify_ok, &key), MP_ZERO_E); + &verify_ok, &key), WC_NO_ERR_TRACE(MP_ZERO_E)); ExpectIntEQ(wc_ecc_verify_hash_ex(&z, &z, shortHash, shortHashLen, - &verify_ok, &key), MP_ZERO_E); + &verify_ok, &key), WC_NO_ERR_TRACE(MP_ZERO_E)); ExpectIntEQ(wc_ecc_verify_hash_ex(&r, &s, NULL, shortHashLen, &verify_ok, - &key), ECC_BAD_ARG_E); + &key), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_verify_hash_ex(&r, &s, shortHash, shortHashLen, NULL, - &key), ECC_BAD_ARG_E); + &key), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_verify_hash_ex(&r, &s, shortHash, shortHashLen, - &verify_ok, NULL), ECC_BAD_ARG_E); + &verify_ok, NULL), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); wc_ecc_free(&key); mp_free(&r); @@ -26364,15 +26368,15 @@ static int test_wc_ecc_mulmod(void) /* Test bad args. */ ExpectIntEQ(ret = wc_ecc_mulmod(NULL, &key2.pubkey, &key3.pubkey, wc_ecc_key_get_priv(&key2), wc_ecc_key_get_priv(&key3), 1), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_mulmod(wc_ecc_key_get_priv(&key1), NULL, &key3.pubkey, wc_ecc_key_get_priv(&key2), wc_ecc_key_get_priv(&key3), 1), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_mulmod(wc_ecc_key_get_priv(&key1), &key2.pubkey, NULL, wc_ecc_key_get_priv(&key2), wc_ecc_key_get_priv(&key3), 1), - ECC_BAD_ARG_E); + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); ExpectIntEQ(wc_ecc_mulmod(wc_ecc_key_get_priv(&key1), &key2.pubkey, - &key3.pubkey, wc_ecc_key_get_priv(&key2), NULL, 1), ECC_BAD_ARG_E); + &key3.pubkey, wc_ecc_key_get_priv(&key2), NULL, 1), WC_NO_ERR_TRACE(ECC_BAD_ARG_E)); wc_ecc_free(&key1); wc_ecc_free(&key2); @@ -26436,7 +26440,7 @@ static int test_wc_ecc_get_curve_id_from_oid(void) word32 len = sizeof(oid); /* Bad Cases */ - ExpectIntEQ(wc_ecc_get_curve_id_from_oid(NULL, len), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_get_curve_id_from_oid(NULL, len), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_get_curve_id_from_oid(oid, 0), ECC_CURVE_INVALID); /* Good Case */ ExpectIntEQ(wc_ecc_get_curve_id_from_oid(oid, len), ECC_SECP256R1); @@ -26466,7 +26470,7 @@ static int test_wc_ecc_sig_size_calc(void) ret = wc_AsyncWait(ret, &key.asyncDev, WC_ASYNC_FLAG_NONE); #endif #if FIPS_VERSION3_GE(6,0,0) - ExpectIntEQ(ret, BAD_FUNC_ARG); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #else ExpectIntEQ(ret, 0); #endif @@ -26502,11 +26506,11 @@ static int test_wc_ecc_sm2_make_key(void) /* Test invalid parameters. */ ExpectIntEQ(wc_ecc_sm2_make_key(NULL, NULL, WC_ECC_FLAG_NONE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_make_key(rng, NULL, WC_ECC_FLAG_NONE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_make_key(NULL, key, WC_ECC_FLAG_NONE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Test valid parameters. */ ExpectIntEQ(wc_ecc_sm2_make_key(rng, key, WC_ECC_FLAG_NONE), 0); @@ -26555,19 +26559,19 @@ static int test_wc_ecc_sm2_shared_secret(void) #endif /* Test invalid parameters. */ - ExpectIntEQ(wc_ecc_sm2_shared_secret(NULL, NULL, NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_sm2_shared_secret(keyA, NULL, NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_sm2_shared_secret(NULL, keyB, NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_sm2_shared_secret(NULL, NULL, outA, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_sm2_shared_secret(NULL, NULL, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_sm2_shared_secret(keyA, NULL, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_sm2_shared_secret(NULL, keyB, NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_sm2_shared_secret(NULL, NULL, outA, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_shared_secret(NULL, NULL, NULL, &outALen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_shared_secret(NULL, keyB, outA, &outALen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_shared_secret(keyA, NULL, outA, &outALen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_shared_secret(keyA, keyB, NULL, &outALen), - BAD_FUNC_ARG); - ExpectIntEQ(wc_ecc_sm2_shared_secret(keyA, keyB, outA, NULL), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ecc_sm2_shared_secret(keyA, keyB, outA, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Test valid parameters. */ ExpectIntEQ(wc_ecc_sm2_shared_secret(keyA, keyB, outA, &outALen), 0); @@ -26646,38 +26650,38 @@ static int test_wc_ecc_sm2_create_digest(void) /* Test with no curve set. */ ExpectIntEQ(wc_ecc_sm2_create_digest(id, sizeof(id), msg, sizeof(msg), - hashType, hash, sizeof(hash), key), BAD_FUNC_ARG); + hashType, hash, sizeof(hash), key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_import_x963_ex(pub, sizeof(pub), key, ECC_SM2P256V1), 0); /* Test invalid parameters. */ ExpectIntEQ(wc_ecc_sm2_create_digest(NULL, sizeof(id), NULL, sizeof(msg), - hashType, NULL, sizeof(hash), NULL), BAD_FUNC_ARG); + hashType, NULL, sizeof(hash), NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_create_digest(id, sizeof(id), NULL, sizeof(msg), - hashType, NULL, sizeof(hash), NULL), BAD_FUNC_ARG); + hashType, NULL, sizeof(hash), NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_create_digest(NULL, sizeof(id), msg, sizeof(msg), - hashType, NULL, sizeof(hash), NULL), BAD_FUNC_ARG); + hashType, NULL, sizeof(hash), NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_create_digest(NULL, sizeof(id), NULL, sizeof(msg), - hashType, hash, sizeof(hash), NULL), BAD_FUNC_ARG); + hashType, hash, sizeof(hash), NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_create_digest(NULL, sizeof(id), NULL, sizeof(msg), - hashType, NULL, sizeof(hash), key), BAD_FUNC_ARG); + hashType, NULL, sizeof(hash), key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_create_digest(NULL, sizeof(id), msg, sizeof(msg), - hashType, hash, sizeof(hash), key), BAD_FUNC_ARG); + hashType, hash, sizeof(hash), key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_create_digest(id, sizeof(id), NULL, sizeof(msg), - hashType, hash, sizeof(hash), key), BAD_FUNC_ARG); + hashType, hash, sizeof(hash), key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_create_digest(id, sizeof(id), msg, sizeof(msg), - hashType, NULL, sizeof(hash), key), BAD_FUNC_ARG); + hashType, NULL, sizeof(hash), key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_create_digest(id, sizeof(id), msg, sizeof(msg), - hashType, hash, sizeof(hash), NULL), BAD_FUNC_ARG); + hashType, hash, sizeof(hash), NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Bad hash type. */ /* // NOLINTBEGIN(clang-analyzer-optin.core.EnumCastOutOfRange) */ ExpectIntEQ(wc_ecc_sm2_create_digest(id, sizeof(id), msg, sizeof(msg), - -1, hash, 0, key), BAD_FUNC_ARG); + -1, hash, 0, key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* // NOLINTEND(clang-analyzer-optin.core.EnumCastOutOfRange) */ /* Bad hash size. */ ExpectIntEQ(wc_ecc_sm2_create_digest(id, sizeof(id), msg, sizeof(msg), - hashType, hash, 0, key), BUFFER_E); + hashType, hash, 0, key), WC_NO_ERR_TRACE(BUFFER_E)); /* Test valid parameters. */ ExpectIntEQ(wc_ecc_sm2_create_digest(id, sizeof(id), msg, sizeof(msg), @@ -26752,38 +26756,38 @@ static int test_wc_ecc_sm2_verify_hash_ex(void) /* Test with no curve set. */ ExpectIntEQ(wc_ecc_sm2_verify_hash_ex(r, s, hash, sizeof(hash), - &verified, key), BAD_FUNC_ARG); + &verified, key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_import_x963_ex(pub, sizeof(pub), key, ECC_SM2P256V1), 0); /* Test invalid parameters. */ ExpectIntEQ(wc_ecc_sm2_verify_hash_ex(NULL, NULL, NULL, sizeof(hash), - NULL, NULL), BAD_FUNC_ARG); + NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash_ex(r, NULL, NULL, sizeof(hash), - NULL, NULL), BAD_FUNC_ARG); + NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash_ex(NULL, s, NULL, sizeof(hash), - NULL, NULL), BAD_FUNC_ARG); + NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash_ex(NULL, NULL, hash, sizeof(hash), - NULL, NULL), BAD_FUNC_ARG); + NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash_ex(NULL, NULL, NULL, sizeof(hash), - &verified, NULL), BAD_FUNC_ARG); + &verified, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash_ex(NULL, NULL, NULL, sizeof(hash), - NULL, key), BAD_FUNC_ARG); + NULL, key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash_ex(NULL, s, hash, sizeof(hash), - &verified, key), BAD_FUNC_ARG); + &verified, key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash_ex(r, NULL, hash, sizeof(hash), - &verified, key), BAD_FUNC_ARG); + &verified, key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash_ex(r, s, NULL, sizeof(hash), - &verified, key), BAD_FUNC_ARG); + &verified, key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash_ex(r, s, hash, sizeof(hash), - NULL, key), BAD_FUNC_ARG); + NULL, key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash_ex(r, s, hash, sizeof(hash), - &verified, NULL), BAD_FUNC_ARG); + &verified, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Make key not on the SM2 curve. */ ExpectIntEQ(wc_ecc_set_curve(key, 32, ECC_SECP256R1), 0); ExpectIntEQ(wc_ecc_sm2_verify_hash_ex(r, s, hash, sizeof(hash), - &verified, key), BAD_FUNC_ARG); + &verified, key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_set_curve(key, 32, ECC_SM2P256V1), 0); /* Test valid parameters. */ @@ -26863,34 +26867,34 @@ static int test_wc_ecc_sm2_verify_hash(void) /* Test with no curve set. */ ExpectIntEQ(wc_ecc_sm2_verify_hash(sig, sizeof(sig), hash, sizeof(hash), - &verified, key), BAD_FUNC_ARG); + &verified, key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_import_x963_ex(pub, sizeof(pub), key, ECC_SM2P256V1), 0); /* Test invalid parameters. */ ExpectIntEQ(wc_ecc_sm2_verify_hash(NULL, sizeof(sig), NULL, sizeof(hash), - NULL, NULL), BAD_FUNC_ARG); + NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash(sig, sizeof(sig), NULL, sizeof(hash), - NULL, NULL), BAD_FUNC_ARG); + NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash(NULL, sizeof(sig), hash, sizeof(hash), - NULL, NULL), BAD_FUNC_ARG); + NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash(NULL, sizeof(sig), NULL, sizeof(hash), - &verified, NULL), BAD_FUNC_ARG); + &verified, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash(NULL, sizeof(sig), NULL, sizeof(hash), - NULL, key), BAD_FUNC_ARG); + NULL, key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash(NULL, sizeof(sig), hash, sizeof(hash), - &verified, key), BAD_FUNC_ARG); + &verified, key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash(sig, sizeof(sig), NULL, sizeof(hash), - &verified, key), BAD_FUNC_ARG); + &verified, key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash(sig, sizeof(sig), hash, sizeof(hash), - NULL, key), BAD_FUNC_ARG); + NULL, key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_verify_hash(sig, sizeof(sig), hash, sizeof(hash), - &verified, NULL), BAD_FUNC_ARG); + &verified, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Make key not on the SM2 curve. */ ExpectIntEQ(wc_ecc_set_curve(key, 32, ECC_SECP256R1), 0); ExpectIntEQ(wc_ecc_sm2_verify_hash(sig, sizeof(sig), hash, sizeof(hash), - &verified, key), BAD_FUNC_ARG); + &verified, key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_set_curve(key, 32, ECC_SM2P256V1), 0); /* Test valid parameters. */ @@ -26944,38 +26948,38 @@ static int test_wc_ecc_sm2_sign_hash_ex(void) /* Test with no curve set. */ ExpectIntEQ(wc_ecc_sm2_sign_hash_ex(hash, sizeof(hash), rng, key, r, s), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_make_key(rng, key, WC_ECC_FLAG_NONE), 0); /* Test invalid parameters. */ ExpectIntEQ(wc_ecc_sm2_sign_hash_ex(NULL, sizeof(hash), NULL, NULL, NULL, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash_ex(hash, sizeof(hash), NULL, NULL, NULL, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash_ex(NULL, sizeof(hash), rng, NULL, NULL, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash_ex(NULL, sizeof(hash), NULL, key, NULL, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash_ex(NULL, sizeof(hash), NULL, NULL, r, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash_ex(NULL, sizeof(hash), NULL, NULL, NULL, - s), BAD_FUNC_ARG); + s), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash_ex(NULL, sizeof(hash), rng, key, r, s), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash_ex(hash, sizeof(hash), NULL, key, r, s), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash_ex(hash, sizeof(hash), rng, NULL, r, s), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash_ex(hash, sizeof(hash), rng, key, NULL, s), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash_ex(hash, sizeof(hash), rng, key, r, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Make key not on the SM2 curve. */ ExpectIntEQ(wc_ecc_set_curve(key, 32, ECC_SECP256R1), 0); ExpectIntEQ(wc_ecc_sm2_sign_hash_ex(hash, sizeof(hash), rng, key, r, s), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_set_curve(key, 32, ECC_SM2P256V1), 0); #ifdef WOLFSSL_SP_MATH_ALL @@ -27038,38 +27042,38 @@ static int test_wc_ecc_sm2_sign_hash(void) /* Test with no curve set. */ ExpectIntEQ(wc_ecc_sm2_sign_hash(hash, sizeof(hash), sig, &sigSz, rng, key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_make_key(rng, key, WC_ECC_FLAG_NONE), 0); /* Test invalid parameters. */ ExpectIntEQ(wc_ecc_sm2_sign_hash(NULL, sizeof(hash), NULL, NULL, NULL, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash(hash, sizeof(hash), NULL, NULL, NULL, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash(NULL, sizeof(hash), sig, NULL, NULL, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash(NULL, sizeof(hash), NULL, &sigSz, NULL, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash(NULL, sizeof(hash), NULL, NULL, rng, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash(NULL, sizeof(hash), NULL, NULL, NULL, - key), BAD_FUNC_ARG); + key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash(NULL, sizeof(hash), sig, &sigSz, rng, - key), BAD_FUNC_ARG); + key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash(hash, sizeof(hash), NULL, &sigSz, rng, - key), BAD_FUNC_ARG); + key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash(hash, sizeof(hash), sig, NULL, rng, - key), BAD_FUNC_ARG); + key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash(hash, sizeof(hash), sig, &sigSz, NULL, - key), BAD_FUNC_ARG); + key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_sm2_sign_hash(hash, sizeof(hash), sig, &sigSz, rng, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Make key not on the SM2 curve. */ ExpectIntEQ(wc_ecc_set_curve(key, 32, ECC_SECP256R1), 0); ExpectIntEQ(wc_ecc_sm2_sign_hash(hash, sizeof(hash), sig, &sigSz, rng, key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_ecc_set_curve(key, 32, ECC_SM2P256V1), 0); /* Test valid parameters. */ @@ -27114,12 +27118,12 @@ static int test_ToTraditional(void) /* Good case */ ExpectIntGT(ToTraditional(input, sz), 0); /* Bad cases */ - ExpectIntEQ(ToTraditional(NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(ToTraditional(NULL, sz), BAD_FUNC_ARG); + ExpectIntEQ(ToTraditional(NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(ToTraditional(NULL, sz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifdef WOLFSSL_ASN_TEMPLATE - ExpectIntEQ(ToTraditional(input, 0), BUFFER_E); + ExpectIntEQ(ToTraditional(input, 0), WC_NO_ERR_TRACE(BUFFER_E)); #else - ExpectIntEQ(ToTraditional(input, 0), ASN_PARSE_E); + ExpectIntEQ(ToTraditional(input, 0), WC_NO_ERR_TRACE(ASN_PARSE_E)); #endif #endif return EXPECT_RESULT(); @@ -27153,10 +27157,10 @@ static int test_wc_EccPrivateKeyToDer(void) inLen = (word32)sizeof(output); /* Bad Cases */ - ExpectIntEQ(wc_EccPrivateKeyToDer(NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_EccPrivateKeyToDer(NULL, output, inLen), BAD_FUNC_ARG); - ExpectIntEQ(wc_EccPrivateKeyToDer(&eccKey, NULL, inLen), LENGTH_ONLY_E); - ExpectIntEQ(wc_EccPrivateKeyToDer(&eccKey, output, 0), BAD_FUNC_ARG); + ExpectIntEQ(wc_EccPrivateKeyToDer(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_EccPrivateKeyToDer(NULL, output, inLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_EccPrivateKeyToDer(&eccKey, NULL, inLen), WC_NO_ERR_TRACE(LENGTH_ONLY_E)); + ExpectIntEQ(wc_EccPrivateKeyToDer(&eccKey, output, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Good Case */ ExpectIntGT(outLen = (word32)wc_EccPrivateKeyToDer(&eccKey, output, inLen), 0); @@ -27202,17 +27206,17 @@ static int test_wc_DhPublicKeyDecode(void) ExpectIntEQ(wc_InitDhKey(&key), 0); - ExpectIntEQ(wc_DhPublicKeyDecode(NULL,NULL,NULL,0), BAD_FUNC_ARG); + ExpectIntEQ(wc_DhPublicKeyDecode(NULL,NULL,NULL,0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_DhPublicKeyDecode(dh_pub_key_der_2048,NULL,NULL,0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_DhPublicKeyDecode(dh_pub_key_der_2048,NULL,NULL,0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); inOutIdx = 0; ExpectIntEQ(wc_DhPublicKeyDecode(dh_pub_key_der_2048,&inOutIdx,NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); inOutIdx = 0; ExpectIntEQ(wc_DhPublicKeyDecode(dh_pub_key_der_2048,&inOutIdx,&key, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); inOutIdx = 0; ExpectIntEQ(wc_DhPublicKeyDecode(dh_pub_key_der_2048,&inOutIdx,&key, sizeof_dh_pub_key_der_2048), 0); @@ -27250,9 +27254,9 @@ static int test_wc_Ed25519KeyToDer(void) inLen = (word32)sizeof(output); /* Bad Cases */ - ExpectIntEQ(wc_Ed25519KeyToDer(NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Ed25519KeyToDer(NULL, output, inLen), BAD_FUNC_ARG); - ExpectIntEQ(wc_Ed25519KeyToDer(&ed25519Key, output, 0), BUFFER_E); + ExpectIntEQ(wc_Ed25519KeyToDer(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Ed25519KeyToDer(NULL, output, inLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Ed25519KeyToDer(&ed25519Key, output, 0), WC_NO_ERR_TRACE(BUFFER_E)); /* Good Cases */ /* length only */ ExpectIntGT(wc_Ed25519KeyToDer(&ed25519Key, NULL, 0), 0); @@ -27288,10 +27292,10 @@ static int test_wc_Ed25519PrivateKeyToDer(void) inLen = (word32)sizeof(output); /* Bad Cases */ - ExpectIntEQ(wc_Ed25519PrivateKeyToDer(NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Ed25519PrivateKeyToDer(NULL, output, inLen), BAD_FUNC_ARG); + ExpectIntEQ(wc_Ed25519PrivateKeyToDer(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Ed25519PrivateKeyToDer(NULL, output, inLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Ed25519PrivateKeyToDer(&ed25519PrivKey, output, 0), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); /* Good Cases */ /* length only */ ExpectIntGT(wc_Ed25519PrivateKeyToDer(&ed25519PrivKey, NULL, 0), 0); @@ -27325,9 +27329,9 @@ static int test_wc_Ed448KeyToDer(void) inLen = (word32)sizeof(output); /* Bad Cases */ - ExpectIntEQ(wc_Ed448KeyToDer(NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Ed448KeyToDer(NULL, output, inLen), BAD_FUNC_ARG); - ExpectIntEQ(wc_Ed448KeyToDer(&ed448Key, output, 0), BUFFER_E); + ExpectIntEQ(wc_Ed448KeyToDer(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Ed448KeyToDer(NULL, output, inLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Ed448KeyToDer(&ed448Key, output, 0), WC_NO_ERR_TRACE(BUFFER_E)); /* Good Cases */ /* length only */ ExpectIntGT(wc_Ed448KeyToDer(&ed448Key, NULL, 0), 0); @@ -27362,10 +27366,10 @@ static int test_wc_Ed448PrivateKeyToDer(void) inLen = (word32)sizeof(output); /* Bad Cases */ - ExpectIntEQ(wc_Ed448PrivateKeyToDer(NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Ed448PrivateKeyToDer(NULL, output, inLen), BAD_FUNC_ARG); + ExpectIntEQ(wc_Ed448PrivateKeyToDer(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Ed448PrivateKeyToDer(NULL, output, inLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Ed448PrivateKeyToDer(&ed448PrivKey, output, 0), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); /* Good cases */ /* length only */ ExpectIntGT(wc_Ed448PrivateKeyToDer(&ed448PrivKey, NULL, 0), 0); @@ -27400,22 +27404,22 @@ static int test_wc_Curve448PrivateKeyToDer(void) inLen = (word32)sizeof(output); /* Bad Cases */ - ExpectIntEQ(wc_Curve448PrivateKeyToDer(NULL, NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Curve448PrivateKeyToDer(NULL, output, inLen), BAD_FUNC_ARG); + ExpectIntEQ(wc_Curve448PrivateKeyToDer(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Curve448PrivateKeyToDer(NULL, output, inLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Curve448PrivateKeyToDer(&curve448PrivKey, output, 0), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); /* Good cases */ /* length only */ ExpectIntGT(wc_Curve448PrivateKeyToDer(&curve448PrivKey, NULL, 0), 0); ExpectIntGT(wc_Curve448PrivateKeyToDer(&curve448PrivKey, output, inLen), 0); /* Bad Cases */ - ExpectIntEQ(wc_Curve448PublicKeyToDer(NULL, NULL, 0, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_Curve448PublicKeyToDer(NULL, output, inLen, 0), BAD_FUNC_ARG); + ExpectIntEQ(wc_Curve448PublicKeyToDer(NULL, NULL, 0, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Curve448PublicKeyToDer(NULL, output, inLen, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Curve448PublicKeyToDer(&curve448PrivKey, output, 0, 0), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); ExpectIntEQ(wc_Curve448PublicKeyToDer(&curve448PrivKey, output, 0, 1), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); /* Good cases */ /* length only */ ExpectIntGT(wc_Curve448PublicKeyToDer(&curve448PrivKey, NULL, 0, 0), 0); @@ -27433,1398 +27437,1404 @@ static int test_wc_kyber_make_key_kats(void) { EXPECT_DECLS; #if defined(WOLFSSL_HAVE_KYBER) && defined(WOLFSSL_WC_KYBER) && \ - defined(WOLFSSL_ML_KEM) + !defined(WOLFSSL_KYBER_ORIGINAL) KyberKey* key; #ifndef WOLFSSL_NO_KYBER512 static const byte seed_512[KYBER_MAKEKEY_RAND_SZ] = { - 0xCD, 0x11, 0x9A, 0xFD, 0xC8, 0x55, 0x94, 0x42, - 0x42, 0x4A, 0x87, 0xC1, 0x3E, 0xA1, 0x01, 0xE2, - 0x9F, 0xCA, 0x11, 0x88, 0x18, 0x69, 0x07, 0x7E, - 0x40, 0x92, 0xE7, 0x51, 0xBE, 0xDC, 0xA8, 0xBC, - 0xCD, 0x11, 0x9A, 0xFD, 0xC8, 0x55, 0x94, 0x42, - 0x42, 0x4A, 0x87, 0xC1, 0x3E, 0xA1, 0x01, 0xE2, - 0x9F, 0xCA, 0x11, 0x88, 0x18, 0x69, 0x07, 0x7E, - 0x40, 0x92, 0xE7, 0x51, 0xBE, 0xDC, 0xA8, 0xBC + /* d */ + 0x2C, 0xB8, 0x43, 0xA0, 0x2E, 0xF0, 0x2E, 0xE1, + 0x09, 0x30, 0x5F, 0x39, 0x11, 0x9F, 0xAB, 0xF4, + 0x9A, 0xB9, 0x0A, 0x57, 0xFF, 0xEC, 0xB3, 0xA0, + 0xE7, 0x5E, 0x17, 0x94, 0x50, 0xF5, 0x27, 0x61, + /* z */ + 0x84, 0xCC, 0x91, 0x21, 0xAE, 0x56, 0xFB, 0xF3, + 0x9E, 0x67, 0xAD, 0xBD, 0x83, 0xAD, 0x2D, 0x3E, + 0x3B, 0xB8, 0x08, 0x43, 0x64, 0x52, 0x06, 0xBD, + 0xD9, 0xF2, 0xF6, 0x29, 0xE3, 0xCC, 0x49, 0xB7 }; static const byte ek_512[KYBER512_PUBLIC_KEY_SIZE] = { - 0xC6, 0x5A, 0x1D, 0x9D, 0x47, 0x97, 0x77, 0xE6, - 0x90, 0x5A, 0x91, 0xA5, 0xCB, 0x24, 0x55, 0x1C, - 0x8B, 0x1E, 0x52, 0xA3, 0xC7, 0x7B, 0x63, 0x31, - 0x3F, 0xFC, 0x8B, 0x58, 0x17, 0x81, 0x52, 0x59, - 0xA6, 0xAD, 0xB5, 0x96, 0x45, 0xDC, 0x4B, 0xB1, - 0x43, 0x6D, 0x51, 0xE6, 0x2A, 0x09, 0x68, 0x34, - 0xAF, 0x43, 0x77, 0x25, 0x10, 0xC4, 0xED, 0xF3, - 0x4C, 0xDE, 0x0A, 0x5B, 0x57, 0xC1, 0x45, 0xE6, - 0x87, 0xCB, 0x87, 0x16, 0x2F, 0x00, 0x1C, 0x21, - 0xC9, 0xE1, 0x93, 0x4A, 0xC1, 0x1A, 0xAF, 0xA7, - 0x0F, 0xF8, 0x10, 0x73, 0x26, 0x50, 0xB3, 0x2A, - 0x30, 0x18, 0xA7, 0xC5, 0x0C, 0xD7, 0x36, 0x79, - 0x62, 0x22, 0xC8, 0xAB, 0x82, 0x1A, 0x92, 0x83, - 0xBE, 0x1C, 0xC2, 0x04, 0xC3, 0xF1, 0x63, 0x0D, - 0x3C, 0xCC, 0xDB, 0x0A, 0x9A, 0x3D, 0x17, 0x55, - 0x2B, 0x91, 0x58, 0xC0, 0x66, 0x4E, 0x5D, 0x6A, - 0x04, 0xB0, 0xFA, 0x36, 0xDE, 0x45, 0x86, 0x2A, - 0x46, 0xA3, 0x9E, 0xC5, 0x97, 0xAE, 0x42, 0xC3, - 0x11, 0xC4, 0xAC, 0x22, 0x4A, 0x72, 0xD6, 0xF2, - 0x53, 0xBB, 0x52, 0x35, 0xF7, 0xA2, 0xB8, 0xB0, - 0xF2, 0x4D, 0x13, 0x76, 0xAF, 0x58, 0x87, 0x46, - 0xF3, 0xBB, 0x8E, 0x03, 0x65, 0x07, 0x87, 0x61, - 0xCA, 0xB9, 0x83, 0xA4, 0xA6, 0xA9, 0x40, 0xA3, - 0xD9, 0x97, 0x04, 0x7A, 0x8F, 0x36, 0xA7, 0x31, - 0xE8, 0x96, 0x52, 0x36, 0xC3, 0x7B, 0xF2, 0x00, - 0x08, 0x2F, 0x82, 0x1D, 0xCA, 0x77, 0x16, 0xC4, - 0x44, 0xA9, 0x0B, 0xEC, 0x53, 0x07, 0x4B, 0xBA, - 0x58, 0xC1, 0x32, 0xBF, 0xB9, 0xA2, 0xAC, 0xE2, - 0xCE, 0xC9, 0xAA, 0x65, 0x8E, 0xAC, 0x12, 0x32, - 0xCC, 0xCA, 0x3C, 0x81, 0x7A, 0x92, 0xC1, 0x19, - 0x5C, 0x05, 0xC0, 0xE1, 0xD6, 0x63, 0x9F, 0xD2, - 0xAD, 0xE5, 0x31, 0x60, 0x7D, 0x48, 0x8B, 0x74, - 0xA7, 0x47, 0xCF, 0xF4, 0x7F, 0xCA, 0x5C, 0x8B, - 0x21, 0x63, 0xCA, 0x03, 0xC5, 0x45, 0xED, 0x10, - 0x32, 0x78, 0x43, 0x0C, 0x60, 0xB2, 0x38, 0x1A, - 0x09, 0x42, 0x7F, 0xD1, 0x30, 0xF8, 0x59, 0xBF, - 0x5D, 0xB7, 0x76, 0xDA, 0x09, 0x5D, 0xCA, 0x58, - 0x04, 0xFA, 0x63, 0xB0, 0xD7, 0xD8, 0x7F, 0xA9, - 0x41, 0x5C, 0x72, 0xFB, 0x51, 0x87, 0x2A, 0x98, - 0x9F, 0x46, 0x6C, 0x98, 0x4B, 0xC7, 0x4C, 0x29, - 0xB8, 0x63, 0x20, 0x19, 0xCA, 0x04, 0x0C, 0x9C, - 0xA3, 0x5E, 0x22, 0x60, 0x8D, 0xAA, 0x70, 0x35, - 0x7A, 0xE2, 0xC3, 0xAD, 0x83, 0x63, 0x1F, 0xAA, - 0x17, 0x4E, 0x0A, 0xCD, 0xF5, 0xDB, 0xBF, 0x3C, - 0xF6, 0x8A, 0x05, 0xB6, 0x54, 0x3A, 0xB6, 0x26, - 0x8E, 0x1A, 0x51, 0xB0, 0x93, 0x2C, 0x17, 0xB0, - 0x0A, 0x13, 0x71, 0xB2, 0xDA, 0xB2, 0x41, 0xF9, - 0x2A, 0x43, 0xFF, 0xB4, 0x56, 0xD0, 0xA8, 0xC8, - 0x86, 0x0A, 0x8E, 0x28, 0xA6, 0x1A, 0x21, 0x30, - 0x7C, 0xC0, 0x45, 0x6D, 0xA4, 0x24, 0x29, 0x05, - 0xCB, 0x1D, 0x3D, 0x0B, 0xBD, 0x81, 0xBB, 0x8E, - 0xE2, 0x74, 0xA4, 0x3C, 0x76, 0xC3, 0x10, 0x01, - 0x95, 0x15, 0xFC, 0xC1, 0x40, 0x46, 0x7C, 0x33, - 0x37, 0x0C, 0x86, 0x80, 0x8E, 0xCA, 0xA5, 0x8E, - 0x3B, 0xA9, 0x3A, 0x2C, 0x11, 0x90, 0x46, 0x1C, - 0x1D, 0xFA, 0x11, 0x30, 0x20, 0x01, 0xBB, 0xAB, - 0x4C, 0xB1, 0xE3, 0x64, 0x2E, 0xF8, 0xCB, 0x26, - 0x30, 0x9B, 0x60, 0x52, 0x3B, 0xC2, 0x18, 0x87, - 0xB0, 0x7F, 0x89, 0x8C, 0xE5, 0x62, 0xA6, 0xCA, - 0x77, 0x8E, 0xA0, 0x15, 0x05, 0x85, 0x13, 0x78, - 0xCE, 0xA8, 0xBB, 0x7F, 0xC0, 0x9D, 0x11, 0x96, - 0x1B, 0x6C, 0x59, 0x6F, 0x93, 0x54, 0x2A, 0x99, - 0x04, 0x86, 0x4E, 0xB1, 0x0C, 0xD0, 0xA7, 0x03, - 0xDB, 0xA9, 0x89, 0x21, 0x86, 0x1A, 0x87, 0xB0, - 0x56, 0x52, 0x5C, 0x71, 0xA8, 0x43, 0x55, 0x3E, - 0x64, 0x00, 0x77, 0x74, 0x37, 0xC9, 0x5C, 0xCC, - 0x80, 0x85, 0xCC, 0x0C, 0x47, 0x7D, 0x66, 0x5A, - 0x44, 0x79, 0x01, 0x9D, 0x4C, 0xD4, 0x42, 0xF7, - 0x4A, 0x3C, 0xD8, 0x16, 0x9F, 0x42, 0x62, 0xB8, - 0x27, 0x1B, 0x5D, 0x5A, 0x67, 0xC8, 0xC1, 0x61, - 0x1A, 0xAE, 0x7B, 0x3D, 0x05, 0x34, 0xC0, 0x85, - 0x97, 0x16, 0xFD, 0xF0, 0xBB, 0x68, 0x94, 0x90, - 0x94, 0xC0, 0x6A, 0x1B, 0x73, 0xC9, 0xAA, 0x1C, - 0xBD, 0xF3, 0x31, 0x54, 0x3D, 0xE0, 0x02, 0xA8, - 0xC0, 0x6F, 0x94, 0xE8, 0x81, 0x0A, 0x5C, 0xB3, - 0x73, 0x83, 0x27, 0x45, 0xD7, 0x20, 0x68, 0x3B, - 0x57, 0x48, 0x75, 0xA6, 0x66, 0x94, 0x6D, 0x02, - 0x96, 0x89, 0x3F, 0x2B, 0x59, 0xE9, 0x07, 0x48, - 0x8D, 0x8C, 0x84, 0x89, 0xD4, 0x74, 0xD9, 0x29, - 0xA0, 0x5A, 0x57, 0x3E, 0xD6, 0x67, 0x49, 0x03, - 0x71, 0xA4, 0x6D, 0x45, 0x56, 0xCB, 0xB6, 0x8A, - 0xAA, 0x79, 0xCC, 0x3E, 0xC6, 0x65, 0x34, 0x13, - 0x57, 0x6C, 0x22, 0x8E, 0x37, 0x9A, 0x14, 0xCB, - 0x90, 0xB7, 0xB7, 0x59, 0x1B, 0x19, 0xA7, 0xBD, - 0x37, 0xA1, 0xC4, 0xD3, 0x78, 0x59, 0x89, 0x22, - 0x19, 0x44, 0x2B, 0xB0, 0xB9, 0xB9, 0xBA, 0x67, - 0xBA, 0x3B, 0xC0, 0xD0, 0x95, 0xC8, 0x80, 0x3C, - 0xEB, 0xE9, 0x7A, 0xFF, 0x0B, 0x1C, 0x15, 0x35, - 0x78, 0xA1, 0x30, 0xCD, 0x81, 0x57, 0xCF, 0x74, - 0x59, 0x46, 0xC2, 0xF5, 0x72, 0x6D, 0x9C, 0x11, - 0x27, 0x35, 0x75, 0x50, 0x52, 0x91, 0x34, 0x65, - 0x28, 0xEE, 0x0B, 0xAC, 0x04, 0x7C, 0xC9, 0x84, - 0x53, 0x8B, 0x97, 0xBB, 0xAB, 0xFC, 0xC3, 0x57, - 0xDC, 0xB8, 0xA9, 0x8F, 0xB8, 0x57, 0xC9, 0xC5, - 0x2D, 0x1B, 0x78, 0x67, 0x49, 0xCA, 0x61, 0x89, - 0x2B, 0x09, 0x75, 0x99, 0x80, 0x52, 0x00, 0x91, - 0xB9, 0xB4, 0x77, 0xC7, 0x0E, 0x6C, 0x46, 0x58, - 0x6B, 0x1C, 0xCE, 0xBE, 0x87, 0xBC, 0xF6, 0xDF, - 0x03, 0xC2, 0xB2, 0x7C, 0xB0, 0x9F, 0xA0, 0x3F, - 0x63, 0x16, 0x09, 0x58, 0x38, 0x3B, 0xE6, 0x36 + 0xA3, 0x24, 0x39, 0xF8, 0x5A, 0x3C, 0x21, 0xD2, + 0x1A, 0x71, 0xB9, 0xB9, 0x2A, 0x9B, 0x64, 0xEA, + 0x0A, 0xB8, 0x43, 0x12, 0xC7, 0x70, 0x23, 0x69, + 0x4F, 0xD6, 0x4E, 0xAA, 0xB9, 0x07, 0xA4, 0x35, + 0x39, 0xDD, 0xB2, 0x7B, 0xA0, 0xA8, 0x53, 0xCC, + 0x90, 0x69, 0xEA, 0xC8, 0x50, 0x8C, 0x65, 0x3E, + 0x60, 0x0B, 0x2A, 0xC0, 0x18, 0x38, 0x1B, 0x4B, + 0xB4, 0xA8, 0x79, 0xAC, 0xDA, 0xD3, 0x42, 0xF9, + 0x11, 0x79, 0xCA, 0x82, 0x49, 0x52, 0x5C, 0xB1, + 0x96, 0x8B, 0xBE, 0x52, 0xF7, 0x55, 0xB7, 0xF5, + 0xB4, 0x3D, 0x66, 0x63, 0xD7, 0xA3, 0xBF, 0x0F, + 0x33, 0x57, 0xD8, 0xA2, 0x1D, 0x15, 0xB5, 0x2D, + 0xB3, 0x81, 0x8E, 0xCE, 0x5B, 0x40, 0x2A, 0x60, + 0xC9, 0x93, 0xE7, 0xCF, 0x43, 0x64, 0x87, 0xB8, + 0xD2, 0xAE, 0x91, 0xE6, 0xC5, 0xB8, 0x82, 0x75, + 0xE7, 0x58, 0x24, 0xB0, 0x00, 0x7E, 0xF3, 0x12, + 0x3C, 0x0A, 0xB5, 0x1B, 0x5C, 0xC6, 0x1B, 0x9B, + 0x22, 0x38, 0x0D, 0xE6, 0x6C, 0x5B, 0x20, 0xB0, + 0x60, 0xCB, 0xB9, 0x86, 0xF8, 0x12, 0x3D, 0x94, + 0x06, 0x00, 0x49, 0xCD, 0xF8, 0x03, 0x68, 0x73, + 0xA7, 0xBE, 0x10, 0x94, 0x44, 0xA0, 0xA1, 0xCD, + 0x87, 0xA4, 0x8C, 0xAE, 0x54, 0x19, 0x24, 0x84, + 0xAF, 0x84, 0x44, 0x29, 0xC1, 0xC5, 0x8C, 0x29, + 0xAC, 0x62, 0x4C, 0xD5, 0x04, 0xF1, 0xC4, 0x4F, + 0x1E, 0x13, 0x47, 0x82, 0x2B, 0x6F, 0x22, 0x13, + 0x23, 0x85, 0x9A, 0x7F, 0x6F, 0x75, 0x4B, 0xFE, + 0x71, 0x0B, 0xDA, 0x60, 0x27, 0x62, 0x40, 0xA4, + 0xFF, 0x2A, 0x53, 0x50, 0x70, 0x37, 0x86, 0xF5, + 0x67, 0x1F, 0x44, 0x9F, 0x20, 0xC2, 0xA9, 0x5A, + 0xE7, 0xC2, 0x90, 0x3A, 0x42, 0xCB, 0x3B, 0x30, + 0x3F, 0xF4, 0xC4, 0x27, 0xC0, 0x8B, 0x11, 0xB4, + 0xCD, 0x31, 0xC4, 0x18, 0xC6, 0xD1, 0x8D, 0x08, + 0x61, 0x87, 0x3B, 0xFA, 0x03, 0x32, 0xF1, 0x12, + 0x71, 0x55, 0x2E, 0xD7, 0xC0, 0x35, 0xF0, 0xE4, + 0xBC, 0x42, 0x8C, 0x43, 0x72, 0x0B, 0x39, 0xA6, + 0x51, 0x66, 0xBA, 0x9C, 0x2D, 0x3D, 0x77, 0x0E, + 0x13, 0x03, 0x60, 0xCC, 0x23, 0x84, 0xE8, 0x30, + 0x95, 0xB1, 0xA1, 0x59, 0x49, 0x55, 0x33, 0xF1, + 0x16, 0xC7, 0xB5, 0x58, 0xB6, 0x50, 0xDB, 0x04, + 0xD5, 0xA2, 0x6E, 0xAA, 0xA0, 0x8C, 0x3E, 0xE5, + 0x7D, 0xE4, 0x5A, 0x7F, 0x88, 0xC6, 0xA3, 0xCE, + 0xB2, 0x4D, 0xC5, 0x39, 0x7B, 0x88, 0xC3, 0xCE, + 0xF0, 0x03, 0x31, 0x9B, 0xB0, 0x23, 0x3F, 0xD6, + 0x92, 0xFD, 0xA1, 0x52, 0x44, 0x75, 0xB3, 0x51, + 0xF3, 0xC7, 0x82, 0x18, 0x2D, 0xEC, 0xF5, 0x90, + 0xB7, 0x72, 0x3B, 0xE4, 0x00, 0xBE, 0x14, 0x80, + 0x9C, 0x44, 0x32, 0x99, 0x63, 0xFC, 0x46, 0x95, + 0x92, 0x11, 0xD6, 0xA6, 0x23, 0x33, 0x95, 0x37, + 0x84, 0x8C, 0x25, 0x16, 0x69, 0x94, 0x1D, 0x90, + 0xB1, 0x30, 0x25, 0x8A, 0xDF, 0x55, 0xA7, 0x20, + 0xA7, 0x24, 0xE8, 0xB6, 0xA6, 0xCA, 0xE3, 0xC2, + 0x26, 0x4B, 0x16, 0x24, 0xCC, 0xBE, 0x7B, 0x45, + 0x6B, 0x30, 0xC8, 0xC7, 0x39, 0x32, 0x94, 0xCA, + 0x51, 0x80, 0xBC, 0x83, 0x7D, 0xD2, 0xE4, 0x5D, + 0xBD, 0x59, 0xB6, 0xE1, 0x7B, 0x24, 0xFE, 0x93, + 0x05, 0x2E, 0xB7, 0xC4, 0x3B, 0x27, 0xAC, 0x3D, + 0xC2, 0x49, 0xCA, 0x0C, 0xBC, 0xA4, 0xFB, 0x58, + 0x97, 0xC0, 0xB7, 0x44, 0x08, 0x8A, 0x8A, 0x07, + 0x79, 0xD3, 0x22, 0x33, 0x82, 0x6A, 0x01, 0xDD, + 0x64, 0x89, 0x95, 0x2A, 0x48, 0x25, 0xE5, 0x35, + 0x8A, 0x70, 0x0B, 0xE0, 0xE1, 0x79, 0xAC, 0x19, + 0x77, 0x10, 0xD8, 0x3E, 0xCC, 0x85, 0x3E, 0x52, + 0x69, 0x5E, 0x9B, 0xF8, 0x7B, 0xB1, 0xF6, 0xCB, + 0xD0, 0x5B, 0x02, 0xD4, 0xE6, 0x79, 0xE3, 0xB8, + 0x8D, 0xD4, 0x83, 0xB0, 0x74, 0x9B, 0x11, 0xBD, + 0x37, 0xB3, 0x83, 0xDC, 0xCA, 0x71, 0xF9, 0x09, + 0x18, 0x34, 0xA1, 0x69, 0x55, 0x02, 0xC4, 0xB9, + 0x5F, 0xC9, 0x11, 0x8C, 0x1C, 0xFC, 0x34, 0xC8, + 0x4C, 0x22, 0x65, 0xBB, 0xBC, 0x56, 0x3C, 0x28, + 0x26, 0x66, 0xB6, 0x0A, 0xE5, 0xC7, 0xF3, 0x85, + 0x1D, 0x25, 0xEC, 0xBB, 0x50, 0x21, 0xCC, 0x38, + 0xCB, 0x73, 0xEB, 0x6A, 0x34, 0x11, 0xB1, 0xC2, + 0x90, 0x46, 0xCA, 0x66, 0x54, 0x06, 0x67, 0xD1, + 0x36, 0x95, 0x44, 0x60, 0xC6, 0xFC, 0xBC, 0x4B, + 0xC7, 0xC0, 0x49, 0xBB, 0x04, 0x7F, 0xA6, 0x7A, + 0x63, 0xB3, 0xCC, 0x11, 0x11, 0xC1, 0xD8, 0xAC, + 0x27, 0xE8, 0x05, 0x8B, 0xCC, 0xA4, 0xA1, 0x54, + 0x55, 0x85, 0x8A, 0x58, 0x35, 0x8F, 0x7A, 0x61, + 0x02, 0x0B, 0xC9, 0xC4, 0xC1, 0x7F, 0x8B, 0x95, + 0xC2, 0x68, 0xCC, 0xB4, 0x04, 0xB9, 0xAA, 0xB4, + 0xA2, 0x72, 0xA2, 0x1A, 0x70, 0xDA, 0xF6, 0xB6, + 0xF1, 0x51, 0x21, 0xEE, 0x01, 0xC1, 0x56, 0xA3, + 0x54, 0xAA, 0x17, 0x08, 0x7E, 0x07, 0x70, 0x2E, + 0xAB, 0x38, 0xB3, 0x24, 0x1F, 0xDB, 0x55, 0x3F, + 0x65, 0x73, 0x39, 0xD5, 0xE2, 0x9D, 0xC5, 0xD9, + 0x1B, 0x7A, 0x5A, 0x82, 0x8E, 0xE9, 0x59, 0xFE, + 0xBB, 0x90, 0xB0, 0x72, 0x29, 0xF6, 0xE4, 0x9D, + 0x23, 0xC3, 0xA1, 0x90, 0x29, 0x70, 0x42, 0xFB, + 0x43, 0x98, 0x69, 0x55, 0xB6, 0x9C, 0x28, 0xE1, + 0x01, 0x6F, 0x77, 0xA5, 0x8B, 0x43, 0x15, 0x14, + 0xD2, 0x1B, 0x88, 0x88, 0x99, 0xC3, 0x60, 0x82, + 0x76, 0x08, 0x1B, 0x75, 0xF5, 0x68, 0x09, 0x7C, + 0xDC, 0x17, 0x48, 0xF3, 0x23, 0x07, 0x88, 0x58, + 0x15, 0xF3, 0xAE, 0xC9, 0x65, 0x18, 0x19, 0xAA, + 0x68, 0x73, 0xD1, 0xA4, 0xEB, 0x83, 0xB1, 0x95, + 0x38, 0x43, 0xB9, 0x34, 0x22, 0x51, 0x94, 0x83, + 0xFE, 0xF0, 0x05, 0x9D, 0x36, 0xBB, 0x2D, 0xB1, + 0xF3, 0xD4, 0x68, 0xFB, 0x06, 0x8C, 0x86, 0xE8, + 0x97, 0x37, 0x33, 0xC3, 0x98, 0xEA, 0xF0, 0x0E, + 0x17, 0x02, 0xC6, 0x73, 0x4A, 0xD8, 0xEB, 0x3B }; static const byte dk_512[KYBER512_PRIVATE_KEY_SIZE] = { - 0x37, 0xEC, 0x47, 0x7E, 0x21, 0x7B, 0xFB, 0x40, - 0x38, 0x4C, 0x85, 0x0E, 0x51, 0xC1, 0x83, 0x71, - 0x58, 0xBD, 0xBC, 0x23, 0xA3, 0x18, 0x32, 0xBC, - 0x25, 0xC9, 0x1B, 0x31, 0x21, 0x44, 0x4A, 0xD4, - 0x53, 0x37, 0x33, 0xBA, 0xFF, 0x07, 0xCA, 0x81, - 0x7B, 0x64, 0xB2, 0xCA, 0x42, 0x99, 0xAA, 0x26, - 0x45, 0x4C, 0xBA, 0xFB, 0x35, 0xB6, 0xAB, 0xE1, - 0x18, 0x5C, 0xB4, 0x7C, 0x4C, 0xD6, 0x1A, 0xF9, - 0x83, 0x83, 0xC4, 0x81, 0x4B, 0x20, 0xAB, 0x87, - 0x54, 0xFC, 0x51, 0x4F, 0x23, 0x07, 0x41, 0x14, - 0xC3, 0xE5, 0xA8, 0x10, 0xA4, 0x53, 0xB8, 0x55, - 0xAA, 0x7F, 0x13, 0x10, 0xC7, 0x4B, 0x0B, 0x01, - 0xE5, 0xAA, 0xB2, 0xE8, 0x71, 0x73, 0x8F, 0xAC, - 0x27, 0x86, 0xC7, 0xA0, 0x5D, 0x6B, 0x3B, 0x32, - 0xA0, 0x50, 0xD0, 0xFB, 0x22, 0x39, 0x56, 0xC9, - 0x5C, 0xA0, 0xC2, 0xC1, 0xD5, 0x41, 0x54, 0xA7, - 0x7B, 0xD3, 0x37, 0x37, 0xA4, 0x9A, 0x00, 0x65, - 0xD1, 0x42, 0x4A, 0x2A, 0xBA, 0xFD, 0x52, 0xAA, - 0x93, 0x4C, 0x98, 0x04, 0x93, 0x92, 0x08, 0xF0, - 0x5C, 0xCF, 0x8B, 0x8B, 0x80, 0x86, 0x31, 0x6E, - 0x09, 0x43, 0xA0, 0x87, 0x10, 0x50, 0x0C, 0x91, - 0x8A, 0x2B, 0x21, 0x8D, 0x37, 0xB8, 0x5A, 0xE2, - 0x80, 0x22, 0xCB, 0x01, 0x34, 0xFB, 0x49, 0xF5, - 0xC4, 0x5D, 0x98, 0xD3, 0xC0, 0x4B, 0x75, 0x5A, - 0x60, 0x88, 0x04, 0x22, 0x66, 0x8E, 0x2B, 0x30, - 0x1B, 0x18, 0xD5, 0x19, 0x4D, 0xE9, 0x91, 0xB2, - 0x65, 0xBF, 0x94, 0x69, 0x7E, 0x6A, 0x4B, 0x81, - 0x50, 0xC8, 0xB8, 0x52, 0x03, 0x39, 0x15, 0x63, - 0x5E, 0x30, 0x66, 0x5B, 0xDA, 0x21, 0x91, 0xDA, - 0xA5, 0x05, 0xD4, 0x33, 0x44, 0xFD, 0x29, 0xC9, - 0xFC, 0xC1, 0xC5, 0x07, 0x69, 0x1D, 0x47, 0x5B, - 0x61, 0x7C, 0x94, 0x8F, 0xCC, 0x84, 0xB1, 0xB0, - 0x8A, 0x1C, 0x63, 0x8C, 0x3E, 0x13, 0x58, 0x0C, - 0xE3, 0x59, 0x78, 0x9A, 0x98, 0x60, 0xE5, 0x46, - 0x9C, 0xC7, 0x54, 0xB0, 0x8E, 0xE3, 0x3F, 0x09, - 0x21, 0xBD, 0xEF, 0x15, 0xA9, 0x06, 0x96, 0x9F, - 0x2D, 0xC5, 0x7A, 0x25, 0xE8, 0x0C, 0xE4, 0xC4, - 0x5F, 0x11, 0xE0, 0x4A, 0x51, 0x9A, 0xB0, 0x8B, - 0x9B, 0x92, 0x7C, 0x3A, 0x13, 0xA0, 0x81, 0xCF, - 0xFA, 0x11, 0x0F, 0xAC, 0xCC, 0x5E, 0x8D, 0xC2, - 0x94, 0x95, 0x97, 0x8B, 0x55, 0x53, 0x10, 0x4D, - 0x47, 0x3A, 0x17, 0x59, 0x18, 0xAD, 0x5B, 0x54, - 0x87, 0xBB, 0xA6, 0x97, 0x12, 0xAE, 0x93, 0xF6, - 0x15, 0xC6, 0x0A, 0x8D, 0x38, 0x7B, 0xCE, 0x3F, - 0x65, 0x1E, 0x56, 0x88, 0x0A, 0x52, 0x2B, 0x2D, - 0xB8, 0x63, 0x51, 0xCA, 0xB6, 0x5D, 0x13, 0xB4, - 0x69, 0x3D, 0xB0, 0xB2, 0xC8, 0x09, 0x36, 0xFA, - 0xD1, 0xCE, 0x67, 0x92, 0x5E, 0x6B, 0xB7, 0xC1, - 0x10, 0xC4, 0x3E, 0x83, 0x24, 0x7D, 0x22, 0x60, - 0x8D, 0x8C, 0x10, 0x23, 0x43, 0x1C, 0xB6, 0x92, - 0x90, 0xA4, 0xF8, 0xA9, 0x59, 0x3B, 0xF1, 0x24, - 0x1D, 0x73, 0x7C, 0x0C, 0xD1, 0x6D, 0x75, 0xEB, - 0x50, 0xC6, 0x84, 0x2C, 0xE0, 0xA2, 0x1D, 0xCE, - 0x49, 0x40, 0x36, 0x82, 0x4C, 0xE6, 0x32, 0x52, - 0xE9, 0x32, 0x5F, 0x05, 0xB7, 0x34, 0x45, 0x2B, - 0x12, 0x91, 0x32, 0xB1, 0x96, 0x08, 0x4A, 0x37, - 0x88, 0xBB, 0xB1, 0xF2, 0x0A, 0x37, 0xD2, 0xC2, - 0xB3, 0xF9, 0x0E, 0x0D, 0xD7, 0xA2, 0x74, 0xC9, - 0xB1, 0xA9, 0xF0, 0x2E, 0xC7, 0xE7, 0x21, 0xF4, - 0xA4, 0x3D, 0x40, 0x9A, 0x25, 0xFB, 0xC9, 0x9A, - 0x44, 0xD4, 0x76, 0x31, 0x07, 0xC7, 0x87, 0x62, - 0x09, 0x41, 0x76, 0x1E, 0xD4, 0x8C, 0x93, 0x29, - 0x24, 0xBA, 0x62, 0x09, 0x86, 0xCF, 0x27, 0x7A, - 0x23, 0x47, 0x1C, 0x7B, 0x13, 0x33, 0x3D, 0x93, - 0x6C, 0x0D, 0xD4, 0x9E, 0x0F, 0xF3, 0x4C, 0xA3, - 0xAB, 0x82, 0x34, 0xC4, 0x2A, 0xEB, 0xE4, 0x59, - 0xC6, 0x12, 0x05, 0x2B, 0x97, 0x16, 0xE9, 0x6B, - 0x20, 0xBE, 0xC7, 0x18, 0x12, 0x60, 0x40, 0xA9, - 0x09, 0x1F, 0x6B, 0xA9, 0x44, 0x5F, 0x45, 0x80, - 0x6A, 0xEB, 0x6E, 0x38, 0x16, 0x71, 0x0F, 0x7C, - 0xBF, 0xED, 0x11, 0x01, 0x46, 0x12, 0x84, 0xDD, - 0x96, 0x2B, 0x7B, 0x12, 0x04, 0x7C, 0x0A, 0x0A, - 0x90, 0x6A, 0x05, 0x89, 0xB4, 0xA9, 0xA4, 0x26, - 0x46, 0x9B, 0xDA, 0x39, 0x46, 0x09, 0x1A, 0x37, - 0x5B, 0x19, 0x52, 0xA9, 0x1C, 0x23, 0x1C, 0x0F, - 0xE6, 0xB5, 0x7F, 0x7C, 0xC9, 0x7E, 0xFE, 0xD0, - 0xBC, 0x10, 0x01, 0x36, 0x78, 0x23, 0xBE, 0x18, - 0x86, 0x30, 0x8B, 0x3A, 0x21, 0x45, 0x2B, 0x7E, - 0x45, 0x50, 0x66, 0x71, 0x9C, 0xCC, 0xEA, 0xF6, - 0xA7, 0x26, 0xFC, 0x22, 0xBC, 0x83, 0x99, 0xF5, - 0x4B, 0xBF, 0xCA, 0xF7, 0xCA, 0x63, 0xBA, 0x73, - 0x17, 0x3C, 0x7A, 0xA8, 0x61, 0x9A, 0x3F, 0x48, - 0x5C, 0x3E, 0x33, 0x04, 0x21, 0x00, 0x67, 0x66, - 0x74, 0x6F, 0x4E, 0xF6, 0x65, 0x3E, 0x44, 0x0E, - 0x5C, 0xDC, 0x59, 0x53, 0x40, 0x18, 0xC3, 0x52, - 0xC0, 0x23, 0x58, 0x4C, 0xBB, 0x37, 0x4E, 0xB7, - 0xA9, 0xB7, 0x83, 0x68, 0x32, 0xBE, 0x53, 0xAF, - 0x27, 0x2A, 0x06, 0x97, 0x55, 0xCE, 0x2F, 0xF2, - 0x9C, 0xD8, 0xB3, 0x94, 0xC5, 0x24, 0x22, 0xB3, - 0x47, 0x0E, 0x27, 0x41, 0x5F, 0x41, 0xB3, 0x97, - 0x53, 0x59, 0x59, 0xF1, 0x60, 0x00, 0x3B, 0x45, - 0x2C, 0xF4, 0x96, 0x97, 0xB7, 0xA5, 0x36, 0x89, - 0x85, 0x2B, 0xBE, 0x6C, 0xCF, 0xDF, 0xB4, 0x0B, - 0x48, 0xE9, 0x32, 0x8D, 0xE1, 0x15, 0x22, 0xD0, - 0xA4, 0x31, 0xB1, 0x15, 0xA5, 0xC0, 0xC2, 0xF4, - 0x30, 0x7D, 0x98, 0x62, 0xC0, 0xDD, 0x1B, 0x40, - 0xC6, 0x5A, 0x1D, 0x9D, 0x47, 0x97, 0x77, 0xE6, - 0x90, 0x5A, 0x91, 0xA5, 0xCB, 0x24, 0x55, 0x1C, - 0x8B, 0x1E, 0x52, 0xA3, 0xC7, 0x7B, 0x63, 0x31, - 0x3F, 0xFC, 0x8B, 0x58, 0x17, 0x81, 0x52, 0x59, - 0xA6, 0xAD, 0xB5, 0x96, 0x45, 0xDC, 0x4B, 0xB1, - 0x43, 0x6D, 0x51, 0xE6, 0x2A, 0x09, 0x68, 0x34, - 0xAF, 0x43, 0x77, 0x25, 0x10, 0xC4, 0xED, 0xF3, - 0x4C, 0xDE, 0x0A, 0x5B, 0x57, 0xC1, 0x45, 0xE6, - 0x87, 0xCB, 0x87, 0x16, 0x2F, 0x00, 0x1C, 0x21, - 0xC9, 0xE1, 0x93, 0x4A, 0xC1, 0x1A, 0xAF, 0xA7, - 0x0F, 0xF8, 0x10, 0x73, 0x26, 0x50, 0xB3, 0x2A, - 0x30, 0x18, 0xA7, 0xC5, 0x0C, 0xD7, 0x36, 0x79, - 0x62, 0x22, 0xC8, 0xAB, 0x82, 0x1A, 0x92, 0x83, - 0xBE, 0x1C, 0xC2, 0x04, 0xC3, 0xF1, 0x63, 0x0D, - 0x3C, 0xCC, 0xDB, 0x0A, 0x9A, 0x3D, 0x17, 0x55, - 0x2B, 0x91, 0x58, 0xC0, 0x66, 0x4E, 0x5D, 0x6A, - 0x04, 0xB0, 0xFA, 0x36, 0xDE, 0x45, 0x86, 0x2A, - 0x46, 0xA3, 0x9E, 0xC5, 0x97, 0xAE, 0x42, 0xC3, - 0x11, 0xC4, 0xAC, 0x22, 0x4A, 0x72, 0xD6, 0xF2, - 0x53, 0xBB, 0x52, 0x35, 0xF7, 0xA2, 0xB8, 0xB0, - 0xF2, 0x4D, 0x13, 0x76, 0xAF, 0x58, 0x87, 0x46, - 0xF3, 0xBB, 0x8E, 0x03, 0x65, 0x07, 0x87, 0x61, - 0xCA, 0xB9, 0x83, 0xA4, 0xA6, 0xA9, 0x40, 0xA3, - 0xD9, 0x97, 0x04, 0x7A, 0x8F, 0x36, 0xA7, 0x31, - 0xE8, 0x96, 0x52, 0x36, 0xC3, 0x7B, 0xF2, 0x00, - 0x08, 0x2F, 0x82, 0x1D, 0xCA, 0x77, 0x16, 0xC4, - 0x44, 0xA9, 0x0B, 0xEC, 0x53, 0x07, 0x4B, 0xBA, - 0x58, 0xC1, 0x32, 0xBF, 0xB9, 0xA2, 0xAC, 0xE2, - 0xCE, 0xC9, 0xAA, 0x65, 0x8E, 0xAC, 0x12, 0x32, - 0xCC, 0xCA, 0x3C, 0x81, 0x7A, 0x92, 0xC1, 0x19, - 0x5C, 0x05, 0xC0, 0xE1, 0xD6, 0x63, 0x9F, 0xD2, - 0xAD, 0xE5, 0x31, 0x60, 0x7D, 0x48, 0x8B, 0x74, - 0xA7, 0x47, 0xCF, 0xF4, 0x7F, 0xCA, 0x5C, 0x8B, - 0x21, 0x63, 0xCA, 0x03, 0xC5, 0x45, 0xED, 0x10, - 0x32, 0x78, 0x43, 0x0C, 0x60, 0xB2, 0x38, 0x1A, - 0x09, 0x42, 0x7F, 0xD1, 0x30, 0xF8, 0x59, 0xBF, - 0x5D, 0xB7, 0x76, 0xDA, 0x09, 0x5D, 0xCA, 0x58, - 0x04, 0xFA, 0x63, 0xB0, 0xD7, 0xD8, 0x7F, 0xA9, - 0x41, 0x5C, 0x72, 0xFB, 0x51, 0x87, 0x2A, 0x98, - 0x9F, 0x46, 0x6C, 0x98, 0x4B, 0xC7, 0x4C, 0x29, - 0xB8, 0x63, 0x20, 0x19, 0xCA, 0x04, 0x0C, 0x9C, - 0xA3, 0x5E, 0x22, 0x60, 0x8D, 0xAA, 0x70, 0x35, - 0x7A, 0xE2, 0xC3, 0xAD, 0x83, 0x63, 0x1F, 0xAA, - 0x17, 0x4E, 0x0A, 0xCD, 0xF5, 0xDB, 0xBF, 0x3C, - 0xF6, 0x8A, 0x05, 0xB6, 0x54, 0x3A, 0xB6, 0x26, - 0x8E, 0x1A, 0x51, 0xB0, 0x93, 0x2C, 0x17, 0xB0, - 0x0A, 0x13, 0x71, 0xB2, 0xDA, 0xB2, 0x41, 0xF9, - 0x2A, 0x43, 0xFF, 0xB4, 0x56, 0xD0, 0xA8, 0xC8, - 0x86, 0x0A, 0x8E, 0x28, 0xA6, 0x1A, 0x21, 0x30, - 0x7C, 0xC0, 0x45, 0x6D, 0xA4, 0x24, 0x29, 0x05, - 0xCB, 0x1D, 0x3D, 0x0B, 0xBD, 0x81, 0xBB, 0x8E, - 0xE2, 0x74, 0xA4, 0x3C, 0x76, 0xC3, 0x10, 0x01, - 0x95, 0x15, 0xFC, 0xC1, 0x40, 0x46, 0x7C, 0x33, - 0x37, 0x0C, 0x86, 0x80, 0x8E, 0xCA, 0xA5, 0x8E, - 0x3B, 0xA9, 0x3A, 0x2C, 0x11, 0x90, 0x46, 0x1C, - 0x1D, 0xFA, 0x11, 0x30, 0x20, 0x01, 0xBB, 0xAB, - 0x4C, 0xB1, 0xE3, 0x64, 0x2E, 0xF8, 0xCB, 0x26, - 0x30, 0x9B, 0x60, 0x52, 0x3B, 0xC2, 0x18, 0x87, - 0xB0, 0x7F, 0x89, 0x8C, 0xE5, 0x62, 0xA6, 0xCA, - 0x77, 0x8E, 0xA0, 0x15, 0x05, 0x85, 0x13, 0x78, - 0xCE, 0xA8, 0xBB, 0x7F, 0xC0, 0x9D, 0x11, 0x96, - 0x1B, 0x6C, 0x59, 0x6F, 0x93, 0x54, 0x2A, 0x99, - 0x04, 0x86, 0x4E, 0xB1, 0x0C, 0xD0, 0xA7, 0x03, - 0xDB, 0xA9, 0x89, 0x21, 0x86, 0x1A, 0x87, 0xB0, - 0x56, 0x52, 0x5C, 0x71, 0xA8, 0x43, 0x55, 0x3E, - 0x64, 0x00, 0x77, 0x74, 0x37, 0xC9, 0x5C, 0xCC, - 0x80, 0x85, 0xCC, 0x0C, 0x47, 0x7D, 0x66, 0x5A, - 0x44, 0x79, 0x01, 0x9D, 0x4C, 0xD4, 0x42, 0xF7, - 0x4A, 0x3C, 0xD8, 0x16, 0x9F, 0x42, 0x62, 0xB8, - 0x27, 0x1B, 0x5D, 0x5A, 0x67, 0xC8, 0xC1, 0x61, - 0x1A, 0xAE, 0x7B, 0x3D, 0x05, 0x34, 0xC0, 0x85, - 0x97, 0x16, 0xFD, 0xF0, 0xBB, 0x68, 0x94, 0x90, - 0x94, 0xC0, 0x6A, 0x1B, 0x73, 0xC9, 0xAA, 0x1C, - 0xBD, 0xF3, 0x31, 0x54, 0x3D, 0xE0, 0x02, 0xA8, - 0xC0, 0x6F, 0x94, 0xE8, 0x81, 0x0A, 0x5C, 0xB3, - 0x73, 0x83, 0x27, 0x45, 0xD7, 0x20, 0x68, 0x3B, - 0x57, 0x48, 0x75, 0xA6, 0x66, 0x94, 0x6D, 0x02, - 0x96, 0x89, 0x3F, 0x2B, 0x59, 0xE9, 0x07, 0x48, - 0x8D, 0x8C, 0x84, 0x89, 0xD4, 0x74, 0xD9, 0x29, - 0xA0, 0x5A, 0x57, 0x3E, 0xD6, 0x67, 0x49, 0x03, - 0x71, 0xA4, 0x6D, 0x45, 0x56, 0xCB, 0xB6, 0x8A, - 0xAA, 0x79, 0xCC, 0x3E, 0xC6, 0x65, 0x34, 0x13, - 0x57, 0x6C, 0x22, 0x8E, 0x37, 0x9A, 0x14, 0xCB, - 0x90, 0xB7, 0xB7, 0x59, 0x1B, 0x19, 0xA7, 0xBD, - 0x37, 0xA1, 0xC4, 0xD3, 0x78, 0x59, 0x89, 0x22, - 0x19, 0x44, 0x2B, 0xB0, 0xB9, 0xB9, 0xBA, 0x67, - 0xBA, 0x3B, 0xC0, 0xD0, 0x95, 0xC8, 0x80, 0x3C, - 0xEB, 0xE9, 0x7A, 0xFF, 0x0B, 0x1C, 0x15, 0x35, - 0x78, 0xA1, 0x30, 0xCD, 0x81, 0x57, 0xCF, 0x74, - 0x59, 0x46, 0xC2, 0xF5, 0x72, 0x6D, 0x9C, 0x11, - 0x27, 0x35, 0x75, 0x50, 0x52, 0x91, 0x34, 0x65, - 0x28, 0xEE, 0x0B, 0xAC, 0x04, 0x7C, 0xC9, 0x84, - 0x53, 0x8B, 0x97, 0xBB, 0xAB, 0xFC, 0xC3, 0x57, - 0xDC, 0xB8, 0xA9, 0x8F, 0xB8, 0x57, 0xC9, 0xC5, - 0x2D, 0x1B, 0x78, 0x67, 0x49, 0xCA, 0x61, 0x89, - 0x2B, 0x09, 0x75, 0x99, 0x80, 0x52, 0x00, 0x91, - 0xB9, 0xB4, 0x77, 0xC7, 0x0E, 0x6C, 0x46, 0x58, - 0x6B, 0x1C, 0xCE, 0xBE, 0x87, 0xBC, 0xF6, 0xDF, - 0x03, 0xC2, 0xB2, 0x7C, 0xB0, 0x9F, 0xA0, 0x3F, - 0x63, 0x16, 0x09, 0x58, 0x38, 0x3B, 0xE6, 0x36, - 0xC0, 0xEC, 0xC8, 0xDD, 0xAE, 0x8B, 0x59, 0x4A, - 0x14, 0x03, 0x78, 0x68, 0xBE, 0xC0, 0xB2, 0x23, - 0x00, 0xDE, 0xFD, 0xFA, 0xA1, 0xD9, 0x73, 0xAC, - 0x5C, 0xEC, 0x84, 0xAE, 0x43, 0x86, 0xB8, 0xFB, - 0xCD, 0x11, 0x9A, 0xFD, 0xC8, 0x55, 0x94, 0x42, - 0x42, 0x4A, 0x87, 0xC1, 0x3E, 0xA1, 0x01, 0xE2, - 0x9F, 0xCA, 0x11, 0x88, 0x18, 0x69, 0x07, 0x7E, - 0x40, 0x92, 0xE7, 0x51, 0xBE, 0xDC, 0xA8, 0xBC + 0x7F, 0xE4, 0x20, 0x6F, 0x26, 0xBE, 0xDB, 0x64, + 0xC1, 0xED, 0x00, 0x09, 0x61, 0x52, 0x45, 0xDC, + 0x98, 0x48, 0x3F, 0x66, 0x3A, 0xCC, 0x61, 0x7E, + 0x65, 0x89, 0x8D, 0x59, 0x6A, 0x88, 0x36, 0xC4, + 0x9F, 0xBD, 0x3B, 0x4A, 0x84, 0x97, 0x59, 0xAA, + 0x15, 0x46, 0xBD, 0xA8, 0x35, 0xCA, 0xF1, 0x75, + 0x64, 0x2C, 0x28, 0x28, 0x08, 0x92, 0xA7, 0x87, + 0x8C, 0xC3, 0x18, 0xBC, 0xC7, 0x5B, 0x83, 0x4C, + 0xB2, 0x9F, 0xDF, 0x53, 0x60, 0xD7, 0xF9, 0x82, + 0xA5, 0x2C, 0x88, 0xAE, 0x91, 0x4D, 0xBF, 0x02, + 0xB5, 0x8B, 0xEB, 0x8B, 0xA8, 0x87, 0xAE, 0x8F, + 0xAB, 0x5E, 0xB7, 0x87, 0x31, 0xC6, 0x75, 0x78, + 0x05, 0x47, 0x1E, 0xBC, 0xEC, 0x2E, 0x38, 0xDB, + 0x1F, 0x4B, 0x83, 0x10, 0xD2, 0x88, 0x92, 0x0D, + 0x8A, 0x49, 0x27, 0x95, 0xA3, 0x90, 0xA7, 0x4B, + 0xCD, 0x55, 0xCD, 0x85, 0x57, 0xB4, 0xDA, 0xAB, + 0xA8, 0x2C, 0x28, 0xCB, 0x3F, 0x15, 0x2C, 0x52, + 0x31, 0x19, 0x61, 0x93, 0xA6, 0x6A, 0x8C, 0xCF, + 0x34, 0xB8, 0x0E, 0x1F, 0x69, 0x42, 0xC3, 0x2B, + 0xCF, 0xF9, 0x6A, 0x6E, 0x3C, 0xF3, 0x93, 0x9B, + 0x7B, 0x94, 0x24, 0x98, 0xCC, 0x5E, 0x4C, 0xB8, + 0xE8, 0x46, 0x8E, 0x70, 0x27, 0x59, 0x85, 0x2A, + 0xA2, 0x29, 0xC0, 0x25, 0x7F, 0x02, 0x98, 0x20, + 0x97, 0x33, 0x86, 0x07, 0xC0, 0xF0, 0xF4, 0x54, + 0x46, 0xFA, 0xB4, 0x26, 0x79, 0x93, 0xB8, 0xA5, + 0x90, 0x8C, 0xAB, 0x9C, 0x46, 0x78, 0x01, 0x34, + 0x80, 0x4A, 0xE1, 0x88, 0x15, 0xB1, 0x02, 0x05, + 0x27, 0xA2, 0x22, 0xEC, 0x4B, 0x39, 0xA3, 0x19, + 0x4E, 0x66, 0x17, 0x37, 0x79, 0x17, 0x14, 0x12, + 0x26, 0x62, 0xD8, 0xB9, 0x76, 0x9F, 0x6C, 0x67, + 0xDE, 0x62, 0x5C, 0x0D, 0x48, 0x3C, 0x3D, 0x42, + 0x0F, 0xF1, 0xBB, 0x88, 0x9A, 0x72, 0x7E, 0x75, + 0x62, 0x81, 0x51, 0x3A, 0x70, 0x04, 0x76, 0x48, + 0xD2, 0x9C, 0x0C, 0x30, 0xF9, 0xBE, 0x52, 0xEC, + 0x0D, 0xEB, 0x97, 0x7C, 0xF0, 0xF3, 0x4F, 0xC2, + 0x07, 0x84, 0x83, 0x45, 0x69, 0x64, 0x74, 0x34, + 0x10, 0x63, 0x8C, 0x57, 0xB5, 0x53, 0x95, 0x77, + 0xBF, 0x85, 0x66, 0x90, 0x78, 0xC3, 0x56, 0xB3, + 0x46, 0x2E, 0x9F, 0xA5, 0x80, 0x7D, 0x49, 0x59, + 0x1A, 0xFA, 0x41, 0xC1, 0x96, 0x9F, 0x65, 0xE3, + 0x40, 0x5C, 0xB6, 0x4D, 0xDF, 0x16, 0x3F, 0x26, + 0x73, 0x4C, 0xE3, 0x48, 0xB9, 0xCF, 0x45, 0x67, + 0xA3, 0x3A, 0x59, 0x69, 0xEB, 0x32, 0x6C, 0xFB, + 0x5A, 0xDC, 0x69, 0x5D, 0xCA, 0x0C, 0x8B, 0x2A, + 0x7B, 0x1F, 0x4F, 0x40, 0x4C, 0xC7, 0xA0, 0x98, + 0x1E, 0x2C, 0xC2, 0x4C, 0x1C, 0x23, 0xD1, 0x6A, + 0xA9, 0xB4, 0x39, 0x24, 0x15, 0xE2, 0x6C, 0x22, + 0xF4, 0xA9, 0x34, 0xD7, 0x94, 0xC1, 0xFB, 0x4E, + 0x5A, 0x67, 0x05, 0x11, 0x23, 0xCC, 0xD1, 0x53, + 0x76, 0x4D, 0xEC, 0x99, 0xD5, 0x53, 0x52, 0x90, + 0x53, 0xC3, 0xDA, 0x55, 0x0B, 0xCE, 0xA3, 0xAC, + 0x54, 0x13, 0x6A, 0x26, 0xA6, 0x76, 0xD2, 0xBA, + 0x84, 0x21, 0x06, 0x70, 0x68, 0xC6, 0x38, 0x1C, + 0x2A, 0x62, 0xA7, 0x27, 0xC9, 0x33, 0x70, 0x2E, + 0xE5, 0x80, 0x4A, 0x31, 0xCA, 0x86, 0x5A, 0x45, + 0x58, 0x8F, 0xB7, 0x4D, 0xE7, 0xE2, 0x22, 0x3D, + 0x88, 0xC0, 0x60, 0x8A, 0x16, 0xBF, 0xEC, 0x4F, + 0xAD, 0x67, 0x52, 0xDB, 0x56, 0xB4, 0x8B, 0x88, + 0x72, 0xBF, 0x26, 0xBA, 0x2F, 0xFA, 0x0C, 0xED, + 0xE5, 0x34, 0x3B, 0xE8, 0x14, 0x36, 0x89, 0x26, + 0x5E, 0x06, 0x5F, 0x41, 0xA6, 0x92, 0x5B, 0x86, + 0xC8, 0x92, 0xE6, 0x2E, 0xB0, 0x77, 0x27, 0x34, + 0xF5, 0xA3, 0x57, 0xC7, 0x5C, 0xA1, 0xAC, 0x6D, + 0xF7, 0x8A, 0xB1, 0xB8, 0x88, 0x5A, 0xD0, 0x81, + 0x96, 0x15, 0x37, 0x6D, 0x33, 0xEB, 0xB9, 0x8F, + 0x87, 0x33, 0xA6, 0x75, 0x58, 0x03, 0xD9, 0x77, + 0xBF, 0x51, 0xC1, 0x27, 0x40, 0x42, 0x4B, 0x2B, + 0x49, 0xC2, 0x83, 0x82, 0xA6, 0x91, 0x7C, 0xBF, + 0xA0, 0x34, 0xC3, 0xF1, 0x26, 0xA3, 0x8C, 0x21, + 0x6C, 0x03, 0xC3, 0x57, 0x70, 0xAD, 0x48, 0x1B, + 0x90, 0x84, 0xB5, 0x58, 0x8D, 0xA6, 0x5F, 0xF1, + 0x18, 0xA7, 0x4F, 0x93, 0x2C, 0x7E, 0x53, 0x7A, + 0xBE, 0x58, 0x63, 0xFB, 0x29, 0xA1, 0x0C, 0x09, + 0x70, 0x1B, 0x44, 0x1F, 0x83, 0x99, 0xC1, 0xF8, + 0xA6, 0x37, 0x82, 0x5A, 0xCE, 0xA3, 0xE9, 0x31, + 0x80, 0x57, 0x4F, 0xDE, 0xB8, 0x80, 0x76, 0x66, + 0x1A, 0xB4, 0x69, 0x51, 0x71, 0x6A, 0x50, 0x01, + 0x84, 0xA0, 0x40, 0x55, 0x72, 0x66, 0x59, 0x8C, + 0xAF, 0x76, 0x10, 0x5E, 0x1C, 0x18, 0x70, 0xB4, + 0x39, 0x69, 0xC3, 0xBC, 0xC1, 0xA0, 0x49, 0x27, + 0x63, 0x80, 0x17, 0x49, 0x8B, 0xB6, 0x2C, 0xAF, + 0xD3, 0xA6, 0xB0, 0x82, 0xB7, 0xBF, 0x7A, 0x23, + 0x45, 0x0E, 0x19, 0x17, 0x99, 0x61, 0x9B, 0x92, + 0x51, 0x12, 0xD0, 0x72, 0x02, 0x5C, 0xA8, 0x88, + 0x54, 0x8C, 0x79, 0x1A, 0xA4, 0x22, 0x51, 0x50, + 0x4D, 0x5D, 0x1C, 0x1C, 0xDD, 0xB2, 0x13, 0x30, + 0x3B, 0x04, 0x9E, 0x73, 0x46, 0xE8, 0xD8, 0x3A, + 0xD5, 0x87, 0x83, 0x6F, 0x35, 0x28, 0x4E, 0x10, + 0x97, 0x27, 0xE6, 0x6B, 0xBC, 0xC9, 0x52, 0x1F, + 0xE0, 0xB1, 0x91, 0x63, 0x00, 0x47, 0xD1, 0x58, + 0xF7, 0x56, 0x40, 0xFF, 0xEB, 0x54, 0x56, 0x07, + 0x27, 0x40, 0x02, 0x1A, 0xFD, 0x15, 0xA4, 0x54, + 0x69, 0xC5, 0x83, 0x82, 0x9D, 0xAA, 0xC8, 0xA7, + 0xDE, 0xB0, 0x5B, 0x24, 0xF0, 0x56, 0x7E, 0x43, + 0x17, 0xB3, 0xE3, 0xB3, 0x33, 0x89, 0xB5, 0xC5, + 0xF8, 0xB0, 0x4B, 0x09, 0x9F, 0xB4, 0xD1, 0x03, + 0xA3, 0x24, 0x39, 0xF8, 0x5A, 0x3C, 0x21, 0xD2, + 0x1A, 0x71, 0xB9, 0xB9, 0x2A, 0x9B, 0x64, 0xEA, + 0x0A, 0xB8, 0x43, 0x12, 0xC7, 0x70, 0x23, 0x69, + 0x4F, 0xD6, 0x4E, 0xAA, 0xB9, 0x07, 0xA4, 0x35, + 0x39, 0xDD, 0xB2, 0x7B, 0xA0, 0xA8, 0x53, 0xCC, + 0x90, 0x69, 0xEA, 0xC8, 0x50, 0x8C, 0x65, 0x3E, + 0x60, 0x0B, 0x2A, 0xC0, 0x18, 0x38, 0x1B, 0x4B, + 0xB4, 0xA8, 0x79, 0xAC, 0xDA, 0xD3, 0x42, 0xF9, + 0x11, 0x79, 0xCA, 0x82, 0x49, 0x52, 0x5C, 0xB1, + 0x96, 0x8B, 0xBE, 0x52, 0xF7, 0x55, 0xB7, 0xF5, + 0xB4, 0x3D, 0x66, 0x63, 0xD7, 0xA3, 0xBF, 0x0F, + 0x33, 0x57, 0xD8, 0xA2, 0x1D, 0x15, 0xB5, 0x2D, + 0xB3, 0x81, 0x8E, 0xCE, 0x5B, 0x40, 0x2A, 0x60, + 0xC9, 0x93, 0xE7, 0xCF, 0x43, 0x64, 0x87, 0xB8, + 0xD2, 0xAE, 0x91, 0xE6, 0xC5, 0xB8, 0x82, 0x75, + 0xE7, 0x58, 0x24, 0xB0, 0x00, 0x7E, 0xF3, 0x12, + 0x3C, 0x0A, 0xB5, 0x1B, 0x5C, 0xC6, 0x1B, 0x9B, + 0x22, 0x38, 0x0D, 0xE6, 0x6C, 0x5B, 0x20, 0xB0, + 0x60, 0xCB, 0xB9, 0x86, 0xF8, 0x12, 0x3D, 0x94, + 0x06, 0x00, 0x49, 0xCD, 0xF8, 0x03, 0x68, 0x73, + 0xA7, 0xBE, 0x10, 0x94, 0x44, 0xA0, 0xA1, 0xCD, + 0x87, 0xA4, 0x8C, 0xAE, 0x54, 0x19, 0x24, 0x84, + 0xAF, 0x84, 0x44, 0x29, 0xC1, 0xC5, 0x8C, 0x29, + 0xAC, 0x62, 0x4C, 0xD5, 0x04, 0xF1, 0xC4, 0x4F, + 0x1E, 0x13, 0x47, 0x82, 0x2B, 0x6F, 0x22, 0x13, + 0x23, 0x85, 0x9A, 0x7F, 0x6F, 0x75, 0x4B, 0xFE, + 0x71, 0x0B, 0xDA, 0x60, 0x27, 0x62, 0x40, 0xA4, + 0xFF, 0x2A, 0x53, 0x50, 0x70, 0x37, 0x86, 0xF5, + 0x67, 0x1F, 0x44, 0x9F, 0x20, 0xC2, 0xA9, 0x5A, + 0xE7, 0xC2, 0x90, 0x3A, 0x42, 0xCB, 0x3B, 0x30, + 0x3F, 0xF4, 0xC4, 0x27, 0xC0, 0x8B, 0x11, 0xB4, + 0xCD, 0x31, 0xC4, 0x18, 0xC6, 0xD1, 0x8D, 0x08, + 0x61, 0x87, 0x3B, 0xFA, 0x03, 0x32, 0xF1, 0x12, + 0x71, 0x55, 0x2E, 0xD7, 0xC0, 0x35, 0xF0, 0xE4, + 0xBC, 0x42, 0x8C, 0x43, 0x72, 0x0B, 0x39, 0xA6, + 0x51, 0x66, 0xBA, 0x9C, 0x2D, 0x3D, 0x77, 0x0E, + 0x13, 0x03, 0x60, 0xCC, 0x23, 0x84, 0xE8, 0x30, + 0x95, 0xB1, 0xA1, 0x59, 0x49, 0x55, 0x33, 0xF1, + 0x16, 0xC7, 0xB5, 0x58, 0xB6, 0x50, 0xDB, 0x04, + 0xD5, 0xA2, 0x6E, 0xAA, 0xA0, 0x8C, 0x3E, 0xE5, + 0x7D, 0xE4, 0x5A, 0x7F, 0x88, 0xC6, 0xA3, 0xCE, + 0xB2, 0x4D, 0xC5, 0x39, 0x7B, 0x88, 0xC3, 0xCE, + 0xF0, 0x03, 0x31, 0x9B, 0xB0, 0x23, 0x3F, 0xD6, + 0x92, 0xFD, 0xA1, 0x52, 0x44, 0x75, 0xB3, 0x51, + 0xF3, 0xC7, 0x82, 0x18, 0x2D, 0xEC, 0xF5, 0x90, + 0xB7, 0x72, 0x3B, 0xE4, 0x00, 0xBE, 0x14, 0x80, + 0x9C, 0x44, 0x32, 0x99, 0x63, 0xFC, 0x46, 0x95, + 0x92, 0x11, 0xD6, 0xA6, 0x23, 0x33, 0x95, 0x37, + 0x84, 0x8C, 0x25, 0x16, 0x69, 0x94, 0x1D, 0x90, + 0xB1, 0x30, 0x25, 0x8A, 0xDF, 0x55, 0xA7, 0x20, + 0xA7, 0x24, 0xE8, 0xB6, 0xA6, 0xCA, 0xE3, 0xC2, + 0x26, 0x4B, 0x16, 0x24, 0xCC, 0xBE, 0x7B, 0x45, + 0x6B, 0x30, 0xC8, 0xC7, 0x39, 0x32, 0x94, 0xCA, + 0x51, 0x80, 0xBC, 0x83, 0x7D, 0xD2, 0xE4, 0x5D, + 0xBD, 0x59, 0xB6, 0xE1, 0x7B, 0x24, 0xFE, 0x93, + 0x05, 0x2E, 0xB7, 0xC4, 0x3B, 0x27, 0xAC, 0x3D, + 0xC2, 0x49, 0xCA, 0x0C, 0xBC, 0xA4, 0xFB, 0x58, + 0x97, 0xC0, 0xB7, 0x44, 0x08, 0x8A, 0x8A, 0x07, + 0x79, 0xD3, 0x22, 0x33, 0x82, 0x6A, 0x01, 0xDD, + 0x64, 0x89, 0x95, 0x2A, 0x48, 0x25, 0xE5, 0x35, + 0x8A, 0x70, 0x0B, 0xE0, 0xE1, 0x79, 0xAC, 0x19, + 0x77, 0x10, 0xD8, 0x3E, 0xCC, 0x85, 0x3E, 0x52, + 0x69, 0x5E, 0x9B, 0xF8, 0x7B, 0xB1, 0xF6, 0xCB, + 0xD0, 0x5B, 0x02, 0xD4, 0xE6, 0x79, 0xE3, 0xB8, + 0x8D, 0xD4, 0x83, 0xB0, 0x74, 0x9B, 0x11, 0xBD, + 0x37, 0xB3, 0x83, 0xDC, 0xCA, 0x71, 0xF9, 0x09, + 0x18, 0x34, 0xA1, 0x69, 0x55, 0x02, 0xC4, 0xB9, + 0x5F, 0xC9, 0x11, 0x8C, 0x1C, 0xFC, 0x34, 0xC8, + 0x4C, 0x22, 0x65, 0xBB, 0xBC, 0x56, 0x3C, 0x28, + 0x26, 0x66, 0xB6, 0x0A, 0xE5, 0xC7, 0xF3, 0x85, + 0x1D, 0x25, 0xEC, 0xBB, 0x50, 0x21, 0xCC, 0x38, + 0xCB, 0x73, 0xEB, 0x6A, 0x34, 0x11, 0xB1, 0xC2, + 0x90, 0x46, 0xCA, 0x66, 0x54, 0x06, 0x67, 0xD1, + 0x36, 0x95, 0x44, 0x60, 0xC6, 0xFC, 0xBC, 0x4B, + 0xC7, 0xC0, 0x49, 0xBB, 0x04, 0x7F, 0xA6, 0x7A, + 0x63, 0xB3, 0xCC, 0x11, 0x11, 0xC1, 0xD8, 0xAC, + 0x27, 0xE8, 0x05, 0x8B, 0xCC, 0xA4, 0xA1, 0x54, + 0x55, 0x85, 0x8A, 0x58, 0x35, 0x8F, 0x7A, 0x61, + 0x02, 0x0B, 0xC9, 0xC4, 0xC1, 0x7F, 0x8B, 0x95, + 0xC2, 0x68, 0xCC, 0xB4, 0x04, 0xB9, 0xAA, 0xB4, + 0xA2, 0x72, 0xA2, 0x1A, 0x70, 0xDA, 0xF6, 0xB6, + 0xF1, 0x51, 0x21, 0xEE, 0x01, 0xC1, 0x56, 0xA3, + 0x54, 0xAA, 0x17, 0x08, 0x7E, 0x07, 0x70, 0x2E, + 0xAB, 0x38, 0xB3, 0x24, 0x1F, 0xDB, 0x55, 0x3F, + 0x65, 0x73, 0x39, 0xD5, 0xE2, 0x9D, 0xC5, 0xD9, + 0x1B, 0x7A, 0x5A, 0x82, 0x8E, 0xE9, 0x59, 0xFE, + 0xBB, 0x90, 0xB0, 0x72, 0x29, 0xF6, 0xE4, 0x9D, + 0x23, 0xC3, 0xA1, 0x90, 0x29, 0x70, 0x42, 0xFB, + 0x43, 0x98, 0x69, 0x55, 0xB6, 0x9C, 0x28, 0xE1, + 0x01, 0x6F, 0x77, 0xA5, 0x8B, 0x43, 0x15, 0x14, + 0xD2, 0x1B, 0x88, 0x88, 0x99, 0xC3, 0x60, 0x82, + 0x76, 0x08, 0x1B, 0x75, 0xF5, 0x68, 0x09, 0x7C, + 0xDC, 0x17, 0x48, 0xF3, 0x23, 0x07, 0x88, 0x58, + 0x15, 0xF3, 0xAE, 0xC9, 0x65, 0x18, 0x19, 0xAA, + 0x68, 0x73, 0xD1, 0xA4, 0xEB, 0x83, 0xB1, 0x95, + 0x38, 0x43, 0xB9, 0x34, 0x22, 0x51, 0x94, 0x83, + 0xFE, 0xF0, 0x05, 0x9D, 0x36, 0xBB, 0x2D, 0xB1, + 0xF3, 0xD4, 0x68, 0xFB, 0x06, 0x8C, 0x86, 0xE8, + 0x97, 0x37, 0x33, 0xC3, 0x98, 0xEA, 0xF0, 0x0E, + 0x17, 0x02, 0xC6, 0x73, 0x4A, 0xD8, 0xEB, 0x3B, + 0x62, 0x01, 0x30, 0xD6, 0xC2, 0xB8, 0xC9, 0x04, + 0xA3, 0xBB, 0x93, 0x07, 0xBE, 0x51, 0x03, 0xF8, + 0xD8, 0x14, 0x50, 0x5F, 0xB6, 0xA6, 0x0A, 0xF7, + 0x93, 0x7E, 0xA6, 0xCA, 0xA1, 0x17, 0x31, 0x5E, + 0x84, 0xCC, 0x91, 0x21, 0xAE, 0x56, 0xFB, 0xF3, + 0x9E, 0x67, 0xAD, 0xBD, 0x83, 0xAD, 0x2D, 0x3E, + 0x3B, 0xB8, 0x08, 0x43, 0x64, 0x52, 0x06, 0xBD, + 0xD9, 0xF2, 0xF6, 0x29, 0xE3, 0xCC, 0x49, 0xB7 }; #endif #ifndef WOLFSSL_NO_KYBER768 static const byte seed_768[KYBER_MAKEKEY_RAND_SZ] = { - 0x92, 0xAC, 0x7D, 0x1F, 0x83, 0xBA, 0xFA, 0xE6, - 0xEE, 0x86, 0xFE, 0x00, 0xF9, 0x5D, 0x81, 0x33, - 0x75, 0x77, 0x24, 0x34, 0x86, 0x0F, 0x5F, 0xF7, - 0xD5, 0x4F, 0xFC, 0x37, 0x39, 0x9B, 0xC4, 0xCC, - 0x92, 0xAC, 0x7D, 0x1F, 0x83, 0xBA, 0xFA, 0xE6, - 0xEE, 0x86, 0xFE, 0x00, 0xF9, 0x5D, 0x81, 0x33, - 0x75, 0x77, 0x24, 0x34, 0x86, 0x0F, 0x5F, 0xF7, - 0xD5, 0x4F, 0xFC, 0x37, 0x39, 0x9B, 0xC4, 0xCC + /* d */ + 0xE3, 0x4A, 0x70, 0x1C, 0x4C, 0x87, 0x58, 0x2F, + 0x42, 0x26, 0x4E, 0xE4, 0x22, 0xD3, 0xC6, 0x84, + 0xD9, 0x76, 0x11, 0xF2, 0x52, 0x3E, 0xFE, 0x0C, + 0x99, 0x8A, 0xF0, 0x50, 0x56, 0xD6, 0x93, 0xDC, + /* z */ + 0xA8, 0x57, 0x68, 0xF3, 0x48, 0x6B, 0xD3, 0x2A, + 0x01, 0xBF, 0x9A, 0x8F, 0x21, 0xEA, 0x93, 0x8E, + 0x64, 0x8E, 0xAE, 0x4E, 0x54, 0x48, 0xC3, 0x4C, + 0x3E, 0xB8, 0x88, 0x20, 0xB1, 0x59, 0xEE, 0xDD }; static const byte ek_768[KYBER768_PUBLIC_KEY_SIZE] = { - 0xD2, 0xE6, 0x9A, 0x05, 0x53, 0x4A, 0x72, 0x32, - 0xC5, 0xF1, 0xB7, 0x66, 0xE9, 0x3A, 0x5E, 0xE2, - 0xEA, 0x1B, 0x26, 0xE8, 0x60, 0xA3, 0x44, 0x1A, - 0xDE, 0xA9, 0x1E, 0xDB, 0x78, 0x2C, 0xAB, 0xC8, - 0xA5, 0xD0, 0x11, 0xA2, 0x1B, 0xC3, 0x88, 0xE7, - 0xF4, 0x86, 0xF0, 0xB7, 0x99, 0x30, 0x79, 0xAE, - 0x3F, 0x1A, 0x7C, 0x85, 0xD2, 0x7D, 0x0F, 0x49, - 0x21, 0x84, 0xD5, 0x90, 0x62, 0x14, 0x2B, 0x76, - 0xA4, 0x37, 0x34, 0xA9, 0x0D, 0x55, 0x6A, 0x95, - 0xDC, 0x48, 0x3D, 0xD8, 0x21, 0x04, 0xED, 0x58, - 0xCA, 0x15, 0x71, 0xC3, 0x96, 0x85, 0x82, 0x79, - 0x51, 0x43, 0x4C, 0xC1, 0x00, 0x1A, 0xA4, 0xC8, - 0x13, 0x26, 0x1E, 0x4F, 0x93, 0x02, 0x8E, 0x14, - 0xCD, 0x08, 0xF7, 0x68, 0xA4, 0x54, 0x31, 0x0C, - 0x3B, 0x01, 0x0C, 0x83, 0xB7, 0x4D, 0x04, 0xA5, - 0x7B, 0xB9, 0x77, 0xB3, 0xD8, 0xBC, 0xF3, 0xAA, - 0xA7, 0x8C, 0xA1, 0x2B, 0x78, 0xF0, 0x10, 0xD9, - 0x51, 0x34, 0x92, 0x8A, 0x5E, 0x5D, 0x96, 0xA0, - 0x29, 0xB4, 0x42, 0xA4, 0x18, 0x88, 0x03, 0x8B, - 0x29, 0xC2, 0xF1, 0x22, 0xB0, 0xB6, 0xB3, 0xAF, - 0x12, 0x1A, 0xEA, 0x29, 0xA0, 0x55, 0x53, 0xBD, - 0xF1, 0xDB, 0x60, 0x7A, 0xFB, 0x17, 0x00, 0x18, - 0x60, 0xAF, 0x18, 0x23, 0xBC, 0xF0, 0x3D, 0xB3, - 0xB4, 0x41, 0xDA, 0x16, 0x3A, 0x28, 0xC5, 0x23, - 0xA5, 0xFB, 0x46, 0x69, 0xA6, 0x42, 0x34, 0xA4, - 0xBC, 0xD1, 0x21, 0x7F, 0xF2, 0x63, 0x5B, 0xD9, - 0x76, 0x80, 0xFF, 0x93, 0x8D, 0xBC, 0xF1, 0x0E, - 0x95, 0x32, 0xA9, 0xA7, 0x9A, 0x5B, 0x07, 0x3A, - 0x9E, 0x8D, 0xB2, 0x12, 0x3D, 0x21, 0x0F, 0xAE, - 0xA2, 0x00, 0xB6, 0x64, 0x83, 0x8E, 0x80, 0x07, - 0x1F, 0x2B, 0xA2, 0x54, 0xAA, 0xC8, 0x90, 0xA4, - 0x6E, 0x28, 0xEC, 0x34, 0x2D, 0x92, 0x81, 0x2B, - 0x01, 0x59, 0x30, 0x71, 0x65, 0x7E, 0x7A, 0x3A, - 0x4A, 0x75, 0xCB, 0x3D, 0x52, 0x79, 0xCE, 0x88, - 0x40, 0x5A, 0xC5, 0xAD, 0xAC, 0xB2, 0x05, 0x1E, - 0x02, 0x2E, 0xE0, 0xAC, 0x9B, 0xBF, 0xE3, 0x2D, - 0xEF, 0x98, 0x66, 0x7E, 0xD3, 0x47, 0xAD, 0xCB, - 0x39, 0x30, 0xF3, 0xCA, 0xD0, 0x31, 0x39, 0x1B, - 0x70, 0x9A, 0x4E, 0x61, 0xB8, 0xDD, 0x4B, 0x3F, - 0xB7, 0x41, 0xB5, 0xBD, 0x60, 0xBF, 0x30, 0x40, - 0x15, 0xEE, 0x75, 0x46, 0xA2, 0x4B, 0x59, 0xEA, - 0xDC, 0xA1, 0x37, 0xC7, 0x12, 0x50, 0x74, 0x72, - 0x6B, 0x76, 0x86, 0xEC, 0x55, 0x1B, 0x7B, 0xC2, - 0x6B, 0xBD, 0xB2, 0x0F, 0xC3, 0x78, 0x35, 0x34, - 0xE3, 0x4E, 0xE1, 0xF1, 0xBC, 0x6B, 0x77, 0xAB, - 0x49, 0xA6, 0x66, 0x78, 0x46, 0x97, 0x57, 0x78, - 0xC3, 0xC5, 0x36, 0x83, 0x04, 0x50, 0xA3, 0xFA, - 0x91, 0x02, 0x59, 0x72, 0x2F, 0x3F, 0x80, 0x6E, - 0x6E, 0xB4, 0xB9, 0x34, 0x67, 0x63, 0xFE, 0xF0, - 0x92, 0x2B, 0xC4, 0xB6, 0xEB, 0x38, 0x26, 0xAF, - 0xF2, 0x4E, 0xAD, 0xC6, 0xCF, 0x6E, 0x47, 0x7C, - 0x2E, 0x05, 0x5C, 0xFB, 0x7A, 0x90, 0xA5, 0x5C, - 0x06, 0xD0, 0xB2, 0xA2, 0xF5, 0x11, 0x60, 0x69, - 0xE6, 0x4A, 0x5B, 0x50, 0x78, 0xC0, 0x57, 0x7B, - 0xC8, 0xE7, 0x90, 0x0E, 0xA7, 0x1C, 0x34, 0x1C, - 0x02, 0xAD, 0x85, 0x4E, 0xA5, 0xA0, 0x1A, 0xF2, - 0xA6, 0x05, 0xCB, 0x20, 0x68, 0xD5, 0x24, 0x38, - 0xCD, 0xDC, 0x60, 0xB0, 0x38, 0x82, 0xCC, 0x02, - 0x4D, 0x13, 0x04, 0x5F, 0x2B, 0xA6, 0xB0, 0xF4, - 0x46, 0xAA, 0xA5, 0x95, 0x87, 0x60, 0x61, 0x79, - 0x45, 0x37, 0x1F, 0xD7, 0x8C, 0x28, 0xA4, 0x06, - 0x77, 0xA6, 0xE7, 0x2F, 0x51, 0x3B, 0x9E, 0x06, - 0x67, 0xA9, 0xBA, 0xF4, 0x46, 0xC1, 0xBA, 0x93, - 0x1B, 0xA8, 0x18, 0x34, 0x23, 0x47, 0x92, 0xA2, - 0xA2, 0xB2, 0xB3, 0x70, 0x1F, 0x31, 0xB7, 0xCF, - 0x46, 0x7C, 0x80, 0xF1, 0x98, 0x11, 0x41, 0xBB, - 0x45, 0x77, 0x93, 0xE1, 0x30, 0x70, 0x91, 0xC4, - 0x8B, 0x59, 0x14, 0x64, 0x6A, 0x60, 0xCE, 0x1A, - 0x30, 0x15, 0x43, 0x77, 0x9D, 0x7C, 0x33, 0x42, - 0xAD, 0x17, 0x97, 0x96, 0xC2, 0xC4, 0x40, 0xD9, - 0x9D, 0xF9, 0xD4, 0x1B, 0x52, 0xE3, 0x26, 0x25, - 0xA8, 0x2A, 0xA5, 0xF5, 0x79, 0xA9, 0x92, 0x0B, - 0xFF, 0xBA, 0x96, 0x4F, 0xA7, 0x0D, 0xB2, 0x59, - 0xC8, 0x5E, 0x68, 0xC8, 0x13, 0x81, 0x7B, 0x13, - 0x47, 0xBF, 0x19, 0x81, 0x4D, 0xA5, 0xE9, 0x36, - 0x4A, 0x46, 0x45, 0xE6, 0x21, 0x92, 0x3D, 0x95, - 0x5C, 0x21, 0x1A, 0x55, 0xD3, 0x55, 0xC8, 0x16, - 0xDA, 0x04, 0x73, 0x0A, 0xA3, 0x24, 0x08, 0x5E, - 0x62, 0x2B, 0x51, 0xD6, 0x10, 0x9B, 0x49, 0xF6, - 0x73, 0xAD, 0xD0, 0x0E, 0x41, 0x47, 0x55, 0xC8, - 0x02, 0x4A, 0xA0, 0x16, 0x4F, 0x24, 0x55, 0x6D, - 0xED, 0x96, 0x3D, 0x61, 0x14, 0x38, 0x56, 0xCB, - 0x4F, 0xF0, 0x56, 0x7E, 0x33, 0x20, 0x73, 0x0D, - 0xBC, 0xBF, 0x12, 0xF6, 0x6E, 0x2B, 0x70, 0xB2, - 0x00, 0x54, 0xA6, 0xDE, 0xA4, 0x26, 0x14, 0xB5, - 0x0E, 0xF7, 0x2B, 0x15, 0x6F, 0x51, 0x49, 0xFC, - 0x26, 0x3D, 0xD7, 0xE0, 0x39, 0xC5, 0x5A, 0x3E, - 0xE9, 0x82, 0x7D, 0xF9, 0x2C, 0x56, 0x5D, 0x24, - 0xC5, 0x5E, 0x0A, 0x81, 0xC6, 0x49, 0x46, 0x95, - 0x34, 0x4D, 0x94, 0x87, 0x48, 0xAF, 0xBA, 0x9F, - 0x76, 0x2C, 0x0E, 0xA9, 0x0B, 0xB7, 0x24, 0x89, - 0x79, 0x02, 0x00, 0x07, 0x75, 0x61, 0x39, 0x49, - 0x60, 0x2C, 0x48, 0xC7, 0x8A, 0x94, 0x40, 0x67, - 0x8C, 0x24, 0x08, 0x6D, 0x32, 0x6D, 0x79, 0x64, - 0x3B, 0xAF, 0x70, 0x36, 0xC6, 0x6C, 0x7E, 0x02, - 0x6A, 0xAE, 0xFD, 0xA2, 0x80, 0x7A, 0x60, 0xBD, - 0x7F, 0xC9, 0x13, 0x63, 0xBB, 0x02, 0x34, 0xA5, - 0x90, 0x98, 0x4A, 0xA0, 0x11, 0xF1, 0x1D, 0x40, - 0x26, 0x82, 0x18, 0xA1, 0x58, 0x83, 0x77, 0xB3, - 0xD7, 0x67, 0x1B, 0x8B, 0x99, 0x78, 0x99, 0x19, - 0xB8, 0x6E, 0xE8, 0x2B, 0x18, 0xEC, 0x22, 0xD4, - 0xE8, 0x0A, 0x1F, 0x27, 0x85, 0x3D, 0x88, 0x94, - 0x19, 0xD4, 0x60, 0xDE, 0xF7, 0x56, 0x7A, 0xA4, - 0x56, 0x79, 0x69, 0xC4, 0x30, 0x48, 0xC3, 0x2B, - 0x84, 0x62, 0xA9, 0xC9, 0x38, 0x6E, 0xB3, 0x15, - 0x2A, 0x69, 0x76, 0xAA, 0x78, 0x3C, 0xDD, 0x1A, - 0x8C, 0x57, 0xA9, 0xB6, 0xBB, 0xD8, 0x37, 0xA0, - 0x06, 0x24, 0xB5, 0x8B, 0x4B, 0xA3, 0xDB, 0xB6, - 0x3B, 0xB8, 0x20, 0x0E, 0x7B, 0xC8, 0x88, 0x81, - 0xBE, 0xBD, 0xA9, 0x25, 0xBC, 0xA0, 0x28, 0xE2, - 0x91, 0xAA, 0x1C, 0x22, 0x53, 0x9C, 0xD0, 0x4F, - 0x90, 0x09, 0x0D, 0x7F, 0x74, 0x10, 0x8C, 0x32, - 0xB8, 0x02, 0x2C, 0x15, 0x91, 0xC8, 0x81, 0xE7, - 0x63, 0x04, 0xE2, 0x40, 0x81, 0x90, 0xE2, 0x0F, - 0x09, 0xA5, 0x4F, 0xC2, 0x34, 0x20, 0xE2, 0x62, - 0x0E, 0x9D, 0x87, 0xA3, 0x10, 0x8A, 0x94, 0xFE, - 0xEA, 0x72, 0xD5, 0xAB, 0x7F, 0xCF, 0xB9, 0x72, - 0xE6, 0x56, 0x1B, 0x1A, 0x7B, 0x06, 0x2F, 0x1A, - 0x68, 0x2E, 0x02, 0x0A, 0xA2, 0x56, 0x28, 0x12, - 0xB2, 0x96, 0x54, 0x7B, 0x91, 0x78, 0x24, 0xCD, - 0xB8, 0x8C, 0x58, 0x2B, 0x5A, 0x68, 0x90, 0x17, - 0x7B, 0xC7, 0x0C, 0x91, 0xAC, 0xAC, 0x9A, 0xBE, - 0x29, 0x0A, 0xEB, 0x2C, 0x34, 0xA7, 0xE2, 0x36, - 0x89, 0x55, 0xCB, 0x45, 0x6A, 0x34, 0x53, 0x68, - 0xAB, 0xE3, 0xB9, 0x1B, 0x47, 0xFC, 0x30, 0xB0, - 0x23, 0x3A, 0x09, 0xBA, 0x79, 0xFB, 0x11, 0x23, - 0x8A, 0xC5, 0x08, 0xCC, 0xE6, 0x10, 0x95, 0xF8, - 0x54, 0xC2, 0x32, 0x04, 0xA8, 0xD3, 0x6B, 0xFC, - 0x2C, 0x6E, 0x05, 0xA7, 0x2A, 0xF5, 0x24, 0x4B, - 0x17, 0xC1, 0x21, 0x01, 0xE0, 0x14, 0x51, 0x57, - 0x0E, 0xB1, 0x10, 0x56, 0x7E, 0x85, 0x0E, 0x79, - 0xC0, 0x00, 0x14, 0x24, 0x41, 0xFE, 0x41, 0x60, - 0x02, 0x75, 0x45, 0xF6, 0x29, 0x0E, 0x85, 0x45, - 0x1B, 0x80, 0x23, 0x4A, 0x94, 0x06, 0xC3, 0x90, - 0xB0, 0xCE, 0xA3, 0xC8, 0x33, 0x5D, 0x4C, 0x6F, - 0x85, 0x50, 0xB5, 0x44, 0xC9, 0x34, 0x3E, 0x61, - 0xBA, 0x1C, 0x84, 0x89, 0xD1, 0xB0, 0x39, 0x97, - 0x39, 0x16, 0x8A, 0xF7, 0x40, 0xA4, 0x81, 0xB0, - 0xF5, 0xC3, 0x37, 0x25, 0x30, 0xCA, 0x06, 0xB5, - 0x08, 0xEC, 0xE8, 0x38, 0xAB, 0x78, 0xBE, 0xE1, - 0xE5, 0x97, 0xA9, 0xB1, 0x4F, 0x6A, 0xEC, 0x7A, - 0x3B, 0xD1, 0xAA, 0x8D, 0x10, 0xBA, 0xC2, 0x3B, - 0x98, 0x02, 0x90, 0x2C, 0xD5, 0x29, 0xAB, 0x6E, - 0xF5, 0x4D, 0xB3, 0x11, 0x0C, 0xFB, 0x56, 0x1E, - 0x7E, 0x69, 0x48, 0xE6, 0x52, 0x81, 0x25, 0x04, - 0x16, 0xC3, 0x49, 0xC8, 0x10, 0x0B, 0x3B, 0x4D, - 0x3D, 0x0F, 0x62, 0xAC, 0xAD, 0x8D, 0x16, 0x11, - 0x75, 0xB1, 0x34, 0xF7, 0x56, 0x49, 0x37, 0xCD + 0x6D, 0x14, 0xA0, 0x71, 0xF7, 0xCC, 0x45, 0x25, + 0x58, 0xD5, 0xE7, 0x1A, 0x7B, 0x08, 0x70, 0x62, + 0xEC, 0xB1, 0x38, 0x68, 0x44, 0x58, 0x82, 0x46, + 0x12, 0x64, 0x02, 0xB1, 0xFA, 0x16, 0x37, 0x73, + 0x3C, 0xD5, 0xF6, 0x0C, 0xC8, 0x4B, 0xCB, 0x64, + 0x6A, 0x78, 0x92, 0x61, 0x4D, 0x7C, 0x51, 0xB1, + 0xC7, 0xF1, 0xA2, 0x79, 0x91, 0x32, 0xF1, 0x34, + 0x27, 0xDC, 0x48, 0x21, 0x58, 0xDA, 0x25, 0x44, + 0x70, 0xA5, 0x9E, 0x00, 0xA4, 0xE4, 0x96, 0x86, + 0xFD, 0xC0, 0x77, 0x55, 0x93, 0x67, 0x27, 0x0C, + 0x21, 0x53, 0xF1, 0x10, 0x07, 0x59, 0x2C, 0x9C, + 0x43, 0x10, 0xCF, 0x8A, 0x12, 0xC6, 0xA8, 0x71, + 0x3B, 0xD6, 0xBB, 0x51, 0xF3, 0x12, 0x4F, 0x98, + 0x9B, 0xA0, 0xD5, 0x40, 0x73, 0xCC, 0x24, 0x2E, + 0x09, 0x68, 0x78, 0x0B, 0x87, 0x5A, 0x86, 0x9E, + 0xFB, 0x85, 0x15, 0x86, 0xB9, 0xA8, 0x68, 0xA3, + 0x84, 0xB9, 0xE6, 0x82, 0x1B, 0x20, 0x1B, 0x93, + 0x2C, 0x45, 0x53, 0x69, 0xA7, 0x39, 0xEC, 0x22, + 0x56, 0x9C, 0x97, 0x7C, 0x21, 0x2B, 0x38, 0x18, + 0x71, 0x81, 0x36, 0x56, 0xAF, 0x5B, 0x56, 0x7E, + 0xF8, 0x93, 0xB5, 0x84, 0x62, 0x4C, 0x86, 0x3A, + 0x25, 0x90, 0x00, 0xF1, 0x7B, 0x25, 0x4B, 0x98, + 0xB1, 0x85, 0x09, 0x7C, 0x50, 0xEB, 0xB6, 0x8B, + 0x24, 0x43, 0x42, 0xE0, 0x5D, 0x4D, 0xE5, 0x20, + 0x12, 0x5B, 0x8E, 0x10, 0x33, 0xB1, 0x43, 0x60, + 0x93, 0xAC, 0xE7, 0xCE, 0x8E, 0x71, 0xB4, 0x58, + 0xD5, 0x25, 0x67, 0x33, 0x63, 0x04, 0x5A, 0x3B, + 0x3E, 0xEA, 0x94, 0x55, 0x42, 0x8A, 0x39, 0x87, + 0x05, 0xA4, 0x23, 0x27, 0xAD, 0xB3, 0x77, 0x4B, + 0x70, 0x57, 0xF4, 0x2B, 0x01, 0x7E, 0xC0, 0x73, + 0x9A, 0x98, 0x3F, 0x19, 0xE8, 0x21, 0x4D, 0x09, + 0x19, 0x5F, 0xA2, 0x4D, 0x2D, 0x57, 0x1D, 0xB7, + 0x3C, 0x19, 0xA6, 0xF8, 0x46, 0x0E, 0x50, 0x83, + 0x0D, 0x41, 0x5F, 0x62, 0x7B, 0x88, 0xE9, 0x4A, + 0x7B, 0x15, 0x37, 0x91, 0xA0, 0xC0, 0xC7, 0xE9, + 0x48, 0x4C, 0x74, 0xD5, 0x3C, 0x71, 0x48, 0x89, + 0xF0, 0xE3, 0x21, 0xB6, 0x66, 0x0A, 0x53, 0x2A, + 0x5B, 0xC0, 0xE5, 0x57, 0xFB, 0xCA, 0x35, 0xE2, + 0x9B, 0xC6, 0x11, 0x20, 0x0E, 0xD3, 0xC6, 0x33, + 0x07, 0x7A, 0x4D, 0x87, 0x3C, 0x5C, 0xC6, 0x70, + 0x06, 0xB7, 0x53, 0xBF, 0x6D, 0x6B, 0x7A, 0xF6, + 0xCA, 0x40, 0x2A, 0xB6, 0x18, 0x23, 0x6C, 0x0A, + 0xFF, 0xBC, 0x80, 0x1F, 0x82, 0x22, 0xFB, 0xC3, + 0x6C, 0xE0, 0x98, 0x4E, 0x2B, 0x18, 0xC9, 0x44, + 0xBB, 0xCB, 0xEF, 0x03, 0xB1, 0xE1, 0x36, 0x1C, + 0x1F, 0x44, 0xB0, 0xD7, 0x34, 0xAF, 0xB1, 0x56, + 0x6C, 0xFF, 0x87, 0x44, 0xDA, 0x8B, 0x99, 0x43, + 0xD6, 0xB4, 0x5A, 0x3C, 0x09, 0x03, 0x07, 0x02, + 0xCA, 0x20, 0x1F, 0xFE, 0x20, 0xCB, 0x7E, 0xC5, + 0xB0, 0xD4, 0x14, 0x9E, 0xE2, 0xC2, 0x8E, 0x8B, + 0x23, 0x37, 0x4F, 0x47, 0x1B, 0x57, 0x15, 0x0D, + 0x0E, 0xC9, 0x33, 0x62, 0x61, 0xA2, 0xD5, 0xCB, + 0x84, 0xA3, 0xAC, 0xAC, 0xC4, 0x28, 0x94, 0x73, + 0xA4, 0xC0, 0xAB, 0xC6, 0x17, 0xC9, 0xAB, 0xC1, + 0x78, 0x73, 0x44, 0x34, 0xC8, 0x2E, 0x16, 0x85, + 0x58, 0x8A, 0x5C, 0x2E, 0xA2, 0x67, 0x8F, 0x6B, + 0x3C, 0x22, 0x28, 0x73, 0x31, 0x30, 0xC4, 0x66, + 0xE5, 0xB8, 0x6E, 0xF4, 0x91, 0x15, 0x3E, 0x48, + 0x66, 0x22, 0x47, 0xB8, 0x75, 0xD2, 0x01, 0x02, + 0x0B, 0x56, 0x6B, 0x81, 0xB6, 0x4D, 0x83, 0x9A, + 0xB4, 0x63, 0x3B, 0xAA, 0x8A, 0xCE, 0x20, 0x2B, + 0xAA, 0xB4, 0x49, 0x62, 0x97, 0xF9, 0x80, 0x7A, + 0xDB, 0xBB, 0x1E, 0x33, 0x2C, 0x6F, 0x80, 0x22, + 0xB2, 0xA1, 0x8C, 0xFD, 0xD4, 0xA8, 0x25, 0x30, + 0xB6, 0xD3, 0xF0, 0x07, 0xC3, 0x35, 0x38, 0x98, + 0xD9, 0x66, 0xCC, 0x2C, 0x21, 0xCB, 0x42, 0x44, + 0xBD, 0x00, 0x44, 0x3F, 0x20, 0x98, 0x70, 0xAC, + 0xC4, 0x2B, 0xC3, 0x30, 0x68, 0xC7, 0x24, 0xEC, + 0x17, 0x22, 0x36, 0x19, 0xC1, 0x09, 0x3C, 0xCA, + 0x6A, 0xEB, 0x29, 0x50, 0x06, 0x64, 0xD1, 0x22, + 0x50, 0x36, 0xB4, 0xB8, 0x10, 0x91, 0x90, 0x69, + 0x69, 0x48, 0x1F, 0x1C, 0x72, 0x3C, 0x14, 0x0B, + 0x9D, 0x6C, 0x16, 0x8F, 0x5B, 0x64, 0xBE, 0xA6, + 0x9C, 0x5F, 0xD6, 0x38, 0x5D, 0xF7, 0x36, 0x4B, + 0x87, 0x23, 0xBC, 0xC8, 0x5E, 0x03, 0x8C, 0x7E, + 0x46, 0x4A, 0x90, 0x0D, 0x68, 0xA2, 0x12, 0x78, + 0x18, 0x99, 0x42, 0x17, 0xAE, 0xC8, 0xBD, 0xB3, + 0x9A, 0x97, 0x0A, 0x99, 0x63, 0xDE, 0x93, 0x68, + 0x8E, 0x2A, 0xC8, 0x2A, 0xBC, 0xC2, 0x2F, 0xB9, + 0x27, 0x7B, 0xA2, 0x20, 0x09, 0xE8, 0x78, 0x38, + 0x1A, 0x38, 0x16, 0x39, 0x01, 0xC7, 0xD4, 0xC8, + 0x50, 0x19, 0x53, 0x8D, 0x35, 0xCA, 0xAE, 0x9C, + 0x41, 0xAF, 0x8C, 0x92, 0x9E, 0xE2, 0x0B, 0xB0, + 0x8C, 0xA6, 0x19, 0xE7, 0x2C, 0x2F, 0x22, 0x62, + 0xC1, 0xC9, 0x93, 0x85, 0x72, 0x55, 0x1A, 0xC0, + 0x2D, 0xC9, 0x26, 0x8F, 0xBC, 0xC3, 0x5D, 0x79, + 0x01, 0x1C, 0x3C, 0x09, 0x0A, 0xD4, 0x0A, 0x4F, + 0x11, 0x1C, 0x9B, 0xE5, 0x5C, 0x42, 0x7E, 0xB7, + 0x96, 0xC1, 0x93, 0x2D, 0x86, 0x73, 0x57, 0x9A, + 0xF1, 0xB4, 0xC6, 0x38, 0xB0, 0x94, 0x44, 0x89, + 0x01, 0x2A, 0x25, 0x59, 0xA3, 0xB0, 0x24, 0x81, + 0xB0, 0x1A, 0xC3, 0x0B, 0xA8, 0x96, 0x0F, 0x80, + 0xC0, 0xC2, 0xB3, 0x94, 0x7D, 0x36, 0xA1, 0x2C, + 0x08, 0x04, 0x98, 0xBE, 0xE4, 0x48, 0x71, 0x6C, + 0x97, 0x34, 0x16, 0xC8, 0x24, 0x28, 0x04, 0xA3, + 0xDA, 0x09, 0x9E, 0xE1, 0x37, 0xB0, 0xBA, 0x90, + 0xFE, 0x4A, 0x5C, 0x6A, 0x89, 0x20, 0x02, 0x76, + 0xA0, 0xCF, 0xB6, 0x43, 0xEC, 0x2C, 0x56, 0xA2, + 0xD7, 0x08, 0xD7, 0xB4, 0x37, 0x3E, 0x44, 0xC1, + 0x50, 0x2A, 0x76, 0x3A, 0x60, 0x05, 0x86, 0xE6, + 0xCD, 0xA6, 0x27, 0x38, 0x97, 0xD4, 0x44, 0x48, + 0x28, 0x7D, 0xC2, 0xE6, 0x02, 0xDC, 0x39, 0x20, + 0x0B, 0xF6, 0x16, 0x62, 0x36, 0x55, 0x9F, 0xD1, + 0x2A, 0x60, 0x89, 0x2A, 0xEB, 0x15, 0x3D, 0xD6, + 0x51, 0xBB, 0x46, 0x99, 0x10, 0xB4, 0xB3, 0x46, + 0x69, 0xF9, 0x1D, 0xA8, 0x65, 0x4D, 0x1E, 0xB7, + 0x2E, 0xB6, 0xE0, 0x28, 0x00, 0xB3, 0xB0, 0xA7, + 0xD0, 0xA4, 0x8C, 0x83, 0x68, 0x54, 0xD3, 0xA8, + 0x3E, 0x65, 0x56, 0x9C, 0xB7, 0x23, 0x0B, 0xB4, + 0x4F, 0x3F, 0x14, 0x3A, 0x6D, 0xEC, 0x5F, 0x2C, + 0x39, 0xAB, 0x90, 0xF2, 0x74, 0xF2, 0x08, 0x8B, + 0xD3, 0xD6, 0xA6, 0xFC, 0xA0, 0x07, 0x02, 0x73, + 0xBE, 0xDC, 0x84, 0x77, 0x7F, 0xB5, 0x2E, 0x3C, + 0x55, 0x8B, 0x0A, 0xE0, 0x61, 0x83, 0xD5, 0xA4, + 0x8D, 0x45, 0x2F, 0x68, 0xE1, 0x52, 0x07, 0xF8, + 0x61, 0x62, 0x7A, 0xCA, 0x14, 0x27, 0x96, 0x30, + 0xF8, 0x2E, 0xC3, 0xA0, 0xCA, 0x07, 0x86, 0x33, + 0xB6, 0x00, 0xAF, 0xA7, 0x97, 0x43, 0xA6, 0x00, + 0x21, 0x5B, 0xE5, 0x63, 0x74, 0x58, 0xCE, 0x2C, + 0xE8, 0xAF, 0xF5, 0xA0, 0x8E, 0xB5, 0x01, 0x7B, + 0x2C, 0x76, 0x65, 0x77, 0x47, 0x9F, 0x8D, 0xC6, + 0xBF, 0x9F, 0x5C, 0xC7, 0x50, 0x89, 0x93, 0x21, + 0x61, 0xB9, 0x6C, 0xEA, 0x40, 0x66, 0x20, 0xAE, + 0xDB, 0x63, 0x04, 0x07, 0xF7, 0x68, 0x7E, 0xBB, + 0xB4, 0x81, 0x4C, 0x79, 0x81, 0x63, 0x7A, 0x48, + 0xA9, 0x0D, 0xE6, 0x80, 0x31, 0xE0, 0x62, 0xA7, + 0xAF, 0x76, 0x12, 0xB4, 0xF5, 0xC7, 0xA6, 0xDA, + 0x86, 0xBD, 0x13, 0x65, 0x29, 0xE6, 0x42, 0x95, + 0xA5, 0x61, 0x3E, 0xA7, 0x3B, 0xD3, 0xD4, 0x44, + 0x8C, 0xB8, 0x1F, 0x24, 0x31, 0x35, 0xC0, 0xA6, + 0x60, 0xBE, 0xB9, 0xC1, 0x7E, 0x65, 0x1D, 0xEF, + 0x46, 0x9A, 0x7D, 0x90, 0xA1, 0x5D, 0x34, 0x81, + 0x09, 0x0B, 0xCB, 0xF2, 0x27, 0x01, 0x23, 0x28, + 0x94, 0x1F, 0xA4, 0x6F, 0x39, 0xC5, 0x00, 0x6A, + 0xD9, 0x3D, 0x45, 0x8A, 0xA6, 0xAD, 0xD6, 0x55, + 0x86, 0x2B, 0x41, 0x8C, 0x30, 0x94, 0xF5, 0x51, + 0x46, 0x0D, 0xF2, 0x15, 0x3A, 0x58, 0x10, 0xA7, + 0xDA, 0x74, 0xF0, 0x61, 0x4C, 0x25, 0x88, 0xBE, + 0x49, 0xDC, 0x6F, 0x5E, 0x88, 0x15, 0x46, 0x42, + 0xBD, 0x1D, 0x37, 0x62, 0x56, 0x33, 0x26, 0x43, + 0x35, 0x07, 0x15, 0x6A, 0x57, 0xC5, 0x76, 0x94, + 0xBD, 0xD2, 0x6E, 0x7A, 0x24, 0x6F, 0xEB, 0x72, + 0x3A, 0xED, 0x67, 0xB0, 0x48, 0x87, 0xC8, 0xE4, + 0x76, 0xB4, 0x8C, 0xAB, 0x59, 0xE5, 0x36, 0x2F, + 0x26, 0xA9, 0xEF, 0x50, 0xC2, 0xBC, 0x80, 0xBA, + 0x14, 0x62, 0x26, 0x21, 0x6F, 0xE6, 0x29, 0x68, + 0xA6, 0x0D, 0x04, 0xE8, 0xC1, 0x70, 0xD7, 0x41, + 0xC7, 0xA2, 0xB0, 0xE1, 0xAB, 0xDA, 0xC9, 0x68 }; static const byte dk_768[KYBER768_PRIVATE_KEY_SIZE] = { - 0x19, 0xD7, 0x4A, 0xD5, 0x47, 0x2A, 0x8B, 0x2B, - 0xAA, 0xD2, 0xA5, 0x67, 0x02, 0xC9, 0xB3, 0xB5, - 0x51, 0x0E, 0xF3, 0x92, 0x48, 0x58, 0x06, 0x1D, - 0x57, 0xF9, 0x0D, 0xD9, 0xA1, 0xA0, 0x1F, 0xEC, - 0x2F, 0x57, 0xC5, 0x1A, 0x88, 0x88, 0x05, 0x34, - 0x1B, 0x61, 0x7C, 0x51, 0x55, 0x39, 0x59, 0x77, - 0x50, 0x83, 0x5C, 0x3E, 0xD7, 0xA0, 0x33, 0xB0, - 0x39, 0xD7, 0x24, 0x91, 0x33, 0x2C, 0x5D, 0xF4, - 0xA6, 0x9B, 0x6D, 0xF2, 0x61, 0x71, 0x87, 0x7A, - 0xD1, 0xE5, 0x0A, 0xC5, 0x01, 0x00, 0xBE, 0x47, - 0x28, 0x78, 0x66, 0x85, 0xDA, 0x7A, 0x73, 0x9E, - 0x84, 0x3F, 0xF0, 0xD4, 0x59, 0x22, 0xD7, 0x28, - 0x1E, 0x21, 0x0D, 0x5E, 0x82, 0xB9, 0x44, 0x65, - 0x2F, 0x48, 0x62, 0xCF, 0xB3, 0xD9, 0x02, 0xDE, - 0x60, 0xAF, 0xD0, 0xA1, 0x64, 0x47, 0x1B, 0x26, - 0x14, 0x4A, 0x1D, 0x7A, 0x38, 0x09, 0x65, 0x03, - 0x09, 0x59, 0x11, 0x76, 0x2E, 0xBA, 0x79, 0x62, - 0xC4, 0x51, 0x1D, 0x05, 0xA1, 0x28, 0xF2, 0x78, - 0x1E, 0xCB, 0x3D, 0x1F, 0x5B, 0xB1, 0x24, 0x42, - 0x37, 0x61, 0x1A, 0xBA, 0xB9, 0x24, 0x99, 0x1F, - 0x8A, 0x27, 0x32, 0xE2, 0x70, 0x32, 0x35, 0x79, - 0x20, 0xF1, 0x97, 0xC7, 0x69, 0x2D, 0x60, 0xA9, - 0x44, 0x44, 0x72, 0x25, 0x8C, 0xB4, 0x57, 0xC1, - 0xB7, 0x1B, 0x77, 0x99, 0x54, 0x69, 0xF3, 0xA9, - 0x62, 0xF3, 0xAB, 0xA6, 0x69, 0x96, 0x14, 0xFC, - 0xCC, 0xEA, 0x74, 0x1E, 0x21, 0xC6, 0x00, 0xC4, - 0x35, 0x7B, 0xBF, 0xAB, 0x45, 0x29, 0x27, 0xC3, - 0xD4, 0x41, 0xBF, 0x8E, 0xD7, 0x31, 0x52, 0xF7, - 0x5C, 0x08, 0xF5, 0x40, 0xE1, 0x86, 0xAC, 0xCA, - 0x33, 0x26, 0xF4, 0x22, 0xC8, 0x4B, 0x98, 0x8D, - 0x77, 0xE6, 0x1A, 0xE6, 0x18, 0x59, 0xCF, 0x85, - 0x41, 0xF8, 0x92, 0x09, 0xE4, 0x98, 0x30, 0x40, - 0xC5, 0x61, 0x76, 0x54, 0x80, 0x88, 0x52, 0xB6, - 0x49, 0xB8, 0x99, 0xA3, 0x99, 0xAE, 0xC2, 0xC8, - 0xBB, 0xA8, 0xA5, 0x42, 0xF3, 0x45, 0xAB, 0xF2, - 0x81, 0x3F, 0x65, 0xE9, 0xA7, 0x91, 0xD3, 0x2C, - 0xC2, 0xD7, 0x60, 0x26, 0xFB, 0x8D, 0x0C, 0x94, - 0xB6, 0x57, 0x48, 0x9A, 0xBB, 0x48, 0x7D, 0xA4, - 0xA2, 0xC0, 0xE3, 0x86, 0x8D, 0x3C, 0xF4, 0x7F, - 0x1C, 0xBB, 0x2F, 0xA7, 0x9C, 0x53, 0xCF, 0xF6, - 0x26, 0x47, 0x77, 0xC0, 0x9B, 0x17, 0x7C, 0x91, - 0x31, 0x54, 0x84, 0xD2, 0xB3, 0x0B, 0x0C, 0xA2, - 0x1F, 0x55, 0xAD, 0xD2, 0x3C, 0x57, 0xE1, 0x91, - 0x1C, 0x3F, 0x08, 0x6B, 0xCA, 0xD2, 0x17, 0x98, - 0x48, 0x6E, 0xB4, 0x7B, 0x7C, 0x58, 0x57, 0x73, - 0x81, 0xC0, 0x9F, 0x52, 0x52, 0x58, 0x2D, 0x1B, - 0x27, 0xA7, 0xD5, 0xB8, 0xE0, 0x60, 0xCE, 0x78, - 0x20, 0x9C, 0xC8, 0x2B, 0xAE, 0x4D, 0xA6, 0x06, - 0x80, 0x0C, 0x8D, 0xB1, 0x26, 0x8F, 0x7A, 0xD2, - 0xB7, 0x93, 0xA4, 0x4F, 0x34, 0x61, 0x2C, 0xCE, - 0xA3, 0x1C, 0xE7, 0xD7, 0x96, 0xA6, 0x5A, 0x26, - 0x91, 0xD6, 0x15, 0x00, 0x62, 0x5F, 0x83, 0xE7, - 0xBE, 0x57, 0x07, 0x7E, 0xE9, 0xC1, 0xB8, 0xC1, - 0xCA, 0xA1, 0x37, 0xCC, 0x4B, 0x65, 0x73, 0x30, - 0x8C, 0x19, 0x66, 0x8B, 0x24, 0xB0, 0x1E, 0x96, - 0x69, 0x03, 0xAB, 0xBC, 0xB7, 0x9B, 0x67, 0xBE, - 0x0A, 0x3E, 0x3E, 0x05, 0x8A, 0xAD, 0xA1, 0x89, - 0xB9, 0xEA, 0x80, 0x35, 0x9A, 0xC2, 0x6F, 0x4C, - 0x5C, 0x53, 0x73, 0x5F, 0xE4, 0xFC, 0x35, 0x24, - 0x73, 0x37, 0x76, 0x0C, 0xCA, 0x35, 0x29, 0xB8, - 0xD2, 0x66, 0xBB, 0x6C, 0x48, 0x01, 0x06, 0x54, - 0xCD, 0xBC, 0x5A, 0x3E, 0x97, 0x57, 0x52, 0x46, - 0x75, 0xAB, 0xC4, 0x13, 0x13, 0x0C, 0xC2, 0x70, - 0x1F, 0x28, 0x93, 0x3E, 0xAB, 0xB8, 0x39, 0x2B, - 0x0D, 0x6D, 0x05, 0x9C, 0xFC, 0x3A, 0x30, 0x32, - 0x6C, 0x4F, 0xCC, 0x81, 0x0B, 0x37, 0xA4, 0x74, - 0x8C, 0x1C, 0x53, 0x92, 0x8A, 0x49, 0x13, 0xE4, - 0x8B, 0x18, 0x66, 0x97, 0x16, 0x2C, 0x33, 0xFF, - 0xFB, 0x06, 0xDD, 0x51, 0x61, 0xC8, 0x63, 0x9D, - 0xB1, 0x95, 0xC6, 0xCA, 0x64, 0x82, 0x9B, 0x2B, - 0x3A, 0x2E, 0x4C, 0x96, 0x83, 0xB6, 0x6D, 0xF7, - 0xFB, 0x19, 0x09, 0x90, 0x4E, 0x00, 0x02, 0x0D, - 0xBA, 0x13, 0x4E, 0x02, 0xA1, 0x68, 0xD7, 0x6A, - 0xC0, 0x76, 0xBB, 0x77, 0xD4, 0xDC, 0x84, 0x96, - 0xB4, 0xBB, 0xE7, 0xB4, 0x69, 0x0B, 0xA2, 0x9B, - 0x62, 0xA9, 0x1A, 0xBE, 0x72, 0xBE, 0xF3, 0x23, - 0xA4, 0x4C, 0x89, 0x03, 0xE4, 0x82, 0xB6, 0x0D, - 0x99, 0xBA, 0x61, 0xD1, 0xBB, 0xCF, 0x9C, 0xB9, - 0x67, 0x35, 0x34, 0xC1, 0xD6, 0x47, 0x66, 0x23, - 0x74, 0xEE, 0x2C, 0x7C, 0x5F, 0x00, 0x81, 0xBA, - 0xD1, 0x49, 0xF4, 0x42, 0x06, 0x71, 0x76, 0x84, - 0xD9, 0x74, 0x6B, 0x20, 0x48, 0x63, 0x3A, 0xF7, - 0xA6, 0x8C, 0x68, 0x65, 0xFB, 0x59, 0x03, 0x58, - 0xD8, 0xCF, 0x82, 0x14, 0x58, 0x36, 0x9B, 0x0C, - 0x31, 0xEB, 0x59, 0x7C, 0xF5, 0xBE, 0x78, 0xEB, - 0x48, 0x0E, 0xA0, 0x4E, 0x35, 0xFA, 0xCC, 0x38, - 0x03, 0x72, 0xC8, 0xC0, 0xA0, 0x4D, 0xE2, 0x76, - 0xB1, 0xA7, 0x21, 0x21, 0xE5, 0x96, 0xCB, 0xB2, - 0x5E, 0xF7, 0x53, 0x6A, 0xD3, 0x80, 0x41, 0x84, - 0xA8, 0x7B, 0xDF, 0xB5, 0xA7, 0x69, 0x16, 0x0B, - 0xFB, 0xB0, 0xCA, 0x3C, 0x36, 0x07, 0x90, 0xE5, - 0x56, 0x2B, 0xB7, 0x8E, 0xFE, 0x00, 0x69, 0xC7, - 0x74, 0x83, 0xAD, 0x35, 0xCA, 0xC2, 0x37, 0xC6, - 0x1D, 0xE7, 0x8A, 0x7D, 0xB4, 0x6F, 0xC9, 0x17, - 0x12, 0x4C, 0xA1, 0x75, 0x10, 0xDB, 0x7D, 0xA2, - 0x18, 0x89, 0x0F, 0x44, 0x8E, 0xF6, 0x31, 0x86, - 0x13, 0xA1, 0xC9, 0x7C, 0x92, 0x8E, 0x2B, 0x7B, - 0x6A, 0x54, 0x61, 0x7B, 0xCC, 0xB6, 0xCD, 0xF2, - 0x78, 0xAE, 0x54, 0x2B, 0x56, 0xAD, 0x7B, 0xB5, - 0xEC, 0xD8, 0xC4, 0x6A, 0x66, 0xC4, 0xFA, 0x09, - 0x50, 0xCE, 0x41, 0x35, 0x2C, 0xB8, 0x57, 0x11, - 0x89, 0x04, 0x58, 0xF2, 0x99, 0xBF, 0x40, 0xBA, - 0x6F, 0xF2, 0xC0, 0x71, 0x38, 0x62, 0x26, 0x8B, - 0x5F, 0x08, 0xE4, 0x98, 0x45, 0xB0, 0x94, 0x43, - 0x99, 0x7A, 0xB2, 0x9A, 0x62, 0x07, 0x3C, 0x0D, - 0x98, 0x18, 0xC0, 0x20, 0x16, 0x7D, 0x47, 0x49, - 0x23, 0x1C, 0x05, 0x9E, 0x6F, 0x48, 0x3F, 0x97, - 0x68, 0x17, 0xC9, 0x0C, 0x20, 0xA9, 0xC9, 0x37, - 0x07, 0x9C, 0x2D, 0x4B, 0xE3, 0x0D, 0xA9, 0x74, - 0xA9, 0x7E, 0x4B, 0xC5, 0x3E, 0xD9, 0x6A, 0x55, - 0x16, 0x9F, 0x4A, 0x23, 0xA3, 0xEA, 0x24, 0xBD, - 0x8E, 0x01, 0xB8, 0xFA, 0xEB, 0x95, 0xD4, 0xE5, - 0x3F, 0xFF, 0xEC, 0xB6, 0x08, 0x02, 0xC3, 0x88, - 0xA4, 0x0F, 0x46, 0x60, 0x54, 0x0B, 0x1B, 0x1F, - 0x81, 0x76, 0xC9, 0x81, 0x1B, 0xB2, 0x6A, 0x68, - 0x3C, 0xA7, 0x89, 0x56, 0x4A, 0x29, 0x40, 0xFC, - 0xEB, 0x2C, 0xE6, 0xA9, 0x2A, 0x1E, 0xE4, 0x5E, - 0xE4, 0xC3, 0x18, 0x57, 0xC9, 0xB9, 0xB8, 0xB5, - 0x6A, 0x79, 0xD9, 0x5A, 0x46, 0xCB, 0x39, 0x3A, - 0x31, 0xA2, 0x73, 0x7B, 0xAF, 0xEA, 0x6C, 0x81, - 0x06, 0x6A, 0x67, 0x2B, 0x34, 0xC1, 0x0A, 0xA9, - 0x89, 0x57, 0xC9, 0x17, 0x66, 0xB7, 0x30, 0x03, - 0x6A, 0x56, 0xD9, 0x40, 0xAA, 0x4E, 0xBC, 0xB7, - 0x58, 0xB0, 0x83, 0x51, 0xE2, 0xC4, 0xFD, 0x19, - 0x45, 0x3B, 0xF3, 0xA6, 0x29, 0x2A, 0x99, 0x3D, - 0x67, 0xC7, 0xEC, 0xC7, 0x2F, 0x42, 0xF7, 0x82, - 0xE9, 0xEB, 0xAA, 0x1A, 0x8B, 0x3B, 0x0F, 0x56, - 0x7A, 0xB3, 0x94, 0x21, 0xF6, 0xA6, 0x7A, 0x6B, - 0x84, 0x10, 0xFD, 0x94, 0xA7, 0x21, 0xD3, 0x65, - 0xF1, 0x63, 0x9E, 0x9D, 0xDA, 0xBF, 0xD0, 0xA6, - 0xCE, 0x1A, 0x46, 0x05, 0xBD, 0x2B, 0x1C, 0x9B, - 0x97, 0x7B, 0xD1, 0xEA, 0x32, 0x86, 0x73, 0x68, - 0xD6, 0xE6, 0x39, 0xD0, 0x19, 0xAC, 0x10, 0x18, - 0x53, 0xBC, 0x15, 0x3C, 0x86, 0xF8, 0x52, 0x80, - 0xFC, 0x76, 0x3B, 0xA2, 0x4F, 0xB5, 0x7A, 0x29, - 0x6C, 0xB1, 0x2D, 0x32, 0xE0, 0x8A, 0xB3, 0x2C, - 0x55, 0x1D, 0x5A, 0x45, 0xA4, 0xA2, 0x8F, 0x9A, - 0xDC, 0x28, 0xF7, 0xA2, 0x90, 0x0E, 0x25, 0xA4, - 0x0B, 0x51, 0x90, 0xB2, 0x2A, 0xB1, 0x9D, 0xFB, - 0x24, 0x6F, 0x42, 0xB2, 0x4F, 0x97, 0xCC, 0xA9, - 0xB0, 0x9B, 0xEA, 0xD2, 0x46, 0xE1, 0x73, 0x4F, - 0x44, 0x66, 0x77, 0xB3, 0x8B, 0x75, 0x22, 0xB7, - 0x80, 0x72, 0x7C, 0x11, 0x74, 0x40, 0xC9, 0xF1, - 0xA0, 0x24, 0x52, 0x0C, 0x14, 0x1A, 0x69, 0xCD, - 0xD2, 0xE6, 0x9A, 0x05, 0x53, 0x4A, 0x72, 0x32, - 0xC5, 0xF1, 0xB7, 0x66, 0xE9, 0x3A, 0x5E, 0xE2, - 0xEA, 0x1B, 0x26, 0xE8, 0x60, 0xA3, 0x44, 0x1A, - 0xDE, 0xA9, 0x1E, 0xDB, 0x78, 0x2C, 0xAB, 0xC8, - 0xA5, 0xD0, 0x11, 0xA2, 0x1B, 0xC3, 0x88, 0xE7, - 0xF4, 0x86, 0xF0, 0xB7, 0x99, 0x30, 0x79, 0xAE, - 0x3F, 0x1A, 0x7C, 0x85, 0xD2, 0x7D, 0x0F, 0x49, - 0x21, 0x84, 0xD5, 0x90, 0x62, 0x14, 0x2B, 0x76, - 0xA4, 0x37, 0x34, 0xA9, 0x0D, 0x55, 0x6A, 0x95, - 0xDC, 0x48, 0x3D, 0xD8, 0x21, 0x04, 0xED, 0x58, - 0xCA, 0x15, 0x71, 0xC3, 0x96, 0x85, 0x82, 0x79, - 0x51, 0x43, 0x4C, 0xC1, 0x00, 0x1A, 0xA4, 0xC8, - 0x13, 0x26, 0x1E, 0x4F, 0x93, 0x02, 0x8E, 0x14, - 0xCD, 0x08, 0xF7, 0x68, 0xA4, 0x54, 0x31, 0x0C, - 0x3B, 0x01, 0x0C, 0x83, 0xB7, 0x4D, 0x04, 0xA5, - 0x7B, 0xB9, 0x77, 0xB3, 0xD8, 0xBC, 0xF3, 0xAA, - 0xA7, 0x8C, 0xA1, 0x2B, 0x78, 0xF0, 0x10, 0xD9, - 0x51, 0x34, 0x92, 0x8A, 0x5E, 0x5D, 0x96, 0xA0, - 0x29, 0xB4, 0x42, 0xA4, 0x18, 0x88, 0x03, 0x8B, - 0x29, 0xC2, 0xF1, 0x22, 0xB0, 0xB6, 0xB3, 0xAF, - 0x12, 0x1A, 0xEA, 0x29, 0xA0, 0x55, 0x53, 0xBD, - 0xF1, 0xDB, 0x60, 0x7A, 0xFB, 0x17, 0x00, 0x18, - 0x60, 0xAF, 0x18, 0x23, 0xBC, 0xF0, 0x3D, 0xB3, - 0xB4, 0x41, 0xDA, 0x16, 0x3A, 0x28, 0xC5, 0x23, - 0xA5, 0xFB, 0x46, 0x69, 0xA6, 0x42, 0x34, 0xA4, - 0xBC, 0xD1, 0x21, 0x7F, 0xF2, 0x63, 0x5B, 0xD9, - 0x76, 0x80, 0xFF, 0x93, 0x8D, 0xBC, 0xF1, 0x0E, - 0x95, 0x32, 0xA9, 0xA7, 0x9A, 0x5B, 0x07, 0x3A, - 0x9E, 0x8D, 0xB2, 0x12, 0x3D, 0x21, 0x0F, 0xAE, - 0xA2, 0x00, 0xB6, 0x64, 0x83, 0x8E, 0x80, 0x07, - 0x1F, 0x2B, 0xA2, 0x54, 0xAA, 0xC8, 0x90, 0xA4, - 0x6E, 0x28, 0xEC, 0x34, 0x2D, 0x92, 0x81, 0x2B, - 0x01, 0x59, 0x30, 0x71, 0x65, 0x7E, 0x7A, 0x3A, - 0x4A, 0x75, 0xCB, 0x3D, 0x52, 0x79, 0xCE, 0x88, - 0x40, 0x5A, 0xC5, 0xAD, 0xAC, 0xB2, 0x05, 0x1E, - 0x02, 0x2E, 0xE0, 0xAC, 0x9B, 0xBF, 0xE3, 0x2D, - 0xEF, 0x98, 0x66, 0x7E, 0xD3, 0x47, 0xAD, 0xCB, - 0x39, 0x30, 0xF3, 0xCA, 0xD0, 0x31, 0x39, 0x1B, - 0x70, 0x9A, 0x4E, 0x61, 0xB8, 0xDD, 0x4B, 0x3F, - 0xB7, 0x41, 0xB5, 0xBD, 0x60, 0xBF, 0x30, 0x40, - 0x15, 0xEE, 0x75, 0x46, 0xA2, 0x4B, 0x59, 0xEA, - 0xDC, 0xA1, 0x37, 0xC7, 0x12, 0x50, 0x74, 0x72, - 0x6B, 0x76, 0x86, 0xEC, 0x55, 0x1B, 0x7B, 0xC2, - 0x6B, 0xBD, 0xB2, 0x0F, 0xC3, 0x78, 0x35, 0x34, - 0xE3, 0x4E, 0xE1, 0xF1, 0xBC, 0x6B, 0x77, 0xAB, - 0x49, 0xA6, 0x66, 0x78, 0x46, 0x97, 0x57, 0x78, - 0xC3, 0xC5, 0x36, 0x83, 0x04, 0x50, 0xA3, 0xFA, - 0x91, 0x02, 0x59, 0x72, 0x2F, 0x3F, 0x80, 0x6E, - 0x6E, 0xB4, 0xB9, 0x34, 0x67, 0x63, 0xFE, 0xF0, - 0x92, 0x2B, 0xC4, 0xB6, 0xEB, 0x38, 0x26, 0xAF, - 0xF2, 0x4E, 0xAD, 0xC6, 0xCF, 0x6E, 0x47, 0x7C, - 0x2E, 0x05, 0x5C, 0xFB, 0x7A, 0x90, 0xA5, 0x5C, - 0x06, 0xD0, 0xB2, 0xA2, 0xF5, 0x11, 0x60, 0x69, - 0xE6, 0x4A, 0x5B, 0x50, 0x78, 0xC0, 0x57, 0x7B, - 0xC8, 0xE7, 0x90, 0x0E, 0xA7, 0x1C, 0x34, 0x1C, - 0x02, 0xAD, 0x85, 0x4E, 0xA5, 0xA0, 0x1A, 0xF2, - 0xA6, 0x05, 0xCB, 0x20, 0x68, 0xD5, 0x24, 0x38, - 0xCD, 0xDC, 0x60, 0xB0, 0x38, 0x82, 0xCC, 0x02, - 0x4D, 0x13, 0x04, 0x5F, 0x2B, 0xA6, 0xB0, 0xF4, - 0x46, 0xAA, 0xA5, 0x95, 0x87, 0x60, 0x61, 0x79, - 0x45, 0x37, 0x1F, 0xD7, 0x8C, 0x28, 0xA4, 0x06, - 0x77, 0xA6, 0xE7, 0x2F, 0x51, 0x3B, 0x9E, 0x06, - 0x67, 0xA9, 0xBA, 0xF4, 0x46, 0xC1, 0xBA, 0x93, - 0x1B, 0xA8, 0x18, 0x34, 0x23, 0x47, 0x92, 0xA2, - 0xA2, 0xB2, 0xB3, 0x70, 0x1F, 0x31, 0xB7, 0xCF, - 0x46, 0x7C, 0x80, 0xF1, 0x98, 0x11, 0x41, 0xBB, - 0x45, 0x77, 0x93, 0xE1, 0x30, 0x70, 0x91, 0xC4, - 0x8B, 0x59, 0x14, 0x64, 0x6A, 0x60, 0xCE, 0x1A, - 0x30, 0x15, 0x43, 0x77, 0x9D, 0x7C, 0x33, 0x42, - 0xAD, 0x17, 0x97, 0x96, 0xC2, 0xC4, 0x40, 0xD9, - 0x9D, 0xF9, 0xD4, 0x1B, 0x52, 0xE3, 0x26, 0x25, - 0xA8, 0x2A, 0xA5, 0xF5, 0x79, 0xA9, 0x92, 0x0B, - 0xFF, 0xBA, 0x96, 0x4F, 0xA7, 0x0D, 0xB2, 0x59, - 0xC8, 0x5E, 0x68, 0xC8, 0x13, 0x81, 0x7B, 0x13, - 0x47, 0xBF, 0x19, 0x81, 0x4D, 0xA5, 0xE9, 0x36, - 0x4A, 0x46, 0x45, 0xE6, 0x21, 0x92, 0x3D, 0x95, - 0x5C, 0x21, 0x1A, 0x55, 0xD3, 0x55, 0xC8, 0x16, - 0xDA, 0x04, 0x73, 0x0A, 0xA3, 0x24, 0x08, 0x5E, - 0x62, 0x2B, 0x51, 0xD6, 0x10, 0x9B, 0x49, 0xF6, - 0x73, 0xAD, 0xD0, 0x0E, 0x41, 0x47, 0x55, 0xC8, - 0x02, 0x4A, 0xA0, 0x16, 0x4F, 0x24, 0x55, 0x6D, - 0xED, 0x96, 0x3D, 0x61, 0x14, 0x38, 0x56, 0xCB, - 0x4F, 0xF0, 0x56, 0x7E, 0x33, 0x20, 0x73, 0x0D, - 0xBC, 0xBF, 0x12, 0xF6, 0x6E, 0x2B, 0x70, 0xB2, - 0x00, 0x54, 0xA6, 0xDE, 0xA4, 0x26, 0x14, 0xB5, - 0x0E, 0xF7, 0x2B, 0x15, 0x6F, 0x51, 0x49, 0xFC, - 0x26, 0x3D, 0xD7, 0xE0, 0x39, 0xC5, 0x5A, 0x3E, - 0xE9, 0x82, 0x7D, 0xF9, 0x2C, 0x56, 0x5D, 0x24, - 0xC5, 0x5E, 0x0A, 0x81, 0xC6, 0x49, 0x46, 0x95, - 0x34, 0x4D, 0x94, 0x87, 0x48, 0xAF, 0xBA, 0x9F, - 0x76, 0x2C, 0x0E, 0xA9, 0x0B, 0xB7, 0x24, 0x89, - 0x79, 0x02, 0x00, 0x07, 0x75, 0x61, 0x39, 0x49, - 0x60, 0x2C, 0x48, 0xC7, 0x8A, 0x94, 0x40, 0x67, - 0x8C, 0x24, 0x08, 0x6D, 0x32, 0x6D, 0x79, 0x64, - 0x3B, 0xAF, 0x70, 0x36, 0xC6, 0x6C, 0x7E, 0x02, - 0x6A, 0xAE, 0xFD, 0xA2, 0x80, 0x7A, 0x60, 0xBD, - 0x7F, 0xC9, 0x13, 0x63, 0xBB, 0x02, 0x34, 0xA5, - 0x90, 0x98, 0x4A, 0xA0, 0x11, 0xF1, 0x1D, 0x40, - 0x26, 0x82, 0x18, 0xA1, 0x58, 0x83, 0x77, 0xB3, - 0xD7, 0x67, 0x1B, 0x8B, 0x99, 0x78, 0x99, 0x19, - 0xB8, 0x6E, 0xE8, 0x2B, 0x18, 0xEC, 0x22, 0xD4, - 0xE8, 0x0A, 0x1F, 0x27, 0x85, 0x3D, 0x88, 0x94, - 0x19, 0xD4, 0x60, 0xDE, 0xF7, 0x56, 0x7A, 0xA4, - 0x56, 0x79, 0x69, 0xC4, 0x30, 0x48, 0xC3, 0x2B, - 0x84, 0x62, 0xA9, 0xC9, 0x38, 0x6E, 0xB3, 0x15, - 0x2A, 0x69, 0x76, 0xAA, 0x78, 0x3C, 0xDD, 0x1A, - 0x8C, 0x57, 0xA9, 0xB6, 0xBB, 0xD8, 0x37, 0xA0, - 0x06, 0x24, 0xB5, 0x8B, 0x4B, 0xA3, 0xDB, 0xB6, - 0x3B, 0xB8, 0x20, 0x0E, 0x7B, 0xC8, 0x88, 0x81, - 0xBE, 0xBD, 0xA9, 0x25, 0xBC, 0xA0, 0x28, 0xE2, - 0x91, 0xAA, 0x1C, 0x22, 0x53, 0x9C, 0xD0, 0x4F, - 0x90, 0x09, 0x0D, 0x7F, 0x74, 0x10, 0x8C, 0x32, - 0xB8, 0x02, 0x2C, 0x15, 0x91, 0xC8, 0x81, 0xE7, - 0x63, 0x04, 0xE2, 0x40, 0x81, 0x90, 0xE2, 0x0F, - 0x09, 0xA5, 0x4F, 0xC2, 0x34, 0x20, 0xE2, 0x62, - 0x0E, 0x9D, 0x87, 0xA3, 0x10, 0x8A, 0x94, 0xFE, - 0xEA, 0x72, 0xD5, 0xAB, 0x7F, 0xCF, 0xB9, 0x72, - 0xE6, 0x56, 0x1B, 0x1A, 0x7B, 0x06, 0x2F, 0x1A, - 0x68, 0x2E, 0x02, 0x0A, 0xA2, 0x56, 0x28, 0x12, - 0xB2, 0x96, 0x54, 0x7B, 0x91, 0x78, 0x24, 0xCD, - 0xB8, 0x8C, 0x58, 0x2B, 0x5A, 0x68, 0x90, 0x17, - 0x7B, 0xC7, 0x0C, 0x91, 0xAC, 0xAC, 0x9A, 0xBE, - 0x29, 0x0A, 0xEB, 0x2C, 0x34, 0xA7, 0xE2, 0x36, - 0x89, 0x55, 0xCB, 0x45, 0x6A, 0x34, 0x53, 0x68, - 0xAB, 0xE3, 0xB9, 0x1B, 0x47, 0xFC, 0x30, 0xB0, - 0x23, 0x3A, 0x09, 0xBA, 0x79, 0xFB, 0x11, 0x23, - 0x8A, 0xC5, 0x08, 0xCC, 0xE6, 0x10, 0x95, 0xF8, - 0x54, 0xC2, 0x32, 0x04, 0xA8, 0xD3, 0x6B, 0xFC, - 0x2C, 0x6E, 0x05, 0xA7, 0x2A, 0xF5, 0x24, 0x4B, - 0x17, 0xC1, 0x21, 0x01, 0xE0, 0x14, 0x51, 0x57, - 0x0E, 0xB1, 0x10, 0x56, 0x7E, 0x85, 0x0E, 0x79, - 0xC0, 0x00, 0x14, 0x24, 0x41, 0xFE, 0x41, 0x60, - 0x02, 0x75, 0x45, 0xF6, 0x29, 0x0E, 0x85, 0x45, - 0x1B, 0x80, 0x23, 0x4A, 0x94, 0x06, 0xC3, 0x90, - 0xB0, 0xCE, 0xA3, 0xC8, 0x33, 0x5D, 0x4C, 0x6F, - 0x85, 0x50, 0xB5, 0x44, 0xC9, 0x34, 0x3E, 0x61, - 0xBA, 0x1C, 0x84, 0x89, 0xD1, 0xB0, 0x39, 0x97, - 0x39, 0x16, 0x8A, 0xF7, 0x40, 0xA4, 0x81, 0xB0, - 0xF5, 0xC3, 0x37, 0x25, 0x30, 0xCA, 0x06, 0xB5, - 0x08, 0xEC, 0xE8, 0x38, 0xAB, 0x78, 0xBE, 0xE1, - 0xE5, 0x97, 0xA9, 0xB1, 0x4F, 0x6A, 0xEC, 0x7A, - 0x3B, 0xD1, 0xAA, 0x8D, 0x10, 0xBA, 0xC2, 0x3B, - 0x98, 0x02, 0x90, 0x2C, 0xD5, 0x29, 0xAB, 0x6E, - 0xF5, 0x4D, 0xB3, 0x11, 0x0C, 0xFB, 0x56, 0x1E, - 0x7E, 0x69, 0x48, 0xE6, 0x52, 0x81, 0x25, 0x04, - 0x16, 0xC3, 0x49, 0xC8, 0x10, 0x0B, 0x3B, 0x4D, - 0x3D, 0x0F, 0x62, 0xAC, 0xAD, 0x8D, 0x16, 0x11, - 0x75, 0xB1, 0x34, 0xF7, 0x56, 0x49, 0x37, 0xCD, - 0xEC, 0xE9, 0xE2, 0x46, 0xAA, 0xD1, 0x10, 0x21, - 0xA6, 0x7B, 0x20, 0xEB, 0x8F, 0x77, 0x65, 0xAC, - 0x28, 0x23, 0xA9, 0xD1, 0x8C, 0x93, 0xEC, 0x28, - 0x2D, 0x6D, 0xBC, 0x53, 0xCD, 0x6D, 0xF5, 0x75, - 0x92, 0xAC, 0x7D, 0x1F, 0x83, 0xBA, 0xFA, 0xE6, - 0xEE, 0x86, 0xFE, 0x00, 0xF9, 0x5D, 0x81, 0x33, - 0x75, 0x77, 0x24, 0x34, 0x86, 0x0F, 0x5F, 0xF7, - 0xD5, 0x4F, 0xFC, 0x37, 0x39, 0x9B, 0xC4, 0xCC + 0x98, 0xA1, 0xB2, 0xDA, 0x4A, 0x65, 0xCF, 0xB5, + 0x84, 0x5E, 0xA7, 0x31, 0x1E, 0x6A, 0x06, 0xDB, + 0x73, 0x1F, 0x15, 0x90, 0xC4, 0x1E, 0xE7, 0x4B, + 0xA1, 0x07, 0x82, 0x71, 0x5B, 0x35, 0xA3, 0x10, + 0x2D, 0xF6, 0x37, 0x87, 0x2B, 0xE6, 0x5B, 0xAB, + 0x37, 0xA1, 0xDE, 0x25, 0x11, 0xD7, 0x03, 0xC7, + 0x02, 0x47, 0xB3, 0x5E, 0xF2, 0x74, 0x35, 0x48, + 0x50, 0x24, 0xD9, 0x3F, 0xD9, 0xE7, 0x7C, 0x43, + 0x80, 0x4F, 0x37, 0x17, 0x49, 0xBA, 0x00, 0xB2, + 0x0A, 0x8C, 0x5C, 0x58, 0x8B, 0xC9, 0xAB, 0xE0, + 0x68, 0xAE, 0xAA, 0xA9, 0x38, 0x51, 0x7E, 0xBF, + 0xE5, 0x3B, 0x6B, 0x66, 0x32, 0x82, 0x90, 0x3D, + 0xCD, 0x18, 0x97, 0x36, 0xD7, 0x29, 0x68, 0x16, + 0xC7, 0x33, 0xA1, 0xC7, 0x7C, 0x63, 0x75, 0xE5, + 0x39, 0x7C, 0x0F, 0x18, 0x9B, 0xBF, 0xE4, 0x76, + 0x43, 0xA6, 0x1F, 0x58, 0xF8, 0xA3, 0xC6, 0x91, + 0x1B, 0xE4, 0x61, 0x1A, 0x8C, 0x7B, 0xC0, 0x50, + 0x02, 0x11, 0x63, 0xD0, 0xA4, 0x04, 0xDC, 0x14, + 0x06, 0x57, 0x48, 0xFF, 0x29, 0xBE, 0x60, 0xD2, + 0xB9, 0xFD, 0xCC, 0x8F, 0xFD, 0x98, 0xC5, 0x87, + 0xF3, 0x8C, 0x67, 0x11, 0x57, 0x86, 0x46, 0x4B, + 0xDB, 0x34, 0x2B, 0x17, 0xE8, 0x97, 0xD6, 0x46, + 0x17, 0xCB, 0xFB, 0x11, 0x79, 0x73, 0xA5, 0x45, + 0x89, 0x77, 0xA7, 0xD7, 0x61, 0x7A, 0x1B, 0x4D, + 0x83, 0xBA, 0x03, 0xC6, 0x11, 0x13, 0x8A, 0x46, + 0x73, 0xB1, 0xEB, 0x34, 0xB0, 0x78, 0x03, 0x3F, + 0x97, 0xCF, 0xFE, 0x80, 0xC1, 0x46, 0xA2, 0x69, + 0x43, 0xF8, 0x42, 0xB9, 0x76, 0x32, 0x7B, 0xF1, + 0xCB, 0xC6, 0x01, 0x19, 0x52, 0x5B, 0xB9, 0xA3, + 0xC0, 0x34, 0x93, 0x34, 0x90, 0x00, 0xDD, 0x8F, + 0x51, 0xBA, 0x21, 0xA2, 0xE9, 0x23, 0x61, 0x76, + 0x23, 0x24, 0x60, 0x0E, 0x0C, 0x13, 0xAA, 0xA6, + 0xCB, 0x69, 0xBF, 0xB2, 0x42, 0x76, 0x48, 0x3F, + 0x6B, 0x02, 0x42, 0x12, 0x59, 0xB7, 0x58, 0x52, + 0x63, 0xC1, 0xA0, 0x28, 0xD6, 0x82, 0xC5, 0x08, + 0xBB, 0xC2, 0x80, 0x1A, 0x56, 0xE9, 0x8B, 0x8F, + 0x62, 0x0B, 0x04, 0x83, 0xD7, 0x9B, 0x5A, 0xD8, + 0x58, 0x5A, 0xC0, 0xA4, 0x75, 0xBA, 0xC7, 0x78, + 0x65, 0x19, 0x41, 0x96, 0x33, 0x87, 0x91, 0xB7, + 0x98, 0x5A, 0x05, 0xD1, 0x09, 0x39, 0x5C, 0xCA, + 0x89, 0x32, 0x72, 0x2A, 0x91, 0x95, 0x0D, 0x37, + 0xE1, 0x2B, 0x89, 0x14, 0x20, 0xA5, 0x2B, 0x62, + 0xCB, 0xFA, 0x81, 0x5D, 0xF6, 0x17, 0x4C, 0xE0, + 0x0E, 0x68, 0xBC, 0xA7, 0x5D, 0x48, 0x38, 0xCA, + 0x28, 0x0F, 0x71, 0x3C, 0x7E, 0x69, 0x24, 0xAF, + 0xD9, 0x5B, 0xAA, 0x0D, 0x01, 0xAD, 0xA6, 0x37, + 0xB1, 0x58, 0x34, 0x70, 0x34, 0xC0, 0xAB, 0x1A, + 0x71, 0x83, 0x33, 0x1A, 0x82, 0x0A, 0xCB, 0xCB, + 0x83, 0x19, 0x3A, 0x1A, 0x94, 0xC8, 0xF7, 0xE3, + 0x84, 0xAE, 0xD0, 0xC3, 0x5E, 0xD3, 0xCB, 0x33, + 0x97, 0xBB, 0x63, 0x80, 0x86, 0xE7, 0xA3, 0x5A, + 0x64, 0x08, 0xA3, 0xA4, 0xB9, 0x0C, 0xE9, 0x53, + 0x70, 0x7C, 0x19, 0xBC, 0x46, 0xC3, 0xB2, 0xDA, + 0x3B, 0x2E, 0xE3, 0x23, 0x19, 0xC5, 0x6B, 0x92, + 0x80, 0x32, 0xB5, 0xED, 0x12, 0x56, 0xD0, 0x75, + 0x3D, 0x34, 0x14, 0x23, 0xE9, 0xDB, 0x13, 0x9D, + 0xE7, 0x71, 0x4F, 0xF0, 0x75, 0xCA, 0xF5, 0x8F, + 0xD9, 0xF5, 0x7D, 0x1A, 0x54, 0x01, 0x9B, 0x59, + 0x26, 0x40, 0x68, 0x30, 0xDA, 0xE2, 0x9A, 0x87, + 0x53, 0x02, 0xA8, 0x12, 0x56, 0xF4, 0xD6, 0xCF, + 0x5E, 0x74, 0x03, 0x4E, 0xA6, 0x14, 0xBF, 0x70, + 0xC2, 0x76, 0x4B, 0x20, 0xC9, 0x58, 0x9C, 0xDB, + 0x5C, 0x25, 0x76, 0x1A, 0x04, 0xE5, 0x82, 0x92, + 0x90, 0x7C, 0x57, 0x8A, 0x94, 0xA3, 0x58, 0x36, + 0xBE, 0xE3, 0x11, 0x2D, 0xC2, 0xC3, 0xAE, 0x21, + 0x92, 0xC9, 0xDE, 0xAA, 0x30, 0x4B, 0x29, 0xC7, + 0xFE, 0xA1, 0xBD, 0xF4, 0x7B, 0x3B, 0x6B, 0xCB, + 0xA2, 0xC0, 0xE5, 0x5C, 0x9C, 0xDB, 0x6D, 0xE7, + 0x14, 0x9E, 0x9C, 0xB1, 0x79, 0x17, 0x71, 0x8F, + 0x12, 0xC8, 0x03, 0x2D, 0xE1, 0xAD, 0xE0, 0x64, + 0x8D, 0x40, 0x55, 0x19, 0xC7, 0x07, 0x19, 0xBE, + 0xCC, 0x70, 0x18, 0x45, 0xCF, 0x9F, 0x4B, 0x91, + 0x2F, 0xE7, 0x19, 0x83, 0xCA, 0x34, 0xF9, 0x01, + 0x8C, 0x7C, 0xA7, 0xBB, 0x2F, 0x6C, 0x5D, 0x7F, + 0x8C, 0x5B, 0x29, 0x73, 0x59, 0xEC, 0x75, 0x20, + 0x9C, 0x25, 0x43, 0xFF, 0x11, 0xC4, 0x24, 0x49, + 0x77, 0xC5, 0x96, 0x95, 0x24, 0xEC, 0x45, 0x4D, + 0x44, 0xC3, 0x23, 0xFC, 0xCA, 0x94, 0xAC, 0xAC, + 0x27, 0x3A, 0x0E, 0xC4, 0x9B, 0x4A, 0x8A, 0x58, + 0x5B, 0xCE, 0x7A, 0x5B, 0x30, 0x5C, 0x04, 0xC3, + 0x50, 0x64, 0x22, 0x58, 0x03, 0x57, 0x01, 0x6A, + 0x85, 0x0C, 0x3F, 0x7E, 0xE1, 0x72, 0x05, 0xA7, + 0x7B, 0x29, 0x1C, 0x77, 0x31, 0xC9, 0x83, 0x6C, + 0x02, 0xAE, 0xE5, 0x40, 0x6F, 0x63, 0xC6, 0xA0, + 0x7A, 0x21, 0x43, 0x82, 0xAA, 0x15, 0x33, 0x6C, + 0x05, 0xD1, 0x04, 0x55, 0x88, 0x10, 0x76, 0x45, + 0xEA, 0x7D, 0xE6, 0x87, 0x0F, 0xC0, 0xE5, 0x5E, + 0x15, 0x40, 0x97, 0x43, 0x01, 0xC4, 0x2E, 0xC1, + 0x41, 0x05, 0x51, 0x86, 0x80, 0xF6, 0x88, 0xAB, + 0xE4, 0xCE, 0x45, 0x37, 0x38, 0xFE, 0x47, 0x1B, + 0x87, 0xFC, 0x31, 0xF5, 0xC6, 0x8A, 0x39, 0xE6, + 0x8A, 0xF5, 0x1B, 0x02, 0x40, 0xB9, 0x0E, 0x03, + 0x64, 0xB0, 0x4B, 0xAC, 0x43, 0xD6, 0xFB, 0x68, + 0xAB, 0x65, 0xAE, 0x02, 0x8B, 0x62, 0xBD, 0x68, + 0x3B, 0x7D, 0x28, 0xAD, 0x38, 0x80, 0x6B, 0xEE, + 0x72, 0x5B, 0x5B, 0x24, 0x16, 0xA8, 0xD7, 0x9C, + 0x16, 0xEC, 0x2A, 0x99, 0xEA, 0x4A, 0x8D, 0x92, + 0xA2, 0xF5, 0x05, 0x2E, 0x67, 0xF9, 0x73, 0x52, + 0x28, 0x97, 0x61, 0xC5, 0xC3, 0x9F, 0xC5, 0xC7, + 0x42, 0xE9, 0xC0, 0xA7, 0x40, 0xCA, 0x59, 0xFC, + 0x01, 0x82, 0xF7, 0x09, 0xD0, 0x1B, 0x51, 0x87, + 0xF0, 0x00, 0x63, 0xDA, 0xAB, 0x39, 0x75, 0x96, + 0xEE, 0xA4, 0xA3, 0x1B, 0xDB, 0xCB, 0xD4, 0xC1, + 0xBB, 0x0C, 0x55, 0xBE, 0x7C, 0x68, 0x50, 0xFD, + 0xA9, 0x32, 0x6B, 0x35, 0x3E, 0x28, 0x8C, 0x50, + 0x13, 0x22, 0x6C, 0x3C, 0x39, 0x23, 0xA7, 0x91, + 0x60, 0x9E, 0x80, 0x02, 0xE7, 0x3A, 0x5F, 0x7B, + 0x6B, 0xB4, 0xA8, 0x77, 0xB1, 0xFD, 0xF5, 0x3B, + 0xB2, 0xBA, 0xB3, 0xDD, 0x42, 0x4D, 0x31, 0xBB, + 0xB4, 0x48, 0xE6, 0x09, 0xA6, 0x6B, 0x0E, 0x34, + 0x3C, 0x28, 0x6E, 0x87, 0x60, 0x31, 0x2B, 0x6D, + 0x37, 0xAA, 0x52, 0x01, 0xD2, 0x1F, 0x53, 0x50, + 0x3D, 0x88, 0x38, 0x9A, 0xDC, 0xA2, 0x1C, 0x70, + 0xFB, 0x6C, 0x0F, 0xC9, 0xC6, 0x9D, 0x66, 0x16, + 0xC9, 0xEA, 0x37, 0x80, 0xE3, 0x55, 0x65, 0xC0, + 0xC9, 0x7C, 0x15, 0x17, 0x9C, 0x95, 0x34, 0x3E, + 0xCC, 0x5E, 0x1C, 0x2A, 0x24, 0xDE, 0x46, 0x99, + 0xF6, 0x87, 0x5E, 0xA2, 0xFA, 0x2D, 0xD3, 0xE3, + 0x57, 0xBC, 0x43, 0x91, 0x47, 0x95, 0x20, 0x7E, + 0x02, 0x6B, 0x85, 0x0A, 0x22, 0x37, 0x95, 0x0C, + 0x10, 0x8A, 0x51, 0x2F, 0xC8, 0x8C, 0x22, 0x48, + 0x81, 0x12, 0x60, 0x70, 0x88, 0x18, 0x5F, 0xB0, + 0xE0, 0x9C, 0x2C, 0x41, 0x97, 0xA8, 0x36, 0x87, + 0x26, 0x6B, 0xAB, 0x2E, 0x58, 0x3E, 0x21, 0xC4, + 0x0F, 0x4C, 0xC0, 0x08, 0xFE, 0x65, 0x28, 0x04, + 0xD8, 0x22, 0x3F, 0x15, 0x20, 0xA9, 0x0B, 0x0D, + 0x53, 0x85, 0xC7, 0x55, 0x3C, 0xC7, 0x67, 0xC5, + 0x8D, 0x12, 0x0C, 0xCD, 0x3E, 0xF5, 0xB5, 0xD1, + 0xA6, 0xCD, 0x7B, 0xC0, 0x0D, 0xFF, 0x13, 0x21, + 0xB2, 0xF2, 0xC4, 0x32, 0xB6, 0x4E, 0xFB, 0x8A, + 0x3F, 0x5D, 0x00, 0x64, 0xB3, 0xF3, 0x42, 0x93, + 0x02, 0x6C, 0x85, 0x1C, 0x2D, 0xED, 0x68, 0xB9, + 0xDF, 0xF4, 0xA2, 0x8F, 0x6A, 0x8D, 0x22, 0x55, + 0x35, 0xE0, 0x47, 0x70, 0x84, 0x43, 0x0C, 0xFF, + 0xDA, 0x0A, 0xC0, 0x55, 0x2F, 0x9A, 0x21, 0x27, + 0x85, 0xB7, 0x49, 0x91, 0x3A, 0x06, 0xFA, 0x22, + 0x74, 0xC0, 0xD1, 0x5B, 0xAD, 0x32, 0x54, 0x58, + 0xD3, 0x23, 0xEF, 0x6B, 0xAE, 0x13, 0xC0, 0x01, + 0x0D, 0x52, 0x5C, 0x1D, 0x52, 0x69, 0x97, 0x3A, + 0xC2, 0x9B, 0xDA, 0x7C, 0x98, 0x37, 0x46, 0x91, + 0x8B, 0xA0, 0xE0, 0x02, 0x58, 0x8E, 0x30, 0x37, + 0x5D, 0x78, 0x32, 0x9E, 0x6B, 0x8B, 0xA8, 0xC4, + 0x46, 0x2A, 0x69, 0x2F, 0xB6, 0x08, 0x38, 0x42, + 0xB8, 0xC8, 0xC9, 0x2C, 0x60, 0xF2, 0x52, 0x72, + 0x6D, 0x14, 0xA0, 0x71, 0xF7, 0xCC, 0x45, 0x25, + 0x58, 0xD5, 0xE7, 0x1A, 0x7B, 0x08, 0x70, 0x62, + 0xEC, 0xB1, 0x38, 0x68, 0x44, 0x58, 0x82, 0x46, + 0x12, 0x64, 0x02, 0xB1, 0xFA, 0x16, 0x37, 0x73, + 0x3C, 0xD5, 0xF6, 0x0C, 0xC8, 0x4B, 0xCB, 0x64, + 0x6A, 0x78, 0x92, 0x61, 0x4D, 0x7C, 0x51, 0xB1, + 0xC7, 0xF1, 0xA2, 0x79, 0x91, 0x32, 0xF1, 0x34, + 0x27, 0xDC, 0x48, 0x21, 0x58, 0xDA, 0x25, 0x44, + 0x70, 0xA5, 0x9E, 0x00, 0xA4, 0xE4, 0x96, 0x86, + 0xFD, 0xC0, 0x77, 0x55, 0x93, 0x67, 0x27, 0x0C, + 0x21, 0x53, 0xF1, 0x10, 0x07, 0x59, 0x2C, 0x9C, + 0x43, 0x10, 0xCF, 0x8A, 0x12, 0xC6, 0xA8, 0x71, + 0x3B, 0xD6, 0xBB, 0x51, 0xF3, 0x12, 0x4F, 0x98, + 0x9B, 0xA0, 0xD5, 0x40, 0x73, 0xCC, 0x24, 0x2E, + 0x09, 0x68, 0x78, 0x0B, 0x87, 0x5A, 0x86, 0x9E, + 0xFB, 0x85, 0x15, 0x86, 0xB9, 0xA8, 0x68, 0xA3, + 0x84, 0xB9, 0xE6, 0x82, 0x1B, 0x20, 0x1B, 0x93, + 0x2C, 0x45, 0x53, 0x69, 0xA7, 0x39, 0xEC, 0x22, + 0x56, 0x9C, 0x97, 0x7C, 0x21, 0x2B, 0x38, 0x18, + 0x71, 0x81, 0x36, 0x56, 0xAF, 0x5B, 0x56, 0x7E, + 0xF8, 0x93, 0xB5, 0x84, 0x62, 0x4C, 0x86, 0x3A, + 0x25, 0x90, 0x00, 0xF1, 0x7B, 0x25, 0x4B, 0x98, + 0xB1, 0x85, 0x09, 0x7C, 0x50, 0xEB, 0xB6, 0x8B, + 0x24, 0x43, 0x42, 0xE0, 0x5D, 0x4D, 0xE5, 0x20, + 0x12, 0x5B, 0x8E, 0x10, 0x33, 0xB1, 0x43, 0x60, + 0x93, 0xAC, 0xE7, 0xCE, 0x8E, 0x71, 0xB4, 0x58, + 0xD5, 0x25, 0x67, 0x33, 0x63, 0x04, 0x5A, 0x3B, + 0x3E, 0xEA, 0x94, 0x55, 0x42, 0x8A, 0x39, 0x87, + 0x05, 0xA4, 0x23, 0x27, 0xAD, 0xB3, 0x77, 0x4B, + 0x70, 0x57, 0xF4, 0x2B, 0x01, 0x7E, 0xC0, 0x73, + 0x9A, 0x98, 0x3F, 0x19, 0xE8, 0x21, 0x4D, 0x09, + 0x19, 0x5F, 0xA2, 0x4D, 0x2D, 0x57, 0x1D, 0xB7, + 0x3C, 0x19, 0xA6, 0xF8, 0x46, 0x0E, 0x50, 0x83, + 0x0D, 0x41, 0x5F, 0x62, 0x7B, 0x88, 0xE9, 0x4A, + 0x7B, 0x15, 0x37, 0x91, 0xA0, 0xC0, 0xC7, 0xE9, + 0x48, 0x4C, 0x74, 0xD5, 0x3C, 0x71, 0x48, 0x89, + 0xF0, 0xE3, 0x21, 0xB6, 0x66, 0x0A, 0x53, 0x2A, + 0x5B, 0xC0, 0xE5, 0x57, 0xFB, 0xCA, 0x35, 0xE2, + 0x9B, 0xC6, 0x11, 0x20, 0x0E, 0xD3, 0xC6, 0x33, + 0x07, 0x7A, 0x4D, 0x87, 0x3C, 0x5C, 0xC6, 0x70, + 0x06, 0xB7, 0x53, 0xBF, 0x6D, 0x6B, 0x7A, 0xF6, + 0xCA, 0x40, 0x2A, 0xB6, 0x18, 0x23, 0x6C, 0x0A, + 0xFF, 0xBC, 0x80, 0x1F, 0x82, 0x22, 0xFB, 0xC3, + 0x6C, 0xE0, 0x98, 0x4E, 0x2B, 0x18, 0xC9, 0x44, + 0xBB, 0xCB, 0xEF, 0x03, 0xB1, 0xE1, 0x36, 0x1C, + 0x1F, 0x44, 0xB0, 0xD7, 0x34, 0xAF, 0xB1, 0x56, + 0x6C, 0xFF, 0x87, 0x44, 0xDA, 0x8B, 0x99, 0x43, + 0xD6, 0xB4, 0x5A, 0x3C, 0x09, 0x03, 0x07, 0x02, + 0xCA, 0x20, 0x1F, 0xFE, 0x20, 0xCB, 0x7E, 0xC5, + 0xB0, 0xD4, 0x14, 0x9E, 0xE2, 0xC2, 0x8E, 0x8B, + 0x23, 0x37, 0x4F, 0x47, 0x1B, 0x57, 0x15, 0x0D, + 0x0E, 0xC9, 0x33, 0x62, 0x61, 0xA2, 0xD5, 0xCB, + 0x84, 0xA3, 0xAC, 0xAC, 0xC4, 0x28, 0x94, 0x73, + 0xA4, 0xC0, 0xAB, 0xC6, 0x17, 0xC9, 0xAB, 0xC1, + 0x78, 0x73, 0x44, 0x34, 0xC8, 0x2E, 0x16, 0x85, + 0x58, 0x8A, 0x5C, 0x2E, 0xA2, 0x67, 0x8F, 0x6B, + 0x3C, 0x22, 0x28, 0x73, 0x31, 0x30, 0xC4, 0x66, + 0xE5, 0xB8, 0x6E, 0xF4, 0x91, 0x15, 0x3E, 0x48, + 0x66, 0x22, 0x47, 0xB8, 0x75, 0xD2, 0x01, 0x02, + 0x0B, 0x56, 0x6B, 0x81, 0xB6, 0x4D, 0x83, 0x9A, + 0xB4, 0x63, 0x3B, 0xAA, 0x8A, 0xCE, 0x20, 0x2B, + 0xAA, 0xB4, 0x49, 0x62, 0x97, 0xF9, 0x80, 0x7A, + 0xDB, 0xBB, 0x1E, 0x33, 0x2C, 0x6F, 0x80, 0x22, + 0xB2, 0xA1, 0x8C, 0xFD, 0xD4, 0xA8, 0x25, 0x30, + 0xB6, 0xD3, 0xF0, 0x07, 0xC3, 0x35, 0x38, 0x98, + 0xD9, 0x66, 0xCC, 0x2C, 0x21, 0xCB, 0x42, 0x44, + 0xBD, 0x00, 0x44, 0x3F, 0x20, 0x98, 0x70, 0xAC, + 0xC4, 0x2B, 0xC3, 0x30, 0x68, 0xC7, 0x24, 0xEC, + 0x17, 0x22, 0x36, 0x19, 0xC1, 0x09, 0x3C, 0xCA, + 0x6A, 0xEB, 0x29, 0x50, 0x06, 0x64, 0xD1, 0x22, + 0x50, 0x36, 0xB4, 0xB8, 0x10, 0x91, 0x90, 0x69, + 0x69, 0x48, 0x1F, 0x1C, 0x72, 0x3C, 0x14, 0x0B, + 0x9D, 0x6C, 0x16, 0x8F, 0x5B, 0x64, 0xBE, 0xA6, + 0x9C, 0x5F, 0xD6, 0x38, 0x5D, 0xF7, 0x36, 0x4B, + 0x87, 0x23, 0xBC, 0xC8, 0x5E, 0x03, 0x8C, 0x7E, + 0x46, 0x4A, 0x90, 0x0D, 0x68, 0xA2, 0x12, 0x78, + 0x18, 0x99, 0x42, 0x17, 0xAE, 0xC8, 0xBD, 0xB3, + 0x9A, 0x97, 0x0A, 0x99, 0x63, 0xDE, 0x93, 0x68, + 0x8E, 0x2A, 0xC8, 0x2A, 0xBC, 0xC2, 0x2F, 0xB9, + 0x27, 0x7B, 0xA2, 0x20, 0x09, 0xE8, 0x78, 0x38, + 0x1A, 0x38, 0x16, 0x39, 0x01, 0xC7, 0xD4, 0xC8, + 0x50, 0x19, 0x53, 0x8D, 0x35, 0xCA, 0xAE, 0x9C, + 0x41, 0xAF, 0x8C, 0x92, 0x9E, 0xE2, 0x0B, 0xB0, + 0x8C, 0xA6, 0x19, 0xE7, 0x2C, 0x2F, 0x22, 0x62, + 0xC1, 0xC9, 0x93, 0x85, 0x72, 0x55, 0x1A, 0xC0, + 0x2D, 0xC9, 0x26, 0x8F, 0xBC, 0xC3, 0x5D, 0x79, + 0x01, 0x1C, 0x3C, 0x09, 0x0A, 0xD4, 0x0A, 0x4F, + 0x11, 0x1C, 0x9B, 0xE5, 0x5C, 0x42, 0x7E, 0xB7, + 0x96, 0xC1, 0x93, 0x2D, 0x86, 0x73, 0x57, 0x9A, + 0xF1, 0xB4, 0xC6, 0x38, 0xB0, 0x94, 0x44, 0x89, + 0x01, 0x2A, 0x25, 0x59, 0xA3, 0xB0, 0x24, 0x81, + 0xB0, 0x1A, 0xC3, 0x0B, 0xA8, 0x96, 0x0F, 0x80, + 0xC0, 0xC2, 0xB3, 0x94, 0x7D, 0x36, 0xA1, 0x2C, + 0x08, 0x04, 0x98, 0xBE, 0xE4, 0x48, 0x71, 0x6C, + 0x97, 0x34, 0x16, 0xC8, 0x24, 0x28, 0x04, 0xA3, + 0xDA, 0x09, 0x9E, 0xE1, 0x37, 0xB0, 0xBA, 0x90, + 0xFE, 0x4A, 0x5C, 0x6A, 0x89, 0x20, 0x02, 0x76, + 0xA0, 0xCF, 0xB6, 0x43, 0xEC, 0x2C, 0x56, 0xA2, + 0xD7, 0x08, 0xD7, 0xB4, 0x37, 0x3E, 0x44, 0xC1, + 0x50, 0x2A, 0x76, 0x3A, 0x60, 0x05, 0x86, 0xE6, + 0xCD, 0xA6, 0x27, 0x38, 0x97, 0xD4, 0x44, 0x48, + 0x28, 0x7D, 0xC2, 0xE6, 0x02, 0xDC, 0x39, 0x20, + 0x0B, 0xF6, 0x16, 0x62, 0x36, 0x55, 0x9F, 0xD1, + 0x2A, 0x60, 0x89, 0x2A, 0xEB, 0x15, 0x3D, 0xD6, + 0x51, 0xBB, 0x46, 0x99, 0x10, 0xB4, 0xB3, 0x46, + 0x69, 0xF9, 0x1D, 0xA8, 0x65, 0x4D, 0x1E, 0xB7, + 0x2E, 0xB6, 0xE0, 0x28, 0x00, 0xB3, 0xB0, 0xA7, + 0xD0, 0xA4, 0x8C, 0x83, 0x68, 0x54, 0xD3, 0xA8, + 0x3E, 0x65, 0x56, 0x9C, 0xB7, 0x23, 0x0B, 0xB4, + 0x4F, 0x3F, 0x14, 0x3A, 0x6D, 0xEC, 0x5F, 0x2C, + 0x39, 0xAB, 0x90, 0xF2, 0x74, 0xF2, 0x08, 0x8B, + 0xD3, 0xD6, 0xA6, 0xFC, 0xA0, 0x07, 0x02, 0x73, + 0xBE, 0xDC, 0x84, 0x77, 0x7F, 0xB5, 0x2E, 0x3C, + 0x55, 0x8B, 0x0A, 0xE0, 0x61, 0x83, 0xD5, 0xA4, + 0x8D, 0x45, 0x2F, 0x68, 0xE1, 0x52, 0x07, 0xF8, + 0x61, 0x62, 0x7A, 0xCA, 0x14, 0x27, 0x96, 0x30, + 0xF8, 0x2E, 0xC3, 0xA0, 0xCA, 0x07, 0x86, 0x33, + 0xB6, 0x00, 0xAF, 0xA7, 0x97, 0x43, 0xA6, 0x00, + 0x21, 0x5B, 0xE5, 0x63, 0x74, 0x58, 0xCE, 0x2C, + 0xE8, 0xAF, 0xF5, 0xA0, 0x8E, 0xB5, 0x01, 0x7B, + 0x2C, 0x76, 0x65, 0x77, 0x47, 0x9F, 0x8D, 0xC6, + 0xBF, 0x9F, 0x5C, 0xC7, 0x50, 0x89, 0x93, 0x21, + 0x61, 0xB9, 0x6C, 0xEA, 0x40, 0x66, 0x20, 0xAE, + 0xDB, 0x63, 0x04, 0x07, 0xF7, 0x68, 0x7E, 0xBB, + 0xB4, 0x81, 0x4C, 0x79, 0x81, 0x63, 0x7A, 0x48, + 0xA9, 0x0D, 0xE6, 0x80, 0x31, 0xE0, 0x62, 0xA7, + 0xAF, 0x76, 0x12, 0xB4, 0xF5, 0xC7, 0xA6, 0xDA, + 0x86, 0xBD, 0x13, 0x65, 0x29, 0xE6, 0x42, 0x95, + 0xA5, 0x61, 0x3E, 0xA7, 0x3B, 0xD3, 0xD4, 0x44, + 0x8C, 0xB8, 0x1F, 0x24, 0x31, 0x35, 0xC0, 0xA6, + 0x60, 0xBE, 0xB9, 0xC1, 0x7E, 0x65, 0x1D, 0xEF, + 0x46, 0x9A, 0x7D, 0x90, 0xA1, 0x5D, 0x34, 0x81, + 0x09, 0x0B, 0xCB, 0xF2, 0x27, 0x01, 0x23, 0x28, + 0x94, 0x1F, 0xA4, 0x6F, 0x39, 0xC5, 0x00, 0x6A, + 0xD9, 0x3D, 0x45, 0x8A, 0xA6, 0xAD, 0xD6, 0x55, + 0x86, 0x2B, 0x41, 0x8C, 0x30, 0x94, 0xF5, 0x51, + 0x46, 0x0D, 0xF2, 0x15, 0x3A, 0x58, 0x10, 0xA7, + 0xDA, 0x74, 0xF0, 0x61, 0x4C, 0x25, 0x88, 0xBE, + 0x49, 0xDC, 0x6F, 0x5E, 0x88, 0x15, 0x46, 0x42, + 0xBD, 0x1D, 0x37, 0x62, 0x56, 0x33, 0x26, 0x43, + 0x35, 0x07, 0x15, 0x6A, 0x57, 0xC5, 0x76, 0x94, + 0xBD, 0xD2, 0x6E, 0x7A, 0x24, 0x6F, 0xEB, 0x72, + 0x3A, 0xED, 0x67, 0xB0, 0x48, 0x87, 0xC8, 0xE4, + 0x76, 0xB4, 0x8C, 0xAB, 0x59, 0xE5, 0x36, 0x2F, + 0x26, 0xA9, 0xEF, 0x50, 0xC2, 0xBC, 0x80, 0xBA, + 0x14, 0x62, 0x26, 0x21, 0x6F, 0xE6, 0x29, 0x68, + 0xA6, 0x0D, 0x04, 0xE8, 0xC1, 0x70, 0xD7, 0x41, + 0xC7, 0xA2, 0xB0, 0xE1, 0xAB, 0xDA, 0xC9, 0x68, + 0xE2, 0x90, 0x20, 0x83, 0x9D, 0x05, 0x2F, 0xA3, + 0x72, 0x58, 0x56, 0x27, 0xF8, 0xB5, 0x9E, 0xE3, + 0x12, 0xAE, 0x41, 0x4C, 0x97, 0x9D, 0x82, 0x5F, + 0x06, 0xA6, 0x92, 0x9A, 0x79, 0x62, 0x57, 0x18, + 0xA8, 0x57, 0x68, 0xF3, 0x48, 0x6B, 0xD3, 0x2A, + 0x01, 0xBF, 0x9A, 0x8F, 0x21, 0xEA, 0x93, 0x8E, + 0x64, 0x8E, 0xAE, 0x4E, 0x54, 0x48, 0xC3, 0x4C, + 0x3E, 0xB8, 0x88, 0x20, 0xB1, 0x59, 0xEE, 0xDD }; #endif #ifndef WOLFSSL_NO_KYBER1024 static const byte seed_1024[KYBER_MAKEKEY_RAND_SZ] = { - 0x7A, 0xF6, 0x50, 0x22, 0xE0, 0xA4, 0x72, 0xED, - 0x63, 0x88, 0x63, 0x8E, 0xA2, 0x9D, 0x82, 0xDA, - 0x68, 0xB4, 0xCF, 0x9F, 0xFD, 0xF2, 0xB6, 0x7C, - 0xD7, 0x08, 0xEA, 0x5A, 0x37, 0x0C, 0x6A, 0x7C, - 0x7A, 0xF6, 0x50, 0x22, 0xE0, 0xA4, 0x72, 0xED, - 0x63, 0x88, 0x63, 0x8E, 0xA2, 0x9D, 0x82, 0xDA, - 0x68, 0xB4, 0xCF, 0x9F, 0xFD, 0xF2, 0xB6, 0x7C, - 0xD7, 0x08, 0xEA, 0x5A, 0x37, 0x0C, 0x6A, 0x7C + /* d */ + 0x49, 0xAC, 0x8B, 0x99, 0xBB, 0x1E, 0x6A, 0x8E, + 0xA8, 0x18, 0x26, 0x1F, 0x8B, 0xE6, 0x8B, 0xDE, + 0xAA, 0x52, 0x89, 0x7E, 0x7E, 0xC6, 0xC4, 0x0B, + 0x53, 0x0B, 0xC7, 0x60, 0xAB, 0x77, 0xDC, 0xE3, + /* z */ + 0x99, 0xE3, 0x24, 0x68, 0x84, 0x18, 0x1F, 0x8E, + 0x1D, 0xD4, 0x4E, 0x0C, 0x76, 0x29, 0x09, 0x33, + 0x30, 0x22, 0x1F, 0xD6, 0x7D, 0x9B, 0x7D, 0x6E, + 0x15, 0x10, 0xB2, 0xDB, 0xAD, 0x87, 0x62, 0xF7 }; static const byte ek_1024[KYBER1024_PUBLIC_KEY_SIZE] = { - 0x70, 0xE1, 0x3F, 0x30, 0x15, 0x17, 0xB5, 0xA4, - 0x0D, 0x70, 0x36, 0x1F, 0x63, 0x09, 0x41, 0x60, - 0x67, 0x64, 0x6D, 0x2B, 0x71, 0x36, 0x62, 0x6B, - 0xCC, 0xCC, 0x17, 0x0C, 0x66, 0xCE, 0xD4, 0x90, - 0xC7, 0x35, 0x34, 0x4B, 0x62, 0x77, 0x09, 0x7C, - 0xA9, 0x14, 0x21, 0x2A, 0x29, 0x2D, 0xD1, 0x22, - 0xFB, 0xB6, 0x9F, 0xDE, 0xCA, 0x47, 0xFA, 0xB4, - 0x53, 0x2B, 0x8C, 0x80, 0xCE, 0xB7, 0x7F, 0x9C, - 0x54, 0x3E, 0x0B, 0xF1, 0x53, 0x6D, 0x1C, 0x0C, - 0xAE, 0x07, 0x7E, 0x2C, 0xA7, 0x86, 0x2B, 0x45, - 0xA4, 0x10, 0x46, 0x9C, 0xC5, 0xB7, 0x06, 0xBA, - 0xE0, 0x05, 0x1C, 0xB2, 0x96, 0x1D, 0xB7, 0x27, - 0x0B, 0x75, 0xB7, 0x11, 0x69, 0x8D, 0x2B, 0x80, - 0x70, 0x40, 0xD5, 0x62, 0x81, 0x29, 0x43, 0x6F, - 0xBB, 0x58, 0xF1, 0x20, 0x3F, 0x75, 0x56, 0x14, - 0x65, 0xF5, 0x42, 0x57, 0xE4, 0x4D, 0x33, 0xF5, - 0x12, 0xD6, 0x33, 0x43, 0x1D, 0x00, 0xA2, 0xFB, - 0x02, 0x30, 0xC9, 0xBB, 0x9C, 0xDD, 0xFC, 0x83, - 0xBD, 0x65, 0xC9, 0x74, 0x45, 0x30, 0x21, 0x86, - 0xA1, 0x72, 0x23, 0xAD, 0x21, 0x33, 0x28, 0x03, - 0xB9, 0x09, 0xE5, 0xE5, 0x67, 0x19, 0x70, 0xBB, - 0xB0, 0xF1, 0xC4, 0x83, 0x7B, 0xB8, 0x42, 0x73, - 0xBA, 0x67, 0x5A, 0xC0, 0x74, 0xC5, 0x29, 0x0B, - 0x41, 0x1C, 0x25, 0x00, 0x65, 0x70, 0x59, 0x33, - 0x9D, 0xE3, 0x92, 0xF9, 0xCA, 0x30, 0x89, 0x52, - 0xA2, 0x20, 0x1A, 0x58, 0x87, 0x67, 0xAD, 0xC0, - 0x35, 0xBD, 0xF3, 0x30, 0x24, 0xEA, 0x3B, 0x9A, - 0x83, 0xC5, 0xA0, 0xB9, 0xC5, 0x42, 0x5D, 0x14, - 0x07, 0x0C, 0x81, 0xAA, 0xDA, 0x26, 0xBA, 0xC3, - 0xFB, 0xB8, 0xD4, 0xB7, 0xCF, 0xEE, 0x03, 0x92, - 0x37, 0x5C, 0x68, 0x42, 0x73, 0x51, 0xDF, 0xEC, - 0x63, 0x60, 0x9B, 0xBB, 0x50, 0xB4, 0x63, 0xE0, - 0x40, 0x92, 0x85, 0x70, 0x09, 0xD1, 0xE5, 0xB8, - 0x1D, 0x70, 0x7D, 0x14, 0xB8, 0x33, 0xCD, 0x4A, - 0x0B, 0x55, 0x1B, 0xAA, 0x13, 0xEC, 0x48, 0x8A, - 0x15, 0x03, 0xB0, 0x46, 0x7E, 0xE4, 0x02, 0x3C, - 0x3F, 0xE0, 0x32, 0xC7, 0x82, 0x25, 0x06, 0x38, - 0x86, 0xE2, 0x46, 0x8E, 0x00, 0xF7, 0x00, 0x07, - 0x2A, 0x2E, 0xC8, 0xDA, 0x6A, 0xFB, 0x20, 0x6C, - 0x91, 0x90, 0x44, 0x33, 0xBB, 0xCC, 0xB0, 0xE7, - 0x6F, 0x42, 0x46, 0x8C, 0x40, 0xEB, 0x5F, 0x59, - 0xCB, 0x9A, 0xE1, 0xB0, 0x35, 0xE5, 0x21, 0x51, - 0x0B, 0xF2, 0x16, 0xA1, 0xAB, 0xCB, 0x19, 0x03, - 0x3B, 0x7A, 0x65, 0x88, 0x97, 0xC6, 0x58, 0x74, - 0xD5, 0x13, 0x51, 0x83, 0x14, 0x9F, 0x97, 0x9E, - 0x55, 0x3C, 0xCF, 0xBF, 0xA3, 0x90, 0x0C, 0xDA, - 0x6F, 0x01, 0x96, 0x0B, 0x75, 0x15, 0x7F, 0x54, - 0x53, 0xAA, 0x6E, 0x73, 0xB3, 0xED, 0x90, 0x2F, - 0x7D, 0x7C, 0x93, 0x05, 0x97, 0x1B, 0xDF, 0x72, - 0x2E, 0x29, 0x37, 0x16, 0x9A, 0x1B, 0xC0, 0xFA, - 0xEB, 0x6C, 0x92, 0xF7, 0x15, 0x0D, 0x23, 0x30, - 0x87, 0x7C, 0x5D, 0xC5, 0x24, 0x9A, 0xAE, 0x20, - 0x30, 0x26, 0x34, 0xC5, 0xC5, 0xB2, 0x30, 0x53, - 0x52, 0x10, 0x28, 0x12, 0x25, 0x42, 0xF4, 0x85, - 0xA0, 0xEA, 0xC8, 0x69, 0x22, 0x37, 0x20, 0x63, - 0x36, 0x51, 0xF5, 0xB2, 0x47, 0xC6, 0x62, 0xB3, - 0x1A, 0x10, 0x53, 0x8C, 0xA7, 0x49, 0x1B, 0x14, - 0x37, 0xAA, 0x74, 0xF4, 0x28, 0x2D, 0x12, 0x97, - 0x4D, 0x9C, 0x93, 0x4D, 0xF2, 0x14, 0x78, 0x5B, - 0x64, 0x18, 0x46, 0x8B, 0x92, 0xE5, 0x25, 0x28, - 0xC8, 0x44, 0x7A, 0x1C, 0xA4, 0x22, 0xFA, 0x6C, - 0xC8, 0x8E, 0x28, 0xB0, 0x59, 0xF0, 0x4B, 0x23, - 0x59, 0x73, 0x23, 0xF7, 0x2F, 0x3E, 0x23, 0x36, - 0xF8, 0x7C, 0x47, 0x90, 0x5C, 0xBA, 0x65, 0x5B, - 0xB7, 0x3F, 0xC3, 0x2E, 0x18, 0xD4, 0xB7, 0x87, - 0x05, 0xC7, 0x82, 0xEB, 0xCB, 0x43, 0xE2, 0x78, - 0x5C, 0x82, 0xC5, 0xAF, 0x24, 0xB0, 0xE1, 0x69, - 0x9C, 0xFB, 0xC0, 0x25, 0x74, 0x75, 0x79, 0x9A, - 0x53, 0x9B, 0x11, 0xA5, 0x0F, 0x4D, 0xF2, 0xB7, - 0xFA, 0xA2, 0x0B, 0xD8, 0x82, 0x75, 0x15, 0xCA, - 0x37, 0x0F, 0x89, 0xC0, 0xD4, 0xC6, 0x09, 0x02, - 0xF6, 0x56, 0x7C, 0xD6, 0x0B, 0x08, 0x60, 0xA5, - 0x5B, 0xC8, 0x57, 0x2C, 0x43, 0x6C, 0x24, 0x6A, - 0xC2, 0x76, 0x64, 0x4E, 0x7D, 0x60, 0x2A, 0xA5, - 0x7C, 0x01, 0x66, 0x20, 0x18, 0x14, 0x99, 0x1C, - 0x1B, 0xD7, 0x5C, 0x7C, 0x47, 0xC3, 0x48, 0xB6, - 0x7D, 0x77, 0x61, 0x33, 0x86, 0x90, 0x81, 0x44, - 0xEA, 0x83, 0xFF, 0x72, 0x1F, 0x9A, 0x50, 0x07, - 0x6C, 0x51, 0x01, 0x64, 0xD1, 0x8E, 0x05, 0xD0, - 0x5D, 0x98, 0x84, 0xC4, 0x41, 0x46, 0xA0, 0x7C, - 0xCA, 0xCF, 0x89, 0x04, 0x98, 0xED, 0x1A, 0x19, - 0xB2, 0xA1, 0x54, 0x31, 0x72, 0x9D, 0xC1, 0xF1, - 0x2B, 0x7E, 0xA1, 0x0F, 0x9F, 0x92, 0x80, 0x62, - 0xD1, 0x45, 0x4B, 0x4B, 0x9F, 0x68, 0xE5, 0x99, - 0x90, 0x29, 0x0B, 0xE3, 0x72, 0x8B, 0x32, 0x89, - 0x56, 0x93, 0x63, 0xAB, 0x10, 0x05, 0x13, 0x1B, - 0x23, 0x81, 0xA0, 0x8C, 0xC2, 0xBF, 0x94, 0x3E, - 0x95, 0xD5, 0xB2, 0x1B, 0xC6, 0xAA, 0xBC, 0x22, - 0x73, 0x34, 0x8B, 0xC7, 0x2B, 0xD0, 0x93, 0xB7, - 0xB5, 0x61, 0x7A, 0xE8, 0x7F, 0x60, 0x2B, 0xB9, - 0x89, 0xE6, 0xAF, 0xC4, 0x4B, 0x81, 0x51, 0x20, - 0x76, 0xA3, 0xA8, 0x76, 0xE0, 0xE2, 0x5F, 0x97, - 0x62, 0xB4, 0x62, 0x08, 0x19, 0x85, 0x50, 0x2F, - 0x26, 0xB2, 0x87, 0xA2, 0x93, 0x6D, 0x5B, 0x1A, - 0xCF, 0xFC, 0xEC, 0x4E, 0xEE, 0x77, 0xA9, 0xCB, - 0xA9, 0x80, 0xEB, 0x9B, 0x5F, 0xDE, 0x75, 0x53, - 0x9F, 0x65, 0x09, 0x04, 0x67, 0x7D, 0xBE, 0x29, - 0xAB, 0x8B, 0xB9, 0x18, 0xA3, 0x49, 0x48, 0x03, - 0xEC, 0xA5, 0x9A, 0x2C, 0x32, 0xE5, 0xB5, 0xC8, - 0x3B, 0x0B, 0x80, 0xB1, 0x10, 0x2C, 0xD7, 0xD9, - 0x48, 0x2B, 0x45, 0x9B, 0x6B, 0x74, 0x49, 0x1E, - 0xC3, 0x0C, 0x4B, 0xE7, 0x7C, 0x2B, 0x52, 0x4A, - 0xF7, 0xB3, 0xAD, 0x1F, 0x71, 0x34, 0x1D, 0xF0, - 0xA7, 0x6F, 0x25, 0x5C, 0x29, 0x03, 0xC8, 0x82, - 0x08, 0x07, 0x93, 0x79, 0x93, 0x0A, 0x95, 0x13, - 0xF3, 0x90, 0x12, 0x6E, 0x73, 0x2A, 0x2B, 0xB0, - 0x94, 0xBF, 0xA6, 0xBF, 0x0A, 0x43, 0x2B, 0xCD, - 0x65, 0x7D, 0xAF, 0xCB, 0x25, 0xC8, 0xBB, 0x15, - 0xE0, 0x95, 0x5D, 0x09, 0x9B, 0x74, 0xFF, 0x1A, - 0x4D, 0xE6, 0x55, 0x9C, 0xD6, 0x79, 0x7C, 0x38, - 0xC4, 0x8C, 0x11, 0x34, 0xCA, 0x2C, 0x97, 0x92, - 0x43, 0xF3, 0x15, 0x2A, 0xF4, 0xBB, 0xE4, 0xD7, - 0xA6, 0xBC, 0x09, 0x87, 0x21, 0x33, 0x92, 0x0C, - 0xD2, 0x3B, 0x3E, 0xF9, 0x84, 0x8C, 0xCC, 0x68, - 0x45, 0xD6, 0x47, 0xB5, 0x38, 0x75, 0x57, 0x73, - 0x65, 0x13, 0xD5, 0x85, 0x60, 0x84, 0x51, 0x92, - 0xF9, 0x26, 0x51, 0x59, 0x93, 0x2E, 0x57, 0x2A, - 0x88, 0xC4, 0x4E, 0x65, 0x66, 0x76, 0x0C, 0x06, - 0x1C, 0x67, 0xFC, 0xB5, 0xBF, 0x21, 0x00, 0x95, - 0xE2, 0x14, 0xDA, 0x74, 0x53, 0x57, 0xE3, 0x69, - 0x96, 0xD8, 0xC0, 0x66, 0x31, 0x1B, 0xBC, 0x76, - 0x1A, 0x1F, 0xD2, 0x52, 0x73, 0xD2, 0x1E, 0xAB, - 0x50, 0x01, 0x05, 0x63, 0xCD, 0x64, 0x68, 0xA4, - 0xEA, 0x83, 0x6B, 0x6D, 0x64, 0xBD, 0x2B, 0xD7, - 0x6D, 0xBE, 0x35, 0x82, 0xD5, 0x73, 0x6A, 0x60, - 0x5A, 0x55, 0x09, 0xFC, 0x28, 0x78, 0x9B, 0x56, - 0xB8, 0x84, 0xAE, 0x9A, 0x60, 0x41, 0x5F, 0x55, - 0x67, 0x4B, 0xE6, 0x01, 0x57, 0x6C, 0x7C, 0xEE, - 0x58, 0x14, 0x3B, 0xF0, 0x54, 0x80, 0x6A, 0xBC, - 0xB3, 0x45, 0xA2, 0x56, 0xCB, 0xC4, 0x54, 0xE3, - 0x43, 0xF3, 0xCC, 0x7A, 0xDE, 0x65, 0x56, 0x2F, - 0xD2, 0x9E, 0xB2, 0x59, 0x73, 0x7B, 0xB3, 0xCF, - 0x96, 0x49, 0xBD, 0xEA, 0x28, 0x3F, 0xB0, 0x72, - 0x65, 0x67, 0x7C, 0x98, 0x08, 0xD1, 0x31, 0x19, - 0xC0, 0xA2, 0xAD, 0xF7, 0x45, 0xDE, 0x69, 0x75, - 0xF4, 0x56, 0x2C, 0xD6, 0x15, 0x57, 0xB3, 0x96, - 0x5D, 0x2B, 0x07, 0x2F, 0x00, 0x0A, 0xA7, 0xE0, - 0xA3, 0x57, 0xE1, 0x25, 0x3E, 0xAF, 0xEA, 0x7F, - 0xDF, 0xCC, 0x92, 0xFA, 0x87, 0x63, 0x0D, 0xD2, - 0x27, 0x6C, 0xE4, 0x2E, 0x82, 0x0B, 0x69, 0xD1, - 0xFC, 0x2E, 0x47, 0xD5, 0xC4, 0x98, 0xA5, 0x5B, - 0x3B, 0x29, 0xC3, 0x4E, 0x64, 0x90, 0x3D, 0x04, - 0x7A, 0xB1, 0xC0, 0x40, 0x24, 0x95, 0x8F, 0x70, - 0x11, 0x95, 0xF5, 0xD1, 0x3E, 0xC6, 0x70, 0x6B, - 0x84, 0x48, 0x50, 0x3A, 0x54, 0x99, 0x22, 0xA5, - 0x8A, 0x24, 0xB6, 0x7C, 0x93, 0x63, 0x27, 0x56, - 0xB7, 0x7D, 0x22, 0x54, 0x07, 0x31, 0x61, 0x71, - 0xDE, 0xEC, 0x56, 0x71, 0x44, 0x35, 0xCF, 0x94, - 0xCC, 0xF4, 0x59, 0x9E, 0x00, 0xD1, 0x0E, 0x56, - 0x96, 0x22, 0xBA, 0xDA, 0x82, 0x0C, 0x45, 0x2F, - 0x25, 0x42, 0xAD, 0xF0, 0x87, 0x65, 0xCA, 0x93, - 0xAE, 0x38, 0xEB, 0x02, 0x5D, 0xE3, 0x1C, 0xFF, - 0x79, 0x74, 0x54, 0x9A, 0x78, 0x25, 0xA8, 0x31, - 0xDD, 0x05, 0x4E, 0x87, 0xB8, 0x4C, 0x5F, 0x25, - 0x47, 0xFF, 0x47, 0xB4, 0x6F, 0x88, 0xC9, 0x9F, - 0x15, 0x48, 0xE9, 0x33, 0xA6, 0xF4, 0xD8, 0x7F, - 0x1A, 0x4A, 0x1B, 0x00, 0xE3, 0x9E, 0x02, 0xD6, - 0x0E, 0x51, 0xEB, 0x60, 0x3C, 0x1C, 0x0D, 0x80, - 0x7A, 0xCD, 0xAB, 0x08, 0xBA, 0xA2, 0xB9, 0x98, - 0x69, 0xB7, 0x5C, 0xA2, 0xC4, 0xB9, 0x63, 0x68, - 0xB5, 0x17, 0x80, 0xBD, 0x1E, 0xC7, 0x5B, 0x11, - 0x0B, 0x9F, 0xA6, 0x65, 0x56, 0x87, 0x6C, 0x5F, - 0x48, 0x79, 0x7D, 0x09, 0x01, 0x38, 0xF7, 0x54, - 0xAE, 0x30, 0x53, 0x3D, 0x36, 0xAA, 0x44, 0xB9, - 0xB1, 0x70, 0x2A, 0x6A, 0x8A, 0x56, 0x62, 0x6B, - 0xF0, 0x45, 0x1A, 0x37, 0xA7, 0xAC, 0x1A, 0x33, - 0x70, 0x76, 0xE5, 0x1E, 0x0A, 0x6B, 0x03, 0x00, - 0xC2, 0xC7, 0x90, 0xA4, 0x43, 0x7E, 0xA2, 0x8D, - 0x7E, 0xC9, 0x8C, 0x41, 0x9B, 0x37, 0xD6, 0xAA, - 0x97, 0x04, 0x17, 0x43, 0x5F, 0x91, 0xBE, 0xDC, - 0x2B, 0x1F, 0x4B, 0xC8, 0x15, 0x8A, 0x51, 0xB1, - 0xF4, 0x71, 0x51, 0x6F, 0xE8, 0x24, 0x28, 0x7C, - 0x89, 0x6B, 0x89, 0x1B, 0x49, 0xF2, 0x54, 0xDD, - 0x36, 0x35, 0x9B, 0x89, 0xC8, 0x24, 0xEB, 0x3F, - 0x62, 0x48, 0x02, 0x7F, 0xBB, 0xAD, 0x4C, 0xF2, - 0x91, 0x18, 0xCB, 0x50, 0xEB, 0xB6, 0x25, 0xA3, - 0x7C, 0x53, 0x7A, 0x02, 0x23, 0xF0, 0xEB, 0x70, - 0x85, 0xB5, 0xC7, 0xEC, 0x60, 0x75, 0x70, 0xDB, - 0x91, 0x85, 0xD5, 0x99, 0x02, 0xBC, 0x26, 0xC6, - 0x54, 0xA2, 0x80, 0x4C, 0x0D, 0x94, 0x67, 0x93, - 0xD8, 0xA2, 0x14, 0x82, 0xAC, 0x4F, 0x05, 0xE9, - 0x01, 0x62, 0x60, 0x33, 0x1D, 0xCC, 0x58, 0xBC, - 0x66, 0xAF, 0x3C, 0xA7, 0x58, 0x54, 0x40, 0x21, - 0x6A, 0xA0, 0x26, 0x3B, 0x2A, 0x72, 0x5E, 0x08, - 0x0F, 0x6F, 0x9C, 0x5B, 0x6A, 0x9C, 0x9D, 0xA2, - 0x93, 0x55, 0x18, 0x9B, 0x4B, 0x95, 0xB1, 0x37, - 0xD1, 0x22, 0x5F, 0x25, 0x2A, 0xC7, 0x97, 0xB0, - 0x64, 0x6C, 0xAC, 0x52, 0x16, 0x4B, 0x59, 0x72, - 0xA9, 0x92, 0x65, 0xD3, 0x47, 0xFC, 0x7C, 0x35, - 0x91, 0xD1, 0x5F, 0xFE, 0x68, 0x1C, 0x06, 0xD4, - 0x38, 0xCC, 0xEB, 0x60, 0xBB, 0x63, 0x10, 0xB7, - 0x95, 0x32, 0x89, 0x72, 0x0E, 0x2C, 0x72, 0x87, - 0x30, 0x05, 0x23, 0x37, 0xAC, 0xA7, 0xC8, 0x52, - 0x1A, 0xB4, 0x4F, 0x1E, 0x2A, 0x04, 0x9B, 0x83, - 0xE0, 0x77, 0x4C, 0x96, 0xCD, 0x8C, 0x87, 0x6F, - 0xA6, 0x75, 0xD0, 0x92, 0x39, 0x77, 0x27, 0x1B + 0xA0, 0x41, 0x84, 0xD4, 0xBC, 0x7B, 0x53, 0x2A, + 0x0F, 0x70, 0xA5, 0x4D, 0x77, 0x57, 0xCD, 0xE6, + 0x17, 0x5A, 0x68, 0x43, 0xB8, 0x61, 0xCB, 0x2B, + 0xC4, 0x83, 0x0C, 0x00, 0x12, 0x55, 0x4C, 0xFC, + 0x5D, 0x2C, 0x8A, 0x20, 0x27, 0xAA, 0x3C, 0xD9, + 0x67, 0x13, 0x0E, 0x9B, 0x96, 0x24, 0x1B, 0x11, + 0xC4, 0x32, 0x0C, 0x76, 0x49, 0xCC, 0x23, 0xA7, + 0x1B, 0xAF, 0xE6, 0x91, 0xAF, 0xC0, 0x8E, 0x68, + 0x0B, 0xCE, 0xF4, 0x29, 0x07, 0x00, 0x07, 0x18, + 0xE4, 0xEA, 0xCE, 0x8D, 0xA2, 0x82, 0x14, 0x19, + 0x7B, 0xE1, 0xC2, 0x69, 0xDA, 0x9C, 0xB5, 0x41, + 0xE1, 0xA3, 0xCE, 0x97, 0xCF, 0xAD, 0xF9, 0xC6, + 0x05, 0x87, 0x80, 0xFE, 0x67, 0x93, 0xDB, 0xFA, + 0x82, 0x18, 0xA2, 0x76, 0x0B, 0x80, 0x2B, 0x8D, + 0xA2, 0xAA, 0x27, 0x1A, 0x38, 0x77, 0x25, 0x23, + 0xA7, 0x67, 0x36, 0xA7, 0xA3, 0x1B, 0x9D, 0x30, + 0x37, 0xAD, 0x21, 0xCE, 0xBB, 0x11, 0xA4, 0x72, + 0xB8, 0x79, 0x2E, 0xB1, 0x75, 0x58, 0xB9, 0x40, + 0xE7, 0x08, 0x83, 0xF2, 0x64, 0x59, 0x2C, 0x68, + 0x9B, 0x24, 0x0B, 0xB4, 0x3D, 0x54, 0x08, 0xBF, + 0x44, 0x64, 0x32, 0xF4, 0x12, 0xF4, 0xB9, 0xA5, + 0xF6, 0x86, 0x5C, 0xC2, 0x52, 0xA4, 0x3C, 0xF4, + 0x0A, 0x32, 0x03, 0x91, 0x55, 0x55, 0x91, 0xD6, + 0x75, 0x61, 0xFD, 0xD0, 0x53, 0x53, 0xAB, 0x6B, + 0x01, 0x9B, 0x3A, 0x08, 0xA7, 0x33, 0x53, 0xD5, + 0x1B, 0x61, 0x13, 0xAB, 0x2F, 0xA5, 0x1D, 0x97, + 0x56, 0x48, 0xEE, 0x25, 0x4A, 0xF8, 0x9A, 0x23, + 0x05, 0x04, 0xA2, 0x36, 0xA4, 0x65, 0x82, 0x57, + 0x74, 0x0B, 0xDC, 0xBB, 0xE1, 0x70, 0x8A, 0xB0, + 0x22, 0xC3, 0xC5, 0x88, 0xA4, 0x10, 0xDB, 0x3B, + 0x9C, 0x30, 0x8A, 0x06, 0x27, 0x5B, 0xDF, 0x5B, + 0x48, 0x59, 0xD3, 0xA2, 0x61, 0x7A, 0x29, 0x5E, + 0x1A, 0x22, 0xF9, 0x01, 0x98, 0xBA, 0xD0, 0x16, + 0x6F, 0x4A, 0x94, 0x34, 0x17, 0xC5, 0xB8, 0x31, + 0x73, 0x6C, 0xB2, 0xC8, 0x58, 0x0A, 0xBF, 0xDE, + 0x57, 0x14, 0xB5, 0x86, 0xAB, 0xEE, 0xC0, 0xA1, + 0x75, 0xA0, 0x8B, 0xC7, 0x10, 0xC7, 0xA2, 0x89, + 0x5D, 0xE9, 0x3A, 0xC4, 0x38, 0x06, 0x1B, 0xF7, + 0x76, 0x5D, 0x0D, 0x21, 0xCD, 0x41, 0x81, 0x67, + 0xCA, 0xF8, 0x9D, 0x1E, 0xFC, 0x34, 0x48, 0xBC, + 0xBB, 0x96, 0xD6, 0x9B, 0x3E, 0x01, 0x0C, 0x82, + 0xD1, 0x5C, 0xAB, 0x6C, 0xAC, 0xC6, 0x79, 0x9D, + 0x36, 0x39, 0x66, 0x9A, 0x5B, 0x21, 0xA6, 0x33, + 0xC8, 0x65, 0xF8, 0x59, 0x3B, 0x5B, 0x7B, 0xC8, + 0x00, 0x26, 0x2B, 0xB8, 0x37, 0xA9, 0x24, 0xA6, + 0xC5, 0x44, 0x0E, 0x4F, 0xC7, 0x3B, 0x41, 0xB2, + 0x30, 0x92, 0xC3, 0x91, 0x2F, 0x4C, 0x6B, 0xEB, + 0xB4, 0xC7, 0xB4, 0xC6, 0x29, 0x08, 0xB0, 0x37, + 0x75, 0x66, 0x6C, 0x22, 0x22, 0x0D, 0xF9, 0xC8, + 0x88, 0x23, 0xE3, 0x44, 0xC7, 0x30, 0x83, 0x32, + 0x34, 0x5C, 0x8B, 0x79, 0x5D, 0x34, 0xE8, 0xC0, + 0x51, 0xF2, 0x1F, 0x5A, 0x21, 0xC2, 0x14, 0xB6, + 0x98, 0x41, 0x35, 0x87, 0x09, 0xB1, 0xC3, 0x05, + 0xB3, 0x2C, 0xC2, 0xC3, 0x80, 0x6A, 0xE9, 0xCC, + 0xD3, 0x81, 0x9F, 0xFF, 0x45, 0x07, 0xFE, 0x52, + 0x0F, 0xBF, 0xC2, 0x71, 0x99, 0xBC, 0x23, 0xBE, + 0x6B, 0x9B, 0x2D, 0x2A, 0xC1, 0x71, 0x75, 0x79, + 0xAC, 0x76, 0x92, 0x79, 0xE2, 0xA7, 0xAA, 0xC6, + 0x8A, 0x37, 0x1A, 0x47, 0xBA, 0x3A, 0x7D, 0xBE, + 0x01, 0x6F, 0x14, 0xE1, 0xA7, 0x27, 0x33, 0x36, + 0x63, 0xC4, 0xA5, 0xCD, 0x1A, 0x0F, 0x88, 0x36, + 0xCF, 0x7B, 0x5C, 0x49, 0xAC, 0x51, 0x48, 0x5C, + 0xA6, 0x03, 0x45, 0xC9, 0x90, 0xE0, 0x68, 0x88, + 0x72, 0x00, 0x03, 0x73, 0x13, 0x22, 0xC5, 0xB8, + 0xCD, 0x5E, 0x69, 0x07, 0xFD, 0xA1, 0x15, 0x7F, + 0x46, 0x8F, 0xD3, 0xFC, 0x20, 0xFA, 0x81, 0x75, + 0xEE, 0xC9, 0x5C, 0x29, 0x1A, 0x26, 0x2B, 0xA8, + 0xC5, 0xBE, 0x99, 0x08, 0x72, 0x41, 0x89, 0x30, + 0x85, 0x23, 0x39, 0xD8, 0x8A, 0x19, 0xB3, 0x7F, + 0xEF, 0xA3, 0xCF, 0xE8, 0x21, 0x75, 0xC2, 0x24, + 0x40, 0x7C, 0xA4, 0x14, 0xBA, 0xEB, 0x37, 0x92, + 0x3B, 0x4D, 0x2D, 0x83, 0x13, 0x4A, 0xE1, 0x54, + 0xE4, 0x90, 0xA9, 0xB4, 0x5A, 0x05, 0x63, 0xB0, + 0x6C, 0x95, 0x3C, 0x33, 0x01, 0x45, 0x0A, 0x21, + 0x76, 0xA0, 0x7C, 0x61, 0x4A, 0x74, 0xE3, 0x47, + 0x8E, 0x48, 0x50, 0x9F, 0x9A, 0x60, 0xAE, 0x94, + 0x5A, 0x8E, 0xBC, 0x78, 0x15, 0x12, 0x1D, 0x90, + 0xA3, 0xB0, 0xE0, 0x70, 0x91, 0xA0, 0x96, 0xCF, + 0x02, 0xC5, 0x7B, 0x25, 0xBC, 0xA5, 0x81, 0x26, + 0xAD, 0x0C, 0x62, 0x9C, 0xE1, 0x66, 0xA7, 0xED, + 0xB4, 0xB3, 0x32, 0x21, 0xA0, 0xD3, 0xF7, 0x2B, + 0x85, 0xD5, 0x62, 0xEC, 0x69, 0x8B, 0x7D, 0x0A, + 0x91, 0x3D, 0x73, 0x80, 0x6F, 0x1C, 0x5C, 0x87, + 0xB3, 0x8E, 0xC0, 0x03, 0xCB, 0x30, 0x3A, 0x3D, + 0xC5, 0x1B, 0x4B, 0x35, 0x35, 0x6A, 0x67, 0x82, + 0x6D, 0x6E, 0xDA, 0xA8, 0xFE, 0xB9, 0x3B, 0x98, + 0x49, 0x3B, 0x2D, 0x1C, 0x11, 0xB6, 0x76, 0xA6, + 0xAD, 0x95, 0x06, 0xA1, 0xAA, 0xAE, 0x13, 0xA8, + 0x24, 0xC7, 0xC0, 0x8D, 0x1C, 0x6C, 0x2C, 0x4D, + 0xBA, 0x96, 0x42, 0xC7, 0x6E, 0xA7, 0xF6, 0xC8, + 0x26, 0x4B, 0x64, 0xA2, 0x3C, 0xCC, 0xA9, 0xA7, + 0x46, 0x35, 0xFC, 0xBF, 0x03, 0xE0, 0x0F, 0x1B, + 0x57, 0x22, 0xB2, 0x14, 0x37, 0x67, 0x90, 0x79, + 0x3B, 0x2C, 0x4F, 0x0A, 0x13, 0xB5, 0xC4, 0x07, + 0x60, 0xB4, 0x21, 0x8E, 0x1D, 0x25, 0x94, 0xDC, + 0xB3, 0x0A, 0x70, 0xD9, 0xC1, 0x78, 0x2A, 0x5D, + 0xD3, 0x05, 0x76, 0xFA, 0x41, 0x44, 0xBF, 0xC8, + 0x41, 0x6E, 0xDA, 0x81, 0x18, 0xFC, 0x64, 0x72, + 0xF5, 0x6A, 0x97, 0x95, 0x86, 0xF3, 0x3B, 0xB0, + 0x70, 0xFB, 0x0F, 0x1B, 0x0B, 0x10, 0xBC, 0x48, + 0x97, 0xEB, 0xE0, 0x1B, 0xCA, 0x38, 0x93, 0xD4, + 0xE1, 0x6A, 0xDB, 0x25, 0x09, 0x3A, 0x74, 0x17, + 0xD0, 0x70, 0x8C, 0x83, 0xA2, 0x63, 0x22, 0xE2, + 0x2E, 0x63, 0x30, 0x09, 0x1E, 0x30, 0x15, 0x2B, + 0xF8, 0x23, 0x59, 0x7C, 0x04, 0xCC, 0xF4, 0xCF, + 0xC7, 0x33, 0x15, 0x78, 0xF4, 0x3A, 0x27, 0x26, + 0xCC, 0xB4, 0x28, 0x28, 0x9A, 0x90, 0xC8, 0x63, + 0x25, 0x9D, 0xD1, 0x80, 0xC5, 0xFF, 0x14, 0x2B, + 0xEF, 0x41, 0xC7, 0x71, 0x70, 0x94, 0xBE, 0x07, + 0x85, 0x6D, 0xA2, 0xB1, 0x40, 0xFA, 0x67, 0x71, + 0x09, 0x67, 0x35, 0x6A, 0xA4, 0x7D, 0xFB, 0xC8, + 0xD2, 0x55, 0xB4, 0x72, 0x2A, 0xB8, 0x6D, 0x43, + 0x9B, 0x7E, 0x0A, 0x60, 0x90, 0x25, 0x1D, 0x2D, + 0x4C, 0x1E, 0xD5, 0xF2, 0x0B, 0xBE, 0x68, 0x07, + 0xBF, 0x65, 0xA9, 0x0B, 0x7C, 0xB2, 0xEC, 0x01, + 0x02, 0xAF, 0x02, 0x80, 0x9D, 0xC9, 0xAC, 0x7D, + 0x0A, 0x3A, 0xBC, 0x69, 0xC1, 0x83, 0x65, 0xBC, + 0xFF, 0x59, 0x18, 0x5F, 0x33, 0x99, 0x68, 0x87, + 0x74, 0x61, 0x85, 0x90, 0x6C, 0x01, 0x91, 0xAE, + 0xD4, 0x40, 0x7E, 0x13, 0x94, 0x46, 0x45, 0x9B, + 0xE2, 0x9C, 0x68, 0x22, 0x71, 0x76, 0x44, 0x35, + 0x3D, 0x24, 0xAB, 0x63, 0x39, 0x15, 0x6A, 0x9C, + 0x42, 0x49, 0x09, 0xF0, 0xA9, 0x02, 0x5B, 0xB7, + 0x47, 0x20, 0x77, 0x9B, 0xE4, 0x3F, 0x16, 0xD8, + 0x1C, 0x8C, 0xC6, 0x66, 0xE9, 0x97, 0x10, 0xD8, + 0xC6, 0x8B, 0xB5, 0xCC, 0x4E, 0x12, 0xF3, 0x14, + 0xE9, 0x25, 0xA5, 0x51, 0xF0, 0x9C, 0xC5, 0x90, + 0x03, 0xA1, 0xF8, 0x81, 0x03, 0xC2, 0x54, 0xBB, + 0x97, 0x8D, 0x75, 0xF3, 0x94, 0xD3, 0x54, 0x0E, + 0x31, 0xE7, 0x71, 0xCD, 0xA3, 0x6E, 0x39, 0xEC, + 0x54, 0xA6, 0x2B, 0x58, 0x32, 0x66, 0x4D, 0x82, + 0x1A, 0x72, 0xF1, 0xE6, 0xAF, 0xBB, 0xA2, 0x7F, + 0x84, 0x29, 0x5B, 0x26, 0x94, 0xC4, 0x98, 0x49, + 0x8E, 0x81, 0x2B, 0xC8, 0xE9, 0x37, 0x8F, 0xE5, + 0x41, 0xCE, 0xC5, 0x89, 0x1B, 0x25, 0x06, 0x29, + 0x01, 0xCB, 0x72, 0x12, 0xE3, 0xCD, 0xC4, 0x61, + 0x79, 0xEC, 0x5B, 0xCE, 0xC1, 0x0B, 0xC0, 0xB9, + 0x31, 0x1D, 0xE0, 0x50, 0x74, 0x29, 0x06, 0x87, + 0xFD, 0x6A, 0x53, 0x92, 0x67, 0x16, 0x54, 0x28, + 0x4C, 0xD9, 0xC8, 0xCC, 0x3E, 0xBA, 0x80, 0xEB, + 0x3B, 0x66, 0x2E, 0xB5, 0x3E, 0xB7, 0x51, 0x16, + 0x70, 0x4A, 0x1F, 0xEB, 0x5C, 0x2D, 0x05, 0x63, + 0x38, 0x53, 0x28, 0x68, 0xDD, 0xF2, 0x4E, 0xB8, + 0x99, 0x2A, 0xB8, 0x56, 0x5D, 0x9E, 0x49, 0x0C, + 0xAD, 0xF1, 0x48, 0x04, 0x36, 0x0D, 0xAA, 0x90, + 0x71, 0x8E, 0xAB, 0x61, 0x6B, 0xAB, 0x07, 0x65, + 0xD3, 0x39, 0x87, 0xB4, 0x7E, 0xFB, 0x65, 0x99, + 0xC5, 0x56, 0x32, 0x35, 0xE6, 0x1E, 0x4B, 0xE6, + 0x70, 0xE9, 0x79, 0x55, 0xAB, 0x29, 0x2D, 0x97, + 0x32, 0xCB, 0x89, 0x30, 0x94, 0x8A, 0xC8, 0x2D, + 0xF2, 0x30, 0xAC, 0x72, 0x29, 0x7A, 0x23, 0x67, + 0x9D, 0x6B, 0x94, 0xC1, 0x7F, 0x13, 0x59, 0x48, + 0x32, 0x54, 0xFE, 0xDC, 0x2F, 0x05, 0x81, 0x9F, + 0x0D, 0x06, 0x9A, 0x44, 0x3B, 0x78, 0xE3, 0xFC, + 0x6C, 0x3E, 0xF4, 0x71, 0x4B, 0x05, 0xA3, 0xFC, + 0xA8, 0x1C, 0xBB, 0xA6, 0x02, 0x42, 0xA7, 0x06, + 0x0C, 0xD8, 0x85, 0xD8, 0xF3, 0x99, 0x81, 0xBB, + 0x18, 0x09, 0x2B, 0x23, 0xDA, 0xA5, 0x9F, 0xD9, + 0x57, 0x83, 0x88, 0x68, 0x8A, 0x09, 0xBB, 0xA0, + 0x79, 0xBC, 0x80, 0x9A, 0x54, 0x84, 0x3A, 0x60, + 0x38, 0x5E, 0x23, 0x10, 0xBB, 0xCB, 0xCC, 0x02, + 0x13, 0xCE, 0x3D, 0xFA, 0xAB, 0x33, 0xB4, 0x7F, + 0x9D, 0x63, 0x05, 0xBC, 0x95, 0xC6, 0x10, 0x78, + 0x13, 0xC5, 0x85, 0xC4, 0xB6, 0x57, 0xBF, 0x30, + 0x54, 0x28, 0x33, 0xB1, 0x49, 0x49, 0xF5, 0x73, + 0xC0, 0x61, 0x2A, 0xD5, 0x24, 0xBA, 0xAE, 0x69, + 0x59, 0x0C, 0x12, 0x77, 0xB8, 0x6C, 0x28, 0x65, + 0x71, 0xBF, 0x66, 0xB3, 0xCF, 0xF4, 0x6A, 0x38, + 0x58, 0xC0, 0x99, 0x06, 0xA7, 0x94, 0xDF, 0x4A, + 0x06, 0xE9, 0xD4, 0xB0, 0xA2, 0xE4, 0x3F, 0x10, + 0xF7, 0x2A, 0x6C, 0x6C, 0x47, 0xE5, 0x64, 0x6E, + 0x2C, 0x79, 0x9B, 0x71, 0xC3, 0x3E, 0xD2, 0xF0, + 0x1E, 0xEB, 0x45, 0x93, 0x8E, 0xB7, 0xA4, 0xE2, + 0xE2, 0x90, 0x8C, 0x53, 0x55, 0x8A, 0x54, 0x0D, + 0x35, 0x03, 0x69, 0xFA, 0x18, 0x9C, 0x61, 0x69, + 0x43, 0xF7, 0x98, 0x1D, 0x76, 0x18, 0xCF, 0x02, + 0xA5, 0xB0, 0xA2, 0xBC, 0xC4, 0x22, 0xE8, 0x57, + 0xD1, 0xA4, 0x78, 0x71, 0x25, 0x3D, 0x08, 0x29, + 0x3C, 0x1C, 0x17, 0x9B, 0xCD, 0xC0, 0x43, 0x70, + 0x69, 0x10, 0x74, 0x18, 0x20, 0x5F, 0xDB, 0x98, + 0x56, 0x62, 0x3B, 0x8C, 0xA6, 0xB6, 0x94, 0xC9, + 0x6C, 0x08, 0x4B, 0x17, 0xF1, 0x3B, 0xB6, 0xDF, + 0x12, 0xB2, 0xCF, 0xBB, 0xC2, 0xB0, 0xE0, 0xC3, + 0x4B, 0x00, 0xD0, 0xFC, 0xD0, 0xAE, 0xCF, 0xB2, + 0x79, 0x24, 0xF6, 0x98, 0x4E, 0x74, 0x7B, 0xE2, + 0xA0, 0x9D, 0x83, 0xA8, 0x66, 0x45, 0x90, 0xA8, + 0x07, 0x73, 0x31, 0x49, 0x1A, 0x4F, 0x7D, 0x72, + 0x08, 0x43, 0xF2, 0x3E, 0x65, 0x2C, 0x6F, 0xA8, + 0x40, 0x30, 0x8D, 0xB4, 0x02, 0x03, 0x37, 0xAA, + 0xD3, 0x79, 0x67, 0x03, 0x4A, 0x9F, 0xB5, 0x23, + 0xB6, 0x7C, 0xA7, 0x03, 0x30, 0xF0, 0x2D, 0x9E, + 0xA2, 0x0C, 0x1E, 0x84, 0xCB, 0x8E, 0x57, 0x57, + 0xC9, 0xE1, 0x89, 0x6B, 0x60, 0x58, 0x14, 0x41, + 0xED, 0x61, 0x8A, 0xA5, 0xB2, 0x6D, 0xA5, 0x6C, + 0x0A, 0x5A, 0x73, 0xC4, 0xDC, 0xFD, 0x75, 0x5E, + 0x61, 0x0B, 0x4F, 0xC8, 0x1F, 0xF8, 0x4E, 0x21 }; static const byte dk_1024[KYBER1024_PRIVATE_KEY_SIZE] = { - 0x8A, 0xD0, 0xB5, 0xF0, 0x9A, 0x25, 0xAA, 0x93, - 0x5D, 0xD9, 0xDA, 0x34, 0xAB, 0x82, 0xCA, 0x75, - 0xA1, 0x2D, 0x66, 0xE9, 0x9C, 0xF4, 0x8B, 0xCA, - 0x45, 0xB9, 0xB2, 0xDB, 0x44, 0x1B, 0xC2, 0x97, - 0x1B, 0xDC, 0x99, 0x22, 0xB5, 0xF8, 0xBC, 0x3C, - 0x06, 0x78, 0x54, 0x67, 0x59, 0x07, 0x3C, 0xB8, - 0x8E, 0x26, 0xBA, 0xD1, 0xB1, 0xB3, 0xA4, 0x64, - 0x6A, 0x65, 0x29, 0xC6, 0x32, 0xEA, 0xA3, 0x47, - 0x73, 0x4A, 0x3B, 0xE5, 0x83, 0xD4, 0x71, 0x78, - 0x09, 0x4C, 0x4A, 0x67, 0x0C, 0xBC, 0x41, 0xEC, - 0x06, 0x89, 0x76, 0x56, 0x68, 0x54, 0x2E, 0x6F, - 0x15, 0xA7, 0xD5, 0x86, 0xC9, 0xE2, 0x6A, 0x6A, - 0x03, 0xC7, 0x14, 0x69, 0xC2, 0xC5, 0x3F, 0x7B, - 0x14, 0x1B, 0x23, 0x2D, 0x86, 0x21, 0x6A, 0x25, - 0xC7, 0xA8, 0xF3, 0x68, 0x52, 0x85, 0x8C, 0x07, - 0xA9, 0x52, 0x4E, 0xE1, 0x7B, 0xA6, 0x34, 0x0A, - 0xA2, 0xA2, 0x15, 0xC1, 0xEA, 0x85, 0x21, 0x67, - 0xB6, 0x89, 0x1C, 0xC1, 0x66, 0xC2, 0xFA, 0x13, - 0xA0, 0x27, 0x0A, 0x22, 0x98, 0x34, 0x13, 0xE0, - 0xAC, 0xC4, 0x44, 0xBF, 0x40, 0xE2, 0x8C, 0x45, - 0xE1, 0x4E, 0x07, 0x40, 0x4F, 0x62, 0x99, 0x63, - 0x69, 0x59, 0x7F, 0x10, 0xFC, 0xC1, 0x80, 0xEC, - 0xAC, 0xAD, 0x1A, 0x67, 0x19, 0xAB, 0x9F, 0x1B, - 0x44, 0x7A, 0xE1, 0x9A, 0x2C, 0xB0, 0x2A, 0x7D, - 0x04, 0x20, 0x61, 0x72, 0x16, 0x8C, 0x4F, 0x0A, - 0x99, 0xBA, 0xFA, 0x93, 0x2D, 0x66, 0x49, 0xE8, - 0x94, 0xA8, 0xF0, 0x57, 0x7B, 0x81, 0xC6, 0x64, - 0x83, 0xC5, 0xB5, 0xCF, 0x60, 0xAE, 0x75, 0xA4, - 0x44, 0x52, 0x6A, 0x9B, 0x36, 0x74, 0x32, 0x5F, - 0xBA, 0x38, 0xF5, 0x32, 0x96, 0x42, 0x1A, 0x78, - 0x50, 0x11, 0xC1, 0xDD, 0xB3, 0xA6, 0x99, 0x77, - 0x45, 0xDB, 0x83, 0xCD, 0x58, 0x3C, 0x0C, 0x41, - 0x77, 0xC7, 0x97, 0xD4, 0x0A, 0x4F, 0x69, 0x9F, - 0x1F, 0x40, 0xC5, 0x41, 0x3A, 0xC4, 0xE4, 0x23, - 0x73, 0x49, 0x2B, 0x6A, 0x2C, 0x6A, 0x40, 0x6D, - 0x43, 0x7F, 0x42, 0x57, 0x0B, 0x5E, 0x94, 0x9E, - 0xF4, 0x35, 0x0D, 0xEA, 0x79, 0x0C, 0xFE, 0xB7, - 0x2D, 0x12, 0x87, 0x51, 0x7F, 0xE3, 0x27, 0x3D, - 0x3C, 0xA6, 0x5A, 0x13, 0xCA, 0x6E, 0x23, 0xC5, - 0x7B, 0xF0, 0x7D, 0xA0, 0x4B, 0x85, 0x1C, 0xF3, - 0xAF, 0xA1, 0x8B, 0xAF, 0x5E, 0xF0, 0x20, 0x79, - 0x28, 0x57, 0xA9, 0xE7, 0x21, 0xF0, 0x1B, 0x9F, - 0xEA, 0x7B, 0x61, 0x2E, 0x4C, 0x6E, 0x29, 0x07, - 0x93, 0x66, 0xB0, 0x22, 0x86, 0x88, 0xBE, 0x2A, - 0x06, 0x7F, 0xBE, 0x92, 0x84, 0x2D, 0xD2, 0x80, - 0xB3, 0xC7, 0x4D, 0xFA, 0xB7, 0x61, 0xE6, 0x13, - 0xA8, 0x60, 0x4C, 0x47, 0x6E, 0x15, 0x46, 0x66, - 0x85, 0xC6, 0x95, 0xAC, 0x35, 0x79, 0x1A, 0x91, - 0x59, 0x94, 0x2F, 0x60, 0x17, 0x0C, 0xA2, 0x14, - 0xC7, 0xC0, 0x9B, 0x1A, 0x4B, 0x1B, 0xCC, 0x4F, - 0x4C, 0xC6, 0x0D, 0xF0, 0x1A, 0x10, 0x19, 0x15, - 0xA9, 0xA2, 0xBC, 0x55, 0x31, 0x19, 0x66, 0x50, - 0x32, 0xDC, 0xD9, 0x47, 0x6F, 0xBA, 0x7B, 0xB0, - 0x71, 0x57, 0xD3, 0x3C, 0x9C, 0x8E, 0xFA, 0x6B, - 0xD0, 0xAC, 0x38, 0xC1, 0xAC, 0x26, 0x5F, 0xB5, - 0x18, 0x57, 0xD0, 0x15, 0x17, 0x61, 0x53, 0x26, - 0xCA, 0x0E, 0x08, 0x65, 0x0B, 0xA6, 0xFA, 0x40, - 0x83, 0x2C, 0x7B, 0x4C, 0x41, 0xB6, 0x44, 0x71, - 0x60, 0x22, 0xB6, 0x52, 0xB1, 0x92, 0x7D, 0x55, - 0xC9, 0xB3, 0x7F, 0xE2, 0x5F, 0x1A, 0xB6, 0x7A, - 0x9A, 0x03, 0xC7, 0x00, 0x8C, 0x84, 0xB0, 0x7C, - 0x49, 0x26, 0xB6, 0x38, 0x1E, 0x40, 0xCF, 0xD4, - 0x41, 0x04, 0x12, 0x35, 0x18, 0x74, 0x16, 0xCE, - 0xC3, 0x66, 0xCA, 0x6F, 0xB7, 0x6F, 0xA0, 0xAB, - 0x6E, 0x32, 0x8A, 0x26, 0x41, 0xFC, 0x47, 0xDC, - 0xD7, 0x6E, 0x91, 0xCA, 0x94, 0x31, 0xE1, 0x9B, - 0xFF, 0x02, 0xCE, 0x62, 0x28, 0xC2, 0x33, 0x63, - 0x82, 0xF8, 0xA1, 0x0E, 0x9E, 0xE2, 0xC8, 0xF1, - 0x75, 0x93, 0x90, 0xA2, 0x00, 0x24, 0xA1, 0x5B, - 0x3B, 0x09, 0x0C, 0x13, 0x90, 0xCA, 0x03, 0x43, - 0x79, 0x72, 0x84, 0x24, 0x6B, 0xD8, 0x94, 0x35, - 0x07, 0xB7, 0xA6, 0xB7, 0x1F, 0xC3, 0x3A, 0x03, - 0xB7, 0xA8, 0x83, 0x66, 0xE4, 0xAF, 0xED, 0x51, - 0x57, 0x39, 0xE5, 0xC6, 0x9F, 0x8A, 0x26, 0x6E, - 0x4A, 0x1F, 0x53, 0xD7, 0x39, 0x30, 0xE9, 0x87, - 0x55, 0x69, 0x31, 0x2B, 0x27, 0x03, 0x7E, 0x5C, - 0x7F, 0x85, 0x21, 0x00, 0xC2, 0xBA, 0x36, 0x48, - 0xB1, 0xB9, 0xC1, 0xB1, 0x49, 0xF6, 0x25, 0x0E, - 0x0A, 0x6B, 0x06, 0x52, 0x13, 0x13, 0x4F, 0x30, - 0x25, 0x69, 0x75, 0x5B, 0x8C, 0x5C, 0x4F, 0xFC, - 0x68, 0x0B, 0xF7, 0x81, 0x18, 0x45, 0x34, 0x00, - 0x35, 0xF1, 0x70, 0xB0, 0x68, 0xBA, 0x67, 0xA4, - 0xC3, 0xB0, 0x16, 0x6D, 0x03, 0xCC, 0x82, 0x61, - 0x84, 0x01, 0x90, 0xA2, 0x0F, 0x9A, 0x3B, 0x1E, - 0xF4, 0x65, 0xC2, 0xF2, 0x18, 0x2D, 0xA8, 0xDA, - 0x8D, 0x3B, 0x3C, 0x8C, 0xB1, 0x29, 0x15, 0xF7, - 0xD9, 0x3E, 0x04, 0xD8, 0x84, 0x0C, 0x35, 0x67, - 0x25, 0x5A, 0x7B, 0xD6, 0xD4, 0x33, 0xCF, 0x10, - 0x68, 0xD8, 0x84, 0x52, 0xCF, 0xC1, 0x1F, 0x99, - 0x1B, 0x7C, 0xE3, 0x79, 0x27, 0xD6, 0xCA, 0xAE, - 0x88, 0x10, 0x74, 0x2F, 0x42, 0x14, 0x8B, 0x89, - 0x6E, 0xC4, 0xEB, 0xB5, 0x34, 0x03, 0x86, 0x31, - 0x5B, 0x2C, 0x1E, 0x2B, 0x43, 0x91, 0x5C, 0x04, - 0x54, 0x9C, 0xC8, 0xC1, 0x9A, 0xB4, 0x0E, 0x3B, - 0x7C, 0x31, 0x1B, 0x42, 0x61, 0x10, 0xA9, 0xBB, - 0xB1, 0x8D, 0x3B, 0x99, 0x2A, 0x42, 0xC0, 0x18, - 0x92, 0x90, 0xBE, 0x67, 0x3A, 0x39, 0x7C, 0x40, - 0x90, 0x44, 0x3B, 0x88, 0xC5, 0xD5, 0xC5, 0x65, - 0xA1, 0x0F, 0xEA, 0x05, 0x60, 0x3D, 0x36, 0x24, - 0x4A, 0x4A, 0xA8, 0xE9, 0x25, 0x5C, 0xF1, 0x84, - 0xAE, 0x69, 0x53, 0x5A, 0x83, 0x99, 0xC1, 0xC6, - 0xF7, 0x6C, 0xF2, 0x34, 0x2A, 0xDF, 0xEA, 0x6A, - 0x44, 0x7B, 0xB4, 0x50, 0x1B, 0x9A, 0x6C, 0x44, - 0x59, 0x3E, 0xB0, 0x43, 0xE7, 0xA5, 0x50, 0x2F, - 0x58, 0x6C, 0xF3, 0x40, 0x7D, 0xEB, 0x7A, 0x0F, - 0xC3, 0x2B, 0x3F, 0x46, 0xF1, 0x24, 0x5C, 0x55, - 0x96, 0xE0, 0xF1, 0xBE, 0xD9, 0x37, 0x20, 0x7C, - 0x45, 0x09, 0xE1, 0xD8, 0x98, 0x5B, 0xE7, 0x45, - 0xFD, 0x69, 0xBF, 0x44, 0x80, 0x92, 0x43, 0x30, - 0x28, 0xBE, 0x25, 0x95, 0x90, 0x33, 0x11, 0x47, - 0x95, 0x86, 0xA3, 0x4B, 0x2D, 0x49, 0x10, 0x74, - 0x10, 0xBC, 0x4B, 0xD2, 0x96, 0x53, 0x17, 0xFC, - 0x76, 0x35, 0x2B, 0x63, 0x8D, 0xF3, 0xB3, 0xA3, - 0x15, 0x32, 0x50, 0x26, 0x80, 0x9E, 0x3B, 0xC4, - 0x60, 0x8C, 0x0B, 0x2C, 0xB8, 0x4D, 0xF0, 0xC9, - 0x5B, 0xC0, 0x52, 0x70, 0x7F, 0xC1, 0xA3, 0x77, - 0xB2, 0xB4, 0x65, 0xEB, 0x7A, 0x5D, 0x64, 0x4A, - 0xB4, 0x27, 0x8D, 0xDC, 0xE5, 0xB6, 0x1E, 0x2B, - 0xB3, 0xA7, 0x10, 0x52, 0x55, 0x5C, 0xB3, 0xBA, - 0xC6, 0x93, 0xEF, 0x02, 0x5F, 0xF0, 0x03, 0x53, - 0xFB, 0x76, 0x94, 0x5B, 0x8A, 0xA3, 0xE9, 0x95, - 0x0F, 0x92, 0x73, 0x81, 0x87, 0x91, 0xCC, 0xAD, - 0x56, 0x88, 0x46, 0x58, 0x14, 0x2A, 0x2B, 0x4D, - 0xF3, 0xC5, 0x7E, 0xCA, 0x13, 0xAD, 0x44, 0xB4, - 0x9B, 0x63, 0x46, 0xC6, 0x3E, 0xE8, 0x90, 0x78, - 0x58, 0x9E, 0x9E, 0xB9, 0xA9, 0x80, 0x4A, 0x03, - 0xBF, 0x7A, 0x27, 0x6F, 0x86, 0xB9, 0x67, 0x6C, - 0x58, 0xD3, 0xE7, 0x1D, 0x2C, 0x87, 0x70, 0x80, - 0x4A, 0x61, 0x59, 0x21, 0x78, 0xB4, 0x49, 0xC7, - 0x95, 0x5B, 0xBE, 0x8C, 0xF4, 0x2F, 0x31, 0x67, - 0x25, 0xE3, 0xB1, 0x6D, 0x55, 0xB5, 0x27, 0xCF, - 0xB2, 0x32, 0x68, 0x1B, 0x21, 0xB2, 0xCB, 0x2F, - 0x30, 0xAC, 0x76, 0x01, 0x5B, 0xB5, 0x41, 0x6A, - 0x04, 0x11, 0xC1, 0x74, 0x58, 0x92, 0x41, 0x2E, - 0x68, 0x3A, 0x98, 0xD7, 0x36, 0xED, 0x1A, 0x4C, - 0xD9, 0x80, 0x61, 0x7D, 0x08, 0x21, 0xC2, 0xAB, - 0x02, 0x82, 0x07, 0x0A, 0x61, 0x1A, 0x11, 0xD1, - 0x97, 0x01, 0xFB, 0xD5, 0x5A, 0x21, 0x27, 0xB3, - 0x24, 0xE6, 0x90, 0x1D, 0x84, 0x98, 0x6C, 0x04, - 0x64, 0xDE, 0x71, 0x20, 0xAF, 0x45, 0x10, 0xAF, - 0x59, 0x1D, 0xD9, 0xBB, 0x79, 0x47, 0x9C, 0x5F, - 0xA8, 0x87, 0x14, 0xC6, 0xA9, 0x97, 0x14, 0xF7, - 0x6A, 0x1E, 0x40, 0x2C, 0x8F, 0x38, 0x4A, 0x4E, - 0xE6, 0xBC, 0xD4, 0x15, 0x00, 0x72, 0x4C, 0xC1, - 0x79, 0x3A, 0xBF, 0xD8, 0xD3, 0xC2, 0xF3, 0x20, - 0x39, 0x71, 0x34, 0xB0, 0x0F, 0x76, 0x2D, 0xBA, - 0x85, 0xA2, 0x3A, 0xF1, 0x55, 0xE6, 0xCC, 0x03, - 0x73, 0x80, 0xC1, 0xDD, 0x64, 0xA9, 0x73, 0xDB, - 0x35, 0xB7, 0x44, 0x70, 0x44, 0x8B, 0x24, 0x21, - 0x20, 0x62, 0x76, 0x47, 0x87, 0xE5, 0xA9, 0x3A, - 0x48, 0x80, 0x71, 0x71, 0xA7, 0x71, 0x5C, 0xFC, - 0x89, 0xBC, 0xBC, 0x9E, 0x14, 0x18, 0x86, 0xF8, - 0x07, 0xA1, 0xF9, 0xD6, 0x84, 0xC8, 0x42, 0x6F, - 0x01, 0x22, 0x88, 0x7D, 0x9C, 0x4C, 0x27, 0xEA, - 0x69, 0xCC, 0x15, 0x1B, 0x4D, 0x49, 0xB5, 0x1E, - 0x5A, 0x4E, 0xAA, 0xA5, 0xAD, 0x06, 0xAB, 0xA8, - 0x6D, 0xF9, 0x42, 0xE9, 0x86, 0xA5, 0xD5, 0x79, - 0x20, 0x80, 0xFC, 0x48, 0x03, 0x96, 0xB3, 0x94, - 0x86, 0x68, 0xFB, 0x38, 0x2C, 0xC8, 0xFC, 0x15, - 0x47, 0x48, 0xCB, 0x30, 0xB7, 0x64, 0x1F, 0x02, - 0x70, 0xC8, 0x34, 0x38, 0xB4, 0xFC, 0x3D, 0x19, - 0x01, 0x26, 0x58, 0x80, 0x40, 0x51, 0x77, 0xBC, - 0x7F, 0x44, 0x78, 0x82, 0x51, 0xAB, 0xC4, 0x74, - 0x27, 0x35, 0x31, 0x21, 0x2A, 0x66, 0x27, 0x9E, - 0x70, 0x33, 0x7A, 0x23, 0x09, 0xFD, 0xF4, 0x9E, - 0x05, 0x9B, 0xBD, 0xAF, 0x49, 0x73, 0xA5, 0x37, - 0x7A, 0x4D, 0x51, 0x7B, 0xA7, 0x55, 0x70, 0x2C, - 0x37, 0xCC, 0x35, 0x56, 0x85, 0x40, 0x4C, 0x95, - 0x2F, 0xB6, 0x7E, 0x04, 0x19, 0xC7, 0x8D, 0x15, - 0x84, 0xD0, 0x94, 0x92, 0x54, 0xD0, 0x49, 0x52, - 0xF7, 0x24, 0x3B, 0xF1, 0x40, 0x28, 0x03, 0xC9, - 0xFC, 0x73, 0x73, 0x25, 0x88, 0x13, 0x78, 0xCA, - 0x77, 0xEE, 0xF5, 0xC4, 0x15, 0xFB, 0x03, 0x7D, - 0x68, 0x9A, 0x58, 0x54, 0xA1, 0xD2, 0x4B, 0x65, - 0x27, 0xA5, 0x9B, 0x9B, 0x16, 0x95, 0x93, 0x84, - 0x35, 0x8C, 0x42, 0x3C, 0x79, 0x64, 0x5C, 0xCF, - 0x31, 0x33, 0xE2, 0x1B, 0x4B, 0x64, 0x95, 0x7B, - 0x14, 0xF6, 0x3F, 0x2A, 0xA2, 0x63, 0x57, 0xB1, - 0xC2, 0x62, 0xF2, 0xA9, 0x0F, 0x7C, 0xCC, 0x2A, - 0x15, 0x93, 0x69, 0x99, 0xB0, 0xA1, 0xB4, 0x98, - 0xAB, 0x3B, 0x32, 0x43, 0x30, 0x32, 0xC9, 0xCA, - 0x23, 0x08, 0x1C, 0x55, 0xD3, 0x1C, 0xAD, 0x36, - 0xE9, 0x0C, 0x1C, 0xE0, 0xB5, 0xFC, 0x24, 0x7C, - 0xE8, 0xC8, 0x43, 0xF2, 0x88, 0x35, 0x24, 0xB6, - 0x64, 0xFA, 0xC1, 0xB2, 0x0B, 0xE6, 0x02, 0xA1, - 0x0A, 0xAF, 0x65, 0x73, 0x86, 0x80, 0xBB, 0x10, - 0x25, 0x44, 0x26, 0xF9, 0xCB, 0x09, 0xA1, 0x95, - 0x4D, 0xB7, 0x65, 0x56, 0x22, 0x30, 0x8F, 0xAE, - 0xF5, 0x05, 0xAC, 0xB4, 0x97, 0x55, 0x4A, 0x8F, - 0xCF, 0xA9, 0x6A, 0x85, 0x25, 0x5A, 0xD8, 0x46, - 0x54, 0x20, 0x13, 0xB8, 0x41, 0x59, 0x51, 0xBD, - 0xD4, 0x5C, 0x01, 0x93, 0x1E, 0xBE, 0x58, 0x3E, - 0x70, 0xE1, 0x3F, 0x30, 0x15, 0x17, 0xB5, 0xA4, - 0x0D, 0x70, 0x36, 0x1F, 0x63, 0x09, 0x41, 0x60, - 0x67, 0x64, 0x6D, 0x2B, 0x71, 0x36, 0x62, 0x6B, - 0xCC, 0xCC, 0x17, 0x0C, 0x66, 0xCE, 0xD4, 0x90, - 0xC7, 0x35, 0x34, 0x4B, 0x62, 0x77, 0x09, 0x7C, - 0xA9, 0x14, 0x21, 0x2A, 0x29, 0x2D, 0xD1, 0x22, - 0xFB, 0xB6, 0x9F, 0xDE, 0xCA, 0x47, 0xFA, 0xB4, - 0x53, 0x2B, 0x8C, 0x80, 0xCE, 0xB7, 0x7F, 0x9C, - 0x54, 0x3E, 0x0B, 0xF1, 0x53, 0x6D, 0x1C, 0x0C, - 0xAE, 0x07, 0x7E, 0x2C, 0xA7, 0x86, 0x2B, 0x45, - 0xA4, 0x10, 0x46, 0x9C, 0xC5, 0xB7, 0x06, 0xBA, - 0xE0, 0x05, 0x1C, 0xB2, 0x96, 0x1D, 0xB7, 0x27, - 0x0B, 0x75, 0xB7, 0x11, 0x69, 0x8D, 0x2B, 0x80, - 0x70, 0x40, 0xD5, 0x62, 0x81, 0x29, 0x43, 0x6F, - 0xBB, 0x58, 0xF1, 0x20, 0x3F, 0x75, 0x56, 0x14, - 0x65, 0xF5, 0x42, 0x57, 0xE4, 0x4D, 0x33, 0xF5, - 0x12, 0xD6, 0x33, 0x43, 0x1D, 0x00, 0xA2, 0xFB, - 0x02, 0x30, 0xC9, 0xBB, 0x9C, 0xDD, 0xFC, 0x83, - 0xBD, 0x65, 0xC9, 0x74, 0x45, 0x30, 0x21, 0x86, - 0xA1, 0x72, 0x23, 0xAD, 0x21, 0x33, 0x28, 0x03, - 0xB9, 0x09, 0xE5, 0xE5, 0x67, 0x19, 0x70, 0xBB, - 0xB0, 0xF1, 0xC4, 0x83, 0x7B, 0xB8, 0x42, 0x73, - 0xBA, 0x67, 0x5A, 0xC0, 0x74, 0xC5, 0x29, 0x0B, - 0x41, 0x1C, 0x25, 0x00, 0x65, 0x70, 0x59, 0x33, - 0x9D, 0xE3, 0x92, 0xF9, 0xCA, 0x30, 0x89, 0x52, - 0xA2, 0x20, 0x1A, 0x58, 0x87, 0x67, 0xAD, 0xC0, - 0x35, 0xBD, 0xF3, 0x30, 0x24, 0xEA, 0x3B, 0x9A, - 0x83, 0xC5, 0xA0, 0xB9, 0xC5, 0x42, 0x5D, 0x14, - 0x07, 0x0C, 0x81, 0xAA, 0xDA, 0x26, 0xBA, 0xC3, - 0xFB, 0xB8, 0xD4, 0xB7, 0xCF, 0xEE, 0x03, 0x92, - 0x37, 0x5C, 0x68, 0x42, 0x73, 0x51, 0xDF, 0xEC, - 0x63, 0x60, 0x9B, 0xBB, 0x50, 0xB4, 0x63, 0xE0, - 0x40, 0x92, 0x85, 0x70, 0x09, 0xD1, 0xE5, 0xB8, - 0x1D, 0x70, 0x7D, 0x14, 0xB8, 0x33, 0xCD, 0x4A, - 0x0B, 0x55, 0x1B, 0xAA, 0x13, 0xEC, 0x48, 0x8A, - 0x15, 0x03, 0xB0, 0x46, 0x7E, 0xE4, 0x02, 0x3C, - 0x3F, 0xE0, 0x32, 0xC7, 0x82, 0x25, 0x06, 0x38, - 0x86, 0xE2, 0x46, 0x8E, 0x00, 0xF7, 0x00, 0x07, - 0x2A, 0x2E, 0xC8, 0xDA, 0x6A, 0xFB, 0x20, 0x6C, - 0x91, 0x90, 0x44, 0x33, 0xBB, 0xCC, 0xB0, 0xE7, - 0x6F, 0x42, 0x46, 0x8C, 0x40, 0xEB, 0x5F, 0x59, - 0xCB, 0x9A, 0xE1, 0xB0, 0x35, 0xE5, 0x21, 0x51, - 0x0B, 0xF2, 0x16, 0xA1, 0xAB, 0xCB, 0x19, 0x03, - 0x3B, 0x7A, 0x65, 0x88, 0x97, 0xC6, 0x58, 0x74, - 0xD5, 0x13, 0x51, 0x83, 0x14, 0x9F, 0x97, 0x9E, - 0x55, 0x3C, 0xCF, 0xBF, 0xA3, 0x90, 0x0C, 0xDA, - 0x6F, 0x01, 0x96, 0x0B, 0x75, 0x15, 0x7F, 0x54, - 0x53, 0xAA, 0x6E, 0x73, 0xB3, 0xED, 0x90, 0x2F, - 0x7D, 0x7C, 0x93, 0x05, 0x97, 0x1B, 0xDF, 0x72, - 0x2E, 0x29, 0x37, 0x16, 0x9A, 0x1B, 0xC0, 0xFA, - 0xEB, 0x6C, 0x92, 0xF7, 0x15, 0x0D, 0x23, 0x30, - 0x87, 0x7C, 0x5D, 0xC5, 0x24, 0x9A, 0xAE, 0x20, - 0x30, 0x26, 0x34, 0xC5, 0xC5, 0xB2, 0x30, 0x53, - 0x52, 0x10, 0x28, 0x12, 0x25, 0x42, 0xF4, 0x85, - 0xA0, 0xEA, 0xC8, 0x69, 0x22, 0x37, 0x20, 0x63, - 0x36, 0x51, 0xF5, 0xB2, 0x47, 0xC6, 0x62, 0xB3, - 0x1A, 0x10, 0x53, 0x8C, 0xA7, 0x49, 0x1B, 0x14, - 0x37, 0xAA, 0x74, 0xF4, 0x28, 0x2D, 0x12, 0x97, - 0x4D, 0x9C, 0x93, 0x4D, 0xF2, 0x14, 0x78, 0x5B, - 0x64, 0x18, 0x46, 0x8B, 0x92, 0xE5, 0x25, 0x28, - 0xC8, 0x44, 0x7A, 0x1C, 0xA4, 0x22, 0xFA, 0x6C, - 0xC8, 0x8E, 0x28, 0xB0, 0x59, 0xF0, 0x4B, 0x23, - 0x59, 0x73, 0x23, 0xF7, 0x2F, 0x3E, 0x23, 0x36, - 0xF8, 0x7C, 0x47, 0x90, 0x5C, 0xBA, 0x65, 0x5B, - 0xB7, 0x3F, 0xC3, 0x2E, 0x18, 0xD4, 0xB7, 0x87, - 0x05, 0xC7, 0x82, 0xEB, 0xCB, 0x43, 0xE2, 0x78, - 0x5C, 0x82, 0xC5, 0xAF, 0x24, 0xB0, 0xE1, 0x69, - 0x9C, 0xFB, 0xC0, 0x25, 0x74, 0x75, 0x79, 0x9A, - 0x53, 0x9B, 0x11, 0xA5, 0x0F, 0x4D, 0xF2, 0xB7, - 0xFA, 0xA2, 0x0B, 0xD8, 0x82, 0x75, 0x15, 0xCA, - 0x37, 0x0F, 0x89, 0xC0, 0xD4, 0xC6, 0x09, 0x02, - 0xF6, 0x56, 0x7C, 0xD6, 0x0B, 0x08, 0x60, 0xA5, - 0x5B, 0xC8, 0x57, 0x2C, 0x43, 0x6C, 0x24, 0x6A, - 0xC2, 0x76, 0x64, 0x4E, 0x7D, 0x60, 0x2A, 0xA5, - 0x7C, 0x01, 0x66, 0x20, 0x18, 0x14, 0x99, 0x1C, - 0x1B, 0xD7, 0x5C, 0x7C, 0x47, 0xC3, 0x48, 0xB6, - 0x7D, 0x77, 0x61, 0x33, 0x86, 0x90, 0x81, 0x44, - 0xEA, 0x83, 0xFF, 0x72, 0x1F, 0x9A, 0x50, 0x07, - 0x6C, 0x51, 0x01, 0x64, 0xD1, 0x8E, 0x05, 0xD0, - 0x5D, 0x98, 0x84, 0xC4, 0x41, 0x46, 0xA0, 0x7C, - 0xCA, 0xCF, 0x89, 0x04, 0x98, 0xED, 0x1A, 0x19, - 0xB2, 0xA1, 0x54, 0x31, 0x72, 0x9D, 0xC1, 0xF1, - 0x2B, 0x7E, 0xA1, 0x0F, 0x9F, 0x92, 0x80, 0x62, - 0xD1, 0x45, 0x4B, 0x4B, 0x9F, 0x68, 0xE5, 0x99, - 0x90, 0x29, 0x0B, 0xE3, 0x72, 0x8B, 0x32, 0x89, - 0x56, 0x93, 0x63, 0xAB, 0x10, 0x05, 0x13, 0x1B, - 0x23, 0x81, 0xA0, 0x8C, 0xC2, 0xBF, 0x94, 0x3E, - 0x95, 0xD5, 0xB2, 0x1B, 0xC6, 0xAA, 0xBC, 0x22, - 0x73, 0x34, 0x8B, 0xC7, 0x2B, 0xD0, 0x93, 0xB7, - 0xB5, 0x61, 0x7A, 0xE8, 0x7F, 0x60, 0x2B, 0xB9, - 0x89, 0xE6, 0xAF, 0xC4, 0x4B, 0x81, 0x51, 0x20, - 0x76, 0xA3, 0xA8, 0x76, 0xE0, 0xE2, 0x5F, 0x97, - 0x62, 0xB4, 0x62, 0x08, 0x19, 0x85, 0x50, 0x2F, - 0x26, 0xB2, 0x87, 0xA2, 0x93, 0x6D, 0x5B, 0x1A, - 0xCF, 0xFC, 0xEC, 0x4E, 0xEE, 0x77, 0xA9, 0xCB, - 0xA9, 0x80, 0xEB, 0x9B, 0x5F, 0xDE, 0x75, 0x53, - 0x9F, 0x65, 0x09, 0x04, 0x67, 0x7D, 0xBE, 0x29, - 0xAB, 0x8B, 0xB9, 0x18, 0xA3, 0x49, 0x48, 0x03, - 0xEC, 0xA5, 0x9A, 0x2C, 0x32, 0xE5, 0xB5, 0xC8, - 0x3B, 0x0B, 0x80, 0xB1, 0x10, 0x2C, 0xD7, 0xD9, - 0x48, 0x2B, 0x45, 0x9B, 0x6B, 0x74, 0x49, 0x1E, - 0xC3, 0x0C, 0x4B, 0xE7, 0x7C, 0x2B, 0x52, 0x4A, - 0xF7, 0xB3, 0xAD, 0x1F, 0x71, 0x34, 0x1D, 0xF0, - 0xA7, 0x6F, 0x25, 0x5C, 0x29, 0x03, 0xC8, 0x82, - 0x08, 0x07, 0x93, 0x79, 0x93, 0x0A, 0x95, 0x13, - 0xF3, 0x90, 0x12, 0x6E, 0x73, 0x2A, 0x2B, 0xB0, - 0x94, 0xBF, 0xA6, 0xBF, 0x0A, 0x43, 0x2B, 0xCD, - 0x65, 0x7D, 0xAF, 0xCB, 0x25, 0xC8, 0xBB, 0x15, - 0xE0, 0x95, 0x5D, 0x09, 0x9B, 0x74, 0xFF, 0x1A, - 0x4D, 0xE6, 0x55, 0x9C, 0xD6, 0x79, 0x7C, 0x38, - 0xC4, 0x8C, 0x11, 0x34, 0xCA, 0x2C, 0x97, 0x92, - 0x43, 0xF3, 0x15, 0x2A, 0xF4, 0xBB, 0xE4, 0xD7, - 0xA6, 0xBC, 0x09, 0x87, 0x21, 0x33, 0x92, 0x0C, - 0xD2, 0x3B, 0x3E, 0xF9, 0x84, 0x8C, 0xCC, 0x68, - 0x45, 0xD6, 0x47, 0xB5, 0x38, 0x75, 0x57, 0x73, - 0x65, 0x13, 0xD5, 0x85, 0x60, 0x84, 0x51, 0x92, - 0xF9, 0x26, 0x51, 0x59, 0x93, 0x2E, 0x57, 0x2A, - 0x88, 0xC4, 0x4E, 0x65, 0x66, 0x76, 0x0C, 0x06, - 0x1C, 0x67, 0xFC, 0xB5, 0xBF, 0x21, 0x00, 0x95, - 0xE2, 0x14, 0xDA, 0x74, 0x53, 0x57, 0xE3, 0x69, - 0x96, 0xD8, 0xC0, 0x66, 0x31, 0x1B, 0xBC, 0x76, - 0x1A, 0x1F, 0xD2, 0x52, 0x73, 0xD2, 0x1E, 0xAB, - 0x50, 0x01, 0x05, 0x63, 0xCD, 0x64, 0x68, 0xA4, - 0xEA, 0x83, 0x6B, 0x6D, 0x64, 0xBD, 0x2B, 0xD7, - 0x6D, 0xBE, 0x35, 0x82, 0xD5, 0x73, 0x6A, 0x60, - 0x5A, 0x55, 0x09, 0xFC, 0x28, 0x78, 0x9B, 0x56, - 0xB8, 0x84, 0xAE, 0x9A, 0x60, 0x41, 0x5F, 0x55, - 0x67, 0x4B, 0xE6, 0x01, 0x57, 0x6C, 0x7C, 0xEE, - 0x58, 0x14, 0x3B, 0xF0, 0x54, 0x80, 0x6A, 0xBC, - 0xB3, 0x45, 0xA2, 0x56, 0xCB, 0xC4, 0x54, 0xE3, - 0x43, 0xF3, 0xCC, 0x7A, 0xDE, 0x65, 0x56, 0x2F, - 0xD2, 0x9E, 0xB2, 0x59, 0x73, 0x7B, 0xB3, 0xCF, - 0x96, 0x49, 0xBD, 0xEA, 0x28, 0x3F, 0xB0, 0x72, - 0x65, 0x67, 0x7C, 0x98, 0x08, 0xD1, 0x31, 0x19, - 0xC0, 0xA2, 0xAD, 0xF7, 0x45, 0xDE, 0x69, 0x75, - 0xF4, 0x56, 0x2C, 0xD6, 0x15, 0x57, 0xB3, 0x96, - 0x5D, 0x2B, 0x07, 0x2F, 0x00, 0x0A, 0xA7, 0xE0, - 0xA3, 0x57, 0xE1, 0x25, 0x3E, 0xAF, 0xEA, 0x7F, - 0xDF, 0xCC, 0x92, 0xFA, 0x87, 0x63, 0x0D, 0xD2, - 0x27, 0x6C, 0xE4, 0x2E, 0x82, 0x0B, 0x69, 0xD1, - 0xFC, 0x2E, 0x47, 0xD5, 0xC4, 0x98, 0xA5, 0x5B, - 0x3B, 0x29, 0xC3, 0x4E, 0x64, 0x90, 0x3D, 0x04, - 0x7A, 0xB1, 0xC0, 0x40, 0x24, 0x95, 0x8F, 0x70, - 0x11, 0x95, 0xF5, 0xD1, 0x3E, 0xC6, 0x70, 0x6B, - 0x84, 0x48, 0x50, 0x3A, 0x54, 0x99, 0x22, 0xA5, - 0x8A, 0x24, 0xB6, 0x7C, 0x93, 0x63, 0x27, 0x56, - 0xB7, 0x7D, 0x22, 0x54, 0x07, 0x31, 0x61, 0x71, - 0xDE, 0xEC, 0x56, 0x71, 0x44, 0x35, 0xCF, 0x94, - 0xCC, 0xF4, 0x59, 0x9E, 0x00, 0xD1, 0x0E, 0x56, - 0x96, 0x22, 0xBA, 0xDA, 0x82, 0x0C, 0x45, 0x2F, - 0x25, 0x42, 0xAD, 0xF0, 0x87, 0x65, 0xCA, 0x93, - 0xAE, 0x38, 0xEB, 0x02, 0x5D, 0xE3, 0x1C, 0xFF, - 0x79, 0x74, 0x54, 0x9A, 0x78, 0x25, 0xA8, 0x31, - 0xDD, 0x05, 0x4E, 0x87, 0xB8, 0x4C, 0x5F, 0x25, - 0x47, 0xFF, 0x47, 0xB4, 0x6F, 0x88, 0xC9, 0x9F, - 0x15, 0x48, 0xE9, 0x33, 0xA6, 0xF4, 0xD8, 0x7F, - 0x1A, 0x4A, 0x1B, 0x00, 0xE3, 0x9E, 0x02, 0xD6, - 0x0E, 0x51, 0xEB, 0x60, 0x3C, 0x1C, 0x0D, 0x80, - 0x7A, 0xCD, 0xAB, 0x08, 0xBA, 0xA2, 0xB9, 0x98, - 0x69, 0xB7, 0x5C, 0xA2, 0xC4, 0xB9, 0x63, 0x68, - 0xB5, 0x17, 0x80, 0xBD, 0x1E, 0xC7, 0x5B, 0x11, - 0x0B, 0x9F, 0xA6, 0x65, 0x56, 0x87, 0x6C, 0x5F, - 0x48, 0x79, 0x7D, 0x09, 0x01, 0x38, 0xF7, 0x54, - 0xAE, 0x30, 0x53, 0x3D, 0x36, 0xAA, 0x44, 0xB9, - 0xB1, 0x70, 0x2A, 0x6A, 0x8A, 0x56, 0x62, 0x6B, - 0xF0, 0x45, 0x1A, 0x37, 0xA7, 0xAC, 0x1A, 0x33, - 0x70, 0x76, 0xE5, 0x1E, 0x0A, 0x6B, 0x03, 0x00, - 0xC2, 0xC7, 0x90, 0xA4, 0x43, 0x7E, 0xA2, 0x8D, - 0x7E, 0xC9, 0x8C, 0x41, 0x9B, 0x37, 0xD6, 0xAA, - 0x97, 0x04, 0x17, 0x43, 0x5F, 0x91, 0xBE, 0xDC, - 0x2B, 0x1F, 0x4B, 0xC8, 0x15, 0x8A, 0x51, 0xB1, - 0xF4, 0x71, 0x51, 0x6F, 0xE8, 0x24, 0x28, 0x7C, - 0x89, 0x6B, 0x89, 0x1B, 0x49, 0xF2, 0x54, 0xDD, - 0x36, 0x35, 0x9B, 0x89, 0xC8, 0x24, 0xEB, 0x3F, - 0x62, 0x48, 0x02, 0x7F, 0xBB, 0xAD, 0x4C, 0xF2, - 0x91, 0x18, 0xCB, 0x50, 0xEB, 0xB6, 0x25, 0xA3, - 0x7C, 0x53, 0x7A, 0x02, 0x23, 0xF0, 0xEB, 0x70, - 0x85, 0xB5, 0xC7, 0xEC, 0x60, 0x75, 0x70, 0xDB, - 0x91, 0x85, 0xD5, 0x99, 0x02, 0xBC, 0x26, 0xC6, - 0x54, 0xA2, 0x80, 0x4C, 0x0D, 0x94, 0x67, 0x93, - 0xD8, 0xA2, 0x14, 0x82, 0xAC, 0x4F, 0x05, 0xE9, - 0x01, 0x62, 0x60, 0x33, 0x1D, 0xCC, 0x58, 0xBC, - 0x66, 0xAF, 0x3C, 0xA7, 0x58, 0x54, 0x40, 0x21, - 0x6A, 0xA0, 0x26, 0x3B, 0x2A, 0x72, 0x5E, 0x08, - 0x0F, 0x6F, 0x9C, 0x5B, 0x6A, 0x9C, 0x9D, 0xA2, - 0x93, 0x55, 0x18, 0x9B, 0x4B, 0x95, 0xB1, 0x37, - 0xD1, 0x22, 0x5F, 0x25, 0x2A, 0xC7, 0x97, 0xB0, - 0x64, 0x6C, 0xAC, 0x52, 0x16, 0x4B, 0x59, 0x72, - 0xA9, 0x92, 0x65, 0xD3, 0x47, 0xFC, 0x7C, 0x35, - 0x91, 0xD1, 0x5F, 0xFE, 0x68, 0x1C, 0x06, 0xD4, - 0x38, 0xCC, 0xEB, 0x60, 0xBB, 0x63, 0x10, 0xB7, - 0x95, 0x32, 0x89, 0x72, 0x0E, 0x2C, 0x72, 0x87, - 0x30, 0x05, 0x23, 0x37, 0xAC, 0xA7, 0xC8, 0x52, - 0x1A, 0xB4, 0x4F, 0x1E, 0x2A, 0x04, 0x9B, 0x83, - 0xE0, 0x77, 0x4C, 0x96, 0xCD, 0x8C, 0x87, 0x6F, - 0xA6, 0x75, 0xD0, 0x92, 0x39, 0x77, 0x27, 0x1B, - 0xE6, 0xE8, 0x32, 0xF2, 0x49, 0x8C, 0xA5, 0xA3, - 0x43, 0x1F, 0x40, 0xD3, 0x18, 0x7B, 0x1E, 0xD9, - 0x65, 0xFD, 0xD6, 0x69, 0x3B, 0x37, 0xF6, 0xEB, - 0x40, 0x8A, 0x99, 0x97, 0x7A, 0xE4, 0x96, 0x44, - 0x7A, 0xF6, 0x50, 0x22, 0xE0, 0xA4, 0x72, 0xED, - 0x63, 0x88, 0x63, 0x8E, 0xA2, 0x9D, 0x82, 0xDA, - 0x68, 0xB4, 0xCF, 0x9F, 0xFD, 0xF2, 0xB6, 0x7C, - 0xD7, 0x08, 0xEA, 0x5A, 0x37, 0x0C, 0x6A, 0x7C + 0x8C, 0x8B, 0x37, 0x22, 0xA8, 0x2E, 0x55, 0x05, + 0x65, 0x52, 0x16, 0x11, 0xEB, 0xBC, 0x63, 0x07, + 0x99, 0x44, 0xC9, 0xB1, 0xAB, 0xB3, 0xB0, 0x02, + 0x0F, 0xF1, 0x2F, 0x63, 0x18, 0x91, 0xA9, 0xC4, + 0x68, 0xD3, 0xA6, 0x7B, 0xF6, 0x27, 0x12, 0x80, + 0xDA, 0x58, 0xD0, 0x3C, 0xB0, 0x42, 0xB3, 0xA4, + 0x61, 0x44, 0x16, 0x37, 0xF9, 0x29, 0xC2, 0x73, + 0x46, 0x9A, 0xD1, 0x53, 0x11, 0xE9, 0x10, 0xDE, + 0x18, 0xCB, 0x95, 0x37, 0xBA, 0x1B, 0xE4, 0x2E, + 0x98, 0xBB, 0x59, 0xE4, 0x98, 0xA1, 0x3F, 0xD4, + 0x40, 0xD0, 0xE6, 0x9E, 0xE8, 0x32, 0xB4, 0x5C, + 0xD9, 0x5C, 0x38, 0x21, 0x77, 0xD6, 0x70, 0x96, + 0xA1, 0x8C, 0x07, 0xF1, 0x78, 0x16, 0x63, 0x65, + 0x1B, 0xDC, 0xAC, 0x90, 0xDE, 0xDA, 0x3D, 0xDD, + 0x14, 0x34, 0x85, 0x86, 0x41, 0x81, 0xC9, 0x1F, + 0xA2, 0x08, 0x0F, 0x6D, 0xAB, 0x3F, 0x86, 0x20, + 0x4C, 0xEB, 0x64, 0xA7, 0xB4, 0x44, 0x68, 0x95, + 0xC0, 0x39, 0x87, 0xA0, 0x31, 0xCB, 0x4B, 0x6D, + 0x9E, 0x04, 0x62, 0xFD, 0xA8, 0x29, 0x17, 0x2B, + 0x6C, 0x01, 0x2C, 0x63, 0x8B, 0x29, 0xB5, 0xCD, + 0x75, 0xA2, 0xC9, 0x30, 0xA5, 0x59, 0x6A, 0x31, + 0x81, 0xC3, 0x3A, 0x22, 0xD5, 0x74, 0xD3, 0x02, + 0x61, 0x19, 0x6B, 0xC3, 0x50, 0x73, 0x8D, 0x4F, + 0xD9, 0x18, 0x3A, 0x76, 0x33, 0x36, 0x24, 0x3A, + 0xCE, 0xD9, 0x9B, 0x32, 0x21, 0xC7, 0x1D, 0x88, + 0x66, 0x89, 0x5C, 0x4E, 0x52, 0xC1, 0x19, 0xBF, + 0x32, 0x80, 0xDA, 0xF8, 0x0A, 0x95, 0xE1, 0x52, + 0x09, 0xA7, 0x95, 0xC4, 0x43, 0x5F, 0xBB, 0x35, + 0x70, 0xFD, 0xB8, 0xAA, 0x9B, 0xF9, 0xAE, 0xFD, + 0x43, 0xB0, 0x94, 0xB7, 0x81, 0xD5, 0xA8, 0x11, + 0x36, 0xDA, 0xB8, 0x8B, 0x87, 0x99, 0x69, 0x65, + 0x56, 0xFE, 0xC6, 0xAE, 0x14, 0xB0, 0xBB, 0x8B, + 0xE4, 0x69, 0x5E, 0x9A, 0x12, 0x4C, 0x2A, 0xB8, + 0xFF, 0x4A, 0xB1, 0x22, 0x9B, 0x8A, 0xAA, 0x8C, + 0x6F, 0x41, 0xA6, 0x0C, 0x34, 0xC7, 0xB5, 0x61, + 0x82, 0xC5, 0x5C, 0x2C, 0x68, 0x5E, 0x73, 0x7C, + 0x6C, 0xA0, 0x0A, 0x23, 0xFB, 0x8A, 0x68, 0xC1, + 0xCD, 0x61, 0xF3, 0x0D, 0x39, 0x93, 0xA1, 0x65, + 0x3C, 0x16, 0x75, 0xAC, 0x5F, 0x09, 0x01, 0xA7, + 0x16, 0x0A, 0x73, 0x96, 0x64, 0x08, 0xB8, 0x87, + 0x6B, 0x71, 0x53, 0x96, 0xCF, 0xA4, 0x90, 0x3F, + 0xC6, 0x9D, 0x60, 0x49, 0x1F, 0x81, 0x46, 0x80, + 0x8C, 0x97, 0xCD, 0x5C, 0x53, 0x3E, 0x71, 0x01, + 0x79, 0x09, 0xE9, 0x7B, 0x83, 0x5B, 0x86, 0xFF, + 0x84, 0x7B, 0x42, 0xA6, 0x96, 0x37, 0x54, 0x35, + 0xE0, 0x06, 0x06, 0x1C, 0xF7, 0xA4, 0x79, 0x46, + 0x32, 0x72, 0x11, 0x4A, 0x89, 0xEB, 0x3E, 0xAF, + 0x22, 0x46, 0xF0, 0xF8, 0xC1, 0x04, 0xA1, 0x49, + 0x86, 0x82, 0x8E, 0x0A, 0xD2, 0x04, 0x20, 0xC9, + 0xB3, 0x7E, 0xA2, 0x3F, 0x5C, 0x51, 0x49, 0x49, + 0xE7, 0x7A, 0xD9, 0xE9, 0xAD, 0x12, 0x29, 0x0D, + 0xD1, 0x21, 0x5E, 0x11, 0xDA, 0x27, 0x44, 0x57, + 0xAC, 0x86, 0xB1, 0xCE, 0x68, 0x64, 0xB1, 0x22, + 0x67, 0x7F, 0x37, 0x18, 0xAA, 0x31, 0xB0, 0x25, + 0x80, 0xE6, 0x43, 0x17, 0x17, 0x8D, 0x38, 0xF2, + 0x5F, 0x60, 0x9B, 0xC6, 0xC5, 0x5B, 0xC3, 0x74, + 0xA1, 0xBF, 0x78, 0xEA, 0x8E, 0xCC, 0x21, 0x9B, + 0x30, 0xB7, 0x4C, 0xBB, 0x32, 0x72, 0xA5, 0x99, + 0x23, 0x8C, 0x93, 0x98, 0x51, 0x70, 0x04, 0x8F, + 0x17, 0x67, 0x75, 0xFB, 0x19, 0x96, 0x2A, 0xC3, + 0xB1, 0x35, 0xAA, 0x59, 0xDB, 0x10, 0x4F, 0x71, + 0x14, 0xDB, 0xC2, 0xC2, 0xD4, 0x29, 0x49, 0xAD, + 0xEC, 0xA6, 0xA8, 0x5B, 0x32, 0x3E, 0xE2, 0xB2, + 0xB2, 0x3A, 0x77, 0xD9, 0xDB, 0x23, 0x59, 0x79, + 0xA8, 0xE2, 0xD6, 0x7C, 0xF7, 0xD2, 0x13, 0x6B, + 0xBB, 0xA7, 0x1F, 0x26, 0x95, 0x74, 0xB3, 0x88, + 0x88, 0xE1, 0x54, 0x13, 0x40, 0xC1, 0x92, 0x84, + 0x07, 0x4F, 0x9B, 0x7C, 0x8C, 0xF3, 0x7E, 0xB0, + 0x13, 0x84, 0xE6, 0xE3, 0x82, 0x2E, 0xC4, 0x88, + 0x2D, 0xFB, 0xBE, 0xC4, 0xE6, 0x09, 0x8E, 0xF2, + 0xB2, 0xFC, 0x17, 0x7A, 0x1F, 0x0B, 0xCB, 0x65, + 0xA5, 0x7F, 0xDA, 0xA8, 0x93, 0x15, 0x46, 0x1B, + 0xEB, 0x78, 0x85, 0xFB, 0x68, 0xB3, 0xCD, 0x09, + 0x6E, 0xDA, 0x59, 0x6A, 0xC0, 0xE6, 0x1D, 0xD7, + 0xA9, 0xC5, 0x07, 0xBC, 0x63, 0x45, 0xE0, 0x82, + 0x7D, 0xFC, 0xC8, 0xA3, 0xAC, 0x2D, 0xCE, 0x51, + 0xAD, 0x73, 0x1A, 0xA0, 0xEB, 0x93, 0x2A, 0x6D, + 0x09, 0x83, 0x99, 0x23, 0x47, 0xCB, 0xEB, 0x3C, + 0xD0, 0xD9, 0xC9, 0x71, 0x97, 0x97, 0xCC, 0x21, + 0xCF, 0x00, 0x62, 0xB0, 0xAD, 0x94, 0xCA, 0xD7, + 0x34, 0xC6, 0x3E, 0x6B, 0x5D, 0x85, 0x9C, 0xBE, + 0x19, 0xF0, 0x36, 0x82, 0x45, 0x35, 0x1B, 0xF4, + 0x64, 0xD7, 0x50, 0x55, 0x69, 0x79, 0x0D, 0x2B, + 0xB7, 0x24, 0xD8, 0x65, 0x9A, 0x9F, 0xEB, 0x1C, + 0x7C, 0x47, 0x3D, 0xC4, 0xD0, 0x61, 0xE2, 0x98, + 0x63, 0xA2, 0x71, 0x4B, 0xAC, 0x42, 0xAD, 0xCD, + 0x1A, 0x83, 0x72, 0x77, 0x65, 0x56, 0xF7, 0x92, + 0x8A, 0x7A, 0x44, 0xE9, 0x4B, 0x6A, 0x25, 0x32, + 0x2D, 0x03, 0xC0, 0xA1, 0x62, 0x2A, 0x7F, 0xD2, + 0x61, 0x52, 0x2B, 0x73, 0x58, 0xF0, 0x85, 0xBD, + 0xFB, 0x60, 0x75, 0x87, 0x62, 0xCB, 0x90, 0x10, + 0x31, 0x90, 0x1B, 0x5E, 0xEC, 0xF4, 0x92, 0x0C, + 0x81, 0x02, 0x0A, 0x9B, 0x17, 0x81, 0xBC, 0xB9, + 0xDD, 0x19, 0xA9, 0xDF, 0xB6, 0x64, 0x58, 0xE7, + 0x75, 0x7C, 0x52, 0xCE, 0xC7, 0x5B, 0x4B, 0xA7, + 0x40, 0xA2, 0x40, 0x99, 0xCB, 0x56, 0xBB, 0x60, + 0xA7, 0x6B, 0x69, 0x01, 0xAA, 0x3E, 0x01, 0x69, + 0xC9, 0xE8, 0x34, 0x96, 0xD7, 0x3C, 0x4C, 0x99, + 0x43, 0x5A, 0x28, 0xD6, 0x13, 0xE9, 0x7A, 0x11, + 0x77, 0xF5, 0x8B, 0x6C, 0xC5, 0x95, 0xD3, 0xB2, + 0x33, 0x1E, 0x9C, 0xA7, 0xB5, 0x7B, 0x74, 0xDC, + 0x2C, 0x52, 0x77, 0xD2, 0x6F, 0x2F, 0xE1, 0x92, + 0x40, 0xA5, 0x5C, 0x35, 0xD6, 0xCF, 0xCA, 0x26, + 0xC7, 0x3E, 0x9A, 0x2D, 0x7C, 0x98, 0x0D, 0x97, + 0x96, 0x0A, 0xE1, 0xA0, 0x46, 0x98, 0xC1, 0x6B, + 0x39, 0x8A, 0x5F, 0x20, 0xC3, 0x5A, 0x09, 0x14, + 0x14, 0x5C, 0xE1, 0x67, 0x4B, 0x71, 0xAB, 0xC6, + 0x06, 0x6A, 0x90, 0x9A, 0x3E, 0x4B, 0x91, 0x1E, + 0x69, 0xD5, 0xA8, 0x49, 0x43, 0x03, 0x61, 0xF7, + 0x31, 0xB0, 0x72, 0x46, 0xA6, 0x32, 0x9B, 0x52, + 0x36, 0x19, 0x04, 0x22, 0x50, 0x82, 0xD0, 0xAA, + 0xC5, 0xB2, 0x1D, 0x6B, 0x34, 0x86, 0x24, 0x81, + 0xA8, 0x90, 0xC3, 0xC3, 0x60, 0x76, 0x6F, 0x04, + 0x26, 0x36, 0x03, 0xA6, 0xB7, 0x3E, 0x80, 0x2B, + 0x1F, 0x70, 0xB2, 0xEB, 0x00, 0x04, 0x68, 0x36, + 0xB8, 0xF4, 0x93, 0xBF, 0x10, 0xB9, 0x0B, 0x87, + 0x37, 0xC6, 0xC5, 0x48, 0x44, 0x9B, 0x29, 0x4C, + 0x47, 0x25, 0x3B, 0xE2, 0x6C, 0xA7, 0x23, 0x36, + 0xA6, 0x32, 0x06, 0x3A, 0xD3, 0xD0, 0xB4, 0x8C, + 0x8B, 0x0F, 0x4A, 0x34, 0x44, 0x7E, 0xF1, 0x3B, + 0x76, 0x40, 0x20, 0xDE, 0x73, 0x9E, 0xB7, 0x9A, + 0xBA, 0x20, 0xE2, 0xBE, 0x19, 0x51, 0x82, 0x5F, + 0x29, 0x3B, 0xED, 0xD1, 0x08, 0x9F, 0xCB, 0x0A, + 0x91, 0xF5, 0x60, 0xC8, 0xE1, 0x7C, 0xDF, 0x52, + 0x54, 0x1D, 0xC2, 0xB8, 0x1F, 0x97, 0x2A, 0x73, + 0x75, 0xB2, 0x01, 0xF1, 0x0C, 0x08, 0xD9, 0xB5, + 0xBC, 0x8B, 0x95, 0x10, 0x00, 0x54, 0xA3, 0xD0, + 0xAA, 0xFF, 0x89, 0xBD, 0x08, 0xD6, 0xA0, 0xE7, + 0xF2, 0x11, 0x5A, 0x43, 0x52, 0x31, 0x29, 0x04, + 0x60, 0xC9, 0xAD, 0x43, 0x5A, 0x3B, 0x3C, 0xF3, + 0x5E, 0x52, 0x09, 0x1E, 0xDD, 0x18, 0x90, 0x04, + 0x7B, 0xCC, 0x0A, 0xAB, 0xB1, 0xAC, 0xEB, 0xC7, + 0x5F, 0x4A, 0x32, 0xBC, 0x14, 0x51, 0xAC, 0xC4, + 0x96, 0x99, 0x40, 0x78, 0x8E, 0x89, 0x41, 0x21, + 0x88, 0x94, 0x6C, 0x91, 0x43, 0xC5, 0x04, 0x6B, + 0xD1, 0xB4, 0x58, 0xDF, 0x61, 0x7C, 0x5D, 0xF5, + 0x33, 0xB0, 0x52, 0xCD, 0x60, 0x38, 0xB7, 0x75, + 0x40, 0x34, 0xA2, 0x3C, 0x2F, 0x77, 0x20, 0x13, + 0x4C, 0x7B, 0x4E, 0xAC, 0xE0, 0x1F, 0xAC, 0x0A, + 0x28, 0x53, 0xA9, 0x28, 0x58, 0x47, 0xAB, 0xBD, + 0x06, 0xA3, 0x34, 0x3A, 0x77, 0x8A, 0xC6, 0x06, + 0x2E, 0x45, 0x8B, 0xC5, 0xE6, 0x1E, 0xCE, 0x1C, + 0x0D, 0xE0, 0x20, 0x6E, 0x6F, 0xE8, 0xA8, 0x40, + 0x34, 0xA7, 0xC5, 0xF1, 0xB0, 0x05, 0xFB, 0x0A, + 0x58, 0x40, 0x51, 0xD3, 0x22, 0x9B, 0x86, 0xC9, + 0x09, 0xAC, 0x56, 0x47, 0xB3, 0xD7, 0x55, 0x69, + 0xE0, 0x5A, 0x88, 0x27, 0x9D, 0x80, 0xE5, 0xC3, + 0x0F, 0x57, 0x4D, 0xC3, 0x27, 0x51, 0x2C, 0x6B, + 0xBE, 0x81, 0x01, 0x23, 0x9E, 0xC6, 0x28, 0x61, + 0xF4, 0xBE, 0x67, 0xB0, 0x5B, 0x9C, 0xDA, 0x9C, + 0x54, 0x5C, 0x13, 0xE7, 0xEB, 0x53, 0xCF, 0xF2, + 0x60, 0xAD, 0x98, 0x70, 0x19, 0x9C, 0x21, 0xF8, + 0xC6, 0x3D, 0x64, 0xF0, 0x45, 0x8A, 0x71, 0x41, + 0x28, 0x50, 0x23, 0xFE, 0xB8, 0x29, 0x29, 0x08, + 0x72, 0x38, 0x96, 0x44, 0xB0, 0xC3, 0xB7, 0x3A, + 0xC2, 0xC8, 0xE1, 0x21, 0xA2, 0x9B, 0xB1, 0xC4, + 0x3C, 0x19, 0xA2, 0x33, 0xD5, 0x6B, 0xED, 0x82, + 0x74, 0x0E, 0xB0, 0x21, 0xC9, 0x7B, 0x8E, 0xBB, + 0xA4, 0x0F, 0xF3, 0x28, 0xB5, 0x41, 0x76, 0x0F, + 0xCC, 0x37, 0x2B, 0x52, 0xD3, 0xBC, 0x4F, 0xCB, + 0xC0, 0x6F, 0x42, 0x4E, 0xAF, 0x25, 0x38, 0x04, + 0xD4, 0xCB, 0x46, 0xF4, 0x1F, 0xF2, 0x54, 0xC0, + 0xC5, 0xBA, 0x48, 0x3B, 0x44, 0xA8, 0x7C, 0x21, + 0x96, 0x54, 0x55, 0x5E, 0xC7, 0xC1, 0x63, 0xC7, + 0x9B, 0x9C, 0xB7, 0x60, 0xA2, 0xAD, 0x9B, 0xB7, + 0x22, 0xB9, 0x3E, 0x0C, 0x28, 0xBD, 0x4B, 0x16, + 0x85, 0x94, 0x9C, 0x49, 0x6E, 0xAB, 0x1A, 0xFF, + 0x90, 0x91, 0x9E, 0x37, 0x61, 0xB3, 0x46, 0x83, + 0x8A, 0xBB, 0x2F, 0x01, 0xA9, 0x1E, 0x55, 0x43, + 0x75, 0xAF, 0xDA, 0xAA, 0xF3, 0x82, 0x6E, 0x6D, + 0xB7, 0x9F, 0xE7, 0x35, 0x3A, 0x7A, 0x57, 0x8A, + 0x7C, 0x05, 0x98, 0xCE, 0x28, 0xB6, 0xD9, 0x91, + 0x52, 0x14, 0x23, 0x6B, 0xBF, 0xFA, 0x6D, 0x45, + 0xB6, 0x37, 0x6A, 0x07, 0x92, 0x4A, 0x39, 0xA7, + 0xBE, 0x81, 0x82, 0x86, 0x71, 0x5C, 0x8A, 0x3C, + 0x11, 0x0C, 0xD7, 0x6C, 0x02, 0xE0, 0x41, 0x7A, + 0xF1, 0x38, 0xBD, 0xB9, 0x5C, 0x3C, 0xCA, 0x79, + 0x8A, 0xC8, 0x09, 0xED, 0x69, 0xCF, 0xB6, 0x72, + 0xB6, 0xFD, 0xDC, 0x24, 0xD8, 0x9C, 0x06, 0xA6, + 0x55, 0x88, 0x14, 0xAB, 0x0C, 0x21, 0xC6, 0x2B, + 0x2F, 0x84, 0xC0, 0xE3, 0xE0, 0x80, 0x3D, 0xB3, + 0x37, 0xA4, 0xE0, 0xC7, 0x12, 0x7A, 0x6B, 0x4C, + 0x8C, 0x08, 0xB1, 0xD1, 0xA7, 0x6B, 0xF0, 0x7E, + 0xB6, 0xE5, 0xB5, 0xBB, 0x47, 0xA1, 0x6C, 0x74, + 0xBC, 0x54, 0x83, 0x75, 0xFB, 0x29, 0xCD, 0x78, + 0x9A, 0x5C, 0xFF, 0x91, 0xBD, 0xBD, 0x07, 0x18, + 0x59, 0xF4, 0x84, 0x6E, 0x35, 0x5B, 0xB0, 0xD2, + 0x94, 0x84, 0xE2, 0x64, 0xDF, 0xF3, 0x6C, 0x91, + 0x77, 0xA7, 0xAC, 0xA7, 0x89, 0x08, 0x87, 0x96, + 0x95, 0xCA, 0x87, 0xF2, 0x54, 0x36, 0xBC, 0x12, + 0x63, 0x07, 0x24, 0xBB, 0x22, 0xF0, 0xCB, 0x64, + 0x89, 0x7F, 0xE5, 0xC4, 0x11, 0x95, 0x28, 0x0D, + 0xA0, 0x41, 0x84, 0xD4, 0xBC, 0x7B, 0x53, 0x2A, + 0x0F, 0x70, 0xA5, 0x4D, 0x77, 0x57, 0xCD, 0xE6, + 0x17, 0x5A, 0x68, 0x43, 0xB8, 0x61, 0xCB, 0x2B, + 0xC4, 0x83, 0x0C, 0x00, 0x12, 0x55, 0x4C, 0xFC, + 0x5D, 0x2C, 0x8A, 0x20, 0x27, 0xAA, 0x3C, 0xD9, + 0x67, 0x13, 0x0E, 0x9B, 0x96, 0x24, 0x1B, 0x11, + 0xC4, 0x32, 0x0C, 0x76, 0x49, 0xCC, 0x23, 0xA7, + 0x1B, 0xAF, 0xE6, 0x91, 0xAF, 0xC0, 0x8E, 0x68, + 0x0B, 0xCE, 0xF4, 0x29, 0x07, 0x00, 0x07, 0x18, + 0xE4, 0xEA, 0xCE, 0x8D, 0xA2, 0x82, 0x14, 0x19, + 0x7B, 0xE1, 0xC2, 0x69, 0xDA, 0x9C, 0xB5, 0x41, + 0xE1, 0xA3, 0xCE, 0x97, 0xCF, 0xAD, 0xF9, 0xC6, + 0x05, 0x87, 0x80, 0xFE, 0x67, 0x93, 0xDB, 0xFA, + 0x82, 0x18, 0xA2, 0x76, 0x0B, 0x80, 0x2B, 0x8D, + 0xA2, 0xAA, 0x27, 0x1A, 0x38, 0x77, 0x25, 0x23, + 0xA7, 0x67, 0x36, 0xA7, 0xA3, 0x1B, 0x9D, 0x30, + 0x37, 0xAD, 0x21, 0xCE, 0xBB, 0x11, 0xA4, 0x72, + 0xB8, 0x79, 0x2E, 0xB1, 0x75, 0x58, 0xB9, 0x40, + 0xE7, 0x08, 0x83, 0xF2, 0x64, 0x59, 0x2C, 0x68, + 0x9B, 0x24, 0x0B, 0xB4, 0x3D, 0x54, 0x08, 0xBF, + 0x44, 0x64, 0x32, 0xF4, 0x12, 0xF4, 0xB9, 0xA5, + 0xF6, 0x86, 0x5C, 0xC2, 0x52, 0xA4, 0x3C, 0xF4, + 0x0A, 0x32, 0x03, 0x91, 0x55, 0x55, 0x91, 0xD6, + 0x75, 0x61, 0xFD, 0xD0, 0x53, 0x53, 0xAB, 0x6B, + 0x01, 0x9B, 0x3A, 0x08, 0xA7, 0x33, 0x53, 0xD5, + 0x1B, 0x61, 0x13, 0xAB, 0x2F, 0xA5, 0x1D, 0x97, + 0x56, 0x48, 0xEE, 0x25, 0x4A, 0xF8, 0x9A, 0x23, + 0x05, 0x04, 0xA2, 0x36, 0xA4, 0x65, 0x82, 0x57, + 0x74, 0x0B, 0xDC, 0xBB, 0xE1, 0x70, 0x8A, 0xB0, + 0x22, 0xC3, 0xC5, 0x88, 0xA4, 0x10, 0xDB, 0x3B, + 0x9C, 0x30, 0x8A, 0x06, 0x27, 0x5B, 0xDF, 0x5B, + 0x48, 0x59, 0xD3, 0xA2, 0x61, 0x7A, 0x29, 0x5E, + 0x1A, 0x22, 0xF9, 0x01, 0x98, 0xBA, 0xD0, 0x16, + 0x6F, 0x4A, 0x94, 0x34, 0x17, 0xC5, 0xB8, 0x31, + 0x73, 0x6C, 0xB2, 0xC8, 0x58, 0x0A, 0xBF, 0xDE, + 0x57, 0x14, 0xB5, 0x86, 0xAB, 0xEE, 0xC0, 0xA1, + 0x75, 0xA0, 0x8B, 0xC7, 0x10, 0xC7, 0xA2, 0x89, + 0x5D, 0xE9, 0x3A, 0xC4, 0x38, 0x06, 0x1B, 0xF7, + 0x76, 0x5D, 0x0D, 0x21, 0xCD, 0x41, 0x81, 0x67, + 0xCA, 0xF8, 0x9D, 0x1E, 0xFC, 0x34, 0x48, 0xBC, + 0xBB, 0x96, 0xD6, 0x9B, 0x3E, 0x01, 0x0C, 0x82, + 0xD1, 0x5C, 0xAB, 0x6C, 0xAC, 0xC6, 0x79, 0x9D, + 0x36, 0x39, 0x66, 0x9A, 0x5B, 0x21, 0xA6, 0x33, + 0xC8, 0x65, 0xF8, 0x59, 0x3B, 0x5B, 0x7B, 0xC8, + 0x00, 0x26, 0x2B, 0xB8, 0x37, 0xA9, 0x24, 0xA6, + 0xC5, 0x44, 0x0E, 0x4F, 0xC7, 0x3B, 0x41, 0xB2, + 0x30, 0x92, 0xC3, 0x91, 0x2F, 0x4C, 0x6B, 0xEB, + 0xB4, 0xC7, 0xB4, 0xC6, 0x29, 0x08, 0xB0, 0x37, + 0x75, 0x66, 0x6C, 0x22, 0x22, 0x0D, 0xF9, 0xC8, + 0x88, 0x23, 0xE3, 0x44, 0xC7, 0x30, 0x83, 0x32, + 0x34, 0x5C, 0x8B, 0x79, 0x5D, 0x34, 0xE8, 0xC0, + 0x51, 0xF2, 0x1F, 0x5A, 0x21, 0xC2, 0x14, 0xB6, + 0x98, 0x41, 0x35, 0x87, 0x09, 0xB1, 0xC3, 0x05, + 0xB3, 0x2C, 0xC2, 0xC3, 0x80, 0x6A, 0xE9, 0xCC, + 0xD3, 0x81, 0x9F, 0xFF, 0x45, 0x07, 0xFE, 0x52, + 0x0F, 0xBF, 0xC2, 0x71, 0x99, 0xBC, 0x23, 0xBE, + 0x6B, 0x9B, 0x2D, 0x2A, 0xC1, 0x71, 0x75, 0x79, + 0xAC, 0x76, 0x92, 0x79, 0xE2, 0xA7, 0xAA, 0xC6, + 0x8A, 0x37, 0x1A, 0x47, 0xBA, 0x3A, 0x7D, 0xBE, + 0x01, 0x6F, 0x14, 0xE1, 0xA7, 0x27, 0x33, 0x36, + 0x63, 0xC4, 0xA5, 0xCD, 0x1A, 0x0F, 0x88, 0x36, + 0xCF, 0x7B, 0x5C, 0x49, 0xAC, 0x51, 0x48, 0x5C, + 0xA6, 0x03, 0x45, 0xC9, 0x90, 0xE0, 0x68, 0x88, + 0x72, 0x00, 0x03, 0x73, 0x13, 0x22, 0xC5, 0xB8, + 0xCD, 0x5E, 0x69, 0x07, 0xFD, 0xA1, 0x15, 0x7F, + 0x46, 0x8F, 0xD3, 0xFC, 0x20, 0xFA, 0x81, 0x75, + 0xEE, 0xC9, 0x5C, 0x29, 0x1A, 0x26, 0x2B, 0xA8, + 0xC5, 0xBE, 0x99, 0x08, 0x72, 0x41, 0x89, 0x30, + 0x85, 0x23, 0x39, 0xD8, 0x8A, 0x19, 0xB3, 0x7F, + 0xEF, 0xA3, 0xCF, 0xE8, 0x21, 0x75, 0xC2, 0x24, + 0x40, 0x7C, 0xA4, 0x14, 0xBA, 0xEB, 0x37, 0x92, + 0x3B, 0x4D, 0x2D, 0x83, 0x13, 0x4A, 0xE1, 0x54, + 0xE4, 0x90, 0xA9, 0xB4, 0x5A, 0x05, 0x63, 0xB0, + 0x6C, 0x95, 0x3C, 0x33, 0x01, 0x45, 0x0A, 0x21, + 0x76, 0xA0, 0x7C, 0x61, 0x4A, 0x74, 0xE3, 0x47, + 0x8E, 0x48, 0x50, 0x9F, 0x9A, 0x60, 0xAE, 0x94, + 0x5A, 0x8E, 0xBC, 0x78, 0x15, 0x12, 0x1D, 0x90, + 0xA3, 0xB0, 0xE0, 0x70, 0x91, 0xA0, 0x96, 0xCF, + 0x02, 0xC5, 0x7B, 0x25, 0xBC, 0xA5, 0x81, 0x26, + 0xAD, 0x0C, 0x62, 0x9C, 0xE1, 0x66, 0xA7, 0xED, + 0xB4, 0xB3, 0x32, 0x21, 0xA0, 0xD3, 0xF7, 0x2B, + 0x85, 0xD5, 0x62, 0xEC, 0x69, 0x8B, 0x7D, 0x0A, + 0x91, 0x3D, 0x73, 0x80, 0x6F, 0x1C, 0x5C, 0x87, + 0xB3, 0x8E, 0xC0, 0x03, 0xCB, 0x30, 0x3A, 0x3D, + 0xC5, 0x1B, 0x4B, 0x35, 0x35, 0x6A, 0x67, 0x82, + 0x6D, 0x6E, 0xDA, 0xA8, 0xFE, 0xB9, 0x3B, 0x98, + 0x49, 0x3B, 0x2D, 0x1C, 0x11, 0xB6, 0x76, 0xA6, + 0xAD, 0x95, 0x06, 0xA1, 0xAA, 0xAE, 0x13, 0xA8, + 0x24, 0xC7, 0xC0, 0x8D, 0x1C, 0x6C, 0x2C, 0x4D, + 0xBA, 0x96, 0x42, 0xC7, 0x6E, 0xA7, 0xF6, 0xC8, + 0x26, 0x4B, 0x64, 0xA2, 0x3C, 0xCC, 0xA9, 0xA7, + 0x46, 0x35, 0xFC, 0xBF, 0x03, 0xE0, 0x0F, 0x1B, + 0x57, 0x22, 0xB2, 0x14, 0x37, 0x67, 0x90, 0x79, + 0x3B, 0x2C, 0x4F, 0x0A, 0x13, 0xB5, 0xC4, 0x07, + 0x60, 0xB4, 0x21, 0x8E, 0x1D, 0x25, 0x94, 0xDC, + 0xB3, 0x0A, 0x70, 0xD9, 0xC1, 0x78, 0x2A, 0x5D, + 0xD3, 0x05, 0x76, 0xFA, 0x41, 0x44, 0xBF, 0xC8, + 0x41, 0x6E, 0xDA, 0x81, 0x18, 0xFC, 0x64, 0x72, + 0xF5, 0x6A, 0x97, 0x95, 0x86, 0xF3, 0x3B, 0xB0, + 0x70, 0xFB, 0x0F, 0x1B, 0x0B, 0x10, 0xBC, 0x48, + 0x97, 0xEB, 0xE0, 0x1B, 0xCA, 0x38, 0x93, 0xD4, + 0xE1, 0x6A, 0xDB, 0x25, 0x09, 0x3A, 0x74, 0x17, + 0xD0, 0x70, 0x8C, 0x83, 0xA2, 0x63, 0x22, 0xE2, + 0x2E, 0x63, 0x30, 0x09, 0x1E, 0x30, 0x15, 0x2B, + 0xF8, 0x23, 0x59, 0x7C, 0x04, 0xCC, 0xF4, 0xCF, + 0xC7, 0x33, 0x15, 0x78, 0xF4, 0x3A, 0x27, 0x26, + 0xCC, 0xB4, 0x28, 0x28, 0x9A, 0x90, 0xC8, 0x63, + 0x25, 0x9D, 0xD1, 0x80, 0xC5, 0xFF, 0x14, 0x2B, + 0xEF, 0x41, 0xC7, 0x71, 0x70, 0x94, 0xBE, 0x07, + 0x85, 0x6D, 0xA2, 0xB1, 0x40, 0xFA, 0x67, 0x71, + 0x09, 0x67, 0x35, 0x6A, 0xA4, 0x7D, 0xFB, 0xC8, + 0xD2, 0x55, 0xB4, 0x72, 0x2A, 0xB8, 0x6D, 0x43, + 0x9B, 0x7E, 0x0A, 0x60, 0x90, 0x25, 0x1D, 0x2D, + 0x4C, 0x1E, 0xD5, 0xF2, 0x0B, 0xBE, 0x68, 0x07, + 0xBF, 0x65, 0xA9, 0x0B, 0x7C, 0xB2, 0xEC, 0x01, + 0x02, 0xAF, 0x02, 0x80, 0x9D, 0xC9, 0xAC, 0x7D, + 0x0A, 0x3A, 0xBC, 0x69, 0xC1, 0x83, 0x65, 0xBC, + 0xFF, 0x59, 0x18, 0x5F, 0x33, 0x99, 0x68, 0x87, + 0x74, 0x61, 0x85, 0x90, 0x6C, 0x01, 0x91, 0xAE, + 0xD4, 0x40, 0x7E, 0x13, 0x94, 0x46, 0x45, 0x9B, + 0xE2, 0x9C, 0x68, 0x22, 0x71, 0x76, 0x44, 0x35, + 0x3D, 0x24, 0xAB, 0x63, 0x39, 0x15, 0x6A, 0x9C, + 0x42, 0x49, 0x09, 0xF0, 0xA9, 0x02, 0x5B, 0xB7, + 0x47, 0x20, 0x77, 0x9B, 0xE4, 0x3F, 0x16, 0xD8, + 0x1C, 0x8C, 0xC6, 0x66, 0xE9, 0x97, 0x10, 0xD8, + 0xC6, 0x8B, 0xB5, 0xCC, 0x4E, 0x12, 0xF3, 0x14, + 0xE9, 0x25, 0xA5, 0x51, 0xF0, 0x9C, 0xC5, 0x90, + 0x03, 0xA1, 0xF8, 0x81, 0x03, 0xC2, 0x54, 0xBB, + 0x97, 0x8D, 0x75, 0xF3, 0x94, 0xD3, 0x54, 0x0E, + 0x31, 0xE7, 0x71, 0xCD, 0xA3, 0x6E, 0x39, 0xEC, + 0x54, 0xA6, 0x2B, 0x58, 0x32, 0x66, 0x4D, 0x82, + 0x1A, 0x72, 0xF1, 0xE6, 0xAF, 0xBB, 0xA2, 0x7F, + 0x84, 0x29, 0x5B, 0x26, 0x94, 0xC4, 0x98, 0x49, + 0x8E, 0x81, 0x2B, 0xC8, 0xE9, 0x37, 0x8F, 0xE5, + 0x41, 0xCE, 0xC5, 0x89, 0x1B, 0x25, 0x06, 0x29, + 0x01, 0xCB, 0x72, 0x12, 0xE3, 0xCD, 0xC4, 0x61, + 0x79, 0xEC, 0x5B, 0xCE, 0xC1, 0x0B, 0xC0, 0xB9, + 0x31, 0x1D, 0xE0, 0x50, 0x74, 0x29, 0x06, 0x87, + 0xFD, 0x6A, 0x53, 0x92, 0x67, 0x16, 0x54, 0x28, + 0x4C, 0xD9, 0xC8, 0xCC, 0x3E, 0xBA, 0x80, 0xEB, + 0x3B, 0x66, 0x2E, 0xB5, 0x3E, 0xB7, 0x51, 0x16, + 0x70, 0x4A, 0x1F, 0xEB, 0x5C, 0x2D, 0x05, 0x63, + 0x38, 0x53, 0x28, 0x68, 0xDD, 0xF2, 0x4E, 0xB8, + 0x99, 0x2A, 0xB8, 0x56, 0x5D, 0x9E, 0x49, 0x0C, + 0xAD, 0xF1, 0x48, 0x04, 0x36, 0x0D, 0xAA, 0x90, + 0x71, 0x8E, 0xAB, 0x61, 0x6B, 0xAB, 0x07, 0x65, + 0xD3, 0x39, 0x87, 0xB4, 0x7E, 0xFB, 0x65, 0x99, + 0xC5, 0x56, 0x32, 0x35, 0xE6, 0x1E, 0x4B, 0xE6, + 0x70, 0xE9, 0x79, 0x55, 0xAB, 0x29, 0x2D, 0x97, + 0x32, 0xCB, 0x89, 0x30, 0x94, 0x8A, 0xC8, 0x2D, + 0xF2, 0x30, 0xAC, 0x72, 0x29, 0x7A, 0x23, 0x67, + 0x9D, 0x6B, 0x94, 0xC1, 0x7F, 0x13, 0x59, 0x48, + 0x32, 0x54, 0xFE, 0xDC, 0x2F, 0x05, 0x81, 0x9F, + 0x0D, 0x06, 0x9A, 0x44, 0x3B, 0x78, 0xE3, 0xFC, + 0x6C, 0x3E, 0xF4, 0x71, 0x4B, 0x05, 0xA3, 0xFC, + 0xA8, 0x1C, 0xBB, 0xA6, 0x02, 0x42, 0xA7, 0x06, + 0x0C, 0xD8, 0x85, 0xD8, 0xF3, 0x99, 0x81, 0xBB, + 0x18, 0x09, 0x2B, 0x23, 0xDA, 0xA5, 0x9F, 0xD9, + 0x57, 0x83, 0x88, 0x68, 0x8A, 0x09, 0xBB, 0xA0, + 0x79, 0xBC, 0x80, 0x9A, 0x54, 0x84, 0x3A, 0x60, + 0x38, 0x5E, 0x23, 0x10, 0xBB, 0xCB, 0xCC, 0x02, + 0x13, 0xCE, 0x3D, 0xFA, 0xAB, 0x33, 0xB4, 0x7F, + 0x9D, 0x63, 0x05, 0xBC, 0x95, 0xC6, 0x10, 0x78, + 0x13, 0xC5, 0x85, 0xC4, 0xB6, 0x57, 0xBF, 0x30, + 0x54, 0x28, 0x33, 0xB1, 0x49, 0x49, 0xF5, 0x73, + 0xC0, 0x61, 0x2A, 0xD5, 0x24, 0xBA, 0xAE, 0x69, + 0x59, 0x0C, 0x12, 0x77, 0xB8, 0x6C, 0x28, 0x65, + 0x71, 0xBF, 0x66, 0xB3, 0xCF, 0xF4, 0x6A, 0x38, + 0x58, 0xC0, 0x99, 0x06, 0xA7, 0x94, 0xDF, 0x4A, + 0x06, 0xE9, 0xD4, 0xB0, 0xA2, 0xE4, 0x3F, 0x10, + 0xF7, 0x2A, 0x6C, 0x6C, 0x47, 0xE5, 0x64, 0x6E, + 0x2C, 0x79, 0x9B, 0x71, 0xC3, 0x3E, 0xD2, 0xF0, + 0x1E, 0xEB, 0x45, 0x93, 0x8E, 0xB7, 0xA4, 0xE2, + 0xE2, 0x90, 0x8C, 0x53, 0x55, 0x8A, 0x54, 0x0D, + 0x35, 0x03, 0x69, 0xFA, 0x18, 0x9C, 0x61, 0x69, + 0x43, 0xF7, 0x98, 0x1D, 0x76, 0x18, 0xCF, 0x02, + 0xA5, 0xB0, 0xA2, 0xBC, 0xC4, 0x22, 0xE8, 0x57, + 0xD1, 0xA4, 0x78, 0x71, 0x25, 0x3D, 0x08, 0x29, + 0x3C, 0x1C, 0x17, 0x9B, 0xCD, 0xC0, 0x43, 0x70, + 0x69, 0x10, 0x74, 0x18, 0x20, 0x5F, 0xDB, 0x98, + 0x56, 0x62, 0x3B, 0x8C, 0xA6, 0xB6, 0x94, 0xC9, + 0x6C, 0x08, 0x4B, 0x17, 0xF1, 0x3B, 0xB6, 0xDF, + 0x12, 0xB2, 0xCF, 0xBB, 0xC2, 0xB0, 0xE0, 0xC3, + 0x4B, 0x00, 0xD0, 0xFC, 0xD0, 0xAE, 0xCF, 0xB2, + 0x79, 0x24, 0xF6, 0x98, 0x4E, 0x74, 0x7B, 0xE2, + 0xA0, 0x9D, 0x83, 0xA8, 0x66, 0x45, 0x90, 0xA8, + 0x07, 0x73, 0x31, 0x49, 0x1A, 0x4F, 0x7D, 0x72, + 0x08, 0x43, 0xF2, 0x3E, 0x65, 0x2C, 0x6F, 0xA8, + 0x40, 0x30, 0x8D, 0xB4, 0x02, 0x03, 0x37, 0xAA, + 0xD3, 0x79, 0x67, 0x03, 0x4A, 0x9F, 0xB5, 0x23, + 0xB6, 0x7C, 0xA7, 0x03, 0x30, 0xF0, 0x2D, 0x9E, + 0xA2, 0x0C, 0x1E, 0x84, 0xCB, 0x8E, 0x57, 0x57, + 0xC9, 0xE1, 0x89, 0x6B, 0x60, 0x58, 0x14, 0x41, + 0xED, 0x61, 0x8A, 0xA5, 0xB2, 0x6D, 0xA5, 0x6C, + 0x0A, 0x5A, 0x73, 0xC4, 0xDC, 0xFD, 0x75, 0x5E, + 0x61, 0x0B, 0x4F, 0xC8, 0x1F, 0xF8, 0x4E, 0x21, + 0xD2, 0xE5, 0x74, 0xDF, 0xD8, 0xCD, 0x0A, 0xE8, + 0x93, 0xAA, 0x7E, 0x12, 0x5B, 0x44, 0xB9, 0x24, + 0xF4, 0x52, 0x23, 0xEC, 0x09, 0xF2, 0xAD, 0x11, + 0x41, 0xEA, 0x93, 0xA6, 0x80, 0x50, 0xDB, 0xF6, + 0x99, 0xE3, 0x24, 0x68, 0x84, 0x18, 0x1F, 0x8E, + 0x1D, 0xD4, 0x4E, 0x0C, 0x76, 0x29, 0x09, 0x33, + 0x30, 0x22, 0x1F, 0xD6, 0x7D, 0x9B, 0x7D, 0x6E, + 0x15, 0x10, 0xB2, 0xDB, 0xAD, 0x87, 0x62, 0xF7 }; #endif static byte pubKey[KYBER_MAX_PUBLIC_KEY_SIZE]; @@ -28882,932 +28892,932 @@ static int test_wc_kyber_encapsulate_kats(void) { EXPECT_DECLS; #if defined(WOLFSSL_HAVE_KYBER) && defined(WOLFSSL_WC_KYBER) && \ - defined(WOLFSSL_ML_KEM) + !defined(WOLFSSL_KYBER_ORIGINAL) KyberKey* key; #ifndef WOLFSSL_NO_KYBER512 static const byte ek_512[KYBER512_PUBLIC_KEY_SIZE] = { - 0xA5, 0x40, 0x97, 0x18, 0xCB, 0x72, 0xF2, 0x43, - 0x8A, 0x35, 0x55, 0xA3, 0xC8, 0xF1, 0x8F, 0x26, - 0x71, 0xA1, 0xF8, 0x14, 0x03, 0xDF, 0x7B, 0x5A, - 0x46, 0x59, 0xA5, 0x1F, 0x50, 0x82, 0x7B, 0xA6, - 0x57, 0x7A, 0xA7, 0x08, 0x00, 0xD7, 0x8D, 0x8B, - 0xC5, 0xAA, 0x86, 0xB8, 0x9E, 0x08, 0xB5, 0x8F, - 0x34, 0x80, 0xA8, 0x9E, 0x10, 0x4D, 0xC6, 0x92, - 0x2E, 0xDB, 0xC1, 0x2D, 0x06, 0xF8, 0x91, 0x02, - 0x7C, 0x65, 0x4E, 0x99, 0x4A, 0x22, 0xF9, 0x1A, - 0x2A, 0xF6, 0x34, 0x04, 0xCA, 0x98, 0xD7, 0xB6, - 0x7E, 0xEA, 0x25, 0x91, 0x1B, 0x24, 0xC7, 0x0D, - 0xEB, 0x81, 0x46, 0xA0, 0x82, 0x1F, 0x34, 0xA3, - 0x02, 0x55, 0x1F, 0x2D, 0x51, 0x0C, 0x05, 0x88, - 0xC8, 0xBC, 0xA7, 0x4E, 0xB4, 0xDC, 0x0C, 0xFA, - 0x46, 0x03, 0xC1, 0xC5, 0xA3, 0xC5, 0x53, 0x70, - 0x61, 0x78, 0x90, 0x68, 0x68, 0x2C, 0x4C, 0xC3, - 0x14, 0x3F, 0xBA, 0x9B, 0xB5, 0x54, 0x2F, 0x97, - 0x78, 0xBD, 0xF2, 0x3B, 0x36, 0x52, 0xF2, 0xA7, - 0x52, 0x47, 0x56, 0xFA, 0x73, 0x90, 0x9D, 0xDA, - 0xC7, 0xE5, 0x32, 0x52, 0x26, 0x59, 0x21, 0x8C, - 0xBA, 0x25, 0xF3, 0x3B, 0x6B, 0x04, 0x58, 0xCB, - 0x03, 0xDA, 0x79, 0x35, 0xBA, 0x59, 0x11, 0x19, - 0x55, 0x31, 0x2B, 0x15, 0xCC, 0xE2, 0xC0, 0xF7, - 0x34, 0x66, 0xA8, 0x00, 0x62, 0x83, 0xA2, 0xAA, - 0x7C, 0xBB, 0x61, 0x02, 0x2A, 0xBB, 0xC2, 0xD1, - 0x9F, 0x29, 0x20, 0xBC, 0x30, 0x24, 0x72, 0xDC, - 0x97, 0xC4, 0xA1, 0x78, 0x8C, 0x9B, 0xD3, 0xBB, - 0xED, 0xC9, 0x12, 0x2B, 0x82, 0x7B, 0x27, 0x9C, - 0x07, 0x4C, 0x80, 0x44, 0x31, 0x41, 0x11, 0x9F, - 0x4B, 0x16, 0x29, 0xF6, 0x2F, 0x10, 0xD4, 0xCE, - 0x2B, 0xE3, 0xBB, 0x34, 0x38, 0x16, 0xCA, 0xD1, - 0x6A, 0x1C, 0x87, 0x58, 0x2F, 0x2B, 0x70, 0xE2, - 0x66, 0x35, 0xB0, 0x8B, 0xB3, 0x90, 0xC1, 0x33, - 0x98, 0xFC, 0xCD, 0xA7, 0xE9, 0xBB, 0x3D, 0x9B, - 0x0B, 0x78, 0x03, 0x75, 0x0C, 0x95, 0x5C, 0x57, - 0xA0, 0x28, 0xA5, 0xD2, 0x6C, 0x27, 0x03, 0x16, - 0xBB, 0x2B, 0x81, 0x5C, 0x3B, 0x97, 0x2B, 0xA6, - 0x78, 0x2D, 0xAB, 0x02, 0xF3, 0x06, 0x82, 0x1E, - 0x61, 0x28, 0x5B, 0xB0, 0x72, 0xBF, 0x79, 0x78, - 0x1C, 0xAB, 0xC3, 0x86, 0x14, 0x2A, 0x50, 0xC7, - 0xAA, 0xAE, 0x66, 0xA9, 0x47, 0x58, 0x5B, 0xB0, - 0xD8, 0x28, 0x8D, 0xBC, 0xAF, 0x4B, 0x3B, 0x85, - 0xBB, 0x79, 0x26, 0x98, 0x7B, 0xAF, 0x76, 0x43, - 0xAA, 0xB5, 0xFB, 0x02, 0x21, 0x05, 0x80, 0xA0, - 0x26, 0x43, 0x52, 0xE6, 0x9C, 0x60, 0x98, 0x98, - 0x9C, 0xFB, 0x87, 0x48, 0x33, 0x95, 0x96, 0x0A, - 0x3A, 0x4F, 0x31, 0xBE, 0xFD, 0xA8, 0x0B, 0x5F, - 0x28, 0x6E, 0xCF, 0xDA, 0xA5, 0x55, 0xD4, 0x39, - 0x0A, 0xF6, 0xB5, 0x5D, 0x31, 0x39, 0x20, 0x92, - 0x90, 0x93, 0x44, 0x9C, 0xD6, 0x72, 0x9D, 0x00, - 0x21, 0x8E, 0x2D, 0x86, 0x57, 0x0A, 0xDC, 0x0C, - 0x4F, 0x65, 0x45, 0xFF, 0xB5, 0x63, 0x2E, 0xFB, - 0x3A, 0xAE, 0x26, 0x25, 0xA6, 0x98, 0x26, 0x70, - 0xFA, 0xCE, 0x8D, 0x16, 0x12, 0x6F, 0xA6, 0x07, - 0xE6, 0xD0, 0xA1, 0xFF, 0x61, 0x6A, 0x46, 0xEC, - 0xA6, 0x42, 0xCC, 0x6A, 0xAC, 0x55, 0x4D, 0xBB, - 0xC4, 0x3D, 0xFC, 0xF5, 0x7F, 0x36, 0x4C, 0x19, - 0x0C, 0xEA, 0x57, 0x76, 0xC1, 0xCE, 0xB5, 0x8B, - 0x70, 0x07, 0x50, 0x5F, 0xD7, 0x9C, 0x5F, 0x00, - 0x5A, 0x4B, 0xA2, 0x18, 0xCF, 0x06, 0x93, 0xB0, - 0x58, 0xB5, 0x10, 0xA4, 0xCA, 0x20, 0x43, 0x24, - 0x60, 0x2F, 0x59, 0xBB, 0x8F, 0x22, 0x81, 0xC4, - 0xD7, 0xB0, 0xBC, 0x86, 0x25, 0xE7, 0x88, 0x16, - 0x50, 0xF5, 0x7C, 0x89, 0xE3, 0x2C, 0xF4, 0x80, - 0x91, 0x44, 0x77, 0x5C, 0x90, 0x73, 0xB6, 0x73, - 0xE3, 0x94, 0x12, 0xA2, 0x7C, 0x91, 0x43, 0x21, - 0xCC, 0xB6, 0xA7, 0xCF, 0x7C, 0x37, 0xC5, 0xBC, - 0xBE, 0x7C, 0xA5, 0x1B, 0xE0, 0xC9, 0x28, 0x46, - 0x6A, 0x45, 0x8E, 0xB7, 0x78, 0xD6, 0x46, 0x6A, - 0x89, 0x2A, 0x0A, 0xCB, 0xC0, 0x96, 0x38, 0x78, - 0x4A, 0x27, 0x73, 0x9C, 0x97, 0x0C, 0xA5, 0x8B, - 0xC2, 0x59, 0x5A, 0xD6, 0xBF, 0xA4, 0xE5, 0x2E, - 0xB4, 0x38, 0xAC, 0x97, 0xC4, 0x16, 0x23, 0x80, - 0x22, 0x48, 0xE1, 0x10, 0xB0, 0x74, 0x83, 0x8F, - 0x31, 0xA6, 0xE7, 0x50, 0x37, 0x37, 0x70, 0x4E, - 0x7A, 0xE4, 0xAD, 0x91, 0x29, 0x95, 0x72, 0xA8, - 0xC1, 0x36, 0x03, 0x50, 0x0F, 0x36, 0x09, 0xB6, - 0x25, 0xB4, 0xE2, 0x4C, 0xAE, 0x33, 0x2B, 0x0D, - 0x7A, 0x5B, 0xB4, 0x7A, 0x03, 0x85, 0x12, 0xA0, - 0x81, 0xBC, 0x27, 0xCD, 0xF0, 0xF2, 0x92, 0x3C, - 0xD3, 0x47, 0x9F, 0x53, 0x07, 0x02, 0x0B, 0x77, - 0xF1, 0x49, 0x58, 0x45, 0x64, 0x06, 0x0E, 0x50, - 0x83, 0xCE, 0xD5, 0x53, 0x12, 0xB6, 0xA6, 0xA4, - 0x65, 0xA8, 0x2B, 0x45, 0x77, 0xD6, 0x3A, 0x4B, - 0x49, 0xC8, 0x0B, 0x07, 0xA9, 0x36, 0x7E, 0x39, - 0x77, 0x8A, 0xF7, 0x6F, 0xA8, 0xEC, 0x2C, 0xF5, - 0x28, 0x72, 0x28, 0x56, 0xCE, 0x78, 0x13, 0x40, - 0x1A, 0x83, 0x83, 0xBD, 0xB7, 0x15, 0x1B, 0x9B, - 0x6D, 0x2D, 0xD6, 0xBF, 0xF5, 0x54, 0x01, 0xD2, - 0x8A, 0xC6, 0x12, 0x81, 0x8C, 0x88, 0xC9, 0x28, - 0x73, 0x47, 0xB0, 0x98, 0xA9, 0x66, 0xEB, 0x9C, - 0x0A, 0x2D, 0xB7, 0x1F, 0x0A, 0x75, 0x55, 0x5E, - 0x17, 0x57, 0xD3, 0xAC, 0x4E, 0x3D, 0x80, 0x2C, - 0x8D, 0xC6, 0xA2, 0x61, 0x52, 0x12, 0x55, 0x18, - 0x6A, 0xBB, 0x98, 0xC2, 0x48, 0x03, 0x01, 0xB8, - 0xC6, 0xB3, 0x12, 0x28, 0xB5, 0x44, 0x61, 0xBC, - 0x44, 0xEA, 0x3C, 0x2C, 0xF9, 0x4B, 0x86, 0xC7, - 0xA5, 0xB8, 0x2C, 0x55, 0x16, 0x7A, 0x76, 0x06, - 0xCA, 0x9D, 0xC8, 0x25, 0x3B, 0x76, 0x04, 0xE4, - 0x4A, 0x07, 0xF3, 0xED, 0x55, 0xCD, 0x5B, 0x5E + 0xDD, 0x19, 0x24, 0x93, 0x5A, 0xA8, 0xE6, 0x17, + 0xAF, 0x18, 0xB5, 0xA0, 0x65, 0xAC, 0x45, 0x72, + 0x77, 0x67, 0xEE, 0x89, 0x7C, 0xF4, 0xF9, 0x44, + 0x2B, 0x2A, 0xCE, 0x30, 0xC0, 0x23, 0x7B, 0x30, + 0x7D, 0x3E, 0x76, 0xBF, 0x8E, 0xEB, 0x78, 0xAD, + 0xDC, 0x4A, 0xAC, 0xD1, 0x64, 0x63, 0xD8, 0x60, + 0x2F, 0xD5, 0x48, 0x7B, 0x63, 0xC8, 0x8B, 0xB6, + 0x60, 0x27, 0xF3, 0x7D, 0x0D, 0x61, 0x4D, 0x6F, + 0x9C, 0x24, 0x60, 0x3C, 0x42, 0x94, 0x76, 0x64, + 0xAC, 0x43, 0x98, 0xC6, 0xC5, 0x23, 0x83, 0x46, + 0x9B, 0x4F, 0x97, 0x77, 0xE5, 0xEC, 0x72, 0x06, + 0x21, 0x0F, 0x3E, 0x5A, 0x79, 0x6B, 0xF4, 0x5C, + 0x53, 0x26, 0x8E, 0x25, 0xF3, 0x9A, 0xC2, 0x61, + 0xAF, 0x3B, 0xFA, 0x2E, 0xE7, 0x55, 0xBE, 0xB8, + 0xB6, 0x7A, 0xB3, 0xAC, 0x8D, 0xF6, 0xC6, 0x29, + 0xC1, 0x17, 0x6E, 0x9E, 0x3B, 0x96, 0x5E, 0x93, + 0x69, 0xF9, 0xB3, 0xB9, 0x2A, 0xD7, 0xC2, 0x09, + 0x55, 0x64, 0x1D, 0x99, 0x52, 0x6F, 0xE7, 0xB9, + 0xFE, 0x8C, 0x85, 0x08, 0x20, 0x27, 0x5C, 0xD9, + 0x64, 0x84, 0x92, 0x50, 0x09, 0x07, 0x33, 0xCE, + 0x12, 0x4E, 0xCF, 0x31, 0x66, 0x24, 0x37, 0x4B, + 0xD1, 0x8B, 0x7C, 0x35, 0x8C, 0x06, 0xE9, 0xC1, + 0x36, 0xEE, 0x12, 0x59, 0xA9, 0x24, 0x5A, 0xBC, + 0x55, 0xB9, 0x64, 0xD6, 0x89, 0xF5, 0xA0, 0x82, + 0x92, 0xD2, 0x82, 0x65, 0x65, 0x8E, 0xBB, 0x40, + 0xCB, 0xFE, 0x48, 0x8A, 0x22, 0x28, 0x27, 0x55, + 0x90, 0xAB, 0x9F, 0x32, 0xA3, 0x41, 0x09, 0x70, + 0x9C, 0x1C, 0x29, 0x1D, 0x4A, 0x23, 0x33, 0x72, + 0x74, 0xC7, 0xA5, 0xA5, 0x99, 0x1C, 0x7A, 0x87, + 0xB8, 0x1C, 0x97, 0x4A, 0xB1, 0x8C, 0xE7, 0x78, + 0x59, 0xE4, 0x99, 0x5E, 0x7C, 0x14, 0xF0, 0x37, + 0x17, 0x48, 0xB7, 0x71, 0x2F, 0xB5, 0x2C, 0x59, + 0x66, 0xCD, 0x63, 0x06, 0x3C, 0x4F, 0x3B, 0x81, + 0xB4, 0x7C, 0x45, 0xDD, 0xE8, 0x3F, 0xB3, 0xA2, + 0x72, 0x40, 0x29, 0xB1, 0x0B, 0x32, 0x30, 0x21, + 0x4C, 0x04, 0xFA, 0x05, 0x77, 0xFC, 0x29, 0xAC, + 0x90, 0x86, 0xAE, 0x18, 0xC5, 0x3B, 0x3E, 0xD4, + 0x4E, 0x50, 0x74, 0x12, 0xFC, 0xA0, 0x4B, 0x4F, + 0x53, 0x8A, 0x51, 0x58, 0x8E, 0xC1, 0xF1, 0x02, + 0x9D, 0x15, 0x2D, 0x9A, 0xE7, 0x73, 0x5F, 0x76, + 0xA0, 0x77, 0xAA, 0x94, 0x84, 0x38, 0x0A, 0xED, + 0x91, 0x89, 0xE5, 0x91, 0x24, 0x87, 0xFC, 0xC5, + 0xB7, 0xC7, 0x01, 0x2D, 0x92, 0x23, 0xDD, 0x96, + 0x7E, 0xEC, 0xDA, 0xC3, 0x00, 0x8A, 0x89, 0x31, + 0xB6, 0x48, 0x24, 0x35, 0x37, 0xF5, 0x48, 0xC1, + 0x71, 0x69, 0x8C, 0x5B, 0x38, 0x1D, 0x84, 0x6A, + 0x72, 0xE5, 0xC9, 0x2D, 0x42, 0x26, 0xC5, 0xA8, + 0x90, 0x98, 0x84, 0xF1, 0xC4, 0xA3, 0x40, 0x4C, + 0x17, 0x20, 0xA5, 0x27, 0x94, 0x14, 0xD7, 0xF2, + 0x7B, 0x2B, 0x98, 0x26, 0x52, 0xB6, 0x74, 0x02, + 0x19, 0xC5, 0x6D, 0x21, 0x77, 0x80, 0xD7, 0xA5, + 0xE5, 0xBA, 0x59, 0x83, 0x63, 0x49, 0xF7, 0x26, + 0x88, 0x1D, 0xEA, 0x18, 0xEF, 0x75, 0xC0, 0x77, + 0x2A, 0x8B, 0x92, 0x27, 0x66, 0x95, 0x37, 0x18, + 0xCA, 0xCC, 0x14, 0xCC, 0xBA, 0xCB, 0x5F, 0xC4, + 0x12, 0xA2, 0xD0, 0xBE, 0x52, 0x18, 0x17, 0x64, + 0x5A, 0xB2, 0xBF, 0x6A, 0x47, 0x85, 0xE9, 0x2B, + 0xC9, 0x4C, 0xAF, 0x47, 0x7A, 0x96, 0x78, 0x76, + 0x79, 0x6C, 0x0A, 0x51, 0x90, 0x31, 0x5A, 0xC0, + 0x88, 0x56, 0x71, 0xA4, 0xC7, 0x49, 0x56, 0x4C, + 0x3B, 0x2C, 0x7A, 0xED, 0x90, 0x64, 0xEB, 0xA2, + 0x99, 0xEF, 0x21, 0x4B, 0xA2, 0xF4, 0x04, 0x93, + 0x66, 0x7C, 0x8B, 0xD0, 0x32, 0xAE, 0xC5, 0x62, + 0x17, 0x11, 0xB4, 0x1A, 0x38, 0x52, 0xC5, 0xC2, + 0xBA, 0xB4, 0xA3, 0x49, 0xCE, 0x4B, 0x7F, 0x08, + 0x5A, 0x81, 0x2B, 0xBB, 0xC8, 0x20, 0xB8, 0x1B, + 0xEF, 0xE6, 0x3A, 0x05, 0xB8, 0xBC, 0xDF, 0xE9, + 0xC2, 0xA7, 0x0A, 0x8B, 0x1A, 0xCA, 0x9B, 0xF9, + 0x81, 0x64, 0x81, 0x90, 0x7F, 0xF4, 0x43, 0x24, + 0x61, 0x11, 0x12, 0x87, 0x30, 0x3F, 0x0B, 0xD8, + 0x17, 0xC0, 0x57, 0x26, 0xBF, 0xA1, 0x8A, 0x2E, + 0x24, 0xC7, 0x72, 0x49, 0x21, 0x02, 0x80, 0x32, + 0xF6, 0x22, 0xBD, 0x96, 0x0A, 0x31, 0x7D, 0x83, + 0xB3, 0x56, 0xB5, 0x7F, 0x4A, 0x80, 0x04, 0x49, + 0x9C, 0xBC, 0x73, 0xC9, 0x7D, 0x1E, 0xB7, 0x74, + 0x59, 0x72, 0x63, 0x1C, 0x05, 0x61, 0xC1, 0xA3, + 0xAB, 0x6E, 0xF9, 0x1B, 0xD3, 0x63, 0x28, 0x0A, + 0x10, 0x54, 0x5D, 0xA6, 0x93, 0xE6, 0xD5, 0x8A, + 0xED, 0x68, 0x45, 0xE7, 0xCC, 0x5F, 0x0D, 0x08, + 0xCA, 0x79, 0x05, 0x05, 0x2C, 0x77, 0x36, 0x6D, + 0x19, 0x72, 0xCC, 0xFC, 0xC1, 0xA2, 0x76, 0x10, + 0xCB, 0x54, 0x36, 0x65, 0xAA, 0x79, 0x8E, 0x20, + 0x94, 0x01, 0x28, 0xB9, 0x56, 0x7A, 0x7E, 0xDB, + 0x7A, 0x90, 0x04, 0x07, 0xC7, 0x0D, 0x35, 0x94, + 0x38, 0x43, 0x5E, 0x13, 0x96, 0x16, 0x08, 0xD5, + 0x52, 0xA9, 0x4C, 0x5C, 0xDA, 0x78, 0x59, 0x22, + 0x05, 0x09, 0xB4, 0x83, 0xC5, 0xC5, 0x2A, 0x21, + 0x0E, 0x9C, 0x81, 0x2B, 0xC0, 0xC2, 0x32, 0x8C, + 0xA0, 0x0E, 0x78, 0x9A, 0x56, 0xB2, 0x60, 0x6B, + 0x90, 0x29, 0x2E, 0x35, 0x43, 0xDA, 0xCA, 0xA2, + 0x43, 0x18, 0x41, 0xD6, 0x1A, 0x22, 0xCA, 0x90, + 0xC1, 0xCC, 0xF0, 0xB5, 0xB4, 0xE0, 0xA6, 0xF6, + 0x40, 0x53, 0x6D, 0x1A, 0x26, 0xAB, 0x5B, 0x8D, + 0x21, 0x51, 0x32, 0x79, 0x28, 0xCE, 0x02, 0x90, + 0x4C, 0xF1, 0xD1, 0x5E, 0x32, 0x78, 0x8A, 0x95, + 0xF6, 0x2D, 0x3C, 0x27, 0x0B, 0x6F, 0xA1, 0x50, + 0x8F, 0x97, 0xB9, 0x15, 0x5A, 0x27, 0x26, 0xD8, + 0x0A, 0x1A, 0xFA, 0x3C, 0x53, 0x87, 0xA2, 0x76, + 0xA4, 0xD0, 0x31, 0xA0, 0x8A, 0xBF, 0x4F, 0x2E, + 0x74, 0xF1, 0xA0, 0xBB, 0x8A, 0x0F, 0xD3, 0xCB }; static const byte seed_512[KYBER_ENC_RAND_SZ] = { - 0x10, 0x9A, 0x24, 0x8F, 0xE8, 0x05, 0x2F, 0x84, - 0x27, 0x1F, 0xF5, 0x7B, 0xAC, 0x15, 0x6B, 0x1B, - 0xA6, 0xA5, 0x09, 0xCD, 0xCD, 0xBC, 0xC9, 0x6C, - 0xCD, 0xB1, 0xCC, 0xB8, 0x5C, 0xA4, 0x93, 0x15 + 0x6F, 0xF0, 0x2E, 0x1D, 0xC7, 0xFD, 0x91, 0x1B, + 0xEE, 0xE0, 0xC6, 0x92, 0xC8, 0xBD, 0x10, 0x0C, + 0x3E, 0x5C, 0x48, 0x96, 0x4D, 0x31, 0xDF, 0x92, + 0x99, 0x42, 0x18, 0xE8, 0x06, 0x64, 0xA6, 0xCA }; static const byte c_512[KYBER512_CIPHER_TEXT_SIZE] = { - 0x59, 0x7A, 0x06, 0xDE, 0xB8, 0x81, 0x72, 0xBA, - 0x8D, 0x7C, 0xDE, 0x8D, 0x82, 0xCA, 0xA2, 0x34, - 0xB8, 0x11, 0x2A, 0xF8, 0xA7, 0x2F, 0x1A, 0xB4, - 0xCE, 0xA1, 0xEF, 0xCB, 0x2D, 0x86, 0x8D, 0x53, - 0xD2, 0x12, 0xE3, 0x03, 0xB7, 0x0E, 0x7E, 0x52, - 0x1A, 0xB0, 0xF4, 0xB5, 0xDB, 0x4F, 0x51, 0x15, - 0x92, 0x48, 0xBF, 0xB2, 0x75, 0x36, 0x1B, 0xEF, - 0x88, 0x37, 0x52, 0xC7, 0x8B, 0x8D, 0x47, 0x12, - 0x27, 0x53, 0x85, 0x53, 0x6A, 0x4B, 0x0A, 0x96, - 0xE3, 0xC2, 0x3E, 0xA6, 0xC1, 0x7E, 0xA9, 0x2B, - 0x60, 0x26, 0x16, 0xE5, 0x82, 0x1E, 0x57, 0x53, - 0xA4, 0x73, 0x6C, 0x40, 0x39, 0xC2, 0x0C, 0x92, - 0x3C, 0xCE, 0xCB, 0x57, 0x98, 0x05, 0x58, 0x7C, - 0x0C, 0xE7, 0x22, 0x18, 0xBB, 0x1A, 0xB1, 0x24, - 0x52, 0xF8, 0xE1, 0x54, 0xCB, 0x86, 0x43, 0x32, - 0x81, 0x42, 0xF9, 0xB3, 0x40, 0xA6, 0x41, 0xC6, - 0xF2, 0x95, 0xE5, 0xEC, 0xF2, 0xE0, 0x48, 0xBC, - 0x7F, 0xC7, 0x9B, 0xC5, 0xB9, 0x42, 0x77, 0xC8, - 0x68, 0xD8, 0xE5, 0x36, 0xB5, 0x04, 0x25, 0x80, - 0x9D, 0xCF, 0xA0, 0x24, 0xA3, 0x90, 0x5C, 0xBA, - 0x55, 0x0A, 0xD3, 0xBB, 0x52, 0xB4, 0x59, 0xAC, - 0x38, 0xFA, 0xBC, 0x9B, 0xC0, 0x0E, 0xBA, 0x03, - 0xEC, 0x09, 0x06, 0x72, 0x5B, 0x4F, 0xE4, 0xE9, - 0x76, 0xF1, 0x74, 0x32, 0x00, 0x47, 0xB3, 0x1D, - 0x15, 0x89, 0x13, 0x65, 0xBA, 0x48, 0x23, 0x88, - 0xF0, 0xFB, 0x97, 0x3B, 0x85, 0x22, 0x4F, 0xB0, - 0x0B, 0xA8, 0x65, 0xAF, 0xAB, 0x3C, 0x9A, 0x1B, - 0x7D, 0x48, 0x9F, 0x7B, 0x98, 0x2D, 0x0B, 0xD4, - 0x70, 0xEF, 0x94, 0x8E, 0xCB, 0x5B, 0x39, 0x20, - 0xAF, 0x89, 0x03, 0x59, 0x60, 0x12, 0x3B, 0x1F, - 0x86, 0x30, 0xD7, 0x63, 0x68, 0x1B, 0xFD, 0x67, - 0x15, 0x67, 0xEF, 0xBB, 0x1E, 0x62, 0x76, 0xAA, - 0x4F, 0xB2, 0xDF, 0xA9, 0xC3, 0x94, 0x8D, 0xB7, - 0xF0, 0x83, 0xF2, 0x83, 0x83, 0xB7, 0x7B, 0xC5, - 0x14, 0xAF, 0x9D, 0x68, 0xD2, 0x2E, 0x24, 0x87, - 0xC2, 0x01, 0x63, 0xC0, 0x2B, 0x0B, 0xBF, 0x23, - 0xBB, 0xCE, 0x06, 0x50, 0xF8, 0x4F, 0xF8, 0xCE, - 0x02, 0xC7, 0x4E, 0x9E, 0x11, 0xD6, 0xF3, 0x0E, - 0xC5, 0xFA, 0x8A, 0x01, 0x2A, 0xDC, 0x3B, 0x89, - 0x62, 0x7C, 0x7D, 0xE8, 0x55, 0xC1, 0xFB, 0xBE, - 0xB5, 0xDC, 0xDE, 0x84, 0xD0, 0x5E, 0x36, 0xC5, - 0x56, 0x6E, 0x55, 0x51, 0xB5, 0x87, 0x50, 0xA4, - 0x11, 0x64, 0x26, 0x39, 0xB2, 0x78, 0x64, 0xF7, - 0xE0, 0x05, 0x97, 0x8F, 0xFE, 0x25, 0x6B, 0x75, - 0x7D, 0x13, 0xDA, 0x66, 0x3F, 0xC3, 0xBB, 0x07, - 0x94, 0xA2, 0x7C, 0xF7, 0x58, 0x5D, 0x12, 0xF2, - 0x2D, 0x95, 0x3B, 0x28, 0x54, 0x59, 0xFD, 0xC9, - 0xBC, 0xDF, 0xCD, 0xCC, 0xB7, 0xBF, 0x3E, 0x4E, - 0x36, 0x2D, 0x28, 0x91, 0xD5, 0x83, 0x85, 0x5F, - 0x5D, 0x94, 0x87, 0xE6, 0xFB, 0x21, 0x7E, 0x2E, - 0x45, 0xEE, 0x0B, 0xD9, 0xAF, 0xC2, 0x89, 0xF4, - 0xD5, 0x64, 0x58, 0x12, 0x09, 0xA3, 0xAC, 0xA3, - 0x17, 0x95, 0xA1, 0x24, 0xBD, 0x1B, 0xBA, 0xEA, - 0x84, 0x67, 0x55, 0xC8, 0xEA, 0x78, 0x10, 0xEA, - 0xA7, 0x30, 0x60, 0xE8, 0x6F, 0xB5, 0xFD, 0xF3, - 0xFB, 0xE7, 0x2F, 0x80, 0x6B, 0xB1, 0xBF, 0xBF, - 0xBA, 0xC0, 0xC7, 0xB1, 0x6B, 0xFE, 0x74, 0x25, - 0x02, 0x77, 0xEC, 0xF5, 0xF5, 0x41, 0x57, 0x1B, - 0x8A, 0x97, 0x50, 0x50, 0x91, 0x7F, 0xDF, 0x78, - 0x1F, 0xEA, 0x17, 0xB5, 0x85, 0xE3, 0xC6, 0xDB, - 0xFE, 0x77, 0xB1, 0xE4, 0x8A, 0x16, 0x50, 0x4C, - 0x3A, 0x38, 0x90, 0x11, 0x56, 0x10, 0x0C, 0xAF, - 0xEC, 0x2E, 0xD9, 0x39, 0xAE, 0x9A, 0x9E, 0xDF, - 0xC9, 0xC0, 0xF8, 0xC7, 0xF5, 0x5C, 0xC9, 0x3E, - 0x5D, 0xDD, 0x0B, 0x3D, 0xE1, 0xC6, 0xED, 0xAE, - 0x2B, 0x7E, 0xE3, 0x4C, 0x61, 0x01, 0xF0, 0x11, - 0xB5, 0x90, 0x4F, 0x69, 0x3D, 0x28, 0x63, 0x56, - 0xB5, 0x4C, 0x86, 0xCE, 0x8B, 0xCF, 0xEA, 0x9D, - 0xBF, 0xEC, 0x21, 0xC1, 0xEF, 0x0E, 0xCC, 0x91, - 0x05, 0x00, 0x5B, 0xAA, 0x37, 0x7D, 0x82, 0x9D, - 0xCA, 0x2C, 0xBF, 0x5E, 0xA5, 0xF3, 0x1B, 0x71, - 0xD4, 0x46, 0xB8, 0x33, 0xE0, 0x06, 0x19, 0x81, - 0x9D, 0x7F, 0xC6, 0x02, 0x40, 0x52, 0x49, 0x97, - 0x57, 0xA2, 0x76, 0x5F, 0x19, 0xCD, 0x2B, 0x36, - 0xC2, 0x48, 0x85, 0x99, 0xDC, 0x52, 0x47, 0x49, - 0x4F, 0xAB, 0xE8, 0x1E, 0xEB, 0xEF, 0xD3, 0xBE, - 0x75, 0xC4, 0x78, 0x0E, 0x43, 0xA5, 0x04, 0x18, - 0xC5, 0xDB, 0x2F, 0xF3, 0x59, 0xC5, 0xA6, 0xDE, - 0x28, 0x6E, 0xF5, 0x95, 0x1E, 0x27, 0x09, 0x48, - 0x6E, 0xDC, 0x9C, 0xC4, 0x9D, 0x07, 0x24, 0xEC, - 0xA3, 0xF2, 0xC0, 0xB7, 0x5F, 0x8A, 0x36, 0xCE, - 0x86, 0x23, 0x88, 0xF0, 0x0B, 0x3C, 0x59, 0x3D, - 0x1C, 0x8C, 0x6A, 0xC4, 0x5D, 0x73, 0xA7, 0x2F, - 0xF6, 0xB4, 0xF8, 0x05, 0xB1, 0x31, 0xED, 0x4E, - 0xAF, 0x56, 0x01, 0xD7, 0xB7, 0x3B, 0x0E, 0x37, - 0x24, 0xE7, 0x5D, 0x58, 0xDD, 0x50, 0xF5, 0x87, - 0x1C, 0x54, 0xA3, 0x7C, 0x14, 0x81, 0x33, 0x17, - 0x59, 0xF4, 0xBE, 0x86, 0xFB, 0x58, 0xA2, 0xEE, - 0x00, 0x31, 0x30, 0xF6, 0x6E, 0x18, 0x7C, 0x8B, - 0xA5, 0x01, 0x5B, 0xE7, 0x13, 0x29, 0x65, 0x89, - 0xAC, 0xAF, 0xBF, 0x65, 0x96, 0x89, 0x7E, 0x03, - 0xD4, 0x92, 0x0C, 0x91, 0xF2, 0x63, 0x33, 0xB7, - 0xBF, 0x17, 0x98, 0xAF, 0x81, 0x5C, 0x93, 0xD4, - 0xDF, 0x55, 0xBD, 0x47, 0xA0, 0x82, 0x49, 0xBF, - 0x11, 0x30, 0x63, 0xFB, 0xB3, 0x95, 0x03, 0xE9, - 0xB6, 0xD4, 0x3E, 0xAC, 0x7B, 0x0C, 0x30, 0x5A + 0x19, 0xC5, 0x92, 0x50, 0x59, 0x07, 0xC2, 0x4C, + 0x5F, 0xA2, 0xEB, 0xFA, 0x93, 0x2D, 0x2C, 0xBB, + 0x48, 0xF3, 0xE4, 0x34, 0x0A, 0x28, 0xF7, 0xEB, + 0xA5, 0xD0, 0x68, 0xFC, 0xAC, 0xAB, 0xED, 0xF7, + 0x77, 0x84, 0xE2, 0xB2, 0x4D, 0x79, 0x61, 0x77, + 0x5F, 0x0B, 0xF1, 0xA9, 0x97, 0xAE, 0x8B, 0xA9, + 0xFC, 0x43, 0x11, 0xBE, 0x63, 0x71, 0x67, 0x79, + 0xC2, 0xB7, 0x88, 0xF8, 0x12, 0xCB, 0xB7, 0x8C, + 0x74, 0xE7, 0x51, 0x7E, 0x22, 0xE9, 0x10, 0xEF, + 0xF5, 0xF3, 0x8D, 0x44, 0x46, 0x9C, 0x50, 0xDE, + 0x16, 0x75, 0xAE, 0x19, 0x8F, 0xD6, 0xA2, 0x89, + 0xAE, 0x7E, 0x6C, 0x30, 0xA9, 0xD4, 0x35, 0x1B, + 0x3D, 0x1F, 0x4C, 0x36, 0xEF, 0xF9, 0xC6, 0x8D, + 0xA9, 0x1C, 0x40, 0xB8, 0x2D, 0xC9, 0xB2, 0x79, + 0x9A, 0x33, 0xA2, 0x6B, 0x60, 0xA4, 0xE7, 0x0D, + 0x71, 0x01, 0x86, 0x27, 0x79, 0x46, 0x9F, 0x3A, + 0x9D, 0xAE, 0xC8, 0xE3, 0xE8, 0xF8, 0xC6, 0xA1, + 0x6B, 0xF0, 0x92, 0xFB, 0xA5, 0x86, 0x61, 0x86, + 0xB8, 0xD2, 0x08, 0xFD, 0xEB, 0x27, 0x4A, 0xC1, + 0xF8, 0x29, 0x65, 0x9D, 0xC2, 0xBE, 0x4A, 0xC4, + 0xF3, 0x06, 0xCB, 0x55, 0x84, 0xBA, 0xD1, 0x93, + 0x6A, 0x92, 0xC9, 0xB7, 0x68, 0x19, 0x23, 0x42, + 0x81, 0xBB, 0x39, 0x58, 0x41, 0xC2, 0x57, 0x56, + 0x08, 0x6E, 0xA5, 0x64, 0xCA, 0x3E, 0x22, 0x7E, + 0x3D, 0x9F, 0x10, 0x52, 0xC0, 0x76, 0x6D, 0x2E, + 0xB7, 0x9A, 0x47, 0xC1, 0x50, 0x72, 0x1E, 0x0D, + 0xEA, 0x7C, 0x00, 0x69, 0xD5, 0x51, 0xB2, 0x64, + 0x80, 0x1B, 0x77, 0x27, 0xEC, 0xAF, 0x82, 0xEE, + 0xCB, 0x99, 0xA8, 0x76, 0xFD, 0xA0, 0x90, 0xBF, + 0x6C, 0x3F, 0xC6, 0xB1, 0x09, 0xF1, 0x70, 0x14, + 0x85, 0xF0, 0x3C, 0xE6, 0x62, 0x74, 0xB8, 0x43, + 0x5B, 0x0A, 0x01, 0x4C, 0xFB, 0x3E, 0x79, 0xCC, + 0xED, 0x67, 0x05, 0x7B, 0x5A, 0xE2, 0xAD, 0x7F, + 0x52, 0x79, 0xEB, 0x71, 0x49, 0x42, 0xE4, 0xC1, + 0xCC, 0xFF, 0x7E, 0x85, 0xC0, 0xDB, 0x43, 0xE5, + 0xD4, 0x12, 0x89, 0x20, 0x73, 0x63, 0xB4, 0x44, + 0xBB, 0x51, 0xBB, 0x8A, 0xB0, 0x37, 0x1E, 0x70, + 0xCB, 0xD5, 0x5F, 0x0F, 0x3D, 0xAD, 0x40, 0x3E, + 0x10, 0x51, 0x76, 0xE3, 0xE8, 0xA2, 0x25, 0xD8, + 0x4A, 0xC8, 0xBE, 0xE3, 0x8C, 0x82, 0x1E, 0xE0, + 0xF5, 0x47, 0x43, 0x11, 0x45, 0xDC, 0xB3, 0x13, + 0x92, 0x86, 0xAB, 0xB1, 0x17, 0x94, 0xA4, 0x3A, + 0x3C, 0x1B, 0x52, 0x29, 0xE4, 0xBC, 0xFE, 0x95, + 0x9C, 0x78, 0xAD, 0xAE, 0xE2, 0xD5, 0xF2, 0x49, + 0x7B, 0x5D, 0x24, 0xBC, 0x21, 0xFA, 0x03, 0xA9, + 0xA5, 0x8C, 0x24, 0x55, 0x37, 0x3E, 0xC8, 0x95, + 0x83, 0xE7, 0xE5, 0x88, 0xD7, 0xFE, 0x67, 0x99, + 0x1E, 0xE9, 0x37, 0x83, 0xED, 0x4A, 0x6F, 0x9E, + 0xEA, 0xE0, 0x4E, 0x64, 0xE2, 0xE1, 0xE0, 0xE6, + 0x99, 0xF6, 0xDC, 0x9C, 0x5D, 0x39, 0xEF, 0x92, + 0x78, 0xC9, 0x85, 0xE7, 0xFD, 0xF2, 0xA7, 0x64, + 0xFF, 0xD1, 0xA0, 0xB9, 0x57, 0x92, 0xAD, 0x68, + 0x1E, 0x93, 0x0D, 0x76, 0xDF, 0x4E, 0xFE, 0x5D, + 0x65, 0xDB, 0xBD, 0x0F, 0x14, 0x38, 0x48, 0x1E, + 0xD8, 0x33, 0xAD, 0x49, 0x46, 0xAD, 0x1C, 0x69, + 0xAD, 0x21, 0xDD, 0x7C, 0x86, 0x18, 0x57, 0x74, + 0x42, 0x6F, 0x3F, 0xCF, 0x53, 0xB5, 0x2A, 0xD4, + 0xB4, 0x0D, 0x22, 0x8C, 0xE1, 0x24, 0x07, 0x2F, + 0x59, 0x2C, 0x7D, 0xAA, 0x05, 0x7F, 0x17, 0xD7, + 0x90, 0xA5, 0xBD, 0x5B, 0x93, 0x83, 0x4D, 0x58, + 0xC0, 0x8C, 0x88, 0xDC, 0x8F, 0x0E, 0xF4, 0x88, + 0x15, 0x64, 0x25, 0xB7, 0x44, 0x65, 0x4E, 0xAC, + 0xA9, 0xD6, 0x48, 0x58, 0xA4, 0xD6, 0xCE, 0xB4, + 0x78, 0x79, 0x51, 0x94, 0xBF, 0xAD, 0xB1, 0x8D, + 0xC0, 0xEA, 0x05, 0x4F, 0x97, 0x71, 0x21, 0x5A, + 0xD3, 0xCB, 0x1F, 0xD0, 0x31, 0xD7, 0xBE, 0x45, + 0x98, 0x62, 0x19, 0x26, 0x47, 0x8D, 0x37, 0x5A, + 0x18, 0x45, 0xAA, 0x91, 0xD7, 0xC7, 0x33, 0xF8, + 0xF0, 0xE1, 0x88, 0xC8, 0x38, 0x96, 0xED, 0xF8, + 0x3B, 0x86, 0x46, 0xC9, 0x9E, 0x29, 0xC0, 0xDA, + 0x22, 0x90, 0xE7, 0x1C, 0x3D, 0x2E, 0x97, 0x07, + 0x20, 0xC9, 0x7B, 0x5B, 0x7F, 0x95, 0x04, 0x86, + 0x03, 0x3C, 0x6A, 0x25, 0x71, 0xDD, 0xF2, 0xBC, + 0xCD, 0xAB, 0xB2, 0xDF, 0xA5, 0xFC, 0xE4, 0xC3, + 0xA1, 0x88, 0x46, 0x06, 0x04, 0x1D, 0x18, 0x1C, + 0x72, 0x87, 0x94, 0xAE, 0x0E, 0x80, 0x6E, 0xCB, + 0x49, 0xAF, 0x16, 0x75, 0x6A, 0x4C, 0xE7, 0x3C, + 0x87, 0xBD, 0x42, 0x34, 0xE6, 0x0F, 0x05, 0x53, + 0x5F, 0xA5, 0x92, 0x9F, 0xD5, 0xA3, 0x44, 0x73, + 0x26, 0x64, 0x01, 0xF6, 0x3B, 0xBD, 0x6B, 0x90, + 0xE0, 0x03, 0x47, 0x2A, 0xC0, 0xCE, 0x88, 0xF1, + 0xB6, 0x66, 0x59, 0x72, 0x79, 0xD0, 0x56, 0xA6, + 0x32, 0xC8, 0xD6, 0xB7, 0x90, 0xFD, 0x41, 0x17, + 0x67, 0x84, 0x8A, 0x69, 0xE3, 0x7A, 0x8A, 0x83, + 0x9B, 0xC7, 0x66, 0xA0, 0x2C, 0xA2, 0xF6, 0x95, + 0xEC, 0x63, 0xF0, 0x56, 0xA4, 0xE2, 0xA1, 0x14, + 0xCA, 0xCF, 0x9F, 0xD9, 0x0D, 0x73, 0x0C, 0x97, + 0x0D, 0xB3, 0x87, 0xF6, 0xDE, 0x73, 0x39, 0x5F, + 0x70, 0x1A, 0x1D, 0x95, 0x3B, 0x2A, 0x89, 0xDD, + 0x7E, 0xDA, 0xD4, 0x39, 0xFC, 0x20, 0x5A, 0x54, + 0xA4, 0x81, 0xE8, 0x89, 0xB0, 0x98, 0xD5, 0x25, + 0x56, 0x70, 0xF0, 0x26, 0xB4, 0xA2, 0xBF, 0x02, + 0xD2, 0xBD, 0xDE, 0x87, 0xC7, 0x66, 0xB2, 0x5F, + 0xC5, 0xE0, 0xFD, 0x45, 0x37, 0x57, 0xE7, 0x56, + 0xD1, 0x8C, 0x8C, 0xD9, 0x12, 0xF9, 0xA7, 0x7F, + 0x8E, 0x6B, 0xF0, 0x20, 0x53, 0x74, 0xB4, 0x62 }; static const byte k_512[KYBER_SS_SZ] = { - 0x4D, 0xDD, 0x30, 0x4E, 0x27, 0x48, 0x99, 0xBD, - 0x82, 0x97, 0x18, 0x56, 0x82, 0x4B, 0x58, 0x71, - 0x30, 0x92, 0x79, 0x52, 0x06, 0x01, 0x21, 0x85, - 0x8F, 0x9A, 0xDE, 0xB9, 0x6A, 0xB7, 0xF5, 0x71 + 0x0B, 0xF3, 0x23, 0x33, 0x8D, 0x6F, 0x0A, 0x21, + 0xD5, 0x51, 0x4B, 0x67, 0x3C, 0xD1, 0x0B, 0x71, + 0x4C, 0xE6, 0xE3, 0x6F, 0x35, 0xBC, 0xD1, 0xBF, + 0x54, 0x41, 0x96, 0x36, 0x8E, 0xE5, 0x1A, 0x13 }; #endif #ifndef WOLFSSL_NO_KYBER768 static const byte ek_768[KYBER768_PUBLIC_KEY_SIZE] = { - 0x14, 0x56, 0xA2, 0xEE, 0x8C, 0x35, 0x56, 0x05, - 0x4A, 0xBC, 0x79, 0xB4, 0x88, 0x2C, 0x31, 0x90, - 0xE5, 0xCA, 0x72, 0x6A, 0xB4, 0x02, 0xE5, 0xB0, - 0x97, 0x28, 0xC0, 0xF4, 0xF7, 0x9C, 0x9F, 0xC2, - 0xAD, 0xD8, 0x28, 0xAB, 0xE4, 0x32, 0xB1, 0x50, - 0x1B, 0x60, 0xF4, 0x6C, 0xCB, 0xC8, 0x6A, 0x33, - 0x78, 0xC3, 0x48, 0x95, 0x70, 0x8A, 0x13, 0x67, - 0x1B, 0x20, 0xB3, 0x89, 0x47, 0x9A, 0xAA, 0x01, - 0xC6, 0x9D, 0x6B, 0x3B, 0x7D, 0x07, 0xD1, 0xC3, - 0xAB, 0x54, 0xB9, 0x1C, 0x58, 0x0F, 0x5A, 0x33, - 0x6B, 0x30, 0x06, 0x9A, 0x4F, 0x13, 0x4F, 0xFD, - 0x37, 0x64, 0xCE, 0x73, 0xA0, 0x47, 0xE2, 0x84, - 0x47, 0x71, 0x74, 0x2B, 0xF4, 0x71, 0x0B, 0x97, - 0x2D, 0x4F, 0x65, 0x90, 0xA1, 0xC5, 0x3A, 0x97, - 0x53, 0x68, 0xC2, 0x71, 0xB6, 0x70, 0xF1, 0xA4, - 0x03, 0x64, 0x41, 0x05, 0x4A, 0x66, 0xE8, 0x81, - 0x59, 0x97, 0x51, 0x22, 0x88, 0x55, 0x2F, 0xD7, - 0x14, 0x9F, 0xFB, 0x70, 0x5A, 0xAE, 0x13, 0x3F, - 0x84, 0x14, 0x06, 0x0D, 0x00, 0x92, 0xFA, 0x8A, - 0x16, 0x27, 0xD7, 0x8A, 0xB2, 0xAB, 0xC6, 0x69, - 0x62, 0x88, 0xBA, 0xF5, 0xC6, 0x0E, 0xF3, 0x70, - 0x82, 0x7A, 0x7E, 0xFA, 0x72, 0xAE, 0x5C, 0x67, - 0x41, 0xA5, 0xDA, 0x04, 0x3D, 0x59, 0x40, 0xF1, - 0x21, 0x48, 0x53, 0x72, 0xA9, 0x8F, 0x47, 0x2D, - 0x60, 0xF0, 0x5F, 0x74, 0xD9, 0x5F, 0x01, 0xA1, - 0x99, 0x1E, 0x73, 0xA3, 0xE0, 0xA9, 0x53, 0x64, - 0x67, 0xA4, 0x73, 0x8A, 0xB4, 0xCF, 0x38, 0x5B, - 0xA7, 0x72, 0x82, 0x7E, 0xB8, 0xCC, 0x05, 0x8B, - 0x35, 0x72, 0xE4, 0x0B, 0x59, 0x84, 0x44, 0xC1, - 0x81, 0xC7, 0xF6, 0xD9, 0xB7, 0x60, 0xA7, 0xB9, - 0x07, 0x09, 0x2E, 0x9C, 0x33, 0x51, 0xEA, 0x23, - 0x4E, 0x44, 0x49, 0xBD, 0x9B, 0x61, 0xA1, 0x34, - 0x65, 0x4E, 0x2D, 0xA1, 0x91, 0xFF, 0x07, 0x93, - 0x96, 0x15, 0x69, 0xD3, 0x59, 0x44, 0x48, 0xBB, - 0xC2, 0x58, 0x69, 0x99, 0xA6, 0x67, 0x1E, 0xFC, - 0xA9, 0x57, 0xF3, 0xA6, 0x69, 0x9A, 0x4A, 0x1B, - 0x2F, 0x47, 0x07, 0xAB, 0xA0, 0xB2, 0xDB, 0x20, - 0x11, 0x4F, 0xE6, 0x8A, 0x4E, 0x28, 0x15, 0xAF, - 0x3A, 0xAC, 0x4B, 0x8C, 0x6B, 0xE5, 0x64, 0x8C, - 0x50, 0xCC, 0x35, 0xC2, 0x7C, 0x57, 0x28, 0x80, - 0x28, 0xD3, 0x61, 0x70, 0x8D, 0x30, 0x2E, 0xEB, - 0xB8, 0x60, 0xBE, 0xE6, 0x91, 0xF6, 0x56, 0xA2, - 0x55, 0x0C, 0xB3, 0x21, 0xE9, 0x29, 0x3D, 0x75, - 0x16, 0xC5, 0x99, 0x81, 0x7B, 0x76, 0x6B, 0xA9, - 0x28, 0xB1, 0x08, 0x77, 0x9A, 0x1C, 0x87, 0x12, - 0xE7, 0x4C, 0x76, 0x84, 0x1A, 0xC5, 0x8B, 0x8C, - 0x51, 0x5B, 0xF4, 0x74, 0x9B, 0xF7, 0x15, 0x98, - 0x44, 0x45, 0xB2, 0xB5, 0x30, 0x63, 0x38, 0x40, - 0x01, 0xE5, 0x5F, 0x68, 0x86, 0x7B, 0x1A, 0xF4, - 0x6C, 0xA7, 0x0C, 0xA8, 0xEA, 0x74, 0x17, 0x2D, - 0xB8, 0x0B, 0x52, 0x18, 0xBD, 0xE4, 0xF0, 0x0A, - 0x0E, 0x65, 0x8D, 0xB5, 0xA1, 0x8D, 0x94, 0xE1, - 0x42, 0x7A, 0xF7, 0xAE, 0x35, 0x8C, 0xCE, 0xB2, - 0x38, 0x77, 0x2F, 0xCC, 0x83, 0xF1, 0x08, 0x28, - 0xA4, 0xA3, 0x67, 0xD4, 0x2C, 0x4C, 0xB6, 0x93, - 0x3F, 0xDD, 0x1C, 0x1C, 0x7B, 0x86, 0xAD, 0x8B, - 0x00, 0x96, 0x57, 0xA9, 0x62, 0x22, 0xD7, 0xBA, - 0x92, 0xF5, 0x27, 0xAF, 0x87, 0x79, 0x70, 0xA8, - 0x32, 0x47, 0xF4, 0x7A, 0x23, 0xFC, 0x22, 0x85, - 0x11, 0x8B, 0x57, 0x71, 0x77, 0x15, 0x20, 0x46, - 0x74, 0xDA, 0x9C, 0x94, 0xB6, 0x2B, 0xC7, 0x83, - 0x8C, 0xF8, 0x72, 0x00, 0x15, 0x6B, 0x26, 0xBA, - 0x46, 0x71, 0x15, 0x99, 0x31, 0xC4, 0x93, 0x22, - 0xD8, 0x06, 0x71, 0xA0, 0xF3, 0x32, 0xEA, 0xA2, - 0xBB, 0xF8, 0x93, 0xBE, 0x40, 0x8B, 0x9E, 0xAC, - 0x6A, 0x50, 0x54, 0x83, 0xAA, 0x90, 0x75, 0xBD, - 0x13, 0x68, 0xB5, 0x1F, 0x99, 0x21, 0x1F, 0x48, - 0x0A, 0x9C, 0x54, 0x2A, 0x75, 0xB5, 0xBE, 0x08, - 0xE4, 0x3A, 0xDA, 0xF3, 0x01, 0xDD, 0x72, 0x9A, - 0x85, 0x95, 0x40, 0x10, 0xE6, 0x48, 0x92, 0xA2, - 0xAA, 0x4F, 0x15, 0xC0, 0xBD, 0x70, 0xB3, 0xD8, - 0x56, 0x49, 0x4F, 0xF9, 0xBA, 0x0F, 0xE4, 0xCE, - 0x12, 0x99, 0x1C, 0xA0, 0x6B, 0x5E, 0x3D, 0x0B, - 0x2A, 0xF1, 0xF7, 0x97, 0xB7, 0xA2, 0xB7, 0x60, - 0x91, 0x0A, 0xE9, 0xF8, 0x33, 0xD0, 0xD4, 0x26, - 0x7A, 0x58, 0x05, 0x2C, 0x29, 0x90, 0xF1, 0x61, - 0xB8, 0x86, 0xE2, 0x51, 0x71, 0x1C, 0x09, 0xD0, - 0x85, 0xC3, 0xD9, 0x58, 0xB1, 0x44, 0x19, 0x2C, - 0x9C, 0xC3, 0x22, 0x4A, 0x46, 0x07, 0x15, 0xB6, - 0x78, 0x4E, 0xB0, 0xB2, 0x6F, 0x23, 0x71, 0x87, - 0x50, 0x7D, 0x85, 0xC5, 0x11, 0x0A, 0xCC, 0x71, - 0xCE, 0x47, 0x19, 0x8F, 0x25, 0x45, 0x53, 0x35, - 0x6D, 0xAB, 0x44, 0x8C, 0x38, 0xD2, 0x43, 0xA7, - 0xC0, 0x2B, 0xE4, 0x0C, 0x90, 0x8C, 0x82, 0x8D, - 0x05, 0xC0, 0x81, 0xDF, 0xAB, 0x8F, 0xC6, 0xB5, - 0xCF, 0xE7, 0xD5, 0x6E, 0x73, 0x17, 0x15, 0x7D, - 0xC0, 0x53, 0xB2, 0xB3, 0x48, 0x99, 0x86, 0xB0, - 0x81, 0x28, 0x88, 0x71, 0x81, 0x85, 0x85, 0xE0, - 0x99, 0x31, 0x09, 0x5E, 0x32, 0x74, 0xA0, 0x84, - 0x11, 0x5B, 0xE2, 0x76, 0x43, 0x82, 0x54, 0xA7, - 0x96, 0x27, 0x0A, 0x7B, 0x43, 0x06, 0xF0, 0x8B, - 0x98, 0xD9, 0xC2, 0xAA, 0xEC, 0xF7, 0x06, 0x5E, - 0x74, 0x44, 0x6B, 0x7C, 0x69, 0x6D, 0xBA, 0xAF, - 0x8B, 0x46, 0x25, 0xA1, 0x0B, 0x07, 0x82, 0x7B, - 0x4A, 0x8B, 0xAB, 0xAB, 0x09, 0xB6, 0x4A, 0xE1, - 0xC3, 0x75, 0xBB, 0x78, 0x54, 0x41, 0xF3, 0x19, - 0xFB, 0x9A, 0xC2, 0xF1, 0x4C, 0x95, 0xFF, 0xB2, - 0x52, 0xAB, 0xBB, 0x80, 0x9C, 0x69, 0x09, 0xCD, - 0x97, 0x70, 0x6E, 0x40, 0x69, 0x1C, 0xBA, 0x61, - 0xC9, 0x25, 0x2B, 0xD3, 0x8A, 0x04, 0x31, 0x1C, - 0xA5, 0xBB, 0x2C, 0xA7, 0x95, 0x78, 0x34, 0x75, - 0x05, 0xD0, 0x88, 0x88, 0x51, 0xE0, 0x82, 0x64, - 0x8B, 0xD0, 0x03, 0xBE, 0x97, 0xC0, 0xF8, 0xF6, - 0x67, 0x59, 0xEC, 0x96, 0xA9, 0x6A, 0x08, 0x1C, - 0x68, 0x22, 0xC4, 0x51, 0x05, 0x59, 0x53, 0x70, - 0x42, 0xFC, 0x15, 0xF0, 0x69, 0xA6, 0x49, 0xB7, - 0x4A, 0x10, 0x96, 0x1B, 0x35, 0x4A, 0x1F, 0x62, - 0x5B, 0x04, 0xE2, 0x5B, 0x29, 0x3C, 0xF6, 0x5F, - 0xB4, 0xF5, 0x3A, 0x80, 0xCC, 0x73, 0x3D, 0x7A, - 0x17, 0x57, 0x75, 0xBF, 0x8A, 0x9A, 0xBB, 0x92, - 0x01, 0x62, 0x0E, 0x83, 0xA7, 0xF3, 0xE7, 0x24, - 0xD1, 0x28, 0x7D, 0xBC, 0x44, 0xBD, 0xD5, 0xD8, - 0x5F, 0xC7, 0x15, 0x45, 0xA9, 0x27, 0xBE, 0xED, - 0xE5, 0x37, 0xA7, 0x76, 0x87, 0x35, 0xCC, 0x14, - 0x86, 0xC7, 0xC3, 0xF3, 0x11, 0x04, 0xDB, 0x67, - 0x34, 0x3F, 0x43, 0x5D, 0x2D, 0x45, 0x55, 0x4B, - 0xAA, 0xC9, 0xCD, 0xB5, 0x82, 0x2E, 0x84, 0x22, - 0xAE, 0x83, 0x21, 0xC7, 0x8A, 0xBE, 0x9F, 0x26, - 0x1F, 0xD4, 0x81, 0x0A, 0x79, 0xE3, 0x3E, 0x94, - 0xE6, 0x3B, 0x33, 0x41, 0x87, 0x2C, 0x92, 0x25, - 0x35, 0x21, 0x99, 0x7C, 0x08, 0x4F, 0xBC, 0x06, - 0x0B, 0x8B, 0x12, 0x5C, 0xCC, 0x88, 0xAC, 0x85, - 0xAC, 0x5F, 0xE3, 0x16, 0x8A, 0xCB, 0x05, 0x9B, - 0x3F, 0x11, 0x9C, 0x4E, 0x05, 0x0A, 0x20, 0x73, - 0x2F, 0x50, 0x1B, 0xB9, 0xB3, 0xE6, 0x87, 0xC8, - 0x46, 0xB5, 0xC2, 0x65, 0x3F, 0x88, 0x86, 0x37, - 0x3E, 0x10, 0x04, 0xA2, 0xAB, 0x8D, 0x1B, 0xB9, - 0x70, 0xA7, 0xE5, 0x71, 0xD8, 0xA4, 0x6E, 0xE8, - 0x1B, 0x78, 0x2F, 0x26, 0x94, 0x2D, 0xD3, 0x94, - 0xFD, 0xD9, 0xA5, 0xE4, 0xC5, 0x63, 0x1D, 0x98, - 0x55, 0x28, 0x60, 0x4B, 0x1C, 0xC9, 0x76, 0x27, - 0x5B, 0x6A, 0xC8, 0xA6, 0x7C, 0xEE, 0xC1, 0x0F, - 0xFA, 0xCB, 0xBA, 0x3D, 0x3B, 0xB1, 0x41, 0x32, - 0x1D, 0xFC, 0x3C, 0x92, 0x31, 0xFC, 0x96, 0xE4, - 0x48, 0xB9, 0xAB, 0x84, 0x70, 0x21, 0xE2, 0xC8, - 0xD9, 0x0C, 0x6B, 0xCA, 0xF2, 0xB1, 0x24, 0x07, - 0x83, 0xB6, 0x2C, 0x79, 0xDE, 0xDC, 0x07, 0x2A, - 0x57, 0x63, 0xE6, 0x60, 0xAF, 0x2C, 0x27, 0xC3, - 0xF0, 0xC3, 0xC0, 0x92, 0x07, 0xCA, 0xD9, 0x90, - 0xBB, 0x41, 0xA7, 0xBF, 0xCE, 0xC9, 0x9F, 0x51, - 0x59, 0x6A, 0x0E, 0x83, 0x77, 0x8F, 0x85, 0xC0, - 0x06, 0xAC, 0x6D, 0x1F, 0xE9, 0x81, 0xB4, 0xC4, - 0xBA, 0x1C, 0xB5, 0x75, 0xA7, 0xD0, 0x7A, 0xE2, - 0xD3, 0x1B, 0xA7, 0x60, 0x09, 0x5F, 0x74, 0xBC, - 0x16, 0x38, 0x41, 0xCF, 0x8F, 0xF7, 0x7F, 0x89, - 0x4A, 0xBC, 0x6D, 0x26, 0x1E, 0xD8, 0x7A, 0x45, - 0x30, 0x36, 0x3B, 0x94, 0x9C, 0x4A, 0xD2, 0x4E, - 0xFB, 0x3A, 0x56, 0x80, 0x94, 0x78, 0xDD, 0xA2 + 0x89, 0xD2, 0xCB, 0x65, 0xF9, 0x4D, 0xCB, 0xFC, + 0x89, 0x0E, 0xFC, 0x7D, 0x0E, 0x5A, 0x7A, 0x38, + 0x34, 0x4D, 0x16, 0x41, 0xA3, 0xD0, 0xB0, 0x24, + 0xD5, 0x07, 0x97, 0xA5, 0xF2, 0x3C, 0x3A, 0x18, + 0xB3, 0x10, 0x1A, 0x12, 0x69, 0x06, 0x9F, 0x43, + 0xA8, 0x42, 0xBA, 0xCC, 0x09, 0x8A, 0x88, 0x21, + 0x27, 0x1C, 0x67, 0x3D, 0xB1, 0xBE, 0xB3, 0x30, + 0x34, 0xE4, 0xD7, 0x77, 0x4D, 0x16, 0x63, 0x5C, + 0x7C, 0x2C, 0x3C, 0x27, 0x63, 0x45, 0x35, 0x38, + 0xBC, 0x16, 0x32, 0xE1, 0x85, 0x15, 0x91, 0xA5, + 0x16, 0x42, 0x97, 0x4E, 0x59, 0x28, 0xAB, 0xB8, + 0xE5, 0x5F, 0xE5, 0x56, 0x12, 0xF9, 0xB1, 0x41, + 0xAF, 0xF0, 0x15, 0x54, 0x53, 0x94, 0xB2, 0x09, + 0x2E, 0x59, 0x09, 0x70, 0xEC, 0x29, 0xA7, 0xB7, + 0xE7, 0xAA, 0x1F, 0xB4, 0x49, 0x3B, 0xF7, 0xCB, + 0x73, 0x19, 0x06, 0xC2, 0xA5, 0xCB, 0x49, 0xE6, + 0x61, 0x48, 0x59, 0x06, 0x4E, 0x19, 0xB8, 0xFA, + 0x26, 0xAF, 0x51, 0xC4, 0x4B, 0x5E, 0x75, 0x35, + 0xBF, 0xDA, 0xC0, 0x72, 0xB6, 0x46, 0xD3, 0xEA, + 0x49, 0x0D, 0x27, 0x7F, 0x0D, 0x97, 0xCE, 0xD4, + 0x73, 0x95, 0xFE, 0xD9, 0x1E, 0x8F, 0x2B, 0xCE, + 0x0E, 0x3C, 0xA1, 0x22, 0xC2, 0x02, 0x5F, 0x74, + 0x06, 0x7A, 0xB9, 0x28, 0xA8, 0x22, 0xB3, 0x56, + 0x53, 0xA7, 0x4F, 0x06, 0x75, 0x76, 0x29, 0xAF, + 0xB1, 0xA1, 0xCA, 0xF2, 0x37, 0x10, 0x0E, 0xA9, + 0x35, 0xE7, 0x93, 0xC8, 0xF5, 0x8A, 0x71, 0xB3, + 0xD6, 0xAE, 0x2C, 0x86, 0x58, 0xB1, 0x01, 0x50, + 0xD4, 0xA3, 0x8F, 0x57, 0x2A, 0x0D, 0x49, 0xD2, + 0x8A, 0xE8, 0x94, 0x51, 0xD3, 0x38, 0x32, 0x6F, + 0xDB, 0x3B, 0x43, 0x50, 0x03, 0x6C, 0x10, 0x81, + 0x11, 0x77, 0x40, 0xED, 0xB8, 0x6B, 0x12, 0x08, + 0x1C, 0x5C, 0x12, 0x23, 0xDB, 0xB5, 0x66, 0x0D, + 0x5B, 0x3C, 0xB3, 0x78, 0x7D, 0x48, 0x18, 0x49, + 0x30, 0x4C, 0x68, 0xBE, 0x87, 0x54, 0x66, 0xF1, + 0x4E, 0xE5, 0x49, 0x5C, 0x2B, 0xD7, 0x95, 0xAE, + 0x41, 0x2D, 0x09, 0x00, 0x2D, 0x65, 0xB8, 0x71, + 0x9B, 0x90, 0xCB, 0xA3, 0x60, 0x3A, 0xC4, 0x95, + 0x8E, 0xA0, 0x3C, 0xC1, 0x38, 0xC8, 0x6F, 0x78, + 0x51, 0x59, 0x31, 0x25, 0x33, 0x47, 0x01, 0xB6, + 0x77, 0xF8, 0x2F, 0x49, 0x52, 0xA4, 0xC9, 0x3B, + 0x5B, 0x4C, 0x13, 0x4B, 0xB4, 0x2A, 0x85, 0x7F, + 0xD1, 0x5C, 0x65, 0x08, 0x64, 0xA6, 0xAA, 0x94, + 0xEB, 0x69, 0x1C, 0x0B, 0x69, 0x1B, 0xE4, 0x68, + 0x4C, 0x1F, 0x5B, 0x74, 0x90, 0x46, 0x7F, 0xC0, + 0x1B, 0x1D, 0x1F, 0xDA, 0x4D, 0xDA, 0x35, 0xC4, + 0xEC, 0xC2, 0x31, 0xBC, 0x73, 0xA6, 0xFE, 0xF4, + 0x2C, 0x99, 0xD3, 0x4E, 0xB8, 0x2A, 0x4D, 0x01, + 0x49, 0x87, 0xB3, 0xE3, 0x86, 0x91, 0x0C, 0x62, + 0x67, 0x9A, 0x11, 0x8F, 0x3C, 0x5B, 0xD9, 0xF4, + 0x67, 0xE4, 0x16, 0x20, 0x42, 0x42, 0x43, 0x57, + 0xDB, 0x92, 0xEF, 0x48, 0x4A, 0x4A, 0x17, 0x98, + 0xC1, 0x25, 0x7E, 0x87, 0x0A, 0x30, 0xCB, 0x20, + 0xAA, 0xA0, 0x33, 0x5D, 0x83, 0x31, 0x4F, 0xE0, + 0xAA, 0x7E, 0x63, 0xA8, 0x62, 0x64, 0x80, 0x41, + 0xA7, 0x2A, 0x63, 0x21, 0x52, 0x32, 0x20, 0xB1, + 0xAC, 0xE9, 0xBB, 0x70, 0x1B, 0x21, 0xAC, 0x12, + 0x53, 0xCB, 0x81, 0x2C, 0x15, 0x57, 0x5A, 0x90, + 0x85, 0xEA, 0xBE, 0xAD, 0xE7, 0x3A, 0x4A, 0xE7, + 0x6E, 0x6A, 0x7B, 0x15, 0x8A, 0x20, 0x58, 0x6D, + 0x78, 0xA5, 0xAC, 0x62, 0x0A, 0x5C, 0x9A, 0xBC, + 0xC9, 0xC0, 0x43, 0x35, 0x0A, 0x73, 0x65, 0x6B, + 0x0A, 0xBE, 0x82, 0x2D, 0xA5, 0xE0, 0xBA, 0x76, + 0x04, 0x5F, 0xAD, 0x75, 0x40, 0x1D, 0x7A, 0x3B, + 0x70, 0x37, 0x91, 0xB7, 0xE9, 0x92, 0x61, 0x71, + 0x0F, 0x86, 0xB7, 0x24, 0x21, 0xD2, 0x40, 0xA3, + 0x47, 0x63, 0x83, 0x77, 0x20, 0x5A, 0x15, 0x2C, + 0x79, 0x41, 0x30, 0xA4, 0xE0, 0x47, 0x74, 0x2B, + 0x88, 0x83, 0x03, 0xBD, 0xDC, 0x30, 0x91, 0x16, + 0x76, 0x4D, 0xE7, 0x42, 0x4C, 0xEB, 0xEA, 0x6D, + 0xB6, 0x53, 0x48, 0xAC, 0x53, 0x7E, 0x01, 0xA9, + 0xCC, 0x56, 0xEA, 0x66, 0x7D, 0x5A, 0xA8, 0x7A, + 0xC9, 0xAA, 0xA4, 0x31, 0x7D, 0x26, 0x2C, 0x10, + 0x14, 0x30, 0x50, 0xB8, 0xD0, 0x7A, 0x72, 0x8C, + 0xA6, 0x33, 0xC1, 0x3E, 0x46, 0x8A, 0xBC, 0xEA, + 0xD3, 0x72, 0xC7, 0x7B, 0x8E, 0xCF, 0x3B, 0x98, + 0x6B, 0x98, 0xC1, 0xE5, 0x58, 0x60, 0xB2, 0xB4, + 0x21, 0x67, 0x66, 0xAD, 0x87, 0x4C, 0x35, 0xED, + 0x72, 0x05, 0x06, 0x87, 0x39, 0x23, 0x02, 0x20, + 0xB5, 0xA2, 0x31, 0x7D, 0x10, 0x2C, 0x59, 0x83, + 0x56, 0xF1, 0x68, 0xAC, 0xBE, 0x80, 0x60, 0x8D, + 0xE4, 0xC9, 0xA7, 0x10, 0xB8, 0xDD, 0x07, 0x07, + 0x8C, 0xD7, 0xC6, 0x71, 0x05, 0x8A, 0xF1, 0xB0, + 0xB8, 0x30, 0x4A, 0x31, 0x4F, 0x7B, 0x29, 0xBE, + 0x78, 0xA9, 0x33, 0xC7, 0xB9, 0x29, 0x44, 0x24, + 0x95, 0x4A, 0x1B, 0xF8, 0xBC, 0x74, 0x5D, 0xE8, + 0x61, 0x98, 0x65, 0x9E, 0x0E, 0x12, 0x25, 0xA9, + 0x10, 0x72, 0x60, 0x74, 0x96, 0x9C, 0x39, 0xA9, + 0x7C, 0x19, 0x24, 0x06, 0x01, 0xA4, 0x6E, 0x01, + 0x3D, 0xCD, 0xCB, 0x67, 0x7A, 0x8C, 0xBD, 0x2C, + 0x95, 0xA4, 0x06, 0x29, 0xC2, 0x56, 0xF2, 0x4A, + 0x32, 0x89, 0x51, 0xDF, 0x57, 0x50, 0x2A, 0xB3, + 0x07, 0x72, 0xCC, 0x7E, 0x5B, 0x85, 0x00, 0x27, + 0xC8, 0x55, 0x17, 0x81, 0xCE, 0x49, 0x85, 0xBD, + 0xAC, 0xF6, 0xB8, 0x65, 0xC1, 0x04, 0xE8, 0xA4, + 0xBC, 0x65, 0xC4, 0x16, 0x94, 0xD4, 0x56, 0xB7, + 0x16, 0x9E, 0x45, 0xAB, 0x3D, 0x7A, 0xCA, 0xBE, + 0xAF, 0xE2, 0x3A, 0xD6, 0xA7, 0xB9, 0x4D, 0x19, + 0x79, 0xA2, 0xF4, 0xC1, 0xCA, 0xE7, 0xCD, 0x77, + 0xD6, 0x81, 0xD2, 0x90, 0xB5, 0xD8, 0xE4, 0x51, + 0xBF, 0xDC, 0xCC, 0xF5, 0x31, 0x0B, 0x9D, 0x12, + 0xA8, 0x8E, 0xC2, 0x9B, 0x10, 0x25, 0x5D, 0x5E, + 0x17, 0xA1, 0x92, 0x67, 0x0A, 0xA9, 0x73, 0x1C, + 0x5C, 0xA6, 0x7E, 0xC7, 0x84, 0xC5, 0x02, 0x78, + 0x1B, 0xE8, 0x52, 0x7D, 0x6F, 0xC0, 0x03, 0xC6, + 0x70, 0x1B, 0x36, 0x32, 0x28, 0x4B, 0x40, 0x30, + 0x7A, 0x52, 0x7C, 0x76, 0x20, 0x37, 0x7F, 0xEB, + 0x0B, 0x73, 0xF7, 0x22, 0xC9, 0xE3, 0xCD, 0x4D, + 0xEC, 0x64, 0x87, 0x6B, 0x93, 0xAB, 0x5B, 0x7C, + 0xFC, 0x4A, 0x65, 0x7F, 0x85, 0x2B, 0x65, 0x92, + 0x82, 0x86, 0x43, 0x84, 0xF4, 0x42, 0xB2, 0x2E, + 0x8A, 0x21, 0x10, 0x93, 0x87, 0xB8, 0xB4, 0x75, + 0x85, 0xFC, 0x68, 0x0D, 0x0B, 0xA4, 0x5C, 0x7A, + 0x8B, 0x1D, 0x72, 0x74, 0xBD, 0xA5, 0x78, 0x45, + 0xD1, 0x00, 0xD0, 0xF4, 0x2A, 0x3B, 0x74, 0x62, + 0x87, 0x73, 0x35, 0x1F, 0xD7, 0xAC, 0x30, 0x5B, + 0x24, 0x97, 0x63, 0x9B, 0xE9, 0x0B, 0x3F, 0x4F, + 0x71, 0xA6, 0xAA, 0x35, 0x61, 0xEE, 0xCC, 0x6A, + 0x69, 0x1B, 0xB5, 0xCB, 0x39, 0x14, 0xD8, 0x63, + 0x4C, 0xA1, 0xE1, 0xAF, 0x54, 0x3C, 0x04, 0x9A, + 0x8C, 0x6E, 0x86, 0x8C, 0x51, 0xF0, 0x42, 0x3B, + 0xD2, 0xD5, 0xAE, 0x09, 0xB7, 0x9E, 0x57, 0xC2, + 0x7F, 0x3F, 0xE3, 0xAE, 0x2B, 0x26, 0xA4, 0x41, + 0xBA, 0xBF, 0xC6, 0x71, 0x8C, 0xE8, 0xC0, 0x5B, + 0x4F, 0xE7, 0x93, 0xB9, 0x10, 0xB8, 0xFB, 0xCB, + 0xBE, 0x7F, 0x10, 0x13, 0x24, 0x2B, 0x40, 0xE0, + 0x51, 0x4D, 0x0B, 0xDC, 0x5C, 0x88, 0xBA, 0xC5, + 0x94, 0xC7, 0x94, 0xCE, 0x51, 0x22, 0xFB, 0xF3, + 0x48, 0x96, 0x81, 0x91, 0x47, 0xB9, 0x28, 0x38, + 0x15, 0x87, 0x96, 0x3B, 0x0B, 0x90, 0x03, 0x4A, + 0xA0, 0x7A, 0x10, 0xBE, 0x17, 0x6E, 0x01, 0xC8, + 0x0A, 0xD6, 0xA4, 0xB7, 0x1B, 0x10, 0xAF, 0x42, + 0x41, 0x40, 0x0A, 0x2A, 0x4C, 0xBB, 0xC0, 0x59, + 0x61, 0xA1, 0x5E, 0xC1, 0x47, 0x4E, 0xD5, 0x1A, + 0x3C, 0xC6, 0xD3, 0x58, 0x00, 0x67, 0x9A, 0x46, + 0x28, 0x09, 0xCA, 0xA3, 0xAB, 0x4F, 0x70, 0x94, + 0xCD, 0x66, 0x10, 0xB4, 0xA7, 0x00, 0xCB, 0xA9, + 0x39, 0xE7, 0xEA, 0xC9, 0x3E, 0x38, 0xC9, 0x97, + 0x55, 0x90, 0x87, 0x27, 0x61, 0x9E, 0xD7, 0x6A, + 0x34, 0xE5, 0x3C, 0x4F, 0xA2, 0x5B, 0xFC, 0x97, + 0x00, 0x82, 0x06, 0x69, 0x7D, 0xD1, 0x45, 0xE5, + 0xB9, 0x18, 0x8E, 0x5B, 0x01, 0x4E, 0x94, 0x16, + 0x81, 0xE1, 0x5F, 0xE3, 0xE1, 0x32, 0xB8, 0xA3, + 0x90, 0x34, 0x74, 0x14, 0x8B, 0xA2, 0x8B, 0x98, + 0x71, 0x11, 0xC9, 0xBC, 0xB3, 0x98, 0x9B, 0xBB, + 0xC6, 0x71, 0xC5, 0x81, 0xB4, 0x4A, 0x49, 0x28, + 0x45, 0xF2, 0x88, 0xE6, 0x21, 0x96, 0xE4, 0x71, + 0xFE, 0xD3, 0xC3, 0x9C, 0x1B, 0xBD, 0xDB, 0x08, + 0x37, 0xD0, 0xD4, 0x70, 0x6B, 0x09, 0x22, 0xC4 }; static const byte seed_768[KYBER_ENC_RAND_SZ] = { - 0x40, 0xBE, 0x9D, 0xCA, 0xC1, 0x6E, 0x9C, 0xA7, - 0x3D, 0x49, 0xD0, 0xC8, 0x3F, 0x9D, 0x3D, 0x89, - 0xBB, 0x71, 0x57, 0x4A, 0x42, 0x19, 0xA0, 0xF3, - 0x93, 0xDF, 0xEC, 0xE2, 0x98, 0x83, 0x94, 0xC4 + 0x2C, 0xE7, 0x4A, 0xD2, 0x91, 0x13, 0x35, 0x18, + 0xFE, 0x60, 0xC7, 0xDF, 0x5D, 0x25, 0x1B, 0x9D, + 0x82, 0xAD, 0xD4, 0x84, 0x62, 0xFF, 0x50, 0x5C, + 0x6E, 0x54, 0x7E, 0x94, 0x9E, 0x6B, 0x6B, 0xF7 }; static const byte c_768[KYBER768_CIPHER_TEXT_SIZE] = { - 0x77, 0x8D, 0x6B, 0x03, 0x79, 0x1A, 0xCA, 0xF5, - 0x6C, 0xAA, 0xFC, 0xC7, 0x8C, 0xEE, 0x5C, 0xBC, - 0xA1, 0xDE, 0x87, 0x37, 0xE9, 0xC7, 0xFF, 0x4A, - 0xE5, 0xF3, 0x84, 0xD3, 0x44, 0xE0, 0x82, 0x23, - 0xC7, 0x4C, 0x82, 0x4C, 0xB5, 0x84, 0x85, 0x20, - 0x51, 0x7C, 0x7F, 0x0E, 0xA0, 0x64, 0x5E, 0xB6, - 0xF8, 0x89, 0x51, 0x7A, 0xE5, 0x21, 0x6B, 0x0C, - 0xF4, 0x1D, 0xDC, 0x3F, 0x0D, 0x1D, 0xF9, 0xBC, - 0x6E, 0x4D, 0xEC, 0xB2, 0x36, 0xA5, 0xEA, 0x8B, - 0x21, 0x4F, 0x64, 0x26, 0x6D, 0x3C, 0xDE, 0x08, - 0xE0, 0xCB, 0x00, 0xE5, 0xD9, 0x1F, 0x58, 0x67, - 0x06, 0xB1, 0xEE, 0x53, 0x3D, 0x20, 0x47, 0x6F, - 0x44, 0x23, 0xB7, 0x8F, 0x91, 0x6B, 0x17, 0x26, - 0xEE, 0xEA, 0x95, 0x9F, 0xFB, 0x9A, 0xC6, 0x34, - 0xD0, 0x4A, 0x94, 0xD0, 0x99, 0x23, 0xCB, 0x0D, - 0x4E, 0x73, 0x0C, 0xCA, 0x41, 0x44, 0xE7, 0xC4, - 0x88, 0x49, 0x21, 0x65, 0x2D, 0xA4, 0x92, 0x8C, - 0x68, 0xE6, 0x44, 0xF6, 0x73, 0xCF, 0xC5, 0x7D, - 0x3E, 0x87, 0xCF, 0x5B, 0xE5, 0x81, 0xA8, 0x9F, - 0x9C, 0xB8, 0xF0, 0xFC, 0xE2, 0x78, 0x2D, 0x68, - 0x1E, 0x5C, 0xE8, 0x8A, 0xF5, 0x84, 0x58, 0xC3, - 0xD6, 0x3D, 0x80, 0x75, 0x72, 0xDE, 0x5A, 0xA8, - 0xE1, 0xFA, 0xF2, 0xDC, 0xD1, 0x4E, 0xDB, 0x73, - 0x49, 0x56, 0x5B, 0x7D, 0x32, 0x71, 0xDD, 0xBE, - 0xB0, 0xB6, 0xCC, 0x7A, 0xFE, 0x08, 0x63, 0x57, - 0x84, 0x31, 0x11, 0x59, 0x73, 0x3C, 0x46, 0xE5, - 0xFD, 0xC5, 0xE0, 0xCD, 0x36, 0xCE, 0x56, 0x85, - 0xAC, 0xFB, 0x1A, 0xFE, 0x50, 0xAB, 0xB4, 0x6F, - 0x44, 0x75, 0x21, 0xE6, 0x0D, 0x9C, 0x8F, 0x0E, - 0x4C, 0xA2, 0x8C, 0x19, 0x0A, 0xBB, 0x40, 0xC3, - 0x65, 0xF4, 0x12, 0x47, 0x1E, 0x95, 0xA8, 0xEA, - 0x39, 0x6D, 0x4B, 0xD8, 0x07, 0x0E, 0xEB, 0x1F, - 0x02, 0xB0, 0x7C, 0x82, 0x53, 0x67, 0xAA, 0x1E, - 0xC0, 0xF1, 0x0C, 0x38, 0x62, 0x41, 0x6B, 0xB2, - 0x1A, 0xD6, 0xCA, 0x74, 0x8A, 0x86, 0xE9, 0x82, - 0x9E, 0xFC, 0x1A, 0x04, 0x99, 0x09, 0x3C, 0x85, - 0x17, 0x6D, 0x37, 0xF5, 0x74, 0xC7, 0x5C, 0xF5, - 0xED, 0xFA, 0x8D, 0x92, 0x0D, 0x32, 0x68, 0xCB, - 0x34, 0xC6, 0xA4, 0xBB, 0x00, 0x02, 0x86, 0x9B, - 0xC0, 0x5D, 0x7C, 0x8F, 0xCC, 0x06, 0x58, 0xD4, - 0xA0, 0x1E, 0xAC, 0xD7, 0x45, 0x57, 0xA3, 0x7D, - 0x98, 0xA7, 0x63, 0x07, 0x47, 0x52, 0xDF, 0xDD, - 0x64, 0x29, 0x88, 0x1C, 0xAF, 0xF5, 0x77, 0xD3, - 0xA0, 0x48, 0x03, 0x1B, 0xD5, 0x2C, 0x4E, 0x97, - 0x26, 0x39, 0x85, 0x90, 0xF9, 0x51, 0x9F, 0xD5, - 0x94, 0x05, 0xD6, 0xB3, 0xC3, 0x07, 0xAF, 0xCB, - 0x16, 0x8A, 0x98, 0x57, 0x85, 0xD9, 0x54, 0xA6, - 0xD1, 0xDC, 0x1E, 0xA9, 0x2E, 0x1E, 0xB6, 0xF9, - 0x46, 0xA4, 0xD9, 0x9D, 0xD6, 0xCA, 0x30, 0x7A, - 0xBF, 0xD8, 0x36, 0x2F, 0xAB, 0xA9, 0x8B, 0xB2, - 0x64, 0xC6, 0x9C, 0x5F, 0x55, 0x5D, 0x60, 0x88, - 0x3C, 0xC5, 0x60, 0x19, 0xFE, 0xB4, 0xE8, 0x00, - 0x0C, 0x48, 0xB7, 0xE6, 0x8C, 0xD6, 0x67, 0xF0, - 0x0B, 0x52, 0x50, 0xCE, 0xF2, 0x93, 0xA4, 0xA9, - 0xE7, 0x78, 0x72, 0x6E, 0x62, 0xF1, 0x20, 0x36, - 0x1E, 0x21, 0xAB, 0x31, 0x40, 0x46, 0x4C, 0xDC, - 0x6A, 0xBD, 0xE9, 0xEA, 0x05, 0x19, 0x8D, 0x8B, - 0x3B, 0xB6, 0x71, 0xB9, 0x11, 0x1A, 0x2F, 0x31, - 0x75, 0x82, 0x84, 0x7C, 0xA5, 0x01, 0x56, 0x64, - 0xF2, 0x2C, 0xDB, 0x08, 0xC1, 0x43, 0x18, 0x7B, - 0xDE, 0x21, 0x29, 0xB5, 0x4F, 0x34, 0x16, 0x02, - 0x95, 0xD7, 0x5F, 0xE9, 0xA4, 0x94, 0xFD, 0x7E, - 0x67, 0xAA, 0xA7, 0x6B, 0x57, 0xAA, 0xFF, 0xD8, - 0x9D, 0x01, 0xA7, 0x1D, 0xF5, 0xC8, 0x15, 0x86, - 0x20, 0x29, 0x8D, 0x58, 0x2B, 0xBE, 0xFA, 0x6D, - 0x09, 0xAC, 0x41, 0x2A, 0x99, 0xAA, 0x3B, 0xE9, - 0xC3, 0x83, 0x50, 0x49, 0x48, 0xC4, 0x3D, 0xD5, - 0xAF, 0x41, 0x27, 0xB1, 0x43, 0x58, 0x04, 0xF4, - 0x4B, 0xAF, 0xA1, 0x42, 0xBF, 0xC2, 0xA9, 0x5D, - 0x95, 0xFB, 0x2E, 0xF0, 0x64, 0x1A, 0xBE, 0x71, - 0x06, 0x4D, 0xE5, 0x1D, 0x6B, 0x9E, 0xC5, 0x08, - 0x57, 0xB8, 0xEE, 0xF7, 0xF4, 0x80, 0x36, 0x31, - 0x3D, 0x0E, 0x93, 0x67, 0x63, 0xB8, 0xF7, 0xBD, - 0xE6, 0x9B, 0x06, 0x4D, 0xD5, 0x76, 0x1D, 0x80, - 0xEA, 0x6F, 0x1A, 0x8B, 0x37, 0x56, 0x57, 0x53, - 0xC5, 0x79, 0xBB, 0xB8, 0x95, 0xEF, 0xB9, 0xFC, - 0xB3, 0xFC, 0x5F, 0xA3, 0x36, 0x2E, 0x37, 0x74, - 0xF0, 0xF7, 0x71, 0x40, 0xB9, 0x73, 0xCA, 0xE5, - 0x87, 0xBA, 0xD2, 0xF3, 0xB5, 0x66, 0xA9, 0xC2, - 0x5A, 0x96, 0x93, 0x47, 0xE5, 0xC5, 0x4F, 0x87, - 0xF1, 0x10, 0x5E, 0x9C, 0x07, 0x48, 0x67, 0xD9, - 0x40, 0x77, 0xCC, 0xAE, 0x3A, 0xBE, 0xA5, 0x45, - 0x20, 0xED, 0xB5, 0x1D, 0x9D, 0xAA, 0xBE, 0x78, - 0x48, 0xE7, 0x8F, 0xDF, 0x66, 0xE0, 0x7E, 0x2E, - 0x22, 0xB3, 0x02, 0x51, 0x93, 0x1E, 0x89, 0x0B, - 0xAF, 0x1F, 0x5E, 0x17, 0x7D, 0x4D, 0x9C, 0xEC, - 0x9E, 0x49, 0x69, 0x48, 0x1F, 0xD7, 0xC1, 0x33, - 0x5A, 0x0E, 0xD5, 0x87, 0x9F, 0x34, 0xEF, 0x4B, - 0xB4, 0xF6, 0x6C, 0x28, 0x80, 0x3C, 0xEA, 0x16, - 0x2B, 0xA4, 0x61, 0x50, 0x6D, 0x52, 0xEB, 0x3A, - 0xE1, 0x69, 0x51, 0x92, 0x2B, 0x06, 0x82, 0x51, - 0x86, 0xC3, 0xD4, 0xCE, 0x1B, 0x51, 0xF3, 0xC9, - 0x2F, 0x3C, 0x52, 0xF2, 0xD0, 0x4D, 0x1F, 0x13, - 0xB2, 0xB1, 0x7C, 0x9E, 0xEB, 0x88, 0x2C, 0xCE, - 0x0E, 0xB8, 0x8B, 0x7E, 0xA9, 0xA1, 0xCE, 0x4E, - 0x37, 0x41, 0x5C, 0xC8, 0x4C, 0x7B, 0xC4, 0x36, - 0xA4, 0x62, 0x83, 0x86, 0xCC, 0x77, 0xD9, 0xAF, - 0xD2, 0x07, 0x91, 0x1B, 0xD9, 0xBF, 0xD8, 0xA7, - 0xFA, 0x05, 0xC2, 0x75, 0xBE, 0x0C, 0x4C, 0x6A, - 0x8F, 0xC0, 0xA6, 0x1B, 0xDA, 0x1D, 0x67, 0xAE, - 0x33, 0xB5, 0x31, 0x0B, 0xE1, 0x29, 0x0D, 0xC7, - 0x1C, 0x14, 0x18, 0xEB, 0x57, 0x44, 0xBF, 0x28, - 0x42, 0xC1, 0x65, 0x21, 0x73, 0xA4, 0x9A, 0x69, - 0x2E, 0x71, 0xFE, 0x43, 0x25, 0x8A, 0x20, 0x5B, - 0x3C, 0xAA, 0xB9, 0x0C, 0x03, 0x04, 0xA5, 0x1E, - 0x77, 0xD0, 0x1B, 0x40, 0x4A, 0x01, 0xFA, 0xE2, - 0xF8, 0x3A, 0xB8, 0x0C, 0x5D, 0xBF, 0x6C, 0xF5, - 0x18, 0xC0, 0x01, 0xF4, 0x6A, 0x63, 0x3F, 0xA1, - 0x69, 0xB1, 0xBD, 0xB7, 0x7A, 0x9D, 0x0B, 0x1E, - 0x0C, 0x00, 0x78, 0x35, 0xC0, 0x9F, 0x6A, 0xBB, - 0xA9, 0x6F, 0x3F, 0x53, 0x56, 0x4D, 0xA5, 0x08, - 0xEE, 0x88, 0x61, 0xA4, 0x83, 0xA8, 0x17, 0x49, - 0xD4, 0xA4, 0x46, 0x72, 0xB1, 0xEF, 0x16, 0x05, - 0xF2, 0x9D, 0x16, 0x8B, 0x74, 0xB7, 0x36, 0xB4, - 0xF1, 0x35, 0x01, 0xD7, 0xAD, 0x12, 0x13, 0x11, - 0x8A, 0x78, 0x32, 0xE6, 0x66, 0xA5, 0x0B, 0xE8, - 0x01, 0x0D, 0x54, 0x32, 0x2A, 0x52, 0x6C, 0xF7, - 0xA4, 0xE5, 0x43, 0xA7, 0x9D, 0x0D, 0x98, 0xE0, - 0x04, 0xFB, 0xEC, 0x76, 0xEA, 0x3F, 0x7E, 0x88, - 0x7B, 0xDB, 0xAF, 0x50, 0xDA, 0xDF, 0xDD, 0xDF, - 0x3F, 0xFE, 0xCF, 0x6D, 0x3F, 0x77, 0xEA, 0x4B, - 0x9B, 0x16, 0xDC, 0x75, 0x4F, 0x4A, 0x68, 0xE5, - 0xEF, 0x32, 0xF6, 0xA1, 0x37, 0xE7, 0xC9, 0xE3, - 0xC3, 0xE8, 0xC2, 0xE2, 0x36, 0xC7, 0xEB, 0xC4, - 0x5D, 0x46, 0xEC, 0x16, 0x77, 0xA5, 0xA8, 0xBB, - 0x26, 0x68, 0x44, 0x3B, 0x0B, 0xE8, 0x69, 0x3D, - 0xC2, 0x57, 0xF1, 0x3D, 0x8B, 0x9A, 0x90, 0x10, - 0x0B, 0x92, 0xB4, 0xD1, 0x76, 0x1B, 0x81, 0x96, - 0x73, 0x83, 0x2C, 0x32, 0x02, 0x06, 0x71, 0xBF, - 0xB3, 0xD0, 0x22, 0x0A, 0x36, 0x3E, 0x4B, 0xED, - 0x6D, 0x64, 0x9D, 0x3F, 0x73, 0x68, 0xCF, 0xE0, - 0x81, 0xE1, 0x96, 0xA4, 0x3D, 0x47, 0x08, 0x79, - 0x8E, 0x31, 0xBB, 0x2A, 0x2F, 0x61, 0x82, 0x46, - 0x74, 0xAB, 0xA2, 0xFC, 0x9D, 0xCD, 0x05, 0xDB, - 0x84, 0xB8, 0x62, 0x7A, 0xE1, 0x14, 0x88, 0x88, - 0x6F, 0x92, 0x1B, 0xC7, 0x9A, 0xE1, 0xFD, 0x03 + 0x56, 0xB4, 0x2D, 0x59, 0x3A, 0xAB, 0x8E, 0x87, + 0x73, 0xBD, 0x92, 0xD7, 0x6E, 0xAB, 0xDD, 0xF3, + 0xB1, 0x54, 0x6F, 0x83, 0x26, 0xF5, 0x7A, 0x7B, + 0x77, 0x37, 0x64, 0xB6, 0xC0, 0xDD, 0x30, 0x47, + 0x0F, 0x68, 0xDF, 0xF8, 0x2E, 0x0D, 0xCA, 0x92, + 0x50, 0x92, 0x74, 0xEC, 0xFE, 0x83, 0xA9, 0x54, + 0x73, 0x5F, 0xDE, 0x6E, 0x14, 0x67, 0x6D, 0xAA, + 0xA3, 0x68, 0x0C, 0x30, 0xD5, 0x24, 0xF4, 0xEF, + 0xA7, 0x9E, 0xD6, 0xA1, 0xF9, 0xED, 0x7E, 0x1C, + 0x00, 0x56, 0x0E, 0x86, 0x83, 0x53, 0x8C, 0x31, + 0x05, 0xAB, 0x93, 0x1B, 0xE0, 0xD2, 0xB2, 0x49, + 0xB3, 0x8C, 0xB9, 0xB1, 0x3A, 0xF5, 0xCE, 0xAF, + 0x78, 0x87, 0xA5, 0x9D, 0xBA, 0x16, 0x68, 0x8A, + 0x7F, 0x28, 0xDE, 0x0B, 0x14, 0xD1, 0x9F, 0x39, + 0x1E, 0xB4, 0x18, 0x32, 0xA5, 0x64, 0x79, 0x41, + 0x6C, 0xCF, 0x94, 0xE9, 0x97, 0x39, 0x0E, 0xD7, + 0x87, 0x8E, 0xEA, 0xFF, 0x49, 0x32, 0x8A, 0x70, + 0xE0, 0xAB, 0x5F, 0xCE, 0x6C, 0x63, 0xC0, 0x9B, + 0x35, 0xF4, 0xE4, 0x59, 0x94, 0xDE, 0x61, 0x5B, + 0x88, 0xBB, 0x72, 0x2F, 0x70, 0xE8, 0x7D, 0x2B, + 0xBD, 0x72, 0xAE, 0x71, 0xE1, 0xEE, 0x90, 0x08, + 0xE4, 0x59, 0xD8, 0xE7, 0x43, 0x03, 0x9A, 0x8D, + 0xDE, 0xB8, 0x74, 0xFC, 0xE5, 0x30, 0x1A, 0x2F, + 0x8C, 0x0E, 0xE8, 0xC2, 0xFE, 0xE7, 0xA4, 0xEE, + 0x68, 0xB5, 0xED, 0x6A, 0x6D, 0x9A, 0xB7, 0x4F, + 0x98, 0xBB, 0x3B, 0xA0, 0xFE, 0x89, 0xE8, 0x2B, + 0xD5, 0xA5, 0x25, 0xC5, 0xE8, 0x79, 0x0F, 0x81, + 0x8C, 0xCC, 0x60, 0x58, 0x77, 0xD4, 0x6C, 0x8B, + 0xDB, 0x5C, 0x33, 0x7B, 0x02, 0x5B, 0xB8, 0x40, + 0xFF, 0x47, 0x18, 0x96, 0xE4, 0x3B, 0xFA, 0x99, + 0xD7, 0x3D, 0xBE, 0x31, 0x80, 0x5C, 0x27, 0xA4, + 0x3E, 0x57, 0xF0, 0x61, 0x8B, 0x3A, 0xE5, 0x22, + 0xA4, 0x64, 0x4E, 0x0D, 0x4E, 0x4C, 0x1C, 0x54, + 0x84, 0x89, 0x43, 0x1B, 0xE5, 0x58, 0xF3, 0xBF, + 0xC5, 0x0E, 0x16, 0x61, 0x7E, 0x11, 0x0D, 0xD7, + 0xAF, 0x9A, 0x6F, 0xD8, 0x3E, 0x3F, 0xBB, 0x68, + 0xC3, 0x04, 0xD1, 0x5F, 0x6C, 0xB7, 0x00, 0xD6, + 0x1D, 0x7A, 0xA9, 0x15, 0xA6, 0x75, 0x1E, 0xA3, + 0xBA, 0x80, 0x22, 0x3E, 0x65, 0x41, 0x32, 0xA2, + 0x09, 0x99, 0xA4, 0x3B, 0xF4, 0x08, 0x59, 0x27, + 0x30, 0xB9, 0xA9, 0x49, 0x96, 0x36, 0xC0, 0x9F, + 0xA7, 0x29, 0xF9, 0xCB, 0x1F, 0x9D, 0x34, 0x42, + 0xF4, 0x73, 0x57, 0xA2, 0xB9, 0xCF, 0x15, 0xD3, + 0x10, 0x3B, 0x9B, 0xF3, 0x96, 0xC2, 0x30, 0x88, + 0xF1, 0x18, 0xED, 0xE3, 0x46, 0xB5, 0xC0, 0x38, + 0x91, 0xCF, 0xA5, 0xD5, 0x17, 0xCE, 0xF8, 0x47, + 0x13, 0x22, 0xE7, 0xE3, 0x10, 0x87, 0xC4, 0xB0, + 0x36, 0xAB, 0xAD, 0x78, 0x4B, 0xFF, 0x72, 0xA9, + 0xB1, 0x1F, 0xA1, 0x98, 0xFA, 0xCB, 0xCB, 0x91, + 0xF0, 0x67, 0xFE, 0xAF, 0x76, 0xFC, 0xFE, 0x53, + 0x27, 0xC1, 0x07, 0x0B, 0x3D, 0xA6, 0x98, 0x84, + 0x00, 0x75, 0x67, 0x60, 0xD2, 0xD1, 0xF0, 0x60, + 0x29, 0x8F, 0x16, 0x83, 0xD5, 0x1E, 0x36, 0x16, + 0xE9, 0x8C, 0x51, 0xC9, 0xC0, 0x3A, 0xA4, 0x2F, + 0x2E, 0x63, 0x36, 0x51, 0xA4, 0x7A, 0xD3, 0xCC, + 0x2A, 0xB4, 0xA8, 0x52, 0xAE, 0x0C, 0x4B, 0x04, + 0xB4, 0xE1, 0xC3, 0xDD, 0x94, 0x44, 0x45, 0xA2, + 0xB1, 0x2B, 0x4F, 0x42, 0xA6, 0x43, 0x51, 0x05, + 0xC0, 0x41, 0x22, 0xFC, 0x35, 0x87, 0xAF, 0xE4, + 0x09, 0xA0, 0x0B, 0x30, 0x8D, 0x63, 0xC5, 0xDD, + 0x81, 0x63, 0x65, 0x45, 0x04, 0xEE, 0xDB, 0xB7, + 0xB5, 0x32, 0x95, 0x77, 0xC3, 0x5F, 0xBE, 0xB3, + 0xF4, 0x63, 0x87, 0x2C, 0xAC, 0x28, 0x14, 0x2B, + 0x3C, 0x12, 0xA7, 0x40, 0xEC, 0x6E, 0xA7, 0xCE, + 0x9A, 0xD7, 0x8C, 0x6F, 0xC8, 0xFE, 0x1B, 0x4D, + 0xF5, 0xFC, 0x55, 0xC1, 0x66, 0x7F, 0x31, 0xF2, + 0x31, 0x2D, 0xA0, 0x77, 0x99, 0xDC, 0x87, 0x0A, + 0x47, 0x86, 0x08, 0x54, 0x9F, 0xED, 0xAF, 0xE0, + 0x21, 0xF1, 0xCF, 0x29, 0x84, 0x18, 0x03, 0x64, + 0xE9, 0x0A, 0xD9, 0x8D, 0x84, 0x56, 0x52, 0xAA, + 0x3C, 0xDD, 0x7A, 0x8E, 0xB0, 0x9F, 0x5E, 0x51, + 0x42, 0x3F, 0xAB, 0x42, 0xA7, 0xB7, 0xBB, 0x4D, + 0x51, 0x48, 0x64, 0xBE, 0x8D, 0x71, 0x29, 0x7E, + 0x9C, 0x3B, 0x17, 0xA9, 0x93, 0xF0, 0xAE, 0x62, + 0xE8, 0xEF, 0x52, 0x63, 0x7B, 0xD1, 0xB8, 0x85, + 0xBD, 0x9B, 0x6A, 0xB7, 0x27, 0x85, 0x4D, 0x70, + 0x3D, 0x8D, 0xC4, 0x78, 0xF9, 0x6C, 0xB8, 0x1F, + 0xCE, 0x4C, 0x60, 0x38, 0x3A, 0xC0, 0x1F, 0xCF, + 0x0F, 0x97, 0x1D, 0x4C, 0x8F, 0x35, 0x2B, 0x7A, + 0x82, 0xE2, 0x18, 0x65, 0x2F, 0x2C, 0x10, 0x6C, + 0xA9, 0x2A, 0xE6, 0x86, 0xBA, 0xCF, 0xCE, 0xF5, + 0xD3, 0x27, 0x34, 0x7A, 0x97, 0xA9, 0xB3, 0x75, + 0xD6, 0x73, 0x41, 0x55, 0x2B, 0xC2, 0xC5, 0x38, + 0x77, 0x8E, 0x0F, 0x98, 0x01, 0x82, 0x3C, 0xCD, + 0xFC, 0xD1, 0xEA, 0xAD, 0xED, 0x55, 0xB1, 0x8C, + 0x97, 0x57, 0xE3, 0xF2, 0x12, 0xB2, 0x88, 0x9D, + 0x38, 0x57, 0xDB, 0x51, 0xF9, 0x81, 0xD1, 0x61, + 0x85, 0xFD, 0x0F, 0x90, 0x08, 0x53, 0xA7, 0x50, + 0x05, 0xE3, 0x02, 0x0A, 0x8B, 0x95, 0xB7, 0xD8, + 0xF2, 0xF2, 0x63, 0x1C, 0x70, 0xD7, 0x8A, 0x95, + 0x7C, 0x7A, 0x62, 0xE1, 0xB3, 0x71, 0x90, 0x70, + 0xAC, 0xD1, 0xFD, 0x48, 0x0C, 0x25, 0xB8, 0x38, + 0x47, 0xDA, 0x02, 0x7B, 0x6E, 0xBB, 0xC2, 0xEE, + 0xC2, 0xDF, 0x22, 0xC8, 0x7F, 0x9B, 0x46, 0xD5, + 0xD7, 0xBA, 0xF1, 0x56, 0xB5, 0x3C, 0xEE, 0x92, + 0x95, 0x72, 0xB9, 0x2C, 0x47, 0x84, 0xC4, 0xE8, + 0x29, 0xF3, 0x44, 0x6A, 0x1F, 0xFE, 0x47, 0xF9, + 0x9D, 0xEC, 0xD0, 0x43, 0x60, 0x29, 0xDD, 0xEB, + 0xD3, 0xED, 0x8E, 0x87, 0xE5, 0xE7, 0x3D, 0x12, + 0x3D, 0xBE, 0x8A, 0x4D, 0xDA, 0xCF, 0x2A, 0xBD, + 0xE8, 0x7F, 0x33, 0xAE, 0x2B, 0x62, 0x1C, 0x0E, + 0xC5, 0xD5, 0xCA, 0xD1, 0x25, 0x9D, 0xEE, 0xC2, + 0xAE, 0xFF, 0x60, 0x88, 0xF0, 0x4F, 0x27, 0xA2, + 0x03, 0x38, 0xB5, 0x76, 0x25, 0x43, 0xE5, 0x10, + 0x08, 0x99, 0xA4, 0xCB, 0xFB, 0x7B, 0x3C, 0xA4, + 0x56, 0xB3, 0xA1, 0x9B, 0x83, 0xA4, 0xC4, 0x32, + 0x23, 0x0C, 0x23, 0xE1, 0xC7, 0xF1, 0x07, 0xC4, + 0xCB, 0x11, 0x21, 0x52, 0xF1, 0xC0, 0xF3, 0x0D, + 0xA0, 0xBB, 0x33, 0xF4, 0xF1, 0x1F, 0x47, 0xEE, + 0xA4, 0x38, 0x72, 0xBA, 0xFA, 0x84, 0xAE, 0x22, + 0x25, 0x6D, 0x70, 0x8E, 0x06, 0x04, 0xDA, 0xDE, + 0x4B, 0x2A, 0x4D, 0xDE, 0x8C, 0xCC, 0xF1, 0x19, + 0x30, 0xE1, 0x35, 0x53, 0x93, 0x4A, 0xE3, 0xEC, + 0xE5, 0x2F, 0x3D, 0x7C, 0xCC, 0x00, 0x28, 0x73, + 0x77, 0x87, 0x9F, 0xE6, 0xB8, 0xEC, 0xE7, 0xEF, + 0x79, 0x42, 0x35, 0x07, 0xC9, 0xDA, 0x33, 0x95, + 0x59, 0xC2, 0x0D, 0xE1, 0xC5, 0x19, 0x55, 0x99, + 0x9B, 0xAE, 0x47, 0x40, 0x1D, 0xC3, 0xCD, 0xFA, + 0xA1, 0xB2, 0x56, 0xD0, 0x9C, 0x7D, 0xB9, 0xFC, + 0x86, 0x98, 0xBF, 0xCE, 0xFA, 0x73, 0x02, 0xD5, + 0x6F, 0xBC, 0xDE, 0x1F, 0xBA, 0xAA, 0x1C, 0x65, + 0x34, 0x54, 0xE6, 0xFD, 0x3D, 0x84, 0xE4, 0xF7, + 0x9A, 0x93, 0x1C, 0x68, 0x1C, 0xBB, 0x6C, 0xB4, + 0x62, 0xB1, 0x0D, 0xAE, 0x11, 0x2B, 0xDF, 0xB7, + 0xF6, 0x5C, 0x7F, 0xDF, 0x6E, 0x5F, 0xC5, 0x94, + 0xEC, 0x3A, 0x47, 0x4A, 0x94, 0xBD, 0x97, 0xE6, + 0xEC, 0x81, 0xF7, 0x1C, 0x23, 0x0B, 0xF7, 0x0C, + 0xA0, 0xF1, 0x3C, 0xE3, 0xDF, 0xFB, 0xD9, 0xFF, + 0x98, 0x04, 0xEF, 0xD8, 0xF3, 0x7A, 0x4D, 0x36, + 0x29, 0xB4, 0x3A, 0x8F, 0x55, 0x54, 0x4E, 0xBC, + 0x5A, 0xC0, 0xAB, 0xD9, 0xA3, 0x3D, 0x79, 0x69, + 0x90, 0x68, 0x34, 0x6A, 0x0F, 0x1A, 0x3A, 0x96, + 0xE1, 0x15, 0xA5, 0xD8, 0x0B, 0xE1, 0x65, 0xB5, + 0x62, 0xD0, 0x82, 0x98, 0x4D, 0x5A, 0xAC, 0xC3, + 0xA2, 0x30, 0x19, 0x81, 0xA6, 0x41, 0x8F, 0x8B, + 0xA7, 0xD7, 0xB0, 0xD7, 0xCA, 0x58, 0x75, 0xC6 }; static const byte k_768[KYBER_SS_SZ] = { - 0x61, 0x6E, 0x0B, 0x75, 0x3A, 0x3B, 0x7F, 0x40, - 0xFE, 0xF9, 0xA3, 0x89, 0xF5, 0x8F, 0x16, 0xBF, - 0xBB, 0x04, 0x62, 0x29, 0x41, 0xD2, 0x46, 0x4B, - 0xDA, 0xE7, 0x67, 0x82, 0x0D, 0xFA, 0xC3, 0x8E + 0x26, 0x96, 0xD2, 0x8E, 0x9C, 0x61, 0xC2, 0xA0, + 0x1C, 0xE9, 0xB1, 0x60, 0x8D, 0xCB, 0x9D, 0x29, + 0x27, 0x85, 0xA0, 0xCD, 0x58, 0xEF, 0xB7, 0xFE, + 0x13, 0xB1, 0xDE, 0x95, 0xF0, 0xDB, 0x55, 0xB3 }; #endif #ifndef WOLFSSL_NO_KYBER1024 static const byte ek_1024[KYBER1024_PUBLIC_KEY_SIZE] = { - 0x27, 0x66, 0x9A, 0x66, 0x76, 0x67, 0xB8, 0xD5, - 0x46, 0x68, 0x58, 0x60, 0x22, 0x60, 0x11, 0x5B, - 0x62, 0x09, 0xBC, 0x2C, 0x45, 0xDF, 0x7A, 0x4E, - 0x64, 0x93, 0x2B, 0x75, 0xC7, 0x8B, 0x9F, 0x70, - 0x83, 0xF1, 0x31, 0xBC, 0xD4, 0xE2, 0x0E, 0xFF, - 0x8C, 0xCF, 0x69, 0x73, 0x6B, 0xDB, 0xC8, 0x84, - 0x06, 0xF9, 0xB6, 0x9A, 0xD3, 0xCE, 0x35, 0x6A, - 0x0F, 0x5E, 0x67, 0x6D, 0xD0, 0xA7, 0xC4, 0xAB, - 0xB1, 0xA1, 0xC9, 0xD6, 0x20, 0x21, 0xBB, 0x38, - 0x4A, 0x40, 0x14, 0xFB, 0x04, 0xCD, 0x2F, 0x82, - 0x18, 0x90, 0xD9, 0x04, 0x27, 0xC4, 0x9F, 0x4A, - 0x62, 0x8E, 0xCE, 0xC2, 0x73, 0x1F, 0xAC, 0x02, - 0x52, 0x37, 0x36, 0x0D, 0x58, 0x2C, 0xD0, 0x66, - 0x47, 0xB1, 0x10, 0x9A, 0xA6, 0xC2, 0xAC, 0x5D, - 0x43, 0x37, 0x58, 0xC1, 0xCA, 0xA5, 0x35, 0x55, - 0xFF, 0xF5, 0x77, 0xEB, 0xB5, 0x21, 0xFB, 0xE3, - 0x2D, 0x10, 0xF7, 0x90, 0x60, 0x4C, 0x53, 0xC2, - 0xF8, 0x2C, 0x17, 0xB0, 0x8E, 0xF3, 0x62, 0x56, - 0x74, 0x21, 0x48, 0x44, 0x90, 0x6D, 0xB3, 0xFB, - 0x95, 0x20, 0x03, 0x14, 0x22, 0xA1, 0x3B, 0xD7, - 0x61, 0x2D, 0x42, 0x01, 0xC2, 0x7D, 0x15, 0xB9, - 0xD1, 0x94, 0x83, 0x0C, 0xC3, 0x66, 0x9B, 0xB8, - 0xBA, 0x34, 0xC2, 0x52, 0x37, 0x64, 0x41, 0x39, - 0x71, 0xC4, 0x0D, 0x84, 0xAE, 0xE6, 0x56, 0x75, - 0xD5, 0x21, 0x53, 0x09, 0xDA, 0x83, 0x67, 0xF0, - 0x01, 0x49, 0x75, 0x46, 0xEC, 0xE0, 0x7C, 0xBF, - 0x00, 0x2D, 0x78, 0x1B, 0x83, 0x06, 0x82, 0x48, - 0x40, 0x80, 0xAD, 0x6F, 0x95, 0x58, 0xB3, 0x6B, - 0x6B, 0xF6, 0x10, 0x91, 0x71, 0x30, 0xB7, 0x41, - 0x9B, 0x39, 0xF8, 0x50, 0x29, 0x62, 0x12, 0x64, - 0xCF, 0x2C, 0x8A, 0xE4, 0xD8, 0x08, 0x38, 0x7B, - 0x20, 0xCC, 0x5A, 0xA0, 0xB9, 0x69, 0xC3, 0x9B, - 0xC8, 0x0E, 0x6C, 0xB9, 0xCA, 0x03, 0x51, 0xA3, - 0xF6, 0x0A, 0xCE, 0xAF, 0x12, 0xBD, 0x41, 0xFA, - 0x09, 0x96, 0xE3, 0x99, 0x06, 0xA9, 0xB6, 0x16, - 0x97, 0xB7, 0x47, 0xC2, 0x03, 0x1C, 0x76, 0x02, - 0x88, 0x36, 0x44, 0x57, 0x42, 0x5B, 0xBB, 0xB4, - 0x0F, 0x48, 0x98, 0xAD, 0x08, 0x58, 0x76, 0x60, - 0x8A, 0x77, 0xA5, 0xEB, 0x9D, 0x12, 0x4B, 0xC9, - 0x92, 0x26, 0x51, 0xB7, 0x63, 0x95, 0x88, 0x15, - 0x58, 0xCA, 0xD0, 0x6F, 0x3C, 0x4B, 0xCF, 0x08, - 0xE4, 0x5B, 0x67, 0xBA, 0x51, 0x60, 0x38, 0xA3, - 0x64, 0xB7, 0x74, 0x0E, 0x97, 0x40, 0xEE, 0x2B, - 0x93, 0xC5, 0xC6, 0x5F, 0x49, 0x02, 0x0A, 0xD4, - 0x2B, 0x3C, 0x0A, 0xEA, 0x5B, 0xF2, 0x42, 0xA4, - 0xF1, 0xB0, 0x89, 0xB5, 0xA3, 0x45, 0x8B, 0xE8, - 0xA3, 0x71, 0xCA, 0x1F, 0x29, 0x3C, 0x53, 0xF2, - 0x78, 0x0E, 0xCE, 0x28, 0x12, 0x93, 0xD9, 0x91, - 0xE6, 0xE5, 0x79, 0x04, 0x2B, 0xAB, 0xC1, 0x69, - 0x72, 0x4F, 0x10, 0x68, 0x1F, 0xD1, 0xC7, 0xD2, - 0xFB, 0x16, 0x48, 0xB0, 0xBF, 0x80, 0x81, 0x8A, - 0x7D, 0xD3, 0xB7, 0x09, 0x73, 0x4D, 0x38, 0x97, - 0x2E, 0x3E, 0x44, 0x87, 0x5A, 0xF0, 0x92, 0x7A, - 0x9A, 0xAD, 0xE8, 0x26, 0x13, 0xFC, 0xA0, 0x5E, - 0xE5, 0xB3, 0x21, 0x06, 0x47, 0xA5, 0x63, 0x2A, - 0xA1, 0x70, 0xD0, 0x9E, 0x70, 0xB5, 0x6A, 0x2F, - 0x04, 0x33, 0x7A, 0x33, 0x7E, 0xE9, 0x52, 0x38, - 0x3A, 0x1A, 0x8A, 0xEE, 0xA6, 0xCD, 0xB9, 0x0C, - 0xCD, 0x86, 0xA8, 0x18, 0xD1, 0xBB, 0x39, 0x46, - 0x5B, 0xA3, 0x13, 0xD2, 0x66, 0xBB, 0xB1, 0x05, - 0x81, 0xFA, 0x18, 0x7D, 0x92, 0x6A, 0xC3, 0xA8, - 0xB7, 0x49, 0xF6, 0x44, 0x45, 0xFA, 0xB5, 0x6C, - 0x99, 0x27, 0x55, 0x57, 0x93, 0xFB, 0x4A, 0xCF, - 0xB0, 0x39, 0xB1, 0xAA, 0x54, 0x3B, 0x1B, 0x87, - 0xAE, 0x6A, 0x49, 0xAB, 0x56, 0x29, 0x33, 0xC4, - 0xC9, 0x7B, 0xD7, 0x4C, 0x07, 0xBF, 0x29, 0x85, - 0x1A, 0x46, 0x98, 0x51, 0xA9, 0x82, 0x59, 0x55, - 0x96, 0xFE, 0x7A, 0xCA, 0xE0, 0xDB, 0x23, 0x53, - 0x30, 0x28, 0xAA, 0x34, 0x67, 0x6F, 0x7A, 0x9B, - 0x29, 0x26, 0x3E, 0x7A, 0xA2, 0x79, 0x00, 0x10, - 0x4B, 0x1B, 0xA1, 0xB5, 0x67, 0x47, 0x39, 0xB2, - 0xFC, 0x4E, 0xD8, 0xA3, 0x30, 0xBB, 0xA5, 0xA0, - 0xB6, 0x24, 0x7C, 0x63, 0xF1, 0x15, 0x3D, 0xA0, - 0x1D, 0xC8, 0xF6, 0x16, 0xF1, 0x04, 0x83, 0xA6, - 0x93, 0xA6, 0x34, 0xC1, 0xBA, 0x6A, 0xE1, 0xAB, - 0x2F, 0x16, 0x34, 0x00, 0xBB, 0x57, 0x71, 0xE7, - 0x01, 0x71, 0xFC, 0xB5, 0x41, 0x55, 0xAB, 0xFC, - 0xB2, 0x04, 0x4F, 0xCB, 0x30, 0xBA, 0xD6, 0x7F, - 0x74, 0x21, 0x83, 0x86, 0x18, 0x19, 0xED, 0xB1, - 0xAA, 0x6C, 0x77, 0x1F, 0xC8, 0xE1, 0x1A, 0x92, - 0xE0, 0x8B, 0x71, 0xF4, 0x0D, 0x03, 0x6C, 0x15, - 0xD2, 0x89, 0x6A, 0x20, 0x47, 0x25, 0xBA, 0x90, - 0xA0, 0x3B, 0x47, 0x8D, 0x98, 0xC4, 0x90, 0x84, - 0x38, 0x2F, 0x1D, 0x22, 0x3F, 0xE1, 0x29, 0x80, - 0xE9, 0x47, 0xA4, 0x15, 0xE5, 0x5F, 0xE6, 0x7B, - 0x85, 0xDA, 0x40, 0x44, 0x13, 0x42, 0x44, 0x5B, - 0x46, 0xC2, 0xFC, 0x42, 0x02, 0x0D, 0x04, 0x76, - 0x9A, 0x2A, 0x1C, 0x64, 0x64, 0x1F, 0x0C, 0x36, - 0x63, 0x6B, 0xA6, 0xC4, 0x65, 0x2B, 0x26, 0x7A, - 0x4B, 0x92, 0x19, 0xE3, 0x33, 0xA0, 0x68, 0x17, - 0xB5, 0x81, 0x7B, 0x6E, 0x6C, 0xC4, 0x85, 0xE3, - 0x52, 0x61, 0x41, 0x69, 0xAB, 0xC2, 0x0E, 0x18, - 0x91, 0xB7, 0xA0, 0x00, 0xC5, 0x2A, 0xF1, 0x5A, - 0x7B, 0x90, 0x4C, 0x97, 0x6C, 0x1B, 0xFD, 0x3A, - 0x23, 0x77, 0xEB, 0x76, 0xB5, 0x50, 0x33, 0xC7, - 0xC4, 0xC6, 0x9E, 0x71, 0x74, 0xAA, 0xF2, 0x77, - 0x15, 0x75, 0x63, 0x16, 0xCA, 0xCC, 0xCE, 0x63, - 0xA5, 0xA2, 0x24, 0x35, 0xC7, 0xD1, 0x02, 0x04, - 0x43, 0xAA, 0x71, 0x69, 0x3B, 0xF0, 0x62, 0x30, - 0x3D, 0x13, 0x33, 0x1F, 0x79, 0x54, 0x24, 0xC2, - 0x0D, 0x26, 0x6C, 0x1D, 0x90, 0x30, 0x5F, 0xC8, - 0xC2, 0x53, 0x66, 0x84, 0xA9, 0x3D, 0x50, 0x6D, - 0xE6, 0x32, 0x9B, 0x61, 0x62, 0x40, 0x59, 0x99, - 0xBD, 0x5C, 0xAA, 0x7D, 0xDB, 0x96, 0x13, 0xC8, - 0x23, 0x8C, 0xC6, 0xD3, 0x35, 0xA1, 0xEB, 0x40, - 0x82, 0xE7, 0x71, 0x0D, 0x07, 0x9F, 0x87, 0xA4, - 0xBF, 0xF6, 0x47, 0x8B, 0x5F, 0x0C, 0x58, 0x77, - 0x86, 0xAF, 0x42, 0x71, 0x92, 0xD9, 0xA3, 0x4A, - 0x4F, 0xA3, 0x3B, 0xF0, 0xD3, 0xCC, 0x58, 0xFB, - 0x46, 0x3B, 0x48, 0x38, 0xCA, 0x2C, 0x33, 0x7E, - 0x65, 0x39, 0x7D, 0xA1, 0x56, 0x90, 0xC5, 0x2A, - 0xC0, 0xE5, 0x46, 0x8B, 0xDC, 0x03, 0xDF, 0x5A, - 0x62, 0xF7, 0x02, 0x09, 0x34, 0xE2, 0x67, 0xE0, - 0xF7, 0xCF, 0x95, 0x59, 0x94, 0x35, 0xF9, 0x52, - 0xFA, 0xB7, 0x4C, 0xFE, 0xB4, 0x30, 0x8B, 0x17, - 0x3F, 0x12, 0xE0, 0x73, 0xF7, 0xF0, 0x40, 0xDB, - 0x4C, 0x63, 0xC1, 0xC4, 0x8A, 0x7B, 0x7A, 0x41, - 0xF4, 0x77, 0x9A, 0x6B, 0x57, 0xA9, 0x22, 0xC9, - 0x70, 0x77, 0x11, 0x80, 0x00, 0x84, 0x93, 0xD4, - 0xC7, 0x68, 0x05, 0x40, 0x0B, 0x7C, 0x66, 0x4D, - 0x0B, 0x92, 0xB2, 0x2C, 0x49, 0x55, 0x1B, 0x12, - 0x47, 0xE6, 0x2C, 0x85, 0xE1, 0xE5, 0x40, 0xC8, - 0x20, 0x93, 0x37, 0x10, 0x13, 0xC4, 0x67, 0x6C, - 0xEA, 0xD7, 0x7C, 0x5F, 0x30, 0x64, 0xA3, 0x73, - 0x49, 0xC7, 0x16, 0x5E, 0xB3, 0xAA, 0x7D, 0xEF, - 0x87, 0x31, 0xE9, 0xD6, 0x6A, 0x56, 0x36, 0x8F, - 0x19, 0x5C, 0x04, 0x5B, 0x2A, 0x50, 0xE5, 0x97, - 0x86, 0x16, 0x1A, 0x63, 0x0D, 0x28, 0x00, 0x89, - 0x80, 0x12, 0x98, 0xC1, 0x30, 0xE4, 0x48, 0x31, - 0x50, 0xCA, 0x91, 0x52, 0xC2, 0xA0, 0xF2, 0x47, - 0x75, 0x0C, 0x06, 0x22, 0x59, 0xB8, 0x4C, 0x28, - 0x23, 0x6C, 0x3F, 0xB5, 0x46, 0x25, 0xD5, 0xCD, - 0xBE, 0xCC, 0x68, 0xDB, 0xA2, 0x2F, 0xB1, 0x55, - 0x80, 0x55, 0xFB, 0x9B, 0x24, 0x35, 0x01, 0xC7, - 0x58, 0x51, 0xE7, 0x6A, 0xBE, 0x48, 0x47, 0xB9, - 0xB9, 0x72, 0xA7, 0x34, 0x11, 0xA6, 0xB4, 0x28, - 0x2B, 0xF5, 0x98, 0x3A, 0x82, 0xDA, 0x74, 0x13, - 0xE5, 0x4B, 0xA3, 0x5B, 0xAB, 0x37, 0xA9, 0xB3, - 0xC6, 0x28, 0x84, 0xB6, 0x43, 0xC1, 0x34, 0x16, - 0x5C, 0x98, 0x70, 0xC6, 0xBB, 0x39, 0x0F, 0x6B, - 0x7A, 0x1E, 0x57, 0x45, 0x15, 0x8F, 0xB2, 0x51, - 0xD6, 0x90, 0x94, 0x33, 0x55, 0x1F, 0xEB, 0xD3, - 0x0B, 0xA5, 0x75, 0xA1, 0xE2, 0xF1, 0x09, 0x58, - 0x49, 0x8D, 0x9F, 0x14, 0x7E, 0xD9, 0x53, 0x13, - 0x22, 0xA1, 0x60, 0x97, 0xF5, 0x5D, 0x81, 0x17, - 0x95, 0x45, 0x79, 0x12, 0x91, 0x2B, 0x1C, 0x65, - 0xF3, 0x80, 0x25, 0x42, 0x9B, 0x3E, 0x76, 0x4A, - 0x2E, 0x1A, 0xBC, 0x4E, 0x30, 0xC2, 0x88, 0x08, - 0x27, 0x42, 0x99, 0x55, 0x90, 0x98, 0x1C, 0x43, - 0xDB, 0xB3, 0x65, 0x96, 0x6B, 0xCB, 0x97, 0x20, - 0xB1, 0x78, 0xC5, 0xEB, 0x96, 0x3B, 0x82, 0x93, - 0x4C, 0x02, 0x81, 0x4B, 0x75, 0x25, 0x54, 0x6D, - 0xB7, 0xC9, 0x6D, 0x65, 0x82, 0x2E, 0x49, 0x42, - 0xE4, 0xA4, 0xAC, 0x13, 0xC9, 0x94, 0x90, 0xE7, - 0xAB, 0x4A, 0x70, 0x23, 0x71, 0xF2, 0x13, 0x16, - 0xA5, 0x79, 0x06, 0xB1, 0x92, 0x58, 0x42, 0x88, - 0x01, 0x19, 0x25, 0x67, 0xC2, 0x04, 0x5B, 0xF8, - 0x77, 0x5C, 0xF5, 0x8C, 0x5D, 0xB2, 0x8B, 0xA1, - 0xB0, 0x5E, 0x04, 0x2A, 0x18, 0x59, 0xE6, 0x42, - 0x86, 0xB5, 0xB1, 0x14, 0xF3, 0x9F, 0xCA, 0xCC, - 0x12, 0x7B, 0xE6, 0x3D, 0xFF, 0x59, 0x0B, 0xC1, - 0x84, 0xB8, 0x3B, 0x16, 0x8C, 0x30, 0x19, 0x98, - 0x90, 0x37, 0x41, 0x00, 0xE4, 0x0D, 0x2F, 0xC7, - 0x75, 0x2B, 0x14, 0x30, 0x35, 0x50, 0x22, 0xF3, - 0xD5, 0x89, 0x25, 0xD1, 0x99, 0x1B, 0xF3, 0xB9, - 0x8A, 0x90, 0x39, 0x5F, 0x85, 0x79, 0x64, 0x6C, - 0x84, 0x13, 0xBA, 0xB3, 0xC0, 0xC0, 0x70, 0x7A, - 0x23, 0x8A, 0x27, 0xD0, 0x9F, 0xA5, 0x7A, 0x32, - 0xFF, 0x85, 0x39, 0x2F, 0xD0, 0x8C, 0x2F, 0x22, - 0x86, 0xAB, 0xDB, 0x2B, 0x69, 0x36, 0xB9, 0xD3, - 0x50, 0x38, 0x02, 0xC6, 0xB5, 0x1E, 0x41, 0x5B, - 0x81, 0x67, 0x3C, 0xC7, 0x80, 0x54, 0xF1, 0xB2, - 0xC4, 0xBD, 0xFA, 0x73, 0x3E, 0x52, 0x64, 0xC5, - 0x5A, 0x7C, 0x4D, 0xA5, 0xB7, 0x39, 0x44, 0x40, - 0x24, 0x62, 0x03, 0x3D, 0x08, 0xAE, 0x62, 0x0B, - 0xD0, 0x56, 0x44, 0xB4, 0x77, 0xAB, 0x31, 0x5E, - 0x93, 0x6D, 0x3F, 0x25, 0xB5, 0xBA, 0x7A, 0xC1, - 0x9E, 0xB5, 0x59, 0xA5, 0xC1, 0x19, 0x5F, 0x56, - 0x8B, 0x31, 0x3C, 0x26, 0x75, 0x09, 0x2E, 0x6D, - 0xF5, 0x8F, 0xF3, 0x99, 0xC4, 0x2C, 0xAB, 0x63, - 0x63, 0xAA, 0x03, 0x36, 0x91, 0xCB, 0x8C, 0xE0, - 0x66, 0x99, 0xE7, 0x01, 0xF2, 0xB9, 0x25, 0x97, - 0xCB, 0x8F, 0xC2, 0x35, 0x16, 0xE9, 0xF4, 0x0C, - 0xE7, 0x5B, 0x7B, 0xC1, 0xE0, 0x52, 0x0A, 0x5A, - 0x38, 0x95, 0xEB, 0x7D, 0x8D, 0x47, 0x40, 0x09, - 0xA0, 0xCB, 0x0A, 0xDC, 0x2D, 0xF4, 0x76, 0xB5, - 0x16, 0x41, 0x12, 0xC3, 0xB6, 0x00, 0xB6, 0x77, - 0x6D, 0xAB, 0x49, 0xB2, 0x03, 0x81, 0xA4, 0x01, - 0x46, 0x91, 0x65, 0x2A, 0x3C, 0x31, 0x61, 0xAA, - 0xC6, 0x61, 0x6C, 0xFA, 0xA2, 0x65, 0x63, 0x8C, - 0x6C, 0x66, 0x5A, 0x84, 0x54, 0xF3, 0x67, 0x80, - 0xB7, 0x89, 0xCF, 0xA3, 0x5D, 0x2A, 0xF4, 0x9E, - 0x6D, 0x5F, 0x48, 0x2B, 0xFA, 0x3C, 0x86, 0x4B, - 0x0E, 0xF2, 0x9E, 0x18, 0xD2, 0xEF, 0xFF, 0x92, - 0xDB, 0x18, 0x76, 0xA2, 0x20, 0x76, 0xAB, 0x1A, - 0xAC, 0x0A, 0x73, 0x93, 0xED, 0x9E, 0x5A, 0x48 + 0x30, 0x7A, 0x4C, 0xEA, 0x41, 0x48, 0x21, 0x9B, + 0x95, 0x8E, 0xA0, 0xB7, 0x88, 0x66, 0x59, 0x23, + 0x5A, 0x4D, 0x19, 0x80, 0xB1, 0x92, 0x61, 0x08, + 0x47, 0xD8, 0x6E, 0xF3, 0x27, 0x39, 0xF9, 0x4C, + 0x3B, 0x44, 0x6C, 0x4D, 0x81, 0xD8, 0x9B, 0x8B, + 0x42, 0x2A, 0x9D, 0x07, 0x9C, 0x88, 0xB1, 0x1A, + 0xCA, 0xF3, 0x21, 0xB0, 0x14, 0x29, 0x4E, 0x18, + 0xB2, 0x96, 0xE5, 0x2F, 0x3F, 0x74, 0x4C, 0xF9, + 0x63, 0x4A, 0x4F, 0xB0, 0x1D, 0xB0, 0xD9, 0x9E, + 0xF2, 0x0A, 0x63, 0x3A, 0x55, 0x2E, 0x76, 0xA0, + 0x58, 0x5C, 0x61, 0x09, 0xF0, 0x18, 0x76, 0x8B, + 0x76, 0x3A, 0xF3, 0x67, 0x8B, 0x47, 0x80, 0x08, + 0x9C, 0x13, 0x42, 0xB9, 0x69, 0x07, 0xA2, 0x9A, + 0x1C, 0x11, 0x52, 0x1C, 0x74, 0x4C, 0x27, 0x97, + 0xD0, 0xBF, 0x2B, 0x9C, 0xCD, 0xCA, 0x61, 0x46, + 0x72, 0xB4, 0x50, 0x76, 0x77, 0x3F, 0x45, 0x8A, + 0x31, 0xEF, 0x86, 0x9B, 0xE1, 0xEB, 0x2E, 0xFE, + 0xB5, 0x0D, 0x0E, 0x37, 0x49, 0x5D, 0xC5, 0xCA, + 0x55, 0xE0, 0x75, 0x28, 0x93, 0x4F, 0x62, 0x93, + 0xC4, 0x16, 0x80, 0x27, 0xD0, 0xE5, 0x3D, 0x07, + 0xFA, 0xCC, 0x66, 0x30, 0xCB, 0x08, 0x19, 0x7E, + 0x53, 0xFB, 0x19, 0x3A, 0x17, 0x11, 0x35, 0xDC, + 0x8A, 0xD9, 0x97, 0x94, 0x02, 0xA7, 0x1B, 0x69, + 0x26, 0xBC, 0xDC, 0xDC, 0x47, 0xB9, 0x34, 0x01, + 0x91, 0x0A, 0x5F, 0xCC, 0x1A, 0x81, 0x3B, 0x68, + 0x2B, 0x09, 0xBA, 0x7A, 0x72, 0xD2, 0x48, 0x6D, + 0x6C, 0x79, 0x95, 0x16, 0x46, 0x5C, 0x14, 0x72, + 0x9B, 0x26, 0x94, 0x9B, 0x0B, 0x7C, 0xBC, 0x7C, + 0x64, 0x0F, 0x26, 0x7F, 0xED, 0x80, 0xB1, 0x62, + 0xC5, 0x1F, 0xD8, 0xE0, 0x92, 0x27, 0xC1, 0x01, + 0xD5, 0x05, 0xA8, 0xFA, 0xE8, 0xA2, 0xD7, 0x05, + 0x4E, 0x28, 0xA7, 0x8B, 0xA8, 0x75, 0x0D, 0xEC, + 0xF9, 0x05, 0x7C, 0x83, 0x97, 0x9F, 0x7A, 0xBB, + 0x08, 0x49, 0x45, 0x64, 0x80, 0x06, 0xC5, 0xB2, + 0x88, 0x04, 0xF3, 0x4E, 0x73, 0xB2, 0x38, 0x11, + 0x1A, 0x65, 0xA1, 0xF5, 0x00, 0xB1, 0xCC, 0x60, + 0x6A, 0x84, 0x8F, 0x28, 0x59, 0x07, 0x0B, 0xEB, + 0xA7, 0x57, 0x31, 0x79, 0xF3, 0x61, 0x49, 0xCF, + 0x58, 0x01, 0xBF, 0x89, 0xA1, 0xC3, 0x8C, 0xC2, + 0x78, 0x41, 0x55, 0x28, 0xD0, 0x3B, 0xDB, 0x94, + 0x3F, 0x96, 0x28, 0x0C, 0x8C, 0xC5, 0x20, 0x42, + 0xD9, 0xB9, 0x1F, 0xAA, 0x9D, 0x6E, 0xA7, 0xBC, + 0xBB, 0x7A, 0xB1, 0x89, 0x7A, 0x32, 0x66, 0x96, + 0x6F, 0x78, 0x39, 0x34, 0x26, 0xC7, 0x6D, 0x8A, + 0x49, 0x57, 0x8B, 0x98, 0xB1, 0x59, 0xEB, 0xB4, + 0x6E, 0xE0, 0xA8, 0x83, 0xA2, 0x70, 0xD8, 0x05, + 0x7C, 0xD0, 0x23, 0x1C, 0x86, 0x90, 0x6A, 0x91, + 0xDB, 0xBA, 0xDE, 0x6B, 0x24, 0x69, 0x58, 0x1E, + 0x2B, 0xCA, 0x2F, 0xEA, 0x83, 0x89, 0xF7, 0xC7, + 0x4B, 0xCD, 0x70, 0x96, 0x1E, 0xA5, 0xB9, 0x34, + 0xFB, 0xCF, 0x9A, 0x65, 0x90, 0xBF, 0x86, 0xB8, + 0xDB, 0x54, 0x88, 0x54, 0xD9, 0xA3, 0xFB, 0x30, + 0x11, 0x04, 0x33, 0xBD, 0x7A, 0x1B, 0x65, 0x9C, + 0xA8, 0x56, 0x80, 0x85, 0x63, 0x92, 0x37, 0xB3, + 0xBD, 0xC3, 0x7B, 0x7F, 0xA7, 0x16, 0xD4, 0x82, + 0xA2, 0x5B, 0x54, 0x10, 0x6B, 0x3A, 0x8F, 0x54, + 0xD3, 0xAA, 0x99, 0xB5, 0x12, 0x3D, 0xA9, 0x60, + 0x66, 0x90, 0x45, 0x92, 0xF3, 0xA5, 0x4E, 0xE2, + 0x3A, 0x79, 0x81, 0xAB, 0x60, 0x8A, 0x2F, 0x44, + 0x13, 0xCC, 0x65, 0x89, 0x46, 0xC6, 0xD7, 0x78, + 0x0E, 0xA7, 0x65, 0x64, 0x4B, 0x3C, 0xC0, 0x6C, + 0x70, 0x03, 0x4A, 0xB4, 0xEB, 0x35, 0x19, 0x12, + 0xE7, 0x71, 0x5B, 0x56, 0x75, 0x5D, 0x09, 0x02, + 0x15, 0x71, 0xBF, 0x34, 0x0A, 0xB9, 0x25, 0x98, + 0xA2, 0x4E, 0x81, 0x18, 0x93, 0x19, 0x5B, 0x96, + 0xA1, 0x62, 0x9F, 0x80, 0x41, 0xF5, 0x86, 0x58, + 0x43, 0x15, 0x61, 0xFC, 0x0A, 0xB1, 0x52, 0x92, + 0xB9, 0x13, 0xEC, 0x47, 0x3F, 0x04, 0x47, 0x9B, + 0xC1, 0x45, 0xCD, 0x4C, 0x56, 0x3A, 0x28, 0x62, + 0x35, 0x64, 0x6C, 0xD3, 0x05, 0xA9, 0xBE, 0x10, + 0x14, 0xE2, 0xC7, 0xB1, 0x30, 0xC3, 0x3E, 0xB7, + 0x7C, 0xC4, 0xA0, 0xD9, 0x78, 0x6B, 0xD6, 0xBC, + 0x2A, 0x95, 0x4B, 0xF3, 0x00, 0x57, 0x78, 0xF8, + 0x91, 0x7C, 0xE1, 0x37, 0x89, 0xBB, 0xB9, 0x62, + 0x80, 0x78, 0x58, 0xB6, 0x77, 0x31, 0x57, 0x2B, + 0x6D, 0x3C, 0x9B, 0x4B, 0x52, 0x06, 0xFA, 0xC9, + 0xA7, 0xC8, 0x96, 0x16, 0x98, 0xD8, 0x83, 0x24, + 0xA9, 0x15, 0x18, 0x68, 0x99, 0xB2, 0x99, 0x23, + 0xF0, 0x84, 0x42, 0xA3, 0xD3, 0x86, 0xBD, 0x41, + 0x6B, 0xCC, 0x9A, 0x10, 0x01, 0x64, 0xC9, 0x30, + 0xEC, 0x35, 0xEA, 0xFB, 0x6A, 0xB3, 0x58, 0x51, + 0xB6, 0xC8, 0xCE, 0x63, 0x77, 0x36, 0x6A, 0x17, + 0x5F, 0x3D, 0x75, 0x29, 0x8C, 0x51, 0x8D, 0x44, + 0x89, 0x89, 0x33, 0xF5, 0x3D, 0xEE, 0x61, 0x71, + 0x45, 0x09, 0x33, 0x79, 0xC4, 0x65, 0x9F, 0x68, + 0x58, 0x3B, 0x2B, 0x28, 0x12, 0x26, 0x66, 0xBE, + 0xC5, 0x78, 0x38, 0x99, 0x1F, 0xF1, 0x6C, 0x36, + 0x8D, 0xD2, 0x2C, 0x36, 0xE7, 0x80, 0xC9, 0x1A, + 0x35, 0x82, 0xE2, 0x5E, 0x19, 0x79, 0x4C, 0x6B, + 0xF2, 0xAB, 0x42, 0x45, 0x8A, 0x8D, 0xD7, 0x70, + 0x5D, 0xE2, 0xC2, 0xAA, 0x20, 0xC0, 0x54, 0xE8, + 0x4B, 0x3E, 0xF3, 0x50, 0x32, 0x79, 0x86, 0x26, + 0xC2, 0x48, 0x26, 0x32, 0x53, 0xA7, 0x1A, 0x11, + 0x94, 0x35, 0x71, 0x34, 0x0A, 0x97, 0x8C, 0xD0, + 0xA6, 0x02, 0xE4, 0x7D, 0xEE, 0x54, 0x0A, 0x88, + 0x14, 0xBA, 0x06, 0xF3, 0x14, 0x14, 0x79, 0x7C, + 0xDF, 0x60, 0x49, 0x58, 0x23, 0x61, 0xBB, 0xAB, + 0xA3, 0x87, 0xA8, 0x3D, 0x89, 0x91, 0x3F, 0xE4, + 0xC0, 0xC1, 0x12, 0xB9, 0x56, 0x21, 0xA4, 0xBD, + 0xA8, 0x12, 0x3A, 0x14, 0xD1, 0xA8, 0x42, 0xFB, + 0x57, 0xB8, 0x3A, 0x4F, 0xBA, 0xF3, 0x3A, 0x8E, + 0x55, 0x22, 0x38, 0xA5, 0x96, 0xAA, 0xE7, 0xA1, + 0x50, 0xD7, 0x5D, 0xA6, 0x48, 0xBC, 0x44, 0x64, + 0x49, 0x77, 0xBA, 0x1F, 0x87, 0xA4, 0xC6, 0x8A, + 0x8C, 0x4B, 0xD2, 0x45, 0xB7, 0xD0, 0x07, 0x21, + 0xF7, 0xD6, 0x4E, 0x82, 0x2B, 0x08, 0x5B, 0x90, + 0x13, 0x12, 0xEC, 0x37, 0xA8, 0x16, 0x98, 0x02, + 0x16, 0x0C, 0xCE, 0x11, 0x60, 0xF0, 0x10, 0xBE, + 0x8C, 0xBC, 0xAC, 0xE8, 0xE7, 0xB0, 0x05, 0xD7, + 0x83, 0x92, 0x34, 0xA7, 0x07, 0x86, 0x83, 0x09, + 0xD0, 0x37, 0x84, 0xB4, 0x27, 0x3B, 0x1C, 0x8A, + 0x16, 0x01, 0x33, 0xED, 0x29, 0x81, 0x84, 0x70, + 0x46, 0x25, 0xF2, 0x9C, 0xFA, 0x08, 0x6D, 0x13, + 0x26, 0x3E, 0xE5, 0x89, 0x91, 0x23, 0xC5, 0x96, + 0xBA, 0x78, 0x8E, 0x5C, 0x54, 0xA8, 0xE9, 0xBA, + 0x82, 0x9B, 0x8A, 0x9D, 0x90, 0x4B, 0xC4, 0xBC, + 0x0B, 0xBE, 0xA7, 0x6B, 0xC5, 0x3F, 0xF8, 0x11, + 0x21, 0x45, 0x98, 0x47, 0x2C, 0x9C, 0x20, 0x2B, + 0x73, 0xEF, 0xF0, 0x35, 0xDC, 0x09, 0x70, 0x3A, + 0xF7, 0xBF, 0x1B, 0xAB, 0xAA, 0xC7, 0x31, 0x93, + 0xCB, 0x46, 0x11, 0x7A, 0x7C, 0x94, 0x92, 0xA4, + 0x3F, 0xC9, 0x57, 0x89, 0xA9, 0x24, 0xC5, 0x91, + 0x27, 0x87, 0xB2, 0xE2, 0x09, 0x0E, 0xBB, 0xCF, + 0xD3, 0x79, 0x62, 0x21, 0xF0, 0x6D, 0xEB, 0xF9, + 0xCF, 0x70, 0xE0, 0x56, 0xB8, 0xB9, 0x16, 0x1D, + 0x63, 0x47, 0xF4, 0x73, 0x35, 0xF3, 0xE1, 0x77, + 0x6D, 0xA4, 0xBB, 0x87, 0xC1, 0x5C, 0xC8, 0x26, + 0x14, 0x6F, 0xF0, 0x24, 0x9A, 0x41, 0x3B, 0x45, + 0xAA, 0x93, 0xA8, 0x05, 0x19, 0x6E, 0xA4, 0x53, + 0x11, 0x4B, 0x52, 0x4E, 0x31, 0x0A, 0xED, 0xAA, + 0x46, 0xE3, 0xB9, 0x96, 0x42, 0x36, 0x87, 0x82, + 0x56, 0x6D, 0x04, 0x9A, 0x72, 0x6D, 0x6C, 0xCA, + 0x91, 0x09, 0x93, 0xAE, 0xD6, 0x21, 0xD0, 0x14, + 0x9E, 0xA5, 0x88, 0xA9, 0xAB, 0xD9, 0x09, 0xDB, + 0xB6, 0x9A, 0xA2, 0x28, 0x29, 0xD9, 0xB8, 0x3A, + 0xDA, 0x22, 0x09, 0xA6, 0xC2, 0x65, 0x9F, 0x21, + 0x69, 0xD6, 0x68, 0xB9, 0x31, 0x48, 0x42, 0xC6, + 0xE2, 0x2A, 0x74, 0x95, 0x8B, 0x4C, 0x25, 0xBB, + 0xDC, 0xD2, 0x93, 0xD9, 0x9C, 0xB6, 0x09, 0xD8, + 0x66, 0x74, 0x9A, 0x48, 0x5D, 0xFB, 0x56, 0x02, + 0x48, 0x83, 0xCF, 0x54, 0x65, 0xDB, 0xA0, 0x36, + 0x32, 0x06, 0x58, 0x7F, 0x45, 0x59, 0x7F, 0x89, + 0x00, 0x2F, 0xB8, 0x60, 0x72, 0x32, 0x13, 0x8E, + 0x03, 0xB2, 0xA8, 0x94, 0x52, 0x5F, 0x26, 0x53, + 0x70, 0x05, 0x4B, 0x48, 0x86, 0x36, 0x14, 0x47, + 0x2B, 0x95, 0xD0, 0xA2, 0x30, 0x34, 0x42, 0xE3, + 0x78, 0xB0, 0xDD, 0x1C, 0x75, 0xAC, 0xBA, 0xB9, + 0x71, 0xA9, 0xA8, 0xD1, 0x28, 0x1C, 0x79, 0x61, + 0x3A, 0xCE, 0xC6, 0x93, 0x3C, 0x37, 0x7B, 0x3C, + 0x57, 0x8C, 0x2A, 0x61, 0xA1, 0xEC, 0x18, 0x1B, + 0x10, 0x12, 0x97, 0xA3, 0x7C, 0xC5, 0x19, 0x7B, + 0x29, 0x42, 0xF6, 0xA0, 0xE4, 0x70, 0x4C, 0x0E, + 0xC6, 0x35, 0x40, 0x48, 0x1B, 0x9F, 0x15, 0x9D, + 0xC2, 0x55, 0xB5, 0x9B, 0xB5, 0x5D, 0xF4, 0x96, + 0xAE, 0x54, 0x21, 0x7B, 0x76, 0x89, 0xBD, 0x51, + 0xDB, 0xA0, 0x38, 0x3A, 0x3D, 0x72, 0xD8, 0x52, + 0xFF, 0xCA, 0x76, 0xDF, 0x05, 0xB6, 0x6E, 0xEC, + 0xCB, 0xD4, 0x7B, 0xC5, 0x30, 0x40, 0x81, 0x76, + 0x28, 0xC7, 0x1E, 0x36, 0x1D, 0x6A, 0xF8, 0x89, + 0x08, 0x49, 0x16, 0xB4, 0x08, 0xA4, 0x66, 0xC9, + 0x6E, 0x70, 0x86, 0xC4, 0xA6, 0x0A, 0x10, 0xFC, + 0xF7, 0x53, 0x7B, 0xB9, 0x4A, 0xFB, 0xCC, 0x7D, + 0x43, 0x75, 0x90, 0x91, 0x9C, 0x28, 0x65, 0x0C, + 0x4F, 0x23, 0x68, 0x25, 0x92, 0x26, 0xA9, 0xBF, + 0xDA, 0x3A, 0x3A, 0x0B, 0xA1, 0xB5, 0x08, 0x7D, + 0x9D, 0x76, 0x44, 0x2F, 0xD7, 0x86, 0xC6, 0xF8, + 0x1C, 0x68, 0xC0, 0x36, 0x0D, 0x71, 0x94, 0xD7, + 0x07, 0x2C, 0x45, 0x33, 0xAE, 0xA8, 0x6C, 0x2D, + 0x1F, 0x8C, 0x0A, 0x27, 0x69, 0x60, 0x66, 0xF6, + 0xCF, 0xD1, 0x10, 0x03, 0xF7, 0x97, 0x27, 0x0B, + 0x32, 0x38, 0x97, 0x13, 0xCF, 0xFA, 0x09, 0x3D, + 0x99, 0x1B, 0x63, 0x84, 0x4C, 0x38, 0x5E, 0x72, + 0x27, 0x7F, 0x16, 0x6F, 0x5A, 0x39, 0x34, 0xD6, + 0xBB, 0x89, 0xA4, 0x78, 0x8D, 0xE2, 0x83, 0x21, + 0xDE, 0xFC, 0x74, 0x57, 0xAB, 0x48, 0x4B, 0xD3, + 0x09, 0x86, 0xDC, 0x1D, 0xAB, 0x30, 0x08, 0xCD, + 0x7B, 0x22, 0xF6, 0x97, 0x02, 0xFA, 0xBB, 0x9A, + 0x10, 0x45, 0x40, 0x7D, 0xA4, 0x79, 0x1C, 0x35, + 0x90, 0xFF, 0x59, 0x9D, 0x81, 0xD6, 0x88, 0xCF, + 0xA7, 0xCC, 0x12, 0xA6, 0x8C, 0x50, 0xF5, 0x1A, + 0x10, 0x09, 0x41, 0x1B, 0x44, 0x85, 0x0F, 0x90, + 0x15, 0xDC, 0x84, 0xA9, 0x3B, 0x17, 0xC7, 0xA2, + 0x07, 0x55, 0x2C, 0x66, 0x1E, 0xA9, 0x83, 0x8E, + 0x31, 0xB9, 0x5E, 0xAD, 0x54, 0x62, 0x48, 0xE5, + 0x6B, 0xE7, 0xA5, 0x13, 0x05, 0x05, 0x26, 0x87, + 0x71, 0x19, 0x98, 0x80, 0xA1, 0x41, 0x77, 0x1A, + 0x9E, 0x47, 0xAC, 0xFE, 0xD5, 0x90, 0xCB, 0x3A, + 0xA7, 0xCB, 0x7C, 0x5F, 0x74, 0x91, 0x1D, 0x89, + 0x12, 0xC2, 0x9D, 0x62, 0x33, 0xF4, 0xD5, 0x3B, + 0xC6, 0x41, 0x39, 0xE2, 0xF5, 0x5B, 0xE7, 0x55, + 0x07, 0xDD, 0x77, 0x86, 0x8E, 0x38, 0x4A, 0xEC, + 0x58, 0x1F, 0x3F, 0x41, 0x1D, 0xB1, 0xA7, 0x42, + 0x97, 0x2D, 0x3E, 0xBF, 0xD3, 0x31, 0x5C, 0x84, + 0xA5, 0xAD, 0x63, 0xA0, 0xE7, 0x5C, 0x8B, 0xCA, + 0x3E, 0x30, 0x41, 0xE0, 0x5D, 0x90, 0x67, 0xAF, + 0xF3, 0xB1, 0x24, 0x4F, 0x76, 0x3E, 0x79, 0x83 }; static const byte seed_1024[KYBER_ENC_RAND_SZ] = { - 0x03, 0x4F, 0xF1, 0x4A, 0x56, 0x24, 0x9C, 0x25, - 0x21, 0xD4, 0x27, 0x9E, 0xBA, 0x3D, 0x04, 0x93, - 0x1C, 0xC8, 0x92, 0xBB, 0xC4, 0x50, 0x02, 0xB5, - 0xB3, 0x3D, 0x9F, 0x01, 0x88, 0xAC, 0xBA, 0xF6 + 0x59, 0xC5, 0x15, 0x4C, 0x04, 0xAE, 0x43, 0xAA, + 0xFF, 0x32, 0x70, 0x0F, 0x08, 0x17, 0x00, 0x38, + 0x9D, 0x54, 0xBE, 0xC4, 0xC3, 0x7C, 0x08, 0x8B, + 0x1C, 0x53, 0xF6, 0x62, 0x12, 0xB1, 0x2C, 0x72 }; static const byte c_1024[KYBER1024_CIPHER_TEXT_SIZE] = { - 0x8D, 0x4E, 0x2C, 0xB3, 0x9F, 0xFD, 0xE4, 0x31, - 0x1A, 0xEE, 0xDB, 0x23, 0x38, 0xBF, 0x58, 0xCE, - 0x11, 0xFA, 0xDA, 0xBD, 0xC9, 0x81, 0x3A, 0x32, - 0x19, 0x30, 0xF4, 0x67, 0x56, 0xDD, 0x13, 0xA8, - 0xE7, 0x91, 0x9F, 0xAC, 0x4F, 0x59, 0xCC, 0x9F, - 0x8B, 0x91, 0xC8, 0x33, 0xB3, 0xB3, 0xF9, 0x1A, - 0xDC, 0x6F, 0x9F, 0xBD, 0xBD, 0xE2, 0xF7, 0xDA, - 0xE8, 0x84, 0x1B, 0xE5, 0x23, 0x8B, 0x98, 0x50, - 0xA5, 0xEE, 0xBE, 0x67, 0x5D, 0xDE, 0xF4, 0x2A, - 0x93, 0x14, 0xF6, 0x90, 0x59, 0x5D, 0x51, 0x52, - 0x3E, 0x81, 0x17, 0xF2, 0x22, 0x66, 0x03, 0x4F, - 0x09, 0xB7, 0x7D, 0x99, 0x1E, 0xE5, 0x75, 0x80, - 0x2A, 0xFE, 0x44, 0x63, 0x74, 0xEB, 0x3D, 0x9E, - 0x1B, 0xEB, 0x8F, 0x25, 0x04, 0x9C, 0x6E, 0xFA, - 0x96, 0x32, 0x73, 0x66, 0xC0, 0x24, 0xCD, 0xFB, - 0xE8, 0xDC, 0x27, 0xEF, 0x56, 0x49, 0x2C, 0x90, - 0x40, 0x9E, 0x87, 0x13, 0x9C, 0x60, 0x88, 0x48, - 0x8E, 0x17, 0xB8, 0x2D, 0x15, 0x56, 0xC2, 0x51, - 0x31, 0xAC, 0xEE, 0x7D, 0xAF, 0xFE, 0x2D, 0x43, - 0x7C, 0xEC, 0x34, 0x41, 0xBB, 0xBB, 0xAB, 0x80, - 0xC4, 0xBF, 0x17, 0x7E, 0x65, 0x3A, 0xE0, 0x83, - 0x1C, 0x9B, 0x4C, 0xEB, 0x70, 0x50, 0x57, 0x27, - 0xD6, 0x3C, 0x4D, 0x47, 0x4F, 0xED, 0xC5, 0x20, - 0x19, 0xBE, 0x41, 0x1C, 0x9A, 0x43, 0xB8, 0x71, - 0x70, 0xF5, 0x89, 0x3F, 0x06, 0xEC, 0xD8, 0xD7, - 0x82, 0x06, 0x3D, 0xF8, 0x93, 0xA1, 0xB6, 0x82, - 0x24, 0x6D, 0x1C, 0x64, 0xF8, 0xF5, 0xA8, 0xC6, - 0xFC, 0xDF, 0x07, 0x92, 0x7F, 0x4D, 0x5B, 0x7A, - 0x39, 0x7F, 0xBC, 0xBD, 0x07, 0x50, 0x45, 0xDF, - 0x2C, 0x4A, 0x36, 0xF5, 0x30, 0x4C, 0x95, 0xF4, - 0x4A, 0xF9, 0x27, 0xAE, 0x91, 0x66, 0x42, 0x0B, - 0x39, 0x44, 0x87, 0x94, 0xF5, 0xB3, 0xC3, 0x52, - 0x27, 0xC3, 0xC9, 0xDF, 0x92, 0x56, 0x02, 0xA1, - 0xAC, 0x98, 0xF8, 0x51, 0xAA, 0xDB, 0x65, 0xC9, - 0x3F, 0xDD, 0x63, 0x27, 0xAE, 0xD8, 0xAE, 0x41, - 0x29, 0x72, 0x44, 0x36, 0xA3, 0x3A, 0xA0, 0x8A, - 0xA5, 0x66, 0x08, 0x85, 0x5F, 0xF8, 0x0A, 0xAA, - 0x42, 0xAC, 0xA4, 0x56, 0x2B, 0x2D, 0x78, 0xDB, - 0xBD, 0x2F, 0x91, 0xAE, 0xF2, 0x51, 0x56, 0x6B, - 0x8C, 0x6F, 0x98, 0x21, 0x37, 0x84, 0xC9, 0x9D, - 0xD7, 0xD7, 0x1F, 0x49, 0x55, 0x64, 0xC9, 0x08, - 0x50, 0x1E, 0x35, 0xE3, 0xBF, 0xBB, 0x67, 0x5C, - 0xCB, 0x66, 0x63, 0x52, 0x87, 0xCB, 0x64, 0x66, - 0xE6, 0xE3, 0x8E, 0xA8, 0xAB, 0x11, 0xCE, 0x7E, - 0xC6, 0x0B, 0xED, 0x86, 0x20, 0xB3, 0xDC, 0xD6, - 0x94, 0x3D, 0x12, 0x79, 0xA4, 0x1F, 0x93, 0xA8, - 0x7F, 0xA3, 0x59, 0xE5, 0x13, 0xC8, 0x1D, 0xE9, - 0x18, 0xDA, 0x88, 0x32, 0x2B, 0x1B, 0x08, 0x81, - 0x40, 0xE0, 0x74, 0xBE, 0x39, 0xBC, 0x17, 0xE3, - 0xC5, 0x1A, 0xB7, 0x19, 0xDF, 0x6E, 0x42, 0x6D, - 0x64, 0xFF, 0x94, 0xB8, 0x66, 0x2B, 0x9D, 0xD2, - 0x6A, 0x32, 0xA3, 0xC3, 0x68, 0x7B, 0xF9, 0x29, - 0x4C, 0x53, 0x7A, 0x22, 0x68, 0xF9, 0xDE, 0xD3, - 0x80, 0xCC, 0x8A, 0x0F, 0x11, 0x27, 0xEE, 0x5A, - 0x32, 0x2B, 0x4D, 0xF2, 0x4D, 0x87, 0xFB, 0xCE, - 0x76, 0xF5, 0x60, 0xB0, 0x37, 0xC6, 0x59, 0xB6, - 0xFB, 0x15, 0xC1, 0x56, 0x07, 0x1A, 0xED, 0xC2, - 0x6E, 0xF1, 0x11, 0x40, 0xDE, 0x88, 0xD0, 0x8D, - 0x46, 0x3E, 0xA0, 0xEA, 0xF0, 0x80, 0xA0, 0xB2, - 0xE6, 0x27, 0xD9, 0xFF, 0x1D, 0x56, 0xC5, 0x02, - 0x33, 0x55, 0x24, 0x26, 0x97, 0x27, 0xA0, 0x32, - 0xDA, 0xCD, 0x16, 0x54, 0x3A, 0xDA, 0x83, 0x42, - 0xCD, 0x6C, 0xB4, 0x0E, 0x72, 0x28, 0x59, 0x2C, - 0x35, 0x74, 0xD9, 0x82, 0xE0, 0xB9, 0x14, 0x5E, - 0xB8, 0x65, 0xDB, 0x2E, 0xE7, 0x81, 0x07, 0x26, - 0xA9, 0x16, 0xB8, 0x37, 0xCA, 0x4F, 0x14, 0xC2, - 0xCB, 0x9E, 0x95, 0x1B, 0xDE, 0x76, 0xBE, 0x16, - 0xB8, 0xB1, 0xCD, 0xC2, 0xEE, 0xCD, 0xC0, 0x69, - 0x49, 0xB8, 0xBE, 0xB1, 0x17, 0x86, 0xB8, 0xF2, - 0x5F, 0x4C, 0x9A, 0xFA, 0x55, 0x97, 0xCE, 0xB1, - 0xD8, 0x5F, 0xC9, 0xB9, 0xC9, 0x1D, 0xC6, 0x19, - 0x66, 0xF3, 0x96, 0x09, 0x1E, 0x54, 0xC9, 0x6C, - 0x97, 0xA4, 0x30, 0x0E, 0x99, 0xFD, 0x9F, 0x75, - 0x2C, 0x0B, 0xEF, 0x5D, 0x88, 0xCA, 0xFB, 0xDC, - 0xB3, 0x99, 0x3F, 0xCF, 0x6C, 0x7A, 0x8C, 0x55, - 0x19, 0xFC, 0xEC, 0xB6, 0xA7, 0x91, 0x17, 0xE9, - 0xB5, 0x21, 0x68, 0x01, 0x97, 0xD8, 0xA9, 0x1A, - 0xB7, 0x5F, 0x18, 0x14, 0xDB, 0xC5, 0x80, 0x75, - 0xEF, 0x4F, 0x07, 0x98, 0x7A, 0xBC, 0x56, 0xA7, - 0x5D, 0xA4, 0x41, 0x6E, 0xDB, 0x9D, 0x6F, 0x3D, - 0x77, 0x1A, 0xD3, 0x40, 0xD5, 0xCB, 0xCF, 0xC0, - 0xE5, 0x71, 0xFA, 0x70, 0xAA, 0xC1, 0xC7, 0xDB, - 0xBB, 0x5F, 0x5C, 0x5E, 0x1D, 0x8B, 0x10, 0x36, - 0xF5, 0xA6, 0xFC, 0xFD, 0x06, 0x25, 0xAB, 0x5B, - 0xBD, 0xA5, 0x71, 0x83, 0x9C, 0x58, 0x35, 0xDD, - 0x69, 0x79, 0x77, 0x8F, 0x59, 0xD3, 0x48, 0x68, - 0x4F, 0xA6, 0xCF, 0xC2, 0xA6, 0x25, 0x35, 0xB4, - 0x7F, 0xAD, 0x7F, 0x97, 0xB5, 0x21, 0x88, 0x72, - 0xD5, 0x2D, 0xCA, 0xCE, 0x9D, 0x3C, 0x1B, 0x11, - 0x62, 0x8D, 0x35, 0x2A, 0xD8, 0x21, 0x90, 0x0F, - 0x44, 0xE1, 0x4B, 0x64, 0x7F, 0x6B, 0xFA, 0x70, - 0xF6, 0x46, 0xB5, 0xC7, 0xAF, 0x53, 0x13, 0x17, - 0x7A, 0x10, 0x95, 0x49, 0x44, 0x22, 0x91, 0x53, - 0xA4, 0x49, 0xFC, 0xF8, 0x9A, 0x62, 0x63, 0xBD, - 0xBF, 0x85, 0x56, 0xE9, 0x81, 0xE5, 0xD6, 0x25, - 0x13, 0x40, 0xF9, 0xF4, 0x3C, 0x66, 0x92, 0x03, - 0x0F, 0xB9, 0x60, 0x5B, 0xB9, 0x9F, 0x33, 0xE9, - 0x6F, 0x06, 0xD1, 0xE4, 0xE6, 0xAB, 0xBE, 0x65, - 0xE1, 0x46, 0x96, 0xD5, 0x30, 0xF1, 0xB5, 0x25, - 0xFF, 0xF8, 0x7D, 0x54, 0xC1, 0xAC, 0x2F, 0x5E, - 0x96, 0x4D, 0x46, 0xEE, 0x37, 0xF4, 0x04, 0x5B, - 0x54, 0xE6, 0x09, 0x8F, 0x76, 0xB2, 0x8E, 0xAF, - 0x69, 0xE9, 0x98, 0x88, 0x8D, 0x25, 0xE0, 0x21, - 0xA5, 0x38, 0xFD, 0x19, 0x56, 0xA7, 0xFC, 0x30, - 0xAE, 0x83, 0xF8, 0xBA, 0x99, 0x47, 0xF8, 0x64, - 0xFD, 0x59, 0x73, 0x1A, 0x6F, 0xBB, 0x40, 0x2A, - 0xF2, 0x99, 0x0E, 0x1E, 0xD2, 0xD5, 0x6B, 0xF6, - 0x2A, 0xA6, 0xCE, 0xAE, 0x6F, 0x76, 0x9D, 0x2D, - 0x0C, 0x6C, 0x31, 0x3D, 0x7A, 0xAF, 0x97, 0x4E, - 0x69, 0xDC, 0x02, 0xCC, 0x43, 0x18, 0xB9, 0x45, - 0x7B, 0x8C, 0xC4, 0x06, 0x56, 0xAB, 0x7B, 0x61, - 0x34, 0xDE, 0x3F, 0x98, 0x01, 0xCE, 0x01, 0x96, - 0x99, 0xCE, 0x85, 0x5E, 0xBE, 0x9C, 0x6C, 0x02, - 0xFD, 0x08, 0x50, 0x6F, 0x00, 0x4A, 0x4E, 0xED, - 0x2C, 0xA1, 0x66, 0xC9, 0x54, 0xC7, 0xDB, 0x88, - 0x10, 0x70, 0x0C, 0xA6, 0x71, 0xEF, 0x37, 0x2A, - 0x29, 0x0B, 0x00, 0xE1, 0xBF, 0xBB, 0x97, 0xE3, - 0xE6, 0x74, 0xD3, 0xDC, 0xCC, 0x57, 0xCE, 0x59, - 0xF4, 0x65, 0xB1, 0x48, 0x8F, 0xF7, 0x6F, 0x62, - 0x39, 0x00, 0x8B, 0xE3, 0xE7, 0x61, 0xEF, 0x9C, - 0x11, 0x3D, 0xF0, 0x10, 0x7B, 0x8E, 0xEA, 0xE3, - 0xFE, 0xBA, 0x55, 0xB3, 0x5E, 0x4C, 0x1D, 0xA3, - 0xB6, 0xC8, 0x7A, 0x8D, 0x20, 0x11, 0x0E, 0x1C, - 0xD7, 0x71, 0xCC, 0xBC, 0x30, 0xDF, 0xF7, 0x61, - 0xE6, 0x03, 0xD4, 0x88, 0xE5, 0x5B, 0x85, 0x3A, - 0xAE, 0x7D, 0xAA, 0xDF, 0x2A, 0x00, 0x7B, 0x83, - 0x93, 0xDF, 0x08, 0xAF, 0x53, 0x4F, 0x9F, 0x53, - 0xA7, 0x37, 0x57, 0xBA, 0xBE, 0x21, 0xC8, 0x64, - 0x26, 0xCF, 0x05, 0x8E, 0xCA, 0x81, 0x7E, 0xF2, - 0x37, 0xBF, 0xC5, 0x8A, 0xC2, 0x98, 0xFB, 0xF2, - 0xA1, 0x48, 0x1C, 0x4D, 0x12, 0xDC, 0xF1, 0xB7, - 0x37, 0xFD, 0x63, 0x97, 0x69, 0xA2, 0x53, 0x1E, - 0xF9, 0x31, 0xA3, 0x62, 0xA4, 0x44, 0x56, 0xEE, - 0x2C, 0xA4, 0x85, 0x98, 0xB4, 0x62, 0x59, 0xFC, - 0xC9, 0x77, 0x07, 0x6C, 0x59, 0xFA, 0x4E, 0x29, - 0x54, 0xE9, 0x96, 0x7D, 0xA4, 0x5D, 0xA7, 0xCB, - 0xF7, 0x86, 0x33, 0xEC, 0x59, 0xC4, 0x63, 0xFE, - 0x48, 0xA8, 0x3B, 0x80, 0x1A, 0x54, 0xDB, 0x3F, - 0xEA, 0xB4, 0x45, 0xA3, 0x57, 0xE4, 0x18, 0xB0, - 0x65, 0x3F, 0x29, 0x40, 0xB2, 0xB7, 0x13, 0x81, - 0xB2, 0xDF, 0x9E, 0xCF, 0x81, 0x00, 0x84, 0x8E, - 0x29, 0x12, 0xF4, 0xBD, 0x50, 0x3A, 0xF0, 0x75, - 0xAA, 0xAF, 0x36, 0xC1, 0x36, 0xA4, 0x13, 0xC9, - 0x5B, 0xE2, 0xF2, 0x5A, 0x6D, 0x29, 0x19, 0x76, - 0xCD, 0x66, 0xA2, 0x76, 0x43, 0x53, 0x7E, 0x35, - 0xE1, 0xDF, 0x89, 0xB1, 0xE4, 0x94, 0xB3, 0x6B, - 0x08, 0xF3, 0xD0, 0x19, 0x6C, 0xD7, 0xE9, 0x0B, - 0xA5, 0xBB, 0x21, 0x00, 0x9F, 0x37, 0xA8, 0x43, - 0x19, 0x9E, 0x08, 0xDD, 0x95, 0xCA, 0x49, 0x48, - 0xC5, 0x33, 0xCB, 0x26, 0x3B, 0x5D, 0x40, 0x5A, - 0xF2, 0xFA, 0x11, 0x99, 0x81, 0xA8, 0x53, 0x6E, - 0xB7, 0x1C, 0x88, 0x22, 0x6C, 0x41, 0x53, 0x4C, - 0x26, 0x87, 0xBF, 0x1E, 0xED, 0x34, 0x75, 0xE8, - 0x48, 0x8B, 0xDE, 0x90, 0x9A, 0x93, 0xD4, 0xDB, - 0x55, 0xB6, 0xE8, 0x34, 0xB5, 0xE7, 0x86, 0x0A, - 0xA9, 0x8F, 0xD8, 0xBC, 0xB1, 0x3A, 0xB0, 0x77, - 0xB7, 0xBF, 0xD7, 0x5B, 0x35, 0xFA, 0x39, 0x3E, - 0x93, 0xE3, 0xBF, 0xB4, 0xB9, 0xBA, 0x1D, 0xAA, - 0x74, 0x65, 0xFD, 0x5B, 0x23, 0xA5, 0xB4, 0xCD, - 0x17, 0x16, 0xD4, 0xBD, 0xF7, 0xB8, 0xD5, 0x57, - 0x4B, 0x15, 0x6D, 0xB8, 0x7D, 0x8D, 0xE1, 0xE5, - 0x26, 0xC9, 0x7F, 0x8E, 0xB2, 0x87, 0xBD, 0x97, - 0xEE, 0xEE, 0xEF, 0x07, 0x4D, 0xBC, 0xB2, 0xC4, - 0xDB, 0x51, 0xA4, 0xEF, 0xF1, 0xFA, 0x7F, 0xFF, - 0x32, 0x8A, 0x57, 0x2D, 0x72, 0x70, 0x01, 0x71, - 0x08, 0xAC, 0xE2, 0xED, 0x25, 0x09, 0x3D, 0xA5, - 0x35, 0xC7, 0xA2, 0x6D, 0x3B, 0x91, 0x2A, 0xA5, - 0x7F, 0xB3, 0x22, 0xE5, 0x3B, 0xB2, 0x22, 0xE9, - 0x4E, 0x7C, 0xF6, 0x8C, 0xD8, 0xA2, 0x1A, 0xD7, - 0xC0, 0x6A, 0x4A, 0xF9, 0x78, 0xED, 0x1D, 0xEB, - 0x10, 0xE3, 0xF2, 0x41, 0x2A, 0xC6, 0x54, 0x3C, - 0x18, 0x20, 0x68, 0xEF, 0xFB, 0xD8, 0x7F, 0x31, - 0x76, 0x5F, 0x5A, 0xE6, 0x81, 0xEE, 0x8B, 0x2E, - 0x9A, 0xEB, 0x5B, 0xC9, 0x40, 0xA9, 0x4E, 0xC0, - 0xEE, 0xF5, 0xBE, 0xF7, 0x48, 0x74, 0x16, 0x9E, - 0xAB, 0xEC, 0xF1, 0x51, 0x25, 0x65, 0xC5, 0x1E, - 0xA5, 0x87, 0x21, 0xDD, 0x3A, 0xF1, 0x69, 0x03, - 0x65, 0xDB, 0x22, 0xE1, 0x87, 0x7F, 0x2A, 0x5C, - 0x01, 0x72, 0x3F, 0x69, 0xB7, 0x72, 0x52, 0x77, - 0xAE, 0x4E, 0x9E, 0xFA, 0xCD, 0x3A, 0xFA, 0x5A, - 0xDC, 0xAF, 0x38, 0x57, 0x77, 0xE7, 0xCE, 0x10, - 0xF9, 0x56, 0xB4, 0x64, 0x2C, 0x6F, 0xC1, 0xC9, - 0x78, 0x08, 0x99, 0x3E, 0xFD, 0x99, 0x4C, 0xA6, - 0x5C, 0x75, 0xF4, 0x59, 0xAC, 0x58, 0x72, 0xF8, - 0x24, 0x88, 0xC5, 0x7F, 0xB7, 0xAF, 0x9A, 0xB9, - 0x69, 0xD5, 0xE3, 0x69, 0xC1, 0x6D, 0x0B, 0x2B, - 0xF7, 0x80, 0x0B, 0x93, 0x8D, 0x67, 0x84, 0xC7, - 0xF6, 0x4D, 0x0C, 0x55, 0xCA, 0x77, 0x94, 0x65, - 0x49, 0x38, 0x94, 0x9E, 0x14, 0x21, 0x70, 0x55, - 0xD3, 0x41, 0x01, 0xF9, 0x41, 0x7D, 0x37, 0x0A, - 0x8A, 0xDD, 0x72, 0xFC, 0x0B, 0x57, 0x66, 0xEC, - 0x1D, 0x8A, 0xDD, 0xD7, 0x02, 0x33, 0x4A, 0x2A, - 0xC2, 0x77, 0x09, 0xC5, 0xAC, 0x5A, 0xE5, 0x60, - 0x1D, 0xBA, 0x95, 0x2B, 0xE2, 0x58, 0xD9, 0x33, - 0x6D, 0xF3, 0xE0, 0xF6, 0x58, 0x78, 0xA8, 0x58, - 0x61, 0x32, 0x58, 0xFB, 0x5E, 0x47, 0x94, 0x1B + 0xE2, 0xD5, 0xFD, 0x4C, 0x13, 0xCE, 0xA0, 0xB5, + 0x2D, 0x87, 0x4F, 0xEA, 0x90, 0x12, 0xF3, 0xA5, + 0x17, 0x43, 0xA1, 0x09, 0x37, 0x10, 0xBB, 0xF2, + 0x39, 0x50, 0xF9, 0x14, 0x7A, 0x47, 0x2E, 0xE5, + 0x53, 0x39, 0x28, 0xA2, 0xF4, 0x6D, 0x59, 0x2F, + 0x35, 0xDA, 0x8B, 0x4F, 0x75, 0x8C, 0x89, 0x3B, + 0x0D, 0x7B, 0x98, 0x94, 0x8B, 0xE4, 0x47, 0xB1, + 0x7C, 0xB2, 0xAE, 0x58, 0xAF, 0x8A, 0x48, 0x9D, + 0xDD, 0x92, 0x32, 0xB9, 0x9B, 0x1C, 0x0D, 0x2D, + 0xE7, 0x7C, 0xAA, 0x47, 0x2B, 0xC3, 0xBB, 0xD4, + 0xA7, 0xC6, 0x0D, 0xBF, 0xDC, 0xA9, 0x2E, 0xBF, + 0x3A, 0x1C, 0xE1, 0xC2, 0x2D, 0xAD, 0x13, 0xE8, + 0x87, 0x00, 0x4E, 0x29, 0x24, 0xFD, 0x22, 0x65, + 0x6F, 0x5E, 0x50, 0x87, 0x91, 0xDE, 0x06, 0xD8, + 0x5E, 0x1A, 0x14, 0x26, 0x80, 0x8E, 0xD9, 0xA8, + 0x9F, 0x6E, 0x2F, 0xD3, 0xC2, 0x45, 0xD4, 0x75, + 0x8B, 0x22, 0xB0, 0x2C, 0xAD, 0xE3, 0x3B, 0x60, + 0xFC, 0x88, 0x9A, 0x33, 0xFC, 0x44, 0x47, 0xED, + 0xEB, 0xBF, 0xD4, 0x53, 0x0D, 0xE8, 0x65, 0x96, + 0xA3, 0x37, 0x89, 0xD5, 0xDB, 0xA6, 0xE6, 0xEC, + 0x9F, 0x89, 0x87, 0x9A, 0xF4, 0xBE, 0x49, 0x09, + 0xA6, 0x90, 0x17, 0xC9, 0xBB, 0x7A, 0x5E, 0x31, + 0x81, 0x5E, 0xA5, 0xF1, 0x32, 0xEE, 0xC4, 0x98, + 0x4F, 0xAA, 0x7C, 0xCF, 0x59, 0x4D, 0xD0, 0x0D, + 0x4D, 0x84, 0x87, 0xE4, 0x56, 0x21, 0xAF, 0x8F, + 0x6E, 0x33, 0x05, 0x51, 0x43, 0x9C, 0x93, 0xEC, + 0x07, 0x8A, 0x7A, 0x3C, 0xC1, 0x59, 0x4A, 0xF9, + 0x1F, 0x84, 0x17, 0x37, 0x5F, 0xD6, 0x08, 0x8C, + 0xEB, 0x5E, 0x85, 0xC6, 0x70, 0x99, 0x09, 0x1B, + 0xAC, 0x11, 0x49, 0x8A, 0x0D, 0x71, 0x14, 0x55, + 0xF5, 0xE0, 0xD9, 0x5C, 0xD7, 0xBB, 0xE5, 0xCD, + 0xD8, 0xFE, 0xCB, 0x31, 0x9E, 0x68, 0x53, 0xC2, + 0x3C, 0x9B, 0xE2, 0xC7, 0x63, 0xDF, 0x57, 0x86, + 0x66, 0xC4, 0x0A, 0x40, 0xA8, 0x74, 0x86, 0xE4, + 0x6B, 0xA8, 0x71, 0x61, 0x46, 0x19, 0x29, 0x04, + 0x51, 0x0A, 0x6D, 0xC5, 0x9D, 0xA8, 0x02, 0x58, + 0x25, 0x28, 0x3D, 0x68, 0x4D, 0xB9, 0x14, 0x10, + 0xB4, 0xF1, 0x2C, 0x6D, 0x8F, 0xBD, 0x0A, 0xDD, + 0x75, 0xD3, 0x09, 0x89, 0x18, 0xCB, 0x04, 0xAC, + 0x7B, 0xC4, 0xDB, 0x0D, 0x6B, 0xCD, 0xF1, 0x19, + 0x4D, 0xD8, 0x62, 0x92, 0xE0, 0x5B, 0x7B, 0x86, + 0x30, 0x62, 0x5B, 0x58, 0x9C, 0xC5, 0x09, 0xD2, + 0x15, 0xBB, 0xD0, 0x6A, 0x2E, 0x7C, 0x66, 0xF4, + 0x24, 0xCD, 0xF8, 0xC4, 0x0A, 0xC6, 0xC1, 0xE5, + 0xAE, 0x6C, 0x96, 0x4B, 0x7D, 0x9E, 0x92, 0xF9, + 0x5F, 0xC5, 0xC8, 0x85, 0x22, 0x81, 0x62, 0x8B, + 0x81, 0xB9, 0xAF, 0xAB, 0xC7, 0xF0, 0x3B, 0xE3, + 0xF6, 0x2E, 0x80, 0x47, 0xBB, 0x88, 0xD0, 0x1C, + 0x68, 0x68, 0x7B, 0x8D, 0xD4, 0xFE, 0x63, 0x82, + 0x00, 0x62, 0xB6, 0x78, 0x8A, 0x53, 0x72, 0x90, + 0x53, 0x82, 0x6E, 0xD3, 0xB7, 0xC7, 0xEF, 0x82, + 0x41, 0xE1, 0x9C, 0x85, 0x11, 0x7B, 0x3C, 0x53, + 0x41, 0x88, 0x1D, 0x4F, 0x29, 0x9E, 0x50, 0x37, + 0x4C, 0x8E, 0xEF, 0xD5, 0x56, 0x0B, 0xD1, 0x83, + 0x19, 0xA7, 0x96, 0x3A, 0x3D, 0x02, 0xF0, 0xFB, + 0xE8, 0x4B, 0xC4, 0x84, 0xB5, 0xA4, 0x01, 0x8B, + 0x97, 0xD2, 0x74, 0x19, 0x1C, 0x95, 0xF7, 0x02, + 0xBA, 0xB9, 0xB0, 0xD1, 0x05, 0xFA, 0xF9, 0xFD, + 0xCF, 0xF9, 0x7E, 0x43, 0x72, 0x36, 0x56, 0x75, + 0x99, 0xFA, 0xF7, 0x3B, 0x07, 0x5D, 0x40, 0x61, + 0x04, 0xD4, 0x03, 0xCD, 0xF8, 0x12, 0x24, 0xDA, + 0x59, 0x0B, 0xEC, 0x28, 0x97, 0xE3, 0x01, 0x09, + 0xE1, 0xF2, 0xE5, 0xAE, 0x46, 0x10, 0xC8, 0x09, + 0xA7, 0x3F, 0x63, 0x8C, 0x84, 0x21, 0x0B, 0x34, + 0x47, 0xA7, 0xC8, 0xB6, 0xDD, 0xDB, 0x5A, 0xE2, + 0x00, 0xBF, 0x20, 0xE2, 0xFE, 0x4D, 0x4B, 0xA6, + 0xC6, 0xB1, 0x27, 0x67, 0xFB, 0x87, 0x60, 0xF6, + 0x6C, 0x51, 0x18, 0xE7, 0xA9, 0x93, 0x5B, 0x41, + 0xC9, 0xA4, 0x71, 0xA1, 0xD3, 0x23, 0x76, 0x88, + 0xC1, 0xE6, 0x18, 0xCC, 0x3B, 0xE9, 0x36, 0xAA, + 0x3F, 0x5E, 0x44, 0xE0, 0x86, 0x82, 0x0B, 0x81, + 0x0E, 0x06, 0x32, 0x11, 0xFC, 0x21, 0xC4, 0x04, + 0x4B, 0x3A, 0xC4, 0xD0, 0x0D, 0xF1, 0xBC, 0xC7, + 0xB2, 0x4D, 0xC0, 0x7B, 0xA4, 0x8B, 0x23, 0xB0, + 0xFC, 0x12, 0xA3, 0xED, 0x3D, 0x0A, 0x5C, 0xF7, + 0x67, 0x14, 0x15, 0xAB, 0x9C, 0xF2, 0x12, 0x86, + 0xFE, 0x63, 0xFB, 0x41, 0x41, 0x85, 0x70, 0x55, + 0x5D, 0x47, 0x39, 0xB8, 0x81, 0x04, 0xA8, 0x59, + 0x3F, 0x29, 0x30, 0x25, 0xA4, 0xE3, 0xEE, 0x7C, + 0x67, 0xE4, 0xB4, 0x8E, 0x40, 0xF6, 0xBA, 0x8C, + 0x09, 0x86, 0x0C, 0x3F, 0xBB, 0xE5, 0x5D, 0x45, + 0xB4, 0x5F, 0xC9, 0xAB, 0x62, 0x9B, 0x17, 0xC2, + 0x76, 0xC9, 0xC9, 0xE2, 0xAF, 0x3A, 0x04, 0x3B, + 0xEA, 0xFC, 0x18, 0xFD, 0x4F, 0x25, 0xEE, 0x7F, + 0x83, 0xBD, 0xDC, 0xD2, 0xD9, 0x39, 0x14, 0xB7, + 0xED, 0x4F, 0x7C, 0x9A, 0xF1, 0x27, 0xF3, 0xF1, + 0x5C, 0x27, 0x7B, 0xE1, 0x65, 0x51, 0xFE, 0xF3, + 0xAE, 0x03, 0xD7, 0xB9, 0x14, 0x3F, 0x0C, 0x9C, + 0x01, 0x9A, 0xB9, 0x7E, 0xEA, 0x07, 0x63, 0x66, + 0x13, 0x1F, 0x51, 0x83, 0x63, 0x71, 0x1B, 0x34, + 0xE9, 0x6D, 0x3F, 0x8A, 0x51, 0x3F, 0x3E, 0x20, + 0xB1, 0xD4, 0x52, 0xC4, 0xB7, 0xAE, 0x3B, 0x97, + 0x5E, 0xA9, 0x4D, 0x88, 0x0D, 0xAC, 0x66, 0x93, + 0x39, 0x97, 0x50, 0xD0, 0x22, 0x20, 0x40, 0x3F, + 0x0D, 0x3E, 0x3F, 0xC1, 0x17, 0x2A, 0x4D, 0xE9, + 0xDC, 0x28, 0x0E, 0xAF, 0x0F, 0xEE, 0x28, 0x83, + 0xA6, 0x66, 0x0B, 0xF5, 0xA3, 0xD2, 0x46, 0xFF, + 0x41, 0xD2, 0x1B, 0x36, 0xEA, 0x52, 0x1C, 0xF7, + 0xAA, 0x68, 0x9F, 0x80, 0x0D, 0x0F, 0x86, 0xF4, + 0xFA, 0x10, 0x57, 0xD8, 0xA1, 0x3F, 0x9D, 0xA8, + 0xFF, 0xFD, 0x0D, 0xC1, 0xFA, 0xD3, 0xC0, 0x4B, + 0xB1, 0xCC, 0xCB, 0x7C, 0x83, 0x4D, 0xB0, 0x51, + 0xA7, 0xAC, 0x2E, 0x4C, 0x60, 0x30, 0x19, 0x96, + 0xC9, 0x30, 0x71, 0xEA, 0x41, 0x6B, 0x42, 0x17, + 0x59, 0x93, 0x56, 0x59, 0xCF, 0x62, 0xCA, 0x5F, + 0x13, 0xAE, 0x07, 0xC3, 0xB1, 0x95, 0xC1, 0x48, + 0x15, 0x9D, 0x8B, 0xEB, 0x03, 0xD4, 0x40, 0xB0, + 0x0F, 0x53, 0x05, 0x76, 0x5F, 0x20, 0xC0, 0xC4, + 0x6E, 0xEE, 0x59, 0xC6, 0xD1, 0x62, 0x06, 0x40, + 0x2D, 0xB1, 0xC7, 0x15, 0xE8, 0x88, 0xBD, 0xE5, + 0x9C, 0x78, 0x1F, 0x35, 0xA7, 0xCC, 0x7C, 0x1C, + 0x5E, 0xCB, 0x21, 0x55, 0xAE, 0x3E, 0x95, 0x9C, + 0x09, 0x64, 0xCC, 0x1E, 0xF8, 0xD7, 0xC6, 0x9D, + 0x14, 0x58, 0xA9, 0xA4, 0x2F, 0x95, 0xF4, 0xC6, + 0xB5, 0xB9, 0x96, 0x34, 0x57, 0x12, 0xAA, 0x29, + 0x0F, 0xBB, 0xF7, 0xDF, 0xD4, 0xA6, 0xE8, 0x64, + 0x63, 0x02, 0x2A, 0x3F, 0x47, 0x25, 0xF6, 0x51, + 0x1B, 0xF7, 0xEA, 0x5E, 0x95, 0xC7, 0x07, 0xCD, + 0x35, 0x73, 0x60, 0x9A, 0xAD, 0xEA, 0xF5, 0x40, + 0x15, 0x2C, 0x49, 0x5F, 0x37, 0xFE, 0x6E, 0xC8, + 0xBB, 0x9F, 0xA2, 0xAA, 0x61, 0xD1, 0x57, 0x35, + 0x93, 0x4F, 0x47, 0x37, 0x92, 0x8F, 0xDE, 0x90, + 0xBA, 0x99, 0x57, 0x22, 0x46, 0x5D, 0x4A, 0x64, + 0x50, 0x5A, 0x52, 0x01, 0xF0, 0x7A, 0xA5, 0x8C, + 0xFD, 0x8A, 0xE2, 0x26, 0xE0, 0x20, 0x70, 0xB2, + 0xDB, 0xF5, 0x12, 0xB9, 0x75, 0x31, 0x9A, 0x7E, + 0x87, 0x53, 0xB4, 0xFD, 0xAE, 0x0E, 0xB4, 0x92, + 0x28, 0x69, 0xCC, 0x8E, 0x25, 0xC4, 0xA5, 0x56, + 0x0C, 0x2A, 0x06, 0x85, 0xDE, 0x3A, 0xC3, 0x92, + 0xA8, 0x92, 0x5B, 0xA8, 0x82, 0x00, 0x48, 0x94, + 0x74, 0x2E, 0x43, 0xCC, 0xFC, 0x27, 0x74, 0x39, + 0xEC, 0x80, 0x50, 0xA9, 0xAE, 0xB4, 0x29, 0x32, + 0xE0, 0x1C, 0x84, 0x0D, 0xFC, 0xED, 0xCC, 0x34, + 0xD3, 0x99, 0x12, 0x89, 0xA6, 0x2C, 0x17, 0xD1, + 0x28, 0x4C, 0x83, 0x95, 0x14, 0xB9, 0x33, 0x51, + 0xDB, 0xB2, 0xDD, 0xA8, 0x1F, 0x92, 0x45, 0x65, + 0xD7, 0x0E, 0x70, 0x79, 0xD5, 0xB8, 0x12, 0x6C, + 0xAA, 0xB7, 0xA4, 0xA1, 0xC7, 0x31, 0x65, 0x5A, + 0x53, 0xBC, 0xC0, 0x9F, 0x5D, 0x63, 0xEC, 0x90, + 0x86, 0xDE, 0xA6, 0x50, 0x05, 0x59, 0x85, 0xED, + 0xFA, 0x82, 0x97, 0xD9, 0xC9, 0x54, 0x10, 0xC5, + 0xD1, 0x89, 0x4D, 0x17, 0xD5, 0x93, 0x05, 0x49, + 0xAD, 0xBC, 0x2B, 0x87, 0x33, 0xC9, 0x9F, 0xE6, + 0x2E, 0x17, 0xC4, 0xDE, 0x34, 0xA5, 0xD8, 0x9B, + 0x12, 0xD1, 0x8E, 0x42, 0xA4, 0x22, 0xD2, 0xCE, + 0x77, 0x9C, 0x2C, 0x28, 0xEB, 0x2D, 0x98, 0x00, + 0x3D, 0x5C, 0xD3, 0x23, 0xFC, 0xBE, 0xCF, 0x02, + 0xB5, 0x06, 0x6E, 0x0E, 0x73, 0x48, 0x10, 0xF0, + 0x9E, 0xD8, 0x90, 0x13, 0xC0, 0x0F, 0x01, 0x1B, + 0xD2, 0x20, 0xF2, 0xE5, 0xD6, 0xA3, 0x62, 0xDF, + 0x90, 0x59, 0x91, 0x98, 0xA0, 0x93, 0xB0, 0x3C, + 0x8D, 0x8E, 0xFB, 0xFE, 0x0B, 0x61, 0x75, 0x92, + 0xFA, 0xF1, 0xE6, 0x42, 0x20, 0xC4, 0x44, 0x0B, + 0x53, 0xFF, 0xB4, 0x71, 0x64, 0xF3, 0x69, 0xC9, + 0x52, 0x90, 0xBA, 0x9F, 0x31, 0x08, 0xD6, 0x86, + 0xC5, 0x7D, 0xB6, 0x45, 0xC5, 0x3C, 0x01, 0x2E, + 0x57, 0xAF, 0x25, 0xBD, 0x66, 0x93, 0xE2, 0xCC, + 0x6B, 0x57, 0x65, 0x1A, 0xF1, 0x59, 0x1F, 0xE5, + 0xD8, 0x91, 0x66, 0x40, 0xEC, 0x01, 0x7C, 0x25, + 0x3D, 0xF0, 0x60, 0x6B, 0xB6, 0xB3, 0x03, 0x5F, + 0xAE, 0x74, 0x8F, 0x3D, 0x40, 0x34, 0x22, 0x3B, + 0x1B, 0x5E, 0xFB, 0xF5, 0x28, 0x3E, 0x77, 0x8C, + 0x10, 0x94, 0x29, 0x1C, 0xF7, 0xB1, 0x9B, 0xE0, + 0xF3, 0x17, 0x35, 0x0E, 0x6F, 0x85, 0x18, 0xFD, + 0xE0, 0xEF, 0xB1, 0x38, 0x1F, 0xB6, 0xE1, 0x6C, + 0x24, 0x1F, 0x7F, 0x17, 0xA5, 0x21, 0x06, 0x93, + 0xA2, 0x74, 0x15, 0x9E, 0x7F, 0xAC, 0x86, 0x8C, + 0xD0, 0xDC, 0x43, 0x59, 0xC3, 0xD9, 0xEE, 0xFE, + 0xA0, 0xD9, 0xE3, 0x1E, 0x43, 0xFA, 0x65, 0x13, + 0x92, 0xC6, 0x5A, 0x54, 0x3A, 0x59, 0xB3, 0xEE, + 0xE3, 0xA6, 0x39, 0xDC, 0x94, 0x17, 0xD0, 0x56, + 0xA5, 0xFF, 0x0F, 0x16, 0x0B, 0xEE, 0xE2, 0xEA, + 0xC2, 0x9A, 0x7D, 0x88, 0xC0, 0x98, 0x2C, 0xF7, + 0x0B, 0x5A, 0x46, 0x37, 0x9F, 0x21, 0xE5, 0x06, + 0xAA, 0xC6, 0x1A, 0x9B, 0xB1, 0xB8, 0xC2, 0xB9, + 0xDA, 0xB0, 0xE4, 0x4A, 0x82, 0x3B, 0x61, 0xD0, + 0xAA, 0x11, 0xD9, 0x4F, 0x76, 0xA4, 0xA8, 0xE2, + 0x1F, 0x9D, 0x42, 0x80, 0x68, 0x32, 0x08, 0xF4, + 0xEA, 0x91, 0x11, 0x16, 0xF6, 0xFD, 0x6A, 0x97, + 0x42, 0x69, 0x34, 0xEC, 0x34, 0x26, 0xB8, 0xC8, + 0xF7, 0x03, 0xDA, 0x85, 0xE9, 0xDC, 0xF9, 0x93, + 0x36, 0x13, 0x60, 0x03, 0x72, 0x8B, 0x8E, 0xCD, + 0xD0, 0x4A, 0x38, 0x9F, 0x6A, 0x81, 0x7A, 0x78, + 0xBF, 0xA6, 0x1B, 0xA4, 0x60, 0x20, 0xBF, 0x3C, + 0x34, 0x82, 0x95, 0x08, 0xF9, 0xD0, 0x6D, 0x15, + 0x53, 0xCD, 0x98, 0x7A, 0xAC, 0x38, 0x0D, 0x86, + 0xF1, 0x68, 0x84, 0x3B, 0xA3, 0x90, 0x4D, 0xE5, + 0xF7, 0x05, 0x8A, 0x41, 0xB4, 0xCD, 0x38, 0x8B, + 0xC9, 0xCE, 0x3A, 0xBA, 0x7E, 0xE7, 0x13, 0x9B, + 0x7F, 0xC9, 0xE5, 0xB8, 0xCF, 0xAA, 0xA3, 0x89, + 0x90, 0xBD, 0x4A, 0x5D, 0xB3, 0x2E, 0x26, 0x13, + 0xE7, 0xEC, 0x4F, 0x5F, 0x8B, 0x12, 0x92, 0xA3, + 0x8C, 0x6F, 0x4F, 0xF5, 0xA4, 0x04, 0x90, 0xD7, + 0x6B, 0x12, 0x66, 0x52, 0xFC, 0xF8, 0x6E, 0x24, + 0x52, 0x35, 0xD6, 0x36, 0xC6, 0x5C, 0xD1, 0x02, + 0xB0, 0x1E, 0x22, 0x78, 0x1A, 0x72, 0x91, 0x8C }; static const byte k_1024[KYBER_SS_SZ] = { - 0x46, 0xC2, 0x00, 0xF3, 0xF6, 0xEE, 0x8E, 0x11, - 0xD4, 0x76, 0x53, 0x80, 0x1E, 0x34, 0x82, 0x24, - 0x1C, 0xB7, 0x83, 0xB9, 0xD7, 0x94, 0xEB, 0x11, - 0x6A, 0x4B, 0xDA, 0x08, 0x5A, 0xEB, 0x6B, 0xB7 + 0x72, 0x64, 0xBD, 0xE5, 0xC6, 0xCE, 0xC1, 0x48, + 0x49, 0x69, 0x3E, 0x2C, 0x3C, 0x86, 0xE4, 0x8F, + 0x80, 0x95, 0x8A, 0x4F, 0x61, 0x86, 0xFC, 0x69, + 0x33, 0x3A, 0x41, 0x48, 0xE6, 0xE4, 0x97, 0xF3 }; #endif static byte ct[KYBER_MAX_CIPHER_TEXT_SIZE]; @@ -29856,1370 +29866,1370 @@ static int test_wc_kyber_decapsulate_kats(void) { EXPECT_DECLS; #if defined(WOLFSSL_HAVE_KYBER) && defined(WOLFSSL_WC_KYBER) && \ - defined(WOLFSSL_ML_KEM) + !defined(WOLFSSL_KYBER_ORIGINAL) KyberKey* key; #ifndef WOLFSSL_NO_KYBER512 static const byte dk_512[KYBER512_PRIVATE_KEY_SIZE] = { - 0x17, 0x43, 0x13, 0xEF, 0xA9, 0x35, 0x20, 0xE2, - 0x8A, 0x70, 0x76, 0xC8, 0x88, 0x09, 0x6E, 0x02, - 0xB0, 0xBD, 0xD8, 0x68, 0x30, 0x49, 0x7B, 0x61, - 0xFD, 0xEA, 0xB6, 0x20, 0x9C, 0x6C, 0xF7, 0x1C, - 0x62, 0x5C, 0x46, 0x80, 0x77, 0x5C, 0x34, 0x77, - 0x58, 0x1C, 0x42, 0x7A, 0x6F, 0xE1, 0xB0, 0x35, - 0x6E, 0xAB, 0x04, 0x8B, 0xCA, 0x43, 0x4F, 0x83, - 0xB5, 0x42, 0xC8, 0xB8, 0x60, 0x01, 0x06, 0x96, - 0xA5, 0x72, 0x99, 0xBB, 0x26, 0x22, 0x68, 0x89, - 0x1F, 0xFC, 0x72, 0x14, 0x2C, 0xA1, 0xA8, 0x66, - 0x18, 0x5C, 0xA8, 0x2D, 0x05, 0x40, 0x66, 0x95, - 0xBA, 0x57, 0xD4, 0xC9, 0x30, 0xF9, 0xC1, 0x7D, - 0x62, 0x23, 0x52, 0x3C, 0xF5, 0xA4, 0xF2, 0xA4, - 0x33, 0xA3, 0x64, 0x45, 0x9A, 0xC0, 0xAC, 0xDE, - 0x72, 0x54, 0x48, 0x13, 0x29, 0x28, 0x8B, 0x1B, - 0xE1, 0x87, 0xCC, 0x25, 0x21, 0x9F, 0x48, 0xC2, - 0x44, 0x3C, 0x53, 0x21, 0x99, 0x85, 0x93, 0x55, - 0x32, 0x0D, 0x04, 0xF0, 0xB8, 0x0D, 0xE9, 0x69, - 0xF1, 0x69, 0xA3, 0xD2, 0xBA, 0x34, 0x11, 0xB4, - 0xAD, 0xBC, 0x01, 0xB6, 0x62, 0x71, 0x82, 0x4C, - 0xD9, 0x54, 0x3C, 0x78, 0xBA, 0x48, 0x04, 0xAE, - 0x81, 0xF3, 0xAF, 0x00, 0x33, 0x6C, 0x5C, 0xC3, - 0x69, 0x83, 0x54, 0xC0, 0xE0, 0x18, 0x73, 0xA2, - 0xA1, 0x7D, 0x6A, 0x95, 0xA3, 0x12, 0x68, 0x9A, - 0x99, 0xDC, 0x89, 0x08, 0x41, 0x50, 0xA8, 0xD5, - 0x2B, 0xB3, 0x1C, 0x3F, 0xF3, 0xD4, 0x21, 0x5F, - 0xA3, 0xC4, 0x11, 0x1B, 0x40, 0x19, 0x92, 0x86, - 0x6E, 0x51, 0x3E, 0x51, 0x28, 0xA2, 0x0E, 0xD9, - 0x5F, 0xDE, 0xE6, 0x14, 0x85, 0xDC, 0x93, 0x7E, - 0x09, 0x9D, 0x76, 0xF7, 0x9B, 0x92, 0x73, 0x4D, - 0xC4, 0xCB, 0xB9, 0xA7, 0xA4, 0x13, 0xFE, 0xA6, - 0x28, 0x5B, 0xC0, 0xC2, 0x7C, 0x96, 0x1E, 0x47, - 0xD1, 0x98, 0x36, 0x44, 0xC4, 0xBF, 0x91, 0x3D, - 0x72, 0xF4, 0xB0, 0x30, 0xD3, 0x47, 0x38, 0x42, - 0x72, 0x63, 0xE8, 0x7A, 0xB4, 0xC0, 0xB7, 0xDF, - 0x0B, 0x72, 0xCA, 0x8A, 0xA0, 0xBA, 0xA6, 0x7B, - 0x07, 0x99, 0x39, 0xD5, 0x87, 0x80, 0x1D, 0x60, - 0xC8, 0x7A, 0x20, 0x40, 0x5E, 0x5C, 0x52, 0x60, - 0x3C, 0x07, 0x2F, 0xDB, 0x63, 0xE2, 0xE1, 0xC2, - 0xA9, 0x5C, 0xC2, 0x6F, 0x5A, 0xBE, 0xF6, 0x08, - 0x83, 0x33, 0x80, 0x08, 0x86, 0xD0, 0x93, 0xCA, - 0x01, 0xA7, 0x6F, 0x57, 0x00, 0x5E, 0x05, 0x35, - 0x69, 0x54, 0x2E, 0x0A, 0x07, 0x6B, 0x98, 0x73, - 0x6D, 0x4D, 0x39, 0xB0, 0x0F, 0xC1, 0x65, 0x3F, - 0xBC, 0x2D, 0x12, 0xEA, 0x32, 0xA9, 0x4B, 0x9B, - 0x92, 0xC6, 0x8B, 0xA4, 0xB6, 0x8A, 0x4E, 0x7B, - 0x37, 0x0A, 0x23, 0xB0, 0x3F, 0xE8, 0x22, 0x16, - 0x39, 0xB0, 0x12, 0x44, 0x80, 0x6C, 0x27, 0x06, - 0x7A, 0x58, 0x03, 0x1D, 0xB8, 0x0D, 0x2D, 0x03, - 0x66, 0x1A, 0x01, 0x7B, 0xB4, 0x6B, 0xB3, 0x71, - 0x1A, 0xCB, 0x56, 0x8A, 0x4F, 0xAB, 0xEB, 0xAF, - 0xC5, 0xFA, 0x06, 0xF7, 0xCA, 0x0E, 0x4D, 0x96, - 0x2E, 0x31, 0x70, 0xCB, 0x11, 0xC0, 0xA8, 0xD1, - 0x8A, 0x09, 0xCE, 0x27, 0xA6, 0xA9, 0x76, 0x3E, - 0x12, 0x38, 0x85, 0x45, 0x02, 0x24, 0xDE, 0x07, - 0xCC, 0x17, 0x54, 0x6C, 0x17, 0x95, 0x1F, 0xDE, - 0x47, 0x6E, 0x08, 0x35, 0x83, 0xEF, 0x10, 0xBF, - 0x76, 0xA9, 0x8A, 0xFF, 0xF9, 0xB1, 0x2D, 0xB5, - 0x40, 0x1C, 0xD3, 0x67, 0x34, 0x95, 0x39, 0x2D, - 0x74, 0x12, 0x91, 0xC3, 0xAA, 0x78, 0x42, 0x0C, - 0x8A, 0x7C, 0xB5, 0xFF, 0xE6, 0x50, 0x12, 0x99, - 0x7C, 0x4D, 0xA4, 0x32, 0x2E, 0xA9, 0x0B, 0x50, - 0x14, 0xB5, 0xB4, 0xD0, 0x18, 0x01, 0x00, 0x24, - 0x70, 0x47, 0x34, 0x1E, 0x4C, 0x24, 0xB9, 0x6B, - 0x8D, 0x7C, 0x00, 0x20, 0x52, 0x4B, 0x7C, 0x1D, - 0x66, 0xC3, 0xE0, 0x8C, 0xB2, 0x99, 0xEB, 0x4E, - 0xC6, 0xFA, 0x0E, 0xE8, 0xEA, 0x05, 0xFD, 0x43, - 0x0F, 0x57, 0x60, 0x5E, 0x89, 0x2B, 0x23, 0x2D, - 0x20, 0x47, 0xCA, 0x9B, 0x4E, 0xCA, 0xD9, 0xBD, - 0xD0, 0x9C, 0x99, 0x51, 0x19, 0x69, 0x16, 0x52, - 0x5D, 0x1E, 0xC9, 0x21, 0xB6, 0xE3, 0xCE, 0x0E, - 0xE6, 0x92, 0xEB, 0xA7, 0x28, 0xB4, 0xDB, 0x10, - 0xF3, 0x38, 0x1F, 0xBF, 0x58, 0x4A, 0xBB, 0x7B, - 0x6A, 0x92, 0x10, 0xC7, 0xC4, 0x24, 0xCE, 0x4A, - 0x36, 0x93, 0x70, 0xCB, 0x48, 0xD6, 0x08, 0x63, - 0x4A, 0xBA, 0x0B, 0xFF, 0x91, 0xC5, 0x62, 0x0A, - 0x11, 0x89, 0xD0, 0xCA, 0x97, 0x42, 0x1D, 0x42, - 0x34, 0x29, 0xFB, 0x66, 0x39, 0x52, 0xDC, 0x12, - 0x31, 0xB4, 0x36, 0x2B, 0x71, 0x62, 0xFE, 0x3A, - 0x42, 0x11, 0x1C, 0x91, 0xD7, 0x6A, 0x96, 0x4C, - 0xB4, 0x15, 0x41, 0x94, 0x20, 0x9E, 0xDB, 0xAA, - 0x1F, 0x48, 0x1B, 0xD1, 0x26, 0xC3, 0x25, 0xD1, - 0x56, 0x78, 0xE3, 0x9B, 0xCC, 0xE4, 0xC7, 0x04, - 0xEA, 0x48, 0x72, 0x46, 0x64, 0x8A, 0x6C, 0x6C, - 0x25, 0x40, 0xB5, 0xF6, 0x80, 0xA3, 0x5E, 0xE2, - 0x82, 0x42, 0x46, 0x45, 0x0A, 0x72, 0x93, 0xF2, - 0x1A, 0x90, 0xCF, 0xD1, 0x4E, 0xFA, 0xF7, 0x8F, - 0xA3, 0xD7, 0x32, 0x22, 0x51, 0xC6, 0x41, 0xA5, - 0x0E, 0x95, 0xBB, 0x5E, 0xC5, 0xCA, 0x0B, 0x60, - 0xE8, 0x9D, 0x7C, 0x18, 0xB7, 0xA4, 0x4A, 0x0F, - 0xAF, 0xB4, 0xBC, 0xAD, 0xE9, 0xB5, 0x88, 0xD1, - 0xB7, 0xFC, 0xF1, 0x2B, 0xA1, 0xE1, 0x08, 0x4D, - 0x56, 0xB1, 0x97, 0xEA, 0x90, 0xA7, 0x9A, 0x3D, - 0x83, 0x92, 0x7A, 0x23, 0x07, 0x60, 0x3B, 0xC2, - 0x11, 0xC0, 0x83, 0x0C, 0xB7, 0x06, 0x2C, 0x04, - 0x25, 0x48, 0x24, 0x57, 0x5B, 0x22, 0x6C, 0xAD, - 0x9A, 0x27, 0xC2, 0xA4, 0x55, 0x19, 0xAE, 0x39, - 0x54, 0x64, 0x67, 0x69, 0x04, 0x85, 0x49, 0x8A, - 0x32, 0x0A, 0xD5, 0x69, 0x93, 0xB1, 0x5A, 0x9D, - 0x22, 0xC6, 0x19, 0x14, 0x46, 0xCB, 0x40, 0xAA, - 0x75, 0x47, 0x40, 0x16, 0x81, 0xDC, 0xC7, 0xE3, - 0x65, 0x96, 0xB1, 0x0C, 0x07, 0xFA, 0x2A, 0x20, - 0xB4, 0x3C, 0x4B, 0x01, 0x24, 0x40, 0x1F, 0x8A, - 0x0E, 0x74, 0x48, 0x78, 0xC7, 0x29, 0x66, 0x23, - 0xC7, 0x39, 0x5B, 0x69, 0x94, 0xD1, 0x8C, 0x47, - 0x87, 0xA2, 0x89, 0xDB, 0xB0, 0x5C, 0xB1, 0x82, - 0x74, 0x51, 0xD8, 0x3F, 0x07, 0x29, 0x04, 0x53, - 0x75, 0x94, 0xF5, 0x15, 0xCA, 0x10, 0x17, 0x99, - 0x16, 0x20, 0xA3, 0x3E, 0x09, 0x6E, 0xE0, 0xDC, - 0x09, 0x1A, 0xE4, 0xCA, 0x96, 0x06, 0x03, 0xB1, - 0x01, 0xB5, 0xB4, 0xE2, 0x3E, 0x9A, 0x5B, 0x65, - 0xE1, 0xF6, 0xC2, 0xA8, 0xCC, 0x89, 0x34, 0x13, - 0x83, 0xB7, 0x06, 0x72, 0x5E, 0xD5, 0xB3, 0x48, - 0x57, 0x69, 0x18, 0x1B, 0x8F, 0x76, 0x43, 0x9C, - 0x05, 0x63, 0x6A, 0x0C, 0x34, 0x36, 0xFF, 0xBA, - 0x8B, 0x86, 0xA5, 0x30, 0x6F, 0xA1, 0x11, 0xF6, - 0xFC, 0x71, 0xEB, 0x77, 0x9B, 0x25, 0x70, 0x7C, - 0xFA, 0xE0, 0xA6, 0xDA, 0x7B, 0x0A, 0xD5, 0xD9, - 0x4B, 0x10, 0xF2, 0x1E, 0x4F, 0xCA, 0x92, 0x89, - 0x3B, 0x9F, 0xFE, 0x73, 0x21, 0x07, 0x63, 0x40, - 0x13, 0x77, 0x83, 0x7A, 0x10, 0xCA, 0x96, 0x25, - 0x34, 0x6C, 0x42, 0xAD, 0xC7, 0x05, 0xBD, 0x92, - 0xDB, 0x34, 0x26, 0xD9, 0x26, 0xCE, 0x4B, 0x5E, - 0xC2, 0x4A, 0x5C, 0xDF, 0x27, 0xCB, 0x91, 0xE5, - 0xA7, 0xE7, 0x16, 0x4D, 0x1B, 0xDC, 0x99, 0xD7, - 0x56, 0x79, 0xFB, 0xC9, 0x3A, 0x58, 0xF6, 0x47, - 0xDA, 0xC1, 0x08, 0x6C, 0xE9, 0x31, 0xBC, 0x08, - 0x92, 0x33, 0xE9, 0x48, 0x7E, 0x08, 0x67, 0xBC, - 0x58, 0x47, 0x2B, 0x01, 0xBF, 0x28, 0x95, 0xC3, - 0x23, 0xB6, 0x4D, 0xBE, 0x4A, 0x17, 0xA9, 0xE8, - 0x41, 0xB0, 0x53, 0xCA, 0xDB, 0x5C, 0x76, 0xD0, - 0x35, 0x72, 0x4C, 0x32, 0x1B, 0xBC, 0x13, 0x66, - 0x6F, 0x0A, 0x35, 0xDF, 0xDA, 0x07, 0x21, 0xE8, - 0x98, 0x76, 0x23, 0x25, 0x6A, 0x99, 0x4D, 0x95, - 0xFA, 0x1C, 0x05, 0xF5, 0x7C, 0x1E, 0x15, 0xA3, - 0x0C, 0x4A, 0x0C, 0x83, 0x18, 0xA0, 0xD8, 0x3C, - 0x41, 0x0C, 0x36, 0x28, 0x62, 0xE8, 0x17, 0xDD, - 0x6A, 0xBB, 0xAA, 0x4B, 0xBE, 0x75, 0xB7, 0x36, - 0xCC, 0xCB, 0xB4, 0xAF, 0x2A, 0x18, 0x84, 0x02, - 0xBD, 0x4C, 0xE5, 0x97, 0x93, 0x20, 0x08, 0x86, - 0x28, 0x65, 0x33, 0x25, 0x62, 0xF3, 0x24, 0xC7, - 0xA4, 0x24, 0x15, 0x1F, 0xB5, 0x9D, 0x0A, 0xE1, - 0x82, 0x1F, 0x28, 0x64, 0xC7, 0xE6, 0x98, 0x12, - 0x7A, 0xAD, 0x92, 0xC3, 0x3B, 0x31, 0x39, 0x88, - 0xC2, 0x9A, 0x09, 0xE2, 0x60, 0x44, 0x9B, 0xCA, - 0x7B, 0xEE, 0x36, 0x08, 0x62, 0x31, 0x4E, 0x47, - 0x51, 0x9E, 0xF3, 0x91, 0x8D, 0xDD, 0xE4, 0x03, - 0xE7, 0xB9, 0x2A, 0xC9, 0x90, 0x8F, 0x93, 0xC6, - 0x36, 0x9C, 0xC5, 0xC4, 0x7B, 0x8C, 0xB1, 0xDC, - 0x3A, 0x34, 0x79, 0xC7, 0x62, 0xF6, 0x2A, 0x18, - 0xFE, 0x05, 0xA9, 0xB0, 0x64, 0x5A, 0x53, 0x11, - 0xA0, 0x18, 0x28, 0x72, 0x3A, 0xEB, 0x51, 0xFA, - 0x50, 0x5E, 0x96, 0xB2, 0x9E, 0x3D, 0x2B, 0x6E, - 0x5B, 0x13, 0x27, 0xDE, 0x3A, 0x61, 0xAB, 0x0C, - 0x50, 0xBE, 0x01, 0x24, 0xB6, 0x4B, 0x33, 0x31, - 0x4B, 0x32, 0xD6, 0x12, 0x25, 0x10, 0xE4, 0x64, - 0x45, 0x85, 0x7A, 0xA0, 0xE2, 0xC4, 0xB0, 0xD2, - 0x56, 0x95, 0x56, 0x20, 0xA8, 0x68, 0x1D, 0x1E, - 0x55, 0x51, 0x26, 0xD0, 0x05, 0x09, 0xE3, 0x5B, - 0xF5, 0x96, 0x83, 0xDD, 0xAA, 0x40, 0xE8, 0x2C, - 0x51, 0x9B, 0x85, 0x58, 0x52, 0xC3, 0x66, 0xCB, - 0x54, 0x45, 0x2B, 0xF9, 0x10, 0xB0, 0x01, 0x69, - 0x23, 0x30, 0x34, 0x57, 0x08, 0x65, 0x3F, 0x51, - 0x18, 0x00, 0xB1, 0x0E, 0x00, 0x9D, 0x9F, 0x7D, - 0x10, 0xA5, 0x3B, 0x8B, 0x30, 0xBF, 0x13, 0xB0, - 0x6F, 0x25, 0x4E, 0xC8, 0xA6, 0xBA, 0x53, 0x97, - 0x00, 0xF6, 0x35, 0x8D, 0xE0, 0x46, 0x3A, 0x01, - 0x95, 0x40, 0xC9, 0x87, 0x3F, 0x3F, 0x46, 0x80, - 0xE2, 0x11, 0x3A, 0x7C, 0xCC, 0x55, 0xFF, 0x75, - 0x4D, 0x85, 0xAA, 0x67, 0xE9, 0xE5, 0x5F, 0x88, - 0x74, 0x24, 0xE0, 0xB2, 0x62, 0x56, 0x82, 0xA5, - 0xDD, 0xA2, 0x18, 0xF0, 0x3C, 0x3C, 0x10, 0xA2, - 0x46, 0xCD, 0xB0, 0xCC, 0x91, 0xD1, 0x9D, 0x8F, - 0x02, 0x4D, 0xB9, 0xB1, 0x41, 0x5F, 0x50, 0xAC, - 0xD8, 0xF6, 0x5D, 0xE2, 0x78, 0x7B, 0x91, 0x03, - 0xC5, 0x75, 0xB6, 0x87, 0x76, 0x55, 0x72, 0xCF, - 0xFA, 0x59, 0x02, 0x6C, 0x2B, 0xCE, 0xE7, 0x74, - 0x23, 0xBC, 0xAF, 0xD3, 0x05, 0x4B, 0xF8, 0xE2, - 0x71, 0x3F, 0xB8, 0x5B, 0x0B, 0xF6, 0xA4, 0x6E, - 0x71, 0x61, 0x52, 0xF5, 0xC9, 0xA3, 0x01, 0x1E, - 0xC9, 0x01, 0x14, 0xC7, 0x6B, 0x01, 0x51, 0x67, - 0x99, 0xBD, 0x59, 0x11, 0x41, 0x5B, 0x70, 0x45, - 0x44, 0x07, 0x7F, 0x18, 0x88, 0x06, 0x75, 0x5E, - 0xEC, 0x41, 0x31, 0xE5, 0x55, 0x56, 0xDB, 0x90, - 0x3F, 0x42, 0x84, 0xC1, 0xF9, 0x00, 0x86, 0xFF, - 0x43, 0x1B, 0x68, 0xF5, 0x1F, 0x62, 0x98, 0x12, - 0xF3, 0x20, 0xB5, 0x5F, 0x21, 0x9D, 0x72, 0xA1, - 0x92, 0x8F, 0x38, 0xC9, 0xA1, 0xEC, 0x82, 0x3B, - 0xA1, 0x98, 0xBA, 0x9A, 0xBB, 0xAC, 0xF6, 0x29, - 0x02, 0xB3, 0xCA, 0x0A, 0xFC, 0x95, 0xEA, 0x8A, - 0xC3, 0x03, 0xFB, 0x8B, 0xDD, 0x29, 0xBB, 0x9D, - 0x18, 0xA0, 0x3B, 0xA4, 0x4E, 0x58, 0xB1, 0xB0, - 0xB8, 0x5A, 0x2A, 0x16, 0x62, 0xE6, 0xA3, 0x1D, - 0xA7, 0x54, 0x55, 0x11, 0xA4, 0x78, 0xA1, 0x81, - 0x77, 0x88, 0x90, 0x61, 0xEF, 0x76, 0x63, 0x12, - 0x64, 0x23, 0x9A, 0xDE, 0xBD, 0x04, 0xA8, 0xC5, - 0x2B, 0x72, 0xE2, 0xB1, 0xF3, 0xA2, 0xDF, 0xBB, - 0xD8, 0xC0, 0x54, 0xE7, 0x0C, 0xC2, 0xA7, 0x42, - 0xE7, 0xB7, 0xD4, 0x17, 0xDF, 0xED, 0x31, 0x44, - 0x22, 0x18, 0x7D, 0xE1, 0xB2, 0x95, 0x44, 0x81, - 0x19, 0x57, 0x55, 0xEC, 0x04, 0xBB, 0x76, 0x71, - 0xC4, 0x33, 0x14, 0x46, 0xBB, 0xE8, 0x95, 0x25, - 0x14, 0x90, 0x53, 0x21, 0xA2, 0x17, 0x6E, 0x93, - 0x5B, 0x54, 0x20, 0xC0, 0xD5, 0xEA, 0x44, 0x65 + 0x69, 0xF9, 0xCB, 0xFD, 0x12, 0x37, 0xBA, 0x16, + 0x1C, 0xF6, 0xE6, 0xC1, 0x8F, 0x48, 0x8F, 0xC6, + 0xE3, 0x9A, 0xB4, 0xA5, 0xC9, 0xE6, 0xC2, 0x2E, + 0xA4, 0xE3, 0xAD, 0x8F, 0x26, 0x7A, 0x9C, 0x44, + 0x20, 0x10, 0xD3, 0x2E, 0x61, 0xF8, 0x3E, 0x6B, + 0xFA, 0x5C, 0x58, 0x70, 0x61, 0x45, 0x37, 0x6D, + 0xBB, 0x84, 0x95, 0x28, 0xF6, 0x80, 0x07, 0xC8, + 0x22, 0xB3, 0x3A, 0x95, 0xB8, 0x49, 0x04, 0xDC, + 0xD2, 0x70, 0x8D, 0x03, 0x40, 0xC8, 0xB8, 0x08, + 0xBC, 0xD3, 0xAA, 0xD0, 0xE4, 0x8B, 0x85, 0x84, + 0x95, 0x83, 0xA1, 0xB4, 0xE5, 0x94, 0x5D, 0xD9, + 0x51, 0x4A, 0x7F, 0x64, 0x61, 0xE0, 0x57, 0xB7, + 0xEC, 0xF6, 0x19, 0x57, 0xE9, 0x7C, 0xF6, 0x28, + 0x15, 0xF9, 0xC3, 0x22, 0x94, 0xB3, 0x26, 0xE1, + 0xA1, 0xC4, 0xE3, 0x60, 0xB9, 0x49, 0x8B, 0xA8, + 0x0F, 0x8C, 0xA9, 0x15, 0x32, 0xB1, 0x71, 0xD0, + 0xAE, 0xFC, 0x48, 0x49, 0xFA, 0x53, 0xBC, 0x61, + 0x79, 0x32, 0xE2, 0x08, 0xA6, 0x77, 0xC6, 0x04, + 0x4A, 0x66, 0x00, 0xB8, 0xD8, 0xB8, 0x3F, 0x26, + 0xA7, 0x47, 0xB1, 0x8C, 0xFB, 0x78, 0xBE, 0xAF, + 0xC5, 0x51, 0xAD, 0x52, 0xB7, 0xCA, 0x6C, 0xB8, + 0x8F, 0x3B, 0x5D, 0x9C, 0xE2, 0xAF, 0x6C, 0x67, + 0x95, 0x6C, 0x47, 0x8C, 0xEF, 0x49, 0x1F, 0x59, + 0xE0, 0x19, 0x1B, 0x3B, 0xBE, 0x92, 0x9B, 0x94, + 0xB6, 0x66, 0xC1, 0x76, 0x13, 0x8B, 0x00, 0xF4, + 0x97, 0x24, 0x34, 0x1E, 0xE2, 0xE1, 0x64, 0xB9, + 0x4C, 0x05, 0x3C, 0x18, 0x5A, 0x51, 0xF9, 0x3E, + 0x00, 0xF3, 0x68, 0x61, 0x61, 0x3A, 0x7F, 0xD7, + 0x2F, 0xEB, 0xD2, 0x3A, 0x8B, 0x96, 0xA2, 0x60, + 0x23, 0x42, 0x39, 0xC9, 0x62, 0x8F, 0x99, 0x5D, + 0xC1, 0x38, 0x07, 0xB4, 0x3A, 0x69, 0x46, 0x81, + 0x67, 0xCB, 0x1A, 0x8F, 0x9D, 0xD0, 0x7E, 0xE3, + 0xB3, 0x32, 0x38, 0xF6, 0x30, 0x96, 0xEB, 0xC4, + 0x9D, 0x50, 0x51, 0xC4, 0xB6, 0x59, 0x63, 0xD7, + 0x4A, 0x47, 0x66, 0xC2, 0x26, 0xF0, 0xB9, 0x4F, + 0x18, 0x62, 0xC2, 0x12, 0x4C, 0x8C, 0x74, 0x97, + 0x48, 0xC0, 0xBC, 0x4D, 0xC1, 0x4C, 0xB3, 0x49, + 0x06, 0xB8, 0x1C, 0x55, 0x24, 0xFB, 0x81, 0x00, + 0x79, 0x85, 0x42, 0xDC, 0x6C, 0xC2, 0xAA, 0x0A, + 0x70, 0x85, 0x75, 0xEA, 0xBC, 0xC1, 0x1F, 0x96, + 0xA9, 0xE6, 0x1C, 0x01, 0x7A, 0x96, 0xA7, 0xCE, + 0x93, 0xC4, 0x20, 0x91, 0x73, 0x71, 0x13, 0xAE, + 0x78, 0x3C, 0x0A, 0xE8, 0x75, 0x5E, 0x59, 0x41, + 0x11, 0xED, 0xFA, 0xBF, 0xD8, 0x6C, 0x32, 0x12, + 0xC6, 0x12, 0xA7, 0xB6, 0x2A, 0xFD, 0x3C, 0x7A, + 0x5C, 0x78, 0xB2, 0xF0, 0x73, 0x44, 0xB7, 0x89, + 0xC2, 0xB2, 0xDB, 0xB5, 0xF4, 0x44, 0x8B, 0xE9, + 0x7B, 0xBA, 0x42, 0x33, 0xC0, 0x03, 0x9C, 0x0F, + 0xE8, 0x43, 0x00, 0xF9, 0xB0, 0x3A, 0xC9, 0x94, + 0x97, 0xE6, 0xD4, 0x6B, 0x6E, 0x95, 0x30, 0x8F, + 0xF8, 0x47, 0x90, 0xF6, 0x12, 0xCF, 0x18, 0x6E, + 0xC1, 0x68, 0x11, 0xE8, 0x0C, 0x17, 0x93, 0x16, + 0xA6, 0x3B, 0x25, 0x70, 0x3F, 0x60, 0xB8, 0x42, + 0xB6, 0x19, 0x07, 0xE6, 0x28, 0x94, 0xE7, 0x36, + 0x64, 0x7B, 0x3C, 0x09, 0xDA, 0x6F, 0xEC, 0x59, + 0x32, 0x78, 0x2B, 0x36, 0xE0, 0x63, 0x50, 0x85, + 0xA3, 0x94, 0x9E, 0x69, 0x4D, 0x7E, 0x17, 0xCB, + 0xA3, 0xD9, 0x06, 0x43, 0x30, 0x43, 0x8C, 0x07, + 0x1B, 0x58, 0x36, 0xA7, 0x70, 0xC5, 0x5F, 0x62, + 0x13, 0xCC, 0x14, 0x25, 0x84, 0x5D, 0xE5, 0xA3, + 0x34, 0xD7, 0x5D, 0x3E, 0x50, 0x58, 0xC7, 0x80, + 0x9F, 0xDA, 0x4B, 0xCD, 0x78, 0x19, 0x1D, 0xA9, + 0x79, 0x73, 0x25, 0xE6, 0x23, 0x6C, 0x26, 0x50, + 0xFC, 0x60, 0x4E, 0xE4, 0x3A, 0x83, 0xCE, 0xB3, + 0x49, 0x80, 0x08, 0x44, 0x03, 0xA3, 0x32, 0x59, + 0x85, 0x79, 0x07, 0x79, 0x9A, 0x9D, 0x2A, 0x71, + 0x3A, 0x63, 0x3B, 0x5C, 0x90, 0x47, 0x27, 0xF6, + 0x1E, 0x42, 0x52, 0x09, 0x91, 0xD6, 0x55, 0x70, + 0x5C, 0xB6, 0xBC, 0x1B, 0x74, 0xAF, 0x60, 0x71, + 0x3E, 0xF8, 0x71, 0x2F, 0x14, 0x08, 0x68, 0x69, + 0xBE, 0x8E, 0xB2, 0x97, 0xD2, 0x28, 0xB3, 0x25, + 0xA0, 0x60, 0x9F, 0xD6, 0x15, 0xEA, 0xB7, 0x08, + 0x15, 0x40, 0xA6, 0x1A, 0x82, 0xAB, 0xF4, 0x3B, + 0x7D, 0xF9, 0x8A, 0x59, 0x5B, 0xE1, 0x1F, 0x41, + 0x6B, 0x41, 0xE1, 0xEB, 0x75, 0xBB, 0x57, 0x97, + 0x7C, 0x25, 0xC6, 0x4E, 0x97, 0x43, 0x7D, 0x88, + 0xCA, 0x5F, 0xDA, 0x61, 0x59, 0xD6, 0x68, 0xF6, + 0xBA, 0xB8, 0x15, 0x75, 0x55, 0xB5, 0xD5, 0x4C, + 0x0F, 0x47, 0xCB, 0xCD, 0x16, 0x84, 0x3B, 0x1A, + 0x0A, 0x0F, 0x02, 0x10, 0xEE, 0x31, 0x03, 0x13, + 0x96, 0x7F, 0x3D, 0x51, 0x64, 0x99, 0x01, 0x8F, + 0xDF, 0x31, 0x14, 0x77, 0x24, 0x70, 0xA1, 0x88, + 0x9C, 0xC0, 0x6C, 0xB6, 0xB6, 0x69, 0x0A, 0xC3, + 0x1A, 0xBC, 0xFA, 0xF4, 0xBC, 0x70, 0x76, 0x84, + 0x54, 0x5B, 0x00, 0x0B, 0x58, 0x0C, 0xCB, 0xFC, + 0xBC, 0xE9, 0xFA, 0x70, 0xAA, 0xEA, 0x0B, 0xBD, + 0x91, 0x10, 0x99, 0x2A, 0x7C, 0x6C, 0x06, 0xCB, + 0x36, 0x85, 0x27, 0xFD, 0x22, 0x90, 0x90, 0x75, + 0x7E, 0x6F, 0xE7, 0x57, 0x05, 0xFA, 0x59, 0x2A, + 0x76, 0x08, 0xF0, 0x50, 0xC6, 0xF8, 0x87, 0x03, + 0xCC, 0x28, 0xCB, 0x00, 0x0C, 0x1D, 0x7E, 0x77, + 0xB8, 0x97, 0xB7, 0x2C, 0x62, 0xBC, 0xC7, 0xAE, + 0xA2, 0x1A, 0x57, 0x72, 0x94, 0x83, 0xD2, 0x21, + 0x18, 0x32, 0xBE, 0xD6, 0x12, 0x43, 0x0C, 0x98, + 0x31, 0x03, 0xC6, 0x9E, 0x8C, 0x07, 0x2C, 0x0E, + 0xA7, 0x89, 0x8F, 0x22, 0x83, 0xBE, 0xC4, 0x8C, + 0x5A, 0xC8, 0x19, 0x84, 0xD4, 0xA5, 0xA8, 0x36, + 0x19, 0x73, 0x5A, 0x84, 0x2B, 0xD1, 0x72, 0xC0, + 0xD1, 0xB3, 0x9F, 0x43, 0x58, 0x8A, 0xF1, 0x70, + 0x45, 0x8B, 0xA9, 0xEE, 0x74, 0x92, 0xEA, 0xAA, + 0x94, 0xEA, 0x53, 0xA4, 0xD3, 0x84, 0x98, 0xEC, + 0xBB, 0x98, 0xA5, 0xF4, 0x07, 0xE7, 0xC9, 0x7B, + 0x4E, 0x16, 0x6E, 0x39, 0x71, 0x92, 0xC2, 0x16, + 0x03, 0x30, 0x14, 0xB8, 0x78, 0xE9, 0x38, 0x07, + 0x5C, 0x6C, 0x1F, 0x10, 0xA0, 0x06, 0x5A, 0xBC, + 0x31, 0x63, 0x72, 0x2F, 0x1A, 0x2E, 0xFF, 0xEC, + 0x8D, 0x6E, 0x3A, 0x0C, 0x4F, 0x71, 0x74, 0xFC, + 0x16, 0xB7, 0x9F, 0xB5, 0x18, 0x6A, 0x75, 0x16, + 0x8F, 0x81, 0xA5, 0x6A, 0xA4, 0x8A, 0x20, 0xA0, + 0x4B, 0xDD, 0xF1, 0x82, 0xC6, 0xE1, 0x79, 0xC3, + 0xF6, 0x90, 0x61, 0x55, 0x5E, 0xF7, 0x39, 0x6D, + 0xD0, 0xB7, 0x49, 0x96, 0x01, 0xA6, 0xEB, 0x3A, + 0x96, 0xA9, 0xA2, 0x2D, 0x04, 0xF1, 0x16, 0x8D, + 0xB5, 0x63, 0x55, 0xB0, 0x76, 0x00, 0xA2, 0x03, + 0x70, 0x63, 0x7B, 0x64, 0x59, 0x76, 0xBB, 0xD9, + 0x7B, 0x6D, 0x62, 0x88, 0xA0, 0xD3, 0x03, 0x63, + 0x60, 0x47, 0x2E, 0x3A, 0xC7, 0x1D, 0x56, 0x6D, + 0xB8, 0xFB, 0xB1, 0xB1, 0xD7, 0x6C, 0xB7, 0x55, + 0xCD, 0x0D, 0x68, 0xBD, 0xBF, 0xC0, 0x48, 0xEB, + 0xA2, 0x52, 0x5E, 0xEA, 0x9D, 0xD5, 0xB1, 0x44, + 0xFB, 0x3B, 0x60, 0xFB, 0xC3, 0x42, 0x39, 0x32, + 0x0C, 0xBC, 0x06, 0x9B, 0x35, 0xAB, 0x16, 0xB8, + 0x75, 0x65, 0x36, 0xFB, 0x33, 0xE8, 0xA6, 0xAF, + 0x1D, 0xD4, 0x2C, 0x79, 0xF4, 0x8A, 0xD1, 0x20, + 0xAE, 0x4B, 0x15, 0x9D, 0x3D, 0x8C, 0x31, 0x90, + 0x60, 0xCC, 0xE5, 0x69, 0xC3, 0xF6, 0x03, 0x53, + 0x65, 0x58, 0x5D, 0x34, 0x41, 0x37, 0x95, 0xA6, + 0xA1, 0x8E, 0xC5, 0x13, 0x6A, 0xB1, 0x3C, 0x90, + 0xE3, 0xAF, 0x14, 0xC0, 0xB8, 0xA4, 0x64, 0xC8, + 0x6B, 0x90, 0x73, 0x22, 0x2B, 0x56, 0xB3, 0xF7, + 0x32, 0x8A, 0xEA, 0x79, 0x81, 0x55, 0x32, 0x59, + 0x11, 0x25, 0x0E, 0xF0, 0x16, 0xD7, 0x28, 0x02, + 0xE3, 0x87, 0x8A, 0xA5, 0x05, 0x40, 0xCC, 0x98, + 0x39, 0x56, 0x97, 0x1D, 0x6E, 0xFA, 0x35, 0x2C, + 0x02, 0x55, 0x4D, 0xC7, 0x60, 0xA5, 0xA9, 0x13, + 0x58, 0xEA, 0x56, 0x37, 0x08, 0x84, 0xFD, 0x5B, + 0x3F, 0x85, 0xB7, 0x0E, 0x83, 0xE4, 0x69, 0x7D, + 0xEB, 0x17, 0x05, 0x16, 0x9E, 0x9C, 0x60, 0xA7, + 0x45, 0x28, 0xCF, 0x15, 0x28, 0x1C, 0xB1, 0xB1, + 0xC4, 0x57, 0xD4, 0x67, 0xB5, 0xF9, 0x3A, 0x60, + 0x37, 0x3D, 0x10, 0xE0, 0xCF, 0x6A, 0x83, 0x7A, + 0xA3, 0xC9, 0x59, 0x6A, 0x72, 0xBE, 0xC2, 0x9B, + 0x2D, 0x7E, 0x58, 0x65, 0x3D, 0x53, 0x30, 0x61, + 0xD3, 0x81, 0xD5, 0x17, 0x59, 0x75, 0x22, 0x17, + 0xEB, 0x46, 0xCA, 0xC7, 0x80, 0x7C, 0x4A, 0xD3, + 0x8B, 0x61, 0x16, 0x44, 0xAC, 0xF0, 0xA3, 0xF2, + 0x6B, 0x6B, 0x08, 0x4A, 0xB4, 0x7A, 0x83, 0xBF, + 0x0D, 0x69, 0x6F, 0x8A, 0x47, 0x68, 0xFC, 0x35, + 0xBC, 0xA6, 0xBC, 0x79, 0x03, 0xB2, 0xA2, 0x37, + 0xC2, 0x77, 0x49, 0xF5, 0x51, 0x0C, 0x86, 0x38, + 0x69, 0xE6, 0xAE, 0x56, 0xBB, 0x2A, 0xFE, 0x47, + 0x71, 0xC9, 0x22, 0x18, 0x74, 0xF5, 0x0F, 0x5B, + 0x14, 0xBA, 0xAD, 0x59, 0x93, 0xB4, 0x92, 0x38, + 0xFD, 0x0A, 0x0C, 0x9F, 0x79, 0xB7, 0xB4, 0x58, + 0x4E, 0x41, 0x30, 0x1F, 0x7A, 0x88, 0x5C, 0x9F, + 0x91, 0x81, 0x9B, 0xEA, 0x00, 0xD5, 0x12, 0x58, + 0x17, 0x30, 0x53, 0x9F, 0xB3, 0x7E, 0x59, 0xE8, + 0x6A, 0x6D, 0x19, 0xCA, 0x25, 0xF0, 0xA8, 0x11, + 0xC9, 0xB4, 0x28, 0xBA, 0x86, 0x14, 0xAA, 0x4F, + 0x94, 0x80, 0x7B, 0xC0, 0x31, 0xCB, 0xCC, 0x18, + 0x3F, 0x3B, 0xF0, 0x7F, 0xE2, 0xC1, 0xA6, 0xEB, + 0xA8, 0x0D, 0x5A, 0x70, 0x6E, 0xE0, 0xDA, 0xB2, + 0x7E, 0x23, 0x14, 0x58, 0x02, 0x5D, 0x84, 0xA7, + 0xA9, 0xB0, 0x23, 0x05, 0x01, 0x11, 0x6C, 0x29, + 0x0A, 0x6B, 0xB5, 0x06, 0x26, 0xD9, 0x7B, 0x93, + 0x98, 0x50, 0x94, 0x28, 0x28, 0x39, 0x0B, 0x0A, + 0x20, 0x01, 0xB7, 0x85, 0x3A, 0xD1, 0xAE, 0x9B, + 0x01, 0x1B, 0x2D, 0xB3, 0x6C, 0xAE, 0xEA, 0x73, + 0xA2, 0x32, 0x8E, 0x3C, 0x56, 0x48, 0x5B, 0x49, + 0x1C, 0x29, 0x91, 0x15, 0xA0, 0x17, 0xC9, 0x07, + 0xAB, 0x54, 0x31, 0x72, 0x60, 0xA5, 0x93, 0xA0, + 0xD7, 0xBA, 0x6D, 0x06, 0x61, 0x5D, 0x6E, 0x2C, + 0xA8, 0x4B, 0x86, 0x0E, 0xFF, 0x3C, 0xCB, 0x59, + 0x72, 0x11, 0xBF, 0xE3, 0x6B, 0xDE, 0xF8, 0x06, + 0x9A, 0xFA, 0x36, 0xC5, 0xA7, 0x33, 0x92, 0x72, + 0x26, 0x50, 0xE4, 0x95, 0x7D, 0xCA, 0x59, 0x7A, + 0xCB, 0xA5, 0x60, 0x5B, 0x63, 0xC1, 0x63, 0xCF, + 0xA9, 0x4B, 0x64, 0xDD, 0xD6, 0x23, 0x01, 0xA4, + 0x33, 0x20, 0x83, 0x36, 0x19, 0x72, 0x58, 0x9D, + 0xB0, 0x59, 0x9A, 0x69, 0x4D, 0xD4, 0x54, 0x7A, + 0x5E, 0xE9, 0x19, 0x65, 0x77, 0xC2, 0x2E, 0xD4, + 0x27, 0xAC, 0x89, 0xBB, 0x8B, 0xA3, 0x75, 0x3E, + 0xB7, 0x6C, 0x41, 0xF2, 0xC1, 0x12, 0x9C, 0x8A, + 0x77, 0xD6, 0x80, 0x5F, 0xA7, 0x19, 0xB1, 0xB6, + 0xCA, 0x11, 0xB7, 0x40, 0xA7, 0x8A, 0x3D, 0x41, + 0xB5, 0x33, 0x05, 0x26, 0xAB, 0x87, 0xD5, 0x8D, + 0x59, 0x25, 0x31, 0x5A, 0x14, 0x85, 0xED, 0xC6, + 0x47, 0xC1, 0x60, 0x4E, 0xB3, 0x81, 0x38, 0xDE, + 0x63, 0x7A, 0xD2, 0xC6, 0xCA, 0x5B, 0xE4, 0x4E, + 0x10, 0x08, 0xB2, 0xC0, 0x86, 0x7B, 0x22, 0x9C, + 0xCC, 0x36, 0x61, 0x9E, 0x27, 0x58, 0xC4, 0xC2, + 0x02, 0x9E, 0xAE, 0xB2, 0x6E, 0x7A, 0x80, 0x3F, + 0xCA, 0x30, 0x5A, 0x59, 0xCD, 0x58, 0x5E, 0x11, + 0x7D, 0x69, 0x8E, 0xCE, 0x01, 0x1C, 0xC3, 0xFC, + 0xE5, 0x4D, 0x2E, 0x11, 0x45, 0x45, 0xA2, 0x1A, + 0xC5, 0xBE, 0x67, 0x71, 0xAB, 0x8F, 0x13, 0x12, + 0x2F, 0xAD, 0x29, 0x5E, 0x74, 0x5A, 0x50, 0x3B, + 0x14, 0x2F, 0x91, 0xAE, 0xF7, 0xBD, 0xE9, 0x99, + 0x98, 0x84, 0x5F, 0xDA, 0x04, 0x35, 0x55, 0xC9, + 0xC1, 0xEE, 0x53, 0x5B, 0xE1, 0x25, 0xE5, 0xDC, + 0xE5, 0xD2, 0x66, 0x66, 0x7E, 0x72, 0x3E, 0x67, + 0xB6, 0xBA, 0x89, 0x1C, 0x16, 0xCB, 0xA1, 0x74, + 0x09, 0x8A, 0x3F, 0x35, 0x17, 0x78, 0xB0, 0x88, + 0x8C, 0x95, 0x90, 0xA9, 0x09, 0x0C, 0xD4, 0x04 }; static const byte c_512[KYBER512_CIPHER_TEXT_SIZE] = { - 0x84, 0xA1, 0x88, 0xA0, 0x72, 0xE4, 0xD4, 0xF4, - 0x49, 0xA4, 0xBE, 0x17, 0x02, 0x74, 0xDD, 0x2A, - 0x5F, 0x3E, 0x35, 0x6E, 0x95, 0xB9, 0x6E, 0x40, - 0xAD, 0x3F, 0xF1, 0x45, 0x5E, 0x36, 0xC6, 0xA7, - 0x1E, 0x90, 0x9D, 0xD2, 0xC0, 0xDF, 0xF8, 0xAD, - 0x2C, 0x9F, 0x50, 0x3B, 0xAC, 0x90, 0x65, 0x71, - 0x62, 0x48, 0x08, 0x3B, 0xDA, 0x40, 0xCE, 0xCB, - 0x38, 0xE3, 0xB3, 0x05, 0x8B, 0xAF, 0x51, 0xA7, - 0x57, 0x23, 0x84, 0xFF, 0x84, 0x06, 0xA8, 0x13, - 0x6A, 0x4F, 0xC6, 0xD9, 0x12, 0xA5, 0x4B, 0x2E, - 0xB5, 0xB9, 0xD5, 0x98, 0xFB, 0x68, 0x9E, 0x72, - 0xED, 0x3D, 0xEF, 0xD2, 0xFF, 0x83, 0x55, 0xED, - 0x9E, 0x9C, 0xCA, 0x53, 0xE8, 0x2C, 0x08, 0x86, - 0xE0, 0x94, 0xC5, 0x92, 0xC3, 0x92, 0x31, 0x1F, - 0x04, 0xFE, 0xC6, 0x8F, 0x9A, 0x1C, 0x53, 0x1C, - 0xF3, 0x41, 0x90, 0x30, 0x89, 0x2B, 0x5B, 0xDC, - 0xAC, 0xEE, 0xF6, 0xA0, 0xE7, 0xF1, 0xBD, 0x44, - 0x90, 0x3F, 0x49, 0xDE, 0x8E, 0x37, 0xB0, 0x2B, - 0xA3, 0xFC, 0x51, 0x21, 0xD9, 0x9F, 0x8C, 0xC3, - 0x04, 0x0F, 0x66, 0x83, 0x2F, 0x77, 0x02, 0x1B, - 0x4C, 0xA3, 0x5F, 0x7A, 0x48, 0x25, 0x03, 0x89, - 0x36, 0x56, 0x4C, 0xA2, 0xE6, 0x73, 0xFF, 0x9C, - 0xC0, 0x51, 0x9C, 0x25, 0xF6, 0xA5, 0x2D, 0x87, - 0xED, 0xD9, 0x65, 0xB2, 0x46, 0x4A, 0xA3, 0x65, - 0xD2, 0xBF, 0x06, 0x8B, 0x72, 0xFC, 0x68, 0xB6, - 0x5E, 0x88, 0x51, 0x5E, 0x2C, 0x83, 0x2B, 0xBD, - 0xB2, 0x7D, 0x61, 0xBF, 0x51, 0x2B, 0x5F, 0xC2, - 0xD8, 0x59, 0x0F, 0xB3, 0x5F, 0x49, 0x50, 0x0C, - 0xAF, 0xE7, 0x0E, 0x7D, 0x07, 0x76, 0xB5, 0xC4, - 0xE4, 0x50, 0x3A, 0x71, 0x89, 0xAD, 0xBA, 0xFF, - 0x5D, 0x5B, 0x51, 0x5C, 0xC6, 0x8B, 0x2F, 0x81, - 0xD9, 0x93, 0xC6, 0xD7, 0xFA, 0x7D, 0x3D, 0x1D, - 0x90, 0xEB, 0xFF, 0x51, 0xDA, 0x3F, 0xBB, 0xB4, - 0x43, 0x0E, 0x5B, 0xBE, 0xDB, 0xCA, 0x8D, 0xA0, - 0x78, 0xDC, 0xE8, 0xEC, 0x81, 0x5B, 0x16, 0x8B, - 0xFC, 0x09, 0xAB, 0x4A, 0x20, 0x67, 0x88, 0x70, - 0xF4, 0x86, 0x8B, 0x1F, 0xAE, 0x28, 0xD2, 0x09, - 0xC7, 0x53, 0x68, 0xA7, 0x99, 0x31, 0x7D, 0xFA, - 0x08, 0xC2, 0xB6, 0x51, 0xFA, 0xC7, 0x2D, 0xCA, - 0x2A, 0x1B, 0x4C, 0xBB, 0x75, 0xE8, 0x73, 0xF1, - 0x5C, 0x51, 0xB6, 0xD0, 0xB5, 0xE6, 0xF5, 0xE6, - 0x0E, 0x2A, 0xF6, 0xC4, 0x0D, 0x2C, 0xAB, 0xCB, - 0xF3, 0x58, 0x8F, 0x44, 0xBC, 0xEA, 0x6D, 0x72, - 0xD3, 0x59, 0xF4, 0x0F, 0x9C, 0xF5, 0xE0, 0xEC, - 0x40, 0xA5, 0x21, 0x5E, 0x5A, 0xCE, 0xEA, 0xF0, - 0xDA, 0x00, 0xD9, 0x23, 0xD4, 0xCE, 0xFF, 0x5C, - 0x3A, 0x3A, 0xB1, 0xE4, 0x6C, 0x75, 0x4F, 0x4A, - 0xE0, 0x52, 0xC2, 0xBC, 0x49, 0xFD, 0xB4, 0x52, - 0x1A, 0xE4, 0x4D, 0xF6, 0x34, 0xD5, 0x6E, 0x43, - 0x3D, 0xAD, 0x3D, 0xF3, 0xC0, 0x71, 0x15, 0x40, - 0x6F, 0xF8, 0xBF, 0xD0, 0xD7, 0xC9, 0x3B, 0x49, - 0x41, 0xD0, 0xF0, 0x92, 0x13, 0xC1, 0x68, 0x1C, - 0xFD, 0x5C, 0x86, 0x63, 0xDF, 0x02, 0x04, 0x1A, - 0x3C, 0xBD, 0x16, 0x2F, 0x5C, 0x4D, 0x80, 0xCB, - 0x1D, 0xC7, 0xD4, 0xA5, 0x01, 0xAD, 0x06, 0xFE, - 0x96, 0xEB, 0x34, 0x8B, 0x6E, 0x33, 0x1C, 0x82, - 0x96, 0xFE, 0x90, 0x4E, 0xB9, 0x7C, 0x08, 0x74, - 0x56, 0x32, 0x8D, 0x70, 0x3B, 0x85, 0xBD, 0xAC, - 0x2F, 0xB4, 0x3C, 0x72, 0x8D, 0x0B, 0x05, 0xFC, - 0x54, 0xB8, 0xC1, 0x55, 0xC0, 0x10, 0xEF, 0x0D, - 0xB1, 0x4C, 0xC6, 0x68, 0xD1, 0xB1, 0xBC, 0x72, - 0x7A, 0xF8, 0x86, 0x40, 0x76, 0x73, 0x6B, 0x89, - 0x8B, 0xAB, 0xA1, 0xC8, 0x1D, 0xCA, 0x20, 0x53, - 0xF5, 0x85, 0x87, 0xD3, 0xC4, 0xE3, 0x3C, 0x69, - 0x4A, 0x26, 0x4B, 0xE2, 0x89, 0x7E, 0x7D, 0x2E, - 0xEF, 0xAD, 0xDA, 0x9F, 0xF8, 0x8D, 0x70, 0xBF, - 0x37, 0x31, 0xF1, 0x22, 0x8C, 0xB3, 0xE1, 0x31, - 0xEB, 0x0C, 0xB7, 0x6F, 0xDB, 0xD2, 0xCC, 0xB1, - 0xCB, 0xC1, 0x8D, 0x14, 0x50, 0xAC, 0x7A, 0x16, - 0x34, 0x9E, 0x71, 0x29, 0xCA, 0xB7, 0x20, 0xD5, - 0xCB, 0x70, 0xB5, 0x6E, 0x85, 0x5E, 0x83, 0x05, - 0xDC, 0xDA, 0x73, 0x0B, 0xBD, 0x0E, 0xA3, 0x3E, - 0xF0, 0x81, 0x5D, 0x02, 0x19, 0x0B, 0xB9, 0x8E, - 0x30, 0xF7, 0x3B, 0xF7, 0x78, 0x9C, 0xDD, 0x67, - 0x3C, 0x61, 0x3B, 0x0C, 0x57, 0xCB, 0x2E, 0xF3, - 0x2E, 0x67, 0x0A, 0x98, 0xD2, 0xD6, 0x30, 0x67, - 0x07, 0x73, 0xC5, 0x9D, 0x8A, 0x6A, 0x2C, 0xFC, - 0xFF, 0x1C, 0x7C, 0xA1, 0xBB, 0x55, 0xC1, 0x7A, - 0x32, 0xCB, 0x65, 0xA2, 0xEA, 0x19, 0xC7, 0xB8, - 0xE2, 0x95, 0xC6, 0x89, 0x8C, 0xF3, 0x2F, 0xEE, - 0x1D, 0xEB, 0x01, 0x47, 0x2B, 0xE7, 0x6C, 0x3A, - 0x78, 0xCB, 0x24, 0x2E, 0xDF, 0xE2, 0x1D, 0x96, - 0x1F, 0xCB, 0x85, 0xC3, 0xCF, 0x6C, 0xEE, 0x21, - 0x89, 0x86, 0xC1, 0xBD, 0x93, 0x2B, 0xF9, 0x7B, - 0xC6, 0xDE, 0xCA, 0xAB, 0xF8, 0xC6, 0x29, 0x40, - 0xC0, 0xA5, 0x8E, 0x87, 0xC6, 0xED, 0xDC, 0xD7, - 0x4B, 0x7F, 0x71, 0x5D, 0x8C, 0x22, 0x52, 0x05, - 0x46, 0x23, 0x9F, 0x3A, 0xAA, 0x10, 0xA4, 0x35, - 0x82, 0x01, 0x03, 0xB4, 0xE3, 0x29, 0x53, 0x11, - 0xD9, 0x92, 0xC9, 0xC8, 0x77, 0x1A, 0x3C, 0xE8, - 0x49, 0x86, 0x8F, 0x36, 0xF3, 0x12, 0x14, 0xF9, - 0x63, 0x9C, 0x02, 0x8F, 0x4A, 0x5F, 0x49, 0x45, - 0xF2, 0xBE, 0xC9, 0x58, 0x50, 0x77, 0xBF, 0x2F, - 0x63, 0x7D, 0x25, 0x49, 0xF8, 0x34, 0x8C, 0x00, - 0xEC, 0xBF, 0x19, 0xC4, 0x70, 0xDF, 0x25, 0x5E, - 0xFF, 0x62, 0x32, 0x81, 0x34, 0x29, 0xF8, 0x53 + 0x16, 0x1C, 0xD2, 0x59, 0xFE, 0xAA, 0x7E, 0xC6, + 0xB2, 0x86, 0x49, 0x8A, 0x9A, 0x6F, 0x69, 0xF8, + 0xB2, 0x62, 0xA2, 0xE2, 0x09, 0x3D, 0x0F, 0xBD, + 0x76, 0xD5, 0xDC, 0x1C, 0x9F, 0xDE, 0x0D, 0xED, + 0xB3, 0x65, 0x81, 0x00, 0x4C, 0xB4, 0x81, 0x12, + 0xF8, 0x52, 0xE7, 0xF8, 0x7F, 0x64, 0x9E, 0x8A, + 0x42, 0xCD, 0x9E, 0x03, 0x49, 0xE7, 0xDA, 0xBD, + 0xF0, 0xA9, 0xAC, 0x1B, 0x52, 0x1C, 0x37, 0xEA, + 0x52, 0x41, 0x37, 0x0A, 0x8A, 0xB2, 0x91, 0x1C, + 0xC7, 0x99, 0x02, 0xC9, 0x5D, 0x28, 0x22, 0x4F, + 0xA8, 0x89, 0x6A, 0xD7, 0x15, 0x20, 0x9E, 0xCD, + 0xD5, 0xD7, 0x84, 0xE9, 0x1D, 0xD9, 0xD0, 0xBE, + 0x91, 0x6B, 0x45, 0x65, 0xF4, 0xD5, 0x66, 0x9A, + 0xEE, 0x0D, 0xEF, 0x93, 0x1E, 0x97, 0x68, 0x29, + 0x4E, 0xEC, 0x52, 0x58, 0xDE, 0x83, 0x91, 0xEC, + 0xE2, 0x71, 0xE7, 0xE4, 0xCF, 0xD9, 0xD2, 0x3A, + 0x79, 0xFA, 0xC3, 0xA8, 0xE0, 0xDB, 0x5D, 0xDD, + 0x6E, 0x01, 0x07, 0x23, 0x56, 0x88, 0xBB, 0xDF, + 0x7B, 0xC5, 0xD5, 0x63, 0x2F, 0x20, 0x6C, 0x63, + 0xA0, 0xC9, 0x56, 0x4F, 0x30, 0x96, 0x5C, 0xA5, + 0x8C, 0x69, 0xFF, 0x92, 0xD2, 0x5A, 0x4F, 0x93, + 0xA0, 0x9E, 0xAB, 0x9B, 0x90, 0x85, 0x94, 0x7E, + 0x07, 0x8A, 0x23, 0xE4, 0xD9, 0xC1, 0x3B, 0x8A, + 0x56, 0xE7, 0x3E, 0x18, 0xDF, 0x42, 0xD6, 0x94, + 0x9F, 0xAF, 0x59, 0x21, 0xF2, 0xE3, 0x73, 0xD4, + 0x50, 0xC8, 0xC0, 0x9D, 0x07, 0xB1, 0x52, 0xA9, + 0x7C, 0x24, 0x54, 0x47, 0x42, 0x94, 0x81, 0xD4, + 0x98, 0xBE, 0xB7, 0x25, 0x6B, 0xC4, 0x7F, 0x68, + 0xF9, 0x92, 0x2B, 0x0B, 0x1C, 0x62, 0xD9, 0xC2, + 0x3F, 0x9F, 0x73, 0x3D, 0xD7, 0x37, 0x92, 0xCF, + 0xC7, 0xB4, 0x3C, 0xBC, 0xEA, 0x27, 0x7D, 0x51, + 0xB2, 0xB8, 0xAD, 0x4A, 0x4F, 0x52, 0x2F, 0x64, + 0x2C, 0xAD, 0x5C, 0x5D, 0xEB, 0x21, 0xF3, 0x62, + 0x7F, 0x8A, 0xF4, 0xD3, 0xE5, 0xBC, 0x9E, 0x91, + 0xD4, 0xCB, 0x2F, 0x12, 0x4B, 0x5B, 0xD7, 0xC2, + 0xF4, 0xA0, 0x50, 0xCA, 0x75, 0x5B, 0xDB, 0x80, + 0x56, 0x60, 0x96, 0x63, 0xFB, 0x95, 0x11, 0xC9, + 0xAD, 0x83, 0xB5, 0x03, 0x90, 0x88, 0xCC, 0x01, + 0xF0, 0xDD, 0x54, 0x35, 0x3B, 0x0D, 0xD7, 0x43, + 0x3F, 0x0C, 0x6C, 0xEE, 0x0D, 0x07, 0x59, 0x59, + 0x81, 0x0D, 0xEC, 0x54, 0x16, 0x52, 0x2B, 0xB1, + 0xF1, 0xF6, 0x55, 0x47, 0xA0, 0xC2, 0xE9, 0xCC, + 0x9B, 0xC1, 0x7F, 0x8D, 0x39, 0xD2, 0x93, 0x09, + 0xEB, 0xE7, 0x9F, 0x21, 0x33, 0x1B, 0x75, 0xE1, + 0x2A, 0xF2, 0xE9, 0x3F, 0x03, 0xF7, 0x4F, 0x7F, + 0x87, 0xD3, 0x60, 0xF1, 0xDA, 0xF8, 0x6C, 0xED, + 0x73, 0x60, 0x92, 0xA2, 0x11, 0xA8, 0x15, 0x88, + 0x59, 0xC4, 0x2E, 0x22, 0x3C, 0xFE, 0x2E, 0x6E, + 0x55, 0x34, 0x37, 0xD8, 0x05, 0x76, 0xCF, 0xD1, + 0x94, 0x4E, 0x97, 0xEE, 0xFF, 0x9B, 0x49, 0xE5, + 0xEC, 0xCF, 0xC6, 0x78, 0xEE, 0x16, 0x52, 0x68, + 0xDF, 0xE3, 0xD3, 0x59, 0x6B, 0x4B, 0x86, 0x20, + 0x4A, 0x81, 0xC6, 0x06, 0x3B, 0x0C, 0xDC, 0xE6, + 0x19, 0xFD, 0xBB, 0x96, 0xDF, 0x7D, 0xE6, 0xE0, + 0xBD, 0x52, 0x70, 0xB4, 0xD5, 0x9C, 0x4D, 0xC5, + 0x08, 0x47, 0x6E, 0x7F, 0x07, 0x08, 0xF9, 0x8C, + 0x7A, 0x4F, 0x66, 0x45, 0xC4, 0x9D, 0x06, 0x10, + 0x0C, 0x76, 0x0C, 0x59, 0x95, 0x28, 0xD1, 0xB8, + 0xBB, 0xFE, 0x62, 0x81, 0x91, 0xCC, 0x08, 0x3C, + 0x8D, 0x22, 0x5A, 0x09, 0x3F, 0x9F, 0x17, 0xE3, + 0x55, 0x74, 0x98, 0x6F, 0x86, 0xBA, 0xA4, 0x68, + 0x98, 0xB5, 0x89, 0xF3, 0xCB, 0x7D, 0xB4, 0x6A, + 0x45, 0xF3, 0xED, 0xD4, 0xFA, 0xC2, 0x08, 0x08, + 0xF4, 0xCD, 0x02, 0x49, 0xDA, 0x69, 0x3F, 0x8F, + 0xAB, 0xFB, 0xD4, 0xE1, 0x0C, 0x02, 0xC6, 0x5B, + 0xA8, 0xC8, 0x61, 0x0F, 0xA8, 0xC6, 0xDF, 0x3D, + 0xBA, 0xEB, 0x67, 0x63, 0xDD, 0x48, 0x2A, 0xF4, + 0x15, 0x58, 0xB1, 0xE1, 0x5C, 0xC9, 0xC7, 0xA7, + 0x2E, 0x07, 0x16, 0x85, 0xAC, 0x19, 0xA0, 0x51, + 0xF1, 0x92, 0x45, 0xB9, 0xF7, 0x7C, 0x30, 0x38, + 0xA5, 0x4E, 0x29, 0x58, 0x62, 0x3E, 0xB8, 0x10, + 0x59, 0x55, 0x60, 0x9E, 0x27, 0xD6, 0x7C, 0xF7, + 0x2E, 0xC5, 0xC4, 0xA8, 0xE9, 0xB9, 0xC2, 0x92, + 0x4A, 0x9E, 0x22, 0x98, 0x50, 0x8B, 0xAB, 0xA1, + 0x3C, 0xF1, 0x11, 0xFD, 0xFB, 0x06, 0x2C, 0x96, + 0x07, 0xAC, 0x1A, 0xAA, 0x6C, 0x63, 0x73, 0x10, + 0xA8, 0x89, 0x4B, 0xF0, 0xB9, 0x6F, 0x0C, 0x19, + 0x13, 0x61, 0x86, 0xB6, 0x18, 0xDF, 0xFB, 0x27, + 0x55, 0x28, 0xBE, 0xD1, 0xCC, 0x27, 0x15, 0xDE, + 0xF4, 0x12, 0xF7, 0x7A, 0x3C, 0xF9, 0x66, 0x45, + 0x73, 0x3B, 0x04, 0x8A, 0x78, 0x47, 0x43, 0x20, + 0xD1, 0xA3, 0x80, 0xF5, 0xEE, 0xDB, 0xDA, 0x21, + 0xFA, 0x01, 0x25, 0xC9, 0x1D, 0x3C, 0x37, 0xC5, + 0x4B, 0xF3, 0x75, 0x2A, 0x1F, 0x84, 0x71, 0xC8, + 0x1F, 0xCA, 0xE2, 0xD3, 0xED, 0xA9, 0x66, 0xE1, + 0x4E, 0x66, 0xF2, 0x23, 0xB0, 0x54, 0xD7, 0x98, + 0x48, 0xFF, 0x94, 0x11, 0xD6, 0x34, 0x02, 0x4A, + 0x09, 0x89, 0x70, 0xAD, 0xE6, 0xA8, 0x8B, 0x5F, + 0x90, 0x69, 0xF7, 0x60, 0x58, 0x4D, 0xC4, 0xCF, + 0xFF, 0xCE, 0xA8, 0xEC, 0xE1, 0x1B, 0xB5, 0x56, + 0x6B, 0xD2, 0x36, 0x0A, 0xB7, 0x07, 0xDF, 0x2D, + 0x21, 0xB6, 0x74, 0x88, 0xD9, 0x31, 0xF0, 0x20, + 0x06, 0x91, 0x76, 0x42, 0x3E, 0x69, 0x44, 0x49, + 0x0C, 0xB3, 0x85, 0xE7, 0x0B, 0x35, 0x8A, 0x25, + 0x34, 0x6B, 0xAF, 0xCD, 0xD0, 0x6D, 0x40, 0x2F, + 0xF2, 0x4D, 0x6C, 0x1E, 0x5F, 0x61, 0xA8, 0x5D }; static const byte kprime_512[KYBER_SS_SZ] = { - 0x22, 0x4B, 0x9C, 0x05, 0x12, 0x13, 0xEF, 0x46, - 0x54, 0x92, 0x43, 0x79, 0x65, 0x32, 0x28, 0x29, - 0x73, 0xFA, 0x7C, 0xF9, 0x7E, 0x89, 0x13, 0xC3, - 0x39, 0xC1, 0x94, 0x0A, 0xC1, 0x7E, 0x05, 0xE0 + 0xDF, 0x46, 0x2A, 0xD6, 0x8F, 0x1E, 0xC8, 0x97, + 0x2E, 0xD9, 0xB0, 0x2D, 0x6D, 0xE0, 0x60, 0x4B, + 0xDE, 0xC7, 0x57, 0x20, 0xE0, 0x50, 0x49, 0x73, + 0x51, 0xE6, 0xEC, 0x93, 0x3E, 0x71, 0xF8, 0x82 }; #endif #ifndef WOLFSSL_NO_KYBER768 static const byte dk_768[KYBER768_PRIVATE_KEY_SIZE] = { - 0x34, 0x56, 0x85, 0x9B, 0xF7, 0x07, 0xE6, 0x72, - 0xAC, 0x71, 0x2B, 0x7E, 0x70, 0xF5, 0x42, 0x75, - 0x74, 0x59, 0x75, 0x02, 0xB8, 0x1D, 0xE8, 0x93, - 0x1C, 0x92, 0xA9, 0xC0, 0xD2, 0x2A, 0x8E, 0x17, - 0x73, 0xCB, 0x87, 0x47, 0x22, 0x05, 0xA3, 0x1C, - 0x32, 0x20, 0x6B, 0xA4, 0xBC, 0xF4, 0x22, 0x59, - 0x53, 0x3C, 0xB3, 0xA1, 0x9C, 0x02, 0x00, 0x86, - 0x02, 0x44, 0xA6, 0xC3, 0xF6, 0x92, 0x18, 0x45, - 0xB0, 0xA0, 0x58, 0x50, 0x18, 0x7A, 0x43, 0x10, - 0xB3, 0xD5, 0x22, 0x3A, 0xAA, 0xA0, 0xC7, 0x9B, - 0x9B, 0xBC, 0xFC, 0xCB, 0x3F, 0x75, 0x12, 0x14, - 0xEB, 0x0C, 0xFA, 0xC1, 0xA2, 0x9E, 0xD8, 0x84, - 0x8A, 0x5A, 0x49, 0xBA, 0x84, 0xBA, 0x68, 0xE6, - 0xB6, 0xF5, 0x05, 0x7D, 0x49, 0x31, 0x05, 0xFF, - 0x38, 0xA9, 0xF4, 0x4B, 0x4E, 0x7F, 0x6C, 0xBE, - 0x7D, 0x21, 0x64, 0x08, 0xF7, 0xB4, 0x86, 0x05, - 0xB2, 0x70, 0xB2, 0x53, 0xB0, 0x01, 0xA5, 0x40, - 0x1C, 0x0C, 0x91, 0x27, 0xCC, 0x18, 0x5B, 0x1B, - 0x0C, 0xF9, 0x2B, 0x99, 0xFB, 0xA0, 0xD9, 0x5A, - 0x29, 0x5F, 0x87, 0x35, 0x15, 0x52, 0x0C, 0x86, - 0x32, 0x1B, 0x8C, 0x96, 0x6C, 0x83, 0x7A, 0xAB, - 0x34, 0xB2, 0xBF, 0xFA, 0xB2, 0xA2, 0xA4, 0x30, - 0x1B, 0x35, 0x6B, 0x26, 0xCD, 0xC4, 0x56, 0x38, - 0x02, 0x90, 0x1B, 0x47, 0x62, 0xF2, 0x84, 0x28, - 0x1A, 0x38, 0x2E, 0x5F, 0x76, 0x2B, 0xEF, 0x47, - 0xB5, 0x19, 0xA8, 0x1A, 0x10, 0x86, 0x57, 0xEB, - 0xE9, 0x62, 0xBE, 0x12, 0x0B, 0x5F, 0xB3, 0xB9, - 0xED, 0x33, 0x8C, 0xCF, 0x47, 0xB3, 0xA0, 0x39, - 0x52, 0xA1, 0x66, 0x33, 0xF6, 0xE6, 0xB5, 0x34, - 0xE6, 0xB6, 0x3D, 0x05, 0x70, 0x6E, 0xFA, 0x0F, - 0x94, 0xC0, 0x3A, 0x2B, 0x85, 0x6A, 0xE5, 0x51, - 0x42, 0x2F, 0x90, 0x11, 0xF2, 0x58, 0x9A, 0x41, - 0xB9, 0x6A, 0x2C, 0xD2, 0x13, 0xC6, 0x99, 0x9B, - 0x09, 0xE9, 0x1F, 0xF4, 0x23, 0xCB, 0x10, 0x6A, - 0x1A, 0x92, 0x0B, 0x84, 0xB8, 0x11, 0x46, 0x94, - 0x97, 0x15, 0x42, 0x23, 0x98, 0x7F, 0x00, 0x5C, - 0x72, 0xF8, 0xAF, 0x38, 0x8B, 0x09, 0x0C, 0x63, - 0x9F, 0x8C, 0x77, 0x4F, 0xC5, 0xA2, 0x94, 0xC7, - 0x4A, 0x21, 0x2C, 0x91, 0xA8, 0x6C, 0x32, 0x8A, - 0xEB, 0xEA, 0x55, 0x8A, 0xB4, 0x3F, 0x8B, 0x87, - 0x35, 0x34, 0xFA, 0x2E, 0xF9, 0xE6, 0x6C, 0xEF, - 0x3C, 0x52, 0xCD, 0x47, 0x1A, 0xB7, 0x83, 0x75, - 0xE7, 0x45, 0xB9, 0xD0, 0xAA, 0x65, 0xD2, 0x27, - 0x8B, 0x92, 0x75, 0xAE, 0x53, 0x48, 0xB1, 0x6C, - 0xF6, 0x2A, 0xC8, 0x06, 0x57, 0x34, 0xE4, 0xBD, - 0x77, 0xB8, 0x0C, 0xCF, 0x89, 0x76, 0x05, 0xEB, - 0x76, 0xF4, 0x85, 0xAF, 0x8A, 0x0B, 0x46, 0x65, - 0x57, 0xA8, 0x3C, 0x02, 0x92, 0xCC, 0xF9, 0x03, - 0xEE, 0x7A, 0xA5, 0x7C, 0x3B, 0x51, 0xAD, 0x66, - 0x01, 0x89, 0xB8, 0x61, 0x39, 0xE3, 0x80, 0x42, - 0x5B, 0x31, 0xA9, 0x26, 0x89, 0xDF, 0x24, 0x31, - 0xBF, 0xA7, 0xB6, 0x9E, 0xAB, 0x17, 0x27, 0x45, - 0x1B, 0x29, 0xDA, 0x8B, 0x8B, 0xF8, 0x51, 0xE1, - 0xBC, 0x2D, 0x3A, 0x63, 0x13, 0x4C, 0xA9, 0x66, - 0x3C, 0x57, 0xAE, 0xC6, 0x98, 0x5C, 0xEB, 0xD5, - 0x6D, 0xB0, 0x44, 0x7B, 0x13, 0x6B, 0x01, 0x7A, - 0x97, 0x47, 0x61, 0xC3, 0xC6, 0x7D, 0x33, 0x77, - 0x2F, 0x99, 0x64, 0xE5, 0x43, 0x4D, 0x64, 0x35, - 0x04, 0x33, 0x2A, 0x30, 0x27, 0x29, 0x4A, 0x07, - 0x8C, 0x59, 0x9C, 0xB2, 0x91, 0x63, 0x10, 0x9C, - 0xE3, 0xB5, 0x6C, 0xE6, 0x98, 0xB4, 0xD3, 0xF5, - 0x9E, 0x29, 0x56, 0xA1, 0xF0, 0x3A, 0x4B, 0x95, - 0x55, 0x93, 0xF2, 0xD2, 0x45, 0x7F, 0xFA, 0xAE, - 0x96, 0x24, 0xA0, 0x71, 0x10, 0x45, 0xB3, 0xF5, - 0x52, 0x92, 0xF2, 0x0C, 0xC9, 0xD0, 0xCD, 0x79, - 0x1A, 0x21, 0x59, 0x7B, 0x0F, 0x2C, 0xD9, 0x80, - 0xF3, 0x51, 0x0F, 0x0B, 0x02, 0x39, 0x02, 0x20, - 0x00, 0xD7, 0x35, 0x58, 0x6E, 0xE6, 0xA7, 0x3F, - 0x3A, 0x3D, 0xCB, 0xD6, 0xBD, 0x1A, 0x85, 0xC8, - 0x65, 0x12, 0xAB, 0xF3, 0xC5, 0x1C, 0xE0, 0x0A, - 0x03, 0x31, 0xF6, 0x53, 0x60, 0x46, 0x2C, 0x02, - 0x23, 0x29, 0x59, 0x7A, 0x81, 0xC3, 0xF9, 0x2F, - 0xC1, 0x79, 0x38, 0xC9, 0x13, 0x8F, 0x41, 0x11, - 0x38, 0x79, 0x79, 0xC2, 0x8F, 0x03, 0x34, 0xF9, - 0x01, 0x19, 0x22, 0x13, 0x74, 0xDA, 0xB0, 0x45, - 0x92, 0x9B, 0x49, 0xE4, 0x3A, 0x96, 0x46, 0xA2, - 0x43, 0xF4, 0x46, 0x4D, 0xAF, 0x81, 0x1A, 0xB0, - 0x06, 0x30, 0xC7, 0x59, 0x61, 0xBC, 0xD4, 0xAF, - 0x5D, 0x99, 0x11, 0x5A, 0x37, 0x49, 0x19, 0x1B, - 0xA8, 0xFD, 0x41, 0xCE, 0x0B, 0x3C, 0x89, 0xA6, - 0x95, 0xB4, 0xBB, 0x85, 0x06, 0x4F, 0xD3, 0xAF, - 0x95, 0xC9, 0xB4, 0xAE, 0xE0, 0x9A, 0xC7, 0xB0, - 0xCC, 0x69, 0xEC, 0xA3, 0x6A, 0x00, 0x4B, 0x6C, - 0xD6, 0x62, 0xA6, 0xD3, 0x27, 0x95, 0x05, 0x3E, - 0xF0, 0xA0, 0x3A, 0xDA, 0x3B, 0x98, 0xBF, 0xE3, - 0xB4, 0x6A, 0x79, 0x72, 0x3E, 0x3A, 0x45, 0xAB, - 0x3C, 0x31, 0x95, 0x06, 0x69, 0xAD, 0x77, 0x07, - 0x20, 0x62, 0xCC, 0x3B, 0x50, 0x4D, 0xF1, 0x33, - 0x4F, 0xD6, 0x90, 0x9E, 0xAC, 0x79, 0x15, 0xF1, - 0xD5, 0xAD, 0x16, 0x63, 0x9F, 0x5F, 0xB5, 0x64, - 0x41, 0x64, 0x54, 0x25, 0x91, 0x34, 0xD5, 0x65, - 0x88, 0x2C, 0xB3, 0x81, 0xCB, 0xA5, 0x8B, 0x76, - 0x88, 0x07, 0x67, 0xB5, 0x0A, 0xC1, 0xB8, 0x57, - 0x95, 0xD7, 0x26, 0x84, 0x33, 0xB3, 0x71, 0x23, - 0x0E, 0xD4, 0xC7, 0x2F, 0x99, 0xAB, 0x1A, 0xD1, - 0xE5, 0x95, 0xA4, 0x59, 0xCF, 0x0A, 0x23, 0x34, - 0xAA, 0x14, 0x63, 0xAD, 0xE4, 0xBD, 0xC9, 0x24, - 0x96, 0x05, 0x38, 0x18, 0x57, 0xBB, 0x98, 0x09, - 0x5B, 0x41, 0x13, 0x29, 0x46, 0xCA, 0x24, 0x57, - 0xDF, 0xAA, 0x91, 0x49, 0x58, 0x2A, 0xA1, 0x99, - 0x27, 0xB6, 0x36, 0x89, 0xE2, 0x92, 0x9A, 0xA4, - 0x10, 0x27, 0xBE, 0xF4, 0x92, 0x19, 0x70, 0xBA, - 0xD4, 0xA5, 0x54, 0x90, 0xD9, 0x1A, 0xBE, 0x25, - 0x1D, 0xEF, 0x45, 0x52, 0xCA, 0x88, 0x03, 0x41, - 0x06, 0xA0, 0x2C, 0xE4, 0xB0, 0x58, 0xF8, 0xB5, - 0x96, 0x24, 0xB6, 0x7E, 0x06, 0x3B, 0xF1, 0x78, - 0xB0, 0x15, 0xE4, 0x28, 0x1E, 0xB1, 0x14, 0xA2, - 0xBC, 0x24, 0x54, 0x94, 0x3A, 0x4B, 0x46, 0x47, - 0x12, 0x2C, 0x42, 0xCB, 0xEA, 0x4E, 0x94, 0x15, - 0x4F, 0xD3, 0xE4, 0xB7, 0x91, 0xF6, 0x29, 0x0B, - 0x78, 0x29, 0x94, 0x20, 0x68, 0x53, 0xD6, 0x70, - 0x00, 0xA6, 0x33, 0xF3, 0x20, 0xA8, 0xA3, 0x74, - 0xCA, 0x5D, 0x40, 0x38, 0xF9, 0xCA, 0x42, 0x44, - 0xDC, 0xB0, 0x2E, 0x9A, 0x84, 0xE1, 0xF7, 0xC8, - 0xA8, 0x21, 0x13, 0x2B, 0x32, 0xB9, 0xA8, 0x40, - 0x55, 0x7B, 0x34, 0x78, 0x06, 0x65, 0x30, 0x17, - 0x24, 0xBA, 0x26, 0x06, 0x68, 0x1D, 0x94, 0x5E, - 0x34, 0xD7, 0xCF, 0x94, 0x1B, 0x89, 0x63, 0xCA, - 0xA1, 0x00, 0x1A, 0x49, 0x1B, 0x8B, 0x2E, 0x43, - 0x57, 0x0E, 0x9A, 0xB9, 0x5C, 0x0A, 0x57, 0xC5, - 0x03, 0xF0, 0xAB, 0x96, 0x0B, 0x48, 0x56, 0xD0, - 0x25, 0x15, 0x74, 0x71, 0x0F, 0xE5, 0xCB, 0x47, - 0x42, 0x84, 0xFC, 0x10, 0x49, 0xAA, 0x2A, 0x7B, - 0x03, 0x69, 0x4A, 0x1C, 0x76, 0x3E, 0x99, 0xDA, - 0xC6, 0xAD, 0x0B, 0xA8, 0x03, 0x8B, 0x13, 0x8A, - 0x64, 0x43, 0x2E, 0x34, 0x91, 0x16, 0xA0, 0x31, - 0xE8, 0xC7, 0x92, 0x78, 0x17, 0x51, 0xBA, 0x47, - 0x3C, 0xBD, 0xF5, 0x57, 0x20, 0x00, 0x5A, 0xBD, - 0xAA, 0x13, 0xD5, 0x01, 0x82, 0xF0, 0xE6, 0x33, - 0x77, 0x6B, 0xB0, 0x67, 0x5C, 0x40, 0x47, 0x2B, - 0xAD, 0x1F, 0x96, 0x72, 0x76, 0x91, 0x83, 0xD0, - 0xCC, 0xC8, 0x10, 0xBC, 0x25, 0xA8, 0x57, 0x32, - 0x20, 0x56, 0x9F, 0x6A, 0xC4, 0xBA, 0xC2, 0x2A, - 0x13, 0x54, 0xD8, 0xB3, 0x6C, 0x05, 0x80, 0xD0, - 0xE5, 0x29, 0x9E, 0x62, 0x9C, 0x50, 0x6C, 0xC7, - 0x65, 0x55, 0x46, 0xFF, 0x27, 0x81, 0x0C, 0x97, - 0xB5, 0x1B, 0xA0, 0x56, 0xBB, 0xF8, 0x6E, 0xD9, - 0xCB, 0x7C, 0x0A, 0x53, 0x7F, 0x72, 0xD0, 0xCF, - 0x9A, 0xD2, 0xC2, 0x31, 0xE2, 0x9E, 0xBF, 0x55, - 0x3F, 0x61, 0x3C, 0xBB, 0x15, 0xB3, 0x72, 0x1A, - 0x20, 0x07, 0x7E, 0x50, 0x5F, 0xD3, 0x90, 0xCB, - 0x19, 0xF6, 0x48, 0x8A, 0x10, 0x7D, 0xEE, 0x1C, - 0xAC, 0x58, 0xAB, 0x70, 0x34, 0xBA, 0x69, 0x03, - 0x00, 0x21, 0x95, 0x95, 0xB3, 0x69, 0x5C, 0x12, - 0x34, 0xE8, 0xB5, 0x7E, 0x33, 0xC8, 0xD3, 0xA0, - 0x48, 0x45, 0x4A, 0x61, 0x6D, 0xF3, 0xC9, 0xB5, - 0x6A, 0x6F, 0xF2, 0x02, 0x6A, 0xF9, 0x97, 0x72, - 0x5F, 0xC9, 0x55, 0x79, 0x04, 0x3B, 0xAE, 0x93, - 0x99, 0xB6, 0x79, 0x0D, 0x63, 0x7B, 0x4F, 0xA8, - 0x20, 0xB0, 0xB2, 0xD2, 0xCA, 0xB6, 0x07, 0xBA, - 0xF6, 0xA3, 0x72, 0x73, 0x4C, 0x31, 0xEE, 0x00, - 0x26, 0xF3, 0xC0, 0x76, 0xD1, 0x4A, 0x8E, 0x3E, - 0xE6, 0x6A, 0xAD, 0x8B, 0xBB, 0xCC, 0xEB, 0x9D, - 0xC7, 0x0C, 0x7B, 0x6B, 0xB0, 0xBB, 0x76, 0xC2, - 0x00, 0xC2, 0x31, 0x60, 0x1C, 0xA0, 0x87, 0x3E, - 0xC8, 0x71, 0x0F, 0x4B, 0x18, 0xD5, 0x72, 0x90, - 0xB0, 0x33, 0x72, 0x7C, 0x60, 0x1E, 0xDB, 0x71, - 0xC2, 0xB0, 0xF0, 0xC2, 0x1D, 0x55, 0x3E, 0x0E, - 0x7A, 0x4F, 0x77, 0x71, 0x68, 0x39, 0xC7, 0xC8, - 0x44, 0x8A, 0xBB, 0x9F, 0x66, 0xA5, 0x4E, 0x8A, - 0x4B, 0x08, 0xA7, 0x9D, 0x9A, 0x39, 0x2C, 0xA1, - 0x27, 0x00, 0x31, 0x38, 0x8B, 0xAD, 0x56, 0x21, - 0x7E, 0x32, 0xAE, 0xF5, 0x54, 0x11, 0x97, 0x49, - 0x06, 0xA2, 0x45, 0xC0, 0x07, 0x12, 0xB3, 0xCB, - 0xB1, 0x17, 0x06, 0x85, 0x19, 0x3F, 0xE2, 0x5A, - 0xCD, 0x7A, 0xC1, 0x3D, 0x32, 0x07, 0x3F, 0x38, - 0x79, 0xA5, 0xD7, 0x83, 0x75, 0xF0, 0x05, 0x2C, - 0xF7, 0x91, 0x75, 0xBA, 0xB4, 0x6D, 0x22, 0x37, - 0x05, 0x97, 0xBD, 0x06, 0x78, 0x9E, 0xDD, 0x07, - 0x11, 0xCC, 0x42, 0x43, 0x50, 0x7A, 0x02, 0xB4, - 0xFA, 0xAD, 0xBB, 0x62, 0x25, 0x0C, 0xC9, 0x97, - 0xAE, 0x03, 0x27, 0xAE, 0xB0, 0x0D, 0xEB, 0x52, - 0x91, 0x92, 0xA6, 0x4B, 0x10, 0x96, 0xA8, 0x6B, - 0x19, 0x67, 0x4D, 0x0B, 0x0A, 0xF0, 0x5C, 0x4A, - 0xAE, 0x17, 0x8C, 0x2C, 0x9A, 0x64, 0x42, 0xE9, - 0x4E, 0xD0, 0xA5, 0x60, 0x33, 0xA1, 0x1E, 0xE4, - 0x26, 0x32, 0xC0, 0xB4, 0xAA, 0x51, 0xD4, 0x21, - 0x50, 0x79, 0x0F, 0x41, 0x06, 0x2B, 0x77, 0x25, - 0x3C, 0x25, 0xBA, 0x4D, 0xE5, 0x59, 0x76, 0x1F, - 0x0A, 0x90, 0x06, 0x83, 0x89, 0x72, 0x8B, 0xC9, - 0x77, 0xF7, 0x0C, 0xF7, 0xBC, 0xCF, 0xBD, 0x88, - 0x3D, 0xF1, 0x3C, 0x79, 0xF5, 0xF2, 0xC3, 0x43, - 0x12, 0xCB, 0x1D, 0x5A, 0x55, 0xD7, 0x8C, 0x1B, - 0x24, 0x20, 0x96, 0xA8, 0xC0, 0x59, 0x3C, 0xFB, - 0x27, 0x53, 0x46, 0x0B, 0xD3, 0x0A, 0xBA, 0x30, - 0x6C, 0x74, 0x17, 0x39, 0x95, 0x74, 0x83, 0x85, - 0xD0, 0x0B, 0x36, 0x70, 0xE6, 0x13, 0x24, 0xD8, - 0x7D, 0xE8, 0xA1, 0x44, 0x50, 0xDC, 0x49, 0x37, - 0x68, 0x77, 0x7F, 0xF0, 0xCE, 0x68, 0x10, 0x93, - 0x7A, 0x71, 0x12, 0x29, 0x56, 0x1A, 0x5E, 0xF2, - 0xBB, 0x69, 0x86, 0x10, 0x74, 0xE0, 0x0B, 0xD9, - 0x32, 0x66, 0xE4, 0xB8, 0x62, 0x69, 0xE1, 0x8E, - 0xEA, 0x2C, 0xAA, 0xCB, 0x60, 0xA1, 0x35, 0x86, - 0x36, 0xCD, 0x7A, 0x7C, 0xA6, 0xBB, 0x68, 0x21, - 0x30, 0x24, 0x17, 0x84, 0xB1, 0x01, 0xEA, 0x5B, - 0xFD, 0x6C, 0x3A, 0x07, 0x15, 0x86, 0x21, 0x61, - 0x47, 0x36, 0xF6, 0x99, 0x6D, 0x5A, 0x4E, 0x14, - 0x96, 0x3A, 0x12, 0xD8, 0x36, 0xE5, 0x33, 0xA0, - 0xC8, 0x91, 0x2D, 0xB7, 0xE1, 0x16, 0x85, 0xA4, - 0xA5, 0x3D, 0x82, 0x85, 0xF0, 0x87, 0x50, 0xDF, - 0xF6, 0x6D, 0xA2, 0x7C, 0x23, 0xB9, 0x75, 0x42, - 0xDE, 0xFB, 0x99, 0xE4, 0x70, 0xAC, 0xD5, 0xE6, - 0x47, 0xC9, 0x40, 0xCB, 0x57, 0x30, 0x1B, 0x43, - 0xCC, 0x3E, 0x68, 0xE6, 0x4E, 0x28, 0xB0, 0x67, - 0x70, 0x69, 0x5E, 0xF6, 0x09, 0x26, 0x5E, 0x06, - 0xC6, 0x0F, 0x22, 0xCB, 0x87, 0x58, 0x49, 0xE6, - 0x2B, 0xAB, 0x88, 0xCC, 0x10, 0xEC, 0xF6, 0x22, - 0xC3, 0x79, 0xCB, 0x54, 0xF1, 0x3D, 0x8B, 0x2B, - 0xAC, 0x90, 0x2B, 0x9A, 0xB0, 0x2B, 0xB3, 0x30, - 0xB4, 0x5A, 0xC8, 0xB7, 0x41, 0xC2, 0x64, 0x7A, - 0xC4, 0x5B, 0x5B, 0xF4, 0x8A, 0x6D, 0x3F, 0xE0, - 0x39, 0x98, 0x6C, 0xC9, 0x40, 0xC6, 0x0A, 0x94, - 0xE6, 0x6C, 0xF6, 0x44, 0x53, 0x10, 0x16, 0xA5, - 0x27, 0x24, 0x50, 0x82, 0x43, 0x14, 0xB5, 0x66, - 0x2A, 0x0A, 0x90, 0x9A, 0xBF, 0xB4, 0x6F, 0xD2, - 0x7B, 0xAE, 0xD3, 0xAB, 0xA8, 0x25, 0x93, 0x61, - 0x59, 0x68, 0x82, 0xB0, 0x8B, 0x2A, 0xC7, 0x23, - 0x39, 0x30, 0xFC, 0x37, 0x86, 0x73, 0x8E, 0xD2, - 0xF8, 0x1E, 0xE6, 0x38, 0xC4, 0x5C, 0x3B, 0x9C, - 0xFD, 0x19, 0x51, 0xDB, 0x5B, 0xCC, 0x14, 0x45, - 0xC2, 0xC1, 0x62, 0x5D, 0x57, 0xD5, 0x7B, 0x53, - 0x90, 0x4B, 0x6A, 0x1A, 0xB6, 0x81, 0x58, 0x07, - 0x55, 0xE8, 0x9F, 0xA7, 0x97, 0x75, 0xA6, 0x57, - 0xCD, 0x62, 0xB4, 0x42, 0x63, 0x04, 0xBC, 0x0C, - 0x71, 0x1E, 0x28, 0x07, 0xA2, 0xC9, 0xE8, 0x52, - 0xD4, 0xB4, 0x35, 0x9E, 0xE6, 0xB5, 0x3E, 0x46, - 0x75, 0xF5, 0x23, 0xC9, 0x07, 0x82, 0x57, 0x2D, - 0xC7, 0x36, 0x8F, 0xB4, 0x00, 0xC3, 0x28, 0xC7, - 0x0F, 0xC8, 0x46, 0xB5, 0xE9, 0x8A, 0x43, 0x30, - 0xBB, 0xB6, 0x27, 0xBD, 0xD7, 0x84, 0xB4, 0xDA, - 0xF0, 0xB1, 0xF6, 0x45, 0x94, 0x49, 0x42, 0xB4, - 0xC2, 0xB6, 0x22, 0x5C, 0x8B, 0x31, 0xE9, 0x89, - 0x54, 0x55, 0x22, 0xBA, 0x6F, 0x10, 0x39, 0x60, - 0x34, 0xCB, 0x1C, 0xA7, 0x45, 0x97, 0x78, 0x44, - 0xD5, 0x70, 0x89, 0x4C, 0x61, 0x1A, 0x56, 0x08, - 0xA7, 0x57, 0x41, 0x6D, 0x6D, 0xE5, 0x99, 0x63, - 0xC3, 0x27, 0x98, 0xC4, 0x93, 0xEF, 0xD2, 0x26, - 0x4C, 0x23, 0x19, 0x10, 0xE9, 0xA3, 0x00, 0x90, - 0xCA, 0x7B, 0x53, 0x84, 0xF2, 0x31, 0xB8, 0x9B, - 0xA6, 0x8A, 0x23, 0x81, 0x90, 0xEF, 0x1A, 0x2A, - 0x43, 0xCB, 0x01, 0x70, 0x34, 0x70, 0xA0, 0xF0, - 0x61, 0xA7, 0x07, 0x38, 0x94, 0x4B, 0xCD, 0x9B, - 0x70, 0x04, 0xF2, 0x47, 0x97, 0xAE, 0xCB, 0x88, - 0xB1, 0x09, 0x1C, 0xFE, 0xD0, 0x59, 0x0B, 0x04, - 0x15, 0x45, 0x3C, 0x39, 0xB6, 0xEC, 0x45, 0xB6, - 0x63, 0x05, 0xFA, 0xEA, 0x6B, 0x55, 0xA4, 0xB7, - 0x96, 0x75, 0x05, 0xFE, 0x38, 0x62, 0xA2, 0x67, - 0xAD, 0xBF, 0xE0, 0x5B, 0x91, 0x81, 0xA0, 0x65, - 0x01, 0x89, 0x33, 0x91, 0x65, 0x0E, 0xAA, 0xA4, - 0xA6, 0xD1, 0x68, 0x53, 0x34, 0x92, 0x76, 0xF9, - 0x8E, 0x0F, 0x44, 0xCD, 0x72, 0x66, 0x15, 0xC6, - 0x1C, 0x16, 0x71, 0x30, 0x94, 0xD8, 0xAB, 0x09, - 0x3C, 0xAC, 0x71, 0xF2, 0x80, 0x3E, 0x7D, 0x39, - 0x10, 0x9E, 0xF5, 0x00, 0x9C, 0x9C, 0x2C, 0xDA, - 0xF7, 0xB7, 0xA6, 0xB3, 0x7A, 0x33, 0xA4, 0x98, - 0x81, 0xF4, 0xBB, 0x5D, 0x72, 0x45, 0xA1, 0x4C, - 0x50, 0x42, 0x28, 0x0C, 0x76, 0xA8, 0x4E, 0x63, - 0xF4, 0x9D, 0x0D, 0x61, 0x9D, 0x46, 0xD7, 0x23, - 0xBA, 0xA7, 0x47, 0xA3, 0xBA, 0x90, 0xA6, 0xFB, - 0x63, 0x7A, 0x9A, 0x1D, 0xC0, 0x22, 0x68, 0xFD, - 0x5C, 0x04, 0x3D, 0x18, 0xCB, 0xA1, 0x52, 0x8A, - 0xC8, 0xE2, 0x25, 0xC1, 0xF9, 0x23, 0xD1, 0xCC, - 0x84, 0xF2, 0xE7, 0x8E, 0x25, 0xDC, 0x3C, 0xCE, - 0x93, 0x53, 0xC9, 0xDA, 0xC2, 0xAD, 0x72, 0x6A, - 0x79, 0xF6, 0x49, 0x40, 0x80, 0x1D, 0xD5, 0x70, - 0x1E, 0xFB, 0xDC, 0xB8, 0x0A, 0x98, 0xA2, 0x59, - 0x93, 0xCD, 0x7F, 0x80, 0x59, 0x13, 0x20, 0xB6, - 0x31, 0x72, 0x71, 0x86, 0x47, 0xB9, 0x76, 0xA9, - 0x8A, 0x77, 0x16, 0x86, 0xF0, 0x12, 0x0A, 0x05, - 0x3B, 0x0C, 0x44, 0x74, 0x60, 0x43, 0x05, 0x89, - 0x0F, 0xEC, 0xAF, 0x23, 0x47, 0x5D, 0xDC, 0xC1, - 0x1B, 0xC0, 0x8A, 0x9C, 0x5F, 0x59, 0x2A, 0xBB, - 0x1A, 0x15, 0x3D, 0xB1, 0xB8, 0x83, 0xC0, 0x50, - 0x7E, 0xB6, 0x8F, 0x78, 0xE0, 0xA1, 0x4D, 0xEB, - 0xBF, 0xEE, 0xC6, 0x21, 0xE1, 0x0A, 0x69, 0xB6, - 0xDA, 0xAF, 0xAA, 0x91, 0x6B, 0x53, 0x95, 0x33, - 0xE5, 0x08, 0x00, 0x7C, 0x41, 0x88, 0xCE, 0x05, - 0xC8, 0x62, 0xD1, 0x01, 0xD4, 0xDB, 0x1D, 0xF3, - 0xC4, 0x50, 0x2B, 0x8C, 0x8A, 0xE1, 0x45, 0x74, - 0x88, 0xA3, 0x6E, 0xAD, 0x26, 0x65, 0xBF, 0xAC, - 0xB3, 0x21, 0x76, 0x02, 0x81, 0xDB, 0x9C, 0xA7, - 0x2C, 0x76, 0x14, 0x36, 0x34, 0x04, 0xA0, 0xA8, - 0xEA, 0xBC, 0x05, 0x8A, 0x23, 0xA3, 0x46, 0x87, - 0x5F, 0xA9, 0x6B, 0xB1, 0x8A, 0xC2, 0xCC, 0xF0, - 0x93, 0xB8, 0xA8, 0x55, 0x67, 0x38, 0x11, 0xCE, - 0xD4, 0x7C, 0xBE, 0x1E, 0xE8, 0x1D, 0x2C, 0xF0, - 0x7E, 0x43, 0xFC, 0x48, 0x72, 0x09, 0x08, 0x53, - 0x74, 0x31, 0x08, 0x86, 0x5F, 0x02, 0xC5, 0x61, - 0x2A, 0xA8, 0x71, 0x66, 0x70, 0x7E, 0xE9, 0x0F, - 0xFD, 0x5B, 0x80, 0x21, 0xF0, 0xAA, 0x01, 0x6E, - 0x5D, 0xBC, 0xD9, 0x1F, 0x57, 0xB3, 0x56, 0x2D, - 0x3A, 0x2B, 0xCF, 0xA2, 0x0A, 0x4C, 0x03, 0x01, - 0x0B, 0x8A, 0xA1, 0x44, 0xE6, 0x48, 0x28, 0x04, - 0xB4, 0x74, 0xFE, 0xC1, 0xF5, 0xE1, 0x38, 0xBE, - 0x63, 0x2A, 0x3B, 0x9C, 0x82, 0x48, 0x3D, 0xC6, - 0x89, 0x0A, 0x13, 0xB1, 0xE8, 0xEE, 0x6A, 0xF7, - 0x14, 0xEC, 0x5E, 0xFA, 0xC3, 0xB1, 0x97, 0x6B, - 0x29, 0xDA, 0xDB, 0x60, 0x5B, 0x14, 0xD3, 0x73, - 0x2B, 0x5D, 0xE1, 0x18, 0x59, 0x65, 0x16, 0x85, - 0x81, 0x17, 0xE2, 0x63, 0x4C, 0x4E, 0xA0, 0xCC + 0x1E, 0x4A, 0xC8, 0x7B, 0x1A, 0x69, 0x2A, 0x52, + 0x9F, 0xDB, 0xBA, 0xB9, 0x33, 0x74, 0xC5, 0x7D, + 0x11, 0x0B, 0x10, 0xF2, 0xB1, 0xDD, 0xEB, 0xAC, + 0x0D, 0x19, 0x6B, 0x7B, 0xA6, 0x31, 0xB8, 0xE9, + 0x29, 0x30, 0x28, 0xA8, 0xF3, 0x79, 0x88, 0x8C, + 0x42, 0x2D, 0xC8, 0xD3, 0x2B, 0xBF, 0x22, 0x60, + 0x10, 0xC2, 0xC1, 0xEC, 0x73, 0x18, 0x90, 0x80, + 0x45, 0x6B, 0x05, 0x64, 0xB2, 0x58, 0xB0, 0xF2, + 0x31, 0x31, 0xBC, 0x79, 0xC8, 0xE8, 0xC1, 0x1C, + 0xEF, 0x39, 0x38, 0xB2, 0x43, 0xC5, 0xCE, 0x9C, + 0x0E, 0xDD, 0x37, 0xC8, 0xF9, 0xD2, 0x98, 0x77, + 0xDB, 0xBB, 0x61, 0x5B, 0x9B, 0x5A, 0xC3, 0xC9, + 0x48, 0x48, 0x7E, 0x46, 0x71, 0x96, 0xA9, 0x14, + 0x3E, 0xFB, 0xC7, 0xCE, 0xDB, 0x64, 0xB4, 0x5D, + 0x4A, 0xCD, 0xA2, 0x66, 0x6C, 0xBC, 0x28, 0x04, + 0xF2, 0xC8, 0x66, 0x2E, 0x12, 0x8F, 0x6A, 0x99, + 0x69, 0xEC, 0x15, 0xBC, 0x0B, 0x93, 0x51, 0xF6, + 0xF9, 0x63, 0x46, 0xAA, 0x7A, 0xBC, 0x74, 0x3A, + 0x14, 0xFA, 0x03, 0x0E, 0x37, 0xA2, 0xE7, 0x59, + 0x7B, 0xDD, 0xFC, 0x5A, 0x22, 0xF9, 0xCE, 0xDA, + 0xF8, 0x61, 0x48, 0x32, 0x52, 0x72, 0x10, 0xB2, + 0x6F, 0x02, 0x4C, 0x7F, 0x6C, 0x0D, 0xCF, 0x55, + 0x1E, 0x97, 0xA4, 0x85, 0x87, 0x64, 0xC3, 0x21, + 0xD1, 0x83, 0x4A, 0xD5, 0x1D, 0x75, 0xBB, 0x24, + 0x6D, 0x27, 0x72, 0x37, 0xB7, 0xBD, 0x41, 0xDC, + 0x43, 0x62, 0xD0, 0x63, 0xF4, 0x29, 0x82, 0x92, + 0x27, 0x2D, 0x01, 0x01, 0x17, 0x80, 0xB7, 0x98, + 0x56, 0xB2, 0x96, 0xC4, 0xE9, 0x46, 0x65, 0x8B, + 0x79, 0x60, 0x31, 0x97, 0xC9, 0xB2, 0xA9, 0x9E, + 0xC6, 0x6A, 0xCB, 0x06, 0xCE, 0x2F, 0x69, 0xB5, + 0xA5, 0xA6, 0x1E, 0x9B, 0xD0, 0x6A, 0xD4, 0x43, + 0xCE, 0xB0, 0xC7, 0x4E, 0xD6, 0x53, 0x45, 0xA9, + 0x03, 0xB6, 0x14, 0xE8, 0x13, 0x68, 0xAA, 0xC2, + 0xB3, 0xD2, 0xA7, 0x9C, 0xA8, 0xCC, 0xAA, 0x1C, + 0x3B, 0x88, 0xFB, 0x82, 0xA3, 0x66, 0x32, 0x86, + 0x0B, 0x3F, 0x79, 0x50, 0x83, 0x3F, 0xD0, 0x21, + 0x2E, 0xC9, 0x6E, 0xDE, 0x4A, 0xB6, 0xF5, 0xA0, + 0xBD, 0xA3, 0xEC, 0x60, 0x60, 0xA6, 0x58, 0xF9, + 0x45, 0x7F, 0x6C, 0xC8, 0x7C, 0x6B, 0x62, 0x0C, + 0x1A, 0x14, 0x51, 0x98, 0x74, 0x86, 0xE4, 0x96, + 0x61, 0x2A, 0x10, 0x1D, 0x0E, 0x9C, 0x20, 0x57, + 0x7C, 0x57, 0x1E, 0xDB, 0x52, 0x82, 0x60, 0x8B, + 0xF4, 0xE1, 0xAC, 0x92, 0x6C, 0x0D, 0xB1, 0xC8, + 0x2A, 0x50, 0x4A, 0x79, 0x9D, 0x89, 0x88, 0x5C, + 0xA6, 0x25, 0x2B, 0xD5, 0xB1, 0xC1, 0x83, 0xAF, + 0x70, 0x13, 0x92, 0xA4, 0x07, 0xC0, 0x5B, 0x84, + 0x8C, 0x2A, 0x30, 0x16, 0xC4, 0x06, 0x13, 0xF0, + 0x2A, 0x44, 0x9B, 0x3C, 0x79, 0x26, 0xDA, 0x06, + 0x7A, 0x53, 0x31, 0x16, 0x50, 0x68, 0x40, 0x09, + 0x75, 0x10, 0x46, 0x0B, 0xBF, 0xD3, 0x60, 0x73, + 0xDC, 0xB0, 0xBF, 0xA0, 0x09, 0xB3, 0x6A, 0x91, + 0x23, 0xEA, 0xA6, 0x8F, 0x83, 0x5F, 0x74, 0xA0, + 0x1B, 0x00, 0xD2, 0x09, 0x78, 0x35, 0x96, 0x4D, + 0xF5, 0x21, 0xCE, 0x92, 0x10, 0x78, 0x9C, 0x30, + 0xB7, 0xF0, 0x6E, 0x58, 0x44, 0xB4, 0x44, 0xC5, + 0x33, 0x22, 0x39, 0x6E, 0x47, 0x99, 0xBA, 0xF6, + 0xA8, 0x8A, 0xF7, 0x31, 0x58, 0x60, 0xD0, 0x19, + 0x2D, 0x48, 0xC2, 0xC0, 0xDA, 0x6B, 0x5B, 0xA6, + 0x43, 0x25, 0x54, 0x3A, 0xCD, 0xF5, 0x90, 0x0E, + 0x8B, 0xC4, 0x77, 0xAB, 0x05, 0x82, 0x00, 0x72, + 0xD4, 0x63, 0xAF, 0xFE, 0xD0, 0x97, 0xE0, 0x62, + 0xBD, 0x78, 0xC9, 0x9D, 0x12, 0xB3, 0x85, 0x13, + 0x1A, 0x24, 0x1B, 0x70, 0x88, 0x65, 0xB4, 0x19, + 0x0A, 0xF6, 0x9E, 0xA0, 0xA6, 0x4D, 0xB7, 0x14, + 0x48, 0xA6, 0x08, 0x29, 0x36, 0x9C, 0x75, 0x55, + 0x19, 0x8E, 0x43, 0x8C, 0x9A, 0xBC, 0x31, 0x0B, + 0xC7, 0x01, 0x01, 0x91, 0x3B, 0xB1, 0x2F, 0xAA, + 0x5B, 0xEE, 0xF9, 0x75, 0x84, 0x16, 0x17, 0xC8, + 0x47, 0xCD, 0x6B, 0x33, 0x6F, 0x87, 0x79, 0x87, + 0x75, 0x38, 0x22, 0x02, 0x0B, 0x92, 0xC4, 0xCC, + 0x97, 0x05, 0x5C, 0x9B, 0x1E, 0x0B, 0x12, 0x8B, + 0xF1, 0x1F, 0x50, 0x50, 0x05, 0xB6, 0xAB, 0x0E, + 0x62, 0x77, 0x95, 0xA2, 0x06, 0x09, 0xEF, 0xA9, + 0x91, 0xE5, 0x98, 0xB8, 0x0F, 0x37, 0xB1, 0xC6, + 0xA1, 0xC3, 0xA1, 0xE9, 0xAE, 0xE7, 0x02, 0x8F, + 0x77, 0x57, 0x0A, 0xB2, 0x13, 0x91, 0x28, 0xA0, + 0x01, 0x08, 0xC5, 0x0E, 0xB3, 0x05, 0xCD, 0xB8, + 0xF9, 0xA6, 0x03, 0xA6, 0xB0, 0x78, 0x41, 0x3F, + 0x6F, 0x9B, 0x14, 0xC6, 0xD8, 0x2B, 0x51, 0x99, + 0xCE, 0x59, 0xD8, 0x87, 0x90, 0x2A, 0x28, 0x1A, + 0x02, 0x7B, 0x71, 0x74, 0x95, 0xFE, 0x12, 0x67, + 0x2A, 0x12, 0x7B, 0xBF, 0x9B, 0x25, 0x6C, 0x43, + 0x72, 0x0D, 0x7C, 0x16, 0x0B, 0x28, 0x1C, 0x12, + 0x75, 0x7D, 0xA1, 0x35, 0xB1, 0x93, 0x33, 0x52, + 0xBE, 0x4A, 0xB6, 0x7E, 0x40, 0x24, 0x8A, 0xFC, + 0x31, 0x8E, 0x23, 0x70, 0xC3, 0xB8, 0x20, 0x8E, + 0x69, 0x5B, 0xDF, 0x33, 0x74, 0x59, 0xB9, 0xAC, + 0xBF, 0xE5, 0xB4, 0x87, 0xF7, 0x6E, 0x9B, 0x4B, + 0x40, 0x01, 0xD6, 0xCF, 0x90, 0xCA, 0x8C, 0x69, + 0x9A, 0x17, 0x4D, 0x42, 0x97, 0x2D, 0xC7, 0x33, + 0xF3, 0x33, 0x89, 0xFD, 0xF5, 0x9A, 0x1D, 0xAB, + 0xA8, 0x1D, 0x83, 0x49, 0x55, 0x02, 0x73, 0x34, + 0x18, 0x5A, 0xD0, 0x2C, 0x76, 0xCF, 0x29, 0x48, + 0x46, 0xCA, 0x92, 0x94, 0xBA, 0x0E, 0xD6, 0x67, + 0x41, 0xDD, 0xEC, 0x79, 0x1C, 0xAB, 0x34, 0x19, + 0x6A, 0xC5, 0x65, 0x7C, 0x5A, 0x78, 0x32, 0x1B, + 0x56, 0xC3, 0x33, 0x06, 0xB5, 0x10, 0x23, 0x97, + 0xA5, 0xC0, 0x9C, 0x35, 0x08, 0xF7, 0x6B, 0x48, + 0x28, 0x24, 0x59, 0xF8, 0x1D, 0x0C, 0x72, 0xA4, + 0x3F, 0x73, 0x7B, 0xC2, 0xF1, 0x2F, 0x45, 0x42, + 0x26, 0x28, 0xB6, 0x7D, 0xB5, 0x1A, 0xC1, 0x42, + 0x42, 0x76, 0xA6, 0xC0, 0x8C, 0x3F, 0x76, 0x15, + 0x66, 0x5B, 0xBB, 0x8E, 0x92, 0x81, 0x48, 0xA2, + 0x70, 0xF9, 0x91, 0xBC, 0xF3, 0x65, 0xA9, 0x0F, + 0x87, 0xC3, 0x06, 0x87, 0xB6, 0x88, 0x09, 0xC9, + 0x1F, 0x23, 0x18, 0x13, 0xB8, 0x66, 0xBE, 0xA8, + 0x2E, 0x30, 0x37, 0x4D, 0x80, 0xAA, 0x0C, 0x02, + 0x97, 0x34, 0x37, 0x49, 0x8A, 0x53, 0xB1, 0x4B, + 0xF6, 0xB6, 0xCA, 0x1E, 0xD7, 0x6A, 0xB8, 0xA2, + 0x0D, 0x54, 0xA0, 0x83, 0xF4, 0xA2, 0x6B, 0x7C, + 0x03, 0x8D, 0x81, 0x96, 0x76, 0x40, 0xC2, 0x0B, + 0xF4, 0x43, 0x1E, 0x71, 0xDA, 0xCC, 0xE8, 0x57, + 0x7B, 0x21, 0x24, 0x0E, 0x49, 0x4C, 0x31, 0xF2, + 0xD8, 0x77, 0xDA, 0xF4, 0x92, 0x4F, 0xD3, 0x9D, + 0x82, 0xD6, 0x16, 0x7F, 0xBC, 0xC1, 0xF9, 0xC5, + 0xA2, 0x59, 0xF8, 0x43, 0xE3, 0x09, 0x87, 0xCC, + 0xC4, 0xBC, 0xE7, 0x49, 0x3A, 0x24, 0x04, 0xB5, + 0xE4, 0x43, 0x87, 0xF7, 0x07, 0x42, 0x57, 0x81, + 0xB7, 0x43, 0xFB, 0x55, 0x56, 0x85, 0x58, 0x4E, + 0x25, 0x57, 0xCC, 0x03, 0x8B, 0x1A, 0x9B, 0x3F, + 0x40, 0x43, 0x12, 0x1F, 0x54, 0x72, 0xEB, 0x2B, + 0x96, 0xE5, 0x94, 0x1F, 0xEC, 0x01, 0x1C, 0xEE, + 0xA5, 0x07, 0x91, 0x63, 0x6C, 0x6A, 0xBC, 0x26, + 0xC1, 0x37, 0x7E, 0xE3, 0xB5, 0x14, 0x6F, 0xC7, + 0xC8, 0x5C, 0xB3, 0x35, 0xB1, 0xE7, 0x95, 0xEE, + 0xC2, 0x03, 0x3E, 0xE4, 0x4B, 0x9A, 0xA9, 0x06, + 0x85, 0x24, 0x5E, 0xF7, 0xB4, 0x43, 0x6C, 0x00, + 0x0E, 0x66, 0xBC, 0x8B, 0xCB, 0xF1, 0xCD, 0xB8, + 0x03, 0xAC, 0x14, 0x21, 0xB1, 0xFD, 0xB2, 0x66, + 0xD5, 0x29, 0x1C, 0x83, 0x10, 0x37, 0x3A, 0x8A, + 0x3C, 0xE9, 0x56, 0x2A, 0xB1, 0x97, 0x95, 0x38, + 0x71, 0xAB, 0x99, 0xF3, 0x82, 0xCC, 0x5A, 0xA9, + 0xC0, 0xF2, 0x73, 0xD1, 0xDC, 0xA5, 0x5D, 0x27, + 0x12, 0x85, 0x38, 0x71, 0xE1, 0xA8, 0x3C, 0xB3, + 0xB8, 0x54, 0x50, 0xF7, 0x6D, 0x3F, 0x3C, 0x42, + 0xBA, 0xB5, 0x50, 0x5F, 0x72, 0x12, 0xFD, 0xB6, + 0xB8, 0xB7, 0xF6, 0x02, 0x99, 0x72, 0xA8, 0xF3, + 0x75, 0x1E, 0x4C, 0x94, 0xC1, 0x10, 0x8B, 0x02, + 0xD6, 0xAC, 0x79, 0xF8, 0xD9, 0x38, 0xF0, 0x5A, + 0x1B, 0x2C, 0x22, 0x9B, 0x14, 0xB4, 0x2B, 0x31, + 0xB0, 0x1A, 0x36, 0x40, 0x17, 0xE5, 0x95, 0x78, + 0xC6, 0xB0, 0x33, 0x83, 0x37, 0x74, 0xCB, 0x9B, + 0x57, 0x0F, 0x90, 0x86, 0xB7, 0x22, 0x90, 0x3B, + 0x37, 0x54, 0x46, 0xB4, 0x95, 0xD8, 0xA2, 0x9B, + 0xF8, 0x07, 0x51, 0x87, 0x7A, 0x80, 0xFB, 0x72, + 0x4A, 0x02, 0x10, 0xC3, 0xE1, 0x69, 0x2F, 0x39, + 0x7C, 0x2F, 0x1D, 0xDC, 0x2E, 0x6B, 0xA1, 0x7A, + 0xF8, 0x1B, 0x92, 0xAC, 0xFA, 0xBE, 0xF5, 0xF7, + 0x57, 0x3C, 0xB4, 0x93, 0xD1, 0x84, 0x02, 0x7B, + 0x71, 0x82, 0x38, 0xC8, 0x9A, 0x35, 0x49, 0xB8, + 0x90, 0x5B, 0x28, 0xA8, 0x33, 0x62, 0x86, 0x7C, + 0x08, 0x2D, 0x30, 0x19, 0xD3, 0xCA, 0x70, 0x70, + 0x07, 0x31, 0xCE, 0xB7, 0x3E, 0x84, 0x72, 0xC1, + 0xA3, 0xA0, 0x93, 0x36, 0x1C, 0x5F, 0xEA, 0x6A, + 0x7D, 0x40, 0x95, 0x5D, 0x07, 0xA4, 0x1B, 0x64, + 0xE5, 0x00, 0x81, 0xA3, 0x61, 0xB6, 0x04, 0xCC, + 0x51, 0x84, 0x47, 0xC8, 0xE2, 0x57, 0x65, 0xAB, + 0x7D, 0x68, 0xB2, 0x43, 0x27, 0x52, 0x07, 0xAF, + 0x8C, 0xA6, 0x56, 0x4A, 0x4C, 0xB1, 0xE9, 0x41, + 0x99, 0xDB, 0xA1, 0x87, 0x8C, 0x59, 0xBE, 0xC8, + 0x09, 0xAB, 0x48, 0xB2, 0xF2, 0x11, 0xBA, 0xDC, + 0x6A, 0x19, 0x98, 0xD9, 0xC7, 0x22, 0x7C, 0x13, + 0x03, 0xF4, 0x69, 0xD4, 0x6A, 0x9C, 0x7E, 0x53, + 0x03, 0xF9, 0x8A, 0xBA, 0x67, 0x56, 0x9A, 0xE8, + 0x22, 0x7C, 0x16, 0xBA, 0x1F, 0xB3, 0x24, 0x44, + 0x66, 0xA2, 0x5E, 0x7F, 0x82, 0x36, 0x71, 0x81, + 0x0C, 0xC2, 0x62, 0x06, 0xFE, 0xB2, 0x9C, 0x7E, + 0x2A, 0x1A, 0x91, 0x95, 0x9E, 0xEB, 0x03, 0xA9, + 0x82, 0x52, 0xA4, 0xF7, 0x41, 0x26, 0x74, 0xEB, + 0x9A, 0x4B, 0x27, 0x7E, 0x1F, 0x25, 0x95, 0xFC, + 0xA6, 0x40, 0x33, 0xB4, 0x1B, 0x40, 0x33, 0x08, + 0x12, 0xE9, 0x73, 0x5B, 0x7C, 0x60, 0x75, 0x01, + 0xCD, 0x81, 0x83, 0xA2, 0x2A, 0xFC, 0x33, 0x92, + 0x55, 0x37, 0x44, 0xF3, 0x3C, 0x4D, 0x20, 0x25, + 0x26, 0x94, 0x5C, 0x6D, 0x78, 0xA6, 0x0E, 0x20, + 0x1A, 0x16, 0x98, 0x7A, 0x6F, 0xA5, 0x9D, 0x94, + 0x46, 0x4B, 0x56, 0x50, 0x65, 0x56, 0x78, 0x48, + 0x24, 0xA0, 0x70, 0x58, 0xF5, 0x73, 0x20, 0xE7, + 0x6C, 0x82, 0x5B, 0x93, 0x47, 0xF2, 0x93, 0x6F, + 0x4A, 0x0E, 0x5C, 0xDA, 0xA1, 0x8C, 0xF8, 0x83, + 0x39, 0x45, 0xAE, 0x31, 0x2A, 0x36, 0xB5, 0xF5, + 0xA3, 0x81, 0x0A, 0xAC, 0x82, 0x38, 0x1F, 0xDA, + 0xE4, 0xCB, 0x9C, 0x68, 0x31, 0xD8, 0xEB, 0x8A, + 0xBA, 0xB8, 0x50, 0x41, 0x64, 0x43, 0xD7, 0x39, + 0x08, 0x6B, 0x1C, 0x32, 0x6F, 0xC2, 0xA3, 0x97, + 0x57, 0x04, 0xE3, 0x96, 0xA5, 0x96, 0x80, 0xC3, + 0xB5, 0xF3, 0x60, 0xF5, 0x48, 0x0D, 0x2B, 0x62, + 0x16, 0x9C, 0xD9, 0x4C, 0xA7, 0x1B, 0x37, 0xBC, + 0x58, 0x78, 0xBA, 0x29, 0x85, 0xE0, 0x68, 0xBA, + 0x05, 0x0B, 0x2C, 0xE5, 0x07, 0x26, 0xD4, 0xB4, + 0x45, 0x1B, 0x77, 0xAA, 0xA8, 0x67, 0x6E, 0xAE, + 0x09, 0x49, 0x82, 0x21, 0x01, 0x92, 0x19, 0x7B, + 0x1E, 0x92, 0xA2, 0x7F, 0x59, 0x86, 0x8B, 0x78, + 0x86, 0x78, 0x87, 0xB9, 0xA7, 0x0C, 0x32, 0xAF, + 0x84, 0x63, 0x0A, 0xA9, 0x08, 0x81, 0x43, 0x79, + 0xE6, 0x51, 0x91, 0x50, 0xBA, 0x16, 0x43, 0x9B, + 0x5E, 0x2B, 0x06, 0x03, 0xD0, 0x6A, 0xA6, 0x67, + 0x45, 0x57, 0xF5, 0xB0, 0x98, 0x3E, 0x5C, 0xB6, + 0xA9, 0x75, 0x96, 0x06, 0x9B, 0x01, 0xBB, 0x31, + 0x28, 0xC4, 0x16, 0x68, 0x06, 0x57, 0x20, 0x4F, + 0xD0, 0x76, 0x40, 0x39, 0x2E, 0x16, 0xB1, 0x9F, + 0x33, 0x7A, 0x99, 0xA3, 0x04, 0x84, 0x4E, 0x1A, + 0xA4, 0x74, 0xE9, 0xC7, 0x99, 0x06, 0x29, 0x71, + 0xF6, 0x72, 0x26, 0x89, 0x60, 0xF5, 0xA8, 0x2F, + 0x95, 0x00, 0x70, 0xBB, 0xE9, 0xC2, 0xA7, 0x19, + 0x50, 0xA3, 0x78, 0x5B, 0xDF, 0x0B, 0x84, 0x40, + 0x25, 0x5E, 0xD6, 0x39, 0x28, 0xD2, 0x57, 0x84, + 0x51, 0x68, 0xB1, 0xEC, 0xCC, 0x41, 0x91, 0x32, + 0x5A, 0xA7, 0x66, 0x45, 0x71, 0x9B, 0x28, 0xEB, + 0xD8, 0x93, 0x02, 0xDC, 0x67, 0x23, 0xC7, 0x86, + 0xDF, 0x52, 0x17, 0xB2, 0x43, 0x09, 0x9C, 0xA7, + 0x82, 0x38, 0xE5, 0x7E, 0x64, 0x69, 0x2F, 0x20, + 0x6B, 0x17, 0x7A, 0xBC, 0x25, 0x96, 0x60, 0x39, + 0x5C, 0xD7, 0x86, 0x0F, 0xB3, 0x5A, 0x16, 0xF6, + 0xB2, 0xFE, 0x65, 0x48, 0xC8, 0x5A, 0xB6, 0x63, + 0x30, 0xC5, 0x17, 0xFA, 0x74, 0xCD, 0xF3, 0xCB, + 0x49, 0xD2, 0x6B, 0x11, 0x81, 0x90, 0x1A, 0xF7, + 0x75, 0xA1, 0xE1, 0x80, 0x81, 0x3B, 0x6A, 0x24, + 0xC4, 0x56, 0x82, 0x9B, 0x5C, 0x38, 0x10, 0x4E, + 0xCE, 0x43, 0xC7, 0x6A, 0x43, 0x7A, 0x6A, 0x33, + 0xB6, 0xFC, 0x6C, 0x5E, 0x65, 0xC8, 0xA8, 0x94, + 0x66, 0xC1, 0x42, 0x54, 0x85, 0xB2, 0x9B, 0x9E, + 0x18, 0x54, 0x36, 0x8A, 0xFC, 0xA3, 0x53, 0xE1, + 0x43, 0xD0, 0xA9, 0x0A, 0x6C, 0x6C, 0x9E, 0x7F, + 0xDB, 0x62, 0xA6, 0x06, 0x85, 0x6B, 0x56, 0x14, + 0xF1, 0x2B, 0x64, 0xB7, 0x96, 0x02, 0x0C, 0x35, + 0x34, 0xC3, 0x60, 0x5C, 0xFD, 0xC7, 0x3B, 0x86, + 0x71, 0x4F, 0x41, 0x18, 0x50, 0x22, 0x8A, 0x28, + 0xB8, 0xF4, 0xB4, 0x9E, 0x66, 0x34, 0x16, 0xC8, + 0x4F, 0x7E, 0x38, 0x1F, 0x6A, 0xF1, 0x07, 0x13, + 0x43, 0xBF, 0x9D, 0x39, 0xB4, 0x54, 0x39, 0x24, + 0x0C, 0xC0, 0x38, 0x97, 0x29, 0x5F, 0xEA, 0x08, + 0x0B, 0x14, 0xBB, 0x2D, 0x81, 0x19, 0xA8, 0x80, + 0xE1, 0x64, 0x49, 0x5C, 0x61, 0xBE, 0xBC, 0x71, + 0x39, 0xC1, 0x18, 0x57, 0xC8, 0x5E, 0x17, 0x50, + 0x33, 0x8D, 0x63, 0x43, 0x91, 0x37, 0x06, 0xA5, + 0x07, 0xC9, 0x56, 0x64, 0x64, 0xCD, 0x28, 0x37, + 0xCF, 0x91, 0x4D, 0x1A, 0x3C, 0x35, 0xE8, 0x9B, + 0x23, 0x5C, 0x6A, 0xB7, 0xED, 0x07, 0x8B, 0xED, + 0x23, 0x47, 0x57, 0xC0, 0x2E, 0xF6, 0x99, 0x3D, + 0x4A, 0x27, 0x3C, 0xB8, 0x15, 0x05, 0x28, 0xDA, + 0x4D, 0x76, 0x70, 0x81, 0x77, 0xE9, 0x42, 0x55, + 0x46, 0xC8, 0x3E, 0x14, 0x70, 0x39, 0x76, 0x66, + 0x03, 0xB3, 0x0D, 0xA6, 0x26, 0x8F, 0x45, 0x98, + 0xA5, 0x31, 0x94, 0x24, 0x0A, 0x28, 0x32, 0xA3, + 0xD6, 0x75, 0x33, 0xB5, 0x05, 0x6F, 0x9A, 0xAA, + 0xC6, 0x1B, 0x4B, 0x17, 0xB9, 0xA2, 0x69, 0x3A, + 0xA0, 0xD5, 0x88, 0x91, 0xE6, 0xCC, 0x56, 0xCD, + 0xD7, 0x72, 0x41, 0x09, 0x00, 0xC4, 0x05, 0xAF, + 0x20, 0xB9, 0x03, 0x79, 0x7C, 0x64, 0x87, 0x69, + 0x15, 0xC3, 0x7B, 0x84, 0x87, 0xA1, 0x44, 0x9C, + 0xE9, 0x24, 0xCD, 0x34, 0x5C, 0x29, 0xA3, 0x6E, + 0x08, 0x23, 0x8F, 0x7A, 0x15, 0x7C, 0xC7, 0xE5, + 0x16, 0xAB, 0x5B, 0xA7, 0x3C, 0x80, 0x63, 0xF7, + 0x26, 0xBB, 0x5A, 0x0A, 0x03, 0x19, 0xE5, 0x71, + 0x27, 0x43, 0x8C, 0x7F, 0xC6, 0x01, 0xC9, 0x9C, + 0xCA, 0xAE, 0x4C, 0x1A, 0x83, 0x72, 0x6F, 0xDC, + 0xB5, 0x04, 0x5E, 0xD1, 0xA8, 0x2A, 0x98, 0x5E, + 0xA9, 0x95, 0x39, 0x6D, 0x77, 0x27, 0x2C, 0x66, + 0xCE, 0x49, 0x32, 0x89, 0xF6, 0x11, 0x09, 0x10, + 0xF3, 0x7C, 0x27, 0x41, 0xCE, 0x47, 0x02, 0x6A, + 0x6F, 0x82, 0x61, 0x99, 0x9C, 0x64, 0x82, 0x57, + 0x2B, 0x16, 0x93, 0x91, 0x2E, 0xF1, 0x2E, 0xEB, + 0xEA, 0x7A, 0xCF, 0x92, 0x34, 0xFB, 0x40, 0x9F, + 0x2A, 0x60, 0x90, 0xE6, 0xB0, 0xBF, 0xD8, 0x95, + 0x46, 0x9D, 0x0B, 0x2A, 0x92, 0x1B, 0xB7, 0x23, + 0xF8, 0x7A, 0x33, 0xEA, 0x54, 0x65, 0xAB, 0x90, + 0xF5, 0x14, 0xB6, 0x76, 0x98, 0xC0, 0x76, 0x8B, + 0x6C, 0xA4, 0x98, 0xB0, 0x22, 0xC5, 0x12, 0xFA, + 0x08, 0x75, 0xF0, 0x54, 0xAA, 0x22, 0x65, 0x86, + 0x7E, 0x31, 0xC0, 0xE5, 0x22, 0x65, 0x1E, 0x02, + 0x4A, 0x07, 0xD6, 0x0D, 0xD9, 0xF6, 0x33, 0x16, + 0x69, 0x21, 0xF4, 0x12, 0x6B, 0xC2, 0xB6, 0xAA, + 0x01, 0xCC, 0x15, 0xA0, 0x9B, 0x85, 0xBF, 0xF8, + 0x21, 0x8C, 0x5A, 0xAE, 0x95, 0xBC, 0x1F, 0xFB, + 0x26, 0xAE, 0x5A, 0x13, 0x76, 0x70, 0xF0, 0x49, + 0x10, 0xCA, 0x9D, 0x72, 0x41, 0xB6, 0x66, 0x0C, + 0x39, 0x4C, 0x54, 0x55, 0x91, 0x77, 0x46, 0xA2, + 0x66, 0x82, 0xFB, 0x71, 0xA4, 0x32, 0xEA, 0x95, + 0x30, 0xE8, 0x39, 0xBD, 0xEB, 0x07, 0x43, 0x30, + 0x04, 0xF4, 0x5A, 0x0D, 0xDA, 0xA0, 0xB2, 0x4E, + 0x3A, 0x56, 0x6A, 0x54, 0x08, 0x15, 0xF2, 0x81, + 0xE3, 0xFC, 0x25, 0x9A, 0xC6, 0xCB, 0xC0, 0xAC, + 0xB8, 0xD6, 0x22, 0x68, 0xB6, 0x03, 0xBC, 0x67, + 0x6A, 0xB4, 0x15, 0xC4, 0x74, 0xBB, 0x94, 0x87, + 0x3E, 0x44, 0x87, 0xAE, 0x31, 0xA4, 0xE3, 0x84, + 0x5C, 0x79, 0x90, 0x15, 0x50, 0x89, 0x0E, 0xE8, + 0x78, 0x4E, 0xEF, 0x90, 0x4F, 0xEE, 0x62, 0xBA, + 0x8C, 0x5F, 0x95, 0x2C, 0x68, 0x41, 0x30, 0x52, + 0xE0, 0xA7, 0xE3, 0x38, 0x8B, 0xB8, 0xFF, 0x0A, + 0xD6, 0x02, 0xAE, 0x3E, 0xA1, 0x4D, 0x9D, 0xF6, + 0xDD, 0x5E, 0x4C, 0xC6, 0xA3, 0x81, 0xA4, 0x1D, + 0xA5, 0xC1, 0x37, 0xEC, 0xC4, 0x9D, 0xF5, 0x87, + 0xE1, 0x78, 0xEA, 0xF4, 0x77, 0x02, 0xEC, 0x62, + 0x37, 0x80, 0x69, 0x1A, 0x32, 0x33, 0xF6, 0x9F, + 0x12, 0xBD, 0x9C, 0x9B, 0x96, 0x37, 0xC5, 0x13, + 0x78, 0xAD, 0x71, 0xA8, 0x31, 0x05, 0x52, 0x77, + 0x25, 0x4C, 0xC6, 0x3C, 0x5A, 0xD4, 0xCB, 0x76, + 0xB4, 0xAB, 0x82, 0xE5, 0xFC, 0xA1, 0x35, 0xE8, + 0xD2, 0x6A, 0x6B, 0x3A, 0x89, 0xFA, 0x5B, 0x6F }; static const byte c_768[KYBER768_CIPHER_TEXT_SIZE] = { - 0xDF, 0xA6, 0xB9, 0xD7, 0x2A, 0x63, 0xB4, 0x20, - 0xB8, 0x9D, 0xDE, 0x50, 0xF7, 0xE0, 0xD5, 0x6E, - 0xCF, 0x87, 0x6B, 0xFE, 0xF9, 0x91, 0xFC, 0xE9, - 0x1C, 0x8D, 0x28, 0x6F, 0xA6, 0xEA, 0xBA, 0xC1, - 0x73, 0x0F, 0xD8, 0x77, 0x41, 0xFE, 0x4A, 0xD7, - 0x17, 0xB2, 0x82, 0xA2, 0x1E, 0x23, 0x5A, 0x55, - 0xC3, 0x75, 0x7D, 0x88, 0xD4, 0xCE, 0x62, 0xF4, - 0x14, 0xEB, 0x77, 0xEB, 0x9D, 0x35, 0x7E, 0xE2, - 0x9D, 0x00, 0x08, 0x7B, 0xF8, 0x11, 0x0E, 0x5B, - 0xBB, 0xC7, 0xC9, 0x04, 0x19, 0x07, 0x2E, 0xAE, - 0x04, 0x4B, 0xF7, 0xE1, 0x83, 0xD4, 0x3A, 0x94, - 0xB2, 0x63, 0x2A, 0xA1, 0x46, 0x49, 0x61, 0x9B, - 0x70, 0x64, 0x95, 0x21, 0xBC, 0x19, 0x37, 0x09, - 0x42, 0xEF, 0x70, 0xF3, 0x6C, 0x34, 0xC8, 0xC2, - 0x35, 0x91, 0xEE, 0x0C, 0xA7, 0x1A, 0x12, 0xD2, - 0x79, 0xE0, 0xF5, 0x2D, 0x39, 0xED, 0x0F, 0x91, - 0x3F, 0x8C, 0x26, 0x26, 0x21, 0xFB, 0x24, 0x2E, - 0x68, 0x0D, 0xEB, 0x30, 0x7B, 0x07, 0x49, 0xC6, - 0xB3, 0x93, 0xA8, 0xEF, 0x66, 0xF8, 0xB0, 0x4A, - 0xAF, 0xA8, 0x77, 0xB9, 0x51, 0xAB, 0x93, 0xF5, - 0x98, 0xB4, 0xB2, 0xFA, 0xB0, 0x4F, 0x88, 0xAC, - 0x80, 0x39, 0x84, 0xFF, 0x37, 0xE3, 0xFE, 0x74, - 0xF3, 0xA6, 0x16, 0xD5, 0x31, 0x4E, 0xB3, 0xA8, - 0x26, 0xF8, 0x74, 0xF8, 0xEC, 0xD3, 0xA5, 0x64, - 0x7D, 0x04, 0x94, 0x2A, 0x57, 0xEF, 0xC0, 0x96, - 0x38, 0x47, 0x0D, 0xC0, 0xA9, 0xDF, 0x40, 0xB3, - 0x17, 0x57, 0x1D, 0x39, 0x84, 0xA7, 0x8C, 0xF7, - 0xD1, 0x17, 0x51, 0x09, 0x07, 0x22, 0xB3, 0x05, - 0x9E, 0x07, 0x59, 0x1C, 0xC4, 0xA2, 0xED, 0x9B, - 0xA0, 0xDC, 0xE9, 0x9B, 0xE9, 0xE5, 0xEE, 0x5D, - 0xB8, 0xD6, 0x98, 0xCD, 0xEB, 0x58, 0x14, 0x75, - 0x9B, 0xA9, 0x77, 0xC9, 0x00, 0x79, 0xCF, 0x2A, - 0xFD, 0xE4, 0x78, 0x06, 0x9C, 0x51, 0x3A, 0x60, - 0x09, 0x1A, 0x3A, 0x5D, 0x01, 0x11, 0xE2, 0x2D, - 0xE0, 0x6C, 0xB1, 0x45, 0xC1, 0x4E, 0x22, 0xA2, - 0x14, 0xCB, 0x27, 0x8C, 0x81, 0x52, 0xB0, 0x68, - 0x1B, 0xCA, 0xFF, 0x54, 0xD5, 0x52, 0xB5, 0x4A, - 0x67, 0x1C, 0x0D, 0xFE, 0xF7, 0x75, 0xE7, 0xC5, - 0x4F, 0xEF, 0xC4, 0x85, 0x38, 0x68, 0xC9, 0x55, - 0x97, 0x1A, 0xBD, 0xAC, 0x2A, 0x76, 0x29, 0x2C, - 0xCC, 0xD4, 0xFD, 0x1C, 0x70, 0x6B, 0x7D, 0x36, - 0x14, 0x15, 0x96, 0x73, 0xE9, 0xD7, 0xB2, 0x9A, - 0x2D, 0x3F, 0x63, 0x36, 0x31, 0x29, 0xE7, 0xA2, - 0x1E, 0x80, 0x3A, 0x46, 0x0F, 0x27, 0x14, 0xE3, - 0xE2, 0x59, 0x22, 0x78, 0x0A, 0xF3, 0x82, 0x57, - 0xCD, 0x14, 0x95, 0xAC, 0xD1, 0xE0, 0x19, 0x80, - 0x63, 0x8D, 0xF5, 0x8A, 0x15, 0x3D, 0xAB, 0x07, - 0xEF, 0xB5, 0xC7, 0xE7, 0x8A, 0xDA, 0xCF, 0x63, - 0x19, 0x56, 0xD6, 0x9C, 0xCD, 0xA0, 0x70, 0x45, - 0x95, 0x68, 0xBD, 0x9D, 0x11, 0xA2, 0x93, 0x4B, - 0xCF, 0x16, 0x43, 0xBC, 0x99, 0x46, 0x82, 0x38, - 0x91, 0x0B, 0x1F, 0x74, 0x2E, 0xBB, 0x3C, 0x03, - 0xD3, 0x9F, 0xD4, 0x5C, 0xFB, 0x85, 0xBA, 0x30, - 0x9E, 0x29, 0xDD, 0x9B, 0x5C, 0xD5, 0x60, 0x81, - 0x9E, 0xC7, 0x29, 0xFC, 0xAC, 0x8B, 0x9D, 0x72, - 0x5E, 0x3E, 0x8A, 0xBE, 0xDE, 0x4B, 0x52, 0x98, - 0xA8, 0x65, 0x8E, 0xE3, 0xF7, 0x81, 0xB0, 0xCE, - 0x68, 0x3C, 0xBB, 0x73, 0x35, 0xCD, 0x57, 0xEF, - 0xE2, 0x20, 0x4A, 0x8F, 0x19, 0x74, 0x46, 0xD7, - 0x31, 0x4C, 0xDB, 0xF4, 0xC5, 0xD0, 0x8C, 0xCC, - 0x41, 0xF8, 0x08, 0x57, 0xCC, 0x95, 0x71, 0xFB, - 0xFB, 0x90, 0x60, 0x60, 0xF7, 0xE1, 0x7C, 0x8C, - 0xEF, 0x0F, 0x27, 0x4A, 0xFF, 0x83, 0xE3, 0x93, - 0xB1, 0x5F, 0x2F, 0x95, 0x89, 0xA1, 0x3A, 0xF4, - 0xBC, 0x78, 0xE1, 0x6C, 0xDD, 0xE6, 0x23, 0x61, - 0xD6, 0x3B, 0x8D, 0xC9, 0x03, 0xB7, 0x0C, 0x01, - 0xA4, 0x34, 0x19, 0xCD, 0x20, 0x52, 0x15, 0x0B, - 0xD2, 0x87, 0x19, 0xF6, 0x1F, 0xF3, 0x1F, 0x4A, - 0x9B, 0xEC, 0x4D, 0xDB, 0xCE, 0xC1, 0xF8, 0xFB, - 0x2E, 0xFB, 0xF3, 0x7D, 0xFF, 0xFA, 0x4C, 0x7F, - 0xEC, 0xA8, 0xCE, 0x6D, 0x62, 0x6B, 0xFD, 0xA1, - 0x6E, 0xE7, 0x08, 0xD9, 0x20, 0x68, 0x14, 0xA2, - 0xEF, 0x98, 0x85, 0x25, 0x61, 0x5D, 0x4A, 0xC9, - 0xBE, 0x60, 0x8C, 0x4B, 0x03, 0xAB, 0xEE, 0x95, - 0xB3, 0x2A, 0x5D, 0xB7, 0x4A, 0x96, 0x11, 0x9A, - 0x7E, 0x15, 0x9A, 0xF9, 0x9C, 0xD9, 0x8E, 0x88, - 0xEA, 0xF0, 0x9F, 0x0D, 0x78, 0x0E, 0x7C, 0x7E, - 0x81, 0x4B, 0x8E, 0x88, 0xB4, 0xF4, 0xE1, 0x5F, - 0xA5, 0x49, 0x95, 0xD0, 0xEC, 0xBA, 0xD3, 0xEF, - 0x04, 0x6A, 0x49, 0x47, 0xF3, 0xE8, 0xB9, 0xE7, - 0x44, 0x24, 0x14, 0x89, 0xB8, 0x06, 0xFE, 0x94, - 0x01, 0xE7, 0x8B, 0xAF, 0xC8, 0xE8, 0x82, 0xE9, - 0xD6, 0xD0, 0x70, 0x0F, 0x72, 0x0C, 0x00, 0x24, - 0xE7, 0xDA, 0x49, 0x06, 0x1C, 0x5D, 0x18, 0xA6, - 0x20, 0x74, 0x04, 0x0A, 0xBC, 0x00, 0x03, 0x20, - 0x0E, 0xD4, 0x65, 0x23, 0x17, 0x97, 0x93, 0x0A, - 0x2E, 0x2A, 0xA5, 0x01, 0xF6, 0x48, 0x62, 0xDD, - 0xA1, 0x30, 0x14, 0xA9, 0x9F, 0x9D, 0x32, 0x70, - 0xAA, 0x90, 0x7E, 0xEB, 0x3F, 0xDB, 0xFF, 0x29, - 0x16, 0x00, 0xDF, 0x1F, 0x6B, 0x39, 0x68, 0x4B, - 0x11, 0xE3, 0x96, 0xB7, 0x0D, 0x86, 0xF9, 0x04, - 0x92, 0xE8, 0x2B, 0x09, 0xBA, 0x25, 0x60, 0x7B, - 0x0C, 0x28, 0x6F, 0xBC, 0x07, 0x01, 0x82, 0xAC, - 0x76, 0xFA, 0x7C, 0x85, 0x9A, 0xAF, 0xEA, 0x87, - 0x01, 0x6A, 0xED, 0x22, 0xC3, 0x60, 0x5A, 0x27, - 0x89, 0xA1, 0xD4, 0x39, 0xFD, 0x8D, 0x93, 0x33, - 0x42, 0xDA, 0xB7, 0x45, 0xA3, 0xE5, 0x50, 0xE7, - 0xD7, 0x7C, 0x01, 0xA6, 0x23, 0x4B, 0xDA, 0x7D, - 0x6B, 0xB1, 0x9D, 0x49, 0x5E, 0x65, 0x60, 0xFC, - 0xE8, 0x39, 0x6F, 0xC3, 0xC6, 0xE0, 0x88, 0xED, - 0x60, 0xF5, 0xF2, 0x77, 0x14, 0x16, 0xEA, 0x3B, - 0xE5, 0xBE, 0x47, 0x2B, 0x64, 0x04, 0x90, 0x6C, - 0x91, 0xE7, 0x1D, 0x9A, 0x86, 0x72, 0xF3, 0x90, - 0x08, 0x36, 0x55, 0xAB, 0x7D, 0x0E, 0xC6, 0xED, - 0xFE, 0x86, 0x78, 0x9C, 0xE2, 0x0B, 0xE2, 0xEA, - 0x90, 0xCA, 0x5C, 0xC3, 0x14, 0x16, 0xFB, 0x24, - 0xCB, 0xAF, 0x94, 0xDA, 0x14, 0x68, 0xFE, 0x69, - 0x6B, 0xCD, 0xF5, 0x24, 0x7C, 0xF1, 0x17, 0xCB, - 0xE9, 0x33, 0x40, 0x76, 0xCA, 0x68, 0x96, 0xB2, - 0xF6, 0xA0, 0x16, 0xB1, 0xF7, 0xC7, 0x37, 0x28, - 0x80, 0x78, 0x98, 0xD8, 0xB1, 0x99, 0x75, 0x6C, - 0x2B, 0x0A, 0xA2, 0x45, 0x7E, 0x1B, 0x4F, 0x77, - 0x54, 0xC4, 0x57, 0x6C, 0xE5, 0x64, 0x56, 0x14, - 0xEA, 0x15, 0xC1, 0xAE, 0x28, 0xB0, 0x94, 0xEB, - 0x21, 0x7C, 0x7A, 0x7A, 0x41, 0x23, 0x95, 0x76, - 0xCB, 0xDA, 0x38, 0x0E, 0xE6, 0x87, 0x83, 0x43, - 0x27, 0x30, 0xAD, 0x5E, 0xBE, 0x7F, 0x51, 0xD6, - 0xBE, 0x7F, 0xB0, 0x2A, 0xB3, 0x7B, 0xE0, 0xC9, - 0x6A, 0xAC, 0x9F, 0x3C, 0x79, 0x0A, 0x18, 0xD1, - 0x59, 0xE6, 0xBA, 0xBA, 0x71, 0xEC, 0x88, 0xC1, - 0x10, 0xFD, 0x84, 0xC3, 0x36, 0xDF, 0x63, 0x0F, - 0x27, 0x1C, 0xF7, 0x93, 0x28, 0xB6, 0xC8, 0x79, - 0xDF, 0x7C, 0xDE, 0x0F, 0x70, 0x71, 0x22, 0x20, - 0xB1, 0xFB, 0xB9, 0xAC, 0xB4, 0x82, 0x48, 0xD9, - 0x1F, 0x0E, 0x2B, 0x6E, 0x3B, 0xE4, 0x0C, 0x2B, - 0x22, 0x1E, 0x62, 0x6E, 0x7E, 0x33, 0x0D, 0x9D, - 0x83, 0xCC, 0x06, 0x68, 0xF7, 0x30, 0x85, 0x91, - 0xE1, 0x4C, 0x7D, 0x72, 0xB8, 0x41, 0xA6, 0xF0, - 0x5F, 0x3F, 0xDC, 0x13, 0x9E, 0xEC, 0xC1, 0x53, - 0x67, 0x65, 0x65, 0x0B, 0x55, 0xA9, 0xCE, 0xC6, - 0xBB, 0xF5, 0x4C, 0xCE, 0xC5, 0xC3, 0xAC, 0x9A, - 0x0E, 0x39, 0xF4, 0x8F, 0x23, 0x7B, 0xD4, 0xC6, - 0x60, 0xCB, 0x1A, 0x8D, 0x25, 0x0B, 0xB6, 0xC8, - 0xC0, 0x10, 0xFE, 0xC3, 0x4C, 0xC3, 0xD9, 0x15, - 0x99, 0x27, 0x1C, 0x75, 0x31, 0x33, 0x0F, 0x12, - 0xA3, 0xE4, 0x4F, 0xAF, 0xD9, 0x05, 0xD2, 0xC6 + 0xA5, 0xC8, 0x1C, 0x76, 0xC2, 0x43, 0x05, 0xE1, + 0xCE, 0x5D, 0x81, 0x35, 0xD4, 0x15, 0x23, 0x68, + 0x2E, 0x9E, 0xE6, 0xD7, 0xB4, 0x0A, 0xD4, 0x1D, + 0xF1, 0xF3, 0x7C, 0x9B, 0x17, 0xDC, 0xE7, 0x80, + 0x76, 0x01, 0x9A, 0x6B, 0x0B, 0x7C, 0x95, 0xC9, + 0xBE, 0x7A, 0xF2, 0x95, 0x07, 0xB2, 0xD5, 0xA6, + 0x98, 0x7C, 0x8E, 0xE3, 0x25, 0x91, 0x90, 0x85, + 0x52, 0x43, 0xE6, 0xE5, 0x6F, 0x56, 0x20, 0x60, + 0x8C, 0x52, 0xD9, 0x6F, 0xAB, 0x10, 0x3A, 0x87, + 0x00, 0xFB, 0xA1, 0xA8, 0x7D, 0xCA, 0x60, 0x78, + 0x11, 0x8A, 0x08, 0x71, 0x76, 0x2C, 0x95, 0x34, + 0xC0, 0xC0, 0xC3, 0x97, 0x8C, 0x91, 0xC3, 0xA0, + 0x1F, 0x0F, 0x60, 0x8D, 0xCF, 0x75, 0x78, 0x15, + 0x43, 0x8F, 0xE8, 0x95, 0x7C, 0x8A, 0x85, 0x91, + 0x83, 0xB1, 0xB6, 0x72, 0x1A, 0x08, 0x65, 0xBE, + 0xBC, 0x79, 0x9D, 0x4E, 0x5C, 0x0E, 0x7B, 0xD3, + 0xEA, 0xE4, 0x85, 0x8E, 0x6A, 0xB6, 0xA2, 0xE7, + 0x65, 0x8E, 0xD8, 0x0D, 0x4E, 0xD1, 0x58, 0xB0, + 0x36, 0xB9, 0x3F, 0xA0, 0x3A, 0xFA, 0x6A, 0xE3, + 0x13, 0x6C, 0xF3, 0xD6, 0x93, 0xC9, 0x11, 0xBC, + 0xC7, 0x59, 0x05, 0xE5, 0xB0, 0xCB, 0x28, 0x65, + 0xB9, 0xE9, 0x88, 0x45, 0x22, 0xA7, 0x77, 0x77, + 0x61, 0x3E, 0x53, 0x11, 0x1D, 0x5A, 0x1C, 0x7D, + 0x3D, 0xAB, 0x73, 0x4C, 0xEB, 0x03, 0x65, 0x7A, + 0xE0, 0xC8, 0x97, 0x63, 0xE9, 0x94, 0x71, 0x05, + 0x47, 0x76, 0xBA, 0xE7, 0xD5, 0x1B, 0x0E, 0x73, + 0xA5, 0xBB, 0x35, 0xAE, 0xC3, 0x0F, 0xF6, 0xBC, + 0x93, 0x68, 0x49, 0x16, 0xFE, 0xF1, 0x16, 0x25, + 0x86, 0x45, 0x2F, 0x42, 0x66, 0x53, 0xE2, 0xCA, + 0x84, 0x4D, 0x57, 0x44, 0x30, 0x7F, 0xF9, 0xAE, + 0xB2, 0x87, 0xA6, 0x44, 0x77, 0x83, 0xB2, 0x1A, + 0x0E, 0x93, 0x9C, 0x81, 0x42, 0x1D, 0x63, 0x1F, + 0x5D, 0xCB, 0x45, 0x2E, 0x51, 0xED, 0x34, 0xE3, + 0xDA, 0xD1, 0xCF, 0x50, 0x4E, 0x0A, 0x3B, 0x0F, + 0x47, 0x11, 0xA8, 0xDC, 0x64, 0x99, 0xD1, 0x69, + 0x1D, 0x10, 0x95, 0x69, 0x33, 0x6C, 0xE1, 0x55, + 0x8A, 0x4C, 0x0A, 0x46, 0x4E, 0x20, 0x87, 0xEA, + 0x8F, 0x9E, 0x3B, 0x18, 0xF7, 0x47, 0xEF, 0x61, + 0xF4, 0x57, 0x6A, 0xEB, 0x42, 0xB1, 0x7C, 0xAD, + 0xB7, 0xF0, 0xFD, 0x84, 0xDA, 0x8E, 0x3A, 0x6F, + 0x47, 0x1D, 0x95, 0xED, 0xFA, 0x65, 0xBE, 0x9E, + 0x6C, 0x9F, 0x6A, 0xE7, 0x56, 0xA2, 0x2A, 0x4F, + 0x1A, 0x5C, 0x54, 0x3C, 0x26, 0xBA, 0x7B, 0xAD, + 0x88, 0xE1, 0x6D, 0x5F, 0x5B, 0x7E, 0x12, 0xE2, + 0xD4, 0xCA, 0x34, 0xB3, 0xA6, 0x4D, 0x17, 0xF8, + 0x7C, 0xCF, 0xC4, 0xFF, 0x8C, 0x5E, 0x4F, 0x53, + 0x75, 0x2A, 0x07, 0x7C, 0x68, 0x72, 0x1E, 0x8C, + 0xC8, 0x17, 0xF9, 0xFF, 0x24, 0x87, 0x61, 0x70, + 0xFF, 0x2A, 0xF8, 0x9F, 0xA9, 0x58, 0x55, 0xA5, + 0xB1, 0xDE, 0x34, 0x7C, 0x07, 0xFD, 0xDB, 0xCF, + 0xE7, 0x26, 0x4A, 0xA5, 0xED, 0x64, 0x01, 0x49, + 0x15, 0x61, 0xD8, 0x31, 0x53, 0x8F, 0x85, 0x2B, + 0x0E, 0xD7, 0xB9, 0xE8, 0xEB, 0xAF, 0xFC, 0x06, + 0x02, 0x84, 0xF2, 0x2D, 0x2B, 0xAE, 0xE5, 0x6F, + 0xA9, 0xF6, 0xD0, 0x14, 0x32, 0xA1, 0x15, 0xA2, + 0xD6, 0xA6, 0x4C, 0x38, 0xAE, 0x0A, 0x50, 0xBA, + 0x36, 0x2F, 0xB5, 0x7B, 0x53, 0xE3, 0xE8, 0x55, + 0xB8, 0x3C, 0xE8, 0xC4, 0x22, 0x74, 0x04, 0x55, + 0x99, 0xF6, 0x5F, 0xA6, 0xA8, 0x92, 0x1D, 0x85, + 0xF9, 0x4E, 0xD2, 0x30, 0xB5, 0x16, 0x71, 0x2D, + 0xB6, 0xFD, 0x2F, 0xF2, 0x8B, 0x3A, 0x33, 0x71, + 0xD9, 0xBE, 0x05, 0x8A, 0xE7, 0x5C, 0x2F, 0xA5, + 0x91, 0xB7, 0xEC, 0x3C, 0x3D, 0xAA, 0x1F, 0x76, + 0x42, 0xBC, 0x26, 0xC3, 0x24, 0xC0, 0x80, 0x90, + 0x60, 0x7E, 0x66, 0x62, 0x15, 0x4D, 0xB3, 0x7C, + 0xF7, 0x47, 0x96, 0x7A, 0x1F, 0x9F, 0xC2, 0x90, + 0x89, 0xF5, 0x70, 0xEB, 0xE6, 0x0E, 0xEE, 0xF8, + 0x9F, 0xD2, 0x44, 0x81, 0x02, 0x8C, 0x85, 0xAE, + 0xF1, 0xDC, 0x3B, 0x09, 0xF2, 0x2C, 0xD3, 0x69, + 0x1B, 0xBB, 0xB8, 0x21, 0xC7, 0xA8, 0xA0, 0xF3, + 0x5A, 0xD1, 0x2B, 0xE1, 0xDD, 0x19, 0x9B, 0x97, + 0x70, 0x48, 0xF3, 0xD4, 0x8C, 0x16, 0xBB, 0x2C, + 0xA9, 0x4C, 0xEC, 0xB8, 0x92, 0x87, 0x70, 0xD5, + 0xBB, 0x32, 0x9A, 0x03, 0x27, 0xE0, 0xB2, 0x86, + 0xFA, 0xA1, 0xC6, 0x52, 0x81, 0x03, 0x1A, 0x31, + 0xC8, 0x4F, 0x2E, 0xDC, 0x9C, 0x04, 0xD4, 0x75, + 0xED, 0x4E, 0x12, 0x8E, 0x51, 0xEF, 0xA9, 0x7D, + 0x01, 0x48, 0xCB, 0xA6, 0xC9, 0x5F, 0x67, 0x4C, + 0x58, 0x9F, 0x30, 0x1C, 0x26, 0x5B, 0xED, 0x70, + 0x8E, 0x9A, 0xD8, 0xDA, 0x3C, 0x5C, 0xEC, 0xBD, + 0xEE, 0xED, 0x35, 0xEF, 0x1E, 0x25, 0x31, 0x32, + 0xBA, 0x89, 0x92, 0x0D, 0x78, 0x6B, 0x88, 0x23, + 0x0B, 0x01, 0x3B, 0xCF, 0x2D, 0xC9, 0x2D, 0x6B, + 0x15, 0x7A, 0xFA, 0x8D, 0xA8, 0x59, 0x2C, 0xD0, + 0x74, 0x3D, 0x49, 0x82, 0xBE, 0x60, 0xD7, 0xC2, + 0xD5, 0xC4, 0x72, 0xAB, 0x9F, 0xA7, 0xF4, 0xCC, + 0x3D, 0x12, 0xB0, 0xEB, 0xAF, 0x0A, 0xBE, 0x55, + 0x5C, 0x75, 0x80, 0x54, 0x26, 0x84, 0x4D, 0xD9, + 0x42, 0x86, 0x43, 0xF8, 0x44, 0x06, 0xA1, 0xB8, + 0xD6, 0xFA, 0xED, 0xFD, 0x8A, 0xE6, 0xE7, 0x3A, + 0x72, 0x77, 0x2A, 0x21, 0x59, 0xAC, 0xAB, 0xD9, + 0x72, 0xAE, 0xB6, 0xF7, 0xDE, 0x09, 0x1A, 0xC5, + 0xFD, 0xD7, 0xF4, 0x9A, 0x3D, 0xC6, 0x64, 0x1C, + 0xDF, 0x62, 0x44, 0x6B, 0x4B, 0x04, 0xA3, 0x1F, + 0x73, 0xB8, 0x0A, 0x62, 0xF8, 0x0A, 0x40, 0x4A, + 0x8C, 0xB1, 0x8C, 0xE3, 0xE6, 0x54, 0x80, 0xEF, + 0x7B, 0x52, 0xBF, 0x00, 0x91, 0x11, 0x7E, 0x5D, + 0x08, 0xEA, 0xE1, 0xB0, 0xAA, 0xBB, 0x72, 0xE6, + 0xDF, 0xFF, 0xF7, 0x6F, 0x6E, 0x44, 0xBB, 0xD7, + 0xEA, 0x57, 0x0D, 0x66, 0x04, 0xBC, 0x2E, 0x74, + 0x31, 0x8B, 0xAF, 0xA3, 0x15, 0xA3, 0x88, 0x61, + 0xAA, 0x1B, 0x21, 0xAF, 0xB2, 0xA5, 0x3F, 0x26, + 0x14, 0xF1, 0xD6, 0x40, 0x07, 0x59, 0x84, 0xAE, + 0x62, 0xE2, 0xFC, 0xA1, 0xD1, 0xB4, 0xDB, 0x36, + 0x9F, 0x15, 0x70, 0x5C, 0xE7, 0xD4, 0xDF, 0x8A, + 0xE9, 0x82, 0x64, 0x50, 0x10, 0x51, 0xC0, 0xDE, + 0xF2, 0x1D, 0x64, 0x5D, 0x49, 0x62, 0x5A, 0xF0, + 0x2C, 0xA4, 0x28, 0xD9, 0xF0, 0xC2, 0xCD, 0x9F, + 0xBA, 0xEE, 0xAB, 0x97, 0xE8, 0xE9, 0x15, 0x16, + 0x62, 0xB6, 0x99, 0x2B, 0x4C, 0x99, 0xAB, 0x1B, + 0x92, 0x5D, 0x08, 0x92, 0x03, 0x63, 0x37, 0x3F, + 0x76, 0xD3, 0xFD, 0xF0, 0x82, 0x8C, 0xAA, 0x69, + 0xC8, 0xB1, 0xBD, 0xC6, 0xF5, 0x21, 0xDF, 0x64, + 0x1C, 0xF1, 0xC8, 0xA4, 0xE7, 0xEF, 0x0C, 0x23, + 0x28, 0x9A, 0x4E, 0x2C, 0xF1, 0x8A, 0xCE, 0xBB, + 0xE4, 0xC1, 0xE6, 0x83, 0x69, 0xBD, 0x52, 0x35, + 0x12, 0x01, 0x42, 0xEC, 0xDD, 0x1A, 0x73, 0x81, + 0x1E, 0x2E, 0x53, 0x3A, 0x64, 0x7D, 0x7A, 0xEE, + 0x16, 0xDA, 0xA0, 0x3B, 0x68, 0x36, 0x39, 0xDC, + 0xF1, 0xE1, 0xF1, 0xE7, 0x1C, 0xFA, 0xED, 0x48, + 0xF6, 0x9A, 0xEC, 0x3E, 0x83, 0x17, 0x33, 0xDA, + 0x19, 0xCE, 0xBE, 0xC1, 0xDD, 0xBF, 0x71, 0xCB, + 0xAE, 0x08, 0x00, 0xF2, 0xF6, 0xD6, 0x4A, 0x09, + 0x6E, 0xC4, 0x95, 0xD6, 0x2F, 0x43, 0x44, 0xF7, + 0xAA, 0x56, 0x21, 0xB3, 0x22, 0x35, 0x3A, 0x79, + 0x5A, 0xA0, 0x99, 0xEA, 0x3A, 0x07, 0x02, 0x72, + 0xD0, 0x53, 0xD4, 0x65, 0x3A, 0x20, 0xCF, 0x21, + 0x0E, 0xAA, 0xF1, 0x2C, 0xAE, 0x60, 0x23, 0xD8, + 0xE5, 0x11, 0x8D, 0xF0, 0x4B, 0x38, 0x4A, 0x44, + 0xD1, 0xED, 0xB9, 0x1C, 0x44, 0x98, 0x9E, 0xF7, + 0xEE, 0x57, 0xF2, 0xBF, 0x81, 0xA2, 0x4B, 0xDC, + 0x76, 0x80, 0x7D, 0xA9, 0x67, 0xEE, 0x65, 0x25, + 0x41, 0x0C, 0x5C, 0x48, 0x50, 0x67, 0xEF, 0xC3, + 0xD3, 0x9A, 0x9A, 0xD4, 0x2C, 0xC7, 0x53, 0xBA, + 0xA5, 0x9A, 0x1F, 0xD2, 0x8A, 0xF3, 0x5C, 0x00, + 0xD1, 0x8A, 0x40, 0x6A, 0x28, 0xFC, 0x79, 0xBA }; static const byte kprime_768[KYBER_SS_SZ] = { - 0xBD, 0x72, 0x56, 0xB2, 0x42, 0xF4, 0x04, 0x86, - 0x9D, 0x66, 0x2F, 0x80, 0xBF, 0x67, 0x7A, 0x16, - 0xC0, 0xC6, 0xFC, 0x15, 0x68, 0xCC, 0xA5, 0xB6, - 0x45, 0x82, 0xA0, 0x1A, 0x6A, 0x14, 0x2D, 0x71 + 0xDC, 0x5B, 0x88, 0x88, 0xBC, 0x1E, 0xBA, 0x5C, + 0x19, 0x69, 0xC2, 0x11, 0x64, 0xEA, 0x43, 0xE2, + 0x2E, 0x7A, 0xC0, 0xCD, 0x01, 0x2A, 0x2F, 0x26, + 0xCB, 0x8C, 0x48, 0x7E, 0x69, 0xEF, 0x7C, 0xE4 }; #endif #ifndef WOLFSSL_NO_KYBER1024 static const byte dk_1024[KYBER1024_PRIVATE_KEY_SIZE] = { - 0x0F, 0xEA, 0x26, 0xC4, 0xA5, 0x44, 0xA5, 0x14, - 0x44, 0x4A, 0x97, 0x1B, 0x5C, 0x5A, 0x82, 0x58, - 0x27, 0xC0, 0x9D, 0x42, 0x46, 0x9E, 0x59, 0x34, - 0x4C, 0xF2, 0xAC, 0x06, 0xA2, 0x8D, 0x33, 0xE9, - 0xA0, 0x12, 0xCA, 0xA3, 0x71, 0x7B, 0x2C, 0x3B, - 0x29, 0x0A, 0x07, 0x15, 0x82, 0x11, 0x09, 0xC4, - 0xCC, 0xEA, 0xC4, 0x9F, 0x34, 0x1D, 0xAD, 0xD3, - 0x77, 0xD4, 0x2A, 0x37, 0x26, 0x19, 0x16, 0xAC, - 0x7B, 0xB9, 0xE4, 0x1C, 0x09, 0x6C, 0xA8, 0x18, - 0x1C, 0xF5, 0x83, 0x50, 0x57, 0x3F, 0x60, 0x56, - 0x84, 0xA1, 0xBC, 0xA5, 0x3D, 0x88, 0x25, 0x74, - 0x53, 0xC5, 0x35, 0x16, 0x5C, 0x4E, 0xD7, 0x2A, - 0x9F, 0xF0, 0x56, 0x45, 0x71, 0x29, 0x01, 0xF6, - 0x6C, 0x10, 0xD0, 0x4F, 0x5E, 0xB4, 0xA2, 0xEC, - 0x37, 0x72, 0xE9, 0x49, 0x8E, 0x9D, 0xC4, 0x4B, - 0xBD, 0xAB, 0x71, 0xBB, 0xDB, 0xBC, 0xFC, 0x85, - 0xB8, 0x01, 0x36, 0x30, 0x89, 0xEA, 0x60, 0xEF, - 0xE5, 0x86, 0xE1, 0xE2, 0x18, 0x0C, 0x38, 0xB2, - 0xE7, 0xB4, 0xA6, 0x3E, 0xD6, 0x07, 0x49, 0x0B, - 0xC5, 0xBA, 0x7A, 0x58, 0xAC, 0x3B, 0x1C, 0x0E, - 0x43, 0x96, 0x72, 0x00, 0xC7, 0x98, 0x02, 0x90, - 0xEB, 0xF4, 0x11, 0x82, 0x84, 0x39, 0xEE, 0x8C, - 0x8E, 0x61, 0x29, 0xB2, 0x58, 0xE1, 0x3D, 0x12, - 0x7C, 0xB1, 0x5A, 0x00, 0xCB, 0x7B, 0x46, 0x8D, - 0x40, 0x23, 0xB5, 0x09, 0x7B, 0x9B, 0x2E, 0x50, - 0x9B, 0x50, 0xE8, 0x90, 0xB6, 0x3B, 0x47, 0x07, - 0x48, 0x79, 0x61, 0xA2, 0x9E, 0x18, 0x65, 0x6D, - 0xD2, 0xD0, 0x9E, 0x6A, 0x3B, 0x88, 0x43, 0xE2, - 0x84, 0x3C, 0xB4, 0x85, 0x4F, 0x18, 0x11, 0x6E, - 0x71, 0x7D, 0xDB, 0x03, 0x55, 0xA7, 0x51, 0x35, - 0xB2, 0x02, 0x6A, 0x75, 0x2C, 0x8E, 0x7F, 0xF1, - 0x8E, 0x0F, 0x4A, 0x39, 0x1C, 0xA3, 0x7F, 0x5B, - 0x2B, 0xCC, 0x88, 0xC9, 0x99, 0xB4, 0xE4, 0x77, - 0x50, 0xC4, 0x65, 0x47, 0xEC, 0x07, 0x6A, 0xC2, - 0x15, 0x30, 0x72, 0x2C, 0xFA, 0xF9, 0x67, 0x99, - 0x61, 0xC9, 0x86, 0x88, 0xC3, 0x56, 0x2B, 0x17, - 0xCC, 0x80, 0x81, 0x46, 0xA1, 0x25, 0x72, 0xC9, - 0xB5, 0xFF, 0x15, 0x1A, 0xAB, 0x54, 0x41, 0x09, - 0x01, 0x84, 0x0E, 0x26, 0x42, 0x39, 0x87, 0xC5, - 0xE0, 0xD2, 0x8E, 0xF2, 0xEA, 0x53, 0xEA, 0xE5, - 0x95, 0x1E, 0x62, 0xAC, 0x7B, 0xD5, 0x18, 0xB9, - 0x83, 0x0A, 0x4D, 0xBC, 0xCE, 0x6A, 0x93, 0x65, - 0x91, 0xEA, 0x8E, 0xF2, 0x75, 0x07, 0x8A, 0x09, - 0x73, 0x85, 0x2A, 0x4D, 0x13, 0x04, 0x95, 0xD0, - 0x0B, 0x3F, 0x21, 0x85, 0x15, 0x99, 0x90, 0x1C, - 0xFD, 0xF9, 0x36, 0x83, 0x44, 0xC8, 0x10, 0x42, - 0x2F, 0xFE, 0xA0, 0x8A, 0xED, 0xCB, 0x1A, 0x7F, - 0xD3, 0x62, 0x5F, 0x26, 0xB0, 0x34, 0x81, 0x2F, - 0xA3, 0x07, 0xAB, 0x2C, 0x20, 0x94, 0x54, 0x65, - 0x54, 0x6D, 0x31, 0xA3, 0x41, 0xA4, 0x01, 0x3D, - 0x81, 0x89, 0xB4, 0xF5, 0x0F, 0xE8, 0x60, 0xA6, - 0x68, 0xDA, 0xC7, 0xB1, 0x03, 0x44, 0x1E, 0x96, - 0x1F, 0xCE, 0xB0, 0xC5, 0xB1, 0xF3, 0x4D, 0xF2, - 0xE5, 0x98, 0xC6, 0xD8, 0xCF, 0x60, 0xB8, 0x64, - 0x15, 0x0C, 0x70, 0x3D, 0x2B, 0xBE, 0xAC, 0x9B, - 0x00, 0x1A, 0xA2, 0x10, 0x81, 0x47, 0xAE, 0x6B, - 0x8A, 0xAE, 0x2C, 0x77, 0x91, 0xDB, 0xE9, 0x56, - 0xC1, 0xF9, 0xB2, 0x04, 0x7A, 0x15, 0x76, 0x09, - 0x43, 0x87, 0x06, 0x4C, 0x3A, 0x80, 0x1B, 0x0D, - 0x89, 0xC9, 0x96, 0xA5, 0xCF, 0xA3, 0xB0, 0x12, - 0xC1, 0x44, 0x38, 0xB9, 0xF3, 0x53, 0x0C, 0x0C, - 0x5F, 0xA9, 0x38, 0x9F, 0x10, 0xFB, 0x3E, 0xF1, - 0xE2, 0x01, 0x33, 0x38, 0x41, 0x5F, 0x7B, 0x1D, - 0xB4, 0x11, 0xAD, 0xF9, 0x1C, 0x73, 0xB6, 0x45, - 0x6B, 0x68, 0xAB, 0x7C, 0xFC, 0x7B, 0xC9, 0x29, - 0xE4, 0x4E, 0x58, 0xEB, 0x34, 0xCA, 0x10, 0xAE, - 0x31, 0xF0, 0x3B, 0x2C, 0x3B, 0xA6, 0xCC, 0xA2, - 0x7E, 0xB3, 0x5C, 0xB1, 0x37, 0x9A, 0x13, 0x0A, - 0xAC, 0x87, 0xE3, 0xB8, 0x75, 0xCF, 0xE2, 0x53, - 0xAF, 0x03, 0xC4, 0xBD, 0x78, 0x3F, 0x18, 0xC5, - 0xA2, 0xF8, 0x49, 0x2B, 0xBF, 0x7C, 0x56, 0x87, - 0x55, 0x98, 0xB1, 0xB6, 0x3F, 0xE6, 0xCB, 0x06, - 0x94, 0xD0, 0x48, 0x0C, 0xA1, 0xC8, 0xF8, 0x86, - 0x7C, 0x11, 0xB8, 0xBF, 0x33, 0xA3, 0x2C, 0x20, - 0xB7, 0x9F, 0x9C, 0xA4, 0x86, 0x85, 0x86, 0x10, - 0xB1, 0x97, 0x83, 0xBE, 0xF7, 0x84, 0xBF, 0x6B, - 0x0F, 0x85, 0x8C, 0x1A, 0x79, 0x11, 0x30, 0xDA, - 0x69, 0x57, 0xF2, 0x12, 0x23, 0x4E, 0xC9, 0x86, - 0x79, 0x81, 0x4B, 0xE8, 0x39, 0xBF, 0x11, 0x0B, - 0x45, 0xC1, 0xC8, 0x83, 0xEC, 0xDC, 0x3D, 0xB3, - 0xF8, 0x22, 0xA4, 0xF7, 0xC1, 0x25, 0x56, 0x6E, - 0xD1, 0x66, 0x35, 0x68, 0xC8, 0x41, 0x3C, 0xD0, - 0x1C, 0x22, 0x46, 0x7A, 0xD5, 0x20, 0x1A, 0x0A, - 0xDC, 0x76, 0x34, 0x35, 0xA2, 0xCB, 0x05, 0xCD, - 0xC4, 0x70, 0x72, 0xA9, 0x43, 0x70, 0xF5, 0xB4, - 0x34, 0xF7, 0x5C, 0x07, 0x8B, 0x41, 0x59, 0x93, - 0xE8, 0x54, 0xDD, 0xE1, 0x7B, 0xBF, 0x86, 0xC0, - 0xC6, 0xC9, 0xA3, 0x24, 0x85, 0x32, 0xD9, 0xC2, - 0x13, 0x9E, 0xF3, 0xC7, 0x5A, 0x9B, 0xC6, 0x93, - 0x78, 0x10, 0x60, 0xDC, 0xAE, 0x2F, 0xFA, 0x58, - 0xD9, 0xCC, 0x54, 0x8F, 0x19, 0xC1, 0xCE, 0x53, - 0x64, 0x88, 0x0C, 0x7F, 0xB5, 0x0C, 0xC7, 0xBE, - 0x40, 0x53, 0x12, 0xD6, 0xCC, 0x94, 0x03, 0x76, - 0x18, 0xF3, 0x88, 0xC4, 0x90, 0xAF, 0x8F, 0x61, - 0xB9, 0xB4, 0x04, 0x4C, 0xF7, 0x5A, 0x5C, 0xD7, - 0x1A, 0x15, 0x85, 0x3B, 0x5F, 0xD6, 0x22, 0x4C, - 0x6B, 0x95, 0x90, 0xE5, 0x85, 0x01, 0xD2, 0x81, - 0x42, 0x00, 0xC9, 0x19, 0xF2, 0x83, 0xCC, 0x2B, - 0x49, 0xAD, 0x8B, 0xFA, 0x5B, 0xAA, 0xA2, 0x97, - 0x7F, 0x03, 0x82, 0x3F, 0x60, 0x9E, 0xFB, 0x24, - 0x26, 0xF9, 0x36, 0xC3, 0x02, 0x87, 0x09, 0x7B, - 0xD6, 0xB7, 0xBD, 0xC6, 0x78, 0x62, 0x85, 0x88, - 0x83, 0xDB, 0x59, 0x54, 0x08, 0x04, 0x29, 0xB9, - 0xCD, 0x02, 0xCA, 0x96, 0xBC, 0x1C, 0xCB, 0xDB, - 0x51, 0x21, 0xDF, 0xF8, 0x05, 0xB0, 0x82, 0x4A, - 0xEE, 0x99, 0x9E, 0x2B, 0xBB, 0x2D, 0x82, 0x35, - 0x3E, 0x6D, 0x3A, 0x30, 0x07, 0x92, 0x78, 0x10, - 0x58, 0xC5, 0x6E, 0xF7, 0x09, 0x8A, 0xB3, 0x58, - 0x4E, 0xA0, 0x62, 0x1E, 0x20, 0x33, 0x7D, 0x3A, - 0x97, 0x5D, 0x93, 0xCF, 0x32, 0x58, 0x6D, 0x6A, - 0x71, 0xA2, 0xC4, 0xBB, 0xB2, 0x02, 0xB8, 0x53, - 0xFF, 0x09, 0xC4, 0x07, 0xB4, 0x3B, 0x1C, 0x19, - 0xB1, 0xC4, 0xCC, 0xB8, 0x21, 0x48, 0x2D, 0xDD, - 0x27, 0x37, 0x81, 0x77, 0xAA, 0x7F, 0x61, 0x78, - 0x49, 0x7C, 0x3F, 0xBA, 0x79, 0x71, 0x53, 0x84, - 0x8C, 0x5D, 0x0B, 0x1F, 0x40, 0xB5, 0x4E, 0x9D, - 0x51, 0x93, 0x90, 0x4A, 0x30, 0x3F, 0x72, 0x5F, - 0x0C, 0xCC, 0x66, 0xC6, 0xCC, 0xB1, 0x58, 0x85, - 0x06, 0x05, 0x34, 0x6D, 0xB4, 0x2B, 0x87, 0x7D, - 0xD9, 0xCE, 0xA5, 0xF6, 0x9C, 0x12, 0xB2, 0x21, - 0xC7, 0xEC, 0x51, 0x00, 0xF7, 0x65, 0x87, 0xB9, - 0x83, 0x4B, 0xC0, 0xC6, 0x41, 0x53, 0x8F, 0x83, - 0xE8, 0x5B, 0xB3, 0x09, 0x0D, 0xBA, 0xFB, 0xCB, - 0x0B, 0x71, 0x18, 0xFF, 0x7C, 0x97, 0xE9, 0x52, - 0x63, 0x15, 0x70, 0x41, 0xF8, 0xAC, 0x40, 0x52, - 0xD0, 0x40, 0x35, 0x00, 0xCC, 0x4F, 0x68, 0x94, - 0x55, 0x97, 0x4C, 0xEB, 0x5B, 0x07, 0x67, 0x90, - 0xA0, 0x50, 0xE0, 0xB3, 0xF6, 0x77, 0x2A, 0x77, - 0x67, 0x54, 0x1F, 0xF6, 0xB6, 0x7B, 0x2A, 0x1D, - 0x54, 0x07, 0x82, 0x06, 0x47, 0x68, 0x8F, 0x36, - 0x0A, 0x2B, 0x01, 0x47, 0x37, 0x67, 0x71, 0x29, - 0x09, 0xB2, 0x27, 0x65, 0x8B, 0xE6, 0x45, 0x78, - 0x48, 0xC4, 0x40, 0x75, 0x71, 0x68, 0x06, 0x18, - 0x88, 0x58, 0x9C, 0xB0, 0x5A, 0x99, 0x9E, 0x55, - 0x49, 0x67, 0x91, 0xB1, 0x1A, 0xF2, 0x06, 0x6B, - 0xB8, 0xCA, 0x74, 0x60, 0x51, 0xC4, 0x68, 0x0A, - 0x0B, 0xC0, 0x73, 0x82, 0x41, 0x2A, 0xB8, 0xB8, - 0xA3, 0x19, 0xDB, 0xC7, 0x94, 0xDD, 0xC6, 0x94, - 0xBF, 0xDB, 0x81, 0x3F, 0x80, 0xB5, 0x8B, 0x72, - 0x21, 0x8D, 0xD6, 0x4D, 0xFC, 0xDB, 0xA1, 0xAB, - 0x48, 0xA9, 0x4F, 0x7A, 0x8D, 0xCA, 0x92, 0x66, - 0xCD, 0x15, 0xA4, 0x2D, 0x9B, 0xA5, 0xFB, 0x67, - 0x67, 0xA9, 0x55, 0x52, 0x6C, 0x05, 0x0D, 0xE2, - 0x59, 0x8B, 0x11, 0x2A, 0x2B, 0x10, 0x3A, 0xA2, - 0xD1, 0xF0, 0x60, 0x6F, 0xE6, 0x8A, 0x55, 0x19, - 0x1E, 0xF5, 0x3B, 0x30, 0x2F, 0x7C, 0x19, 0x22, - 0xC3, 0x01, 0xCE, 0xEA, 0x98, 0x9A, 0x62, 0x13, - 0x40, 0x90, 0xA8, 0x60, 0x76, 0x77, 0x6F, 0xA4, - 0x46, 0x27, 0xB7, 0x31, 0x63, 0x86, 0x57, 0x6A, - 0x67, 0x81, 0x75, 0xB2, 0x18, 0xE6, 0xF4, 0x82, - 0xB5, 0x2B, 0xC6, 0x02, 0x7B, 0xBE, 0xB3, 0x46, - 0x98, 0xB9, 0x80, 0x2F, 0xD6, 0x76, 0x34, 0xC1, - 0xA9, 0x4D, 0xD4, 0xC5, 0xCD, 0x49, 0xEC, 0x6E, - 0x2D, 0x66, 0x5F, 0x72, 0x77, 0x81, 0xD1, 0xEC, - 0x10, 0xAA, 0xF6, 0x6A, 0xD8, 0x27, 0x9B, 0x9B, - 0xF2, 0x4C, 0x99, 0xE8, 0x75, 0xEC, 0x94, 0x35, - 0x2D, 0x96, 0x05, 0xFA, 0x30, 0xCB, 0x3D, 0x8B, - 0x26, 0x86, 0xB0, 0x39, 0x71, 0xA7, 0x60, 0xB3, - 0x05, 0x3B, 0x34, 0x34, 0x6D, 0x0D, 0x71, 0xB4, - 0x4D, 0x8B, 0x7D, 0x2E, 0xA6, 0x1A, 0x5C, 0x10, - 0xA9, 0x33, 0xD3, 0x8B, 0xA4, 0x83, 0x36, 0x71, - 0x11, 0x74, 0x54, 0x61, 0x47, 0xD4, 0x4B, 0x29, - 0x14, 0xF8, 0x56, 0x89, 0xD9, 0xC1, 0xBF, 0x00, - 0x37, 0xC7, 0xF7, 0x37, 0x7C, 0xD9, 0x30, 0xCF, - 0xF6, 0x0F, 0x84, 0xB0, 0xA2, 0x00, 0x5D, 0x3E, - 0xFE, 0x55, 0xC7, 0x31, 0x1B, 0x1B, 0x61, 0x32, - 0x76, 0x8B, 0x52, 0x90, 0xD8, 0x36, 0xB8, 0x2B, - 0xC4, 0x43, 0xC3, 0x2B, 0x4F, 0xEC, 0x96, 0x02, - 0x19, 0xDB, 0x21, 0x32, 0xF7, 0x99, 0x0A, 0xD6, - 0x84, 0xA3, 0x72, 0x9F, 0x3D, 0x1A, 0x2C, 0xEA, - 0x3A, 0x1F, 0xE4, 0xB1, 0x26, 0x75, 0xC4, 0x89, - 0xEF, 0x33, 0x19, 0x8F, 0x01, 0xA1, 0x06, 0x80, - 0x6E, 0xFC, 0xE8, 0x92, 0x1D, 0xC4, 0x6E, 0x97, - 0x1C, 0x0A, 0x0A, 0x56, 0x4A, 0xF9, 0xE5, 0x6C, - 0xA7, 0x27, 0xA7, 0x64, 0x1C, 0x56, 0x8C, 0x95, - 0xAA, 0x59, 0x56, 0x91, 0x0B, 0x28, 0x84, 0x29, - 0xF8, 0x0E, 0xE7, 0x22, 0x6E, 0x9D, 0xC4, 0x06, - 0x7E, 0x34, 0x94, 0x4F, 0x06, 0x92, 0x6D, 0x44, - 0xB2, 0xCF, 0x87, 0x64, 0xF7, 0x13, 0x59, 0x3B, - 0x44, 0x29, 0xF8, 0x2B, 0x8F, 0xCC, 0x60, 0x77, - 0x98, 0x91, 0x6B, 0x81, 0x5B, 0x90, 0x98, 0x33, - 0x0E, 0xC3, 0x34, 0x29, 0x0D, 0xB8, 0xC0, 0x4B, - 0x08, 0x3D, 0xF3, 0xCA, 0x10, 0xCE, 0x35, 0x75, - 0x07, 0x30, 0x28, 0xE9, 0x94, 0xA2, 0x5B, 0xE7, - 0x28, 0x78, 0x49, 0x2F, 0xE1, 0xB6, 0x96, 0xBA, - 0x5C, 0xB1, 0xA7, 0x73, 0x19, 0x3A, 0x3B, 0x28, - 0xA4, 0xF4, 0x40, 0xAE, 0x58, 0x2D, 0xC7, 0xC2, - 0x4F, 0xE7, 0x45, 0x1D, 0x66, 0x76, 0x23, 0x2B, - 0xB9, 0x61, 0xC5, 0x04, 0x0C, 0x9E, 0x52, 0x01, - 0xAA, 0xF3, 0xCD, 0x4D, 0xE4, 0x0A, 0xD5, 0xA9, - 0x57, 0x8A, 0xF5, 0x28, 0x10, 0xB5, 0x93, 0xE9, - 0x81, 0x5E, 0x23, 0xF6, 0x3F, 0x56, 0x40, 0x61, - 0xA4, 0x84, 0x07, 0x21, 0x3A, 0xA1, 0xB0, 0x90, - 0x8F, 0x4B, 0x17, 0x4F, 0x86, 0xD5, 0x73, 0xFA, - 0x04, 0x38, 0x64, 0x98, 0xBE, 0x68, 0x39, 0x8E, - 0x8D, 0x72, 0x0D, 0x27, 0x81, 0x11, 0xD8, 0xB1, - 0x73, 0x03, 0x60, 0x2A, 0x96, 0xE3, 0x5F, 0x56, - 0xFB, 0x25, 0x17, 0x3C, 0x4F, 0x4A, 0x03, 0xCA, - 0x2A, 0xC9, 0xBF, 0x79, 0xDC, 0xAB, 0x76, 0x4B, - 0xCE, 0x44, 0x10, 0x40, 0x1E, 0x10, 0x13, 0xE6, - 0x52, 0x8C, 0xCC, 0x51, 0x13, 0x35, 0x85, 0x77, - 0xDA, 0x83, 0x75, 0xE0, 0x23, 0x43, 0x10, 0x8C, - 0x29, 0x24, 0xD2, 0x55, 0x1E, 0x5C, 0xC5, 0xA1, - 0xB0, 0x4D, 0xEF, 0x88, 0x32, 0x4D, 0x85, 0x4F, - 0xC9, 0x2C, 0x4A, 0xDF, 0x7C, 0x23, 0x01, 0x33, - 0x7E, 0x45, 0x20, 0xBF, 0xC3, 0x65, 0x56, 0x6F, - 0x66, 0x09, 0x2E, 0x36, 0x7A, 0xE6, 0x06, 0x12, - 0x74, 0x46, 0x53, 0xC1, 0xEB, 0x47, 0xF0, 0x82, - 0x09, 0x51, 0xA2, 0xA1, 0x4C, 0x42, 0x59, 0x09, - 0x34, 0x0D, 0x87, 0x27, 0x18, 0x8E, 0xAA, 0x08, - 0xE4, 0x86, 0x78, 0x98, 0x48, 0x76, 0xD0, 0x00, - 0x8D, 0xAE, 0x99, 0x01, 0x5B, 0x36, 0x63, 0xFD, - 0xCB, 0x72, 0x57, 0x41, 0x53, 0x0B, 0xC3, 0x89, - 0x5B, 0x11, 0x62, 0x0C, 0xE3, 0xB4, 0x17, 0xA3, - 0x20, 0xE1, 0x88, 0x13, 0xB9, 0x9C, 0x23, 0x5A, - 0xC0, 0x6F, 0x55, 0x60, 0x0F, 0x98, 0x38, 0x82, - 0xBF, 0xF0, 0x02, 0x36, 0x10, 0x7B, 0x50, 0x42, - 0x54, 0x5B, 0x6B, 0x77, 0x58, 0x68, 0xAE, 0xFB, - 0x79, 0xB5, 0x95, 0x59, 0x69, 0x02, 0xC6, 0x9B, - 0x9E, 0xCA, 0x3D, 0x35, 0x8C, 0x61, 0xFE, 0xE0, - 0x36, 0xD2, 0x18, 0xAC, 0x43, 0xBA, 0x3F, 0x52, - 0xC0, 0x6A, 0x8F, 0x88, 0x1A, 0x7E, 0xD7, 0x03, - 0x86, 0x14, 0x2C, 0xBA, 0xC5, 0xCC, 0x04, 0xFC, - 0xC3, 0x1E, 0x16, 0x27, 0x76, 0x51, 0xCE, 0x2D, - 0xCC, 0x50, 0x14, 0xF6, 0xBA, 0x5A, 0x91, 0x5C, - 0x13, 0x38, 0x83, 0x4E, 0xF4, 0x74, 0xB6, 0x71, - 0x59, 0x13, 0xBC, 0x7A, 0x4E, 0x59, 0x3C, 0x68, - 0x87, 0x66, 0xAD, 0xD7, 0x06, 0x98, 0xB3, 0x7E, - 0x06, 0xE5, 0x39, 0x15, 0xF3, 0x85, 0x38, 0x8C, - 0x25, 0xC4, 0x26, 0x5E, 0x1C, 0xB4, 0x4F, 0xE3, - 0xD0, 0x19, 0xD1, 0x21, 0xAE, 0x4C, 0x32, 0x43, - 0x4F, 0x37, 0xB0, 0xA4, 0xCB, 0x69, 0xC7, 0xCC, - 0x95, 0x70, 0x73, 0x50, 0xC3, 0x49, 0x3D, 0x0F, - 0xB1, 0x1C, 0xD4, 0xD0, 0x9F, 0x29, 0xDC, 0x56, - 0xC0, 0x7B, 0xC8, 0xEB, 0x0B, 0xD0, 0x08, 0x2B, - 0x41, 0x44, 0x21, 0x45, 0x66, 0x3C, 0x21, 0xAB, - 0x43, 0x34, 0x67, 0xB9, 0x5E, 0xC2, 0x47, 0x84, - 0x23, 0xC1, 0x8B, 0xF2, 0xEC, 0x70, 0x3E, 0xFB, - 0xA2, 0x8C, 0xDA, 0xBD, 0x42, 0xB7, 0xB8, 0x33, - 0x15, 0x0D, 0x6D, 0xA2, 0x5E, 0xB0, 0x0A, 0x83, - 0x28, 0x90, 0x2E, 0x2D, 0x08, 0x9B, 0x55, 0xD6, - 0x9A, 0xAD, 0x9A, 0x94, 0xD8, 0x18, 0x26, 0x4C, - 0x54, 0xB0, 0x4D, 0x61, 0x4D, 0x14, 0x7A, 0x30, - 0xAB, 0xFC, 0x03, 0xD9, 0x92, 0x9D, 0x96, 0xBA, - 0x7F, 0x81, 0x86, 0x5D, 0xA3, 0x53, 0xC4, 0x54, - 0xBA, 0x7A, 0xA7, 0x88, 0x1A, 0xB9, 0x74, 0xC1, - 0xB8, 0xF0, 0x83, 0x1E, 0x79, 0xC4, 0x41, 0x86, - 0x64, 0xE9, 0x53, 0xA5, 0x4D, 0xE9, 0x32, 0x13, - 0x69, 0x72, 0x81, 0x34, 0x1D, 0x37, 0xF5, 0x08, - 0xE8, 0xCB, 0xAE, 0x3D, 0x81, 0x85, 0x05, 0x45, - 0x67, 0xDE, 0xFC, 0x8E, 0x3B, 0xBC, 0xAA, 0x42, - 0x47, 0x90, 0x7C, 0x48, 0x3B, 0x8F, 0x1B, 0x84, - 0xB3, 0x24, 0xC1, 0xA7, 0xCA, 0x84, 0x42, 0xDB, - 0x6B, 0x7B, 0x12, 0x8C, 0x83, 0x13, 0xBE, 0x1F, - 0xE2, 0x57, 0x91, 0x20, 0x9B, 0x86, 0x4A, 0x3E, - 0x1A, 0x61, 0x8D, 0x56, 0xD7, 0x10, 0xD6, 0xF3, - 0xBF, 0x55, 0x95, 0x10, 0x16, 0x7C, 0x46, 0x4C, - 0x6B, 0x9B, 0x8B, 0xC4, 0x90, 0xB8, 0xE0, 0x39, - 0x25, 0xD0, 0x3D, 0x0E, 0xEB, 0x5D, 0x78, 0x17, - 0x94, 0x28, 0xBB, 0x80, 0xD3, 0xFB, 0x14, 0x88, - 0x40, 0x70, 0x9C, 0x41, 0x14, 0x7A, 0x68, 0x6F, - 0xC9, 0xBC, 0xBD, 0xCD, 0xF7, 0xC7, 0xEA, 0x7C, - 0x30, 0xFB, 0x64, 0x0F, 0xF0, 0x5B, 0x75, 0x39, - 0xAB, 0xAB, 0x70, 0x89, 0x29, 0x08, 0xE9, 0x3C, - 0xC9, 0xC3, 0x47, 0xF8, 0xAC, 0x88, 0x9E, 0x56, - 0x46, 0x8A, 0x13, 0x5B, 0x99, 0x75, 0x47, 0x38, - 0xE1, 0x5F, 0x4E, 0x67, 0x7D, 0xF3, 0x75, 0xBF, - 0x1B, 0x43, 0x60, 0x6A, 0x2C, 0x47, 0x38, 0x0B, - 0x10, 0xA0, 0xC1, 0x4C, 0x28, 0x58, 0x3C, 0x83, - 0x31, 0x1A, 0x28, 0x54, 0xB2, 0xA9, 0x93, 0x1F, - 0xD6, 0x60, 0x86, 0xC1, 0x07, 0x49, 0xF3, 0x34, - 0x57, 0x7F, 0xD7, 0x0B, 0x51, 0xB9, 0x50, 0x60, - 0x07, 0x51, 0x99, 0x31, 0x9B, 0x3F, 0x7C, 0xB5, - 0xB2, 0x37, 0x30, 0x2C, 0x37, 0x0A, 0x23, 0x17, - 0x5E, 0x4E, 0x01, 0x3C, 0x56, 0x28, 0x1B, 0xAF, - 0xE2, 0xBE, 0x9F, 0x82, 0x5A, 0x30, 0x66, 0xAB, - 0x8B, 0xBA, 0x57, 0x93, 0xE2, 0x1E, 0x7A, 0x48, - 0x97, 0x8C, 0xF6, 0x0C, 0x09, 0x1B, 0x1F, 0x80, - 0xC0, 0xC2, 0x38, 0x14, 0xA3, 0x0F, 0x77, 0x60, - 0x60, 0x1A, 0xCE, 0xAB, 0xB1, 0x21, 0x52, 0x00, - 0x94, 0x0F, 0xFA, 0x15, 0x22, 0x72, 0x09, 0x6D, - 0x45, 0x8D, 0x00, 0xDD, 0x03, 0x9F, 0x23, 0x6B, - 0x27, 0x27, 0xB5, 0x88, 0xC6, 0x22, 0x04, 0xE7, - 0x9C, 0x45, 0x16, 0x81, 0xDF, 0xE4, 0x10, 0xEE, - 0xC4, 0x2B, 0x74, 0x94, 0x5A, 0xEC, 0x03, 0x13, - 0xA3, 0x91, 0x94, 0x2A, 0xE1, 0xB1, 0x22, 0x17, - 0x4D, 0xBE, 0x59, 0xAB, 0x1E, 0x39, 0x0C, 0xD6, - 0x49, 0x41, 0x43, 0x6C, 0x75, 0xA9, 0x32, 0x3C, - 0x69, 0xA6, 0x41, 0x88, 0x08, 0x70, 0xFB, 0xB2, - 0x80, 0xB3, 0xB3, 0x7B, 0x3B, 0xD9, 0x82, 0xB8, - 0x29, 0x55, 0x62, 0x0B, 0x07, 0x83, 0xB8, 0x2E, - 0x89, 0x61, 0xA4, 0x04, 0x3B, 0xC7, 0xF6, 0x6C, - 0x0E, 0xF2, 0x5A, 0x5E, 0xD1, 0x53, 0x26, 0xF8, - 0x81, 0x6E, 0x5E, 0xA4, 0x16, 0x7E, 0xE8, 0xBF, - 0x66, 0x66, 0x45, 0x1D, 0x31, 0x5B, 0x2C, 0x75, - 0x14, 0x41, 0x17, 0x2C, 0x27, 0x83, 0x00, 0x26, - 0x82, 0x61, 0xC7, 0x8C, 0x6F, 0x0C, 0x46, 0x56, - 0x27, 0x79, 0xB3, 0xA1, 0x19, 0x6F, 0x87, 0x83, - 0x5F, 0x79, 0xFC, 0xB7, 0xE0, 0xCB, 0xA1, 0x53, - 0x36, 0xCC, 0x83, 0xE1, 0x56, 0xC5, 0x02, 0x28, - 0x87, 0xA8, 0x09, 0x86, 0xB4, 0x9C, 0x1B, 0x57, - 0x65, 0x94, 0xA2, 0x31, 0x42, 0x62, 0x4A, 0xBF, - 0x52, 0x48, 0x22, 0x41, 0x8C, 0x61, 0x01, 0x90, - 0x52, 0x62, 0x80, 0x65, 0x72, 0x49, 0x4D, 0x37, - 0x53, 0xC0, 0x62, 0x81, 0xE7, 0xF1, 0x7E, 0x0D, - 0x79, 0x6C, 0xD7, 0x76, 0x7F, 0xDC, 0xE9, 0x01, - 0xFE, 0x17, 0x12, 0xA0, 0x0A, 0x3D, 0x36, 0xEB, - 0x42, 0x3E, 0x29, 0x86, 0x88, 0x46, 0x93, 0x2A, - 0x94, 0x31, 0xB8, 0xCA, 0x66, 0x0F, 0xC1, 0x97, - 0x5E, 0x23, 0xA7, 0x5B, 0x4A, 0x51, 0xDE, 0x10, - 0x69, 0xD3, 0xA5, 0x9F, 0x6E, 0xEB, 0x2A, 0x5C, - 0xE7, 0x2A, 0x89, 0x16, 0xB5, 0xE8, 0x63, 0x47, - 0x6E, 0x6A, 0xC5, 0x72, 0x92, 0x9F, 0x2C, 0x29, - 0xBC, 0x56, 0x27, 0xBA, 0x99, 0x41, 0x63, 0xCE, - 0xD3, 0x5A, 0xB7, 0x03, 0x1C, 0x00, 0x49, 0x07, - 0x24, 0x55, 0x5A, 0xCD, 0xE6, 0x13, 0xAE, 0xB4, - 0xC3, 0xE9, 0x99, 0x81, 0xC6, 0x2B, 0x5D, 0xC6, - 0xA9, 0xB3, 0x5B, 0xA7, 0x92, 0x20, 0x24, 0x36, - 0x89, 0xE0, 0x59, 0x49, 0x96, 0x85, 0x7C, 0x04, - 0x5D, 0x67, 0x19, 0x3D, 0x9E, 0x41, 0x1B, 0x4F, - 0xF3, 0x9D, 0x0F, 0x8C, 0x3C, 0x0A, 0x70, 0xAD, - 0xB7, 0x2A, 0x70, 0x21, 0xE3, 0x6D, 0x64, 0xFB, - 0x29, 0x4D, 0x93, 0x2B, 0x24, 0xE1, 0xA2, 0xBC, - 0x0B, 0xC4, 0x1C, 0x4A, 0xA3, 0xB5, 0xEC, 0x3C, - 0xF0, 0xE6, 0x72, 0xDE, 0x14, 0x0F, 0x48, 0x47, - 0x33, 0xFD, 0x82, 0xBF, 0x08, 0x29, 0x34, 0xB5, - 0x40, 0xA6, 0x35, 0xC4, 0x48, 0x98, 0xE8, 0xAB, - 0x8E, 0x06, 0x45, 0x70, 0x5A, 0xA5, 0x81, 0x71, - 0x8B, 0x41, 0x32, 0xC4, 0x27, 0x92, 0x7F, 0xAE, - 0x75, 0xBF, 0x96, 0x16, 0xA5, 0x42, 0x4C, 0x20, - 0x20, 0xEB, 0xC5, 0xCF, 0xC1, 0xBC, 0x0E, 0xD1, - 0x65, 0x3A, 0xE5, 0x00, 0x5A, 0x17, 0x54, 0x18, - 0x16, 0x20, 0xB7, 0xF0, 0x6D, 0x71, 0x63, 0x13, - 0x03, 0x3B, 0xB7, 0x2A, 0x40, 0x64, 0x7A, 0xDB, - 0x2E, 0x66, 0x73, 0x70, 0xF2, 0xC7, 0x4F, 0xDB, - 0x94, 0x42, 0x0D, 0xA4, 0x8D, 0xD1, 0x37, 0x9D, - 0xBA, 0x59, 0xAA, 0x22, 0xF8, 0x57, 0xE2, 0x31, - 0xC5, 0xC0, 0x83, 0x29, 0x00, 0x66, 0xC5, 0x48, - 0x76, 0x1B, 0xDF, 0x38, 0x5F, 0x2F, 0x85, 0x81, - 0x7B, 0x21, 0x20, 0x66, 0xD3, 0x9F, 0x03, 0xB7, - 0x7F, 0x8E, 0xF4, 0x12, 0x19, 0xE4, 0xBF, 0xB9, - 0xC1, 0x2E, 0x4F, 0xC9, 0x88, 0x00, 0x57, 0x1D, - 0x22, 0x3A, 0xA9, 0x2A, 0x32, 0xC7, 0xA3, 0xC2, - 0xA7, 0xCF, 0x9C, 0x99, 0x5A, 0xE0, 0xA7, 0xB5, - 0x93, 0x91, 0xFE, 0x9A, 0x4F, 0x0D, 0x63, 0x3B, - 0xFB, 0x79, 0x8C, 0x34, 0xB7, 0x2B, 0xBA, 0x6A, - 0x9F, 0x16, 0xC4, 0x13, 0x2E, 0x88, 0xB5, 0x70, - 0x75, 0x8B, 0xD5, 0x51, 0xC9, 0x1B, 0xD2, 0xAD, - 0xEB, 0x53, 0xA7, 0x2A, 0xC6, 0xAA, 0x03, 0x68, - 0x9D, 0xD6, 0x4B, 0x03, 0x57, 0x09, 0xA8, 0xAF, - 0x46, 0x85, 0x43, 0xCB, 0x17, 0x36, 0xDB, 0xC9, - 0xC7, 0x2B, 0x52, 0x9E, 0x70, 0x59, 0x6D, 0x18, - 0xB1, 0x9C, 0xA6, 0x8E, 0x61, 0x7A, 0x14, 0x7C, - 0x18, 0x9D, 0x28, 0x3A, 0x77, 0x68, 0x8C, 0xAF, - 0x94, 0xDA, 0x5A, 0x0E, 0x9B, 0x63, 0x18, 0x1A, - 0x40, 0xBB, 0xE7, 0xBD, 0x41, 0x68, 0xA2, 0x4D, - 0x27, 0x43, 0x19, 0xA9, 0x93, 0xBC, 0xEA, 0x8A, - 0xBF, 0x50, 0x5F, 0xE8, 0x62, 0x12, 0x96, 0x92, - 0xB5, 0xBD, 0xE8, 0x49, 0xF3, 0x6A, 0xC9, 0x2F, - 0x71, 0x71, 0xE5, 0x38, 0x59, 0x31, 0x36, 0x04, - 0xEA, 0xC1, 0x0B, 0xE2, 0x78, 0x6F, 0xF3, 0x85, - 0xB9, 0xC7, 0x18, 0x15, 0x48, 0x18, 0x77, 0x2F, - 0xA7, 0xB8, 0x99, 0xC0, 0x4E, 0xFD, 0x18, 0xA8, - 0x01, 0x9A, 0x79, 0xB6, 0xF6, 0x4D, 0x5B, 0x9A, - 0x2C, 0x55, 0xE7, 0x84, 0xCB, 0x47, 0xCA, 0x29, - 0x48, 0x56, 0x68, 0x9A, 0xA6, 0xA7, 0x0C, 0xC2, - 0x7B, 0x6C, 0x20, 0xD4, 0xD1, 0xC7, 0x29, 0xC4, - 0x09, 0xD0, 0xB9, 0x25, 0xC4, 0x0C, 0x30, 0xC0, - 0x77, 0x78, 0x15, 0x07, 0x77, 0x49, 0x48, 0x8B, - 0x8D, 0xF0, 0x39, 0x06, 0x95, 0xAB, 0xDB, 0x04, - 0x8C, 0x7C, 0xE1, 0x85, 0x36, 0x02, 0xA5, 0x4D, - 0x15, 0x3C, 0xF2, 0xA5, 0x16, 0x17, 0x84, 0x7B, - 0x11, 0xE6, 0x3C, 0x4C, 0x76, 0x19, 0x66, 0xD5, - 0xAD, 0x93, 0x35, 0x0D, 0xBA, 0xDA, 0x4A, 0x15, - 0xC1, 0x24, 0xBD, 0x80, 0x88, 0x71, 0x99, 0x3F, - 0xC7, 0x75, 0xB6, 0xE4, 0x10, 0xC3, 0x86, 0x59, - 0x0F, 0x73, 0x0A, 0x8E, 0xC9, 0x47, 0x5E, 0xEE, - 0x91, 0x50, 0x39, 0xE9, 0x1B, 0x6F, 0xE4, 0x25, - 0xB9, 0x06, 0x68, 0xC6, 0xAC, 0x52, 0x58, 0xB7, - 0xAF, 0x10, 0x3B, 0x9F, 0x5E, 0x23, 0x0B, 0x71, - 0x9B, 0xBB, 0x09, 0x87, 0x1D, 0xC1, 0x62, 0x15, - 0x17, 0xBA, 0x2A, 0x83, 0x9C, 0x96, 0xAA, 0xA6, - 0x44, 0x0A, 0x87, 0x5E, 0xAC, 0x90, 0xB2, 0x98, - 0xD6, 0x1B, 0xD3, 0xF3, 0xAC, 0x89, 0xB4, 0x05, - 0xDB, 0x39, 0x42, 0x32, 0x68, 0x6A, 0x2B, 0xE0, - 0xF3, 0xC7, 0x5F, 0x15, 0xE6, 0x4E, 0x61, 0xF0, - 0x70, 0x79, 0x1E, 0xB4, 0xBB, 0x97, 0xB7, 0x01, - 0x98, 0x25, 0xF1, 0x17, 0xC7, 0xD7, 0x3A, 0x12, - 0xFD, 0x3D, 0xCC, 0x22, 0xD5, 0x81, 0xB0, 0xE4, - 0x1B, 0x78, 0x63, 0x74, 0xA4, 0x61, 0xEA, 0x0D, - 0x88, 0xDA, 0xA8, 0x9B, 0x65, 0x9F, 0x0D, 0xC8, - 0x24, 0x43, 0x42, 0x35, 0x15, 0xB6, 0x33, 0xB0, - 0x05, 0xC9, 0x58, 0xEC, 0x26, 0x56, 0x1B, 0x6D, - 0xB8, 0x18, 0xF4, 0xB8, 0xCB, 0x2E, 0x28, 0x99, - 0x0E, 0x74, 0x84, 0x17, 0x58, 0x7F, 0xEC, 0x38, - 0xA1, 0x28, 0x4B, 0xBB, 0x4F, 0xF9, 0xE4, 0x78 + 0x84, 0x45, 0xC3, 0x36, 0xF3, 0x51, 0x8B, 0x29, + 0x81, 0x63, 0xDC, 0xBB, 0x63, 0x57, 0x59, 0x79, + 0x83, 0xCA, 0x2E, 0x87, 0x3D, 0xCB, 0x49, 0x61, + 0x0C, 0xF5, 0x2F, 0x14, 0xDB, 0xCB, 0x94, 0x7C, + 0x1F, 0x3E, 0xE9, 0x26, 0x69, 0x67, 0x27, 0x6B, + 0x0C, 0x57, 0x6C, 0xF7, 0xC3, 0x0E, 0xE6, 0xB9, + 0x3D, 0xEA, 0x51, 0x18, 0x67, 0x6C, 0xBE, 0xE1, + 0xB1, 0xD4, 0x79, 0x42, 0x06, 0xFB, 0x36, 0x9A, + 0xBA, 0x41, 0x16, 0x7B, 0x43, 0x93, 0x85, 0x5C, + 0x84, 0xEB, 0xA8, 0xF3, 0x23, 0x73, 0xC0, 0x5B, + 0xAE, 0x76, 0x31, 0xC8, 0x02, 0x74, 0x4A, 0xAD, + 0xB6, 0xC2, 0xDE, 0x41, 0x25, 0x0C, 0x49, 0x43, + 0x15, 0x23, 0x0B, 0x52, 0x82, 0x6C, 0x34, 0x58, + 0x7C, 0xB2, 0x1B, 0x18, 0x3B, 0x49, 0xB2, 0xA5, + 0xAC, 0x04, 0x92, 0x1A, 0xC6, 0xBF, 0xAC, 0x1B, + 0x24, 0xA4, 0xB3, 0x7A, 0x93, 0xA4, 0xB1, 0x68, + 0xCC, 0xE7, 0x59, 0x1B, 0xE6, 0x11, 0x1F, 0x47, + 0x62, 0x60, 0xF2, 0x76, 0x29, 0x59, 0xF5, 0xC1, + 0x64, 0x01, 0x18, 0xC2, 0x42, 0x37, 0x72, 0xE2, + 0xAD, 0x03, 0xDC, 0x71, 0x68, 0xA3, 0x8C, 0x6D, + 0xD3, 0x9F, 0x5F, 0x72, 0x54, 0x26, 0x42, 0x80, + 0xC8, 0xBC, 0x10, 0xB9, 0x14, 0x16, 0x80, 0x70, + 0x47, 0x2F, 0xA8, 0x80, 0xAC, 0xB8, 0x60, 0x1A, + 0x8A, 0x08, 0x37, 0xF2, 0x5F, 0xE1, 0x94, 0x68, + 0x7C, 0xD6, 0x8B, 0x7D, 0xE2, 0x34, 0x0F, 0x03, + 0x6D, 0xAD, 0x89, 0x1D, 0x38, 0xD1, 0xB0, 0xCE, + 0x9C, 0x26, 0x33, 0x35, 0x5C, 0xF5, 0x7B, 0x50, + 0xB8, 0x96, 0x03, 0x6F, 0xCA, 0x26, 0x0D, 0x26, + 0x69, 0xF8, 0x5B, 0xAC, 0x79, 0x71, 0x4F, 0xDA, + 0xFB, 0x41, 0xEF, 0x80, 0xB8, 0xC3, 0x02, 0x64, + 0xC3, 0x13, 0x86, 0xAE, 0x60, 0xB0, 0x5F, 0xAA, + 0x54, 0x2A, 0x26, 0xB4, 0x1E, 0xB8, 0x5F, 0x67, + 0x06, 0x8F, 0x08, 0x80, 0x34, 0xFF, 0x67, 0xAA, + 0x2E, 0x81, 0x5A, 0xAB, 0x8B, 0xCA, 0x6B, 0xF7, + 0x1F, 0x70, 0xEC, 0xC3, 0xCB, 0xCB, 0xC4, 0x5E, + 0xF7, 0x01, 0xFC, 0xD5, 0x42, 0xBD, 0x21, 0xC7, + 0xB0, 0x95, 0x68, 0xF3, 0x69, 0xC6, 0x69, 0xF3, + 0x96, 0x47, 0x38, 0x44, 0xFB, 0xA1, 0x49, 0x57, + 0xF5, 0x19, 0x74, 0xD8, 0x52, 0xB9, 0x78, 0x01, + 0x46, 0x03, 0xA2, 0x10, 0xC0, 0x19, 0x03, 0x62, + 0x87, 0x00, 0x89, 0x94, 0xF2, 0x12, 0x55, 0xB2, + 0x50, 0x99, 0xAD, 0x82, 0xAA, 0x13, 0x24, 0x38, + 0x96, 0x3B, 0x2C, 0x0A, 0x47, 0xCD, 0xF5, 0xF3, + 0x2B, 0xA4, 0x6B, 0x76, 0xC7, 0xA6, 0x55, 0x9F, + 0x18, 0xBF, 0xD5, 0x55, 0xB7, 0x62, 0xE4, 0x87, + 0xB6, 0xAC, 0x99, 0x2F, 0xE2, 0x0E, 0x28, 0x3C, + 0xA0, 0xB3, 0xF6, 0x16, 0x44, 0x96, 0x95, 0x59, + 0x95, 0xC3, 0xB2, 0x8A, 0x57, 0xBB, 0xC2, 0x98, + 0x26, 0xF0, 0x6F, 0xB3, 0x8B, 0x25, 0x34, 0x70, + 0xAF, 0x63, 0x1B, 0xC4, 0x6C, 0x3A, 0x8F, 0x9C, + 0xE8, 0x24, 0x32, 0x19, 0x85, 0xDD, 0x01, 0xC0, + 0x5F, 0x69, 0xB8, 0x24, 0xF9, 0x16, 0x63, 0x3B, + 0x40, 0x65, 0x4C, 0x75, 0xAA, 0xEB, 0x93, 0x85, + 0x57, 0x6F, 0xFD, 0xE2, 0x99, 0x0A, 0x6B, 0x0A, + 0x3B, 0xE8, 0x29, 0xD6, 0xD8, 0x4E, 0x34, 0xF1, + 0x78, 0x05, 0x89, 0xC7, 0x92, 0x04, 0xC6, 0x3C, + 0x79, 0x8F, 0x55, 0xD2, 0x31, 0x87, 0xE4, 0x61, + 0xD4, 0x8C, 0x21, 0xE5, 0xC0, 0x47, 0xE5, 0x35, + 0xB1, 0x9F, 0x45, 0x8B, 0xBA, 0x13, 0x45, 0xB9, + 0xE4, 0x1E, 0x0C, 0xB4, 0xA9, 0xC2, 0xD8, 0xC4, + 0x0B, 0x49, 0x0A, 0x3B, 0xAB, 0xC5, 0x53, 0xB3, + 0x02, 0x6B, 0x16, 0x72, 0xD2, 0x8C, 0xBC, 0x8B, + 0x49, 0x8A, 0x3A, 0x99, 0x57, 0x9A, 0x83, 0x2F, + 0xEA, 0xE7, 0x46, 0x10, 0xF0, 0xB6, 0x25, 0x0C, + 0xC3, 0x33, 0xE9, 0x49, 0x3E, 0xB1, 0x62, 0x1E, + 0xD3, 0x4A, 0xA4, 0xAB, 0x17, 0x5F, 0x2C, 0xA2, + 0x31, 0x15, 0x25, 0x09, 0xAC, 0xB6, 0xAC, 0x86, + 0xB2, 0x0F, 0x6B, 0x39, 0x10, 0x84, 0x39, 0xE5, + 0xEC, 0x12, 0xD4, 0x65, 0xA0, 0xFE, 0xF3, 0x50, + 0x03, 0xE1, 0x42, 0x77, 0xA2, 0x18, 0x12, 0x14, + 0x6B, 0x25, 0x44, 0x71, 0x6D, 0x6A, 0xB8, 0x2D, + 0x1B, 0x07, 0x26, 0xC2, 0x7A, 0x98, 0xD5, 0x89, + 0xEB, 0xDA, 0xCC, 0x4C, 0x54, 0xBA, 0x77, 0xB2, + 0x49, 0x8F, 0x21, 0x7E, 0x14, 0xE3, 0x4E, 0x66, + 0x02, 0x5A, 0x2A, 0x14, 0x3A, 0x99, 0x25, 0x20, + 0xA6, 0x1C, 0x06, 0x72, 0xCC, 0x9C, 0xCE, 0xD7, + 0xC9, 0x45, 0x0C, 0x68, 0x3E, 0x90, 0xA3, 0xE4, + 0x65, 0x1D, 0xB6, 0x23, 0xA6, 0xDB, 0x39, 0xAC, + 0x26, 0x12, 0x5B, 0x7F, 0xC1, 0x98, 0x6D, 0x7B, + 0x04, 0x93, 0xB8, 0xB7, 0x2D, 0xE7, 0x70, 0x7D, + 0xC2, 0x0B, 0xBD, 0xD4, 0x37, 0x13, 0x15, 0x6A, + 0xF7, 0xD9, 0x43, 0x0E, 0xF4, 0x53, 0x99, 0x66, + 0x3C, 0x22, 0x02, 0x73, 0x91, 0x68, 0x69, 0x2D, + 0xD6, 0x57, 0x54, 0x5B, 0x05, 0x6D, 0x9C, 0x92, + 0x38, 0x5A, 0x7F, 0x41, 0x4B, 0x34, 0xB9, 0x0C, + 0x79, 0x60, 0xD5, 0x7B, 0x35, 0xBA, 0x7D, 0xDE, + 0x7B, 0x81, 0xFC, 0xA0, 0x11, 0x9D, 0x74, 0x1B, + 0x12, 0x78, 0x09, 0x26, 0x01, 0x8F, 0xE4, 0xC8, + 0x03, 0x0B, 0xF0, 0x38, 0xE1, 0x8B, 0x4F, 0xA3, + 0x37, 0x43, 0xD0, 0xD3, 0xC8, 0x46, 0x41, 0x7E, + 0x9D, 0x59, 0x15, 0xC2, 0x46, 0x31, 0x59, 0x38, + 0xB1, 0xE2, 0x33, 0x61, 0x45, 0x01, 0xD0, 0x26, + 0x95, 0x95, 0x51, 0x25, 0x8B, 0x23, 0x32, 0x30, + 0xD4, 0x28, 0xB1, 0x81, 0xB1, 0x32, 0xF1, 0xD0, + 0xB0, 0x26, 0x06, 0x7B, 0xA8, 0x16, 0x99, 0x9B, + 0xC0, 0xCD, 0x6B, 0x54, 0x7E, 0x54, 0x8B, 0x63, + 0xC9, 0xEA, 0xA0, 0x91, 0xBA, 0xC4, 0x93, 0xDC, + 0x59, 0x8D, 0xBC, 0x2B, 0x0E, 0x14, 0x6A, 0x25, + 0x91, 0xC2, 0xA8, 0xC0, 0x09, 0xDD, 0x51, 0x70, + 0xAA, 0xE0, 0x27, 0xC5, 0x41, 0xA1, 0xB5, 0xE6, + 0x6E, 0x45, 0xC6, 0x56, 0x12, 0x98, 0x4C, 0x46, + 0x77, 0x04, 0x93, 0xEC, 0x89, 0x6E, 0xF2, 0x5A, + 0xA9, 0x30, 0x5E, 0x9F, 0x06, 0x69, 0x2C, 0xD0, + 0xB2, 0xF0, 0x69, 0x62, 0xE2, 0x05, 0xBE, 0xBE, + 0x11, 0x3A, 0x34, 0xEB, 0xB1, 0xA4, 0x83, 0x0A, + 0x9B, 0x37, 0x49, 0x64, 0x1B, 0xB9, 0x35, 0x00, + 0x7B, 0x23, 0xB2, 0x4B, 0xFE, 0x57, 0x69, 0x56, + 0x25, 0x4D, 0x7A, 0x35, 0xAA, 0x49, 0x6A, 0xC4, + 0x46, 0xC6, 0x7A, 0x7F, 0xEC, 0x85, 0xA6, 0x00, + 0x57, 0xE8, 0x58, 0x06, 0x17, 0xBC, 0xB3, 0xFA, + 0xD1, 0x5C, 0x76, 0x44, 0x0F, 0xED, 0x54, 0xCC, + 0x78, 0x93, 0x94, 0xFE, 0xA2, 0x44, 0x52, 0xCC, + 0x6B, 0x05, 0x85, 0xB7, 0xEB, 0x0A, 0x88, 0xBB, + 0xA9, 0x50, 0x0D, 0x98, 0x00, 0xE6, 0x24, 0x1A, + 0xFE, 0xB5, 0x23, 0xB5, 0x5A, 0x96, 0xA5, 0x35, + 0x15, 0x1D, 0x10, 0x49, 0x57, 0x32, 0x06, 0xE5, + 0x9C, 0x7F, 0xEB, 0x07, 0x09, 0x66, 0x82, 0x36, + 0x34, 0xF7, 0x7D, 0x5F, 0x12, 0x91, 0x75, 0x5A, + 0x24, 0x31, 0x19, 0x62, 0x1A, 0xF8, 0x08, 0x4A, + 0xB7, 0xAC, 0x1E, 0x22, 0xA0, 0x56, 0x8C, 0x62, + 0x01, 0x41, 0x7C, 0xBE, 0x36, 0x55, 0xD8, 0xA0, + 0x8D, 0xD5, 0xB5, 0x13, 0x88, 0x4C, 0x98, 0xD5, + 0xA4, 0x93, 0xFD, 0x49, 0x38, 0x2E, 0xA4, 0x18, + 0x60, 0xF1, 0x33, 0xCC, 0xD6, 0x01, 0xE8, 0x85, + 0x96, 0x64, 0x26, 0xA2, 0xB1, 0xF2, 0x3D, 0x42, + 0xD8, 0x2E, 0x24, 0x58, 0x2D, 0x99, 0x72, 0x51, + 0x92, 0xC2, 0x17, 0x77, 0x46, 0x7B, 0x14, 0x57, + 0xB1, 0xDD, 0x42, 0x9A, 0x0C, 0x41, 0xA5, 0xC3, + 0xD7, 0x04, 0xCE, 0xA0, 0x62, 0x78, 0xC5, 0x99, + 0x41, 0xB4, 0x38, 0xC6, 0x27, 0x27, 0x09, 0x78, + 0x09, 0xB4, 0x53, 0x0D, 0xBE, 0x83, 0x7E, 0xA3, + 0x96, 0xB6, 0xD3, 0x10, 0x77, 0xFA, 0xD3, 0x73, + 0x30, 0x53, 0x98, 0x9A, 0x84, 0x42, 0xAA, 0xC4, + 0x25, 0x5C, 0xB1, 0x63, 0xB8, 0xCA, 0x2F, 0x27, + 0x50, 0x1E, 0xA9, 0x67, 0x30, 0x56, 0x95, 0xAB, + 0xD6, 0x59, 0xAA, 0x02, 0xC8, 0x3E, 0xE6, 0x0B, + 0xB5, 0x74, 0x20, 0x3E, 0x99, 0x37, 0xAE, 0x1C, + 0x62, 0x1C, 0x8E, 0xCB, 0x5C, 0xC1, 0xD2, 0x1D, + 0x55, 0x69, 0x60, 0xB5, 0xB9, 0x16, 0x1E, 0xA9, + 0x6F, 0xFF, 0xEB, 0xAC, 0x72, 0xE1, 0xB8, 0xA6, + 0x15, 0x4F, 0xC4, 0xD8, 0x8B, 0x56, 0xC0, 0x47, + 0x41, 0xF0, 0x90, 0xCB, 0xB1, 0x56, 0xA7, 0x37, + 0xC9, 0xE6, 0xA2, 0x2B, 0xA8, 0xAC, 0x70, 0x4B, + 0xC3, 0x04, 0xF8, 0xE1, 0x7E, 0x5E, 0xA8, 0x45, + 0xFD, 0xE5, 0x9F, 0xBF, 0x78, 0x8C, 0xCE, 0x0B, + 0x97, 0xC8, 0x76, 0x1F, 0x89, 0xA2, 0x42, 0xF3, + 0x05, 0x25, 0x83, 0xC6, 0x84, 0x4A, 0x63, 0x20, + 0x31, 0xC9, 0x64, 0xA6, 0xC4, 0xA8, 0x5A, 0x12, + 0x8A, 0x28, 0x61, 0x9B, 0xA1, 0xBB, 0x3D, 0x1B, + 0xEA, 0x4B, 0x49, 0x84, 0x1F, 0xC8, 0x47, 0x61, + 0x4A, 0x06, 0x68, 0x41, 0xF5, 0x2E, 0xD0, 0xEB, + 0x8A, 0xE0, 0xB8, 0xB0, 0x96, 0xE9, 0x2B, 0x81, + 0x95, 0x40, 0x58, 0x15, 0xB2, 0x31, 0x26, 0x6F, + 0x36, 0xB1, 0x8C, 0x1A, 0x53, 0x33, 0x3D, 0xAB, + 0x95, 0xD2, 0xA9, 0xA3, 0x74, 0xB5, 0x47, 0x8A, + 0x4A, 0x41, 0xFB, 0x87, 0x59, 0x95, 0x7C, 0x9A, + 0xB2, 0x2C, 0xAE, 0x54, 0x5A, 0xB5, 0x44, 0xBA, + 0x8D, 0xD0, 0x5B, 0x83, 0xF3, 0xA6, 0x13, 0xA2, + 0x43, 0x7A, 0xDB, 0x07, 0x3A, 0x96, 0x35, 0xCB, + 0x4B, 0xBC, 0x96, 0x5F, 0xB4, 0x54, 0xCF, 0x27, + 0xB2, 0x98, 0xA4, 0x0C, 0xD0, 0xDA, 0x3B, 0x8F, + 0x9C, 0xA9, 0x9D, 0x8C, 0xB4, 0x28, 0x6C, 0x5E, + 0xB4, 0x76, 0x41, 0x67, 0x96, 0x07, 0x0B, 0xA5, + 0x35, 0xAA, 0xA5, 0x8C, 0xDB, 0x45, 0x1C, 0xD6, + 0xDB, 0x5C, 0xBB, 0x0C, 0xA2, 0x0F, 0x0C, 0x71, + 0xDE, 0x97, 0xC3, 0x0D, 0xA9, 0x7E, 0xC7, 0x90, + 0x6D, 0x06, 0xB4, 0xB9, 0x39, 0x39, 0x60, 0x28, + 0xC4, 0x6B, 0xA0, 0xE7, 0xA8, 0x65, 0xBC, 0x83, + 0x08, 0xA3, 0x81, 0x0F, 0x12, 0x12, 0x00, 0x63, + 0x39, 0xF7, 0xBC, 0x16, 0x9B, 0x16, 0x66, 0xFD, + 0xF4, 0x75, 0x91, 0x1B, 0xBC, 0x8A, 0xAA, 0xB4, + 0x17, 0x55, 0xC9, 0xA8, 0xAA, 0xBF, 0xA2, 0x3C, + 0x0E, 0x37, 0xF8, 0x4F, 0xE4, 0x69, 0x99, 0xE0, + 0x30, 0x49, 0x4B, 0x92, 0x98, 0xEF, 0x99, 0x34, + 0xE8, 0xA6, 0x49, 0xC0, 0xA5, 0xCC, 0xE2, 0xB2, + 0x2F, 0x31, 0x80, 0x9A, 0xFE, 0xD2, 0x39, 0x55, + 0xD8, 0x78, 0x81, 0xD9, 0x9F, 0xC1, 0xD3, 0x52, + 0x89, 0x6C, 0xAC, 0x90, 0x55, 0xBE, 0xA0, 0xD0, + 0x16, 0xCC, 0xBA, 0x78, 0x05, 0xA3, 0xA5, 0x0E, + 0x22, 0x16, 0x30, 0x37, 0x9B, 0xD0, 0x11, 0x35, + 0x22, 0x1C, 0xAD, 0x5D, 0x95, 0x17, 0xC8, 0xCC, + 0x42, 0x63, 0x7B, 0x9F, 0xC0, 0x71, 0x8E, 0x9A, + 0x9B, 0xB4, 0x94, 0x5C, 0x72, 0xD8, 0xD1, 0x1D, + 0x3D, 0x65, 0x9D, 0x83, 0xA3, 0xC4, 0x19, 0x50, + 0x9A, 0xF5, 0xB4, 0x70, 0xDD, 0x89, 0xB7, 0xF3, + 0xAC, 0xCF, 0x5F, 0x35, 0xCF, 0xC3, 0x22, 0x11, + 0x5F, 0xD6, 0x6A, 0x5C, 0xD2, 0x87, 0x56, 0x51, + 0x32, 0x6F, 0x9B, 0x31, 0x68, 0x91, 0x3B, 0xE5, + 0xB9, 0xC8, 0x7A, 0xE0, 0xB0, 0x25, 0xEC, 0x7A, + 0x2F, 0x4A, 0x07, 0x27, 0x50, 0x94, 0x6A, 0xC6, + 0x11, 0x70, 0xA7, 0x82, 0x6D, 0x97, 0x04, 0xC5, + 0xA2, 0x3A, 0x1C, 0x0A, 0x23, 0x25, 0x14, 0x6C, + 0x3B, 0xC1, 0x85, 0x88, 0x26, 0xC6, 0xB3, 0x92, + 0x79, 0xC2, 0xDA, 0x74, 0x38, 0xA3, 0x70, 0xED, + 0x8A, 0x0A, 0xA5, 0x16, 0x9E, 0x3B, 0xEC, 0x29, + 0xED, 0x88, 0x47, 0x87, 0x32, 0x75, 0x8D, 0x45, + 0x41, 0x43, 0xE2, 0x27, 0xF8, 0x59, 0x58, 0x83, + 0x29, 0x78, 0x42, 0xE6, 0xAF, 0x13, 0x3B, 0x17, + 0xE4, 0x81, 0x1B, 0x0F, 0x57, 0x13, 0xAC, 0x73, + 0xB7, 0xE3, 0x47, 0x42, 0x3E, 0xB9, 0x28, 0x22, + 0xD2, 0x30, 0x6F, 0xA1, 0x45, 0x00, 0xA7, 0x20, + 0x7A, 0x06, 0x72, 0x67, 0x20, 0x46, 0x54, 0x4A, + 0xCC, 0x4E, 0xA9, 0xC1, 0x6E, 0xD7, 0x42, 0x1A, + 0x06, 0x9E, 0x0D, 0x73, 0x7A, 0x98, 0x62, 0x85, + 0x19, 0xC6, 0xA2, 0x9A, 0x42, 0x4A, 0x86, 0x8B, + 0x46, 0xD9, 0xA0, 0xCC, 0x7C, 0x6C, 0x9D, 0xDD, + 0x8B, 0x8B, 0xCB, 0xF4, 0x22, 0xC8, 0xF4, 0x8A, + 0x73, 0x14, 0x3D, 0x5A, 0xBB, 0x66, 0xBC, 0x55, + 0x49, 0x94, 0x18, 0x43, 0x08, 0x02, 0xBA, 0xC5, + 0x44, 0x46, 0x3C, 0xC7, 0x31, 0x9D, 0x17, 0x99, + 0x8F, 0x29, 0x41, 0x13, 0x65, 0x76, 0x6D, 0x04, + 0xC8, 0x47, 0xF3, 0x12, 0x9D, 0x90, 0x77, 0xB7, + 0xD8, 0x33, 0x9B, 0xFB, 0x96, 0xA6, 0x73, 0x9C, + 0x3F, 0x6B, 0x74, 0xA8, 0xF0, 0x5F, 0x91, 0x38, + 0xAB, 0x2F, 0xE3, 0x7A, 0xCB, 0x57, 0x63, 0x4D, + 0x18, 0x20, 0xB5, 0x01, 0x76, 0xF5, 0xA0, 0xB6, + 0xBC, 0x29, 0x40, 0xF1, 0xD5, 0x93, 0x8F, 0x19, + 0x36, 0xB5, 0xF9, 0x58, 0x28, 0xB9, 0x2E, 0xB7, + 0x29, 0x73, 0xC1, 0x59, 0x0A, 0xEB, 0x7A, 0x55, + 0x2C, 0xEC, 0xA1, 0x0B, 0x00, 0xC3, 0x03, 0xB7, + 0xC7, 0x5D, 0x40, 0x20, 0x71, 0xA7, 0x9E, 0x2C, + 0x81, 0x0A, 0xF7, 0xC7, 0x45, 0xE3, 0x33, 0x67, + 0x12, 0x49, 0x2A, 0x42, 0x04, 0x3F, 0x29, 0x03, + 0xA3, 0x7C, 0x64, 0x34, 0xCE, 0xE2, 0x0B, 0x1D, + 0x15, 0x9B, 0x05, 0x76, 0x99, 0xFF, 0x9C, 0x1D, + 0x3B, 0xD6, 0x80, 0x29, 0x83, 0x9A, 0x08, 0xF4, + 0x3E, 0x6C, 0x1C, 0x81, 0x99, 0x13, 0x53, 0x2F, + 0x91, 0x1D, 0xD3, 0x70, 0xC7, 0x02, 0x14, 0x88, + 0xE1, 0x1C, 0xB5, 0x04, 0xCB, 0x9C, 0x70, 0x57, + 0x0F, 0xFF, 0x35, 0xB4, 0xB4, 0x60, 0x11, 0x91, + 0xDC, 0x1A, 0xD9, 0xE6, 0xAD, 0xC5, 0xFA, 0x96, + 0x18, 0x79, 0x8D, 0x7C, 0xC8, 0x60, 0xC8, 0x7A, + 0x93, 0x9E, 0x4C, 0xCF, 0x85, 0x33, 0x63, 0x22, + 0x68, 0xCF, 0x1A, 0x51, 0xAF, 0xF0, 0xCB, 0x81, + 0x1C, 0x55, 0x45, 0xCB, 0x16, 0x56, 0xE6, 0x52, + 0x69, 0x47, 0x74, 0x30, 0x69, 0x9C, 0xCD, 0xEA, + 0x38, 0x00, 0x63, 0x0B, 0x78, 0xCD, 0x58, 0x10, + 0x33, 0x4C, 0xCF, 0x02, 0xE0, 0x13, 0xF3, 0xB8, + 0x02, 0x44, 0xE7, 0x0A, 0xCD, 0xB0, 0x60, 0xBB, + 0xE7, 0xA5, 0x53, 0xB0, 0x63, 0x45, 0x6B, 0x2E, + 0xA8, 0x07, 0x47, 0x34, 0x13, 0x16, 0x5C, 0xE5, + 0x7D, 0xD5, 0x63, 0x47, 0x3C, 0xFB, 0xC9, 0x06, + 0x18, 0xAD, 0xE1, 0xF0, 0xB8, 0x88, 0xAA, 0x48, + 0xE7, 0x22, 0xBB, 0x27, 0x51, 0x85, 0x8F, 0xE1, + 0x96, 0x87, 0x44, 0x2A, 0x48, 0xE7, 0xCA, 0x0D, + 0x2A, 0x29, 0xCD, 0x51, 0xBF, 0xD8, 0xF7, 0x8C, + 0x17, 0xB9, 0x66, 0x0B, 0xFB, 0x54, 0xA4, 0x70, + 0xB2, 0xAE, 0x9A, 0x95, 0x5C, 0x6A, 0xB8, 0xD6, + 0xE5, 0xCC, 0x92, 0xAC, 0x8E, 0xD3, 0xC1, 0x85, + 0xDA, 0xA8, 0xBC, 0x29, 0xF0, 0x57, 0x8E, 0xBB, + 0x81, 0x2B, 0x97, 0xC9, 0xE5, 0xA8, 0x48, 0xA6, + 0x38, 0x4D, 0xE4, 0xE7, 0x5A, 0x31, 0x47, 0x0B, + 0x53, 0x06, 0x6A, 0x8D, 0x02, 0x7B, 0xA4, 0x4B, + 0x21, 0x74, 0x9C, 0x04, 0x92, 0x46, 0x5F, 0x90, + 0x72, 0xB2, 0x83, 0x76, 0xC4, 0xE2, 0x90, 0xB3, + 0x0C, 0x18, 0x63, 0xF9, 0xE5, 0xB7, 0x99, 0x96, + 0x08, 0x34, 0x22, 0xBD, 0x8C, 0x27, 0x2C, 0x10, + 0xEC, 0xC6, 0xEB, 0x9A, 0x0A, 0x82, 0x25, 0xB3, + 0x1A, 0xA0, 0xA6, 0x6E, 0x35, 0xB9, 0xC0, 0xB9, + 0xA7, 0x95, 0x82, 0xBA, 0x20, 0xA3, 0xC0, 0x4C, + 0xD2, 0x99, 0x14, 0xF0, 0x83, 0xA0, 0x15, 0x82, + 0x88, 0xBA, 0x4D, 0x6E, 0xB6, 0x2D, 0x87, 0x26, + 0x4B, 0x91, 0x2B, 0xCA, 0x39, 0x73, 0x2F, 0xBD, + 0xE5, 0x36, 0xA3, 0x77, 0xAD, 0x02, 0xB8, 0xC8, + 0x35, 0xD4, 0xA2, 0xF4, 0xE7, 0xB1, 0xCE, 0x11, + 0x5D, 0x0C, 0x86, 0x0B, 0xEA, 0xA7, 0x95, 0x5A, + 0x49, 0xAD, 0x68, 0x95, 0x86, 0xA8, 0x9A, 0x2B, + 0x9F, 0x9B, 0x10, 0xD1, 0x59, 0x5D, 0x2F, 0xC0, + 0x65, 0xAD, 0x01, 0x8A, 0x7D, 0x56, 0xC6, 0x14, + 0x47, 0x1F, 0x8E, 0x94, 0x6F, 0xE8, 0xAB, 0x49, + 0xE8, 0x22, 0x65, 0x91, 0x11, 0x9F, 0xCA, 0xDB, + 0x4F, 0x9A, 0x86, 0x16, 0x31, 0x37, 0x87, 0x36, + 0xB6, 0x68, 0x8B, 0x78, 0x2D, 0x58, 0xE9, 0x7E, + 0x45, 0x72, 0x75, 0x3A, 0x96, 0x64, 0xB6, 0xB8, + 0x53, 0x68, 0x12, 0xB2, 0x59, 0x11, 0xAA, 0x76, + 0xA2, 0x42, 0x37, 0x54, 0x33, 0x19, 0x27, 0x38, + 0xEE, 0xE7, 0x62, 0xF6, 0xB8, 0x43, 0x15, 0xBB, + 0x34, 0x36, 0x23, 0x1E, 0x0A, 0x9B, 0x27, 0x7E, + 0xD2, 0x8A, 0xE0, 0x05, 0x07, 0x28, 0x34, 0x64, + 0x57, 0xE1, 0x34, 0x05, 0x06, 0x2D, 0xB2, 0x80, + 0x4B, 0x8D, 0xA6, 0x0B, 0xB5, 0xC7, 0x93, 0xD4, + 0xCC, 0x0E, 0x10, 0x1C, 0xBA, 0x2D, 0x91, 0x82, + 0xFD, 0x71, 0x24, 0xFF, 0x52, 0xBF, 0x4C, 0xA2, + 0x82, 0x92, 0xAC, 0x26, 0xD6, 0x78, 0x08, 0x89, + 0x53, 0x97, 0x1D, 0xBA, 0x0B, 0x6F, 0xEC, 0x2C, + 0x96, 0x59, 0x35, 0x32, 0x91, 0xC7, 0x0C, 0x5B, + 0x92, 0x45, 0xA0, 0xCA, 0x25, 0x33, 0x04, 0xAF, + 0xD3, 0xC9, 0x51, 0x02, 0xBE, 0xA6, 0x68, 0x75, + 0xC6, 0x20, 0x16, 0x80, 0xB4, 0xBD, 0xA3, 0x86, + 0x87, 0xB6, 0x48, 0xC2, 0x8E, 0xB3, 0x74, 0x78, + 0xE3, 0xBC, 0x00, 0xCA, 0x8A, 0x3C, 0xC2, 0x72, + 0x04, 0x64, 0x2B, 0x42, 0xB6, 0x8F, 0xCB, 0xE7, + 0xB2, 0x1A, 0x36, 0x6D, 0x06, 0x68, 0xA5, 0x02, + 0x9A, 0x7D, 0xEE, 0xF9, 0x4C, 0xDD, 0x6A, 0x95, + 0xD7, 0xEA, 0x89, 0x31, 0x67, 0x3B, 0xF7, 0x11, + 0x2D, 0x40, 0x42, 0x10, 0x7B, 0x1B, 0x8B, 0x97, + 0x00, 0xC9, 0x74, 0xF9, 0xC4, 0xE8, 0x3A, 0x8F, + 0xAC, 0xD8, 0x9B, 0xFE, 0x0C, 0xA3, 0xCC, 0x4C, + 0x2F, 0xCE, 0x80, 0xA0, 0x3D, 0x35, 0x76, 0xC2, + 0x22, 0xA7, 0x92, 0xB7, 0x2B, 0x1F, 0x07, 0x0A, + 0xB7, 0xF6, 0xB6, 0xF2, 0xB5, 0xCA, 0x2A, 0xF5, + 0x05, 0x4A, 0xFA, 0x70, 0xA8, 0x96, 0x99, 0x01, + 0x59, 0xB4, 0x5D, 0x10, 0x03, 0xE2, 0xA0, 0x56, + 0x48, 0x67, 0x5E, 0x59, 0x60, 0x16, 0xF1, 0xB7, + 0x1D, 0xD0, 0xF7, 0xBD, 0xA7, 0xE2, 0x09, 0x7F, + 0xC7, 0x3B, 0x3A, 0x14, 0x3D, 0x12, 0xC7, 0x26, + 0x02, 0x0A, 0xC3, 0x49, 0x58, 0xAD, 0x70, 0x62, + 0xB9, 0x2B, 0x9A, 0xBF, 0x3C, 0xA6, 0xBE, 0x5A, + 0xE2, 0x9F, 0x57, 0x13, 0x5E, 0x62, 0x5A, 0x36, + 0x79, 0x71, 0x83, 0x7E, 0x63, 0x63, 0xD1, 0x53, + 0x20, 0x94, 0xE0, 0x22, 0xA2, 0x34, 0x67, 0xCF, + 0x93, 0x2E, 0x1F, 0x89, 0xB5, 0xB0, 0x80, 0x3C, + 0x1E, 0xC9, 0x9B, 0x58, 0x5A, 0x78, 0xB5, 0x86, + 0x50, 0x96, 0x74, 0x6F, 0x32, 0x25, 0x82, 0x14, + 0xEC, 0xB3, 0x80, 0x65, 0xC9, 0x7F, 0x45, 0x5E, + 0x15, 0x5A, 0xCC, 0x2D, 0xD0, 0x05, 0xA9, 0xC7, + 0x6B, 0xED, 0x59, 0xCD, 0xA7, 0x38, 0x37, 0xD3, + 0x03, 0x50, 0x4E, 0x6C, 0x97, 0x6A, 0x60, 0x6A, + 0x2B, 0xE7, 0xBB, 0xEC, 0x59, 0x48, 0xB9, 0x1A, + 0x34, 0x9E, 0x89, 0x36, 0x68, 0x8C, 0xC0, 0x27, + 0x97, 0x54, 0xB7, 0x43, 0xAB, 0xC5, 0x86, 0x66, + 0xB1, 0x9B, 0x6C, 0x32, 0x60, 0x05, 0x1F, 0x19, + 0x20, 0x6B, 0xB9, 0x62, 0xBB, 0x66, 0x33, 0xEB, + 0x00, 0x48, 0xE3, 0x2B, 0xAA, 0xCC, 0x5B, 0x02, + 0x0D, 0x02, 0xC8, 0x6C, 0xA9, 0x77, 0x0A, 0xD4, + 0x69, 0xDB, 0x54, 0xA1, 0x06, 0xAC, 0x73, 0xA3, + 0x5B, 0x80, 0x57, 0x42, 0x2B, 0x3D, 0xB2, 0x02, + 0xC5, 0xA5, 0xB4, 0xE3, 0xD5, 0x35, 0xF0, 0xFC, + 0x99, 0x32, 0x6C, 0x4B, 0x8B, 0x7B, 0x16, 0xF1, + 0xCB, 0x5A, 0xF9, 0x68, 0x03, 0xFA, 0x8C, 0x19, + 0x5F, 0xC0, 0xBC, 0xED, 0xDA, 0xAF, 0x01, 0x2A, + 0x51, 0x72, 0x8B, 0x76, 0x48, 0x90, 0x82, 0x37, + 0x3C, 0x91, 0xE9, 0x2C, 0x87, 0xAC, 0xCA, 0x79, + 0x51, 0x60, 0x78, 0x2E, 0x3B, 0x0D, 0xD6, 0x43, + 0x54, 0x4B, 0xB9, 0x6A, 0xBC, 0x27, 0x08, 0xD4, + 0x9B, 0x75, 0x9C, 0xF0, 0x57, 0xAA, 0x22, 0x3B, + 0xAF, 0xD9, 0x6A, 0x33, 0x0B, 0xAF, 0x39, 0x81, + 0x0F, 0xE8, 0x67, 0x1B, 0x43, 0x43, 0xC2, 0x97, + 0xDA, 0x1E, 0x19, 0x69, 0xC9, 0x96, 0x21, 0x6A, + 0xB5, 0x10, 0x6D, 0xA6, 0x68, 0x94, 0x1B, 0x16, + 0x0D, 0x44, 0x77, 0x01, 0x71, 0x36, 0xCB, 0xCA, + 0x5B, 0x5A, 0x8D, 0x44, 0xC4, 0xA8, 0xB1, 0xCF, + 0x3E, 0xF7, 0x97, 0x85, 0xE5, 0xAA, 0x25, 0xC3, + 0xA1, 0xAD, 0x6C, 0x24, 0xFD, 0x14, 0x0F, 0x79, + 0x20, 0x7D, 0xE5, 0xA4, 0x99, 0xF8, 0xA1, 0x53, + 0x4F, 0xFA, 0x80, 0x4A, 0xA7, 0xB3, 0x88, 0x9C, + 0xBE, 0x25, 0xC0, 0x41, 0x47, 0x04, 0xAA, 0x57, + 0x89, 0x7F, 0x17, 0x86, 0x23, 0x64, 0xEC, 0xA5, + 0x62, 0x58, 0x00, 0x72, 0x48, 0x81, 0x39, 0x12, + 0xB8, 0x36, 0x49, 0x7F, 0x03, 0x59, 0xC2, 0xF7, + 0x23, 0x8A, 0x05, 0xD3, 0x05, 0xA0, 0xEA, 0x15, + 0x2E, 0x72, 0xB4, 0x44, 0x17, 0xA8, 0x68, 0x13, + 0x4E, 0x91, 0xB3, 0xCA, 0x79, 0x31, 0x23, 0x2F, + 0xD4, 0xC2, 0x5F, 0x8C, 0x2A, 0x49, 0x2A, 0x33, + 0x9C, 0xDC, 0x0A, 0x13, 0x89, 0x67, 0x21, 0x14, + 0x51, 0xF2, 0x56, 0x26, 0x78, 0xFA, 0x14, 0x08, + 0x0A, 0x34, 0x43, 0x6C, 0x42, 0xB0, 0x78, 0x65, + 0xAC, 0x03, 0x6A, 0x81, 0xE9, 0x7A, 0x77, 0x87, + 0xA9, 0x38, 0x02, 0x5C, 0xAF, 0x81, 0x34, 0x50, + 0x36, 0x8B, 0xED, 0x0C, 0x94, 0xB1, 0x85, 0x76, + 0x04, 0x52, 0x64, 0x05, 0xD2, 0x7A, 0x1C, 0x1A, + 0xBC, 0x81, 0xB5, 0xB6, 0xEC, 0x13, 0xC7, 0x19, + 0x30, 0xA9, 0x7D, 0x92, 0x32, 0xCF, 0x70, 0x21, + 0xEF, 0x87, 0xA4, 0xD1, 0x55, 0x32, 0x8E, 0x62, + 0xB5, 0x83, 0xA8, 0x3B, 0x4A, 0xF2, 0x1F, 0x9F, + 0x57, 0x50, 0xF8, 0x57, 0x51, 0x50, 0x42, 0x4F, + 0x63, 0xB8, 0x99, 0xD7, 0x1C, 0xAD, 0x26, 0x7C, + 0x09, 0xE4, 0x46, 0x71, 0x46, 0xE1, 0x6E, 0x9B, + 0x6C, 0x65, 0x3F, 0x00, 0x8C, 0x31, 0x13, 0x75, + 0xE2, 0xE0, 0x06, 0xD4, 0x07, 0x6A, 0x54, 0x6B, + 0x82, 0xF5, 0x31, 0x42, 0x22, 0xF7, 0xC6, 0x54, + 0x31, 0x7E, 0x79, 0xEC, 0x60, 0x35, 0xB7, 0x3F, + 0xAF, 0x49, 0x17, 0x57, 0xE6, 0x1C, 0x82, 0x83, + 0x26, 0xD5, 0x30, 0x44, 0x54, 0x1C, 0x4D, 0x45, + 0x37, 0xAB, 0xD3, 0xEA, 0x1E, 0x67, 0x99, 0x8C, + 0x33, 0x82, 0x97, 0x4C, 0xA7, 0x8A, 0xE1, 0xB1, + 0x96, 0x0E, 0x4A, 0x92, 0x26, 0xB0, 0x21, 0x9A, + 0xB0, 0x70, 0xF0, 0xD7, 0xAA, 0x66, 0xD7, 0x6F, + 0x93, 0x16, 0xAD, 0xB8, 0x0C, 0x54, 0xD6, 0x49, + 0x97, 0x71, 0xB4, 0x71, 0xE8, 0x16, 0x8D, 0x47, + 0xBC, 0xAA, 0x08, 0x32, 0x4A, 0xB6, 0xBA, 0x92, + 0xC3, 0xA7, 0x02, 0x75, 0xF2, 0x4F, 0xA4, 0xDC, + 0x10, 0xE2, 0x51, 0x63, 0x3F, 0xB9, 0x8D, 0x16, + 0x2B, 0xB5, 0x53, 0x72, 0x02, 0xC6, 0xA5, 0x53, + 0xCE, 0x78, 0x41, 0xC4, 0xD4, 0x0B, 0x87, 0x3B, + 0x85, 0xCA, 0x03, 0xA0, 0xA1, 0xE1, 0xCF, 0xAD, + 0xE6, 0xBA, 0x51, 0x80, 0xAB, 0x13, 0x23, 0xCC, + 0xBA, 0x9A, 0x3E, 0x9C, 0x53, 0xD3, 0x75, 0x75, + 0xAB, 0x1F, 0xD9, 0xE7, 0x31, 0x6C, 0x6F, 0xEE, + 0xCB, 0x0A, 0x14, 0xDF, 0x6F, 0x2D, 0xA5, 0x6C, + 0x2F, 0x56, 0xF5, 0x5A, 0x89, 0x63, 0x5C, 0xFC, + 0xFD, 0xA4, 0x79, 0x27, 0xAF, 0x1F, 0x0A, 0x47, + 0xB2, 0xD4, 0xE4, 0xE6, 0x16, 0x34, 0xB1, 0xB5, + 0x1D, 0x37, 0xA3, 0xA3, 0x07, 0xA9, 0x72, 0x42, + 0x0D, 0xE1, 0xB7, 0xA4, 0x81, 0xB8, 0x3E, 0x58, + 0x3B, 0x6A, 0xF1, 0x6F, 0x63, 0xCB, 0x00, 0xC6 }; static const byte c_1024[KYBER1024_CIPHER_TEXT_SIZE] = { - 0x61, 0xFF, 0x1A, 0x8B, 0x61, 0x17, 0xEF, 0x11, - 0x83, 0x28, 0xE8, 0x8B, 0x32, 0x27, 0x99, 0x30, - 0x14, 0xDC, 0xD0, 0x75, 0xB8, 0xA1, 0xA7, 0xF9, - 0x80, 0x18, 0x93, 0xEE, 0xE6, 0x40, 0x5B, 0xB9, - 0x60, 0xB6, 0xB7, 0xF6, 0xA1, 0xA2, 0x75, 0x18, - 0xA3, 0x40, 0x91, 0x39, 0xA4, 0x8B, 0x85, 0x96, - 0x81, 0xCC, 0x75, 0x8F, 0x2B, 0xCC, 0x3E, 0xEF, - 0xB0, 0x43, 0x94, 0xA3, 0x75, 0xA5, 0xCD, 0x71, - 0x31, 0x64, 0x90, 0x93, 0x8A, 0xBF, 0xD1, 0x94, - 0xB2, 0x0B, 0xCD, 0x31, 0xB3, 0x98, 0x02, 0x61, - 0xC9, 0xED, 0x69, 0xBF, 0x9B, 0x1D, 0x7D, 0x76, - 0x59, 0xA8, 0x04, 0x0D, 0xB1, 0xE2, 0x5D, 0x2B, - 0xA6, 0xF7, 0x03, 0x48, 0x66, 0x24, 0xB7, 0x3C, - 0xAC, 0xDC, 0xA2, 0x7D, 0xB0, 0xF7, 0xE2, 0x40, - 0x8C, 0x94, 0x48, 0xE3, 0x88, 0x73, 0x28, 0x0F, - 0x5E, 0x99, 0x50, 0xD7, 0xCC, 0xE2, 0x52, 0xA6, - 0x47, 0x58, 0x0C, 0x19, 0x90, 0x4F, 0xAD, 0x62, - 0xAE, 0xC3, 0x00, 0xBC, 0x8E, 0x38, 0xF0, 0x59, - 0x48, 0xB6, 0x3B, 0xAD, 0x5C, 0xE7, 0xC9, 0x0E, - 0x40, 0xC4, 0xBC, 0x65, 0x11, 0x77, 0x61, 0xF5, - 0xF8, 0x86, 0x8F, 0x80, 0x25, 0xD6, 0xCE, 0xB2, - 0xC5, 0xDF, 0x60, 0xDE, 0x38, 0xC3, 0x23, 0x29, - 0x22, 0x08, 0x7E, 0xFC, 0xF2, 0xCD, 0x95, 0xDE, - 0x5E, 0x87, 0xB6, 0x88, 0x8B, 0x88, 0xC8, 0x6C, - 0xC7, 0x83, 0x15, 0x58, 0x5B, 0x2C, 0xC6, 0x88, - 0xA7, 0x1B, 0x47, 0x7B, 0xFA, 0x38, 0x8D, 0xC2, - 0x33, 0x4D, 0xFA, 0x8A, 0xA9, 0x55, 0x03, 0xD5, - 0x39, 0x7E, 0x2A, 0xE0, 0x35, 0x29, 0x03, 0xEA, - 0x6A, 0x0A, 0xE8, 0xB6, 0x49, 0xA9, 0x14, 0xB3, - 0x52, 0x5F, 0xE5, 0x8F, 0x56, 0x4B, 0xF1, 0x9C, - 0xC0, 0x9F, 0x54, 0xE1, 0x05, 0xD1, 0x9B, 0xD8, - 0x10, 0x54, 0xE5, 0x70, 0x01, 0xF7, 0x0B, 0xBD, - 0xD7, 0x71, 0x94, 0x49, 0x68, 0x7E, 0x9A, 0x53, - 0xB1, 0x6C, 0xA5, 0x36, 0x6A, 0x19, 0x10, 0x5A, - 0x8B, 0xA0, 0x85, 0x89, 0xAD, 0x08, 0xDF, 0x13, - 0x00, 0xEF, 0x4F, 0x92, 0x3B, 0xA9, 0xE7, 0x62, - 0xA8, 0x2F, 0xB0, 0x9B, 0x76, 0xE1, 0x25, 0xF2, - 0xF2, 0x74, 0xD6, 0x17, 0xBF, 0x30, 0xEA, 0xB4, - 0x65, 0xEC, 0xF2, 0x4D, 0x37, 0x07, 0xAD, 0x30, - 0x0D, 0x9A, 0xFC, 0x1C, 0xF1, 0xDC, 0x40, 0xEE, - 0x7D, 0x4E, 0xEA, 0x6D, 0x15, 0x0E, 0x6F, 0x0A, - 0x31, 0xDB, 0x9F, 0x8F, 0x92, 0xBA, 0x8E, 0xEE, - 0xB3, 0x5D, 0x74, 0x45, 0x58, 0x9B, 0x04, 0x6B, - 0xA7, 0x9E, 0xFE, 0x23, 0x11, 0x06, 0xCF, 0x0A, - 0x75, 0x71, 0x2A, 0xB3, 0x92, 0x72, 0x4C, 0x53, - 0xEF, 0xF9, 0xF5, 0x73, 0x3B, 0xEE, 0x0D, 0x6A, - 0x44, 0xD0, 0xB6, 0xF5, 0x15, 0xD0, 0xF5, 0xE4, - 0x0B, 0x1B, 0x1E, 0x17, 0xE6, 0x7A, 0xED, 0x3C, - 0x81, 0xD0, 0x0A, 0xC4, 0x68, 0xA2, 0x8F, 0x84, - 0x53, 0xD4, 0xB0, 0xDA, 0x80, 0x9E, 0x57, 0xD8, - 0x23, 0xF2, 0x8D, 0x61, 0xED, 0x0B, 0x59, 0xA0, - 0x8C, 0x62, 0x29, 0x72, 0xD9, 0x91, 0x79, 0xDA, - 0x86, 0x36, 0xC4, 0x5F, 0x1C, 0xE8, 0xF6, 0x25, - 0x2A, 0xC8, 0x6D, 0x91, 0xB5, 0xE9, 0x29, 0x97, - 0x01, 0x4E, 0x3F, 0x50, 0x89, 0xE6, 0x8B, 0xC5, - 0x2C, 0xED, 0x5D, 0xAE, 0x6D, 0x5B, 0x17, 0x5F, - 0xE2, 0xD6, 0x19, 0x28, 0x46, 0x50, 0x59, 0x72, - 0x4C, 0x83, 0x59, 0x02, 0xD7, 0x61, 0x2C, 0xDB, - 0x69, 0xCD, 0xAC, 0x66, 0x4F, 0xC1, 0xC9, 0xCB, - 0x11, 0x20, 0x3A, 0x8C, 0x7B, 0x71, 0x48, 0x6E, - 0x97, 0xB7, 0xD1, 0xBC, 0x6A, 0x98, 0xF4, 0x93, - 0xDC, 0xBE, 0xC8, 0xE6, 0x29, 0x55, 0x8E, 0xD3, - 0x61, 0x09, 0x12, 0x93, 0xD1, 0xB5, 0xD2, 0x09, - 0x6C, 0xEB, 0x9F, 0xC7, 0xAF, 0xEE, 0x71, 0xDB, - 0x7C, 0xCF, 0xE4, 0x82, 0xB6, 0x8A, 0x19, 0x64, - 0x29, 0xFF, 0x04, 0xD1, 0x59, 0x03, 0xE7, 0xA7, - 0x5C, 0x7B, 0xB5, 0xF6, 0x22, 0xC3, 0x69, 0x71, - 0x69, 0x45, 0x59, 0xFF, 0x07, 0xDF, 0xAA, 0x79, - 0xE4, 0x1C, 0x36, 0x2B, 0x22, 0x64, 0x3C, 0xD3, - 0x9B, 0xD9, 0xE1, 0xD3, 0xD6, 0xC2, 0xA3, 0x06, - 0xB5, 0xF1, 0x10, 0x2C, 0x26, 0x6E, 0xEE, 0x67, - 0xDC, 0xDA, 0xCF, 0x36, 0x69, 0x7A, 0x83, 0x6F, - 0x20, 0x38, 0x38, 0xEC, 0x11, 0x03, 0x08, 0xC9, - 0x0A, 0x3D, 0x01, 0x57, 0x0C, 0xB3, 0x66, 0x8A, - 0xBA, 0x50, 0x34, 0x0E, 0x40, 0xF5, 0x4C, 0xFA, - 0x6A, 0x9E, 0x88, 0x62, 0x53, 0x2F, 0x5F, 0x19, - 0x84, 0x8A, 0xA1, 0x1F, 0xD3, 0x4F, 0xC8, 0x6B, - 0x7F, 0xCB, 0x16, 0x37, 0xF4, 0xE5, 0xA1, 0xD0, - 0x3A, 0xFC, 0xE4, 0x41, 0x24, 0xE4, 0xE4, 0x60, - 0xB8, 0x4C, 0x63, 0x49, 0x6A, 0xDE, 0xD5, 0x58, - 0x01, 0xDF, 0x25, 0x17, 0xA9, 0x0A, 0xB0, 0x61, - 0xC8, 0xE6, 0x3A, 0xB6, 0xB1, 0x4B, 0xE1, 0x69, - 0x4D, 0x6F, 0x38, 0x9D, 0xD8, 0x5F, 0x56, 0x39, - 0xC5, 0x78, 0x3A, 0xFC, 0xA0, 0x14, 0x6E, 0x6A, - 0x1E, 0xB0, 0xC4, 0x05, 0x63, 0xC1, 0x37, 0x01, - 0x0D, 0xB6, 0x0B, 0xBC, 0x3D, 0x63, 0x74, 0xD6, - 0xF3, 0xA8, 0x92, 0xDE, 0xBC, 0x06, 0x47, 0x01, - 0xC6, 0x4B, 0xEC, 0xCB, 0x8E, 0x2C, 0x33, 0xB7, - 0x40, 0xCC, 0x7E, 0xD4, 0x9D, 0x10, 0x8A, 0x8C, - 0x46, 0x56, 0x81, 0x8D, 0xF5, 0xF7, 0xD9, 0x1E, - 0xAA, 0xA4, 0x46, 0xAC, 0x6C, 0xCD, 0xE3, 0x0C, - 0x6D, 0x3D, 0x1B, 0xF6, 0x6E, 0x4E, 0x3B, 0x7B, - 0x6B, 0x81, 0xE3, 0xCB, 0x17, 0x22, 0x7F, 0x80, - 0xDB, 0x00, 0x96, 0xE6, 0xBE, 0x7D, 0x85, 0x9C, - 0x09, 0x71, 0x37, 0x49, 0xFC, 0xA2, 0x15, 0x30, - 0xFE, 0x1A, 0x71, 0x6E, 0xBE, 0x32, 0x55, 0x04, - 0x31, 0x9B, 0xD0, 0xEA, 0x2A, 0x7D, 0x77, 0x13, - 0x60, 0x7C, 0xB6, 0x79, 0xB0, 0xA0, 0xB2, 0x26, - 0x8D, 0x49, 0x3B, 0x67, 0xC0, 0x48, 0x18, 0x72, - 0x17, 0x7F, 0xFD, 0x25, 0x93, 0xF3, 0xAC, 0xF6, - 0x91, 0xCE, 0xE9, 0x9A, 0x36, 0xEC, 0xA7, 0x22, - 0x57, 0x9E, 0xFA, 0xA5, 0x9A, 0xCC, 0x59, 0xEF, - 0x8C, 0xEA, 0x91, 0x08, 0xE6, 0x20, 0xB0, 0x60, - 0x56, 0xC1, 0x9D, 0x3C, 0x1E, 0xB9, 0x1E, 0x86, - 0x34, 0xDE, 0x49, 0x57, 0x70, 0x6D, 0xFA, 0x8F, - 0x9D, 0x0A, 0x9E, 0x0C, 0xD4, 0x09, 0x4F, 0x6B, - 0x95, 0xA8, 0x3F, 0x11, 0x8A, 0x51, 0x3E, 0xBF, - 0xE5, 0xE9, 0x9A, 0xEB, 0x88, 0xA2, 0x68, 0xE0, - 0x09, 0x7F, 0xCC, 0x3C, 0x7A, 0xE2, 0x50, 0xB6, - 0x81, 0x93, 0x3B, 0xBC, 0x2A, 0x8F, 0x53, 0x81, - 0xF9, 0x4D, 0x15, 0x64, 0x34, 0xA8, 0x7E, 0x9E, - 0xE3, 0x7E, 0x78, 0xC2, 0x7A, 0x0C, 0xDA, 0xEE, - 0xA9, 0x81, 0x4B, 0xCB, 0x43, 0xDF, 0x53, 0x8D, - 0xBE, 0x62, 0x8C, 0x80, 0x2C, 0x1A, 0x94, 0xE0, - 0xCD, 0xDC, 0xD0, 0xCD, 0x5A, 0x0F, 0x82, 0x20, - 0xDA, 0x97, 0xC2, 0x38, 0x39, 0x36, 0xA3, 0x39, - 0x19, 0xFC, 0xDC, 0x11, 0xD7, 0x0E, 0xD4, 0x43, - 0x7D, 0xD2, 0xD7, 0xC7, 0x3C, 0xD0, 0xC3, 0xBB, - 0x90, 0xCA, 0x70, 0x70, 0x22, 0x8F, 0xE8, 0xD6, - 0x4A, 0x1C, 0x9D, 0x56, 0xE6, 0xB3, 0x48, 0x30, - 0xEF, 0x30, 0x0B, 0x5A, 0xA6, 0xEC, 0x6C, 0x78, - 0xA5, 0x42, 0x5A, 0xE6, 0xF7, 0xAD, 0x0E, 0xFD, - 0xD5, 0x27, 0xCF, 0x0A, 0xF8, 0xE0, 0x9B, 0x56, - 0xE4, 0x95, 0xBE, 0x66, 0xF6, 0x65, 0xC6, 0x4B, - 0x0A, 0x42, 0xC5, 0xC4, 0xB2, 0x46, 0x80, 0x48, - 0x0A, 0xD2, 0xE5, 0xC1, 0x1D, 0x99, 0x1F, 0x7E, - 0x3D, 0xA7, 0x59, 0xAE, 0xC8, 0x02, 0xF1, 0x76, - 0xDD, 0xF1, 0x1E, 0xF7, 0x14, 0x69, 0xDC, 0x13, - 0xB3, 0xA3, 0xE0, 0x36, 0x99, 0x51, 0x98, 0x58, - 0xAC, 0x6F, 0xC6, 0x5C, 0x27, 0xFA, 0x4C, 0xEF, - 0xDA, 0x09, 0xC8, 0x2E, 0x8F, 0x95, 0x8E, 0x01, - 0x8D, 0xD5, 0x25, 0x5C, 0xA2, 0xF6, 0x28, 0xE0, - 0xDA, 0x73, 0x91, 0xAB, 0xED, 0x6D, 0x37, 0x70, - 0x55, 0x28, 0xAB, 0x22, 0xEC, 0x71, 0xDC, 0x88, - 0x36, 0xD7, 0xFD, 0x46, 0x45, 0x94, 0x47, 0x03, - 0xA5, 0x1C, 0xC7, 0x4D, 0x29, 0x70, 0x92, 0xFC, - 0xE1, 0x39, 0xE8, 0x97, 0x6F, 0x8B, 0xE9, 0xC5, - 0xF8, 0x63, 0x90, 0xB7, 0x4D, 0x40, 0x1A, 0x8C, - 0x81, 0x53, 0x11, 0x22, 0x01, 0x13, 0x3D, 0x0C, - 0x51, 0x7C, 0x6C, 0xE7, 0xA3, 0x8C, 0x08, 0x60, - 0x69, 0xCE, 0x39, 0x71, 0xF1, 0xAD, 0x28, 0xF3, - 0xE5, 0xD0, 0x1B, 0x56, 0xA4, 0x80, 0xB4, 0x17, - 0xA0, 0x16, 0xAE, 0xA4, 0x63, 0x94, 0xCD, 0xF7, - 0x64, 0x81, 0x29, 0x18, 0xD8, 0xAB, 0x05, 0x01, - 0xD5, 0xD1, 0x8C, 0xE1, 0x3F, 0xBD, 0x3D, 0xE9, - 0x1F, 0x50, 0x42, 0x15, 0xCC, 0xD0, 0xE2, 0xD1, - 0x7B, 0x7E, 0x96, 0x3C, 0x86, 0x7F, 0x6F, 0x13, - 0x21, 0x14, 0xE3, 0x64, 0x59, 0xFC, 0x5A, 0xF7, - 0xCE, 0xE9, 0x9B, 0x78, 0x96, 0x73, 0xE5, 0x24, - 0x13, 0x1F, 0x7D, 0xC7, 0x13, 0x60, 0x95, 0x1A, - 0x99, 0x7A, 0x9C, 0xE5, 0x0D, 0xD5, 0xFA, 0xFC, - 0x45, 0x21, 0x14, 0x44, 0x41, 0xC0, 0x6B, 0xB4, - 0x1C, 0x79, 0xE8, 0xED, 0x53, 0x28, 0x5D, 0x13, - 0x7D, 0x54, 0xF3, 0x25, 0xA6, 0xC2, 0xF2, 0xEF, - 0x74, 0xE3, 0x4C, 0x0F, 0x87, 0x7A, 0x61, 0x4C, - 0xE4, 0x5D, 0xC0, 0xAE, 0xDD, 0xF9, 0x5A, 0x0E, - 0x2E, 0x4E, 0xDA, 0xE2, 0x9A, 0xF4, 0x11, 0xC9, - 0xCC, 0x2A, 0xF9, 0x5C, 0x9E, 0xA9, 0xA9, 0x4A, - 0x79, 0x61, 0xC8, 0x24, 0x6E, 0x65, 0x4F, 0xA2, - 0x8F, 0x3D, 0x56, 0x8D, 0x5F, 0xEE, 0x93, 0x35, - 0x2C, 0x2E, 0x0D, 0x60, 0xCC, 0xAF, 0x5B, 0x00, - 0x09, 0x0A, 0xB6, 0xE7, 0xA5, 0x3A, 0xA0, 0x6A, - 0x8C, 0xD3, 0x73, 0x7E, 0xBF, 0x1B, 0x65, 0xD6, - 0x25, 0xBC, 0xF2, 0x20, 0xF7, 0x4D, 0xE2, 0x2D, - 0x98, 0x71, 0xEF, 0xC3, 0x76, 0xBF, 0x08, 0x2D, - 0x4B, 0x87, 0x2A, 0x30, 0x3C, 0x32, 0x42, 0x7A, - 0x0C, 0x98, 0xBE, 0xCF, 0x58, 0x95, 0x9C, 0x9F, - 0x9E, 0x2E, 0x88, 0x7D, 0xBC, 0x42, 0xAA, 0xB1, - 0x65, 0x6A, 0xD1, 0x56, 0x37, 0xA6, 0xA8, 0xF4, - 0xBF, 0x96, 0x34, 0x09, 0x54, 0x91, 0xF8, 0xC9, - 0x92, 0x42, 0x91, 0x38, 0x91, 0x43, 0x7E, 0x6C, - 0x5B, 0x50, 0xA2, 0x13, 0xDD, 0xE8, 0x0D, 0x21, - 0x96, 0xBE, 0x12, 0xC3, 0x93, 0x7F, 0xE3, 0x23, - 0x9B, 0xF6, 0x75, 0x9A, 0xBB, 0x8C, 0x1C, 0x94, - 0x66, 0xF4, 0x2F, 0xBD, 0x53, 0x89, 0x4A, 0xE5, - 0x2F, 0xB5, 0x33, 0x32, 0x14, 0x29, 0xFC, 0xE4, - 0xFE, 0xC1, 0xDB, 0x35, 0x2C, 0x49, 0x58, 0x3A, - 0x7D, 0x81, 0x7E, 0xAF, 0x62, 0x00, 0x08, 0x88, - 0xEC, 0xB0, 0xEB, 0xFF, 0xEF, 0x69, 0xFF, 0x8E, - 0x59, 0x0C, 0xFA, 0x25, 0xBE, 0xAB, 0x21, 0x60, - 0x5B, 0x63, 0x5A, 0xBC, 0x2C, 0xA2, 0x36, 0x80, - 0x78, 0x97, 0x25, 0xCF, 0x70, 0x0F, 0x55, 0x3C, - 0x88, 0x35, 0x2F, 0x31, 0x61, 0x61, 0x54, 0x87, - 0x3D, 0x18, 0xB6, 0xC6, 0xEB, 0x51, 0x9F, 0xC6, - 0x39, 0xB0, 0x70, 0xFD, 0x67, 0xF8, 0x6A, 0xAB, - 0x62, 0x34, 0x9D, 0xBF, 0xFA, 0x89, 0xF9, 0x30, - 0x51, 0xA7, 0xC7, 0xB7, 0xBD, 0x16, 0x1F, 0xCD, - 0x73, 0x67, 0x2C, 0xEE, 0xF5, 0x9A, 0x9B, 0xB7, - 0xF5, 0x71, 0xEA, 0xBE, 0x25, 0x70, 0xC5, 0xBF, - 0x31, 0xEC, 0xAA, 0x1F, 0x9C, 0xA7, 0xA9, 0xC6, - 0xD3, 0x1E, 0xA5, 0xFB, 0x7C, 0x97, 0x9C, 0xDD, - 0x26, 0x13, 0x89, 0x7E, 0x7D, 0x15, 0x03, 0xFB, - 0x0C, 0x19, 0xAD, 0xDC, 0xFB, 0x3A, 0x63, 0xE2, - 0x18, 0x5F, 0xC4, 0x10, 0x18, 0x38, 0xDA, 0x66, - 0xCC, 0xE2, 0xD3, 0xD9, 0xFF, 0xB4, 0x77, 0x46, - 0xC2, 0x00, 0x3E, 0xDD, 0x86, 0xC2, 0xF8, 0xC3 + 0x0C, 0x68, 0x1B, 0x4A, 0xA8, 0x1F, 0x26, 0xAD, + 0xFB, 0x64, 0x5E, 0xC2, 0x4B, 0x37, 0x52, 0xF6, + 0xB3, 0x2C, 0x68, 0x64, 0x5A, 0xA5, 0xE7, 0xA9, + 0x99, 0xB6, 0x20, 0x36, 0xA5, 0x3D, 0xC5, 0xCB, + 0x06, 0x0A, 0x47, 0x3C, 0x08, 0xE5, 0xDA, 0x5C, + 0x0F, 0x5A, 0xF0, 0xE5, 0x17, 0x0C, 0x65, 0x97, + 0xE5, 0x0E, 0xC0, 0x80, 0x60, 0xF9, 0x9B, 0x0C, + 0x00, 0xEE, 0x9B, 0xDD, 0xAD, 0x7E, 0x7D, 0x25, + 0xA2, 0x2B, 0x22, 0x6F, 0x90, 0x14, 0x9B, 0x4C, + 0xE8, 0x87, 0xC7, 0x2F, 0xB6, 0x0A, 0xFF, 0x21, + 0x44, 0xEA, 0x2A, 0x72, 0x38, 0x3B, 0x31, 0x18, + 0xF9, 0x22, 0xD0, 0x32, 0xA1, 0x6F, 0x55, 0x42, + 0x89, 0x90, 0x2A, 0x14, 0xCF, 0x77, 0x55, 0x51, + 0x2B, 0xB1, 0x18, 0x6B, 0xAF, 0xAF, 0xFE, 0x79, + 0x4D, 0x2B, 0x6C, 0xDE, 0x90, 0x10, 0x9E, 0x65, + 0x82, 0xD3, 0x9C, 0xE0, 0xC9, 0x61, 0x97, 0x48, + 0x4B, 0x3F, 0xA0, 0x7F, 0xC9, 0x1D, 0x39, 0x4F, + 0xC8, 0xD8, 0x8E, 0x7F, 0xC4, 0xBE, 0x00, 0x2E, + 0x2D, 0xB5, 0x6F, 0x0C, 0x4D, 0x9D, 0x3F, 0xBD, + 0xA2, 0x74, 0x53, 0x6A, 0x0B, 0x86, 0xAB, 0xC6, + 0xE3, 0x9B, 0xDA, 0x52, 0x93, 0x1A, 0xEB, 0xB8, + 0xF1, 0x08, 0x4C, 0x5C, 0x1F, 0x7C, 0xB3, 0x17, + 0x77, 0x88, 0xB7, 0xF3, 0x31, 0xB7, 0x07, 0x43, + 0x61, 0x16, 0x34, 0x91, 0xD4, 0x28, 0xE7, 0x8B, + 0xCB, 0xB5, 0x7B, 0x63, 0x08, 0x41, 0xAA, 0x98, + 0x73, 0x33, 0x37, 0x7C, 0xF0, 0x95, 0x69, 0xCF, + 0xD1, 0x4C, 0xC2, 0xA1, 0x1C, 0x50, 0x1B, 0xDF, + 0x82, 0xC9, 0x3D, 0xE0, 0x5B, 0xEA, 0x20, 0x06, + 0x0D, 0xE8, 0x9C, 0x68, 0x6B, 0x82, 0x45, 0x71, + 0xCE, 0xF9, 0x4A, 0xB3, 0xFD, 0xAF, 0xA8, 0x51, + 0x26, 0x19, 0x81, 0x36, 0x69, 0xD4, 0xF5, 0x36, + 0x37, 0xFE, 0xFA, 0x4D, 0x02, 0x8C, 0xB2, 0x33, + 0xE5, 0x69, 0x30, 0xE2, 0x23, 0x5F, 0x7E, 0x60, + 0x34, 0xCA, 0x94, 0xB1, 0x43, 0xB7, 0x7A, 0xD4, + 0xA6, 0x87, 0x56, 0xE8, 0xA9, 0x18, 0x4D, 0xBA, + 0x61, 0xA8, 0x9F, 0x91, 0xED, 0xFB, 0x51, 0xA3, + 0x92, 0x11, 0x40, 0x24, 0x73, 0xA5, 0xF8, 0x91, + 0x45, 0x73, 0x6B, 0x2B, 0xF8, 0x56, 0x9C, 0x70, + 0x5B, 0x0C, 0xDB, 0x89, 0x80, 0xA4, 0x47, 0xE4, + 0xE1, 0xEA, 0xAD, 0x3E, 0x7E, 0x05, 0x78, 0xF5, + 0xF8, 0x6B, 0x8D, 0x03, 0xC9, 0xDA, 0xFE, 0x87, + 0x5E, 0x33, 0x9B, 0x44, 0x23, 0x84, 0x56, 0x16, + 0x79, 0x9E, 0xDC, 0xE0, 0x5F, 0x31, 0xB9, 0x26, + 0x64, 0xC5, 0xA5, 0x92, 0x53, 0xA6, 0x0E, 0x9D, + 0x89, 0x54, 0x8A, 0x30, 0x0C, 0x1A, 0xDB, 0x6D, + 0x19, 0x0A, 0x77, 0x5C, 0x5E, 0xE6, 0xE8, 0xA8, + 0x9B, 0x6E, 0x77, 0x9B, 0x03, 0x4C, 0x34, 0x00, + 0xA6, 0x25, 0xF4, 0xBB, 0xED, 0xBF, 0x91, 0x9C, + 0x45, 0xB2, 0xBC, 0xD1, 0x4C, 0x66, 0x92, 0x48, + 0xFC, 0x43, 0xC3, 0xEF, 0x47, 0xE1, 0x00, 0x75, + 0x89, 0x42, 0xE7, 0x5E, 0x8E, 0xD6, 0x07, 0x5A, + 0x96, 0xD7, 0x0D, 0x4E, 0xBD, 0x2B, 0x61, 0x35, + 0x82, 0x24, 0xDD, 0xA1, 0xEC, 0x4C, 0x19, 0xC2, + 0xA9, 0x28, 0x98, 0x17, 0x6F, 0xEB, 0x3C, 0x02, + 0xED, 0xCB, 0x99, 0x08, 0xBA, 0xE4, 0x9B, 0xD9, + 0x4A, 0xF0, 0x28, 0xED, 0xF8, 0xCF, 0xC2, 0xE5, + 0xF2, 0xE0, 0xBD, 0x37, 0x50, 0x06, 0x98, 0x6A, + 0xD4, 0x9E, 0x71, 0x75, 0x48, 0xE7, 0x46, 0xFE, + 0xF4, 0x9C, 0x86, 0x8B, 0xCE, 0xA2, 0x79, 0x0A, + 0xA9, 0x7E, 0x04, 0x06, 0x1B, 0x75, 0x60, 0x5C, + 0xB3, 0x9E, 0xFD, 0x46, 0x3D, 0x7B, 0x3D, 0x68, + 0xBA, 0x57, 0x44, 0x34, 0xFF, 0x7B, 0xE8, 0xE2, + 0xB8, 0x4B, 0xFC, 0x47, 0xE6, 0x7E, 0x9C, 0xD1, + 0x5F, 0x3E, 0xD4, 0x50, 0xC6, 0x1A, 0xFB, 0xA7, + 0x9A, 0x20, 0xB0, 0xB6, 0xF2, 0x87, 0x77, 0x7C, + 0x72, 0xF4, 0xAD, 0x24, 0x81, 0x74, 0xF1, 0x95, + 0x94, 0x77, 0xAA, 0x7A, 0x7C, 0x97, 0xF1, 0x22, + 0xC5, 0x04, 0x47, 0xC7, 0x48, 0x4F, 0x38, 0x2B, + 0xC4, 0x7D, 0x81, 0xFC, 0xC9, 0xC7, 0xE8, 0x92, + 0xC8, 0x83, 0x9D, 0x37, 0xB3, 0x53, 0x94, 0xB5, + 0x3E, 0x6B, 0x2B, 0x18, 0x95, 0xAB, 0xB0, 0xDE, + 0x8C, 0x98, 0xF2, 0x63, 0x3D, 0xC4, 0x41, 0x3A, + 0x8D, 0x57, 0x35, 0xDF, 0xC9, 0xA6, 0x40, 0x26, + 0xB6, 0xF3, 0x47, 0x79, 0xD6, 0xAC, 0x8A, 0xD9, + 0x9C, 0xC3, 0x1A, 0xA8, 0x98, 0xC2, 0xE7, 0x05, + 0x7F, 0x3D, 0xB8, 0xA1, 0xA8, 0xA9, 0x85, 0x27, + 0xA7, 0x9E, 0x43, 0x55, 0x2F, 0x28, 0xD1, 0x02, + 0x3E, 0x1F, 0x6A, 0x6B, 0x84, 0x85, 0x5C, 0xF5, + 0xE6, 0xDF, 0x88, 0x9B, 0xA2, 0x69, 0xF0, 0x48, + 0x94, 0x6E, 0x84, 0x02, 0x1C, 0x65, 0xC5, 0xA9, + 0x3B, 0x00, 0x7B, 0x07, 0x74, 0x1C, 0x1E, 0xE1, + 0x76, 0xC7, 0x39, 0x49, 0x11, 0x0F, 0x54, 0x8E, + 0xF4, 0x33, 0x2D, 0xCD, 0xD4, 0x91, 0xD2, 0xCE, + 0xFD, 0x02, 0x48, 0x88, 0x3F, 0x5E, 0x95, 0x25, + 0xBC, 0x91, 0xF3, 0x0A, 0xF1, 0x7C, 0xF5, 0xA9, + 0x8D, 0xD4, 0x4E, 0xF9, 0xA7, 0x1F, 0x99, 0xBB, + 0x73, 0x29, 0x85, 0xBA, 0x10, 0xA7, 0x23, 0xEF, + 0x47, 0x6F, 0xCF, 0x96, 0x6D, 0xA9, 0x45, 0x6B, + 0x24, 0x97, 0x8E, 0x33, 0x05, 0x0D, 0x0E, 0xC9, + 0x0D, 0x3C, 0xE4, 0x63, 0x78, 0x85, 0x1C, 0x9E, + 0xCF, 0xCF, 0xD3, 0x6C, 0x89, 0x5D, 0x44, 0xE9, + 0xE5, 0x06, 0x99, 0x30, 0x82, 0x52, 0x3D, 0x26, + 0x18, 0x57, 0x66, 0xB2, 0x35, 0x68, 0xCB, 0x95, + 0xE6, 0x41, 0x08, 0xF8, 0x9D, 0x10, 0x14, 0x74, + 0x7C, 0x67, 0xB6, 0xF3, 0xC8, 0x76, 0x7B, 0xE5, + 0xFC, 0x34, 0x12, 0x27, 0xDE, 0x94, 0x88, 0x86, + 0x1C, 0x5F, 0xE8, 0x11, 0x40, 0x9F, 0x80, 0x95, + 0x7D, 0x07, 0x52, 0x2A, 0x72, 0xCF, 0x6A, 0xB0, + 0x37, 0x8D, 0x0F, 0x2F, 0x28, 0xAF, 0x54, 0x81, + 0x85, 0xC3, 0x93, 0x67, 0x77, 0x99, 0x44, 0x66, + 0xA0, 0x19, 0xD3, 0x3B, 0x18, 0xA5, 0x4F, 0x38, + 0x0A, 0x33, 0x89, 0x2A, 0xB4, 0xD4, 0xBD, 0x50, + 0x7B, 0x5A, 0x61, 0xD0, 0xD3, 0x58, 0x34, 0x1A, + 0xC9, 0x2F, 0x07, 0xB4, 0x3B, 0x8F, 0x6A, 0xFC, + 0x69, 0x91, 0xBB, 0x6A, 0x1E, 0xAC, 0x23, 0xCA, + 0x6F, 0x73, 0xE9, 0x1F, 0x24, 0x64, 0xBD, 0x11, + 0x90, 0x98, 0xD7, 0xE7, 0x68, 0xE7, 0x7E, 0xCE, + 0x53, 0xFB, 0x89, 0x9B, 0xEB, 0x42, 0x26, 0x5E, + 0xCF, 0x7B, 0x27, 0x1F, 0x66, 0x54, 0x62, 0x82, + 0xD4, 0x72, 0xC3, 0x62, 0x39, 0x00, 0x6B, 0xB0, + 0xAB, 0xAB, 0xCC, 0xA2, 0x45, 0x50, 0xBA, 0xA0, + 0xA6, 0x01, 0x34, 0x8C, 0x81, 0x0F, 0xF5, 0xF9, + 0xEE, 0x50, 0x4B, 0xF7, 0x15, 0x5D, 0xEE, 0x41, + 0x41, 0xA1, 0x16, 0x05, 0xA4, 0xF3, 0x50, 0x9A, + 0xC9, 0xCA, 0xEF, 0x66, 0x24, 0xD2, 0x1D, 0xE3, + 0x32, 0xD5, 0xD5, 0x08, 0x28, 0xB5, 0x2E, 0x92, + 0x88, 0x5D, 0x3B, 0x90, 0x55, 0x3B, 0x14, 0x46, + 0x3A, 0xFB, 0x1E, 0xDC, 0xCD, 0x3B, 0x56, 0x9B, + 0x5A, 0x7F, 0x00, 0xBB, 0x66, 0x76, 0x9D, 0xAD, + 0xAC, 0x23, 0xAD, 0x8B, 0xB5, 0xD7, 0x3A, 0x6F, + 0x39, 0x0E, 0x6F, 0xC2, 0xF6, 0xF8, 0xEE, 0x3C, + 0xF4, 0x00, 0x9A, 0x5C, 0x3E, 0x1E, 0xF6, 0x0E, + 0x8F, 0x04, 0x06, 0x72, 0xD2, 0x62, 0xE6, 0x49, + 0x03, 0x79, 0xBB, 0xC7, 0x04, 0x95, 0xDF, 0xF2, + 0x37, 0xBE, 0xCD, 0x99, 0x52, 0xCD, 0x7E, 0xDE, + 0xB6, 0xD1, 0xDF, 0xC3, 0x60, 0xB3, 0xFC, 0x8B, + 0x0A, 0xF4, 0x80, 0xFF, 0xE0, 0x24, 0xAE, 0xEF, + 0xCD, 0x4E, 0x9C, 0xE9, 0x5D, 0x9B, 0x46, 0x9C, + 0x9A, 0x70, 0xE5, 0x11, 0x0D, 0xA0, 0xBA, 0xC1, + 0x24, 0xFC, 0x37, 0x41, 0xDC, 0xF4, 0x91, 0x16, + 0x26, 0x17, 0x96, 0x50, 0x4D, 0x5F, 0x49, 0x0B, + 0x43, 0x3C, 0x33, 0xC4, 0x0E, 0xDC, 0xE2, 0xB7, + 0x51, 0x51, 0xDA, 0x25, 0x6A, 0x86, 0x8A, 0x5E, + 0x35, 0xF8, 0x62, 0x26, 0xB8, 0x15, 0x1C, 0x91, + 0x93, 0x4C, 0xCC, 0x3D, 0xAC, 0xA3, 0x91, 0xDE, + 0xCC, 0xA7, 0x45, 0x37, 0x56, 0x60, 0xB6, 0xEC, + 0x41, 0xAE, 0x5D, 0x81, 0x08, 0x38, 0xCB, 0xEE, + 0xFF, 0xA1, 0x25, 0x57, 0x88, 0x44, 0x12, 0x35, + 0x7B, 0x10, 0x08, 0x36, 0x3D, 0x32, 0xB2, 0x37, + 0xAA, 0x1D, 0xD8, 0xE2, 0xD9, 0xC6, 0x36, 0x7A, + 0xDA, 0x09, 0xB2, 0xC9, 0x50, 0x60, 0x20, 0x6C, + 0xEC, 0x3E, 0xED, 0x39, 0x1F, 0xDC, 0x5D, 0xBE, + 0xF6, 0xF0, 0x8B, 0xDF, 0x04, 0x08, 0xE5, 0x85, + 0xAE, 0x5E, 0xBC, 0x8E, 0x97, 0x45, 0xD4, 0x4F, + 0xEC, 0xA9, 0x75, 0xAB, 0xBC, 0x14, 0x0B, 0xB3, + 0x7B, 0x8A, 0xDD, 0x16, 0xFC, 0xC2, 0x95, 0x69, + 0x10, 0xDC, 0x72, 0xBB, 0x3F, 0x02, 0xE9, 0xA1, + 0x30, 0xC9, 0xA8, 0x4F, 0x9C, 0xCB, 0x74, 0xD1, + 0x34, 0xCD, 0xF4, 0x0A, 0xFC, 0xBA, 0x20, 0x09, + 0xC8, 0xF0, 0x04, 0x02, 0x39, 0xBC, 0x99, 0x22, + 0x0E, 0xF6, 0x4C, 0x4D, 0xCC, 0xDE, 0x2E, 0x2E, + 0x5C, 0x9B, 0x68, 0x60, 0x2F, 0xBE, 0x8E, 0xF4, + 0xC9, 0x8B, 0x34, 0x68, 0xC7, 0x9D, 0xF4, 0xE0, + 0x78, 0x51, 0x1B, 0xFB, 0x8A, 0xA3, 0xDA, 0x09, + 0x59, 0x7A, 0x02, 0x51, 0x1E, 0x7C, 0x21, 0xA7, + 0xCF, 0x66, 0xA9, 0x38, 0x43, 0xA9, 0x48, 0x68, + 0xF1, 0x9E, 0x85, 0x52, 0x55, 0x2E, 0x3A, 0xCD, + 0xF6, 0xCB, 0x81, 0x06, 0x34, 0xDB, 0x97, 0xCB, + 0xC4, 0xBB, 0x56, 0x97, 0x09, 0xDA, 0xD4, 0x84, + 0x56, 0x45, 0x44, 0x6F, 0xA8, 0xD2, 0x89, 0xFC, + 0x59, 0x30, 0x7B, 0x80, 0x1E, 0x60, 0xCE, 0x2A, + 0x91, 0xE0, 0x6E, 0x9C, 0x22, 0xC1, 0x6E, 0x2E, + 0x59, 0xBD, 0xE3, 0x8A, 0x41, 0x6B, 0xB1, 0xB4, + 0xAC, 0x54, 0x57, 0x43, 0x8F, 0xDC, 0x5D, 0x64, + 0x45, 0x0A, 0x89, 0xEC, 0xB8, 0x32, 0xC1, 0xBB, + 0x27, 0x9D, 0xBF, 0x59, 0x33, 0x46, 0x81, 0x77, + 0x6A, 0xC0, 0x04, 0x09, 0x84, 0x6D, 0x09, 0xD6, + 0xF6, 0x87, 0x77, 0x2E, 0x34, 0x08, 0x50, 0xAB, + 0x86, 0x73, 0x38, 0x42, 0x15, 0xE1, 0x2C, 0x8D, + 0x0F, 0x53, 0x1C, 0x45, 0x1E, 0x58, 0x49, 0x3E, + 0x0E, 0xE4, 0x15, 0xAD, 0x59, 0x4D, 0xF3, 0x8C, + 0x34, 0x40, 0x8C, 0x7E, 0xD9, 0xF0, 0xC3, 0x92, + 0xF1, 0x53, 0x46, 0x04, 0xEA, 0xC3, 0xD9, 0xC1, + 0x54, 0x65, 0xA9, 0xA4, 0x66, 0x32, 0x21, 0x4B, + 0x53, 0x69, 0x90, 0xD7, 0x80, 0x78, 0xE5, 0xBD, + 0x7E, 0xAE, 0x20, 0x13, 0xFF, 0xF8, 0xFD, 0xD8, + 0xB2, 0x75, 0xC8, 0x9D, 0x97, 0xC9, 0x35, 0x3D, + 0xF3, 0xC4, 0x2A, 0x28, 0xE8, 0x14, 0xD8, 0x46, + 0x8E, 0x2B, 0x48, 0xDB, 0x09, 0x76, 0xD8, 0x8F, + 0x5E, 0xEC, 0xEF, 0xEA, 0xFB, 0x8F, 0x7F, 0x4A, + 0xF2, 0x91, 0xA7, 0x28, 0xF6, 0x24, 0x9E, 0xCF, + 0x56, 0x22, 0x33, 0x92, 0x69, 0xAA, 0x94, 0x53, + 0x29, 0xE9, 0x19, 0xF8, 0xB4, 0x41, 0xC8, 0x3D, + 0x55, 0x07, 0xF3, 0x0D, 0xF0, 0xFD, 0x2B, 0x13, + 0xFF, 0x80, 0x6F, 0x52, 0x2D, 0xAA, 0x11, 0xAF, + 0x67, 0x6A, 0x51, 0x3C, 0x14, 0x9C, 0x70, 0xF0, + 0xD6, 0xE9, 0x9A, 0x88, 0x04, 0x50, 0xA5, 0x4E, + 0x04, 0x17, 0xFE, 0x3C, 0x1E, 0x51, 0x3E, 0x9D, + 0x92, 0x0E, 0x30, 0xA8, 0xB4, 0x28, 0x91, 0x26, + 0x7A, 0x2D, 0xC5, 0x0A, 0xD8, 0x1F, 0x98, 0x04, + 0x49, 0x20, 0xC0, 0x99, 0xDF, 0x22, 0xC7, 0x39, + 0x98, 0xA2, 0x5C, 0x58, 0x1A, 0x51, 0x78, 0xC7, + 0x2B, 0x17, 0xAC, 0x87, 0x5B, 0xC6, 0x85, 0x48, + 0xA0, 0xFB, 0x0C, 0xBE, 0xE3, 0x8F, 0x05, 0x01, + 0x7B, 0x12, 0x43, 0x33, 0x43, 0xA6, 0x58, 0xF1, + 0x98, 0x0C, 0x81, 0x24, 0xEA, 0x6D, 0xD8, 0x1F }; static const byte kprime_1024[KYBER_SS_SZ] = { - 0xC6, 0x1F, 0x73, 0xD2, 0xBF, 0xB1, 0x85, 0x94, - 0xE1, 0xBA, 0x5D, 0x3B, 0x58, 0xB4, 0xC9, 0x34, - 0x20, 0x6D, 0x3A, 0x6F, 0x8E, 0xC9, 0x13, 0x95, - 0xAB, 0x77, 0x79, 0xC6, 0x1F, 0xA1, 0xDD, 0x6F + 0x8F, 0x33, 0x6E, 0x9C, 0x28, 0xDF, 0x34, 0x9E, + 0x03, 0x22, 0x0A, 0xF0, 0x1C, 0x42, 0x83, 0x2F, + 0xEF, 0xAB, 0x1F, 0x2A, 0x74, 0xC1, 0x6F, 0xAF, + 0x6F, 0x64, 0xAD, 0x07, 0x1C, 0x1A, 0x33, 0x94 }; #endif static byte ss[KYBER_SS_SZ]; @@ -31260,542 +31270,475 @@ static int test_wc_kyber_decapsulate_kats(void) #if defined(HAVE_DILITHIUM) && defined(WOLFSSL_WC_DILITHIUM) && \ !defined(WOLFSSL_DILITHIUM_NO_VERIFY) && !defined(WOLFSSL_NO_ML_DSA_44) static const byte ml_dsa_44_pub_key[] = { - 0xf1, 0xdf, 0x1e, 0xfc, 0x6b, 0x41, 0xe7, - 0x5e, 0xcb, 0xb5, 0xb5, 0xd2, 0x3c, 0xc8, - 0xd3, 0x99, 0x73, 0x36, 0x9a, 0x0b, 0x32, - 0x71, 0x7a, 0x9f, 0x6d, 0x66, 0x07, 0xb8, - 0x31, 0x5f, 0x25, 0xb6, 0x2e, 0xee, 0x4f, - 0x63, 0x13, 0x02, 0x45, 0x3c, 0xd1, 0x3d, - 0x79, 0x6b, 0x3c, 0xfe, 0xd9, 0x2f, 0x39, - 0xe8, 0x62, 0x60, 0xf0, 0x04, 0x83, 0x28, - 0xaa, 0xdc, 0x15, 0x90, 0xef, 0x55, 0x48, - 0xf9, 0xd2, 0xcd, 0x53, 0x87, 0x0e, 0x42, - 0xba, 0x16, 0x87, 0x7b, 0x32, 0xa8, 0xbf, - 0xed, 0x32, 0xa1, 0x19, 0x66, 0x44, 0xfe, - 0x57, 0xec, 0x26, 0xed, 0x9e, 0x73, 0xa0, - 0x87, 0xe8, 0x8a, 0x93, 0x3c, 0xec, 0x1d, - 0xa0, 0xcc, 0x2e, 0x0d, 0x37, 0x5b, 0xb1, - 0x74, 0x77, 0x18, 0x4b, 0xde, 0x4b, 0xc9, - 0xac, 0xf8, 0xda, 0x23, 0x7a, 0x2a, 0x39, - 0xfa, 0x96, 0x01, 0xff, 0xf0, 0xc7, 0xa7, - 0x34, 0xca, 0x9d, 0xe9, 0xda, 0x4d, 0x85, - 0x00, 0xc9, 0xe9, 0xcf, 0xb0, 0x3e, 0x21, - 0xe6, 0xae, 0x52, 0x67, 0x4f, 0xe3, 0x93, - 0x2f, 0x50, 0x47, 0xdd, 0x89, 0xa2, 0x48, - 0xf8, 0xfe, 0x93, 0xfe, 0xce, 0x68, 0x9c, - 0xe9, 0x4d, 0xdd, 0xbd, 0x9f, 0xeb, 0x14, - 0x8d, 0x38, 0x7a, 0xc6, 0xf2, 0x50, 0x00, - 0x91, 0x65, 0xd0, 0xd1, 0xeb, 0x51, 0xab, - 0x3a, 0x0e, 0x45, 0x5c, 0xbd, 0x65, 0xf5, - 0x78, 0xc6, 0xa0, 0xaa, 0xae, 0x50, 0xf2, - 0x19, 0x1f, 0x90, 0x1a, 0x9f, 0x34, 0xa0, - 0xa1, 0x95, 0x94, 0x86, 0x30, 0xc2, 0xb2, - 0x95, 0x82, 0x13, 0xf6, 0x73, 0xe2, 0x03, - 0xe3, 0x7c, 0x09, 0x8e, 0x5d, 0x07, 0xd6, - 0x33, 0x93, 0x8a, 0x1b, 0x67, 0xc9, 0xb1, - 0x76, 0x74, 0x1c, 0x22, 0x58, 0x05, 0x5a, - 0xa8, 0x83, 0x68, 0xce, 0x64, 0xfc, 0x52, - 0x7f, 0x35, 0x80, 0x6e, 0xdf, 0xf5, 0x2d, - 0xd2, 0xd1, 0x17, 0xdc, 0xce, 0x95, 0xe8, - 0xe6, 0x42, 0xb1, 0xb1, 0x61, 0xc1, 0x24, - 0x79, 0x1c, 0x51, 0xfc, 0x3c, 0xba, 0x40, - 0xf7, 0x70, 0x35, 0x22, 0x73, 0x31, 0x53, - 0x21, 0xea, 0x09, 0xf7, 0xaa, 0x07, 0xb8, - 0xfa, 0x0b, 0xa0, 0xa9, 0xb4, 0x8c, 0x83, - 0xbb, 0x25, 0xfe, 0x39, 0x29, 0xef, 0x34, - 0xd5, 0xe2, 0xc7, 0x9e, 0x87, 0xbd, 0x50, - 0x86, 0x71, 0x12, 0x3e, 0x8a, 0x78, 0xe2, - 0xb3, 0xe1, 0xfa, 0x5b, 0x73, 0x3b, 0x34, - 0x9f, 0x4e, 0x7d, 0xd5, 0x1b, 0xb9, 0x8e, - 0x43, 0x76, 0xef, 0x3e, 0x37, 0x70, 0x33, - 0x36, 0xd1, 0xa1, 0xba, 0x1b, 0xb1, 0x79, - 0xfb, 0x2c, 0xb1, 0x9b, 0xc3, 0x1b, 0x26, - 0x83, 0x89, 0x4d, 0x53, 0x40, 0xa5, 0xf9, - 0x8b, 0xe2, 0xec, 0x30, 0x1f, 0xf6, 0x16, - 0xd6, 0x55, 0xce, 0x0e, 0x1b, 0xed, 0xe0, - 0xeb, 0xc9, 0x7a, 0x2e, 0x1a, 0x85, 0x81, - 0xa4, 0xe2, 0xa8, 0xbe, 0x9f, 0xac, 0x0b, - 0x23, 0xb4, 0xbb, 0xc2, 0x0f, 0x66, 0x43, - 0x45, 0x93, 0x20, 0x37, 0x4d, 0x47, 0x23, - 0x7f, 0x4a, 0x5e, 0x8b, 0x19, 0xec, 0xd9, - 0x57, 0x69, 0xc4, 0x91, 0xb0, 0xcd, 0x25, - 0x2a, 0x7d, 0x52, 0xdb, 0x59, 0x18, 0x8b, - 0x96, 0xad, 0x75, 0x21, 0x81, 0x1a, 0x2c, - 0xb3, 0x26, 0x30, 0x78, 0x19, 0x2b, 0x22, - 0x74, 0x6e, 0x92, 0x57, 0xec, 0x3c, 0x75, - 0x8b, 0xd8, 0x4b, 0x7c, 0xd1, 0x72, 0x1b, - 0x1f, 0xed, 0xae, 0x15, 0x82, 0xd3, 0xf6, - 0xaf, 0x01, 0x31, 0xec, 0x1b, 0xca, 0xa5, - 0xf8, 0x78, 0x7f, 0x8a, 0x8a, 0x03, 0xbd, - 0x03, 0x0a, 0xc5, 0x4e, 0x15, 0xab, 0xa4, - 0x76, 0x56, 0x5b, 0xf8, 0x50, 0xa9, 0xee, - 0x61, 0xbd, 0x05, 0xe0, 0xdf, 0xc6, 0xbe, - 0x4a, 0xaf, 0xdb, 0x96, 0x0a, 0x7e, 0xcb, - 0x2e, 0xb0, 0x68, 0x4e, 0x2d, 0x88, 0x32, - 0x1e, 0xe1, 0xbc, 0x08, 0x15, 0x15, 0x71, - 0xe6, 0x77, 0x2b, 0xeb, 0x47, 0x81, 0xb7, - 0xe8, 0x82, 0x9f, 0x5f, 0x94, 0xd2, 0xac, - 0xa5, 0x89, 0x52, 0xe1, 0x3c, 0x59, 0xe0, - 0x06, 0xe6, 0x66, 0xe1, 0xf9, 0x9d, 0x32, - 0x42, 0x9d, 0x77, 0xfe, 0x6a, 0x12, 0x4a, - 0xa3, 0xd2, 0x49, 0xbb, 0x39, 0xad, 0x42, - 0xb7, 0x37, 0xfb, 0xde, 0x9d, 0xaf, 0x1b, - 0xd5, 0x5a, 0x3b, 0x06, 0xa6, 0x51, 0x7d, - 0x6a, 0x5c, 0x32, 0xdb, 0xde, 0x5d, 0x0d, - 0x20, 0x88, 0xee, 0x8b, 0xa8, 0x49, 0x5b, - 0x6c, 0x50, 0x72, 0xdb, 0x68, 0x44, 0x17, - 0x28, 0xd4, 0xbb, 0x43, 0x8e, 0x00, 0xa5, - 0xc8, 0x27, 0x00, 0xaa, 0x2b, 0xa4, 0xc2, - 0x16, 0xcd, 0x2d, 0x59, 0xdc, 0x1a, 0xa2, - 0x66, 0xe2, 0x96, 0x6b, 0xcc, 0x39, 0xc6, - 0xe9, 0x2b, 0x14, 0xa7, 0x7d, 0x67, 0x5d, - 0x54, 0xfc, 0x93, 0x73, 0x52, 0x47, 0xc7, - 0x24, 0x1e, 0x7e, 0xc9, 0x2d, 0x87, 0x60, - 0xd3, 0xd8, 0x76, 0xf0, 0x51, 0x04, 0xc7, - 0xcb, 0x68, 0x0f, 0xd8, 0x4b, 0x22, 0xb2, - 0x51, 0x87, 0xe9, 0x1e, 0x05, 0x3d, 0xe2, - 0x8a, 0x6b, 0xb8, 0x96, 0xd6, 0xe0, 0x6e, - 0x38, 0x74, 0x96, 0xad, 0x7e, 0x4f, 0x52, - 0x35, 0xcf, 0x4a, 0x50, 0xe7, 0x60, 0x2e, - 0x58, 0xcf, 0xdc, 0x7a, 0x9a, 0x21, 0x76, - 0x1d, 0x2c, 0xd1, 0x98, 0xab, 0xab, 0xed, - 0xf9, 0xec, 0xd5, 0x7b, 0x09, 0xad, 0x2e, - 0xad, 0x5a, 0xdc, 0xad, 0xd6, 0x46, 0xba, - 0x2d, 0x55, 0xf7, 0x0c, 0x9a, 0x23, 0x10, - 0x50, 0x3e, 0x4f, 0xe1, 0xeb, 0x58, 0x8a, - 0xc0, 0x17, 0x48, 0x41, 0x40, 0x65, 0x0b, - 0xfb, 0x43, 0x9e, 0xf0, 0x37, 0x4a, 0x89, - 0x4e, 0x71, 0xad, 0x44, 0x19, 0x13, 0xbb, - 0x4a, 0x63, 0x83, 0x9e, 0x6a, 0x49, 0x1b, - 0x28, 0xb0, 0x8e, 0x9c, 0x7b, 0xaf, 0xf9, - 0x57, 0x5d, 0x35, 0x16, 0x5c, 0xa7, 0x5e, - 0xd1, 0x0d, 0x83, 0xdc, 0x49, 0xdd, 0x40, - 0x58, 0x9c, 0x97, 0x91, 0xa6, 0xb0, 0x68, - 0xb0, 0xfa, 0x9e, 0xc0, 0x3f, 0x81, 0xc6, - 0xce, 0x58, 0xc5, 0x87, 0xc6, 0xf4, 0x06, - 0xec, 0x91, 0x57, 0x81, 0xce, 0x3a, 0xe8, - 0xf1, 0x29, 0x3f, 0x01, 0x93, 0xf0, 0x74, - 0x22, 0xea, 0x6b, 0x06, 0xd8, 0x65, 0xdb, - 0xd7, 0x41, 0xd9, 0x60, 0x23, 0xe7, 0x83, - 0xc8, 0x69, 0x6b, 0x90, 0xc5, 0xc7, 0xb9, - 0xd5, 0xba, 0x79, 0xc9, 0x4a, 0x87, 0x23, - 0x1c, 0x95, 0x78, 0xf3, 0x73, 0x10, 0xbe, - 0xb2, 0x0f, 0x32, 0xec, 0xff, 0x15, 0x51, - 0x4d, 0xb5, 0x48, 0x3c, 0xca, 0x4c, 0x5b, - 0x32, 0x29, 0x47, 0x21, 0xba, 0x2a, 0x5d, - 0xc9, 0x59, 0xfa, 0x8f, 0x33, 0x10, 0x83, - 0x40, 0x80, 0xf3, 0xce, 0xee, 0x6d, 0xcd, - 0x9c, 0xbb, 0x23, 0x0b, 0x45, 0xba, 0x7a, - 0x07, 0xdc, 0x4d, 0x57, 0x97, 0xb4, 0xa4, - 0xef, 0x94, 0xe8, 0x43, 0xfe, 0x18, 0x47, - 0x1a, 0xb0, 0xf6, 0xb6, 0x0b, 0x55, 0x05, - 0xbd, 0x67, 0x2d, 0x37, 0x27, 0x17, 0x13, - 0x65, 0x22, 0xf2, 0x7c, 0xf7, 0x47, 0xd2, - 0x85, 0x63, 0x98, 0x83, 0xd2, 0xc1, 0xbf, - 0x8f, 0x4c, 0xda, 0xbf, 0xa4, 0x10, 0x6b, - 0x4e, 0x6b, 0x78, 0x5e, 0x3f, 0x7a, 0xec, - 0x15, 0x84, 0xbe, 0x1a, 0x94, 0xa2, 0x2b, - 0xb5, 0x3e, 0x55, 0x86, 0x51, 0xec, 0x2e, - 0x62, 0xcb, 0xd6, 0x9f, 0xe5, 0xa4, 0xb8, - 0xc0, 0xaa, 0x4e, 0x6d, 0x8a, 0xb1, 0xd6, - 0xf7, 0x8d, 0x1c, 0x04, 0x32, 0x8b, 0x20, - 0xf5, 0x80, 0x33, 0xbd, 0xcc, 0x3e, 0x4c, - 0x16, 0x04, 0xab, 0xd8, 0x64, 0x6d, 0xf9, - 0xc9, 0x15, 0x7d, 0x4b, 0x00, 0x86, 0xb2, - 0x70, 0x1d, 0x20, 0xcb, 0x7a, 0xed, 0x7e, - 0x81, 0x7f, 0x41, 0x33, 0xb8, 0x7b, 0xc0, - 0xa3, 0xbd, 0x12, 0xd1, 0x67, 0x48, 0xa0, - 0xb9, 0xeb, 0xd5, 0x29, 0xab, 0x91, 0x9c, - 0xa2, 0x2f, 0x8e, 0x01, 0x1c, 0x88, 0xc1, - 0x3e, 0x34, 0x47, 0x36, 0x8a, 0x35, 0x6c, - 0x2f, 0xc1, 0x8a, 0xb6, 0xd0, 0xa5, 0x01, - 0x82, 0xee, 0x4f, 0x44, 0xb9, 0xcd, 0x16, - 0x9c, 0x3a, 0xf8, 0xe9, 0x2a, 0xd2, 0xb6, - 0x1d, 0xfd, 0x3c, 0x06, 0xdc, 0x42, 0xdd, - 0x2d, 0x60, 0x6a, 0x44, 0x21, 0xc3, 0x37, - 0x75, 0x79, 0xc5, 0x29, 0x5c, 0x7e, 0xf5, - 0x86, 0xbb, 0x56, 0x05, 0x21, 0x46, 0xaf, - 0x6d, 0x3a, 0xa2, 0x9e, 0x11, 0x6d, 0x9e, - 0x05, 0x74, 0x8a, 0xfe, 0x84, 0x88, 0x3e, - 0x76, 0xb4, 0xef, 0x2f, 0xeb, 0x52, 0xcd, - 0x97, 0x82, 0xba, 0x0c, 0xcc, 0xcb, 0x72, - 0x8d, 0x8d, 0xd2, 0x32, 0x7c, 0x41, 0x39, - 0xa6, 0x22, 0xb7, 0xdc, 0x3f, 0x39, 0x43, - 0xf5, 0xee, 0x0c, 0xfc, 0xbb, 0x2b, 0x43, - 0xe8, 0xce, 0xae, 0x0c, 0xd9, 0x15, 0x22, - 0x32, 0xbd, 0x69, 0xad, 0x76, 0xd9, 0xdf, - 0x81, 0xdf, 0x24, 0x76, 0x7b, 0x53, 0x0b, - 0xe6, 0xc7, 0x6c, 0x38, 0x2c, 0xbf, 0x28, - 0x95, 0x03, 0x18, 0xef, 0x98, 0x88, 0xc2, - 0x6b, 0x1a, 0xf5, 0xb4, 0xf9, 0x19, 0x76, - 0x25, 0x1d, 0xcf, 0x9b, 0xcd, 0x4c, 0x00, - 0x06, 0xde, 0x55, 0x58, 0x95, 0x9a, 0x06, - 0xfb, 0xf9, 0x88, 0x20, 0x85, 0x80, 0xe3, - 0x27, 0xdf, 0xc5, 0x20, 0x29, 0x7c, 0x58, - 0x02, 0x07, 0x2e, 0xd2, 0xeb, 0xdc, 0x68, - 0x58, 0x91, 0x08, 0x71, 0x16, 0xb3, 0x82, - 0x2f, 0x6c, 0x45, 0xcd, 0xbe, 0xe5, 0x0c, - 0x07, 0x77, 0x95, 0x3b, 0x2c, 0x59, 0x8e, - 0xba, 0x07, 0xa8, 0xa1, 0xc6, 0xe5, 0x6a, - 0x49, 0xb5, 0x85, 0xf2, 0x70, 0x05, 0x22, - 0xc4, 0x2f, 0x8d, 0xdd, 0x48, 0x8d, 0x87, - 0xfa, 0xb6, 0xf8, 0x59, 0xc8, 0xb1, 0x18, - 0x03, 0x5f, 0xce, 0x53, 0x28, 0x96, 0x15, - 0xd4, 0xb4, 0x10, 0x2c, 0xe2, 0x22, 0x9e, - 0x88, 0xe5, 0xcd, 0xda, 0xfc, 0xf9, 0x64, - 0xa4, 0x7b, 0xfb, 0xeb, 0xa8, 0x6a, 0xb6, - 0xf6, 0x17, 0x84, 0x26, 0x3d, 0xe4, 0x66, - 0x7e, 0x5c, 0x85, 0x01, 0xaf, 0xdc, 0xdb, - 0x48, 0x33, 0x4a, 0x20, 0x7c, 0x22, 0x1b, - 0xd5, 0xeb, 0x2d, + 0x7c, 0x33, 0x31, 0x41, 0x15, 0xa7, 0x2d, 0x6b, + 0x17, 0x7c, 0x10, 0xab, 0x75, 0xf7, 0x83, 0xb3, + 0x30, 0x75, 0x6f, 0xa9, 0x42, 0xb0, 0x9b, 0x59, + 0x59, 0x99, 0x2b, 0x5d, 0x7d, 0x6e, 0xeb, 0xdd, + 0xd9, 0x99, 0x8f, 0x7b, 0xad, 0xe5, 0x90, 0x0f, + 0xa4, 0x80, 0xd8, 0xa2, 0x0d, 0x95, 0xea, 0x63, + 0x2b, 0xcf, 0xb4, 0x5b, 0x3c, 0xd1, 0x5a, 0xc4, + 0xc4, 0xd1, 0x71, 0x28, 0x4b, 0x0b, 0x28, 0x32, + 0x73, 0xb5, 0x0d, 0xd6, 0x8f, 0x6b, 0x01, 0x26, + 0x04, 0x45, 0xa3, 0x80, 0xc0, 0x21, 0x12, 0xee, + 0x52, 0x0f, 0x35, 0xe4, 0x8e, 0xca, 0xf8, 0x91, + 0xf4, 0x99, 0x51, 0xe2, 0x80, 0x76, 0xa7, 0x2d, + 0x09, 0xf5, 0x04, 0xcc, 0xa6, 0x6b, 0x20, 0xc4, + 0xac, 0xcd, 0x6c, 0x9c, 0x09, 0xe7, 0x51, 0xa2, + 0x29, 0x60, 0xfd, 0xf2, 0xbd, 0x7e, 0x4c, 0x9d, + 0xc0, 0xba, 0x62, 0x2f, 0x53, 0xb2, 0x47, 0x03, + 0xf2, 0x6f, 0x70, 0x51, 0xa8, 0xe1, 0xb7, 0x9f, + 0x37, 0x15, 0xfa, 0xd1, 0x6c, 0x74, 0x1a, 0x2b, + 0x4f, 0x39, 0x4f, 0x43, 0x49, 0x71, 0x6a, 0xf8, + 0x7c, 0x65, 0x1a, 0xdd, 0x1a, 0x25, 0xf8, 0x79, + 0xfa, 0x8c, 0x02, 0xf2, 0xf7, 0xf7, 0x7b, 0x9f, + 0xe4, 0xaf, 0x9e, 0x1a, 0x0b, 0x5b, 0x2e, 0x41, + 0xbb, 0xa9, 0x4f, 0xd0, 0xdb, 0xad, 0xe5, 0x25, + 0xff, 0x36, 0x3b, 0x9a, 0xc3, 0xdf, 0xb6, 0x27, + 0xd3, 0xba, 0xb0, 0xd4, 0xb2, 0x07, 0xc3, 0xd8, + 0xab, 0x10, 0x3d, 0xcd, 0x23, 0x52, 0x46, 0xe6, + 0x96, 0x57, 0x85, 0xc7, 0x60, 0xe2, 0x8c, 0x46, + 0x65, 0x7d, 0x76, 0x1c, 0x45, 0x20, 0x5d, 0x51, + 0xd6, 0x13, 0xde, 0xe5, 0x3d, 0xc2, 0x8c, 0x36, + 0xdb, 0x7f, 0x83, 0x6f, 0x6a, 0xc2, 0xa3, 0xf2, + 0xdc, 0x63, 0x69, 0x7f, 0xbd, 0xd0, 0xc1, 0x90, + 0xfb, 0x62, 0x42, 0xa1, 0xf6, 0xf7, 0xdd, 0xc2, + 0x4a, 0x38, 0x62, 0x9b, 0xef, 0x67, 0xf9, 0x5c, + 0xd8, 0xff, 0xf4, 0xf2, 0x67, 0x90, 0x42, 0x85, + 0xaf, 0xe2, 0x92, 0x6e, 0xc4, 0x9b, 0x63, 0xc3, + 0x91, 0xa5, 0x11, 0x66, 0x13, 0x83, 0xbc, 0xbb, + 0xc7, 0x34, 0x3b, 0x30, 0x40, 0x53, 0x91, 0xdf, + 0x7c, 0x3d, 0x17, 0xdd, 0xa1, 0xa6, 0x80, 0xfd, + 0x26, 0x9d, 0x60, 0x7b, 0xcd, 0xb4, 0x2b, 0xba, + 0x61, 0x0f, 0x43, 0x7c, 0x51, 0x3c, 0xb9, 0xfa, + 0xdb, 0x48, 0x35, 0x9f, 0x0d, 0x0c, 0x04, 0xe8, + 0xf9, 0x6e, 0x07, 0x65, 0x7d, 0x46, 0x1b, 0xd2, + 0x51, 0xdb, 0x55, 0x27, 0xd7, 0x3d, 0x1e, 0x36, + 0x07, 0x59, 0x18, 0xec, 0x04, 0x4b, 0x87, 0xbb, + 0xfb, 0x27, 0xac, 0xeb, 0x8f, 0x43, 0x46, 0xd0, + 0x39, 0x00, 0x90, 0x54, 0x70, 0xb1, 0x71, 0xf2, + 0xe7, 0x3d, 0x02, 0x1a, 0xcf, 0x87, 0x16, 0x67, + 0xa2, 0x3c, 0x31, 0x48, 0xe8, 0xbd, 0x4f, 0xb3, + 0xc2, 0xfd, 0x3d, 0xa1, 0x9c, 0x87, 0x54, 0x60, + 0x30, 0x21, 0x52, 0x57, 0xcd, 0x03, 0x96, 0x9e, + 0xa7, 0x8d, 0xe5, 0x02, 0x04, 0x78, 0x43, 0x72, + 0xda, 0xb2, 0x22, 0xf1, 0xee, 0x8f, 0x27, 0x0b, + 0x8f, 0x7b, 0xf8, 0xbc, 0x16, 0xa1, 0xef, 0x0b, + 0x35, 0xda, 0xfc, 0x29, 0x1b, 0xf8, 0xa1, 0x35, + 0x40, 0xe7, 0xed, 0x4c, 0x02, 0x4a, 0x83, 0xb7, + 0x49, 0x75, 0x34, 0x3f, 0x2b, 0xb3, 0x61, 0xf5, + 0xa3, 0x9b, 0x23, 0xca, 0xfb, 0x58, 0x16, 0x4f, + 0x3c, 0x50, 0xbf, 0x81, 0xab, 0x54, 0x50, 0x1a, + 0x39, 0x57, 0x5f, 0x9a, 0x72, 0x22, 0xba, 0xa4, + 0xf6, 0xbf, 0xac, 0x31, 0x5c, 0xc5, 0x96, 0xd7, + 0xa9, 0xe4, 0x3b, 0x0c, 0xd0, 0x7f, 0x79, 0x68, + 0x4d, 0x41, 0x04, 0x81, 0x73, 0xcf, 0x47, 0x4a, + 0x7b, 0x37, 0xac, 0x8e, 0x47, 0x0d, 0x72, 0x65, + 0x0f, 0x9d, 0x44, 0xd7, 0x08, 0x21, 0x5b, 0x3f, + 0xc8, 0x9d, 0xea, 0xa2, 0x64, 0x7b, 0x0d, 0x98, + 0xc1, 0x61, 0xcd, 0xa4, 0xf7, 0x8c, 0x4a, 0xa3, + 0x3b, 0xdd, 0x92, 0xce, 0x61, 0x97, 0x0e, 0x98, + 0xa4, 0x10, 0xb5, 0x1f, 0xc5, 0xfb, 0xee, 0x49, + 0x36, 0x8f, 0xe3, 0x2d, 0x46, 0x9c, 0xa9, 0xff, + 0xdd, 0x1a, 0x48, 0x1b, 0x5a, 0x99, 0x84, 0x0a, + 0x3d, 0x5c, 0xd7, 0x67, 0x32, 0x88, 0x87, 0x2a, + 0x34, 0x50, 0x04, 0xad, 0xe6, 0xbb, 0x3c, 0xb5, + 0xee, 0x80, 0x99, 0x70, 0xaa, 0x9d, 0x5a, 0x63, + 0xec, 0xd5, 0x9a, 0x6a, 0x3a, 0xe8, 0xaa, 0x3d, + 0x3f, 0xe8, 0x15, 0x2c, 0x16, 0x3e, 0x86, 0x46, + 0x21, 0xf2, 0xd2, 0x6e, 0x74, 0x3d, 0x53, 0x94, + 0x7c, 0x41, 0xec, 0x5b, 0xf5, 0xa4, 0xc8, 0x1f, + 0x75, 0x22, 0x50, 0x58, 0x31, 0xf5, 0x29, 0x9a, + 0xc2, 0x2c, 0x67, 0xd9, 0xf6, 0x2e, 0xa1, 0xa9, + 0x0a, 0x69, 0x90, 0x7a, 0xd8, 0xed, 0x5c, 0x09, + 0x3d, 0x14, 0xa3, 0x2b, 0xc0, 0x47, 0x88, 0xb7, + 0xea, 0x14, 0x8a, 0xec, 0xaf, 0x0c, 0xb7, 0xc6, + 0x7c, 0x32, 0x0f, 0x57, 0xea, 0x9f, 0xd4, 0x99, + 0x8d, 0xab, 0xd6, 0xc9, 0x31, 0x07, 0x81, 0x37, + 0x3d, 0xf5, 0x07, 0xb3, 0x93, 0xb7, 0x04, 0x20, + 0xdf, 0x91, 0xef, 0xfb, 0xa6, 0x7d, 0x4b, 0x5d, + 0xd4, 0x24, 0xd2, 0x0b, 0xc5, 0x34, 0xf6, 0x7a, + 0xf9, 0x4a, 0x48, 0xc7, 0xab, 0xaf, 0xa8, 0xd2, + 0xfc, 0x41, 0xc9, 0x8b, 0xa8, 0xc4, 0x2f, 0x94, + 0x4e, 0xb0, 0xab, 0xd3, 0xd9, 0x09, 0x4b, 0x1f, + 0x35, 0xb7, 0xb4, 0x4c, 0x2d, 0x6b, 0xe6, 0xb4, + 0x2e, 0x8a, 0x09, 0xd3, 0x9d, 0x54, 0x3f, 0x53, + 0xcc, 0x8e, 0x16, 0x18, 0x4e, 0x9a, 0xe8, 0x52, + 0x84, 0x3a, 0x3e, 0xdb, 0xab, 0x65, 0xc4, 0xa1, + 0x3c, 0xd0, 0xf6, 0x57, 0x3c, 0x0e, 0x10, 0xed, + 0xb2, 0xa9, 0x7d, 0x70, 0x3f, 0x18, 0x1a, 0xba, + 0x31, 0x33, 0xcb, 0x2a, 0xfd, 0x13, 0xf5, 0x23, + 0xd7, 0x71, 0xfa, 0xb6, 0xe8, 0xda, 0x63, 0xca, + 0x55, 0x3c, 0x5b, 0x87, 0x27, 0x96, 0x3d, 0xd0, + 0x43, 0x9d, 0x76, 0x9f, 0x28, 0x5a, 0xb6, 0xc8, + 0x81, 0xe4, 0x7c, 0x2a, 0x7a, 0x84, 0x0f, 0x2d, + 0x1b, 0xd0, 0xe4, 0x0e, 0x1b, 0x47, 0x32, 0xc8, + 0x02, 0x2d, 0x39, 0x0e, 0x7d, 0xb1, 0x12, 0x56, + 0x50, 0x00, 0xae, 0xcc, 0x45, 0x0a, 0xd5, 0x30, + 0x16, 0xe7, 0x3a, 0x53, 0x02, 0xbc, 0xd5, 0xef, + 0xca, 0x00, 0xea, 0x5f, 0xbe, 0x15, 0x0d, 0x08, + 0x76, 0xc1, 0x03, 0x93, 0x96, 0x4a, 0x88, 0xda, + 0x9d, 0x0b, 0x51, 0x39, 0x9a, 0xef, 0xd2, 0xde, + 0x8a, 0x2c, 0xe6, 0xf3, 0xa5, 0x70, 0x15, 0x3a, + 0x17, 0x43, 0x31, 0xfc, 0x47, 0x9d, 0xec, 0x3b, + 0x28, 0x6f, 0xdf, 0x45, 0x6f, 0x9e, 0x10, 0xbb, + 0x8e, 0x43, 0xc5, 0x59, 0xe5, 0x61, 0x9b, 0xa7, + 0xa1, 0xb8, 0x7a, 0x1c, 0xd4, 0x25, 0x26, 0xca, + 0xe9, 0x2b, 0x0b, 0x3d, 0x06, 0xeb, 0x44, 0x44, + 0xab, 0x4a, 0x5e, 0x68, 0x5c, 0x93, 0xf1, 0x3f, + 0x39, 0x01, 0xb9, 0xf1, 0x01, 0xb7, 0xb6, 0x14, + 0x44, 0x1d, 0x6d, 0x6b, 0x03, 0x45, 0x0d, 0xf3, + 0xbf, 0x71, 0x4e, 0xf3, 0x84, 0x3d, 0xef, 0xea, + 0x60, 0x2e, 0x2e, 0xf7, 0x33, 0xa6, 0xbe, 0x53, + 0x49, 0x26, 0xed, 0xb4, 0xbf, 0x7f, 0xb0, 0x1d, + 0x39, 0xb2, 0xc2, 0x88, 0xc2, 0xa2, 0xd4, 0x7f, + 0x0e, 0x1c, 0x44, 0xa3, 0x38, 0x76, 0xa7, 0xa6, + 0x19, 0x7e, 0x4c, 0x84, 0x25, 0x01, 0xb2, 0x78, + 0xb4, 0x56, 0xc5, 0xc1, 0x50, 0x3f, 0xf2, 0xb6, + 0x76, 0x09, 0x55, 0x57, 0x1c, 0xd1, 0x55, 0x23, + 0x16, 0x2a, 0x51, 0x16, 0xaa, 0x13, 0x4f, 0x35, + 0x69, 0xaf, 0xea, 0x01, 0x5f, 0x22, 0xc9, 0x2e, + 0xe9, 0x8c, 0x6c, 0xa2, 0x17, 0x92, 0xdc, 0x3d, + 0xd6, 0xf0, 0xfa, 0x5a, 0x53, 0xe0, 0xcd, 0x55, + 0xa2, 0x91, 0x62, 0xba, 0xae, 0x67, 0x40, 0x1c, + 0xda, 0xb4, 0xcc, 0xfc, 0x67, 0x1f, 0x44, 0xa0, + 0x50, 0xa5, 0xde, 0xc5, 0xde, 0x5e, 0xa0, 0x3b, + 0x05, 0x84, 0x1c, 0x2a, 0xc4, 0x96, 0x47, 0xd6, + 0x97, 0x56, 0x40, 0x33, 0x99, 0x7c, 0x8b, 0x56, + 0xb4, 0xfb, 0xf4, 0x23, 0xcb, 0x48, 0x81, 0x6c, + 0xa4, 0x53, 0x41, 0x8c, 0x28, 0x61, 0xd7, 0x8c, + 0xde, 0xde, 0xeb, 0xd4, 0xe7, 0x8a, 0x2a, 0x40, + 0x83, 0x1c, 0xa4, 0x19, 0x0f, 0x6c, 0x73, 0xa5, + 0x0e, 0xb6, 0x5c, 0x14, 0x36, 0xff, 0xc9, 0x99, + 0x56, 0x53, 0x8c, 0x4e, 0x4f, 0x4a, 0x82, 0xc8, + 0x76, 0x83, 0x81, 0xf1, 0x17, 0x82, 0x98, 0x3e, + 0x9c, 0x99, 0x3a, 0x7c, 0x08, 0x77, 0x3e, 0xe2, + 0x10, 0x98, 0xb0, 0xf6, 0x1d, 0xd3, 0x24, 0xe8, + 0x98, 0xcf, 0xd8, 0x9a, 0xb8, 0xd7, 0xbe, 0x56, + 0xa2, 0xb6, 0xf8, 0x2e, 0xfe, 0xeb, 0x96, 0xfa, + 0xd0, 0xba, 0x79, 0x9e, 0xde, 0x72, 0x0d, 0x53, + 0x5f, 0xdd, 0x0d, 0xb2, 0x0a, 0x8f, 0x14, 0x94, + 0x87, 0x25, 0x5e, 0xcd, 0xd4, 0x4b, 0xaa, 0xc9, + 0x7e, 0x41, 0x9f, 0x33, 0x77, 0xbe, 0x6d, 0x57, + 0x68, 0xef, 0xee, 0x1a, 0xc4, 0x5c, 0x7b, 0xca, + 0x7e, 0x33, 0x93, 0x3d, 0x88, 0x91, 0xd1, 0x34, + 0x6a, 0x39, 0x98, 0x92, 0x50, 0x1a, 0x02, 0xcf, + 0x89, 0x34, 0x33, 0x10, 0x65, 0x23, 0x4d, 0xb7, + 0x00, 0xcc, 0xc1, 0x60, 0xdd, 0x7d, 0x8e, 0xd1, + 0x16, 0xa7, 0x71, 0x7b, 0x20, 0xcb, 0xe4, 0xe8, + 0xcc, 0xfc, 0xb8, 0x5f, 0xe4, 0xe2, 0xd6, 0x8c, + 0x43, 0x9c, 0x06, 0xf4, 0x8d, 0xbc, 0x56, 0xd0, + 0x0c, 0xd6, 0x0b, 0x6c, 0x33, 0x0e, 0x08, 0x77, + 0x66, 0x52, 0x1f, 0x48, 0x0c, 0x50, 0x4a, 0xc2, + 0x99, 0x0a, 0x15, 0x86, 0xc3, 0x9b, 0x7a, 0x5f, + 0xfb, 0x58, 0xbd, 0x63, 0x0c, 0xbe, 0x83, 0x40, + 0x8f, 0xba, 0x39, 0xfb, 0x45, 0xb9, 0xf7, 0x96, + 0x62, 0xec, 0x7e, 0x77, 0xa4, 0xfb, 0xe1, 0x86, + 0x5c, 0x0a, 0xae, 0x32, 0xbd, 0x79, 0x76, 0x8b }; static const byte ml_dsa_44_good_sig[] = { - 0xfc, 0x2d, 0xa0, 0x06, 0x85, 0xc2, 0xfc, - 0x92, 0x47, 0x77, 0x0b, 0x39, 0xbf, 0xe5, - 0xba, 0xd4, 0x44, 0xbf, 0xde, 0xce, 0x1f, - 0x04, 0xa2, 0x87, 0xed, 0x4a, 0xce, 0x0e, - 0xf3, 0x95, 0x61, 0x1e, 0x66, 0x4e, 0x9a, - 0x5d, 0x00, 0x31, 0x32, 0xf0, 0x90, 0x3d, - 0x7e, 0xf2, 0x9d, 0xe2, 0x93, 0xa1, 0xc8, - 0x64, 0x36, 0xf2, 0x59, 0xc7, 0x9e, 0xb6, - 0xb3, 0x6f, 0xe5, 0x80, 0x8d, 0x92, 0x77, - 0xd6, 0xb6, 0xe4, 0xc5, 0x5e, 0x79, 0x45, - 0x4b, 0xd0, 0xfe, 0x53, 0x55, 0xb6, 0x66, - 0x88, 0xfe, 0x95, 0x40, 0x07, 0xfd, 0xdb, - 0x40, 0x33, 0x39, 0x67, 0x03, 0x30, 0x8e, - 0x80, 0x4e, 0xa7, 0x0e, 0xe4, 0x05, 0x04, - 0xc5, 0x33, 0x72, 0x47, 0x5b, 0x85, 0x0f, - 0xe1, 0xeb, 0x98, 0x1a, 0x76, 0x79, 0x84, - 0xce, 0x26, 0x66, 0xe8, 0x92, 0xc9, 0x1f, - 0x40, 0x96, 0x72, 0xfe, 0x61, 0xae, 0xba, - 0x84, 0x70, 0xb7, 0x92, 0x2f, 0x7e, 0xc8, - 0xe8, 0xe4, 0x34, 0x73, 0xd4, 0x69, 0x57, - 0x3e, 0x28, 0x2b, 0x18, 0x0f, 0xef, 0xb1, - 0x06, 0xe2, 0xf8, 0x79, 0x70, 0x5a, 0x84, - 0x84, 0x6c, 0xb3, 0x57, 0x5b, 0x18, 0x42, - 0xdf, 0xd5, 0xdb, 0xf8, 0x35, 0x5f, 0x7b, - 0x23, 0x25, 0x2f, 0x0f, 0x17, 0x0b, 0x9a, - 0xb6, 0xe8, 0x31, 0x30, 0x6b, 0x90, 0x06, - 0x2c, 0xfd, 0xca, 0xaa, 0xa6, 0xc3, 0xdc, - 0x88, 0xa7, 0x31, 0x74, 0x67, 0xe2, 0x64, - 0x8f, 0x5c, 0xc4, 0xc0, 0x4d, 0x34, 0x15, - 0x0d, 0xd2, 0x23, 0x69, 0xfc, 0x6e, 0xbb, - 0x82, 0xca, 0xc4, 0xee, 0xf1, 0x14, 0xc1, - 0xd4, 0x5a, 0x71, 0x78, 0x9b, 0x40, 0x01, - 0xb9, 0xe4, 0x6e, 0x68, 0xf6, 0x13, 0xca, - 0xc1, 0xea, 0x70, 0x71, 0x3d, 0xc9, 0x1a, - 0x62, 0xb9, 0xa9, 0xe0, 0x1e, 0xe2, 0x34, - 0xf2, 0x9a, 0xf7, 0x23, 0xb3, 0xc1, 0xca, - 0x35, 0x0e, 0x5e, 0xa7, 0xd1, 0x3d, 0xea, - 0x51, 0xdc, 0xe2, 0x0e, 0xfc, 0x7d, 0x26, - 0x75, 0xec, 0x9a, 0x6e, 0x40, 0x1f, 0x60, - 0x06, 0xd7, 0x56, 0xf8, 0xa4, 0x2a, 0x82, - 0x9c, 0xef, 0x51, 0x4a, 0xe1, 0x01, 0x2b, - 0xb0, 0x8b, 0x34, 0x7b, 0xe1, 0x63, 0xa4, - 0xcc, 0x72, 0x81, 0xd9, 0xb4, 0x20, 0xcc, - 0x60, 0xe2, 0x15, 0x6d, 0xc7, 0x6c, 0x75, - 0x65, 0x4d, 0xb6, 0xc0, 0x36, 0x49, 0x87, - 0x06, 0x3e, 0xca, 0x1c, 0x32, 0x36, 0x2f, - 0xe3, 0xf6, 0x06, 0x0a, 0xb1, 0xd2, 0xfb, - 0xee, 0x4e, 0xd7, 0xce, 0x65, 0xcc, 0x89, - 0xf2, 0x77, 0x14, 0x27, 0x27, 0x84, 0x52, - 0x97, 0x1b, 0x89, 0x17, 0x31, 0x8d, 0xc4, - 0x0f, 0xc7, 0xc6, 0x45, 0x44, 0x9a, 0x97, - 0xd3, 0x88, 0x71, 0x73, 0x97, 0x64, 0xa6, - 0xe6, 0x3d, 0xf2, 0xd3, 0x7f, 0x7f, 0xfa, - 0x4f, 0xf4, 0xe9, 0x76, 0x8a, 0x2a, 0xfe, - 0x28, 0x8e, 0xa5, 0xb3, 0x46, 0x2b, 0xad, - 0x50, 0x5e, 0x12, 0xcd, 0xf8, 0x46, 0xe4, - 0x06, 0x12, 0xc2, 0xb8, 0xcd, 0x04, 0x76, - 0x07, 0x7c, 0xed, 0x2f, 0x0f, 0xd6, 0x97, - 0x31, 0xa4, 0x0c, 0x18, 0x85, 0x75, 0xd3, - 0x55, 0xfd, 0xe3, 0x1a, 0xbf, 0x43, 0xde, - 0x20, 0xa9, 0x19, 0xcd, 0x03, 0x01, 0xdf, - 0x04, 0x71, 0x09, 0x94, 0x99, 0x51, 0xb0, - 0x8e, 0x32, 0x80, 0xe6, 0x64, 0x4b, 0xdf, - 0xa5, 0xec, 0xfa, 0xce, 0xf6, 0xf3, 0xce, - 0x51, 0xe8, 0x6d, 0x03, 0x1e, 0x69, 0x59, - 0xef, 0x20, 0x98, 0x71, 0xe2, 0xc3, 0xec, - 0x19, 0x03, 0xa9, 0x2d, 0x12, 0x21, 0x79, - 0x7e, 0xb0, 0xcb, 0x76, 0x68, 0x2f, 0x11, - 0x01, 0x2b, 0x11, 0xef, 0xd6, 0xb7, 0x8b, - 0x5e, 0x31, 0x78, 0x7b, 0x2d, 0xe6, 0x4a, - 0xfb, 0xc1, 0xbb, 0x78, 0x92, 0x11, 0xcb, - 0x91, 0x97, 0x52, 0x1b, 0x8e, 0xfb, 0x59, - 0x02, 0x22, 0xbe, 0xf7, 0x33, 0xaa, 0x7b, - 0xfd, 0x93, 0xf7, 0xa8, 0x9b, 0xfc, 0x99, - 0x36, 0x22, 0x04, 0x1e, 0xdc, 0xa3, 0x2b, - 0xe6, 0xac, 0x2e, 0x4b, 0x38, 0x0a, 0x25, - 0xde, 0x3d, 0x8e, 0x0b, 0x95, 0x04, 0x48, - 0x3d, 0x66, 0x52, 0x99, 0x79, 0xe1, 0x8d, - 0xe0, 0xa7, 0xd5, 0x23, 0x0d, 0x45, 0x89, - 0x88, 0xa9, 0x59, 0x4e, 0xc7, 0x64, 0x39, - 0x93, 0xdd, 0xcb, 0xfe, 0x97, 0xe7, 0x7d, - 0xab, 0x61, 0x08, 0xf7, 0x7a, 0xff, 0x10, - 0x1d, 0x8d, 0x11, 0xa9, 0x97, 0xbd, 0x16, - 0xb5, 0x6c, 0x84, 0x71, 0x61, 0x72, 0x36, - 0x51, 0xe7, 0x43, 0x8b, 0x15, 0xb2, 0x48, - 0x6a, 0x14, 0x8a, 0xbe, 0x92, 0xa7, 0xfa, - 0xce, 0x02, 0x1a, 0x7f, 0xc5, 0xdb, 0x76, - 0x0a, 0x4c, 0xc7, 0x20, 0x2a, 0x34, 0xf4, - 0x92, 0x3b, 0x34, 0x69, 0x71, 0x3d, 0xe1, - 0xf2, 0x2f, 0x52, 0xe1, 0x48, 0xbe, 0x27, - 0x47, 0x1d, 0x55, 0x96, 0x6e, 0xa3, 0x39, - 0xc6, 0xd8, 0x12, 0xe0, 0xb2, 0x93, 0x56, - 0xef, 0x10, 0xf4, 0xa6, 0xf4, 0x5f, 0xa9, - 0xfd, 0x5d, 0x01, 0x87, 0xb8, 0xe5, 0x4f, - 0x86, 0x2c, 0xa5, 0x09, 0xfc, 0x29, 0x84, - 0x5b, 0x44, 0xf9, 0x8d, 0x9c, 0xbb, 0x19, - 0x97, 0x52, 0xbb, 0xac, 0x19, 0x57, 0x68, - 0x7d, 0x74, 0xb5, 0x4f, 0xda, 0x8a, 0x9c, - 0xcf, 0x5d, 0x7b, 0xd9, 0xf0, 0xb3, 0x11, - 0x76, 0x50, 0x03, 0x06, 0x44, 0xe7, 0x68, - 0x35, 0xe9, 0x14, 0x20, 0xbd, 0x0d, 0x90, - 0x96, 0x21, 0xa1, 0x17, 0x8f, 0xf7, 0x50, - 0x6c, 0xc0, 0x76, 0x3d, 0x34, 0x8d, 0xf2, - 0x75, 0xf0, 0xa2, 0x6c, 0x8a, 0xc1, 0x56, - 0x95, 0xb2, 0xd9, 0x87, 0xf2, 0xe4, 0x80, - 0x25, 0xc7, 0x97, 0xd2, 0xd2, 0xf8, 0x1c, - 0x7a, 0x48, 0x70, 0x99, 0x6b, 0xf2, 0x50, - 0x83, 0xf3, 0x10, 0xb1, 0x9b, 0x6d, 0x75, - 0x53, 0x86, 0x23, 0xc9, 0x60, 0x4d, 0x73, - 0xc7, 0x52, 0x90, 0x12, 0x6b, 0x92, 0x2d, - 0x35, 0xbc, 0x4d, 0x86, 0x67, 0xfe, 0x35, - 0x11, 0x6c, 0xbb, 0x9b, 0x76, 0xaf, 0x26, - 0xae, 0x50, 0x23, 0x76, 0x68, 0x16, 0x80, - 0xf0, 0xa4, 0xcc, 0x76, 0x6b, 0xf3, 0x99, - 0x04, 0x8b, 0x39, 0xf2, 0xa6, 0xa9, 0x72, - 0x6f, 0xbe, 0xa8, 0xdb, 0x53, 0xf3, 0x93, - 0x00, 0xac, 0x3e, 0x8f, 0xdd, 0x68, 0x9e, - 0x2f, 0xe3, 0x48, 0x0b, 0x11, 0xe2, 0x9a, - 0xfa, 0x98, 0x32, 0x40, 0x26, 0xf8, 0x83, - 0xc6, 0x00, 0x02, 0x7d, 0xb5, 0xd2, 0xd4, - 0xdd, 0xc6, 0x02, 0xec, 0xb3, 0x98, 0xd6, - 0x8e, 0xab, 0x75, 0x06, 0x37, 0x97, 0x4c, - 0x50, 0xc5, 0xe1, 0x43, 0x34, 0xd6, 0xbd, - 0xb6, 0xfc, 0xb7, 0x04, 0x0d, 0xd8, 0x35, - 0xb4, 0x3e, 0x0e, 0x43, 0x22, 0x83, 0xf5, - 0x5d, 0x2e, 0x0a, 0x8f, 0xa0, 0xec, 0x17, - 0xd9, 0xa1, 0x84, 0x98, 0x32, 0x5c, 0x99, - 0x66, 0x05, 0x70, 0x9a, 0xa4, 0x9b, 0xbe, - 0xd3, 0x3d, 0x2a, 0x13, 0xb1, 0x96, 0x37, - 0x4f, 0xe7, 0x6f, 0x6b, 0x5e, 0x80, 0xe4, - 0xb6, 0x98, 0x56, 0xed, 0xff, 0x5b, 0x21, - 0x5f, 0x79, 0x9a, 0x0f, 0x53, 0x69, 0x76, - 0xdb, 0xc0, 0x12, 0x9c, 0xed, 0xd4, 0x00, - 0x64, 0xca, 0xf4, 0xc3, 0x17, 0x49, 0xbb, - 0xef, 0xbc, 0x7b, 0x73, 0x24, 0x4f, 0x6e, - 0xcf, 0x25, 0x49, 0x30, 0x4f, 0x9a, 0xb7, - 0x2a, 0x2f, 0xc2, 0x69, 0x74, 0xe5, 0xa6, - 0xd7, 0x29, 0x4d, 0x80, 0xe6, 0xf6, 0x66, - 0x4b, 0xdf, 0xef, 0xfd, 0xb5, 0xaa, 0x53, - 0x75, 0x0e, 0xf5, 0x92, 0xb3, 0x30, 0x3d, - 0x5d, 0xa8, 0x49, 0x74, 0xa2, 0x13, 0xb3, - 0x99, 0x7e, 0xf9, 0x34, 0x08, 0xc2, 0xa6, - 0xc9, 0xd1, 0xb7, 0x65, 0xf4, 0xa9, 0xda, - 0x11, 0x07, 0x89, 0x08, 0x92, 0xdf, 0x1a, - 0x8d, 0xd7, 0x1e, 0xe9, 0xa3, 0x5c, 0x66, - 0x79, 0xa0, 0x2d, 0xd1, 0xd9, 0x65, 0xa2, - 0xd3, 0x47, 0xb1, 0xa1, 0xf4, 0xa1, 0x18, - 0x7f, 0xb0, 0xd1, 0x20, 0x05, 0x06, 0x6f, - 0xda, 0xe3, 0xef, 0xee, 0x47, 0xdf, 0x80, - 0x22, 0x14, 0x4b, 0xc2, 0xe4, 0xea, 0x02, - 0xe7, 0x06, 0xc8, 0x2d, 0x2d, 0xbd, 0xd2, - 0xef, 0xd3, 0x3b, 0xf0, 0xc8, 0xc1, 0x04, - 0x53, 0x81, 0x27, 0xb2, 0xf2, 0xf8, 0x5d, - 0xe1, 0x27, 0xd6, 0xd8, 0x2e, 0x0d, 0x43, - 0xf4, 0xf0, 0x7a, 0x8c, 0x78, 0x3f, 0x23, - 0x4d, 0x05, 0xf6, 0xc6, 0x9a, 0xc1, 0x19, - 0x58, 0x48, 0x02, 0x71, 0xc4, 0xf1, 0x16, - 0xc2, 0xbf, 0xc2, 0xf5, 0xa6, 0x70, 0x25, - 0x8b, 0x6c, 0x31, 0xa6, 0x2b, 0x6a, 0x1f, - 0x26, 0x4a, 0x6b, 0x05, 0x67, 0xa9, 0x5e, - 0xa6, 0xc7, 0x19, 0xf0, 0x6f, 0xc2, 0xa4, - 0x07, 0xe1, 0xf8, 0xb6, 0x70, 0x79, 0x85, - 0x97, 0x1f, 0xc2, 0x97, 0xf3, 0x57, 0x3d, - 0xd1, 0x70, 0xb1, 0xe8, 0x43, 0x11, 0xe6, - 0x2f, 0x8a, 0x12, 0x97, 0xe1, 0x1f, 0x86, - 0x33, 0xa1, 0x30, 0xb3, 0x8e, 0xd7, 0x43, - 0x99, 0x35, 0xd3, 0x48, 0x04, 0x29, 0xa3, - 0xf3, 0x2c, 0x0e, 0xda, 0x66, 0xc8, 0xa9, - 0xd3, 0x28, 0x7f, 0xf0, 0xaa, 0x53, 0xc8, - 0x4b, 0xa3, 0xde, 0xcc, 0x5f, 0xae, 0x9b, - 0x2f, 0x20, 0xf7, 0x9a, 0x41, 0xb7, 0xdb, - 0x7a, 0x92, 0xa1, 0x45, 0x2c, 0x49, 0xb7, - 0x2d, 0xe5, 0x6e, 0x84, 0xb1, 0xa4, 0x6e, - 0xea, 0xf9, 0xca, 0xc6, 0x0f, 0xd3, 0xdc, - 0xad, 0x79, 0xf4, 0x3b, 0xc0, 0x8c, 0x8c, - 0x6f, 0xdf, 0x2c, 0xbb, 0x2a, 0x9f, 0x74, - 0x2f, 0x31, 0x7b, 0x05, 0xc5, 0xc4, 0x22, - 0xfd, 0xfc, 0xdf, 0x95, 0x3b, 0x21, 0x41, - 0xab, 0x5b, 0xe9, 0x37, 0xdf, 0xd3, 0x4c, - 0x97, 0x73, 0xac, 0xbd, 0x82, 0x97, 0xd0, - 0x00, 0x55, 0x47, 0xa4, 0x67, 0x12, 0xcd, - 0xe3, 0x01, 0x31, 0xe6, 0x1c, 0x61, 0xf8, - 0xa4, 0xce, 0x23, 0xed, 0xeb, 0x8f, 0x57, - 0xbf, 0x97, 0x4b, 0x26, 0x75, 0xa0, 0x4b, - 0xf6, 0x7e, 0xda, 0x1c, 0x90, 0x8a, 0xc4, - 0xf4, 0x60, 0xfc, 0x65, 0x45, 0x8c, 0x1b, - 0x5c, 0x65, 0xc4, 0x5d, 0x99, 0x9a, 0xed, - 0x62, 0xd6, 0x74, 0x43, 0xac, 0x5e, 0x0c, - 0xfd, 0x7d, 0xf2, 0x4f, 0xc3, 0x02, 0xc8, - 0x24, 0xa7, 0x17, 0x49, 0xf9, 0xdd, 0xc9, - 0x64, 0x71, 0x08, 0xb9, 0xac, 0x47, 0x3d, - 0x6a, 0x4f, 0xdc, 0xa6, 0x56, 0x00, 0x01, - 0x53, 0x2d, 0xca, 0x32, 0x4e, 0x40, 0xec, - 0x14, 0x03, 0x69, 0x75, 0xfa, 0x93, 0x49, - 0x98, 0x04, 0x25, 0x29, 0xe5, 0x78, 0x6e, - 0x3e, 0x99, 0x58, 0x18, 0x48, 0xf3, 0x29, - 0x56, 0x8d, 0x23, 0xd1, 0x5d, 0xb2, 0x2a, - 0x74, 0xa7, 0x53, 0xc5, 0xc6, 0xc4, 0x12, - 0xfe, 0x65, 0x6c, 0xde, 0xc3, 0x6c, 0x18, - 0xde, 0xc3, 0x97, 0xaa, 0xed, 0x69, 0x3c, - 0x4d, 0xc9, 0xa9, 0x63, 0xa9, 0x4d, 0x91, - 0x63, 0xa3, 0x1c, 0x87, 0x36, 0x19, 0x4a, - 0xc5, 0xd1, 0xcb, 0xf4, 0x88, 0xfd, 0xa0, - 0x9b, 0x37, 0x9a, 0x7e, 0xcc, 0x09, 0xac, - 0x3b, 0xf0, 0xf5, 0xb5, 0x15, 0x72, 0x47, - 0xb0, 0x42, 0x0d, 0xed, 0x19, 0x42, 0x93, - 0x5a, 0x56, 0xbf, 0x2c, 0x4b, 0xec, 0xf4, - 0x13, 0x30, 0x0b, 0xdf, 0x0e, 0xc1, 0x22, - 0xa5, 0x6c, 0xf4, 0xcf, 0x09, 0x83, 0xe2, - 0xd0, 0x05, 0x62, 0x8d, 0xda, 0xea, 0x79, - 0xa9, 0x6c, 0xe1, 0x90, 0xc0, 0xe7, 0x6d, - 0x63, 0x8e, 0xe5, 0xe0, 0xa9, 0x67, 0x80, - 0xb7, 0x80, 0x43, 0xfc, 0xa1, 0x11, 0x6d, - 0xc9, 0x91, 0xa3, 0xcb, 0x1a, 0x6e, 0xf8, - 0x6e, 0xdb, 0xf0, 0x7d, 0xeb, 0x45, 0x6a, - 0xee, 0xd8, 0x3e, 0x6b, 0x9a, 0xc4, 0xcd, - 0x7b, 0x35, 0x19, 0x73, 0x14, 0x22, 0x47, - 0x86, 0x54, 0x34, 0xc9, 0x02, 0x49, 0xe6, - 0xb9, 0x45, 0xf7, 0x2c, 0xf7, 0xa4, 0x12, - 0xc4, 0x7a, 0x95, 0x41, 0x54, 0x8d, 0x51, - 0xc5, 0x1a, 0x19, 0x75, 0x0c, 0x11, 0x03, - 0xd0, 0x6f, 0x56, 0x04, 0xb2, 0x87, 0x21, - 0xdb, 0x47, 0xed, 0x9b, 0xe8, 0xec, 0xa3, - 0xe1, 0x74, 0x3e, 0x21, 0x50, 0xf2, 0x09, - 0x2c, 0x5e, 0x3d, 0xca, 0xa7, 0x31, 0x7c, - 0xbd, 0xe4, 0xf1, 0x15, 0x0d, 0xe6, 0x3d, - 0x4c, 0x8e, 0x36, 0x45, 0xf7, 0x08, 0x3d, - 0x56, 0x63, 0xb6, 0x99, 0x46, 0x34, 0x48, - 0xfa, 0xcf, 0x88, 0xe5, 0x43, 0xf7, 0x88, - 0xd5, 0x55, 0x13, 0xfe, 0x79, 0x02, 0x49, - 0x1e, 0x82, 0x45, 0x45, 0x29, 0x8e, 0x0a, - 0x7c, 0x77, 0x51, 0x1b, 0x8e, 0x75, 0xd5, - 0xd6, 0x61, 0xff, 0xa5, 0xfe, 0x59, 0x48, - 0xbf, 0xfc, 0xf2, 0xcd, 0x37, 0x09, 0x4c, - 0xb6, 0xfc, 0xb0, 0x20, 0x5f, 0x12, 0x7a, - 0x3f, 0x64, 0x96, 0xdb, 0xc8, 0xe8, 0xd0, - 0x11, 0x19, 0x47, 0x95, 0x2d, 0x3d, 0xbf, - 0x56, 0x9c, 0x23, 0x30, 0x07, 0x1f, 0x2c, - 0x04, 0x5c, 0x7e, 0x4e, 0x2e, 0xa6, 0x20, - 0x38, 0xa0, 0x88, 0x47, 0x8a, 0x3f, 0x8f, - 0x8a, 0xe7, 0x6d, 0x0a, 0xf1, 0x2d, 0xd6, - 0x10, 0x23, 0x01, 0x62, 0x71, 0x5a, 0xbb, - 0x51, 0x98, 0xa1, 0x27, 0x7d, 0xba, 0x5f, - 0xe4, 0xdc, 0xd6, 0xd7, 0x4c, 0x1a, 0xe0, - 0x4d, 0xe1, 0xee, 0x61, 0xb7, 0xc5, 0x50, - 0x92, 0x99, 0xc7, 0x7b, 0x18, 0xf9, 0x89, - 0x2b, 0x57, 0xf9, 0xe9, 0xac, 0x23, 0x6e, - 0xff, 0xbd, 0x5a, 0x93, 0xdf, 0x15, 0x74, - 0x92, 0x0b, 0x76, 0x84, 0x96, 0x94, 0x1b, - 0x8f, 0xe4, 0x6e, 0x2b, 0xd7, 0x47, 0xfd, - 0x24, 0x3b, 0xe4, 0xe4, 0x99, 0xf9, 0x0b, - 0xf9, 0x29, 0x25, 0x25, 0x6a, 0xc0, 0x1e, - 0xb8, 0x8c, 0xd6, 0xd0, 0x6e, 0x13, 0x86, - 0xa8, 0x7c, 0xc3, 0x31, 0x30, 0x2e, 0x9b, - 0x51, 0xc1, 0x21, 0xea, 0x15, 0x8e, 0xd8, - 0x06, 0xa2, 0xe9, 0x12, 0x9f, 0xcb, 0x6b, - 0x24, 0xef, 0x4e, 0x19, 0x6c, 0xa5, 0x98, - 0x47, 0x8b, 0x4d, 0xbe, 0x00, 0x0c, 0x04, - 0xe3, 0x4d, 0x84, 0x64, 0x36, 0x20, 0x9f, - 0xde, 0xe2, 0x55, 0x89, 0x3e, 0x40, 0xe1, - 0xe3, 0x63, 0x0a, 0xe7, 0x15, 0x4c, 0xcd, - 0x4b, 0x63, 0x6f, 0x70, 0xc2, 0x84, 0x30, - 0x5d, 0x22, 0xd0, 0xe4, 0x65, 0xfb, 0x8a, - 0x07, 0x1a, 0x54, 0xf5, 0x4b, 0x65, 0xad, - 0x64, 0x91, 0x6e, 0x23, 0x98, 0x31, 0x26, - 0x79, 0x70, 0x94, 0xff, 0xc0, 0x65, 0x70, - 0xb4, 0x9d, 0x74, 0x8e, 0x76, 0x6b, 0x9a, - 0x24, 0x28, 0x0d, 0x8a, 0x93, 0x87, 0x18, - 0x04, 0x10, 0xfd, 0x0b, 0xaf, 0xd3, 0x92, - 0xbb, 0xb5, 0x41, 0xd2, 0x87, 0xc7, 0x69, - 0x89, 0x0c, 0x52, 0xf8, 0x46, 0x70, 0x8e, - 0xf0, 0x99, 0x96, 0x57, 0x40, 0x9c, 0xef, - 0x9a, 0xc2, 0x63, 0x47, 0x13, 0x11, 0x68, - 0x40, 0xab, 0x36, 0x16, 0x53, 0xd6, 0x8f, - 0x58, 0x5a, 0xdd, 0x0c, 0xd7, 0x17, 0x6a, - 0x39, 0x34, 0xf1, 0xe7, 0x75, 0x3b, 0x41, - 0x7e, 0x5a, 0x70, 0xfe, 0x5b, 0x08, 0x30, - 0xf4, 0x7b, 0x1d, 0xd0, 0x70, 0xae, 0x18, - 0xad, 0xd4, 0xff, 0xbb, 0xa4, 0x31, 0xec, - 0x28, 0x72, 0x64, 0x9a, 0x24, 0x16, 0x30, - 0xe4, 0xc5, 0x3c, 0xb0, 0x3c, 0x81, 0x4f, - 0xb9, 0xfc, 0xe1, 0x3a, 0x05, 0x17, 0xb2, - 0x18, 0x4c, 0x98, 0x3b, 0xfc, 0x93, 0xf0, - 0x0d, 0xb6, 0x3c, 0x54, 0x7b, 0x10, 0xfd, - 0x7f, 0x63, 0xfe, 0xa5, 0xc6, 0xb5, 0x24, - 0xb4, 0xf2, 0x2f, 0xb2, 0x6f, 0x7f, 0xdb, - 0x01, 0xdb, 0xaf, 0x57, 0xdc, 0xdb, 0xf4, - 0xc8, 0x31, 0xb0, 0xdd, 0x05, 0x8b, 0x9b, - 0x6e, 0x7c, 0x5e, 0x5e, 0x31, 0x2c, 0x7f, - 0xbb, 0xa4, 0x26, 0x88, 0xe1, 0x55, 0x3d, - 0x8d, 0x36, 0x69, 0xb7, 0xc8, 0xcc, 0x05, - 0xfe, 0x6e, 0xcc, 0xcb, 0xfd, 0x81, 0x14, - 0x8b, 0xbc, 0x0c, 0xd4, 0x7e, 0xb4, 0x13, - 0xc0, 0xe2, 0x51, 0xf4, 0x07, 0xde, 0xc4, - 0x1c, 0xf0, 0xc8, 0x92, 0xd4, 0x38, 0xd7, - 0x1e, 0x57, 0xa7, 0x4b, 0xc7, 0xf8, 0xca, - 0xcc, 0x61, 0x86, 0x96, 0x50, 0x4e, 0x6a, - 0x71, 0xbd, 0x5f, 0xc6, 0x48, 0x8b, 0x6f, - 0xeb, 0x53, 0x50, 0xea, 0x35, 0x39, 0x79, - 0xcc, 0xee, 0xae, 0x81, 0x0f, 0xe2, 0xd2, - 0xbb, 0x81, 0x03, 0x8a, 0xeb, 0x98, 0xc2, - 0xad, 0xb7, 0xc0, 0x14, 0x68, 0xb9, 0x7e, - 0x8e, 0x30, 0x11, 0x43, 0x59, 0x8f, 0x04, - 0x2f, 0x7a, 0x99, 0x36, 0xd0, 0x75, 0x07, - 0x6b, 0x8e, 0xc2, 0x10, 0xac, 0xc6, 0x4d, - 0x30, 0x91, 0x9f, 0xde, 0x33, 0x0e, 0xe7, - 0xbc, 0xe5, 0x94, 0xbf, 0x80, 0xdb, 0xb7, - 0xe0, 0x8f, 0xb7, 0x74, 0xc3, 0x77, 0x18, - 0x76, 0x33, 0x34, 0xb8, 0xe4, 0x81, 0xa5, - 0xd9, 0xf7, 0x78, 0xba, 0xec, 0x62, 0x34, - 0xcb, 0x54, 0xbe, 0x90, 0xc1, 0x56, 0x59, - 0x22, 0x94, 0x5b, 0x1a, 0x8f, 0xc6, 0x8f, - 0xf2, 0x84, 0x1f, 0x61, 0x4e, 0xeb, 0x98, - 0x72, 0xdd, 0xde, 0xc9, 0xc6, 0xab, 0xd1, - 0xad, 0xd1, 0x02, 0x60, 0x82, 0x89, 0xba, - 0xf5, 0x1a, 0x6b, 0xde, 0x96, 0x19, 0x64, - 0x44, 0x0a, 0xd6, 0x27, 0x9f, 0x67, 0x96, - 0x44, 0xcc, 0x4b, 0xfd, 0x8f, 0x9e, 0xa1, - 0x1f, 0x06, 0xac, 0x2e, 0xcf, 0xdb, 0xc7, - 0x08, 0x5e, 0xe3, 0xa2, 0x59, 0xa2, 0x22, - 0xf1, 0x7a, 0xce, 0xf5, 0x30, 0x53, 0xc0, - 0xbb, 0x36, 0x13, 0x95, 0x69, 0xe2, 0x28, - 0x47, 0xad, 0xb1, 0x82, 0xfd, 0x14, 0xf6, - 0x6e, 0xed, 0x5b, 0xe0, 0xeb, 0x13, 0x5c, - 0xc6, 0x72, 0xd5, 0x2c, 0xd0, 0xae, 0xc3, - 0xad, 0xa9, 0x60, 0x2a, 0x68, 0x7b, 0x03, - 0x54, 0xc5, 0xd1, 0x71, 0xc4, 0x99, 0x48, - 0x75, 0x18, 0x1e, 0xda, 0x0a, 0x8b, 0xe1, - 0x2d, 0x67, 0x1f, 0xae, 0x91, 0xc0, 0x37, - 0x39, 0x8c, 0x7c, 0x9e, 0x42, 0xd3, 0x6e, - 0xaf, 0x7e, 0x8e, 0xa0, 0x01, 0x45, 0xc1, - 0xc6, 0xef, 0xc6, 0x2e, 0x87, 0x7b, 0x5a, - 0x60, 0xe0, 0xec, 0x3b, 0x76, 0x8e, 0xb3, - 0x0d, 0x57, 0x86, 0xa2, 0xc9, 0x1a, 0x1b, - 0x38, 0x6b, 0x75, 0x7a, 0x81, 0x8b, 0x97, - 0x99, 0xa1, 0xbb, 0xd8, 0xda, 0xdf, 0xea, - 0xef, 0xf0, 0xf9, 0x01, 0x08, 0x11, 0x18, - 0x26, 0x36, 0x4b, 0x52, 0x56, 0x68, 0x7b, - 0x98, 0xca, 0xd3, 0xd6, 0xef, 0xf6, 0x05, - 0x07, 0x09, 0x10, 0x1f, 0x21, 0x28, 0x32, - 0x39, 0x3a, 0x3c, 0x54, 0x77, 0x7b, 0x81, - 0x99, 0xa9, 0xb0, 0xb2, 0xce, 0xe5, 0xe7, - 0x1f, 0x23, 0x3f, 0x4e, 0x50, 0x5d, 0x71, - 0x7a, 0x7c, 0x91, 0xa7, 0xab, 0xae, 0xd0, - 0xd6, 0xe1, 0xe6, 0xf1, 0xf3, 0xfa, 0x00, - 0x00, 0x13, 0x24, 0x3a, 0x4e, + 0x09, 0xf0, 0xae, 0xbb, 0x25, 0xc7, 0xfc, 0xdd, + 0x93, 0x25, 0x9c, 0x50, 0xd9, 0x2e, 0x72, 0x5d, + 0x53, 0xf5, 0x29, 0xd7, 0x4c, 0xc2, 0xd6, 0x81, + 0x5c, 0xf3, 0x3f, 0x9a, 0x8a, 0xa9, 0x00, 0x21, + 0x6c, 0xc6, 0xb9, 0x72, 0xb7, 0x0e, 0x00, 0x55, + 0x9f, 0xd7, 0xae, 0x92, 0xc3, 0xbc, 0x8f, 0x2d, + 0x4f, 0x54, 0x87, 0x56, 0x52, 0xd3, 0xdd, 0xaf, + 0xe0, 0xff, 0xda, 0x80, 0x1b, 0xf3, 0x56, 0x90, + 0xdd, 0x07, 0x86, 0xad, 0xf7, 0xf3, 0x8e, 0xcf, + 0x3a, 0x57, 0x30, 0x52, 0xaa, 0xd2, 0xb1, 0xf0, + 0x66, 0xea, 0x67, 0xab, 0x94, 0x1d, 0x96, 0x04, + 0xaa, 0xcf, 0x0e, 0xb0, 0xbc, 0x7d, 0x8a, 0x4c, + 0x62, 0x21, 0x82, 0x81, 0x98, 0x63, 0x22, 0x91, + 0xb9, 0xfe, 0x53, 0x63, 0x8d, 0xdf, 0xe6, 0x19, + 0xc1, 0x54, 0x3b, 0xf0, 0xf5, 0xe4, 0xc4, 0x36, + 0x66, 0x2f, 0xcc, 0x4f, 0xed, 0xc6, 0x62, 0x7d, + 0x8b, 0x7b, 0x89, 0xac, 0x23, 0x0b, 0x40, 0x4e, + 0x2d, 0xdc, 0xe5, 0xa2, 0xbc, 0x8b, 0xac, 0xe7, + 0x0b, 0xaa, 0x15, 0xa0, 0x79, 0x4a, 0x97, 0x8a, + 0xc8, 0xb1, 0x31, 0xea, 0x29, 0x99, 0x14, 0x5d, + 0x5b, 0x8c, 0xc2, 0xd0, 0xc2, 0x29, 0xd0, 0x85, + 0xb9, 0x25, 0x16, 0x08, 0xe8, 0x41, 0xa7, 0x77, + 0x1a, 0xbf, 0x5a, 0x48, 0x5a, 0x7f, 0x97, 0x44, + 0x62, 0xb4, 0x68, 0x2e, 0x05, 0x48, 0xde, 0x0f, + 0x69, 0xcc, 0x05, 0x3c, 0xa4, 0x85, 0x20, 0x60, + 0xfd, 0x45, 0x6a, 0x14, 0xb9, 0x76, 0x8d, 0x48, + 0xe7, 0x71, 0xd0, 0xd7, 0xbe, 0xe3, 0x36, 0xd6, + 0x94, 0x5c, 0x22, 0x6e, 0x28, 0xc6, 0x34, 0x93, + 0xf4, 0x6c, 0xf2, 0x62, 0xbf, 0x8f, 0x6d, 0x07, + 0xff, 0x38, 0x92, 0x23, 0x19, 0x55, 0xd0, 0x66, + 0x72, 0x76, 0xc1, 0x43, 0xbc, 0x60, 0x5d, 0xaa, + 0x61, 0x10, 0xdb, 0x0c, 0x49, 0x7b, 0x99, 0xce, + 0x14, 0xe3, 0x0b, 0x80, 0xdc, 0x8a, 0x3d, 0xa5, + 0x3a, 0x0e, 0x29, 0x88, 0x09, 0x1f, 0x9c, 0x03, + 0x32, 0x13, 0xc2, 0xe1, 0x49, 0x26, 0xc7, 0x11, + 0xfa, 0x7f, 0x2d, 0x64, 0xfc, 0xf9, 0xaf, 0xd0, + 0x4d, 0xcf, 0x3a, 0x23, 0x49, 0xde, 0xf2, 0x5d, + 0xad, 0xf3, 0xde, 0xe0, 0x9a, 0xa2, 0x96, 0x0a, + 0x9d, 0x97, 0x39, 0x88, 0x60, 0x75, 0xec, 0x29, + 0x9b, 0x93, 0xfc, 0x80, 0xb3, 0xeb, 0xb0, 0xc6, + 0xa8, 0xea, 0x75, 0x67, 0xed, 0xbd, 0x42, 0x2a, + 0xed, 0x22, 0x27, 0xdb, 0x41, 0x3a, 0x94, 0x86, + 0xd7, 0x4a, 0xf1, 0x8f, 0xa5, 0x47, 0x38, 0xa3, + 0x3c, 0xe7, 0x17, 0x5d, 0xce, 0xdc, 0x32, 0x7c, + 0xe4, 0x05, 0x58, 0x98, 0x67, 0xc8, 0xaf, 0x35, + 0x5d, 0xf9, 0xc0, 0x10, 0x6d, 0x9d, 0xd3, 0x27, + 0x79, 0x3c, 0x1d, 0xdd, 0xfb, 0x53, 0x3c, 0x03, + 0x4c, 0xb3, 0x1b, 0x0b, 0x3a, 0x60, 0x80, 0xcd, + 0x9b, 0x1e, 0x5f, 0x3f, 0x29, 0xfa, 0xb1, 0x09, + 0x9a, 0x88, 0x58, 0x4a, 0xf5, 0xed, 0xe9, 0x7c, + 0x9d, 0x70, 0xbe, 0x57, 0xfb, 0x92, 0x12, 0xc9, + 0x8c, 0x6b, 0x77, 0xe2, 0x44, 0xc6, 0x82, 0x2a, + 0x29, 0xb3, 0x9c, 0xb0, 0x60, 0xda, 0x3d, 0xcd, + 0x4e, 0x49, 0x96, 0x8c, 0xd7, 0x2b, 0x29, 0x28, + 0x7b, 0xec, 0xf1, 0x46, 0x40, 0xf0, 0xe1, 0xd7, + 0x48, 0x9e, 0xdf, 0xfd, 0xa6, 0xd0, 0xaa, 0x35, + 0x94, 0x7a, 0x94, 0x57, 0xf3, 0xd4, 0x15, 0x19, + 0xd3, 0xc5, 0x35, 0x73, 0xc4, 0xf5, 0x86, 0x0d, + 0x2a, 0x5b, 0x67, 0x0d, 0x8d, 0xaa, 0x18, 0x3e, + 0xea, 0x9d, 0x80, 0xe7, 0xf8, 0xbb, 0x23, 0xea, + 0x5d, 0x1c, 0x4d, 0xb2, 0x58, 0x7e, 0xe5, 0xef, + 0x80, 0xc1, 0x63, 0x44, 0xaf, 0x1d, 0xed, 0xf6, + 0x92, 0x05, 0x0c, 0xda, 0xcc, 0x58, 0x39, 0x27, + 0xdd, 0x24, 0xac, 0x63, 0x23, 0x34, 0xaa, 0x2d, + 0xd0, 0x5b, 0xd7, 0x7f, 0x6d, 0xcb, 0x64, 0xed, + 0xb3, 0x9b, 0x05, 0x90, 0x79, 0xc2, 0x25, 0x68, + 0xed, 0xf6, 0xa8, 0x7e, 0x30, 0x4a, 0x46, 0x44, + 0xad, 0xc8, 0x12, 0x8d, 0x04, 0xc3, 0x11, 0x83, + 0x7e, 0x77, 0xef, 0x9c, 0xa2, 0xf9, 0x3b, 0x06, + 0x84, 0x7f, 0x72, 0xd9, 0x2f, 0x22, 0x95, 0xb7, + 0x7b, 0x4e, 0x35, 0x6a, 0xfa, 0x73, 0x7d, 0x88, + 0x5b, 0xac, 0x7b, 0xc5, 0x53, 0xc1, 0xfe, 0x6b, + 0x7c, 0x05, 0xc3, 0xe4, 0xae, 0x48, 0x1a, 0xea, + 0x6e, 0x51, 0x46, 0x1e, 0x82, 0x80, 0xde, 0x31, + 0xe1, 0x41, 0x71, 0x88, 0x41, 0xa7, 0xb2, 0xcd, + 0x3d, 0xf7, 0x5c, 0x4f, 0x4c, 0xfd, 0x3f, 0x6f, + 0x6c, 0x82, 0xc1, 0xba, 0xe0, 0xf0, 0xb4, 0x8c, + 0xd5, 0xb5, 0x32, 0xbf, 0x91, 0x49, 0x7e, 0x39, + 0x5e, 0x0a, 0xdf, 0x4b, 0xd6, 0x07, 0x72, 0xff, + 0x58, 0x65, 0x1b, 0x1f, 0xc6, 0x56, 0xd2, 0x00, + 0xec, 0x60, 0xd1, 0x22, 0xc9, 0x1a, 0xa4, 0xcc, + 0x26, 0xb4, 0xd1, 0x93, 0xbc, 0xfc, 0x52, 0xdf, + 0xa1, 0x23, 0x37, 0x9b, 0xa2, 0xa8, 0x8f, 0xf3, + 0x39, 0x03, 0xa5, 0x4c, 0xf0, 0x68, 0xe5, 0x95, + 0x62, 0xfb, 0xd8, 0x88, 0x39, 0xf6, 0x02, 0x0a, + 0x4e, 0x7c, 0xf0, 0xbf, 0x71, 0x99, 0x0f, 0x19, + 0x61, 0xd9, 0x39, 0xe8, 0x3f, 0x59, 0x22, 0x4a, + 0xaa, 0xdd, 0x03, 0xf8, 0x09, 0xb8, 0xaf, 0xd9, + 0xb9, 0x9c, 0x3f, 0xf1, 0xfe, 0x49, 0xae, 0x99, + 0x2f, 0xa2, 0x22, 0x5a, 0x3c, 0xe9, 0xe9, 0xf7, + 0xba, 0x2d, 0xeb, 0x1f, 0x6c, 0xa7, 0xe1, 0x87, + 0x2f, 0xa5, 0xff, 0xcf, 0x1c, 0x22, 0x8d, 0xf2, + 0x5f, 0x63, 0xf5, 0xbb, 0x36, 0x66, 0xcc, 0x62, + 0x89, 0x8e, 0xf7, 0x78, 0xc5, 0x97, 0x95, 0xde, + 0xec, 0x43, 0x39, 0x6e, 0x0d, 0xe0, 0x8e, 0xbd, + 0x2b, 0x3b, 0xe6, 0xff, 0xf5, 0x8f, 0x90, 0xd2, + 0xd2, 0xce, 0x3b, 0x6f, 0x78, 0xf5, 0xd3, 0x42, + 0xf3, 0x0f, 0x27, 0x4b, 0x2b, 0xe4, 0xd8, 0x0d, + 0x31, 0xfa, 0xba, 0xdc, 0x54, 0x21, 0x9a, 0xbf, + 0x1e, 0x1d, 0x06, 0x8e, 0xd9, 0x58, 0xce, 0x9a, + 0x71, 0x79, 0x4d, 0xcb, 0xfb, 0x99, 0x4b, 0x66, + 0xed, 0xef, 0x75, 0x20, 0x4d, 0x47, 0x9b, 0x40, + 0xd5, 0xcf, 0xd9, 0x00, 0xfe, 0x32, 0x45, 0xae, + 0x4b, 0x7e, 0x8e, 0x7b, 0xf9, 0xd4, 0xd4, 0x2e, + 0x1a, 0x2a, 0xac, 0x73, 0xdb, 0x79, 0xb7, 0x02, + 0x6a, 0x3d, 0xa2, 0xfe, 0x52, 0x27, 0x25, 0x43, + 0xd1, 0xb5, 0x48, 0x0e, 0xef, 0xf1, 0x0f, 0xe7, + 0x27, 0xc2, 0x59, 0x4e, 0x47, 0xe2, 0x12, 0xaa, + 0x1e, 0xae, 0xbc, 0x86, 0x22, 0x70, 0x33, 0xa5, + 0x50, 0x3f, 0xed, 0x3c, 0x98, 0xbb, 0xd5, 0xb3, + 0x3e, 0x43, 0x21, 0x8e, 0x3e, 0x8c, 0xcc, 0x0c, + 0xcf, 0x50, 0xcd, 0xeb, 0x1b, 0x9d, 0x0c, 0xc9, + 0xe3, 0x2f, 0xbb, 0x4b, 0x43, 0xfc, 0x37, 0x27, + 0xcb, 0xc9, 0x5a, 0xe9, 0x45, 0x92, 0x9d, 0xe9, + 0x60, 0x8f, 0x93, 0x1b, 0xd8, 0x6a, 0x68, 0x86, + 0xc2, 0x1d, 0x49, 0x92, 0x11, 0x29, 0x62, 0x14, + 0x15, 0x4c, 0xe9, 0x33, 0xe3, 0x70, 0x2d, 0x6b, + 0x8b, 0xb5, 0x22, 0x44, 0x82, 0xbe, 0x43, 0xe2, + 0x80, 0xfb, 0xb5, 0xfa, 0x6a, 0x30, 0x04, 0x20, + 0xb6, 0x58, 0xe1, 0xf4, 0x8c, 0xe6, 0x4c, 0x7c, + 0x8d, 0x38, 0xf6, 0xdd, 0x59, 0xfc, 0x5a, 0xd7, + 0x9f, 0x34, 0x92, 0xcc, 0xde, 0x65, 0x89, 0xa7, + 0xd9, 0x57, 0xf7, 0xf2, 0x71, 0x39, 0xaf, 0xb6, + 0x88, 0x02, 0x40, 0x24, 0x8b, 0x4f, 0xc5, 0xfc, + 0xdc, 0x5c, 0xc0, 0x1d, 0xa6, 0x68, 0x87, 0xe0, + 0x8f, 0xdc, 0xf0, 0xac, 0xd8, 0x5f, 0x1c, 0xb3, + 0x07, 0xac, 0x58, 0x97, 0x3f, 0x3e, 0x72, 0x19, + 0x18, 0x64, 0x55, 0x73, 0x11, 0x71, 0xd1, 0xa4, + 0xa6, 0x57, 0xb0, 0x27, 0xaf, 0xad, 0x8a, 0xf7, + 0xdf, 0xde, 0x1e, 0xdb, 0x31, 0xc9, 0x32, 0x85, + 0x90, 0x40, 0x3d, 0xfe, 0x64, 0x5d, 0xe3, 0x94, + 0x74, 0x98, 0xa7, 0xed, 0x84, 0x44, 0x13, 0x76, + 0xba, 0xe9, 0x09, 0x9a, 0x17, 0xe0, 0x38, 0x03, + 0x3b, 0x7a, 0xa7, 0x0e, 0x74, 0xbd, 0x93, 0xb1, + 0x85, 0x64, 0xc9, 0xc4, 0x22, 0xb9, 0xdf, 0x80, + 0xac, 0xa1, 0x17, 0xdb, 0x11, 0xdb, 0xfa, 0xeb, + 0x90, 0x3c, 0x28, 0xfb, 0xa2, 0x36, 0x76, 0x61, + 0x20, 0x00, 0x88, 0x15, 0xc0, 0x79, 0x9f, 0x7d, + 0x9f, 0x90, 0xdb, 0x79, 0xbf, 0x1c, 0xdf, 0x86, + 0xc9, 0x60, 0x8c, 0xea, 0xa6, 0x24, 0x81, 0xd6, + 0x6d, 0xd8, 0x8d, 0x17, 0x5f, 0x5c, 0x6d, 0x93, + 0xbc, 0xed, 0xe5, 0x41, 0x05, 0xbe, 0xc6, 0x0f, + 0x66, 0x50, 0xc3, 0xce, 0x7e, 0x6c, 0x80, 0x88, + 0xf5, 0x52, 0x61, 0xaf, 0xdb, 0xc0, 0x80, 0xbe, + 0x78, 0x49, 0x64, 0x39, 0x54, 0x26, 0xeb, 0xab, + 0x07, 0x4d, 0x38, 0x66, 0x06, 0x98, 0x58, 0xaa, + 0x40, 0xc4, 0x89, 0xb2, 0x08, 0x85, 0xf3, 0x14, + 0x58, 0x5d, 0x36, 0xf7, 0xf0, 0x6b, 0x72, 0x79, + 0x6d, 0xbe, 0x5e, 0x24, 0x68, 0xf1, 0x3c, 0xa2, + 0x82, 0x22, 0x6e, 0xc4, 0x46, 0x94, 0x8e, 0x00, + 0xcb, 0xc0, 0x07, 0x69, 0xa5, 0x6d, 0x57, 0x04, + 0x79, 0xeb, 0x06, 0x7a, 0x42, 0x20, 0x6e, 0xdc, + 0xb5, 0xa4, 0xdd, 0x74, 0xb3, 0x92, 0x16, 0x71, + 0x7d, 0x99, 0xfa, 0x26, 0x35, 0x57, 0xe2, 0x83, + 0xc2, 0xb6, 0xfb, 0x0a, 0xae, 0x22, 0xed, 0xe3, + 0x98, 0x65, 0x18, 0x32, 0xf8, 0xe5, 0xed, 0xa9, + 0xf9, 0x7d, 0xb8, 0xea, 0x21, 0x51, 0x6c, 0x70, + 0x4c, 0xfa, 0xec, 0x6d, 0x4c, 0xf4, 0xcb, 0x1c, + 0x43, 0xfb, 0xfc, 0xbb, 0xa9, 0xcb, 0xc5, 0x21, + 0xb3, 0x89, 0xd6, 0x4c, 0xc4, 0x42, 0xd1, 0x55, + 0x3d, 0x43, 0x74, 0xbf, 0xb7, 0x47, 0xb3, 0x5b, + 0x14, 0xc3, 0x8f, 0x42, 0x30, 0x57, 0xb0, 0x22, + 0x56, 0xbe, 0x8d, 0x88, 0x7e, 0x7d, 0x63, 0xc8, + 0xec, 0x01, 0x41, 0xd5, 0x9d, 0xb6, 0x7a, 0x3b, + 0xfe, 0x8b, 0x95, 0x94, 0xdb, 0xca, 0xf1, 0xb4, + 0x56, 0xd7, 0x83, 0xf4, 0x11, 0x05, 0x65, 0xde, + 0x7a, 0xa3, 0x5a, 0x7a, 0x70, 0xe4, 0xd2, 0xad, + 0xc0, 0xff, 0x3f, 0x66, 0x2e, 0x1a, 0x65, 0x38, + 0xda, 0x1f, 0x3f, 0xac, 0x04, 0x2f, 0x0f, 0xde, + 0x7e, 0x55, 0x05, 0x12, 0xe9, 0xe7, 0x69, 0xf9, + 0x34, 0x2c, 0x84, 0x97, 0xa8, 0x86, 0x0c, 0x24, + 0x32, 0x87, 0xfd, 0xbe, 0x67, 0xd1, 0x02, 0x21, + 0x3b, 0x33, 0xfd, 0x11, 0xb1, 0xca, 0x4f, 0xeb, + 0x40, 0x38, 0xf6, 0x19, 0x83, 0x9d, 0x73, 0x44, + 0x37, 0xd6, 0x69, 0x6d, 0x85, 0xda, 0xf7, 0x69, + 0xfb, 0x88, 0x2b, 0xe7, 0xe7, 0x3c, 0x18, 0xa8, + 0x13, 0xb7, 0xee, 0x5c, 0x50, 0x5b, 0xa3, 0x09, + 0x1c, 0xef, 0x8d, 0x37, 0x89, 0x75, 0x0f, 0x8b, + 0xea, 0x17, 0x02, 0x47, 0x21, 0xcb, 0xa8, 0x73, + 0x71, 0x23, 0x4c, 0xf7, 0x50, 0xdd, 0x21, 0xe5, + 0xdb, 0x40, 0x3a, 0x87, 0x40, 0x8d, 0x60, 0x89, + 0x9e, 0x20, 0x00, 0x58, 0xeb, 0xbb, 0x24, 0x9b, + 0x0a, 0x17, 0x8f, 0xf6, 0x56, 0x07, 0x11, 0x5b, + 0xa7, 0xcd, 0x93, 0x0a, 0x31, 0x3d, 0x1f, 0x45, + 0xa0, 0x08, 0x8f, 0x88, 0x34, 0xa5, 0x01, 0x3b, + 0xea, 0x07, 0xa3, 0x7b, 0x66, 0x3e, 0x96, 0xe8, + 0xf7, 0x4d, 0x63, 0x04, 0x55, 0x89, 0xf1, 0x02, + 0x1e, 0x4a, 0x21, 0xb1, 0x2b, 0x8c, 0x7f, 0x2e, + 0x0c, 0x64, 0x26, 0x36, 0xd8, 0x63, 0xab, 0xf5, + 0x22, 0xaf, 0xa9, 0xfa, 0xfa, 0x21, 0x4b, 0x7e, + 0x6f, 0x8c, 0xce, 0x98, 0xf2, 0x85, 0x3f, 0x2c, + 0x07, 0x90, 0xc3, 0x2c, 0x06, 0xc5, 0xde, 0xc8, + 0xc2, 0x7c, 0xd7, 0x9b, 0x64, 0x25, 0x8a, 0x9b, + 0x77, 0x07, 0xc7, 0x4c, 0xd7, 0x67, 0xff, 0xe6, + 0xdb, 0x17, 0xf5, 0xc4, 0x2a, 0x14, 0x44, 0x1a, + 0xff, 0xda, 0xe0, 0xa7, 0x09, 0x1c, 0xe9, 0x03, + 0xde, 0x4a, 0x59, 0xe4, 0xdf, 0xa3, 0x0d, 0x3a, + 0x43, 0xdf, 0x80, 0x82, 0x87, 0xfa, 0x75, 0xf5, + 0xe8, 0xef, 0x6f, 0xd0, 0x89, 0xdd, 0xa1, 0x75, + 0x17, 0x5b, 0x71, 0x47, 0xe8, 0x8d, 0xae, 0xf6, + 0x18, 0x7f, 0xb9, 0x24, 0x68, 0x3f, 0x17, 0x6b, + 0xa8, 0x30, 0x67, 0x7e, 0x02, 0x9b, 0xf6, 0x4d, + 0x03, 0xa8, 0xfb, 0x33, 0x2f, 0xb4, 0x65, 0x72, + 0x2a, 0x30, 0xa6, 0x93, 0x94, 0x7a, 0x41, 0x0f, + 0xd3, 0x67, 0x0b, 0xba, 0xa4, 0x49, 0x7c, 0xcf, + 0x1f, 0x59, 0x1e, 0x2e, 0x45, 0xd4, 0xa8, 0xb1, + 0x98, 0x2b, 0xd7, 0x6f, 0x55, 0xb8, 0xf2, 0x65, + 0x7b, 0x96, 0x18, 0xf7, 0x2e, 0xde, 0x9c, 0x39, + 0x7a, 0x08, 0x2e, 0xe7, 0x3c, 0x9e, 0x4a, 0xfe, + 0xba, 0x49, 0xce, 0xba, 0x65, 0x18, 0xae, 0xae, + 0x9b, 0xd5, 0xf5, 0xeb, 0xd3, 0xdc, 0xd7, 0x2c, + 0x92, 0x3c, 0xe2, 0x93, 0xb9, 0x69, 0xf2, 0x20, + 0xea, 0xbd, 0xa9, 0x01, 0x2b, 0x72, 0x7c, 0x93, + 0x6c, 0x1f, 0x80, 0x3a, 0xd2, 0x2d, 0xf6, 0xc1, + 0x31, 0x63, 0xd2, 0x2f, 0x6c, 0x1a, 0x54, 0x1f, + 0x74, 0xe6, 0xa0, 0xac, 0xb1, 0x04, 0x03, 0xb3, + 0x22, 0x19, 0x48, 0x0a, 0xa7, 0x55, 0x25, 0xc1, + 0x77, 0x28, 0xb9, 0xbe, 0xef, 0xa8, 0xc6, 0x2b, + 0xd5, 0x6c, 0x5d, 0x7b, 0x85, 0xcd, 0x10, 0x2d, + 0x9e, 0xfd, 0xb8, 0xa5, 0x10, 0x65, 0xf7, 0x29, + 0xa7, 0x41, 0x18, 0xc8, 0xc2, 0x23, 0xe5, 0xcb, + 0x96, 0x91, 0x8a, 0x7e, 0x45, 0x30, 0x6b, 0x91, + 0xf1, 0x88, 0xb3, 0x2e, 0x92, 0x96, 0x0a, 0x42, + 0x4a, 0x16, 0x9d, 0x0c, 0xa8, 0xa7, 0xe5, 0x64, + 0x38, 0x8a, 0x53, 0x41, 0x28, 0xbf, 0xd7, 0xa4, + 0x14, 0x05, 0x59, 0x11, 0x2e, 0x0f, 0xc8, 0x5c, + 0x97, 0x8d, 0xd3, 0x92, 0xbf, 0xb9, 0x05, 0xfa, + 0xff, 0x38, 0xbf, 0xd6, 0xc5, 0x22, 0xf8, 0xa4, + 0x75, 0x30, 0x45, 0x93, 0x14, 0xda, 0xc0, 0x7f, + 0xea, 0x24, 0xe0, 0x33, 0x68, 0xf2, 0x6d, 0xe1, + 0xb1, 0x0c, 0x7d, 0x40, 0xaa, 0x16, 0x53, 0xa1, + 0xf6, 0x26, 0xb1, 0x25, 0xe8, 0x83, 0xe9, 0xea, + 0xea, 0xd2, 0x5a, 0x24, 0xda, 0xe2, 0x6e, 0xd1, + 0x2a, 0x87, 0x64, 0x48, 0x13, 0x55, 0xb1, 0x2c, + 0x1a, 0x58, 0x43, 0x5b, 0x63, 0x14, 0x3e, 0x02, + 0xf0, 0xcf, 0x61, 0x7d, 0x83, 0x81, 0xb9, 0x65, + 0x4b, 0x72, 0xee, 0xff, 0xfb, 0x6a, 0xbe, 0x71, + 0x26, 0x56, 0x28, 0x13, 0x9f, 0x31, 0xda, 0x8c, + 0x2f, 0xdb, 0x21, 0xbe, 0x4b, 0x66, 0xbb, 0xad, + 0x7a, 0x13, 0x55, 0x92, 0x7c, 0xb5, 0x6e, 0x5f, + 0x45, 0x1b, 0x64, 0x2d, 0xad, 0x6d, 0x32, 0x07, + 0xe4, 0x91, 0xdc, 0x0c, 0x1b, 0x5f, 0xcd, 0x86, + 0xe2, 0x99, 0x2b, 0xb9, 0x7e, 0x60, 0xbd, 0xad, + 0xa1, 0x5c, 0xab, 0x7f, 0x76, 0xf3, 0x77, 0xba, + 0x73, 0x7f, 0x6a, 0x88, 0x4e, 0xff, 0x40, 0x72, + 0x7a, 0x4d, 0x9b, 0x20, 0x2d, 0xc9, 0x2a, 0x30, + 0x0f, 0x8f, 0x0f, 0xc9, 0x79, 0xc8, 0xc3, 0x8a, + 0x83, 0x52, 0xff, 0x66, 0x7a, 0x42, 0x04, 0x08, + 0x6e, 0x5b, 0x13, 0xda, 0xb9, 0xb6, 0x2d, 0x45, + 0x77, 0x9a, 0xa0, 0x2b, 0xc1, 0x87, 0xc2, 0xa6, + 0x35, 0x7f, 0x39, 0x34, 0x2e, 0x95, 0x1e, 0x8c, + 0xbf, 0x89, 0x6d, 0xcf, 0x82, 0xb8, 0x9f, 0x9b, + 0xd1, 0xbc, 0xa2, 0x55, 0x83, 0xf4, 0xca, 0x21, + 0x11, 0x8f, 0x28, 0xa9, 0x5e, 0x28, 0x23, 0xb4, + 0x43, 0x60, 0xb6, 0x11, 0x1a, 0x6f, 0xb4, 0xd1, + 0x96, 0xc8, 0x79, 0xf2, 0x39, 0x8b, 0x82, 0xae, + 0xe0, 0xc2, 0xe4, 0xf9, 0xfb, 0xf8, 0x85, 0x64, + 0x28, 0xad, 0xb5, 0xfd, 0x37, 0xc5, 0x21, 0x38, + 0x31, 0x94, 0x0d, 0xbe, 0xd8, 0xaf, 0x9b, 0x8a, + 0x7d, 0xfb, 0x56, 0xd8, 0x23, 0xf7, 0x55, 0x55, + 0xe7, 0xd9, 0x63, 0x65, 0xfd, 0x64, 0x2e, 0x8a, + 0x1d, 0x1b, 0xac, 0x4e, 0x2f, 0xef, 0x1b, 0x77, + 0xca, 0x01, 0xd6, 0xfc, 0xb0, 0x11, 0xda, 0x6b, + 0xef, 0x9f, 0x76, 0x81, 0x3e, 0x3f, 0x26, 0x4b, + 0x3b, 0x97, 0xa0, 0x7d, 0xd6, 0xcf, 0x51, 0x0d, + 0x06, 0xf7, 0xf5, 0x88, 0x64, 0x34, 0x7a, 0xe3, + 0xb9, 0x16, 0xc3, 0x06, 0x04, 0xf3, 0xe9, 0x55, + 0xd2, 0xff, 0x49, 0xec, 0x57, 0x84, 0x1f, 0x39, + 0x28, 0x71, 0x57, 0x87, 0x40, 0xf2, 0x7a, 0x30, + 0xa0, 0x88, 0xba, 0x6c, 0xb1, 0x09, 0x30, 0x3a, + 0x11, 0x75, 0xcf, 0xbe, 0x4c, 0xf7, 0xf7, 0xca, + 0x44, 0x52, 0x91, 0xd0, 0x4c, 0x12, 0x3e, 0x3a, + 0x4b, 0x31, 0x20, 0xfe, 0x27, 0xd2, 0x08, 0x5b, + 0x83, 0x7b, 0x82, 0xd3, 0xa3, 0x72, 0xba, 0x2f, + 0x5f, 0xa3, 0x71, 0xcd, 0x8d, 0x3f, 0x94, 0xce, + 0x86, 0xa8, 0x6b, 0x43, 0xb7, 0x06, 0x80, 0x70, + 0x64, 0x06, 0xab, 0x54, 0xce, 0xb5, 0x29, 0xaf, + 0x73, 0xf7, 0x0f, 0x65, 0x70, 0xa7, 0x84, 0x1a, + 0x0b, 0xdb, 0x0c, 0xa9, 0x20, 0xea, 0x06, 0x7a, + 0xba, 0x80, 0xc6, 0xae, 0x3e, 0x0a, 0x7b, 0xd6, + 0x21, 0x99, 0xe0, 0xae, 0x6e, 0x8f, 0x80, 0xa9, + 0x97, 0x27, 0x3d, 0x7e, 0xb2, 0xd8, 0x06, 0x10, + 0x36, 0x07, 0x64, 0x12, 0xd0, 0xc7, 0x91, 0xd2, + 0x81, 0x74, 0x22, 0x8b, 0x8f, 0xe0, 0x48, 0xc4, + 0xe1, 0x9b, 0x05, 0xc8, 0xc5, 0xc3, 0x9a, 0x7b, + 0x9d, 0xee, 0x23, 0xe0, 0x98, 0xc0, 0xd0, 0x05, + 0x21, 0x89, 0x9a, 0xf4, 0x45, 0xd1, 0x1d, 0x80, + 0x79, 0xb7, 0xfe, 0x3c, 0xff, 0x84, 0x86, 0xf0, + 0x2a, 0x69, 0x8b, 0x2d, 0x3b, 0x82, 0xa0, 0xab, + 0xee, 0xe6, 0xf4, 0x64, 0x84, 0x2b, 0x7a, 0x42, + 0x12, 0x8d, 0x10, 0xa6, 0xae, 0x10, 0x6d, 0x03, + 0xb5, 0x72, 0x09, 0xf8, 0x3f, 0xe4, 0x1c, 0x0a, + 0x08, 0x0d, 0x1a, 0x45, 0x5b, 0x70, 0x7b, 0x95, + 0xa1, 0xa7, 0xb4, 0xb6, 0xbf, 0xcc, 0xfc, 0x09, + 0x1a, 0x30, 0x40, 0x44, 0x5e, 0x69, 0x73, 0x7a, + 0x81, 0xa5, 0xb9, 0xd7, 0xdd, 0xe3, 0xee, 0xfb, + 0x16, 0x1a, 0x1d, 0x40, 0x41, 0x4e, 0x8d, 0x90, + 0x92, 0x9d, 0xaf, 0xb0, 0xbb, 0xc2, 0xe0, 0xfc, + 0x06, 0x0b, 0x20, 0x37, 0x47, 0x50, 0x53, 0x65, + 0x87, 0x89, 0x99, 0xa4, 0xb7, 0xdb, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0f, 0x20, 0x30, 0x3e }; #endif @@ -31840,8 +31783,8 @@ static int test_wc_dilithium(void) ExpectIntEQ(wc_InitRng(&rng), 0); #endif - ExpectIntEQ(wc_dilithium_init(NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_dilithium_init_ex(NULL, NULL, INVALID_DEVID), BAD_FUNC_ARG); + ExpectIntEQ(wc_dilithium_init(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_dilithium_init_ex(NULL, NULL, INVALID_DEVID), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_dilithium_free(NULL); ExpectIntEQ(wc_dilithium_init(key), 0); @@ -31850,48 +31793,48 @@ static int test_wc_dilithium(void) #ifndef WOLFSSL_DILITHIUM_NO_VERIFY ExpectIntEQ(wc_dilithium_export_public(key, pubKey, &pubKeyLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #ifndef WOLFSSL_DILITHIUM_NO_SIGN ExpectIntEQ(wc_dilithium_export_private(key, privKey, &privKeyLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #ifdef WOLFSSL_DILITHIUM_PRIVATE_KEY - ExpectIntEQ(wc_dilithium_size(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_dilithium_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY - ExpectIntEQ(wc_dilithium_priv_size(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_dilithium_priv_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #endif #ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY - ExpectIntEQ(wc_dilithium_pub_size(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_dilithium_pub_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - ExpectIntEQ(wc_dilithium_sig_size(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_dilithium_sig_size(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #ifdef WOLFSSL_DILITHIUM_PRIVATE_KEY - ExpectIntEQ(wc_dilithium_size(key), BAD_FUNC_ARG); + ExpectIntEQ(wc_dilithium_size(key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY - ExpectIntEQ(wc_dilithium_priv_size(key), BAD_FUNC_ARG); + ExpectIntEQ(wc_dilithium_priv_size(key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #endif #ifdef WOLFSSL_DILITHIUM_PUBLIC_KEY - ExpectIntEQ(wc_dilithium_pub_size(key), BAD_FUNC_ARG); + ExpectIntEQ(wc_dilithium_pub_size(key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || !defined(WOLFSSL_DILITHIUM_NO_VERIFY) - ExpectIntEQ(wc_dilithium_sig_size(key), BAD_FUNC_ARG); + ExpectIntEQ(wc_dilithium_sig_size(key), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif - ExpectIntEQ(wc_dilithium_set_level(NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_dilithium_set_level(key, 0), BAD_FUNC_ARG); - ExpectIntEQ(wc_dilithium_set_level(NULL, WC_ML_DSA_44), BAD_FUNC_ARG); - ExpectIntEQ(wc_dilithium_set_level(key, 1), BAD_FUNC_ARG); - ExpectIntEQ(wc_dilithium_set_level(key, 4), BAD_FUNC_ARG); + ExpectIntEQ(wc_dilithium_set_level(NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_dilithium_set_level(key, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_dilithium_set_level(NULL, WC_ML_DSA_44), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_dilithium_set_level(key, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_dilithium_set_level(key, 4), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wc_dilithium_get_level(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_dilithium_get_level(key, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_dilithium_get_level(NULL, &level), BAD_FUNC_ARG); - ExpectIntEQ(wc_dilithium_get_level(key, &level), BAD_FUNC_ARG); + ExpectIntEQ(wc_dilithium_get_level(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_dilithium_get_level(key, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_dilithium_get_level(NULL, &level), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_dilithium_get_level(key, &level), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef WOLFSSL_NO_ML_DSA_87 ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); @@ -31910,7 +31853,7 @@ static int test_wc_dilithium(void) ExpectIntEQ(wc_dilithium_sig_size(key), DILITHIUM_LEVEL5_SIG_SIZE); #endif #else - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), NOT_COMPILED_IN); + ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); #endif #ifndef WOLFSSL_NO_ML_DSA_65 ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); @@ -31929,7 +31872,7 @@ static int test_wc_dilithium(void) ExpectIntEQ(wc_dilithium_sig_size(key), DILITHIUM_LEVEL3_SIG_SIZE); #endif #else - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), NOT_COMPILED_IN); + ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); #endif #ifndef WOLFSSL_NO_ML_DSA_44 ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); @@ -31948,16 +31891,16 @@ static int test_wc_dilithium(void) ExpectIntEQ(wc_dilithium_sig_size(key), DILITHIUM_LEVEL2_SIG_SIZE); #endif #else - ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), NOT_COMPILED_IN); + ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); #endif #ifndef WOLFSSL_DILITHIUM_NO_VERIFY ExpectIntEQ(wc_dilithium_export_public(key, pubKey, &pubKeyLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #ifndef WOLFSSL_DILITHIUM_NO_SIGN ExpectIntEQ(wc_dilithium_export_private(key, privKey, &privKeyLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif wc_dilithium_free(key); @@ -31991,7 +31934,7 @@ static int test_wc_dilithium_make_key(void) ExpectIntEQ(wc_InitRng(&rng), 0); ExpectIntEQ(wc_dilithium_init(key), 0); - ExpectIntEQ(wc_dilithium_make_key(key, &rng), BAD_STATE_E); + ExpectIntEQ(wc_dilithium_make_key(key, &rng), WC_NO_ERR_TRACE(BAD_STATE_E)); #ifndef WOLFSSL_NO_ML_DSA_44 ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); @@ -32001,9 +31944,9 @@ static int test_wc_dilithium_make_key(void) ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); #endif - ExpectIntEQ(wc_dilithium_make_key(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_dilithium_make_key(key, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_dilithium_make_key(NULL, &rng), BAD_FUNC_ARG); + ExpectIntEQ(wc_dilithium_make_key(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_dilithium_make_key(key, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_dilithium_make_key(NULL, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_make_key(key, &rng), 0); wc_dilithium_free(key); @@ -32076,46 +32019,46 @@ static int test_wc_dilithium_sign(void) #endif ExpectIntEQ(wc_dilithium_sign_msg(NULL, 32, NULL, NULL, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, NULL, NULL, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_sign_msg(NULL, 32, sig, NULL, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_sign_msg(NULL, 32, NULL, &sigLen, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_sign_msg(NULL, 32, NULL, NULL, key, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_sign_msg(NULL, 32, NULL, NULL, NULL, &rng), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_sign_msg(NULL, 32, sig, &sigLen, key, &rng), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, NULL, &sigLen, key, &rng), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, sig, NULL, key, &rng), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, sig, &sigLen, NULL, &rng), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, sig, &sigLen, key, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, sig, &sigLen, key, &rng), 0); ExpectIntEQ(wc_dilithium_export_private(NULL, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_private(key, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_private(NULL, privKey, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_private(NULL, NULL, &privKeyLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_private(NULL, privKey, &privKeyLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_private(key, NULL, &privKeyLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_private(key, privKey, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); badKeyLen = 0; ExpectIntEQ(wc_dilithium_export_private(key, privKey, &badKeyLen), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); #ifndef WOLFSSL_NO_ML_DSA_44 ExpectIntEQ(badKeyLen, DILITHIUM_LEVEL2_KEY_SIZE); #elif !defined(WOLFSSL_NO_ML_DSA_65) @@ -32135,7 +32078,7 @@ static int test_wc_dilithium_sign(void) ExpectIntEQ(wc_dilithium_init(importKey), 0); ExpectIntEQ(wc_dilithium_import_private(privKey, privKeyLen, importKey), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef WOLFSSL_NO_ML_DSA_44 ExpectIntEQ(wc_dilithium_set_level(importKey, WC_ML_DSA_44), 0); #elif !defined(WOLFSSL_NO_ML_DSA_65) @@ -32144,19 +32087,19 @@ static int test_wc_dilithium_sign(void) ExpectIntEQ(wc_dilithium_set_level(importKey, WC_ML_DSA_87), 0); #endif ExpectIntEQ(wc_dilithium_import_private(NULL, 0, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_private(privKey, 0, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_private(NULL, privKeyLen, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_private(NULL, 0, importKey), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_private(NULL, privKeyLen, importKey), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_private(privKey, 0, importKey), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_private(privKey, privKeyLen, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_private(privKey, privKeyLen, importKey), 0); ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, sig, &sigLen, key, &rng), 0); @@ -32204,8 +32147,7 @@ static int test_wc_dilithium_verify(void) pubKey = (byte*)XMALLOC(DILITHIUM_MAX_PUB_KEY_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(pubKey); - sig = (byte*)XMALLOC(DILITHIUM_MAX_SIG_SIZE, NULL, - DYNAMIC_TYPE_TMP_BUFFER); + sig = (byte*)XMALLOC(DILITHIUM_MAX_SIG_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(sig); if (key != NULL) { @@ -32252,22 +32194,22 @@ static int test_wc_dilithium_verify(void) #endif /* !WOLFSSL_NO_ML_DSA_44 */ ExpectIntEQ(wc_dilithium_export_public(NULL, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_public(key, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_public(NULL, pubKey, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_public(NULL, NULL, &pubKeyLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_public(NULL, pubKey, &pubKeyLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_public(key, NULL, &pubKeyLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_public(key, pubKey, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); badKeyLen = 0; ExpectIntEQ(wc_dilithium_export_public(key, pubKey, &badKeyLen), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); #ifndef WOLFSSL_NO_ML_DSA_44 ExpectIntEQ(badKeyLen, DILITHIUM_LEVEL2_PUB_KEY_SIZE); #elif !defined(WOLFSSL_NO_ML_DSA_65) @@ -32285,32 +32227,32 @@ static int test_wc_dilithium_verify(void) #endif ExpectIntEQ(wc_dilithium_verify_msg(NULL, 0, NULL, 32, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_verify_msg(sig, 0, NULL, 32, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_verify_msg(NULL, 0, msg, 32, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_verify_msg(NULL, 0, NULL, 32, &res, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_verify_msg(NULL, 0, NULL, 32, NULL, key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_verify_msg(NULL, sigLen, msg, 32, &res, key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_verify_msg(sig, 0, msg, 32, &res, key), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, NULL, 32, &res, key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, NULL, key), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); res = 0; ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, key), 0); ExpectIntEQ(res, 1); ExpectIntEQ(wc_dilithium_init(importKey), 0); ExpectIntEQ(wc_dilithium_import_public(pubKey, pubKeyLen, importKey), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef WOLFSSL_NO_ML_DSA_44 ExpectIntEQ(wc_dilithium_set_level(importKey, WC_ML_DSA_44), 0); #elif !defined(WOLFSSL_NO_ML_DSA_65) @@ -32319,26 +32261,26 @@ static int test_wc_dilithium_verify(void) ExpectIntEQ(wc_dilithium_set_level(importKey, WC_ML_DSA_87), 0); #endif ExpectIntEQ(wc_dilithium_import_public(NULL, 0, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_public(pubKey, 0, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_public(NULL, pubKeyLen, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_public(NULL, 0, importKey), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_public(NULL, pubKeyLen, importKey), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_public(pubKey, 0, importKey), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_public(pubKey, pubKeyLen, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_public(pubKey, pubKeyLen, importKey), 0); res = 0; ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, importKey), 0); ExpectIntEQ(res, 1); #ifdef WOLFSSL_DILITHIUM_CHECK_KEY - ExpectIntEQ(wc_dilithium_check_key(importKey), BAD_FUNC_ARG); + ExpectIntEQ(wc_dilithium_check_key(importKey), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif wc_dilithium_free(importKey); @@ -32349,7 +32291,7 @@ static int test_wc_dilithium_verify(void) sig[sigLen - 5] = 0xff; res = 1; ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, - key), SIG_VERIFY_E); + key), WC_NO_ERR_TRACE(SIG_VERIFY_E)); ExpectIntEQ(res, 0); sig[sigLen - 5] = 0x00; } @@ -32359,7 +32301,7 @@ static int test_wc_dilithium_verify(void) sig[sigLen - 1] = 0xff; res = 1; ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, key), - SIG_VERIFY_E); + WC_NO_ERR_TRACE(SIG_VERIFY_E)); ExpectIntEQ(res, 0); sig[sigLen - 1] = b; @@ -32369,7 +32311,7 @@ static int test_wc_dilithium_verify(void) sig[sigLen - 84] = 0xff; res = 1; ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, - key), SIG_VERIFY_E); + key), WC_NO_ERR_TRACE(SIG_VERIFY_E)); ExpectIntEQ(res, 0); sig[sigLen - 84] = b; } @@ -32393,7 +32335,7 @@ static int test_wc_dilithium_verify(void) /* Set all indeces to 0. */ XMEMSET(sig + sigLen - 4, 0, 4); ExpectIntEQ(wc_dilithium_verify_msg(sig, sigLen, msg, 32, &res, key), - SIG_VERIFY_E); + WC_NO_ERR_TRACE(SIG_VERIFY_E)); ExpectIntEQ(res, 0); } #endif @@ -32409,6 +32351,106 @@ static int test_wc_dilithium_verify(void) return EXPECT_RESULT(); } +static int test_wc_dilithium_sign_vfy(void) +{ + EXPECT_DECLS; +#if defined(HAVE_DILITHIUM) && defined(WOLFSSL_WC_DILITHIUM) && \ + !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) && \ + !defined(WOLFSSL_DILITHIUM_NO_SIGN) && !defined(WOLFSSL_DILITHIUM_NO_VERIFY) + dilithium_key* key; + WC_RNG rng; + byte msg[64]; + byte* sig = NULL; + word32 sigLen; + byte ctx[10]; + int res; + + key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + ExpectNotNull(key); + sig = (byte*)XMALLOC(DILITHIUM_MAX_SIG_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER); + ExpectNotNull(sig); + + if (key != NULL) { + XMEMSET(key, 0, sizeof(*key)); + } + XMEMSET(&rng, 0, sizeof(WC_RNG)); + XMEMSET(msg, 0xAA, sizeof(msg)); + XMEMSET(ctx, 0x01, sizeof(ctx)); + + ExpectIntEQ(wc_InitRng(&rng), 0); + +#ifndef WOLFSSL_NO_ML_DSA_44 + ExpectIntEQ(wc_dilithium_init(key), 0); + ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_dilithium_make_key(key, &rng), 0); + + sigLen = DILITHIUM_MAX_SIG_SIZE; + ExpectIntEQ(wc_dilithium_sign_ctx_msg(ctx, sizeof(ctx), msg, sizeof(msg), + sig, &sigLen, key, &rng), 0); + ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig, sigLen, ctx, sizeof(ctx), msg, + sizeof(msg), &res, key), 0); + ExpectIntEQ(res, 1); + + sigLen = DILITHIUM_MAX_SIG_SIZE; + ExpectIntEQ(wc_dilithium_sign_ctx_hash(ctx, sizeof(ctx), + WC_HASH_TYPE_SHA3_512, msg, sizeof(msg), sig, &sigLen, key, &rng), 0); + ExpectIntEQ(wc_dilithium_verify_ctx_hash(sig, sigLen, ctx, sizeof(ctx), + WC_HASH_TYPE_SHA3_512, msg, sizeof(msg), &res, key), 0); + ExpectIntEQ(res, 1); + + wc_dilithium_free(key); +#endif +#ifndef WOLFSSL_NO_ML_DSA_65 + ExpectIntEQ(wc_dilithium_init(key), 0); + ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_dilithium_make_key(key, &rng), 0); + + sigLen = DILITHIUM_MAX_SIG_SIZE; + ExpectIntEQ(wc_dilithium_sign_ctx_msg(ctx, sizeof(ctx), msg, sizeof(msg), + sig, &sigLen, key, &rng), 0); + ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig, sigLen, ctx, sizeof(ctx), msg, + sizeof(msg), &res, key), 0); + ExpectIntEQ(res, 1); + + sigLen = DILITHIUM_MAX_SIG_SIZE; + ExpectIntEQ(wc_dilithium_sign_ctx_hash(ctx, sizeof(ctx), + WC_HASH_TYPE_SHA3_512, msg, sizeof(msg), sig, &sigLen, key, &rng), 0); + ExpectIntEQ(wc_dilithium_verify_ctx_hash(sig, sigLen, ctx, sizeof(ctx), + WC_HASH_TYPE_SHA3_512, msg, sizeof(msg), &res, key), 0); + ExpectIntEQ(res, 1); + + wc_dilithium_free(key); +#endif +#ifndef WOLFSSL_NO_ML_DSA_87 + ExpectIntEQ(wc_dilithium_init(key), 0); + ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_dilithium_make_key(key, &rng), 0); + + sigLen = DILITHIUM_MAX_SIG_SIZE; + ExpectIntEQ(wc_dilithium_sign_ctx_msg(ctx, sizeof(ctx), msg, sizeof(msg), + sig, &sigLen, key, &rng), 0); + ExpectIntEQ(wc_dilithium_verify_ctx_msg(sig, sigLen, ctx, sizeof(ctx), msg, + sizeof(msg), &res, key), 0); + ExpectIntEQ(res, 1); + + sigLen = DILITHIUM_MAX_SIG_SIZE; + ExpectIntEQ(wc_dilithium_sign_ctx_hash(ctx, sizeof(ctx), + WC_HASH_TYPE_SHA3_512, msg, sizeof(msg), sig, &sigLen, key, &rng), 0); + ExpectIntEQ(wc_dilithium_verify_ctx_hash(sig, sigLen, ctx, sizeof(ctx), + WC_HASH_TYPE_SHA3_512, msg, sizeof(msg), &res, key), 0); + ExpectIntEQ(res, 1); + + wc_dilithium_free(key); +#endif + + wc_FreeRng(&rng); + XFREE(sig, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); + +#endif + return EXPECT_RESULT(); +} + static int test_wc_dilithium_check_key(void) { EXPECT_DECLS; @@ -32439,18 +32481,18 @@ static int test_wc_dilithium_check_key(void) ExpectIntEQ(wc_InitRng(&rng), 0); - ExpectIntEQ(wc_dilithium_check_key(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_dilithium_check_key(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_init(checkKey), 0); ExpectIntEQ(wc_dilithium_export_key(NULL, privCheckKey, - &privCheckKeyLen, pubCheckKey, &pubCheckKeyLen), BAD_FUNC_ARG); + &privCheckKeyLen, pubCheckKey, &pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_key(privCheckKey, - privCheckKeyLen, pubCheckKey, pubCheckKeyLen, NULL), BAD_FUNC_ARG); + privCheckKeyLen, pubCheckKey, pubCheckKeyLen, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_key(checkKey, privCheckKey, - &privCheckKeyLen, pubCheckKey, &pubCheckKeyLen), BAD_FUNC_ARG); + &privCheckKeyLen, pubCheckKey, &pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_key(privCheckKey, - privCheckKeyLen, pubCheckKey, pubCheckKeyLen, checkKey), BAD_FUNC_ARG); + privCheckKeyLen, pubCheckKey, pubCheckKeyLen, checkKey), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef WOLFSSL_NO_ML_DSA_44 ExpectIntEQ(wc_dilithium_set_level(checkKey, WC_ML_DSA_44), 0); @@ -32462,27 +32504,27 @@ static int test_wc_dilithium_check_key(void) ExpectIntEQ(wc_dilithium_make_key(checkKey, &rng), 0); ExpectIntEQ(wc_dilithium_export_key(NULL, NULL, NULL, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_key(checkKey, NULL, NULL, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_key(NULL, privCheckKey, NULL, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_key(NULL, NULL, &privCheckKeyLen, NULL, - NULL), BAD_FUNC_ARG); + NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_key(NULL, NULL, NULL, pubCheckKey, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_key(NULL, NULL, NULL, NULL, - &pubCheckKeyLen), BAD_FUNC_ARG); + &pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_key(NULL , privCheckKey, - &privCheckKeyLen, pubCheckKey, &pubCheckKeyLen), BAD_FUNC_ARG); + &privCheckKeyLen, pubCheckKey, &pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_key(checkKey, NULL , - &privCheckKeyLen, pubCheckKey, &pubCheckKeyLen), BAD_FUNC_ARG); + &privCheckKeyLen, pubCheckKey, &pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_key(checkKey, privCheckKey, - NULL , pubCheckKey, &pubCheckKeyLen), BAD_FUNC_ARG); + NULL , pubCheckKey, &pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_key(checkKey, privCheckKey, - &privCheckKeyLen, NULL , &pubCheckKeyLen), BAD_FUNC_ARG); + &privCheckKeyLen, NULL , &pubCheckKeyLen), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_key(checkKey, privCheckKey, - &privCheckKeyLen, pubCheckKey, NULL ), BAD_FUNC_ARG); + &privCheckKeyLen, pubCheckKey, NULL ), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_export_key(checkKey, privCheckKey, &privCheckKeyLen, pubCheckKey, &pubCheckKeyLen), 0); @@ -32490,28 +32532,28 @@ static int test_wc_dilithium_check_key(void) if (pubCheckKey != NULL) { pubCheckKey[0] ^= 0x80; ExpectIntEQ(wc_dilithium_import_key(NULL, 0, NULL, 0, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_key(privCheckKey, 0, NULL, 0, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_key(NULL, 0, pubCheckKey, 0, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_key(NULL, 0, NULL, 0, checkKey), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_key(NULL , privCheckKeyLen, pubCheckKey, pubCheckKeyLen, checkKey), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_key(privCheckKey, 0 , pubCheckKey, pubCheckKeyLen, checkKey), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_key(privCheckKey, privCheckKeyLen, NULL , pubCheckKeyLen, checkKey), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_key(privCheckKey, privCheckKeyLen, pubCheckKey, 0 , checkKey), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_key(privCheckKey, privCheckKeyLen, pubCheckKey, pubCheckKeyLen, NULL ), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_import_key(privCheckKey, privCheckKeyLen, pubCheckKey, pubCheckKeyLen, checkKey), 0); ExpectIntEQ(wc_dilithium_check_key(checkKey), PUBLIC_KEY_E); @@ -33365,15 +33407,15 @@ static int test_wc_dilithium_der(void) ExpectIntEQ(wc_dilithium_init(key), 0); ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key, der, DILITHIUM_MAX_DER_SIZE, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key, der, DILITHIUM_MAX_DER_SIZE, - 1), BAD_FUNC_ARG); + 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(key, der, DILITHIUM_MAX_DER_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der, &idx, key, pubDerLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der, &idx, key, privDerLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef WOLFSSL_NO_ML_DSA_44 ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); @@ -33384,22 +33426,22 @@ static int test_wc_dilithium_der(void) #endif ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key, der, DILITHIUM_MAX_DER_SIZE, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key, der, DILITHIUM_MAX_DER_SIZE, - 1), BAD_FUNC_ARG); + 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(key, der, DILITHIUM_MAX_DER_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_dilithium_make_key(key, &rng), 0); ExpectIntEQ(wc_Dilithium_PublicKeyToDer(NULL, NULL, 0 , - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyToDer(NULL, der , 0 , - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyToDer(NULL, NULL, DILITHIUM_MAX_DER_SIZE, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyToDer(NULL, der , DILITHIUM_MAX_DER_SIZE, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key , der , 0 , 0), BUFFER_E ); /* Get length only. */ @@ -33413,31 +33455,31 @@ static int test_wc_dilithium_der(void) 1), pubDerLen); ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(NULL, NULL, - 0 ), BAD_FUNC_ARG); + 0 ), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntGT(wc_Dilithium_PrivateKeyToDer(key , NULL, 0 ), 0); ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(NULL, der , - 0 ), BAD_FUNC_ARG); + 0 ), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(NULL, NULL, - DILITHIUM_MAX_DER_SIZE), BAD_FUNC_ARG); + DILITHIUM_MAX_DER_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(NULL, der , - DILITHIUM_MAX_DER_SIZE), BAD_FUNC_ARG); + DILITHIUM_MAX_DER_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(key , der , - 0 ), BUFFER_E); + 0 ), WC_NO_ERR_TRACE(BUFFER_E)); /* Get length only. */ ExpectIntEQ(wc_Dilithium_PrivateKeyToDer(key , NULL, DILITHIUM_MAX_DER_SIZE), privDerLen); ExpectIntEQ(wc_Dilithium_KeyToDer(NULL, NULL, 0 ), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntGT(wc_Dilithium_KeyToDer(key , NULL, 0 ), 0 ); ExpectIntEQ(wc_Dilithium_KeyToDer(NULL, der , 0 ), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_KeyToDer(NULL, NULL, DILITHIUM_MAX_DER_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_KeyToDer(NULL, der , DILITHIUM_MAX_DER_SIZE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_KeyToDer(key , der , 0 ), BUFFER_E ); /* Get length only. */ @@ -33445,42 +33487,42 @@ static int test_wc_dilithium_der(void) keyDerLen); ExpectIntEQ(wc_Dilithium_PublicKeyDecode(NULL, NULL, NULL, 0 ), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der , NULL, NULL, 0 ), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyDecode(NULL, &idx, NULL, 0 ), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyDecode(NULL, NULL, key , 0 ), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyDecode(NULL, NULL, NULL, pubDerLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyDecode(NULL, &idx, key , pubDerLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der , NULL, key , pubDerLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der , &idx, NULL, pubDerLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyDecode(der , &idx, key , 0 ), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(NULL, NULL, NULL, 0 ), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der , NULL, NULL, 0 ), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(NULL, &idx, NULL, 0 ), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(NULL, NULL, key , 0 ), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(NULL, NULL, NULL, privDerLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(NULL, &idx, key , privDerLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der , NULL, key , privDerLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der , &idx, NULL, privDerLen), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PrivateKeyDecode(der , &idx, key , 0 ), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(len = wc_Dilithium_PublicKeyToDer(key, der, DILITHIUM_MAX_DER_SIZE, 0), pubLen); @@ -33528,2206 +33570,2206 @@ static int test_wc_dilithium_make_key_from_seed(void) dilithium_key* key; #ifndef WOLFSSL_NO_ML_DSA_44 static const byte seed_44[] = { - 0xBA, 0xC0, 0x59, 0x52, 0x75, 0x5B, 0x26, 0x47, - 0x01, 0xCA, 0x7D, 0x80, 0x6D, 0xFA, 0x08, 0x35, - 0x10, 0x28, 0xF6, 0x7B, 0x0E, 0x83, 0xC4, 0x24, - 0x01, 0x6F, 0x66, 0xCC, 0x83, 0x87, 0xD4, 0x69 + 0x93, 0xEF, 0x2E, 0x6E, 0xF1, 0xFB, 0x08, 0x99, + 0x9D, 0x14, 0x2A, 0xBE, 0x02, 0x95, 0x48, 0x23, + 0x70, 0xD3, 0xF4, 0x3B, 0xDB, 0x25, 0x4A, 0x78, + 0xE2, 0xB0, 0xD5, 0x16, 0x8E, 0xCA, 0x06, 0x5F }; static const byte pk_44[] = { - 0x86, 0xF0, 0x0C, 0x20, 0xE0, 0xDA, 0xEE, 0x5E, - 0x1E, 0xDE, 0x71, 0x39, 0x49, 0x0C, 0xC8, 0xCF, - 0xEF, 0xC9, 0xAB, 0x62, 0x3B, 0x8D, 0xEF, 0x0B, - 0xD8, 0x03, 0x12, 0x5B, 0x4A, 0xB2, 0x83, 0x61, - 0xED, 0x7E, 0xA9, 0xED, 0x2D, 0xED, 0x5A, 0x71, - 0xDD, 0xAE, 0x4A, 0x06, 0xE0, 0x2A, 0x5A, 0xAF, - 0x99, 0x69, 0x89, 0xC6, 0xAF, 0xE3, 0x2A, 0xFE, - 0x3D, 0x6E, 0x0A, 0x46, 0x71, 0x48, 0xD7, 0x17, - 0x99, 0x20, 0x01, 0x78, 0xD5, 0x8B, 0x40, 0xCB, - 0x81, 0xA0, 0x33, 0x38, 0xAE, 0x2B, 0x83, 0x4A, - 0xFD, 0x5F, 0xE0, 0xB7, 0xEE, 0xA0, 0xC4, 0x3D, - 0xB6, 0xA4, 0xD5, 0x59, 0x4B, 0xDD, 0x87, 0x1A, - 0xFC, 0x03, 0x30, 0xA0, 0xB3, 0xAD, 0x75, 0x3C, - 0xD4, 0x47, 0x72, 0x59, 0xCE, 0xB7, 0x80, 0xFD, - 0x34, 0x35, 0x5E, 0x96, 0xC8, 0x42, 0xD9, 0xDD, - 0x6C, 0xF1, 0xAB, 0xEF, 0x48, 0xD1, 0xA8, 0x02, - 0x02, 0x0F, 0x5B, 0x71, 0x4D, 0x36, 0x1E, 0x0D, - 0xC2, 0x09, 0x46, 0x7B, 0xF9, 0xEA, 0x24, 0x8F, - 0x7C, 0xCF, 0xB8, 0x9C, 0xF7, 0x49, 0x15, 0x8E, - 0x16, 0x49, 0x7E, 0xC5, 0x54, 0xF5, 0x03, 0x1D, - 0x16, 0x12, 0x02, 0x72, 0x1B, 0x38, 0x2D, 0x58, - 0x53, 0x15, 0x5E, 0xB6, 0x72, 0xCC, 0xA1, 0x09, - 0xB0, 0x2F, 0x10, 0xFA, 0x21, 0x45, 0x46, 0x37, - 0xD4, 0xFA, 0x7F, 0xFB, 0xB0, 0xD9, 0x20, 0xE2, - 0xCB, 0x56, 0xB3, 0x1E, 0xDF, 0x82, 0x67, 0x25, - 0x09, 0xD1, 0x8F, 0xFF, 0xE0, 0x43, 0xBD, 0x37, - 0x2B, 0x73, 0x0E, 0x13, 0x08, 0xC9, 0x49, 0x88, - 0x69, 0x69, 0xD9, 0x8C, 0x86, 0xE4, 0x7E, 0x63, - 0x35, 0xC5, 0xE1, 0xD0, 0x14, 0x9A, 0x89, 0x27, - 0x28, 0x17, 0xB0, 0x5B, 0x7A, 0x8F, 0xDD, 0x72, - 0x8B, 0x0A, 0x0D, 0x49, 0x58, 0x59, 0x2F, 0x0D, - 0x8F, 0x3D, 0x16, 0xCE, 0x7B, 0x11, 0xC7, 0x06, - 0x5D, 0xD5, 0x6D, 0x7B, 0x96, 0xED, 0x1E, 0x1A, - 0xF4, 0x10, 0x85, 0xDA, 0xDE, 0x84, 0x2F, 0x2B, - 0xBA, 0xFB, 0xA2, 0x5F, 0x33, 0x7D, 0x7C, 0x18, - 0x6B, 0xDF, 0x43, 0x3C, 0xE9, 0xEB, 0xB4, 0xC5, - 0x8E, 0x52, 0xF5, 0x7E, 0x4C, 0x3E, 0x6A, 0x33, - 0x41, 0x4C, 0x14, 0x05, 0x8E, 0x2C, 0x19, 0x0E, - 0x86, 0x91, 0x66, 0xDE, 0xF6, 0x4B, 0x35, 0xC2, - 0xDF, 0x3D, 0x4C, 0x7B, 0xC5, 0x58, 0x5E, 0x86, - 0x89, 0x6A, 0xFC, 0x86, 0x48, 0x75, 0xD1, 0x18, - 0xD1, 0xCB, 0x41, 0xC0, 0xF6, 0xD8, 0x87, 0x79, - 0xD9, 0xA2, 0x56, 0x2E, 0x83, 0x26, 0x11, 0xC1, - 0x4B, 0x53, 0x37, 0x85, 0x62, 0xFF, 0x6A, 0x67, - 0xFD, 0x18, 0x79, 0xD7, 0x55, 0x9B, 0xF7, 0x64, - 0xA9, 0x21, 0xB6, 0x1B, 0xF6, 0x11, 0x85, 0xF8, - 0xC0, 0x68, 0xDE, 0x61, 0x0C, 0x61, 0x7E, 0x8E, - 0xED, 0x9E, 0x58, 0x84, 0x16, 0x1A, 0x28, 0xC5, - 0x41, 0x63, 0xB3, 0xF0, 0x82, 0xAA, 0xE8, 0x36, - 0x81, 0x5C, 0xD3, 0xB7, 0xFB, 0x92, 0xF4, 0x7A, - 0x1E, 0x85, 0xA2, 0xB7, 0x21, 0xD5, 0xFA, 0xC8, - 0xE8, 0x02, 0x43, 0x5B, 0x56, 0x42, 0x03, 0x17, - 0x67, 0xEE, 0x3E, 0x31, 0x23, 0x63, 0xC7, 0x33, - 0x95, 0xDE, 0x07, 0xF6, 0x11, 0x3A, 0x2C, 0x3F, - 0x7B, 0xBB, 0x2D, 0x5C, 0x23, 0xF9, 0x2F, 0x9C, - 0x51, 0x19, 0x9F, 0x35, 0xC3, 0x18, 0x9F, 0x83, - 0x6E, 0xA8, 0x03, 0xF1, 0x79, 0x1F, 0xB0, 0xC8, - 0x2F, 0xF4, 0x2E, 0x9A, 0x26, 0xF3, 0x44, 0x02, - 0x8F, 0x45, 0x8B, 0xB0, 0x25, 0x1D, 0xF2, 0xD4, - 0x55, 0xB7, 0x65, 0xEF, 0xDB, 0x3D, 0x8E, 0x92, - 0xC8, 0xA0, 0x63, 0x4C, 0x38, 0xA3, 0x54, 0xD3, - 0xC2, 0x5A, 0x2A, 0x6A, 0x15, 0x27, 0x2A, 0xE2, - 0xFC, 0x25, 0xB6, 0xC8, 0x68, 0xEB, 0xED, 0x2D, - 0x23, 0xE8, 0x6D, 0x5C, 0xDD, 0x3F, 0x18, 0xB4, - 0x6E, 0x79, 0x36, 0xC9, 0x1C, 0xB4, 0x92, 0x41, - 0xAD, 0x35, 0xD4, 0x15, 0xE4, 0x64, 0x1C, 0x51, - 0xCB, 0x0C, 0x41, 0xB7, 0xFD, 0xC1, 0x09, 0x3E, - 0xD2, 0x4D, 0x38, 0x88, 0x77, 0x1C, 0x71, 0x91, - 0x74, 0xD3, 0x28, 0xE0, 0xCE, 0x9A, 0x11, 0x8D, - 0xBF, 0x4D, 0x8D, 0xF0, 0x44, 0xF6, 0x79, 0xFC, - 0x4C, 0xAD, 0x17, 0x88, 0xC0, 0x8C, 0x0B, 0x7A, - 0x90, 0x01, 0x53, 0x6C, 0x6B, 0x44, 0xF6, 0xE5, - 0x2E, 0xEC, 0x44, 0x4F, 0xB8, 0x9B, 0x10, 0xBE, - 0xCF, 0x55, 0x55, 0x29, 0x83, 0xB8, 0xD0, 0x25, - 0x5B, 0xCE, 0x8F, 0xA5, 0xB7, 0x6C, 0xA7, 0x47, - 0x65, 0xA9, 0xE9, 0x9B, 0xA5, 0xBC, 0x28, 0x1D, - 0x9F, 0x1F, 0x5E, 0x97, 0x42, 0x10, 0x84, 0x92, - 0xFB, 0x38, 0x0B, 0x2E, 0xAC, 0x79, 0x0A, 0x7D, - 0x00, 0x2C, 0x35, 0xD0, 0x54, 0x0D, 0x28, 0xE7, - 0xAB, 0x06, 0x02, 0xDA, 0x89, 0xA3, 0x06, 0x8E, - 0x13, 0x9A, 0xA7, 0xCA, 0x48, 0x09, 0xB0, 0x48, - 0x37, 0x08, 0xA7, 0x7D, 0xDA, 0xEB, 0x58, 0x64, - 0x39, 0xB3, 0xF3, 0xB2, 0x4C, 0x00, 0x4B, 0xCB, - 0x94, 0x36, 0xD4, 0x7C, 0x73, 0x45, 0xC8, 0x93, - 0xE5, 0x2A, 0x11, 0xF0, 0xEF, 0x0C, 0xED, 0x5F, - 0x8B, 0x0C, 0x86, 0xAD, 0x3A, 0x01, 0x07, 0x1A, - 0xC0, 0x34, 0xE8, 0x74, 0x21, 0x27, 0x73, 0x56, - 0x93, 0x76, 0x5D, 0x80, 0x59, 0xB4, 0xA4, 0xDC, - 0x80, 0xE7, 0xCE, 0x70, 0x0E, 0x0F, 0xEC, 0x56, - 0x42, 0x6E, 0x9C, 0x76, 0x3D, 0xF6, 0xB4, 0x41, - 0xE2, 0x3E, 0xAC, 0x25, 0xE7, 0x86, 0xA7, 0xA7, - 0x0A, 0x0D, 0x5D, 0x04, 0x1F, 0x45, 0xD4, 0x5B, - 0x42, 0x38, 0x4C, 0x60, 0xE7, 0xB7, 0x0D, 0xC7, - 0x28, 0x4F, 0xA5, 0x4E, 0x0C, 0x1B, 0xC4, 0xDA, - 0x50, 0x1A, 0xA0, 0x93, 0xAE, 0x10, 0x9A, 0x1A, - 0xC8, 0xC6, 0x56, 0xFC, 0x0A, 0xEA, 0x89, 0x3A, - 0x28, 0x21, 0xE9, 0x52, 0x9D, 0xEB, 0x07, 0x68, - 0xC1, 0x57, 0x32, 0x25, 0x1F, 0x93, 0x5D, 0x35, - 0xB2, 0x4B, 0x58, 0x30, 0xAF, 0x51, 0xC6, 0x7D, - 0x47, 0xD1, 0xA2, 0xAD, 0xDE, 0x75, 0x48, 0x84, - 0x74, 0x19, 0x74, 0x18, 0xA0, 0x2C, 0xD8, 0xB2, - 0xFE, 0x44, 0x78, 0x95, 0x6A, 0xBF, 0x56, 0x4D, - 0x20, 0x79, 0xE7, 0xE2, 0xE3, 0x56, 0x69, 0xB3, - 0xFA, 0xE1, 0xEB, 0xE6, 0x11, 0xAC, 0x18, 0xB3, - 0x98, 0xC1, 0x04, 0x20, 0x96, 0x4B, 0xAD, 0xDE, - 0x5B, 0x18, 0xEB, 0x7B, 0xBC, 0x15, 0x11, 0x57, - 0x29, 0x10, 0xE5, 0x80, 0x78, 0x4A, 0xF0, 0x87, - 0xF6, 0xD1, 0x3C, 0x23, 0xC5, 0xF4, 0x2D, 0xD7, - 0xAB, 0xA4, 0xD7, 0xB8, 0x45, 0x8E, 0x04, 0x1B, - 0x78, 0x59, 0x9F, 0x81, 0xE6, 0x04, 0xDF, 0x70, - 0x2B, 0x14, 0x74, 0x16, 0x49, 0xDA, 0xF0, 0xE1, - 0xC8, 0x29, 0xCC, 0x87, 0x8C, 0x2F, 0xFB, 0x18, - 0x3B, 0x47, 0xFC, 0x79, 0x04, 0x84, 0xCB, 0x0A, - 0xD2, 0x64, 0xBF, 0x86, 0xEA, 0x01, 0xAC, 0xE0, - 0xBD, 0xEC, 0x3B, 0xE1, 0xA7, 0x6C, 0xDE, 0x1D, - 0x58, 0x76, 0xCC, 0x53, 0x9E, 0xF6, 0xC6, 0xD4, - 0x2C, 0x87, 0x92, 0xA2, 0x89, 0x27, 0x31, 0x33, - 0x01, 0xA5, 0xA2, 0xE8, 0x8F, 0x13, 0x19, 0x0F, - 0xFD, 0x73, 0xB9, 0x91, 0xBD, 0xB8, 0x80, 0x9A, - 0xA3, 0xB1, 0x21, 0x6C, 0x91, 0x13, 0x8A, 0xAE, - 0xC7, 0xCB, 0x67, 0x14, 0xD1, 0xC0, 0x28, 0x89, - 0x04, 0x8C, 0x9F, 0xDE, 0xA0, 0x9A, 0x99, 0xA8, - 0x61, 0xE6, 0x8F, 0x8E, 0x39, 0xEF, 0x6B, 0x5E, - 0x84, 0x5F, 0x5D, 0x24, 0x37, 0x73, 0x9D, 0x75, - 0xC4, 0xEF, 0xE2, 0xA1, 0xF2, 0xBC, 0x0D, 0xE1, - 0x0D, 0xEC, 0xFA, 0xEE, 0xC1, 0x63, 0xC8, 0x2E, - 0x7D, 0x85, 0x65, 0xC3, 0xF2, 0x0D, 0x8B, 0x73, - 0xF9, 0x3B, 0x0B, 0x3D, 0x49, 0x8B, 0xFB, 0x16, - 0x5B, 0x75, 0x48, 0x9B, 0x56, 0x0A, 0x83, 0x4C, - 0x0D, 0x13, 0xB2, 0xB4, 0x25, 0xC7, 0x2C, 0xCB, - 0xA7, 0x9E, 0xCA, 0x41, 0x44, 0x14, 0x9A, 0x03, - 0xD3, 0x01, 0x8C, 0xB0, 0xD5, 0xA9, 0x36, 0xA4, - 0x16, 0x21, 0x49, 0x0A, 0x99, 0xA1, 0x89, 0xA5, - 0x91, 0x10, 0xA2, 0x1B, 0x3F, 0x98, 0x1E, 0x1C, - 0x43, 0xAA, 0x9C, 0x16, 0x5A, 0xF0, 0x18, 0x64, - 0x0F, 0x6A, 0xE3, 0x97, 0x83, 0x31, 0x4E, 0x84, - 0xC9, 0xEA, 0xD8, 0x9F, 0xEA, 0x9E, 0xD6, 0xF2, - 0x0E, 0x15, 0xA5, 0x48, 0x15, 0x8B, 0x10, 0x1D, - 0x77, 0x78, 0x1B, 0x54, 0x03, 0xC1, 0x2C, 0xB1, - 0xC8, 0x22, 0x11, 0x9D, 0xB8, 0x82, 0x94, 0x26, - 0xA0, 0xED, 0x6C, 0xAD, 0xA8, 0x03, 0xC2, 0xED, - 0x02, 0x74, 0x3E, 0x54, 0xBD, 0x77, 0xA6, 0x0B, - 0x37, 0xFE, 0x04, 0xCD, 0x25, 0x10, 0x2D, 0x52, - 0xC2, 0xD4, 0x5B, 0x9B, 0xAE, 0xFE, 0x35, 0x73, - 0x16, 0x61, 0x84, 0x25, 0x1D, 0xBE, 0x95, 0x34, - 0xA4, 0xF6, 0xB9, 0xA4, 0xF9, 0xAA, 0x5D, 0x1E, - 0x49, 0xBB, 0x19, 0xD9, 0x64, 0xD7, 0x48, 0x1A, - 0x0A, 0x93, 0xC3, 0x69, 0x13, 0x12, 0x68, 0xBB, - 0x97, 0x97, 0xBD, 0x99, 0x69, 0xCE, 0xE6, 0xF5, - 0x84, 0x7B, 0xCC, 0xE4, 0x7D, 0xD3, 0xCD, 0x8A, - 0x7A, 0x4B, 0x98, 0xF4, 0x09, 0x9D, 0xEA, 0x5D, - 0x4E, 0x1F, 0xE1, 0x1E, 0x6C, 0x48, 0xD3, 0x5E, - 0x67, 0xD9, 0xFF, 0x64, 0x4D, 0xA7, 0x64, 0x7A, - 0x01, 0xB2, 0xE9, 0x63, 0x14, 0x10, 0xB7, 0x08, - 0x0C, 0xF9, 0x4D, 0x66, 0x48, 0x46, 0xE3, 0xC2, - 0x48, 0x6B, 0x47, 0xCE, 0x00, 0x98, 0x92, 0x83, - 0xF7, 0xE0, 0x1F, 0x96, 0xFA, 0x53, 0xD5, 0x49, - 0x1C, 0xC7, 0x89, 0xB4, 0xA5, 0x4B, 0x63, 0xBF, - 0xD2, 0x00, 0x79, 0xDD, 0xC1, 0x60, 0xAA, 0xF2, - 0x0F, 0x47, 0xB9, 0x4F, 0x8A, 0x66, 0x05, 0x3D, - 0x96, 0x36, 0x64, 0x48, 0x5F, 0x7E, 0x56, 0x2B, - 0xB3, 0x47, 0xE2, 0x76, 0x64, 0x21, 0x65, 0x34, - 0xFC, 0xDD, 0x2D, 0x4C, 0xE2, 0x99, 0x33, 0x04, - 0xE4, 0x26, 0x15, 0x37, 0x6C, 0x32, 0xB9, 0x17 + 0xBC, 0x5F, 0xF8, 0x10, 0xEB, 0x08, 0x90, 0x48, + 0xB8, 0xAB, 0x30, 0x20, 0xA7, 0xBD, 0x3B, 0x16, + 0xC0, 0xE0, 0xCA, 0x3D, 0x6B, 0x97, 0xE4, 0x64, + 0x6C, 0x2C, 0xCA, 0xE0, 0xBB, 0xF1, 0x9E, 0xF7, + 0x23, 0x0A, 0x19, 0xD7, 0x5A, 0xDB, 0xDE, 0xD5, + 0x2D, 0xB8, 0x55, 0xE2, 0x52, 0xA7, 0x19, 0xFC, + 0xBD, 0x14, 0x7B, 0xA6, 0x7B, 0x2F, 0xAD, 0x14, + 0xED, 0x0E, 0x68, 0xFD, 0xFE, 0x8C, 0x65, 0xBA, + 0xDE, 0xAC, 0xB0, 0x91, 0x11, 0x93, 0xAD, 0xFA, + 0x87, 0x94, 0xD7, 0x8F, 0x8E, 0x3D, 0x66, 0x2A, + 0x1C, 0x49, 0xDA, 0x81, 0x9F, 0xD9, 0x59, 0xE7, + 0xF0, 0x78, 0xF2, 0x03, 0xC4, 0x56, 0xF8, 0xB6, + 0xE7, 0xC9, 0x41, 0x58, 0x98, 0xE5, 0x41, 0xC7, + 0x30, 0x32, 0xDB, 0xD6, 0x19, 0xEA, 0xF6, 0x0F, + 0x8D, 0x64, 0xF8, 0x68, 0x3D, 0xA9, 0x9E, 0xCA, + 0x51, 0x22, 0x0B, 0x0A, 0xCA, 0x28, 0x46, 0x40, + 0x99, 0xF5, 0x47, 0xC0, 0x27, 0x77, 0xBD, 0x37, + 0xD8, 0x4A, 0x59, 0xBD, 0x37, 0xED, 0x7A, 0x8A, + 0x92, 0x63, 0x3C, 0x75, 0xD0, 0x7C, 0x79, 0x3F, + 0xE7, 0x25, 0x2B, 0x58, 0x4A, 0xBF, 0x6A, 0x15, + 0xEE, 0x14, 0x50, 0x7E, 0x5E, 0x19, 0x3F, 0x89, + 0x86, 0x4D, 0x09, 0xAC, 0x87, 0x27, 0xA6, 0xD0, + 0x42, 0x1F, 0x0C, 0x19, 0xF0, 0xE2, 0xFB, 0xFC, + 0x21, 0x3D, 0x3F, 0xBD, 0x70, 0xF4, 0xF9, 0x76, + 0x2C, 0xEC, 0xFF, 0x23, 0x1E, 0x9C, 0x8A, 0x76, + 0x28, 0xD3, 0xF8, 0xB0, 0x85, 0x7B, 0x03, 0x2D, + 0x32, 0xDE, 0x62, 0xFF, 0x8E, 0xCB, 0xF4, 0x00, + 0x82, 0x89, 0xBF, 0x34, 0x40, 0x36, 0x65, 0xF8, + 0x1A, 0x08, 0x1A, 0xD5, 0xA8, 0x5A, 0x28, 0x2F, + 0x99, 0xBA, 0xB9, 0xE5, 0x38, 0x5A, 0xFB, 0xCC, + 0xCF, 0x44, 0xB7, 0x4C, 0x01, 0x96, 0xC7, 0x54, + 0x55, 0x27, 0xEC, 0x30, 0x26, 0xDA, 0x12, 0x80, + 0xC4, 0xEB, 0x37, 0xD0, 0x9C, 0xFE, 0x3E, 0xC4, + 0xB4, 0x91, 0x0B, 0x62, 0xEB, 0x98, 0x15, 0xA4, + 0x25, 0xC6, 0x59, 0x0F, 0xC4, 0xAD, 0x3F, 0xBB, + 0x22, 0x57, 0x52, 0xCC, 0x1F, 0xC5, 0x69, 0x3F, + 0x18, 0x7E, 0x7D, 0xEC, 0x4E, 0xEF, 0xBE, 0xB6, + 0xB9, 0x1B, 0xD9, 0x1C, 0x5E, 0x2E, 0xA6, 0xA9, + 0x1D, 0x14, 0xD0, 0x97, 0xBE, 0x20, 0x3F, 0xBA, + 0x0B, 0xF9, 0x37, 0xC9, 0x75, 0x07, 0xDC, 0x00, + 0x7C, 0x4C, 0xAA, 0x9B, 0x07, 0x85, 0x89, 0x29, + 0x66, 0xFF, 0x15, 0x90, 0x09, 0x24, 0xE5, 0x79, + 0xD4, 0xFB, 0xA0, 0x2B, 0xDA, 0x87, 0x55, 0x5F, + 0x07, 0x3D, 0xAE, 0x00, 0x51, 0x3E, 0x70, 0x80, + 0x9A, 0xBB, 0xC7, 0x11, 0xFB, 0xA2, 0xE7, 0x64, + 0x95, 0x77, 0xC4, 0x2A, 0xFD, 0xC2, 0x4B, 0xF7, + 0x41, 0x3E, 0x51, 0x26, 0x8A, 0xD6, 0xDB, 0x61, + 0x13, 0xB7, 0xD9, 0x19, 0x1A, 0xF9, 0xD0, 0x61, + 0xDB, 0xDE, 0xD5, 0xD6, 0x30, 0x87, 0x76, 0x50, + 0xC1, 0x24, 0xF1, 0x1B, 0xC4, 0xBD, 0xC3, 0xFD, + 0xC6, 0xA9, 0x00, 0xF6, 0x31, 0x26, 0xF9, 0x21, + 0xE8, 0x38, 0xAD, 0x0C, 0x22, 0x75, 0xA3, 0x38, + 0x9A, 0x39, 0xBD, 0x99, 0xA1, 0x34, 0x50, 0x45, + 0x50, 0x10, 0x1C, 0xD3, 0xE9, 0x5E, 0x6D, 0x14, + 0x96, 0xBE, 0x7D, 0xE6, 0x62, 0x7D, 0xF4, 0xFD, + 0x6C, 0x28, 0xBB, 0xF4, 0x0B, 0x30, 0xEF, 0xA9, + 0xB5, 0xC3, 0xD5, 0xC8, 0x5A, 0xB1, 0x4A, 0x65, + 0xC0, 0x2D, 0x6D, 0x47, 0x81, 0xFF, 0x13, 0xD3, + 0x28, 0x60, 0x85, 0x54, 0xB6, 0xD1, 0x5E, 0xD9, + 0x12, 0x89, 0xA6, 0xD5, 0x5A, 0xAC, 0x0C, 0x38, + 0xE3, 0x77, 0x06, 0xF7, 0x35, 0x5E, 0x9A, 0x4F, + 0xDA, 0x61, 0x5B, 0x87, 0x59, 0x26, 0xBF, 0xE5, + 0xA5, 0x9D, 0x9E, 0xF2, 0x73, 0xBF, 0x94, 0xA0, + 0x7C, 0xFA, 0x57, 0x31, 0x78, 0xF0, 0xE0, 0x04, + 0xB6, 0xE1, 0xEF, 0x0A, 0x83, 0x49, 0xE9, 0xBC, + 0xC0, 0x19, 0x81, 0xF2, 0x46, 0x0F, 0x0A, 0x27, + 0x43, 0xC2, 0x8D, 0x1E, 0x13, 0x8F, 0xFB, 0x76, + 0x5E, 0x7E, 0x33, 0x97, 0xB7, 0x91, 0x33, 0x35, + 0xD4, 0x02, 0xFE, 0x91, 0x80, 0x6A, 0xA8, 0xFC, + 0x81, 0x92, 0x53, 0xAF, 0x32, 0x69, 0x2F, 0xA6, + 0x51, 0xE8, 0x67, 0xF5, 0x90, 0x7E, 0xF4, 0x6F, + 0x00, 0x62, 0x5A, 0x03, 0x0E, 0xC9, 0x04, 0xED, + 0xAB, 0x21, 0x42, 0x6D, 0x59, 0x11, 0x9D, 0x2C, + 0xAA, 0x43, 0xBD, 0x93, 0x5D, 0xEC, 0x0A, 0x55, + 0x0C, 0x61, 0xEE, 0x4B, 0x27, 0x9C, 0x1C, 0xA3, + 0xA7, 0x9C, 0x79, 0xA6, 0x6E, 0x3F, 0x2D, 0x2F, + 0xAD, 0xB0, 0x0F, 0x59, 0xA3, 0xA4, 0x38, 0xAA, + 0x44, 0x57, 0x01, 0x06, 0x07, 0x30, 0x17, 0xFA, + 0x1C, 0x87, 0x57, 0x50, 0x01, 0x09, 0x72, 0x0D, + 0x12, 0x5B, 0xBA, 0x23, 0x1A, 0x0C, 0x36, 0x35, + 0x0C, 0x78, 0x08, 0x6D, 0xFD, 0xC8, 0xD6, 0x13, + 0xAE, 0xCA, 0x88, 0xC4, 0xCC, 0xAE, 0xB4, 0xA4, + 0x4D, 0x13, 0xAD, 0xB3, 0xC7, 0x17, 0xD6, 0x5C, + 0x82, 0xA3, 0x51, 0xB9, 0xB6, 0xEA, 0xBF, 0x6A, + 0x10, 0xF4, 0xB4, 0xE9, 0x62, 0x3E, 0x3A, 0x95, + 0xB4, 0xD4, 0x0A, 0x12, 0xA8, 0x18, 0xAC, 0x6B, + 0x38, 0x22, 0xDB, 0x82, 0xFB, 0x05, 0xDC, 0x42, + 0x02, 0x64, 0x8B, 0x44, 0x54, 0x68, 0x9A, 0xEB, + 0x69, 0xEA, 0x32, 0x5F, 0x03, 0xE3, 0x5D, 0xEF, + 0xA5, 0x47, 0x08, 0x48, 0x14, 0x20, 0xC6, 0xD6, + 0x97, 0xBB, 0x91, 0x2F, 0xCA, 0x0D, 0x3F, 0x19, + 0x2E, 0xF2, 0x97, 0xDF, 0xE7, 0x7F, 0xF3, 0x6B, + 0x21, 0x03, 0xF1, 0xAD, 0x1A, 0xEE, 0xCE, 0xD1, + 0xC8, 0x14, 0xC2, 0xCD, 0x7E, 0xF1, 0x6B, 0xCE, + 0x47, 0x6A, 0xD0, 0x4F, 0x94, 0x1A, 0xFC, 0x79, + 0xE3, 0x29, 0x54, 0x74, 0xA4, 0x10, 0x62, 0x51, + 0x8C, 0x00, 0x37, 0x86, 0x09, 0x34, 0xF0, 0xE5, + 0xE6, 0x52, 0xF7, 0x27, 0x49, 0xA6, 0x98, 0x63, + 0x2A, 0x09, 0x91, 0xF6, 0x13, 0xF5, 0xCB, 0x96, + 0xCA, 0x11, 0x78, 0xF9, 0x74, 0xF2, 0xC4, 0xAA, + 0x0C, 0xE6, 0x3D, 0xC2, 0x4E, 0x36, 0x4C, 0x92, + 0xA6, 0x43, 0xB9, 0x0A, 0x5F, 0x85, 0xA6, 0x2F, + 0xD4, 0xD8, 0xD2, 0xB1, 0x93, 0xD2, 0x9B, 0x18, + 0xBE, 0xDE, 0x26, 0x53, 0xFC, 0x5D, 0x3F, 0x24, + 0xF5, 0xB2, 0xC0, 0x18, 0xDB, 0xBC, 0xB6, 0xEF, + 0x00, 0xF3, 0x05, 0xBF, 0x93, 0x66, 0x6B, 0xD4, + 0x7F, 0xEA, 0x91, 0x93, 0xBC, 0x23, 0x3D, 0xB3, + 0x91, 0x21, 0x44, 0x2E, 0x93, 0x8D, 0xA5, 0xDD, + 0x07, 0xEE, 0x6E, 0x87, 0x9C, 0x5B, 0x9D, 0xFF, + 0x41, 0xEC, 0xEE, 0x5E, 0x05, 0x89, 0xAE, 0x61, + 0x75, 0xFF, 0x5E, 0xC6, 0xF6, 0xD2, 0x62, 0x9F, + 0x56, 0xB1, 0x8B, 0x4D, 0xE6, 0x6F, 0xCB, 0x13, + 0xDF, 0x04, 0x00, 0xA7, 0x97, 0xC9, 0x22, 0x70, + 0xF6, 0x9B, 0xDE, 0xBD, 0xDC, 0xB8, 0x8C, 0x42, + 0x48, 0x91, 0x9B, 0x56, 0xCD, 0xA7, 0x0B, 0x8A, + 0xC4, 0xF9, 0x42, 0x9C, 0x29, 0x2D, 0xA9, 0x4D, + 0x64, 0x78, 0x28, 0x07, 0x64, 0xFE, 0x23, 0x86, + 0xFC, 0x38, 0xCB, 0x09, 0x31, 0x45, 0x88, 0x39, + 0xEF, 0x4E, 0x7D, 0xE8, 0xF0, 0x68, 0x9D, 0x99, + 0x80, 0x59, 0x88, 0xC7, 0xF9, 0x61, 0x11, 0x85, + 0x2C, 0x89, 0x29, 0xE5, 0xA5, 0x40, 0xD3, 0xB7, + 0x8D, 0x71, 0x2D, 0xEC, 0xC3, 0x96, 0xFE, 0xF3, + 0xEC, 0x34, 0x40, 0x21, 0x84, 0xE4, 0xFD, 0x29, + 0xF3, 0x63, 0xEA, 0x80, 0xF6, 0xFC, 0x50, 0xBA, + 0x9A, 0x11, 0x35, 0x1A, 0xCE, 0xEA, 0x8F, 0xE6, + 0x8D, 0x54, 0x1E, 0x1A, 0xA5, 0x84, 0x8D, 0x9F, + 0x6E, 0x61, 0xDF, 0xB6, 0x2B, 0x2F, 0x23, 0xBC, + 0x50, 0x81, 0xE8, 0x2F, 0x76, 0x22, 0x6E, 0x03, + 0x28, 0x49, 0x82, 0xEC, 0x48, 0x48, 0x12, 0x09, + 0xB1, 0xA7, 0xD4, 0xC8, 0x79, 0x7E, 0x44, 0xBF, + 0xA8, 0x70, 0xB2, 0x20, 0x04, 0xDB, 0x74, 0xBD, + 0x7D, 0x47, 0x8D, 0x5B, 0x36, 0x14, 0xD2, 0xB1, + 0xDA, 0x75, 0x02, 0xB3, 0x98, 0xEB, 0x9D, 0xA8, + 0x0D, 0x06, 0x46, 0x1E, 0x90, 0xE0, 0x30, 0x60, + 0x44, 0x6A, 0xB4, 0xA8, 0x23, 0x84, 0x32, 0xBF, + 0xAF, 0x75, 0x2F, 0x39, 0x17, 0x91, 0x21, 0x4F, + 0x1E, 0x6B, 0x63, 0x59, 0x0D, 0x53, 0x60, 0x60, + 0xD1, 0xC2, 0x45, 0x30, 0x7B, 0xC5, 0xC1, 0xBA, + 0xC4, 0xAA, 0xA0, 0x99, 0xD3, 0x6B, 0xB6, 0xDC, + 0xBC, 0x97, 0x3C, 0xF2, 0xE6, 0x9F, 0x27, 0x34, + 0xD0, 0xF2, 0x9A, 0xEE, 0xC4, 0x56, 0x7B, 0x99, + 0xA1, 0x6B, 0xC1, 0x7C, 0x6C, 0xDD, 0xAC, 0xEF, + 0xE4, 0x99, 0x27, 0xFB, 0x14, 0xE7, 0xD9, 0x8D, + 0xD4, 0x26, 0x35, 0x19, 0x46, 0x9C, 0xCA, 0x3D, + 0xB4, 0x67, 0x9A, 0x68, 0xCE, 0xED, 0xA9, 0x55, + 0x59, 0x22, 0x10, 0xFC, 0x49, 0xAA, 0x5F, 0xBE, + 0x93, 0x4C, 0xC7, 0x3D, 0x84, 0xE4, 0xBA, 0x54, + 0x78, 0x00, 0x2D, 0x68, 0x90, 0x98, 0x90, 0x68, + 0xEF, 0x8F, 0xC9, 0x8C, 0x25, 0x32, 0xB8, 0x3B, + 0xF3, 0xCB, 0x9E, 0xF0, 0x28, 0x93, 0xC2, 0x15, + 0x24, 0x26, 0xB9, 0xD1, 0xA9, 0x47, 0x34, 0xDF, + 0xB4, 0xF9, 0x11, 0x35, 0x14, 0x3C, 0x9E, 0xED, + 0x18, 0xFD, 0x51, 0xAE, 0x87, 0x5D, 0x07, 0xA2, + 0x37, 0x75, 0x60, 0x6A, 0x73, 0x4F, 0xBA, 0x98, + 0xC0, 0x63, 0xB4, 0xA1, 0x62, 0x2E, 0x7F, 0xF2, + 0x1A, 0xA7, 0xE6, 0x52, 0xA3, 0xD6, 0xC1, 0x9F, + 0xE0, 0xDC, 0x67, 0x61, 0xB7, 0xD3, 0x53, 0x02, + 0xBF, 0x21, 0x4D, 0x30, 0x79, 0xF7, 0x60, 0x51, + 0x08, 0x2A, 0x87, 0x59, 0x29, 0x92, 0x0D, 0xC3, + 0xB3, 0xCB, 0x43, 0x21, 0x1A, 0x23, 0xA4, 0x3A, + 0x50, 0x33, 0x2F, 0xAF, 0x1A, 0xC2, 0x19, 0x1E, + 0x71, 0x71, 0x25, 0xF6, 0x3E, 0x25, 0x86, 0xC4, + 0xD8, 0x6D, 0xCA, 0x6B, 0xCD, 0x3D, 0x03, 0x8F, + 0x9D, 0x3A, 0x7B, 0x66, 0xCB, 0xC7, 0xDF, 0x34 }; static const byte sk_44[] = { - 0x86, 0xF0, 0x0C, 0x20, 0xE0, 0xDA, 0xEE, 0x5E, - 0x1E, 0xDE, 0x71, 0x39, 0x49, 0x0C, 0xC8, 0xCF, - 0xEF, 0xC9, 0xAB, 0x62, 0x3B, 0x8D, 0xEF, 0x0B, - 0xD8, 0x03, 0x12, 0x5B, 0x4A, 0xB2, 0x83, 0x61, - 0x73, 0x61, 0x49, 0x01, 0x0F, 0x94, 0x08, 0x30, - 0x26, 0x02, 0x12, 0x63, 0x64, 0x15, 0x7A, 0x4D, - 0xBA, 0xF5, 0x25, 0xA7, 0xAA, 0x0B, 0x7C, 0x3D, - 0xCE, 0x05, 0x91, 0x95, 0xEF, 0x17, 0x2F, 0xE2, - 0x5A, 0x03, 0x5E, 0x2E, 0x4D, 0xFA, 0xE7, 0x5F, - 0xCD, 0x61, 0x34, 0xFB, 0x3D, 0x3C, 0x5C, 0x60, - 0x1A, 0x6F, 0x09, 0xB5, 0x9D, 0xDD, 0x90, 0x53, - 0xF6, 0x89, 0x50, 0xC2, 0xE1, 0xED, 0x0A, 0x61, - 0x8F, 0xFA, 0xDC, 0x2D, 0xB2, 0x8B, 0xA1, 0x56, - 0xAC, 0x5E, 0x0E, 0xF1, 0x3B, 0x1E, 0x22, 0x9F, - 0xAA, 0x05, 0x96, 0xA3, 0x5E, 0x44, 0x86, 0xA8, - 0xBA, 0x15, 0xD1, 0x11, 0x7D, 0xAA, 0xD0, 0xAA, - 0x01, 0x27, 0x25, 0x04, 0x82, 0x89, 0xA4, 0x22, - 0x2E, 0xDB, 0x80, 0x45, 0xD2, 0x30, 0x45, 0x59, - 0x16, 0x64, 0xE2, 0x08, 0x86, 0x50, 0x00, 0x8E, - 0xCA, 0x08, 0x51, 0x5A, 0x06, 0x01, 0x54, 0x82, - 0x20, 0xC4, 0x92, 0x30, 0x02, 0x21, 0x4E, 0x0A, - 0x93, 0x89, 0x84, 0xB8, 0x70, 0x24, 0x40, 0x51, - 0x24, 0xB3, 0x44, 0xDB, 0x08, 0x40, 0x1B, 0x37, - 0x44, 0x21, 0x22, 0x8E, 0x8C, 0x16, 0x42, 0x10, - 0x22, 0x0E, 0xA1, 0xB2, 0x8D, 0x18, 0x49, 0x30, - 0xC1, 0x32, 0x69, 0x21, 0x03, 0x8E, 0x49, 0x44, - 0x08, 0xD3, 0x16, 0x89, 0x10, 0xA4, 0x25, 0x5C, - 0x22, 0x8A, 0xC0, 0xC8, 0x08, 0xC1, 0x04, 0x6A, - 0xD2, 0xA0, 0x50, 0x8A, 0x02, 0x52, 0x92, 0x16, - 0x44, 0x54, 0x30, 0x4A, 0x92, 0x32, 0x0C, 0x4C, - 0x44, 0x2D, 0x04, 0x15, 0x2A, 0x99, 0x24, 0x42, - 0x52, 0xA8, 0x30, 0x53, 0x24, 0x85, 0x9A, 0xB8, - 0x01, 0xE2, 0x08, 0x09, 0x23, 0x28, 0x08, 0xC4, - 0x98, 0x85, 0x0B, 0xB9, 0x40, 0x60, 0x26, 0x28, - 0x0A, 0x45, 0x12, 0x0C, 0x43, 0x84, 0x82, 0x16, - 0x89, 0xC4, 0x48, 0x28, 0x58, 0x18, 0x2A, 0x20, - 0x07, 0x02, 0xD3, 0x82, 0x45, 0x50, 0xB0, 0x50, - 0x64, 0x36, 0x91, 0x52, 0x02, 0x45, 0x5A, 0x42, - 0x26, 0x01, 0x28, 0x71, 0xD4, 0x86, 0x10, 0x19, - 0xC4, 0x68, 0xC4, 0x30, 0x66, 0xE0, 0x02, 0x49, - 0x18, 0x34, 0x05, 0x04, 0x02, 0x04, 0x90, 0x94, - 0x4C, 0x01, 0xA7, 0x80, 0x12, 0x97, 0x08, 0x19, - 0xC5, 0x41, 0x24, 0xC1, 0x61, 0x08, 0xB0, 0x0C, - 0x21, 0xC1, 0x49, 0x9B, 0x42, 0x51, 0x62, 0x18, - 0x22, 0x54, 0x06, 0x06, 0x93, 0x26, 0x70, 0x49, - 0x86, 0x91, 0x00, 0x28, 0x6C, 0x02, 0xC9, 0x60, - 0x13, 0xC3, 0x09, 0xCB, 0x14, 0x66, 0x09, 0x17, - 0x25, 0x1C, 0x16, 0x89, 0x01, 0xB6, 0x01, 0x60, - 0x86, 0x71, 0x58, 0x96, 0x04, 0x82, 0x38, 0x61, - 0x43, 0x40, 0x72, 0xCC, 0x46, 0x71, 0x81, 0x20, - 0x2C, 0x18, 0x20, 0x6E, 0x03, 0x91, 0x11, 0x9A, - 0x08, 0x89, 0x43, 0x06, 0x48, 0x64, 0x02, 0x6C, - 0x21, 0x33, 0x8D, 0x48, 0x16, 0x66, 0x9B, 0xA4, - 0x2D, 0x01, 0x10, 0x66, 0xDC, 0xB0, 0x25, 0x40, - 0xA0, 0x24, 0xA2, 0xB4, 0x44, 0xC8, 0x26, 0x61, - 0x0A, 0x10, 0x4E, 0xD0, 0x04, 0x11, 0x4A, 0x82, - 0x51, 0x03, 0x04, 0x6C, 0x18, 0x88, 0x6C, 0xE0, - 0x98, 0x41, 0x11, 0x29, 0x06, 0x62, 0x12, 0x8E, - 0xDA, 0x42, 0x91, 0x09, 0x48, 0x60, 0xD1, 0xB4, - 0x80, 0x10, 0x30, 0x30, 0x80, 0x38, 0x82, 0xD0, - 0x84, 0x0D, 0x08, 0x14, 0x92, 0x24, 0x41, 0x40, - 0x0C, 0x10, 0x89, 0xCC, 0x38, 0x8A, 0x13, 0xB6, - 0x89, 0x1A, 0xA7, 0x24, 0x5C, 0x10, 0x12, 0x1B, - 0x21, 0x50, 0x91, 0xB4, 0x29, 0x99, 0xB6, 0x51, - 0x04, 0xB1, 0x91, 0x59, 0xA6, 0x05, 0x19, 0x08, - 0x4A, 0x4A, 0x84, 0x6C, 0x1C, 0x49, 0x02, 0x44, - 0x20, 0x85, 0x14, 0xB1, 0x89, 0x09, 0x44, 0x2C, - 0x10, 0x02, 0x22, 0xE1, 0xB4, 0x25, 0x01, 0x21, - 0x71, 0x53, 0xC2, 0x85, 0x82, 0x88, 0x28, 0xC0, - 0x02, 0x52, 0x19, 0xC5, 0x51, 0x19, 0xA5, 0x09, - 0xC0, 0x82, 0x91, 0x21, 0x47, 0x0D, 0x1C, 0x30, - 0x69, 0xDC, 0xB8, 0x6C, 0x04, 0x41, 0x6A, 0x91, - 0x16, 0x40, 0xA0, 0xC8, 0x24, 0x1A, 0x10, 0x01, - 0x04, 0x39, 0x25, 0x80, 0x16, 0x02, 0x63, 0x36, - 0x71, 0x90, 0xB0, 0x8D, 0x44, 0x16, 0x8E, 0xDA, - 0x16, 0x2E, 0xCB, 0x44, 0x20, 0x54, 0x38, 0x06, - 0x54, 0xC4, 0x01, 0x51, 0x40, 0x86, 0x52, 0x44, - 0x0E, 0x82, 0x02, 0x32, 0x21, 0x38, 0x89, 0x19, - 0x04, 0x40, 0xD8, 0x12, 0x68, 0x21, 0x98, 0x11, - 0x03, 0x33, 0x8A, 0x18, 0x00, 0x45, 0xCB, 0x22, - 0x32, 0xC3, 0x04, 0x46, 0x09, 0x18, 0x51, 0x22, - 0x44, 0x89, 0x13, 0x16, 0x6E, 0xDA, 0x46, 0x45, - 0x09, 0x19, 0x41, 0x81, 0x10, 0x01, 0xDC, 0x18, - 0x8E, 0xC8, 0x44, 0x4C, 0x00, 0x17, 0x82, 0x9C, - 0xA6, 0x4D, 0xC8, 0x08, 0x10, 0x24, 0x42, 0x6D, - 0x91, 0x38, 0x89, 0x8C, 0x40, 0x6E, 0x00, 0x35, - 0x11, 0xD3, 0x24, 0x09, 0x1A, 0x01, 0x65, 0x88, - 0x48, 0x45, 0x09, 0x01, 0x71, 0x43, 0xB8, 0x80, - 0x11, 0x82, 0x2C, 0x84, 0xB8, 0x49, 0x58, 0x14, - 0x28, 0x92, 0x20, 0x32, 0x09, 0x12, 0x05, 0x20, - 0x81, 0x2D, 0x5B, 0x86, 0x11, 0x04, 0x90, 0x45, - 0x49, 0x80, 0x40, 0xD1, 0xC8, 0x24, 0x98, 0xC2, - 0x2C, 0x99, 0xA2, 0x30, 0x04, 0x98, 0x8C, 0x53, - 0x24, 0x02, 0x8A, 0x04, 0x01, 0x4C, 0x28, 0x71, - 0xC3, 0x86, 0x6C, 0x24, 0x49, 0x81, 0x04, 0x02, - 0x28, 0x62, 0x44, 0x32, 0x61, 0x20, 0x28, 0x01, - 0x04, 0x11, 0x0C, 0x09, 0x08, 0x90, 0x98, 0x84, - 0x63, 0xB2, 0x45, 0x63, 0x38, 0x2E, 0x04, 0xA4, - 0x0C, 0x18, 0x05, 0x4E, 0xCC, 0x86, 0x90, 0x43, - 0x40, 0x91, 0x54, 0x02, 0x21, 0x43, 0x28, 0x42, - 0x23, 0x94, 0x29, 0xC8, 0xA6, 0x91, 0x02, 0x09, - 0x80, 0xE3, 0x82, 0x00, 0xC1, 0x34, 0x08, 0xD1, - 0x34, 0x84, 0x12, 0x45, 0x8C, 0x02, 0xC6, 0x81, - 0x41, 0xC6, 0x6C, 0x1B, 0x12, 0x24, 0x04, 0x08, - 0x0D, 0x02, 0x00, 0x0C, 0x9C, 0xA2, 0x05, 0x49, - 0x34, 0x65, 0x00, 0x06, 0x89, 0x88, 0x34, 0x00, - 0xD8, 0x82, 0x29, 0x92, 0x12, 0x91, 0xE3, 0x36, - 0x86, 0xD1, 0x80, 0x71, 0x98, 0xB0, 0x50, 0x48, - 0xC6, 0x11, 0x14, 0x80, 0x0D, 0xA0, 0x12, 0x4D, - 0x9B, 0xB2, 0x40, 0x21, 0x41, 0x50, 0x4B, 0x36, - 0x05, 0x52, 0x10, 0x26, 0x19, 0xB2, 0x60, 0x92, - 0xA2, 0x24, 0xCB, 0x08, 0x00, 0x14, 0x22, 0x49, - 0x5A, 0xD0, 0x55, 0xBD, 0x2B, 0x45, 0xE4, 0x31, - 0x41, 0xA8, 0xC3, 0xA3, 0xAD, 0xBD, 0xB6, 0x37, - 0x92, 0x06, 0x95, 0x6B, 0x3D, 0xD8, 0xE5, 0x33, - 0x71, 0xB6, 0x62, 0xB7, 0x67, 0x6C, 0x77, 0x84, - 0x63, 0x2F, 0x41, 0x1D, 0xBA, 0x51, 0x27, 0xE1, - 0x24, 0x5D, 0xC2, 0x38, 0x71, 0x65, 0x9E, 0x8E, - 0xE4, 0xEB, 0xBB, 0x1D, 0x89, 0xEB, 0x18, 0xCA, - 0x0C, 0xA6, 0x86, 0xA3, 0x4D, 0x7C, 0x7A, 0x02, - 0xAC, 0xDD, 0x34, 0xCE, 0x05, 0x3B, 0x1B, 0x49, - 0xF4, 0x6D, 0x12, 0x33, 0xBC, 0x52, 0x70, 0x59, - 0xDF, 0xBC, 0x5D, 0x49, 0x42, 0x6A, 0xED, 0xC7, - 0xF1, 0x8C, 0xF5, 0x6D, 0x1F, 0xBC, 0xE4, 0xBD, - 0x45, 0x5D, 0x59, 0xF8, 0xCE, 0x9A, 0x39, 0xB5, - 0x96, 0x32, 0xFD, 0x93, 0x65, 0x8E, 0x92, 0xF1, - 0x8F, 0xB0, 0x99, 0xF3, 0x80, 0x0F, 0x66, 0x14, - 0xFE, 0xEB, 0x23, 0x17, 0x2D, 0x4C, 0x8F, 0x41, - 0x9A, 0x9B, 0xD1, 0x5B, 0x5B, 0xC0, 0x3D, 0xA6, - 0x0E, 0xF3, 0xE0, 0xA1, 0x04, 0xDC, 0x24, 0x18, - 0x9D, 0x90, 0xC6, 0x89, 0x5A, 0x7F, 0x10, 0x1E, - 0x4B, 0x21, 0xEC, 0x91, 0xD8, 0x5D, 0x65, 0xDB, - 0xCF, 0x90, 0x62, 0x85, 0xE9, 0x58, 0xA3, 0x47, - 0x92, 0x1C, 0xD0, 0x0C, 0xA3, 0xF3, 0x3E, 0x36, - 0xDB, 0x24, 0xA6, 0x98, 0xAB, 0xA7, 0x89, 0x2B, - 0x71, 0x6C, 0x4D, 0x00, 0xB0, 0xD5, 0xA0, 0xCA, - 0x1A, 0x76, 0x8E, 0x80, 0xB7, 0xAE, 0x83, 0x89, - 0x50, 0xF8, 0xA7, 0x52, 0x8B, 0x94, 0xD2, 0x2B, - 0x9F, 0x49, 0x92, 0x3D, 0x54, 0x0D, 0xB8, 0xD1, - 0x19, 0x49, 0xAC, 0x91, 0xAF, 0xDB, 0xE9, 0x24, - 0x4D, 0xD8, 0xE1, 0xD5, 0x16, 0x0E, 0xB1, 0x39, - 0x40, 0x7D, 0x5F, 0xF5, 0x92, 0xB4, 0xAF, 0xC3, - 0x76, 0x2B, 0xDB, 0x7D, 0x52, 0x97, 0x62, 0x9F, - 0xCF, 0x32, 0x19, 0x5F, 0xE6, 0x32, 0xFB, 0x8E, - 0x39, 0x24, 0xB4, 0xEB, 0xE9, 0x17, 0x9E, 0x47, - 0x69, 0x4D, 0x92, 0x82, 0x96, 0x88, 0x38, 0x11, - 0xCE, 0xD6, 0xBF, 0x18, 0xE3, 0x51, 0x40, 0x81, - 0x11, 0xA0, 0x74, 0xDA, 0x0D, 0x5E, 0xEC, 0xD8, - 0x5D, 0x33, 0x22, 0x1E, 0xB9, 0x5D, 0xBF, 0x79, - 0xB0, 0xA1, 0xEF, 0xD1, 0x2D, 0xA0, 0x5F, 0xA1, - 0xC7, 0x6E, 0xD5, 0x08, 0xB8, 0xD0, 0xC1, 0x95, - 0x51, 0x9B, 0x07, 0xC3, 0x4A, 0x0A, 0xB5, 0xA1, - 0x28, 0xFE, 0x95, 0x95, 0x0A, 0xCF, 0x83, 0xA8, - 0xEB, 0x8F, 0xFB, 0x18, 0xD5, 0xBD, 0x69, 0x50, - 0xF1, 0xDF, 0x06, 0xFA, 0x9A, 0x65, 0x47, 0xBB, - 0x56, 0xE9, 0xCB, 0x8F, 0x69, 0x5F, 0xE0, 0xAD, - 0x19, 0x3A, 0x70, 0xE5, 0x66, 0x42, 0xD7, 0x1C, - 0x0C, 0xB4, 0x03, 0x89, 0x7D, 0x47, 0x4D, 0x29, - 0x67, 0x8C, 0x41, 0x73, 0xAB, 0x7D, 0xFD, 0x69, - 0x15, 0xAD, 0xE3, 0xB7, 0xF8, 0x98, 0x3B, 0xCA, - 0x8F, 0x27, 0x37, 0x7B, 0x72, 0x2C, 0x5F, 0x23, - 0x73, 0x15, 0xE2, 0xB6, 0xBD, 0xDE, 0x84, 0xF8, - 0x7E, 0x22, 0xB9, 0xFD, 0xD3, 0x4D, 0x62, 0x80, - 0xBA, 0xC5, 0x57, 0x29, 0x30, 0x1B, 0x06, 0x4D, - 0x20, 0xB1, 0x53, 0x86, 0xCB, 0x6A, 0x4A, 0xE3, - 0xC1, 0xA9, 0x88, 0xCF, 0xEB, 0x15, 0x2F, 0xA8, - 0xA8, 0x6F, 0xFC, 0x2A, 0xA8, 0x0E, 0xD9, 0xFA, - 0xEA, 0xD7, 0x3B, 0xCE, 0xF8, 0x5B, 0xD8, 0x92, - 0x22, 0x6A, 0x1A, 0x8E, 0x5E, 0x91, 0x37, 0x2C, - 0x21, 0x05, 0xC4, 0xAC, 0xF7, 0x62, 0x83, 0xBA, - 0x55, 0xD5, 0x2C, 0xCE, 0xA1, 0x19, 0x93, 0x0E, - 0xDE, 0xB6, 0xB8, 0x78, 0x0F, 0xBF, 0x4C, 0xA4, - 0x66, 0xAD, 0x97, 0x2F, 0xEE, 0x34, 0xE9, 0xA2, - 0xB6, 0x1D, 0x3C, 0x60, 0xFB, 0xB8, 0x7F, 0xF8, - 0xFD, 0x34, 0x8C, 0xC5, 0xC7, 0x38, 0x72, 0x74, - 0x19, 0xA9, 0xCF, 0x54, 0x49, 0x5B, 0xBA, 0x70, - 0x12, 0xC1, 0x61, 0xDC, 0x32, 0x61, 0x49, 0x66, - 0xF3, 0x57, 0xAA, 0x0F, 0xE6, 0x44, 0x9E, 0x8A, - 0x19, 0x9C, 0x6B, 0x63, 0x2C, 0x14, 0x1E, 0xDD, - 0x00, 0x27, 0xE3, 0x95, 0xE3, 0xE7, 0xD9, 0xFF, - 0x30, 0x2D, 0x14, 0x19, 0x4F, 0x49, 0x20, 0x0B, - 0x58, 0x2A, 0x23, 0x1C, 0xE2, 0xAD, 0x6B, 0x9C, - 0x7B, 0xB6, 0x20, 0x63, 0x08, 0x24, 0x55, 0x04, - 0x58, 0x1F, 0x0E, 0xBE, 0x2A, 0x6F, 0x79, 0x90, - 0x9E, 0x15, 0x8F, 0x4B, 0xDB, 0xE2, 0xBE, 0xBC, - 0x28, 0xB1, 0xC8, 0xFE, 0x00, 0x6D, 0x71, 0xCC, - 0x91, 0x6A, 0xCC, 0xF8, 0x12, 0x8B, 0xEC, 0xF3, - 0x46, 0x53, 0xB1, 0x7F, 0xB3, 0x79, 0xF0, 0xC7, - 0xD7, 0xA5, 0xCF, 0x2C, 0xC3, 0x09, 0x66, 0x82, - 0x53, 0x43, 0xFD, 0xAC, 0xDE, 0xD5, 0x85, 0xB3, - 0x79, 0x74, 0x55, 0xE8, 0xF6, 0xE5, 0xFB, 0xF0, - 0x63, 0x0C, 0x36, 0x63, 0x65, 0x10, 0x43, 0xC9, - 0x60, 0x99, 0xD6, 0x0C, 0xB9, 0x66, 0x1C, 0xA9, - 0x97, 0x4D, 0xDB, 0xA8, 0x13, 0x9E, 0xAE, 0xCA, - 0x7A, 0x5F, 0xE3, 0x24, 0xA0, 0xEE, 0x8A, 0x9D, - 0x7F, 0x03, 0x53, 0x21, 0x6B, 0xAF, 0x3D, 0xF9, - 0x38, 0xF3, 0x7A, 0x1D, 0xDA, 0xE2, 0xEF, 0xBA, - 0x86, 0x21, 0x85, 0x1F, 0x36, 0x08, 0x0B, 0xDA, - 0x37, 0x5A, 0x0A, 0xD7, 0x55, 0x41, 0xD5, 0x84, - 0x1B, 0x36, 0xA2, 0x50, 0x65, 0xD7, 0xF3, 0xA3, - 0xEB, 0xE1, 0xDE, 0x0F, 0x85, 0xAA, 0xF6, 0x2F, - 0xAB, 0xBB, 0xC8, 0xF1, 0x2A, 0xD1, 0x0A, 0x9B, - 0xE4, 0x7B, 0xBC, 0x4D, 0x42, 0xD8, 0xA3, 0x4C, - 0x07, 0x6A, 0x60, 0x3E, 0xE2, 0xDA, 0xE7, 0x00, - 0xDF, 0x27, 0x94, 0xEF, 0x90, 0x99, 0x88, 0x2C, - 0xCF, 0xAA, 0xE1, 0x71, 0x2D, 0xFD, 0x00, 0x9C, - 0x55, 0xBF, 0xC4, 0x7A, 0x55, 0xE9, 0xE0, 0xB4, - 0x7F, 0x3D, 0xE9, 0xB0, 0x01, 0xA7, 0x27, 0x23, - 0x27, 0x58, 0x31, 0x0E, 0x8E, 0x80, 0xD8, 0xEB, - 0x64, 0xA0, 0xC3, 0xC9, 0xEA, 0x69, 0x9C, 0x74, - 0x5E, 0xAF, 0xD5, 0xEF, 0x5C, 0x4E, 0x40, 0x71, - 0xD6, 0x57, 0x77, 0xE2, 0xAF, 0x0E, 0x1D, 0xB8, - 0x5A, 0x91, 0x20, 0x4C, 0x33, 0x4D, 0xD8, 0x4F, - 0x98, 0xE0, 0x86, 0x1D, 0x02, 0xA0, 0xDA, 0x06, - 0x17, 0xC4, 0x5D, 0x2E, 0x49, 0x31, 0xE6, 0xE4, - 0xDC, 0x18, 0x23, 0x26, 0xF3, 0x61, 0xF5, 0x8D, - 0x26, 0x2C, 0x18, 0x4C, 0xDF, 0x71, 0x90, 0x24, - 0x96, 0xD3, 0xD4, 0x1A, 0x6F, 0x08, 0xAB, 0x29, - 0x7D, 0xFF, 0x4E, 0x27, 0x6D, 0x39, 0x83, 0x17, - 0x90, 0xA4, 0x07, 0x8A, 0xDE, 0x79, 0x53, 0xF6, - 0x99, 0x2E, 0xA6, 0x39, 0x47, 0xC3, 0xBE, 0x12, - 0xC7, 0xA5, 0x7E, 0xA2, 0x19, 0x57, 0x04, 0x45, - 0xBE, 0x44, 0x62, 0x92, 0xCA, 0x56, 0xE1, 0xF0, - 0x45, 0x3B, 0xA4, 0xF8, 0xF5, 0xCD, 0xC7, 0xD2, - 0xB2, 0x46, 0x57, 0x51, 0x0B, 0x06, 0xDA, 0x54, - 0x03, 0x9E, 0x52, 0xA2, 0x78, 0x69, 0x25, 0x2E, - 0x75, 0x83, 0x25, 0x3F, 0xA3, 0x62, 0x27, 0xB9, - 0xA6, 0x59, 0x7A, 0xB1, 0xB6, 0xE9, 0xC1, 0xDD, - 0x2F, 0x22, 0x2D, 0x3B, 0xA3, 0x22, 0xD6, 0x11, - 0x7B, 0x08, 0x27, 0x92, 0x83, 0x7A, 0x5D, 0x0D, - 0x6B, 0x9D, 0x5B, 0xEB, 0xE9, 0xC0, 0x88, 0xDE, - 0x44, 0x55, 0xBA, 0x69, 0xC1, 0x7A, 0x4D, 0xE6, - 0x35, 0x67, 0x6F, 0x99, 0x9B, 0x07, 0xD8, 0x04, - 0xAA, 0xEA, 0x7D, 0xFF, 0x8E, 0xB8, 0xAA, 0x4C, - 0x79, 0xE2, 0x88, 0xA8, 0x1D, 0xE8, 0xA6, 0x77, - 0xCA, 0x06, 0xC0, 0xDF, 0x0E, 0x2B, 0xCB, 0xFF, - 0x9F, 0x64, 0x67, 0x11, 0xF1, 0xB9, 0x38, 0x83, - 0x19, 0x05, 0x30, 0x9B, 0x01, 0x11, 0x55, 0x03, - 0xAD, 0x44, 0x7D, 0x3C, 0x07, 0xEF, 0x88, 0x19, - 0x92, 0xC0, 0xFE, 0xE1, 0xAB, 0xDB, 0x24, 0x18, - 0x17, 0xD0, 0x03, 0x5C, 0x91, 0xD4, 0xA6, 0x2A, - 0xF1, 0xE9, 0x72, 0x62, 0x58, 0x22, 0x7D, 0x55, - 0x15, 0xE2, 0xA1, 0x70, 0x14, 0x5E, 0x34, 0xB9, - 0x5A, 0xB7, 0x5D, 0x3F, 0xB8, 0xB5, 0x45, 0x44, - 0xD2, 0x50, 0xD1, 0xC6, 0x7E, 0xE7, 0x3D, 0xF4, - 0xD3, 0xEC, 0xFB, 0x97, 0x32, 0x11, 0x72, 0x51, - 0xB7, 0x4A, 0xC8, 0x38, 0x96, 0xFC, 0x6F, 0x69, - 0xC2, 0xD5, 0xD3, 0x28, 0xE9, 0x63, 0x14, 0x14, - 0xFE, 0xB1, 0xA4, 0x02, 0x80, 0x65, 0x73, 0xD3, - 0x57, 0x07, 0x95, 0x21, 0x40, 0x00, 0x77, 0xA7, - 0x6D, 0x44, 0x2B, 0x0D, 0x77, 0x07, 0x92, 0x64, - 0xD4, 0x3A, 0xE2, 0x7F, 0xF2, 0x1C, 0x14, 0x08, - 0x60, 0x74, 0x8F, 0xFC, 0x0B, 0xE8, 0xEC, 0xA9, - 0xB7, 0x97, 0xA7, 0x85, 0x8A, 0xEF, 0xD7, 0x7E, - 0xD5, 0x15, 0xF7, 0x45, 0x8D, 0x9C, 0xBF, 0x23, - 0xEB, 0x8C, 0x4D, 0xD2, 0x28, 0x7E, 0x0A, 0x61, - 0x2E, 0xBA, 0xBE, 0x89, 0x1D, 0x64, 0x45, 0x22, - 0x70, 0x9D, 0x48, 0xEB, 0x2F, 0x96, 0xF1, 0xA7, - 0xDE, 0xD3, 0x28, 0x4C, 0xC9, 0xFB, 0xF2, 0x9C, - 0x5B, 0xFC, 0xBE, 0xBE, 0xF4, 0x38, 0xC9, 0x43, - 0xC3, 0x66, 0x53, 0xA9, 0x06, 0xE5, 0x71, 0x16, - 0xA4, 0xBB, 0x3B, 0x50, 0x53, 0xCF, 0xF4, 0x1F, - 0xD6, 0x00, 0x07, 0x46, 0xFB, 0x97, 0x0B, 0xF9, - 0x3D, 0xF4, 0xC6, 0x60, 0xD0, 0x37, 0x70, 0xC0, - 0x2D, 0xD1, 0x9F, 0xA5, 0x78, 0xF3, 0x1F, 0x03, - 0x81, 0xB1, 0x93, 0xBA, 0xE5, 0x82, 0xE6, 0xD1, - 0x66, 0x93, 0x83, 0x5B, 0xB9, 0xAD, 0xD9, 0x01, - 0xA5, 0xB6, 0x5C, 0x69, 0x82, 0xD7, 0x2F, 0x35, - 0x35, 0x98, 0xEE, 0xE9, 0xA0, 0x74, 0xC1, 0x91, - 0x44, 0x0A, 0x04, 0xCD, 0x97, 0xBE, 0x6B, 0x60, - 0x90, 0x9A, 0x48, 0x7B, 0x83, 0xA2, 0x28, 0x97, - 0xB5, 0xBA, 0xB1, 0x4D, 0x35, 0x8B, 0x34, 0x0A, - 0xA1, 0xCB, 0xA5, 0xC2, 0xA4, 0x6A, 0x36, 0xB3, - 0x12, 0x46, 0x59, 0xDB, 0x63, 0xE5, 0xF9, 0xF1, - 0x7F, 0xAD, 0x42, 0xF4, 0x24, 0xF0, 0x02, 0x3D, - 0x1E, 0x6C, 0xD5, 0xB3, 0x06, 0x8F, 0x1F, 0x59, - 0x79, 0xCC, 0xF9, 0x5B, 0x4F, 0x8B, 0xD6, 0x03, - 0xC7, 0x53, 0xE6, 0xCE, 0xBB, 0xD8, 0x52, 0x89, - 0x70, 0x5D, 0x98, 0x86, 0xA5, 0x9E, 0x44, 0xA9, - 0xC8, 0x17, 0xA2, 0x6F, 0x43, 0x2D, 0x8D, 0xA7, - 0xDE, 0x3E, 0xFA, 0xE7, 0x98, 0x7B, 0xB5, 0xBE, - 0x7B, 0x10, 0xB8, 0xB8, 0xA5, 0x3D, 0x3E, 0xCD, - 0x94, 0x19, 0x5E, 0x06, 0x51, 0xB8, 0x58, 0x1E, - 0x0E, 0xCF, 0xFE, 0xE5, 0xED, 0x84, 0xB5, 0xF5, - 0x0F, 0x34, 0x32, 0xAC, 0x0A, 0x7F, 0x03, 0xF0, - 0xF8, 0xFC, 0x69, 0xA0, 0x26, 0x0D, 0x2E, 0xFA, - 0x62, 0x49, 0x5C, 0xC4, 0xE5, 0xF6, 0x8B, 0xC5, - 0x26, 0x21, 0x23, 0x3B, 0xBD, 0x9A, 0x23, 0x95, - 0x69, 0xA7, 0x48, 0x94, 0x30, 0x1E, 0xC3, 0x82, - 0xB6, 0x75, 0x30, 0xA6, 0xF3, 0x1E, 0xBB, 0xBC, - 0xF7, 0x21, 0x27, 0x12, 0x2C, 0x51, 0x50, 0x55, - 0x87, 0x0D, 0xF1, 0xCC, 0x6C, 0xFF, 0xEA, 0x7E, - 0x2C, 0xDA, 0x8B, 0x9B, 0x20, 0xF4, 0x75, 0xFB, - 0xC2, 0x3F, 0xBE, 0x09, 0xA6, 0xC9, 0x26, 0xE7, - 0xB5, 0xC7, 0xE6, 0xB9, 0x35, 0x8C, 0xAF, 0xFA, - 0xC0, 0x8D, 0x43, 0x33, 0x25, 0xBA, 0xAA, 0xDC, - 0xCF, 0xBC, 0xE4, 0xC4, 0xC6, 0x26, 0x4A, 0x0D, - 0x9D, 0xCC, 0x2A, 0xE0, 0x5B, 0x1E, 0xC9, 0x78, - 0xF8, 0xA2, 0xB5, 0x46, 0xE5, 0x49, 0xB8, 0x4C, - 0xC2, 0x22, 0x40, 0xCE, 0x97, 0x9A, 0x95, 0x40, - 0xF7, 0xD6, 0x52, 0x54, 0x3B, 0xBB, 0x42, 0xC5, - 0x6F, 0x00, 0x7F, 0x83, 0xDD, 0x88, 0x71, 0xF7, - 0xD4, 0x1B, 0x3D, 0x81, 0xC4, 0xB1, 0x49, 0x9B, - 0xF3, 0x68, 0x15, 0xC5, 0x15, 0x97, 0x0F, 0xC5, - 0x43, 0xDD, 0x07, 0xBE, 0x98, 0x43, 0x2C, 0xB3, - 0xEF, 0x08, 0xCA, 0xDC, 0x9C, 0x27, 0x58, 0xFE, - 0x49, 0xE9, 0x77, 0xD9, 0x1C, 0x62, 0xA4, 0xA2, - 0xF9, 0x78, 0xCC, 0xB3, 0x21, 0x06, 0x10, 0xDE, - 0x5A, 0x52, 0xA3, 0x67, 0xBD, 0x5E, 0xBC, 0x9B, - 0x4E, 0x40, 0x87, 0x93, 0xCF, 0x0E, 0x27, 0x0E, - 0xE3, 0x11, 0x4B, 0xB3, 0xE0, 0xCE, 0x24, 0xB6, - 0x0A, 0x53, 0x03, 0xF8, 0x01, 0x6A, 0x7E, 0xFE, - 0xC8, 0x66, 0x9F, 0x29, 0xF3, 0x45, 0x94, 0xD6, - 0x0E, 0x30, 0xB5, 0x61, 0xA9, 0xEC, 0x8F, 0x71, - 0xF7, 0x36, 0xD6, 0x43, 0x4B, 0x0C, 0xCD, 0x45, - 0xBB, 0xA4, 0xBD, 0xE9, 0xA9, 0xC3, 0xC1, 0x95, - 0x1E, 0xF9, 0x42, 0x07, 0x18, 0xEA, 0xF5, 0x0B, - 0x27, 0xB6, 0xDE, 0xEF, 0x67, 0x33, 0x83, 0x0D, - 0xD9, 0x5E, 0x3A, 0x93, 0xD2, 0xD0, 0xDB, 0xB9, - 0x98, 0xF0, 0x25, 0x21, 0xF3, 0xDF, 0x0B, 0x1E + 0xBC, 0x5F, 0xF8, 0x10, 0xEB, 0x08, 0x90, 0x48, + 0xB8, 0xAB, 0x30, 0x20, 0xA7, 0xBD, 0x3B, 0x16, + 0xC0, 0xE0, 0xCA, 0x3D, 0x6B, 0x97, 0xE4, 0x64, + 0x6C, 0x2C, 0xCA, 0xE0, 0xBB, 0xF1, 0x9E, 0xF7, + 0xBA, 0x2B, 0x57, 0xC4, 0x46, 0x55, 0x6E, 0xE2, + 0xB7, 0x2C, 0x78, 0xB9, 0x6B, 0xB7, 0xA8, 0x50, + 0x3D, 0xE4, 0x0A, 0xFB, 0x54, 0x18, 0x4E, 0x3B, + 0x54, 0x63, 0xC2, 0x1A, 0xF7, 0x48, 0x53, 0x23, + 0xDF, 0x98, 0xF0, 0x16, 0x0A, 0xE5, 0xD1, 0x37, + 0x51, 0x27, 0x25, 0xF8, 0x9D, 0x56, 0x3B, 0xC9, + 0xA1, 0x89, 0xD3, 0x1D, 0x20, 0xB3, 0xB3, 0xC8, + 0xFF, 0xAA, 0xF5, 0xE4, 0x86, 0xE7, 0x90, 0x51, + 0xF6, 0xF3, 0x60, 0x5C, 0xCA, 0x25, 0x69, 0xFD, + 0xB4, 0x6B, 0x33, 0x18, 0xD2, 0x38, 0x42, 0xCE, + 0x40, 0xD6, 0x43, 0x86, 0x13, 0xF6, 0x8B, 0x45, + 0x5B, 0x0D, 0x3B, 0xCA, 0x0E, 0x05, 0x0D, 0x4D, + 0x11, 0x99, 0x88, 0xA2, 0xC4, 0x80, 0x1B, 0x90, + 0x84, 0xE0, 0xB0, 0x48, 0xC9, 0x28, 0x09, 0x22, + 0x30, 0x90, 0x24, 0x06, 0x49, 0x98, 0x40, 0x65, + 0x5A, 0x26, 0x8A, 0xDA, 0x32, 0x90, 0xDA, 0x48, + 0x08, 0x22, 0x81, 0x90, 0xC8, 0x14, 0x61, 0xDC, + 0x16, 0x6A, 0x21, 0x47, 0x8E, 0x08, 0xB2, 0x21, + 0xE3, 0x08, 0x68, 0x1A, 0x02, 0x44, 0x14, 0xC6, + 0x65, 0xE1, 0x98, 0x71, 0x90, 0xC6, 0x69, 0x0C, + 0x15, 0x44, 0xC9, 0xA0, 0x11, 0xCC, 0x34, 0x71, + 0x83, 0x40, 0x45, 0x00, 0x12, 0x4D, 0x91, 0x08, + 0x00, 0x83, 0x36, 0x84, 0x12, 0x85, 0x4C, 0xCC, + 0x00, 0x41, 0x09, 0x90, 0x70, 0x18, 0x95, 0x00, + 0xA2, 0xB2, 0x85, 0x94, 0x26, 0x41, 0x0B, 0x00, + 0x41, 0x0A, 0xB9, 0x80, 0xC0, 0xC6, 0x10, 0x0C, + 0x33, 0x29, 0xA3, 0xA6, 0x28, 0x1C, 0x26, 0x10, + 0x1A, 0x37, 0x49, 0x13, 0x35, 0x8A, 0x0B, 0x29, + 0x2E, 0x82, 0xA2, 0x70, 0x8B, 0x38, 0x49, 0x94, + 0x04, 0x80, 0x9B, 0x26, 0x10, 0xA4, 0x80, 0x30, + 0x04, 0x37, 0x0C, 0x48, 0xB2, 0x60, 0x04, 0x17, + 0x2E, 0x19, 0x49, 0x64, 0xC8, 0xC4, 0x64, 0x1A, + 0x96, 0x60, 0x10, 0x83, 0x6D, 0x20, 0x38, 0x22, + 0x49, 0x06, 0x08, 0x1B, 0xB7, 0x20, 0x01, 0x48, + 0x4D, 0xE1, 0x10, 0x49, 0x08, 0x38, 0x44, 0x4C, + 0x16, 0x8E, 0x04, 0xB2, 0x2C, 0x09, 0x91, 0x50, + 0x83, 0x36, 0x06, 0x5C, 0x02, 0x8C, 0x8A, 0x38, + 0x05, 0x1A, 0xB5, 0x81, 0x82, 0xC0, 0x09, 0x51, + 0x12, 0x72, 0x22, 0x10, 0x0D, 0x04, 0x08, 0x2A, + 0xA4, 0x84, 0x10, 0x58, 0x08, 0x52, 0x08, 0x26, + 0x0A, 0x02, 0xB6, 0x2D, 0x8A, 0x12, 0x0E, 0x14, + 0x22, 0x10, 0x48, 0x44, 0x0A, 0x14, 0x23, 0x91, + 0x50, 0x40, 0x90, 0x0A, 0x27, 0x92, 0xA4, 0xB0, + 0x60, 0x08, 0x84, 0x11, 0xC4, 0x40, 0x22, 0x63, + 0x46, 0x2A, 0xDA, 0xA6, 0x90, 0xC1, 0xB2, 0x30, + 0x50, 0x10, 0x00, 0xA0, 0xB4, 0x6C, 0x53, 0xB4, + 0x50, 0x13, 0x05, 0x8D, 0x02, 0x31, 0x0E, 0x08, + 0x20, 0x10, 0x91, 0xC8, 0x4C, 0x22, 0xA7, 0x50, + 0xC2, 0xA6, 0x70, 0x92, 0x46, 0x41, 0x63, 0x16, + 0x8C, 0x84, 0x00, 0x11, 0x0B, 0x81, 0x90, 0x13, + 0x83, 0x71, 0x21, 0x85, 0x30, 0x1B, 0x18, 0x46, + 0xA3, 0x10, 0x84, 0x14, 0x43, 0x40, 0x80, 0x98, + 0x25, 0x0C, 0x27, 0x2C, 0x94, 0x42, 0x41, 0xA2, + 0x88, 0x45, 0x02, 0x13, 0x05, 0x44, 0xB6, 0x44, + 0x52, 0x22, 0x92, 0xD0, 0x80, 0x50, 0x4B, 0xA6, + 0x04, 0x84, 0x36, 0x70, 0x09, 0xB2, 0x4D, 0x19, + 0xA8, 0x84, 0x24, 0x93, 0x49, 0x94, 0xA2, 0x80, + 0x49, 0xB4, 0x48, 0x91, 0x28, 0x64, 0xA1, 0xC8, + 0x65, 0x4B, 0x82, 0x85, 0x93, 0x30, 0x06, 0x63, + 0x12, 0x66, 0x10, 0x37, 0x01, 0x4A, 0x40, 0x80, + 0x18, 0x18, 0x90, 0x44, 0xC4, 0x0D, 0x4B, 0x28, + 0x81, 0xA2, 0x06, 0x40, 0xD4, 0x30, 0x2C, 0x1B, + 0x96, 0x4C, 0xE1, 0xB2, 0x60, 0x44, 0x28, 0x41, + 0xD8, 0x30, 0x65, 0x24, 0x09, 0x04, 0x64, 0x00, + 0x89, 0x63, 0xC2, 0x24, 0xC0, 0x00, 0x49, 0x92, + 0x16, 0x52, 0x23, 0xC1, 0x29, 0x42, 0x26, 0x91, + 0xD0, 0x38, 0x31, 0x83, 0x28, 0x28, 0x4C, 0x28, + 0x61, 0x1A, 0xB2, 0x88, 0x80, 0x26, 0x2D, 0x0C, + 0x19, 0x52, 0x5B, 0x22, 0x60, 0x8A, 0x92, 0x28, + 0xA2, 0x18, 0x90, 0xD9, 0x42, 0x52, 0xCB, 0x40, + 0x8E, 0x9B, 0x16, 0x06, 0x4B, 0xC8, 0x05, 0xE0, + 0x06, 0x6C, 0x49, 0xC2, 0x25, 0xD4, 0x22, 0x69, + 0x14, 0x11, 0x69, 0x1C, 0x34, 0x90, 0x0C, 0x85, + 0x8D, 0x1C, 0x84, 0x49, 0x63, 0x10, 0x85, 0x08, + 0x34, 0x89, 0x58, 0x16, 0x66, 0xA0, 0x38, 0x68, + 0x0B, 0xA2, 0x50, 0xE0, 0x84, 0x61, 0xC1, 0x26, + 0x6E, 0xC9, 0x14, 0x6A, 0xC0, 0xC0, 0x31, 0x84, + 0x18, 0x2E, 0xDC, 0x16, 0x52, 0x14, 0x18, 0x91, + 0x0A, 0x39, 0x2C, 0x83, 0xA6, 0x8D, 0x12, 0x29, + 0x62, 0x92, 0xA6, 0x60, 0x08, 0xA5, 0x10, 0xD9, + 0xC8, 0x4D, 0x24, 0x48, 0x24, 0x83, 0x98, 0x24, + 0x1A, 0x44, 0x42, 0x08, 0x08, 0x48, 0xC8, 0x96, + 0x2D, 0xA1, 0x10, 0x20, 0x60, 0x24, 0x51, 0x9C, + 0x30, 0x11, 0xDB, 0xC8, 0x04, 0x11, 0x22, 0x51, + 0x18, 0x04, 0x68, 0xE2, 0x24, 0x4E, 0x10, 0xC4, + 0x0D, 0x18, 0x37, 0x29, 0x11, 0xB7, 0x84, 0x43, + 0x84, 0x8D, 0x54, 0x40, 0x70, 0x64, 0x80, 0x70, + 0x21, 0xB0, 0x4D, 0x00, 0x26, 0x62, 0x00, 0x45, + 0x25, 0x1B, 0x83, 0x84, 0x84, 0x80, 0x70, 0x19, + 0xB0, 0x04, 0x0A, 0xC9, 0x28, 0xCA, 0x80, 0x05, + 0x1B, 0x21, 0x4E, 0xD4, 0xB0, 0x49, 0x8C, 0x96, + 0x6C, 0xD0, 0x96, 0x25, 0x48, 0x32, 0x72, 0x54, + 0x12, 0x05, 0x09, 0x98, 0x8C, 0x8A, 0x32, 0x6D, + 0xC0, 0x04, 0x31, 0x63, 0xC8, 0x61, 0xC8, 0xC2, + 0x68, 0x9B, 0xB4, 0x8C, 0x5B, 0xC0, 0x2D, 0xC3, + 0xA8, 0x8D, 0x1B, 0x16, 0x6C, 0xD8, 0x96, 0x41, + 0x98, 0x34, 0x02, 0x44, 0x14, 0x2C, 0xD3, 0x86, + 0x44, 0x0A, 0x18, 0x8A, 0x1A, 0x46, 0x92, 0x1A, + 0xB7, 0x08, 0x4C, 0x34, 0x24, 0x21, 0x91, 0x0D, + 0x9A, 0x96, 0x2D, 0xCB, 0x24, 0x22, 0x92, 0x86, + 0x08, 0x98, 0xA0, 0x50, 0xDA, 0x44, 0x6A, 0x19, + 0xB1, 0x05, 0x8B, 0x20, 0x6E, 0x24, 0xC4, 0x81, + 0xC9, 0x98, 0x40, 0x22, 0x19, 0x32, 0x11, 0x05, + 0x69, 0xD3, 0x94, 0x91, 0x08, 0xA7, 0x71, 0xDB, + 0xC0, 0x70, 0x02, 0xB8, 0x28, 0x83, 0xB4, 0x49, + 0xA0, 0x44, 0x8A, 0x0B, 0xB4, 0x10, 0x61, 0x02, + 0x48, 0x1C, 0xA6, 0x11, 0xE3, 0x20, 0x66, 0x40, + 0xB4, 0x70, 0x03, 0xB6, 0x04, 0x60, 0x48, 0x21, + 0x5B, 0x21, 0x83, 0x39, 0x88, 0xDB, 0x67, 0x4A, + 0x61, 0xE7, 0xC2, 0x08, 0xDE, 0xBE, 0x8D, 0xAE, + 0x41, 0x19, 0xAF, 0xB0, 0x26, 0x61, 0xA6, 0x9A, + 0xBC, 0x8B, 0xDD, 0x24, 0x5B, 0x5D, 0x0F, 0xB1, + 0xA2, 0x67, 0x01, 0xC9, 0xB9, 0xC9, 0xA8, 0xF7, + 0xD9, 0xFC, 0xD4, 0xC2, 0x87, 0xFF, 0x3D, 0x60, + 0x8C, 0xF2, 0x58, 0x28, 0x2A, 0x1E, 0xB2, 0x9F, + 0x93, 0x04, 0xE8, 0x9C, 0x14, 0xF3, 0xE1, 0xCE, + 0x56, 0x12, 0x89, 0x1C, 0x60, 0x29, 0x34, 0x52, + 0x60, 0x06, 0xC9, 0x9B, 0x4A, 0xA2, 0x39, 0x9B, + 0xF4, 0x94, 0xBC, 0xF8, 0xDF, 0x61, 0xD6, 0xDF, + 0x4C, 0x69, 0xBC, 0x93, 0xE0, 0x2D, 0x49, 0x95, + 0xE2, 0xF7, 0x6E, 0x9F, 0xDA, 0x4E, 0xF6, 0x7E, + 0xB7, 0x25, 0x6C, 0xA8, 0x9A, 0x3F, 0x38, 0xFE, + 0xB2, 0xE9, 0xDF, 0x6A, 0x01, 0x0D, 0xC1, 0xC1, + 0x50, 0x02, 0xFB, 0xD4, 0x56, 0xFA, 0xE8, 0x84, + 0x82, 0x1A, 0x34, 0x16, 0x6B, 0x06, 0x58, 0xA2, + 0x41, 0x25, 0x95, 0x71, 0x8E, 0x14, 0x9B, 0xBC, + 0x6E, 0x22, 0x0A, 0xEE, 0x26, 0x8D, 0x4D, 0x82, + 0x18, 0xC2, 0x5F, 0x6A, 0x95, 0x7D, 0xE5, 0xB2, + 0x6C, 0xEA, 0x7B, 0x14, 0xCB, 0x32, 0x0D, 0x89, + 0xE1, 0x69, 0x9A, 0xD9, 0xF2, 0xB3, 0x89, 0xC6, + 0x7E, 0xF9, 0x33, 0x86, 0xA2, 0xC6, 0x5F, 0x2C, + 0x32, 0x23, 0x33, 0x67, 0xD7, 0x6A, 0xE4, 0xAB, + 0x2A, 0xBB, 0xD4, 0x22, 0xE9, 0x8E, 0x49, 0x3D, + 0xCC, 0x3C, 0xC5, 0xDA, 0xF6, 0x89, 0xB6, 0x5C, + 0xC4, 0xBC, 0x3F, 0xA5, 0x1C, 0x9C, 0x59, 0xEE, + 0xAF, 0x07, 0x55, 0x17, 0x0C, 0x24, 0x95, 0x80, + 0x4D, 0x02, 0xA6, 0x07, 0xC5, 0xBF, 0x88, 0x7C, + 0xD8, 0x6A, 0x03, 0x89, 0xF2, 0x8F, 0xC9, 0x72, + 0x5E, 0xF4, 0x60, 0x03, 0xF1, 0x3B, 0x01, 0x87, + 0x68, 0x4B, 0xEA, 0xB1, 0xF2, 0x4A, 0x29, 0xF5, + 0x31, 0x96, 0x01, 0xF3, 0x09, 0xC9, 0x1D, 0x2A, + 0x33, 0x3D, 0x1B, 0x88, 0xDF, 0x20, 0x5A, 0x51, + 0x20, 0xC4, 0xCF, 0xDC, 0x22, 0x38, 0x12, 0x4E, + 0x4E, 0x2B, 0x47, 0xD0, 0xB5, 0xE6, 0x6A, 0x65, + 0x4F, 0xE4, 0xCC, 0xCB, 0x07, 0x8F, 0x07, 0xCB, + 0xD4, 0x55, 0xD1, 0x5D, 0x3E, 0xEC, 0x7D, 0xA2, + 0x74, 0xD2, 0x4A, 0x2E, 0x57, 0x18, 0x84, 0xDE, + 0x41, 0xC3, 0xA9, 0xA4, 0xFD, 0xB3, 0xF6, 0x09, + 0x8A, 0x17, 0x2C, 0x30, 0x96, 0x80, 0x39, 0xBD, + 0x0E, 0x4E, 0xB3, 0xE2, 0xFB, 0x6D, 0x6E, 0xEE, + 0xD3, 0x9E, 0x0B, 0x63, 0x62, 0xD5, 0x4E, 0x7B, + 0x88, 0x95, 0x98, 0x69, 0xDD, 0xD5, 0xD8, 0x73, + 0xD9, 0x65, 0x24, 0x01, 0xA2, 0x9F, 0x27, 0xA2, + 0x8E, 0xA6, 0x6D, 0x32, 0xCC, 0xB0, 0xEF, 0x3B, + 0xF4, 0x60, 0x0F, 0x75, 0x57, 0xEE, 0x8D, 0x54, + 0xBF, 0x1D, 0xAD, 0x18, 0xF4, 0x5D, 0xDC, 0xD4, + 0xC9, 0xED, 0x57, 0xB1, 0x3E, 0x44, 0x5B, 0xF1, + 0x22, 0xA4, 0x3F, 0x53, 0x94, 0x03, 0x89, 0xBF, + 0x87, 0x14, 0xFF, 0xAC, 0x72, 0x1E, 0x59, 0x31, + 0x7E, 0x4B, 0x70, 0x50, 0x0A, 0xD0, 0xD1, 0xB9, + 0xA6, 0x27, 0x05, 0x4D, 0x31, 0x93, 0x20, 0x8C, + 0x77, 0x4E, 0x0B, 0x20, 0xED, 0x04, 0x1A, 0x8C, + 0x05, 0x5E, 0x75, 0xEE, 0xCD, 0x37, 0x38, 0xF0, + 0x07, 0x15, 0x8F, 0xAD, 0xDF, 0xCA, 0x5F, 0x43, + 0x56, 0x2D, 0x63, 0x6A, 0x5A, 0xCF, 0x3A, 0x39, + 0x83, 0xD3, 0xCF, 0xEB, 0xCA, 0x10, 0xB8, 0x13, + 0xF9, 0xF6, 0x52, 0x65, 0x19, 0x19, 0x9A, 0x03, + 0x13, 0xCD, 0x1D, 0xE1, 0x3F, 0x06, 0xAD, 0x53, + 0x86, 0xE1, 0xE1, 0x20, 0x79, 0x5F, 0xD2, 0x67, + 0xB7, 0xF4, 0x20, 0x19, 0xD8, 0x4D, 0xF6, 0xCD, + 0x1B, 0xF9, 0x19, 0x30, 0xFC, 0xA7, 0xAF, 0xD5, + 0x2E, 0x80, 0x70, 0x0F, 0x4C, 0xF5, 0xCD, 0xC3, + 0x8A, 0x5F, 0x7A, 0x57, 0x49, 0x79, 0x1C, 0x2F, + 0xDF, 0xFC, 0x4A, 0x10, 0x75, 0x3C, 0x24, 0xDB, + 0x19, 0xE8, 0xEB, 0x65, 0x1C, 0x5B, 0x36, 0x32, + 0x00, 0xF0, 0xB5, 0xD1, 0x69, 0x94, 0x70, 0x26, + 0xE9, 0xF7, 0x4F, 0x01, 0x2D, 0xC7, 0xC5, 0xB3, + 0x39, 0xDD, 0x49, 0xD2, 0x61, 0xCA, 0x1D, 0x37, + 0xF8, 0xF2, 0x83, 0x46, 0xE6, 0x19, 0x78, 0x05, + 0x4F, 0x45, 0xAE, 0xE4, 0x36, 0xDC, 0xCB, 0xE7, + 0xBF, 0xAF, 0xE0, 0x7C, 0xE9, 0xA8, 0xB8, 0x3C, + 0x90, 0xA2, 0x68, 0x6F, 0xA9, 0x54, 0x02, 0x85, + 0x09, 0x25, 0xC8, 0x58, 0x2B, 0xC9, 0xB7, 0x34, + 0xE4, 0xEC, 0xA1, 0xF7, 0xB2, 0x0B, 0x08, 0x6F, + 0x12, 0x9F, 0x27, 0x7A, 0x5C, 0xBD, 0xAA, 0x96, + 0x3C, 0x92, 0x71, 0x7E, 0xF7, 0x0E, 0xC1, 0x9B, + 0xF3, 0xDB, 0xC6, 0xDA, 0x20, 0x3A, 0xD9, 0x0F, + 0x3B, 0x13, 0xBB, 0xC2, 0x2F, 0xBD, 0x98, 0x0B, + 0xB1, 0xB9, 0xD3, 0xA3, 0x44, 0x52, 0xB3, 0x35, + 0x70, 0x21, 0xCE, 0x36, 0x13, 0x58, 0x4E, 0x09, + 0x36, 0xBF, 0x1D, 0x09, 0x42, 0x09, 0x37, 0x81, + 0x5E, 0x11, 0xCC, 0x5D, 0x5D, 0xDB, 0x4B, 0xF1, + 0xD8, 0x30, 0xC4, 0xF8, 0x3F, 0x30, 0xE5, 0x15, + 0x92, 0x1C, 0x78, 0x4D, 0x87, 0xBB, 0x20, 0xC0, + 0x9E, 0x3C, 0x64, 0xBD, 0xCE, 0x9A, 0xB1, 0xC6, + 0x9F, 0xD3, 0x07, 0xEF, 0xE3, 0x59, 0xC7, 0xF9, + 0x38, 0x56, 0x6C, 0x9F, 0x25, 0x17, 0xB0, 0x63, + 0x38, 0x51, 0x67, 0xE2, 0x47, 0xF3, 0x10, 0x81, + 0x11, 0x9B, 0xAC, 0x6B, 0x55, 0xA0, 0xBD, 0xD7, + 0x14, 0x25, 0x51, 0x0F, 0xFA, 0x2A, 0xBD, 0xFA, + 0x88, 0x83, 0x76, 0xA3, 0x7F, 0x20, 0xC2, 0x48, + 0x01, 0x52, 0xBB, 0x36, 0x16, 0x34, 0x52, 0x00, + 0x07, 0xC5, 0xB3, 0x4B, 0xF2, 0x28, 0x17, 0xCB, + 0x2E, 0x67, 0xAC, 0x1A, 0x82, 0x67, 0x0B, 0x71, + 0xF1, 0x96, 0xC8, 0x9F, 0x23, 0xBA, 0x31, 0x4B, + 0x16, 0xA9, 0x48, 0x49, 0x93, 0x04, 0xEF, 0x5C, + 0x03, 0xDC, 0xF5, 0x8E, 0x52, 0xBE, 0x31, 0x48, + 0x63, 0xE7, 0x23, 0xC5, 0x6D, 0x3A, 0xEB, 0x34, + 0x0B, 0xFF, 0x18, 0xAB, 0xFA, 0x20, 0xDC, 0x03, + 0x44, 0x20, 0x30, 0x23, 0x05, 0x33, 0xD9, 0x12, + 0x9B, 0x83, 0xED, 0x22, 0xC3, 0x51, 0xF2, 0x32, + 0x81, 0x72, 0xE3, 0x63, 0x44, 0x74, 0x44, 0xAE, + 0x5C, 0x69, 0x02, 0xB7, 0x92, 0x79, 0x9F, 0x54, + 0x44, 0x50, 0x78, 0x71, 0x19, 0x61, 0x2E, 0x9B, + 0xB4, 0x13, 0x0A, 0x33, 0xA2, 0xA5, 0x96, 0x2A, + 0xC0, 0x9D, 0x57, 0x7D, 0x6D, 0xDC, 0x88, 0x1F, + 0xE6, 0x61, 0x61, 0x26, 0xD8, 0xA0, 0xA7, 0xDF, + 0x2B, 0x22, 0x53, 0xBC, 0x8E, 0xC4, 0xE3, 0x53, + 0x86, 0xEA, 0x55, 0x11, 0xF0, 0xF1, 0x58, 0x87, + 0x14, 0x5B, 0x6C, 0x23, 0xAB, 0x3D, 0x40, 0x33, + 0x39, 0xE4, 0x04, 0x07, 0x3E, 0xD9, 0xC6, 0xA8, + 0x96, 0xA2, 0xF9, 0xEC, 0x70, 0xC4, 0x4B, 0xD2, + 0xAE, 0xC1, 0x0F, 0xC4, 0x36, 0x0E, 0x87, 0x63, + 0x6B, 0xE1, 0x55, 0xB6, 0xA6, 0x7B, 0x7E, 0xDF, + 0x38, 0xCF, 0x73, 0x00, 0x48, 0x13, 0xC9, 0xE7, + 0xD2, 0xC6, 0x54, 0xC2, 0x53, 0x0A, 0x71, 0xE5, + 0xF8, 0xC1, 0x09, 0x42, 0xFB, 0x6D, 0x88, 0x41, + 0x53, 0x5A, 0xB1, 0xDA, 0x43, 0xE8, 0xCB, 0x0B, + 0xB8, 0x9E, 0x78, 0xEC, 0x91, 0xF8, 0xDE, 0x15, + 0x31, 0xA0, 0x36, 0x65, 0xCC, 0xD5, 0xA7, 0x5B, + 0xDA, 0x0E, 0xD0, 0xE5, 0x98, 0x64, 0xEE, 0xEF, + 0x51, 0xA8, 0x3F, 0xA5, 0x53, 0xAF, 0x66, 0x2A, + 0xEE, 0x00, 0xD1, 0xF8, 0x36, 0x7B, 0x4D, 0x5D, + 0xDD, 0xC3, 0x45, 0x54, 0x4C, 0x6B, 0xD5, 0x14, + 0xF8, 0x88, 0xE6, 0x03, 0x3C, 0x25, 0x5D, 0xB6, + 0x50, 0xDA, 0x73, 0x4A, 0xD3, 0x3A, 0x3C, 0xF8, + 0x4B, 0xD3, 0xF0, 0x6F, 0xA1, 0xA7, 0xCA, 0x02, + 0xE4, 0xB8, 0xE9, 0x93, 0xAE, 0x7A, 0xE6, 0x34, + 0x20, 0xA4, 0x6B, 0xA8, 0xA3, 0x81, 0x3D, 0x1E, + 0x9D, 0x29, 0x66, 0xBB, 0x85, 0x60, 0xD7, 0x1C, + 0x62, 0xA0, 0x44, 0xEA, 0x94, 0x17, 0x9F, 0x4E, + 0xB1, 0xB6, 0xED, 0x60, 0x71, 0x9D, 0x51, 0xE0, + 0xEE, 0xF6, 0xCD, 0x07, 0x91, 0x52, 0xF6, 0xBE, + 0x48, 0x8E, 0xC9, 0x19, 0x11, 0xC6, 0xD3, 0xF1, + 0xD1, 0x17, 0x3C, 0x54, 0x1F, 0x9D, 0x25, 0xBF, + 0x34, 0x2F, 0xCA, 0xA3, 0xFF, 0x46, 0xC1, 0x8F, + 0x2A, 0x04, 0x41, 0xD8, 0x3B, 0xDE, 0x35, 0x46, + 0xA9, 0x82, 0x6C, 0x34, 0x96, 0xE0, 0x6F, 0x2F, + 0x2B, 0x0E, 0xEB, 0x9D, 0x5B, 0xE8, 0x73, 0x9F, + 0x83, 0xA4, 0x2D, 0x3B, 0x30, 0x0E, 0x70, 0xEE, + 0x84, 0xDF, 0xFF, 0xB2, 0x07, 0x64, 0xA0, 0x60, + 0x21, 0x2F, 0x05, 0x8C, 0x8A, 0x5F, 0xFA, 0x9A, + 0x34, 0xE9, 0x28, 0xD6, 0xA7, 0xE0, 0x77, 0x08, + 0xFE, 0x53, 0x93, 0xE3, 0x01, 0x7C, 0xE4, 0x70, + 0xEB, 0x96, 0x58, 0xA7, 0x4E, 0x49, 0x51, 0xE6, + 0xFA, 0x48, 0x54, 0xC9, 0xE9, 0xC2, 0x89, 0x88, + 0x81, 0x2E, 0x44, 0x18, 0xA2, 0xE8, 0x32, 0x58, + 0x0B, 0x4A, 0x27, 0x03, 0x72, 0xBC, 0x69, 0x67, + 0x68, 0x89, 0xD0, 0xCC, 0x43, 0x24, 0x0E, 0xDA, + 0xBC, 0x1D, 0x31, 0x14, 0xD8, 0xF3, 0x5A, 0xB2, + 0xE9, 0xEA, 0x95, 0x30, 0x82, 0xE9, 0x53, 0x62, + 0x79, 0xAC, 0xB3, 0xBE, 0x16, 0xD3, 0xA2, 0x05, + 0xF4, 0x6C, 0xB6, 0x7B, 0x22, 0x14, 0x96, 0x93, + 0x5A, 0xC0, 0x42, 0x92, 0xBB, 0xFB, 0x9A, 0x61, + 0xC0, 0xA0, 0x3E, 0xF4, 0xC9, 0xB6, 0x82, 0x04, + 0x95, 0xF3, 0xD8, 0x0E, 0x4A, 0x6F, 0xB7, 0xE1, + 0xC6, 0x99, 0x03, 0xFA, 0x22, 0x6E, 0x02, 0x3E, + 0x95, 0xBA, 0x41, 0x6D, 0xF2, 0xE5, 0xE4, 0x54, + 0x1E, 0x15, 0xDC, 0xC0, 0x00, 0xB5, 0xE6, 0x5C, + 0x97, 0x20, 0xDA, 0xF6, 0x96, 0x01, 0x2F, 0xA2, + 0xA6, 0xCF, 0x75, 0x8E, 0xD6, 0xD2, 0x25, 0xA3, + 0xE4, 0xFE, 0xE4, 0x5A, 0xC5, 0xFB, 0x48, 0x70, + 0x7F, 0xAE, 0x13, 0x3D, 0x59, 0x2C, 0xFD, 0x2E, + 0x8C, 0x43, 0xC2, 0x12, 0x6F, 0x65, 0x2B, 0xEE, + 0x9B, 0xAB, 0x43, 0xA1, 0xA1, 0x0B, 0xE2, 0x41, + 0x1A, 0x67, 0x94, 0xB2, 0x6C, 0xB5, 0x5C, 0xC2, + 0x17, 0xEB, 0x7B, 0x0B, 0x14, 0x6D, 0x23, 0xF7, + 0x92, 0x2D, 0x32, 0x22, 0xAE, 0x5E, 0xE8, 0xC6, + 0xD3, 0x8E, 0x83, 0x99, 0xBA, 0x51, 0xC6, 0x81, + 0xB8, 0x38, 0x16, 0xFC, 0xF7, 0x44, 0x38, 0x82, + 0x59, 0x20, 0xF9, 0xCE, 0x8A, 0x20, 0x2A, 0x8F, + 0x6D, 0x94, 0x2D, 0xA8, 0x62, 0x38, 0xFB, 0x4C, + 0x9F, 0x21, 0x98, 0xEA, 0x8D, 0xFF, 0x81, 0xC1, + 0x72, 0x86, 0xE0, 0x18, 0xDF, 0x4B, 0x7F, 0xE3, + 0x88, 0x4D, 0x17, 0x59, 0xE4, 0xC5, 0x9B, 0xB5, + 0x26, 0x17, 0xAE, 0xD4, 0xE7, 0x8E, 0x4E, 0x7C, + 0x4E, 0x9A, 0x36, 0xE4, 0xE9, 0x96, 0xD3, 0x23, + 0x91, 0xA3, 0x4A, 0x0D, 0xAA, 0xAB, 0x6B, 0x54, + 0x08, 0x15, 0xA3, 0x4D, 0x20, 0x40, 0x7A, 0xEF, + 0x81, 0x94, 0x9B, 0xE6, 0x7B, 0x90, 0x69, 0x50, + 0xD8, 0x9B, 0xE9, 0xF0, 0x85, 0xE9, 0x9E, 0xB5, + 0x87, 0x26, 0x95, 0x17, 0x3B, 0x3E, 0xFA, 0xCA, + 0xE9, 0x45, 0x5D, 0x2B, 0x2C, 0xD4, 0xF7, 0x10, + 0xB8, 0x72, 0xCF, 0x66, 0x2B, 0x73, 0x62, 0x16, + 0xB1, 0xBB, 0xFB, 0x1F, 0x5F, 0x3D, 0x48, 0x6C, + 0x7B, 0x4B, 0x87, 0x56, 0x12, 0x33, 0x3F, 0x8E, + 0x4B, 0xA9, 0x33, 0xDC, 0x79, 0xF0, 0xED, 0xFD, + 0x7B, 0xAA, 0xDE, 0x2C, 0x16, 0xF2, 0x14, 0x6A, + 0x49, 0x6F, 0x79, 0xC4, 0x2A, 0x4D, 0x6B, 0x52, + 0x39, 0xA3, 0x0D, 0xD3, 0xC4, 0x8B, 0xEB, 0x09, + 0x2C, 0xA0, 0x75, 0x00, 0x10, 0xF6, 0x9E, 0xD4, + 0xB9, 0x23, 0x20, 0x14, 0x7D, 0xBB, 0xE2, 0x08, + 0xF6, 0xE8, 0xEB, 0x1C, 0xF2, 0x47, 0xD2, 0x1A, + 0x3A, 0x3B, 0x01, 0xDF, 0x58, 0xC0, 0xAA, 0x62, + 0x94, 0x4D, 0xA0, 0xEF, 0x04, 0x50, 0xE8, 0xCE, + 0x48, 0xAA, 0x13, 0x7E, 0x7E, 0x15, 0x16, 0xC1, + 0xD5, 0xC8, 0x6E, 0xEA, 0x17, 0xFD, 0xFA, 0xC1, + 0x69, 0x07, 0x46, 0xE7, 0x26, 0x70, 0x45, 0xA3, + 0xE9, 0x05, 0x96, 0xBD, 0xB7, 0x5D, 0x50, 0xB6, + 0xDD, 0x5C, 0x34, 0xE5, 0xC8, 0xD8, 0x9D, 0xC6, + 0xF2, 0xF1, 0xD2, 0x44, 0x40, 0xE5, 0x7B, 0x47, + 0x59, 0xB8, 0x62, 0x5F, 0x72, 0xBC, 0x4A, 0x7B, + 0x10, 0xD5, 0x19, 0xD3, 0x31, 0xF9, 0xC4, 0x00, + 0xAA, 0xE1, 0xE5, 0x0D, 0x48, 0x0C, 0xAA, 0xE5, + 0xA1, 0xC0, 0xFA, 0x99, 0xD7, 0x79, 0x24, 0xCF, + 0x8D, 0xFE, 0x56, 0xCD, 0x70, 0x92, 0xE7, 0xB9 }; #endif /* !WOLFSSL_NO_ML_DSA_44 */ #ifndef WOLFSSL_NO_ML_DSA_65 static const byte seed_65[] = { - 0x41, 0xAF, 0x98, 0x7B, 0x02, 0x6E, 0x47, 0x5F, - 0x37, 0x91, 0x7F, 0x2A, 0x6A, 0x9A, 0x87, 0xE7, - 0x51, 0xAD, 0xF9, 0x5B, 0x92, 0x7F, 0x2D, 0xCE, - 0xF0, 0xD4, 0xF3, 0xDA, 0x8F, 0x8C, 0x86, 0x6B + 0x70, 0xCE, 0xFB, 0x9A, 0xED, 0x5B, 0x68, 0xE0, + 0x18, 0xB0, 0x79, 0xDA, 0x82, 0x84, 0xB9, 0xD5, + 0xCA, 0xD5, 0x49, 0x9E, 0xD9, 0xC2, 0x65, 0xFF, + 0x73, 0x58, 0x80, 0x05, 0xD8, 0x5C, 0x22, 0x5C }; static const byte pk_65[] = { - 0xDC, 0x38, 0xE5, 0x5F, 0xDF, 0x2E, 0x9D, 0xD4, - 0x34, 0x5C, 0xAE, 0x1A, 0x7D, 0xF4, 0x2E, 0x2E, - 0xBC, 0x58, 0x57, 0x80, 0x55, 0x02, 0xE4, 0x3F, - 0xA5, 0x19, 0x41, 0xE4, 0x44, 0x58, 0x66, 0x41, - 0x39, 0x5D, 0xF9, 0x20, 0x6C, 0x36, 0x0D, 0x4F, - 0x83, 0x43, 0xBE, 0x86, 0xEF, 0x6C, 0x43, 0xD0, - 0x3E, 0xD0, 0x63, 0x0A, 0x5B, 0x92, 0x8D, 0x31, - 0x19, 0x1D, 0xA9, 0x51, 0x61, 0x48, 0xE6, 0x26, - 0x50, 0x07, 0x54, 0x9B, 0xB0, 0xB7, 0x62, 0x54, - 0xDB, 0x80, 0x4E, 0x48, 0x7F, 0x48, 0xC5, 0x11, - 0x91, 0xFC, 0xA9, 0x26, 0x25, 0x08, 0xA5, 0x99, - 0xA0, 0x3C, 0xB9, 0x0C, 0xCF, 0x6C, 0xCD, 0x83, - 0x9A, 0x38, 0x6D, 0x22, 0xDE, 0x0A, 0xC3, 0x8F, - 0xF7, 0xD0, 0x57, 0x40, 0x53, 0xE9, 0xE9, 0x4E, - 0x73, 0xFA, 0x58, 0x40, 0x9F, 0x6D, 0x8A, 0xD3, - 0x6F, 0x86, 0x84, 0x4D, 0x18, 0xD7, 0x4C, 0x76, - 0x39, 0x57, 0x9E, 0xC0, 0xC7, 0xE4, 0xEE, 0x54, - 0xF4, 0xAD, 0x10, 0xC5, 0x69, 0x59, 0xE0, 0xBC, - 0x9B, 0xF4, 0x20, 0x8F, 0xBA, 0x0A, 0x94, 0x10, - 0x55, 0x07, 0x7E, 0xD1, 0xF9, 0x20, 0xCC, 0x2F, - 0xA9, 0xAE, 0x9D, 0xF5, 0xE4, 0x29, 0x40, 0x7E, - 0x44, 0xA4, 0xDF, 0xB2, 0xE9, 0x25, 0xE0, 0xBA, - 0x8D, 0x6C, 0x33, 0x88, 0x9C, 0xEE, 0x27, 0xDB, - 0xC7, 0x0A, 0x6E, 0x5A, 0x08, 0x92, 0x9B, 0x53, - 0xF8, 0xFD, 0xF9, 0x5B, 0xEB, 0x03, 0x8E, 0x45, - 0xCB, 0x91, 0x19, 0x4E, 0x6B, 0x1E, 0xA0, 0xA4, - 0xF0, 0x43, 0xC9, 0x8F, 0xDF, 0x93, 0x5E, 0x86, - 0xB0, 0x09, 0xD3, 0x47, 0x38, 0x7C, 0x8E, 0x78, - 0x85, 0x71, 0x3D, 0x07, 0x2E, 0x2E, 0x12, 0x6F, - 0x06, 0x97, 0x0E, 0x54, 0xAD, 0x71, 0x09, 0xEF, - 0xA5, 0x55, 0x0A, 0x39, 0x86, 0xE6, 0x17, 0x17, - 0x70, 0x9A, 0xA7, 0xA7, 0x1B, 0xCE, 0x78, 0x06, - 0x2C, 0x61, 0x1A, 0xB9, 0x48, 0x22, 0x41, 0x45, - 0x15, 0xEB, 0x10, 0x3C, 0x6E, 0x24, 0x37, 0xA4, - 0xB5, 0xE8, 0x82, 0x4D, 0x6D, 0xCC, 0x44, 0xC6, - 0xB0, 0x5D, 0xBE, 0x46, 0xDA, 0x5F, 0x00, 0x36, - 0x5B, 0xBD, 0x87, 0x65, 0x3A, 0x96, 0x21, 0x58, - 0x45, 0x65, 0xDB, 0xD8, 0x77, 0x76, 0x7B, 0x25, - 0xC3, 0x78, 0x6E, 0xD9, 0x14, 0xA7, 0x19, 0x69, - 0x4F, 0xBB, 0x1B, 0xDB, 0x37, 0xCE, 0xAF, 0x8C, - 0x88, 0x2E, 0x9E, 0x30, 0xF6, 0xAE, 0x43, 0xCC, - 0x59, 0x0F, 0x67, 0x8A, 0xCB, 0x4F, 0x08, 0x20, - 0x6D, 0x99, 0xD7, 0xA9, 0xDE, 0xE5, 0xE5, 0xB3, - 0xFF, 0xAA, 0x45, 0x3C, 0xF1, 0xE3, 0x02, 0x7D, - 0x2F, 0xEE, 0x69, 0x04, 0x81, 0x73, 0x01, 0x37, - 0x51, 0x68, 0xC8, 0x0B, 0x51, 0xFD, 0x05, 0xB4, - 0x05, 0xBB, 0xA1, 0xDB, 0x1D, 0xF6, 0x5F, 0x70, - 0xD3, 0x0A, 0x37, 0x4B, 0x9C, 0xC4, 0x45, 0x30, - 0x11, 0x36, 0xE2, 0x48, 0x9F, 0xC4, 0x2E, 0x4E, - 0x0C, 0x0C, 0xA1, 0x04, 0x41, 0x75, 0x95, 0xAA, - 0xED, 0xAC, 0xD4, 0xB2, 0xE7, 0x85, 0x7E, 0xE1, - 0xA6, 0xFE, 0x2A, 0x09, 0x19, 0x09, 0x3D, 0x7C, - 0x20, 0x1E, 0x98, 0x3D, 0x6E, 0x02, 0xC1, 0xCA, - 0xBB, 0x24, 0x82, 0x9F, 0x45, 0x1D, 0x26, 0x99, - 0xAE, 0x02, 0x82, 0xF9, 0x86, 0x3B, 0x67, 0x8C, - 0xBD, 0xFE, 0xF1, 0xD0, 0xB6, 0xB8, 0xAB, 0x00, - 0x0F, 0xEC, 0x30, 0xDC, 0x27, 0x58, 0xE2, 0x29, - 0x18, 0x05, 0x5A, 0x66, 0xA5, 0x88, 0x39, 0x8E, - 0x49, 0x5B, 0xB9, 0x52, 0x43, 0x84, 0xDC, 0xA9, - 0x50, 0x2B, 0x83, 0x3C, 0x84, 0x81, 0x37, 0x52, - 0x30, 0x79, 0xBD, 0x04, 0xB8, 0xDD, 0x47, 0xC1, - 0x02, 0x2E, 0xEC, 0x24, 0xD0, 0x56, 0x23, 0xE1, - 0x92, 0xD0, 0x65, 0x7F, 0xC7, 0xC2, 0xF7, 0x60, - 0x73, 0xB8, 0xAF, 0x0A, 0xF4, 0xEF, 0xFC, 0x1B, - 0xC2, 0xB9, 0x76, 0x87, 0x8A, 0xA6, 0xC2, 0x3F, - 0xD3, 0x9F, 0x1F, 0x2D, 0x94, 0xBC, 0x89, 0x4E, - 0x31, 0x8D, 0x28, 0xD0, 0x90, 0xB5, 0x5B, 0x60, - 0x30, 0xC6, 0x0B, 0x37, 0x63, 0x5D, 0xDC, 0xC6, - 0xE0, 0x1A, 0xBA, 0x6B, 0x23, 0xCD, 0x2E, 0x09, - 0x2D, 0x6A, 0x7E, 0x0C, 0xD9, 0x4F, 0xB1, 0xE2, - 0x89, 0x67, 0xE7, 0xB1, 0x54, 0x08, 0xB2, 0xFA, - 0x83, 0x43, 0x7C, 0x77, 0x06, 0xED, 0xE2, 0x29, - 0x53, 0xB7, 0x09, 0xC4, 0x1B, 0x81, 0x55, 0x12, - 0x41, 0x8E, 0x8B, 0x03, 0x36, 0xEE, 0x45, 0x70, - 0x57, 0xA8, 0x73, 0xEF, 0x70, 0x7B, 0x1F, 0x63, - 0xB0, 0xE8, 0x00, 0xBD, 0x1E, 0xE6, 0xA9, 0x93, - 0x9D, 0x03, 0x19, 0x22, 0xDF, 0xE1, 0x01, 0xF2, - 0xA9, 0x6B, 0x90, 0x5C, 0xD2, 0xC1, 0xAC, 0x9F, - 0xB2, 0x21, 0x1C, 0x2D, 0xC6, 0x80, 0x9A, 0xB5, - 0x1E, 0x46, 0x95, 0x6C, 0xCE, 0x47, 0x3E, 0x67, - 0xCD, 0xD6, 0xC9, 0xB9, 0x81, 0x74, 0x7F, 0x17, - 0xA3, 0xF7, 0x48, 0x99, 0xF3, 0x36, 0x84, 0xF3, - 0x16, 0x41, 0x55, 0x5F, 0xA7, 0xBF, 0x4B, 0x69, - 0x8D, 0xA3, 0x3D, 0x1E, 0xEA, 0xF5, 0x1E, 0xC6, - 0xB8, 0x1C, 0xD6, 0x89, 0x45, 0x68, 0xFA, 0xE7, - 0xCA, 0x86, 0xE4, 0xB1, 0xC9, 0x9C, 0xB2, 0xAB, - 0x89, 0x03, 0xE7, 0x19, 0x7B, 0xA9, 0xF2, 0x6B, - 0x4A, 0x43, 0x1D, 0x90, 0xAF, 0xA4, 0xE3, 0xBC, - 0xEF, 0xD4, 0x37, 0xC5, 0x55, 0x5C, 0x9E, 0x14, - 0xC6, 0x18, 0xDD, 0x45, 0x3F, 0x80, 0x49, 0x1C, - 0x93, 0xFF, 0xBD, 0xDD, 0x75, 0x54, 0x0B, 0xD1, - 0xA9, 0xF6, 0xBC, 0x89, 0x98, 0x7D, 0x6F, 0x03, - 0x7B, 0x06, 0xD5, 0x40, 0x7D, 0x85, 0x48, 0x2E, - 0x11, 0x3E, 0xF0, 0x47, 0x77, 0xD0, 0xBA, 0x03, - 0x33, 0x58, 0xC4, 0x8F, 0x76, 0xF8, 0x72, 0x47, - 0x04, 0x21, 0x5E, 0x85, 0x5A, 0x0F, 0x35, 0x77, - 0xFB, 0x96, 0x29, 0x81, 0x2D, 0x55, 0x6E, 0x53, - 0xC6, 0x13, 0x1E, 0xFA, 0x4D, 0xCE, 0xA9, 0x36, - 0x1D, 0x8F, 0xAB, 0xAC, 0x13, 0x19, 0x94, 0xFC, - 0x4B, 0xCD, 0x36, 0x4C, 0x6E, 0x21, 0xAE, 0xF1, - 0x13, 0xA4, 0xF7, 0x64, 0x8E, 0xE1, 0xAF, 0x50, - 0x6A, 0x63, 0x0E, 0xCA, 0x2F, 0xE9, 0x0C, 0x8A, - 0xE7, 0xF2, 0xE3, 0x68, 0x03, 0xE0, 0x40, 0x1C, - 0x64, 0xAB, 0xC3, 0xEC, 0xC0, 0x92, 0xE9, 0x57, - 0x3E, 0x66, 0x72, 0x36, 0x39, 0x22, 0x4E, 0xCD, - 0x13, 0x08, 0xBA, 0xF8, 0x2B, 0xA1, 0xF2, 0x69, - 0x44, 0x7E, 0x90, 0x5C, 0xC8, 0xEC, 0xB6, 0xBE, - 0x8C, 0x30, 0xE0, 0x69, 0xB7, 0x97, 0xA1, 0x1C, - 0x18, 0xE5, 0x54, 0x62, 0xC3, 0x29, 0x99, 0x21, - 0x16, 0xD9, 0x78, 0x1C, 0x4C, 0x9C, 0x88, 0x4C, - 0xA5, 0xE1, 0x11, 0x66, 0x5B, 0x6E, 0x71, 0xE7, - 0xE2, 0xE7, 0xE4, 0x02, 0xDD, 0x1A, 0x8D, 0x0C, - 0xF5, 0x32, 0xFD, 0x41, 0x28, 0x35, 0x75, 0xD0, - 0x0C, 0x5F, 0x06, 0x6A, 0x5A, 0x61, 0x49, 0x59, - 0xC1, 0x0C, 0xD4, 0x9E, 0xD6, 0x29, 0xE2, 0x37, - 0xDF, 0x2B, 0x3D, 0xE8, 0x98, 0xB9, 0xDF, 0x8E, - 0xA0, 0xC4, 0xE2, 0xFC, 0x45, 0x70, 0xE8, 0x1B, - 0xF4, 0xFA, 0xC5, 0xE6, 0xA7, 0xCF, 0x4F, 0xA2, - 0xDA, 0x3D, 0x90, 0x49, 0x24, 0x8F, 0x61, 0x54, - 0xD5, 0x50, 0x8E, 0xE8, 0x0C, 0x14, 0xAD, 0x6F, - 0x65, 0x88, 0x3A, 0xF6, 0x92, 0xDB, 0x35, 0x5D, - 0xFF, 0x21, 0x20, 0xAC, 0x01, 0x16, 0x0B, 0xEC, - 0x84, 0x15, 0x3B, 0xA9, 0x93, 0x92, 0x75, 0xB3, - 0x73, 0xF1, 0x23, 0x69, 0x94, 0x10, 0xF5, 0xFE, - 0x20, 0xA8, 0xAF, 0x05, 0x87, 0x49, 0x4E, 0x9C, - 0xEB, 0x21, 0x0A, 0xCF, 0x0B, 0xA1, 0x65, 0x38, - 0xA6, 0x18, 0x4D, 0xF7, 0xD8, 0xC1, 0x2C, 0x14, - 0x4C, 0xD9, 0x40, 0xC2, 0xF7, 0xBF, 0xE3, 0x07, - 0x79, 0x55, 0xAE, 0xB9, 0xB6, 0x50, 0x06, 0x92, - 0x94, 0x8C, 0x6A, 0x0E, 0x22, 0x14, 0xE2, 0xCC, - 0x65, 0xBA, 0x0C, 0x4D, 0xB6, 0x5C, 0x4A, 0xE9, - 0x0A, 0x08, 0x0C, 0xF9, 0x26, 0xA2, 0x51, 0x85, - 0x36, 0xE2, 0xC1, 0xF1, 0x0A, 0x66, 0x51, 0x66, - 0x7A, 0x98, 0x9B, 0x2C, 0x30, 0x1A, 0x0D, 0x49, - 0x3C, 0x1E, 0xEC, 0x63, 0x53, 0x5E, 0xD9, 0xDD, - 0x84, 0x69, 0xCD, 0x7E, 0x79, 0x58, 0x3D, 0x6E, - 0xD9, 0x98, 0x58, 0xD8, 0x0A, 0x48, 0xB5, 0x13, - 0x3F, 0x72, 0x4C, 0x11, 0x90, 0x15, 0x12, 0x74, - 0xFF, 0x5C, 0x0D, 0xC6, 0x20, 0x8C, 0xC1, 0x99, - 0xCA, 0x8E, 0xFC, 0xA2, 0xE8, 0xB8, 0xEE, 0xAA, - 0x27, 0xC2, 0x97, 0x8D, 0xFA, 0xBE, 0xE0, 0x43, - 0x99, 0xB6, 0x90, 0x60, 0x00, 0x7C, 0x33, 0xD4, - 0x87, 0x71, 0x7B, 0x56, 0x6C, 0xAA, 0xE0, 0xAC, - 0x9D, 0x7E, 0x7E, 0xA3, 0xCF, 0xBB, 0xB3, 0xA0, - 0x5F, 0xD4, 0xC4, 0x3A, 0xA7, 0xB9, 0x0C, 0xCE, - 0xF3, 0x05, 0x09, 0x91, 0xA7, 0xE9, 0x11, 0x55, - 0x32, 0x45, 0xA6, 0x08, 0x0E, 0x10, 0x37, 0x91, - 0xF3, 0xBF, 0xED, 0x64, 0x26, 0xEB, 0x39, 0xC2, - 0x57, 0xAE, 0x64, 0x79, 0x33, 0x7C, 0x51, 0xB2, - 0xC8, 0x85, 0xE0, 0xF9, 0x6D, 0x10, 0x52, 0x9F, - 0x72, 0xF4, 0xD1, 0x5B, 0x54, 0x5B, 0x93, 0x28, - 0x36, 0xA8, 0xCD, 0xB3, 0x30, 0x5B, 0x7A, 0xB0, - 0xB6, 0xF0, 0xD8, 0xA0, 0xBA, 0x24, 0x59, 0x5F, - 0x43, 0x02, 0x01, 0x57, 0x91, 0x7B, 0x94, 0x07, - 0x63, 0x23, 0x12, 0x94, 0xFB, 0x9F, 0xF2, 0xC1, - 0xD6, 0x80, 0x8F, 0x4E, 0xA7, 0x9E, 0x11, 0xD8, - 0xB3, 0x08, 0xB6, 0x3B, 0x3B, 0xF2, 0xEE, 0x14, - 0xA5, 0xDB, 0xB0, 0xBB, 0x17, 0xA5, 0x96, 0x3C, - 0x2F, 0xB9, 0xE7, 0x4A, 0xD7, 0x52, 0x34, 0x98, - 0xCB, 0x0C, 0xEB, 0x42, 0x5B, 0x2D, 0x2D, 0x2B, - 0x0D, 0x94, 0x66, 0xD3, 0xAD, 0x08, 0x0A, 0x28, - 0xF6, 0x0E, 0xDA, 0xD4, 0x54, 0xFD, 0xC6, 0x48, - 0x08, 0xA1, 0x8D, 0xB0, 0x30, 0xFD, 0x18, 0xB1, - 0x50, 0xB1, 0xFD, 0xE0, 0x6E, 0x33, 0x25, 0x0D, - 0x90, 0xB1, 0xC1, 0xE7, 0x88, 0x74, 0x87, 0x05, - 0xE7, 0xBE, 0xBD, 0xAA, 0x8C, 0x6D, 0xC2, 0x3D, - 0x6F, 0x95, 0x84, 0xFA, 0x03, 0x74, 0x85, 0xE1, - 0xED, 0xE5, 0xF4, 0xE8, 0x26, 0x4A, 0x0B, 0x20, - 0x87, 0xB6, 0xE1, 0x10, 0x75, 0x6D, 0x9F, 0x95, - 0x39, 0x4C, 0x0F, 0x50, 0x1B, 0xA8, 0x69, 0x82, - 0xBB, 0xE2, 0xD6, 0x11, 0xD7, 0xBE, 0xFB, 0x4F, - 0x60, 0xD3, 0x16, 0xC6, 0x04, 0x3A, 0x5A, 0xF5, - 0x78, 0x9B, 0x0B, 0x21, 0xA1, 0x00, 0x96, 0xCD, - 0x63, 0x78, 0x1D, 0x2D, 0x4F, 0x6E, 0x50, 0xEE, - 0x62, 0x2D, 0x88, 0x62, 0x01, 0xF6, 0xB4, 0x17, - 0x4F, 0x8C, 0xAD, 0xCB, 0x4B, 0xF9, 0xF6, 0x9D, - 0xC7, 0xD8, 0xCC, 0xBF, 0x96, 0x1B, 0x1B, 0x79, - 0xF3, 0x25, 0x85, 0x23, 0x10, 0x63, 0x30, 0x8D, - 0xA8, 0x3A, 0x4B, 0x92, 0x1B, 0x88, 0x53, 0x24, - 0x2D, 0x29, 0xA5, 0x2E, 0x7A, 0xD5, 0x58, 0xEB, - 0x1B, 0x1C, 0xE6, 0xB8, 0x94, 0x0C, 0x58, 0x96, - 0x5B, 0xA0, 0x2C, 0xBF, 0xE2, 0x99, 0xA0, 0x1F, - 0x0C, 0xCC, 0xBD, 0x83, 0x72, 0x56, 0xBB, 0x13, - 0x61, 0x5A, 0xC2, 0x04, 0x27, 0x29, 0x1F, 0xD4, - 0xE4, 0x3D, 0x8A, 0x87, 0xE3, 0x81, 0x91, 0x07, - 0xD3, 0x9B, 0xBC, 0xA9, 0xB3, 0xBA, 0xF5, 0x8B, - 0x6A, 0xAD, 0xDE, 0xB0, 0x54, 0x3E, 0xFE, 0xCC, - 0xD3, 0xCB, 0x2C, 0x69, 0xF0, 0x58, 0xD7, 0xEF, - 0xA9, 0xC0, 0x15, 0x9B, 0x5A, 0xDF, 0x71, 0x25, - 0x38, 0x44, 0xEC, 0xA9, 0x18, 0x47, 0x41, 0xCE, - 0x3D, 0x53, 0x10, 0x12, 0xC3, 0x1B, 0x59, 0x9A, - 0x93, 0xA1, 0xEA, 0xBE, 0x3E, 0xBA, 0x74, 0xF6, - 0x2D, 0x40, 0x9D, 0xCB, 0x9E, 0xA1, 0xA5, 0x85, - 0xFF, 0xDC, 0xC5, 0x60, 0x6F, 0x61, 0xE8, 0x17, - 0x6C, 0x36, 0x9F, 0x7A, 0x48, 0x47, 0xDD, 0xF1, - 0xF4, 0x43, 0x21, 0xCB, 0xB3, 0x55, 0x86, 0xD0, - 0xE9, 0x46, 0x7D, 0xB5, 0x3D, 0x90, 0x34, 0x1E, - 0xBB, 0x40, 0xD3, 0x2A, 0xEB, 0xE6, 0x4C, 0x46, - 0x42, 0xA2, 0x8A, 0xBF, 0x90, 0xE7, 0x4B, 0x6D, - 0x5C, 0x94, 0x97, 0xD2, 0xF0, 0x97, 0x74, 0x4C, - 0x76, 0x03, 0xAC, 0x3D, 0xDE, 0x15, 0x96, 0x0C, - 0xEF, 0x18, 0x9D, 0xBD, 0x1A, 0x20, 0x35, 0x7E, - 0x2A, 0x70, 0x9D, 0xEA, 0x2E, 0x11, 0xDF, 0xF3, - 0x2F, 0xFE, 0x23, 0xA9, 0xB6, 0xCF, 0xB7, 0xB9, - 0x3F, 0x4F, 0x30, 0x6B, 0x3B, 0x0D, 0x3B, 0xED, - 0xCD, 0x77, 0xD4, 0xBF, 0xEE, 0xDD, 0xB6, 0x56, - 0x24, 0xD4, 0x29, 0x83, 0xDE, 0xDB, 0xC1, 0xFB, - 0x6A, 0xCE, 0x7F, 0x47, 0xD2, 0xC5, 0xF1, 0x78, - 0x5C, 0x2C, 0x5A, 0x28, 0x3E, 0x05, 0x50, 0x2E, - 0xD9, 0xAE, 0x9B, 0x95, 0x64, 0xC7, 0xD2, 0x7B, - 0xCB, 0xC5, 0x91, 0x80, 0xEB, 0x79, 0xC7, 0xCC, - 0xA8, 0x06, 0xC8, 0xF9, 0xDF, 0x2A, 0x49, 0x4A, - 0xF8, 0xFE, 0xBA, 0xA5, 0x85, 0x67, 0x1B, 0xDA, - 0x51, 0x3B, 0xC2, 0x04, 0xA6, 0xA3, 0xFF, 0x99, - 0x21, 0xE8, 0x17, 0x91, 0x33, 0x9B, 0x83, 0x75, - 0x20, 0x5E, 0x95, 0xBE, 0x49, 0xDF, 0x53, 0xFC, - 0x05, 0xA2, 0x3C, 0xAA, 0x5A, 0x22, 0x15, 0xA5, - 0x56, 0xE0, 0x51, 0x30, 0x4E, 0x32, 0x14, 0xF2, - 0x9F, 0x03, 0x51, 0x8E, 0xDD, 0x8B, 0x39, 0x19, - 0x1E, 0x39, 0xC5, 0xA7, 0x1C, 0xC6, 0xA4, 0xE1, - 0x77, 0xCA, 0x8C, 0x9D, 0x27, 0xBC, 0xCC, 0x16, - 0xD6, 0xFC, 0x59, 0x10, 0x23, 0xFF, 0x64, 0x90, - 0x9C, 0x23, 0x5A, 0xFF, 0x7E, 0x27, 0x1B, 0xC7, - 0x7F, 0x21, 0x3B, 0x41, 0xDB, 0xBC, 0x96, 0x60, - 0x0B, 0x35, 0xA1, 0xF3, 0xF8, 0x51, 0x0A, 0x65, - 0xCF, 0xDF, 0x7A, 0xB8, 0x04, 0x56, 0x49, 0xD7, - 0xD3, 0xC5, 0x0B, 0x4A, 0x1F, 0x60, 0xE1, 0x86, - 0x36, 0x53, 0x8E, 0x6C, 0x3E, 0xAF, 0x5B, 0xC1, - 0xCA, 0xCB, 0x22, 0x1A, 0x07, 0xDA, 0x54, 0xEC, - 0xAA, 0x06, 0x72, 0x17, 0xCF, 0x80, 0xC4, 0x89, - 0x56, 0x24, 0x1B, 0xD4, 0xFF, 0x50, 0x6B, 0x51, - 0x55, 0x4D, 0x6E, 0x79, 0x7E, 0xEC, 0x61, 0xC6, - 0xE4, 0x21, 0xC8, 0x0E, 0x10, 0x3F, 0x8C, 0x85, - 0x3A, 0x27, 0xEA, 0x91, 0x07, 0xCB, 0x37, 0x18, - 0x14, 0xB5, 0x63, 0x6E, 0x00, 0xBC, 0x0F, 0x36, - 0xF9, 0x54, 0x75, 0xE7, 0x0B, 0xDC, 0xE7, 0xA0, - 0x59, 0xF0, 0x64, 0xFB, 0x73, 0x07, 0x0E, 0xFE, - 0x57, 0x7F, 0x0D, 0x12, 0xBC, 0xB0, 0xBF, 0xA2, - 0x3A, 0x18, 0x08, 0x7E, 0xD5, 0x6C, 0xF0, 0x6F, - 0xF8, 0x98, 0xFB, 0xA5, 0x10, 0x7B, 0x10, 0x5F, - 0x6B, 0xC8, 0x6D, 0xDE, 0x2F, 0x1F, 0xE0, 0xC8, - 0x19, 0xEE, 0xC2, 0x03, 0x39, 0x49, 0x70, 0x3E, - 0x36, 0xE3, 0x3C, 0x70, 0xE3, 0xEA, 0xAC, 0x34, - 0x32, 0xB7, 0x0D, 0xBA, 0x7C, 0xAB, 0xE6, 0x18 + 0xD2, 0xFD, 0x03, 0xF3, 0xA1, 0xB7, 0xF6, 0x35, + 0xAF, 0x9F, 0x34, 0xD5, 0x80, 0xA9, 0x8F, 0x52, + 0x4C, 0x73, 0x5B, 0xD5, 0xBA, 0x23, 0x55, 0xDC, + 0x6E, 0x03, 0x5B, 0xD2, 0x17, 0x65, 0x58, 0x0C, + 0xBB, 0x11, 0x19, 0x23, 0xF1, 0x94, 0xA7, 0xCC, + 0x8A, 0x7B, 0xB2, 0xEB, 0xC5, 0xC0, 0xE7, 0x1A, + 0xA6, 0x37, 0xCC, 0x80, 0x0E, 0x61, 0x03, 0xB8, + 0x50, 0xA5, 0x39, 0xB2, 0xA3, 0x9E, 0x1B, 0x6D, + 0x71, 0x3E, 0x5D, 0xB8, 0x31, 0x4C, 0x9A, 0xE1, + 0xF8, 0xBF, 0x8A, 0x38, 0xF0, 0x6A, 0xFB, 0x9D, + 0x73, 0xB1, 0x61, 0xB0, 0xFF, 0xE3, 0xA4, 0x89, + 0x17, 0x06, 0xAE, 0x26, 0xD5, 0x4F, 0xFB, 0x49, + 0x6D, 0xF8, 0xDC, 0x0F, 0x19, 0x83, 0x50, 0x95, + 0x00, 0xC9, 0xAB, 0xBD, 0x28, 0xE5, 0x9B, 0x3F, + 0xCD, 0xAB, 0xBD, 0xAD, 0xAB, 0xD4, 0x5E, 0xC3, + 0x14, 0x99, 0x37, 0x8B, 0xDE, 0x84, 0x9E, 0x7C, + 0x1F, 0x19, 0xB7, 0x04, 0x4D, 0x67, 0xE0, 0x51, + 0x06, 0xD7, 0x13, 0x6D, 0x95, 0x38, 0x0D, 0x56, + 0x05, 0xD4, 0x46, 0x5D, 0x87, 0x75, 0x57, 0x06, + 0x5D, 0xF0, 0xA7, 0x5D, 0x3C, 0x28, 0x54, 0x2F, + 0x40, 0xFE, 0xED, 0x42, 0xEC, 0x7E, 0x28, 0x06, + 0x37, 0xB0, 0x83, 0xD9, 0x88, 0xBC, 0xA5, 0xF6, + 0x39, 0x4E, 0x02, 0x39, 0x6C, 0x46, 0x76, 0x18, + 0x4F, 0xB6, 0x33, 0x18, 0xDA, 0xFA, 0xF5, 0xBB, + 0xDD, 0xE0, 0x0E, 0x30, 0x8F, 0xE8, 0x40, 0x19, + 0xC2, 0x34, 0x0A, 0x3F, 0x3E, 0x1C, 0x08, 0x65, + 0x62, 0x49, 0x70, 0x71, 0x12, 0x83, 0x35, 0x6A, + 0xE1, 0x4B, 0xD6, 0xB9, 0x4D, 0x1C, 0x9A, 0xE1, + 0x88, 0xDE, 0x1A, 0x8A, 0x2C, 0xA8, 0x24, 0xA8, + 0xEA, 0xE2, 0xFE, 0x6A, 0xFB, 0x38, 0xD8, 0x3A, + 0x2D, 0x99, 0x99, 0x6A, 0xB2, 0x1F, 0xE3, 0xE8, + 0x4C, 0x0B, 0xE6, 0xB6, 0xDA, 0x08, 0x87, 0x9B, + 0x67, 0x73, 0x74, 0xFA, 0x7C, 0x69, 0x1B, 0x13, + 0xD4, 0x0F, 0xA9, 0xD4, 0xCC, 0x26, 0xB2, 0x28, + 0x8D, 0x5A, 0x8C, 0x9A, 0x43, 0x72, 0x43, 0x81, + 0x00, 0x4D, 0x61, 0xB0, 0xD5, 0x7F, 0xF4, 0x00, + 0x31, 0x4C, 0x8E, 0x30, 0xEE, 0x79, 0x6A, 0xF1, + 0x0F, 0x7E, 0xE2, 0x1B, 0xF1, 0x3D, 0x08, 0x18, + 0x04, 0x65, 0xAB, 0xC7, 0x2E, 0xDD, 0xB0, 0x80, + 0xC6, 0xA0, 0x71, 0x84, 0xE3, 0xEE, 0xDC, 0x47, + 0xC1, 0x9A, 0xA7, 0xF0, 0x9D, 0x1F, 0x33, 0x09, + 0xE1, 0x83, 0xA2, 0xBD, 0x9B, 0x05, 0x73, 0xDD, + 0xE4, 0x74, 0xA8, 0x1B, 0xA4, 0xF7, 0x8D, 0x0C, + 0x52, 0x3D, 0x0C, 0x04, 0xF9, 0x00, 0x60, 0xFD, + 0x57, 0x1A, 0x35, 0xC0, 0x37, 0xE0, 0x79, 0xC5, + 0xE2, 0x10, 0xD7, 0x39, 0x0D, 0xF5, 0x68, 0xF2, + 0xE2, 0xF0, 0x3C, 0xE4, 0x44, 0x20, 0xC8, 0x2F, + 0x3F, 0xE6, 0x9E, 0xB9, 0xB4, 0x8E, 0xE9, 0x09, + 0x62, 0xD6, 0xB0, 0xF2, 0x44, 0x40, 0x64, 0x8F, + 0x71, 0xED, 0xB2, 0x41, 0xEE, 0x65, 0x66, 0xFC, + 0x1A, 0x64, 0xCA, 0xBF, 0x66, 0xBE, 0x6F, 0xEC, + 0xBC, 0xB1, 0x38, 0x7C, 0x82, 0xA7, 0xBC, 0x20, + 0x2D, 0x9E, 0x36, 0x79, 0x98, 0xE2, 0xA2, 0x91, + 0xAF, 0x0C, 0xD1, 0x57, 0x06, 0x77, 0xFE, 0x8D, + 0x63, 0xA3, 0x28, 0x5A, 0x2E, 0xA6, 0xEB, 0x29, + 0xAF, 0x9D, 0xC1, 0xAE, 0xC1, 0xC3, 0x6C, 0x47, + 0x06, 0xB1, 0x2B, 0xAA, 0x20, 0x83, 0x96, 0x92, + 0xF2, 0x86, 0xA6, 0xE0, 0x32, 0x14, 0x68, 0xF7, + 0x47, 0x93, 0x45, 0xC4, 0xD5, 0x2F, 0xBD, 0xB2, + 0xF0, 0x67, 0x25, 0xB5, 0x54, 0xB8, 0x9E, 0x24, + 0x92, 0x61, 0x26, 0x81, 0xAC, 0xEB, 0xC6, 0xC7, + 0xBA, 0xDA, 0x92, 0x25, 0x81, 0x8D, 0xBC, 0x35, + 0xD6, 0x4C, 0x22, 0xC4, 0x8B, 0xFF, 0x80, 0xA7, + 0x30, 0xD0, 0x71, 0x6D, 0xFA, 0xC9, 0x9D, 0xFD, + 0x5B, 0x89, 0x92, 0x61, 0x1D, 0x0C, 0x93, 0xEE, + 0x90, 0xBD, 0xB2, 0x60, 0x02, 0x2A, 0xFE, 0x25, + 0xD9, 0x13, 0xE0, 0x6E, 0xFF, 0xB5, 0x9C, 0xB1, + 0xF8, 0xA6, 0x0C, 0xBF, 0xA5, 0xAB, 0x2F, 0x45, + 0x9A, 0x16, 0xF4, 0x67, 0xE9, 0x89, 0x52, 0x5E, + 0x0A, 0x37, 0xEB, 0xE5, 0x6E, 0x83, 0x3F, 0xDE, + 0x55, 0xDB, 0x9D, 0x15, 0x30, 0xAD, 0xCF, 0x45, + 0x84, 0x6D, 0xF2, 0x81, 0xE4, 0x7C, 0xAA, 0x1E, + 0x0A, 0x27, 0xEF, 0xDE, 0x21, 0x07, 0xD3, 0x54, + 0xCE, 0xA0, 0xF6, 0xA4, 0x54, 0x69, 0x2F, 0x04, + 0xCD, 0x83, 0x8E, 0xBD, 0xD4, 0x6E, 0x19, 0x1E, + 0x5D, 0x9C, 0x11, 0x83, 0x9A, 0x2C, 0x3F, 0x48, + 0x8A, 0x4F, 0xC7, 0xCD, 0x26, 0x5A, 0x7B, 0x5D, + 0x32, 0xB0, 0x8C, 0xBD, 0xBF, 0xAB, 0x9D, 0x2C, + 0xCD, 0x76, 0x22, 0x2C, 0x8E, 0xE3, 0x7D, 0xDC, + 0xBD, 0x2A, 0xA0, 0x63, 0xED, 0x86, 0x14, 0x73, + 0xA6, 0x45, 0x4C, 0xAE, 0xA3, 0x77, 0x85, 0x0B, + 0x1A, 0x2B, 0x9D, 0xDB, 0xBC, 0xB3, 0x74, 0xFA, + 0xB5, 0xB1, 0x2F, 0x35, 0x1C, 0x8E, 0x58, 0x88, + 0x87, 0x2E, 0x5C, 0xD1, 0xF6, 0x0A, 0x4F, 0xAE, + 0x1F, 0xF8, 0x37, 0xD1, 0x92, 0xC2, 0x2B, 0xEB, + 0x41, 0xEE, 0x6F, 0xA3, 0x92, 0xFC, 0xDF, 0x45, + 0x50, 0xFF, 0x46, 0xB5, 0xCE, 0x90, 0x6D, 0x01, + 0x7E, 0xF3, 0x07, 0x7D, 0xF1, 0x32, 0x30, 0x0D, + 0x8B, 0xBF, 0xA9, 0xBB, 0x03, 0xC7, 0x5E, 0x79, + 0xE2, 0xF0, 0x4C, 0x28, 0x4A, 0xD0, 0x6A, 0x44, + 0x39, 0x96, 0x49, 0xC3, 0xE2, 0xA2, 0xA8, 0xD1, + 0xEF, 0xE9, 0xB7, 0xA4, 0xE0, 0xC2, 0x71, 0x04, + 0x7A, 0xB7, 0x59, 0x08, 0xBF, 0xF7, 0xDF, 0x9E, + 0x30, 0xEC, 0xA5, 0x47, 0x74, 0x5B, 0xAE, 0x23, + 0xA8, 0x6F, 0xF9, 0xA8, 0xB5, 0x8C, 0x25, 0x38, + 0xB8, 0x8B, 0x86, 0x64, 0x01, 0x07, 0x69, 0x02, + 0xDC, 0x5F, 0x0B, 0xD7, 0x61, 0x68, 0x7B, 0x49, + 0xEA, 0xFE, 0x36, 0xD3, 0x50, 0xCB, 0xED, 0xFD, + 0xD3, 0x6C, 0x12, 0x1C, 0xF2, 0x37, 0x86, 0xBF, + 0xCF, 0x7E, 0x47, 0x07, 0x64, 0x96, 0xEA, 0xB6, + 0xBB, 0xDA, 0x77, 0x40, 0x49, 0xC2, 0xEB, 0xAB, + 0xE2, 0xDE, 0x99, 0xC4, 0xC2, 0x4F, 0x2D, 0xB7, + 0x36, 0x84, 0x01, 0x5B, 0x37, 0x39, 0x77, 0x49, + 0x67, 0x60, 0xCF, 0x9A, 0xC2, 0x3D, 0x8B, 0x62, + 0x31, 0x33, 0xDB, 0x2D, 0xE1, 0x0D, 0x73, 0xFA, + 0x6A, 0xD1, 0xC6, 0xDA, 0xC8, 0x43, 0x4F, 0x28, + 0xC6, 0xE2, 0x51, 0xCE, 0x72, 0x93, 0xCF, 0xF3, + 0xF3, 0xB6, 0x1E, 0xFC, 0xB5, 0xA4, 0x35, 0x12, + 0x36, 0x70, 0xF2, 0x98, 0x46, 0xA1, 0x3D, 0xF3, + 0xEE, 0x71, 0x26, 0x04, 0x46, 0x1F, 0x1B, 0xAB, + 0x8F, 0x4E, 0xBC, 0x83, 0x6D, 0xE0, 0x58, 0x97, + 0x8A, 0xE7, 0x34, 0x39, 0x6A, 0x98, 0x08, 0x1B, + 0x35, 0xCC, 0x98, 0x18, 0x8A, 0x86, 0x94, 0x9C, + 0x99, 0x27, 0x0D, 0x47, 0x09, 0x85, 0x4C, 0x5B, + 0x35, 0xB1, 0x7F, 0x48, 0xA3, 0x73, 0x13, 0x4C, + 0x81, 0x4C, 0xC8, 0xA0, 0xF3, 0xE2, 0xFA, 0x80, + 0x7F, 0x2A, 0x91, 0x85, 0x30, 0x90, 0x78, 0x64, + 0x77, 0x82, 0x82, 0xD7, 0x5E, 0x03, 0xA4, 0x1B, + 0x25, 0x04, 0xEE, 0xD8, 0x16, 0xA4, 0x17, 0xA3, + 0xAC, 0x6B, 0xA1, 0x60, 0x80, 0xC3, 0x9B, 0x73, + 0x10, 0x19, 0x20, 0x02, 0xA7, 0x28, 0xF7, 0xF2, + 0x03, 0x95, 0x00, 0x9A, 0x9E, 0x16, 0x76, 0x7C, + 0xE1, 0x97, 0x1F, 0x5D, 0xE7, 0xD2, 0x29, 0xA5, + 0x06, 0x13, 0x36, 0x9E, 0x43, 0x82, 0x04, 0x5A, + 0x8E, 0x81, 0x90, 0x1F, 0x4D, 0xBA, 0x81, 0x02, + 0xF3, 0xD4, 0x13, 0xFE, 0x35, 0xB3, 0x26, 0xA8, + 0x74, 0xF2, 0x33, 0xB7, 0x19, 0xA7, 0x13, 0x76, + 0x00, 0xD3, 0x5D, 0x33, 0xAE, 0xB6, 0xB7, 0x25, + 0x96, 0x24, 0x08, 0x3A, 0xA9, 0x68, 0x73, 0x0C, + 0x8F, 0x78, 0x29, 0x2A, 0xD2, 0x8F, 0x14, 0xEE, + 0xAB, 0xE6, 0x60, 0x83, 0x59, 0x84, 0xFE, 0x69, + 0xEF, 0x23, 0xDE, 0xC8, 0xC3, 0x27, 0xC0, 0xEB, + 0x0B, 0x88, 0x2D, 0x58, 0x7E, 0x1E, 0xC4, 0x33, + 0xDA, 0x85, 0xC9, 0xFD, 0x1E, 0x0A, 0x34, 0x99, + 0x4D, 0xEA, 0x24, 0x0C, 0x85, 0x44, 0x52, 0xD1, + 0x8C, 0x30, 0xF4, 0x96, 0xE4, 0x9E, 0xC9, 0x04, + 0xB6, 0x02, 0xE0, 0xF5, 0x06, 0x2E, 0xDC, 0xDA, + 0x03, 0x28, 0x0A, 0x53, 0xB4, 0x31, 0x35, 0x74, + 0xCC, 0x2C, 0x0D, 0x54, 0x71, 0xBC, 0x96, 0x13, + 0xBD, 0xFD, 0x66, 0x41, 0xF5, 0xBD, 0x12, 0x7B, + 0xAB, 0x5B, 0x5E, 0xB3, 0xD4, 0x99, 0xA3, 0x31, + 0x14, 0x04, 0x82, 0x20, 0xE8, 0x19, 0xF8, 0xEE, + 0x12, 0xCA, 0x92, 0x2C, 0x8F, 0x17, 0xD9, 0xC9, + 0xF5, 0x1A, 0xD5, 0xBD, 0x68, 0x83, 0xB1, 0x0E, + 0x6A, 0xA2, 0x48, 0x3B, 0xA4, 0x9D, 0xC5, 0x47, + 0xDA, 0x76, 0x86, 0x15, 0x13, 0x44, 0xF4, 0xE9, + 0x09, 0x9B, 0x38, 0xE4, 0x30, 0xB5, 0x22, 0x6B, + 0x05, 0x98, 0x32, 0xCF, 0x03, 0xDB, 0x48, 0xFB, + 0x02, 0xDB, 0xA4, 0xE6, 0x15, 0x93, 0xDC, 0x45, + 0x76, 0x36, 0x04, 0x91, 0x89, 0x0E, 0x53, 0xEC, + 0x0E, 0x6A, 0xC7, 0x3C, 0xF3, 0x2B, 0x25, 0xD8, + 0x23, 0xB3, 0x84, 0x56, 0xE2, 0x86, 0x50, 0x5A, + 0x54, 0x1E, 0x5A, 0xEE, 0xE9, 0x6B, 0x19, 0x14, + 0xF5, 0xF7, 0x66, 0x87, 0xCE, 0x2B, 0x01, 0x60, + 0x22, 0x7A, 0xBE, 0xD7, 0x79, 0x93, 0x59, 0x4B, + 0xCD, 0x83, 0x13, 0x66, 0x20, 0x6D, 0x75, 0x71, + 0x40, 0x82, 0xF1, 0xC4, 0x6F, 0x1F, 0x44, 0x39, + 0xAC, 0x81, 0xA5, 0x7A, 0xF3, 0x1C, 0x81, 0xC5, + 0x55, 0x30, 0x7A, 0x07, 0x0F, 0xFA, 0x94, 0xE0, + 0x47, 0x9B, 0x78, 0x4B, 0xBD, 0x88, 0xA6, 0x0C, + 0xD4, 0xC7, 0xCF, 0xD9, 0x4E, 0x6A, 0xFE, 0x02, + 0xF6, 0xB2, 0x1F, 0x72, 0xAF, 0x0D, 0xCD, 0x66, + 0x09, 0xD4, 0x0C, 0x96, 0x5C, 0x14, 0xE5, 0xF2, + 0x38, 0x91, 0x83, 0xE5, 0x3D, 0xE9, 0x30, 0xF7, + 0xDE, 0x1D, 0x44, 0x21, 0x5C, 0xF4, 0x91, 0x44, + 0x84, 0x4E, 0x8B, 0x87, 0xF7, 0x8A, 0x7F, 0x13, + 0x2A, 0xEF, 0xE2, 0x2B, 0xE8, 0x0B, 0x4E, 0x3A, + 0x05, 0xEE, 0x3A, 0x68, 0xCC, 0xF6, 0x09, 0xEF, + 0x44, 0x04, 0x74, 0x02, 0xE4, 0x49, 0x30, 0x46, + 0xE6, 0xF9, 0xC7, 0x67, 0xFF, 0x8A, 0x75, 0xE2, + 0x8B, 0x3C, 0xE0, 0x77, 0xFD, 0xE7, 0xE7, 0xEE, + 0xD3, 0x13, 0xB5, 0xBF, 0x7E, 0x46, 0x01, 0x27, + 0xCA, 0x81, 0x82, 0xE9, 0xBC, 0x79, 0x4C, 0x0D, + 0xFA, 0x73, 0x0F, 0xB9, 0x20, 0x08, 0x05, 0x75, + 0xA7, 0x51, 0xB5, 0xCA, 0xEC, 0x85, 0xA1, 0x09, + 0xB4, 0x42, 0x2B, 0xA2, 0x66, 0x74, 0x3F, 0x0D, + 0x03, 0x2B, 0xDA, 0x8F, 0x1C, 0xA6, 0x24, 0x8C, + 0xDB, 0x91, 0x75, 0x30, 0xDF, 0x13, 0x02, 0xA5, + 0xF8, 0xC1, 0x8D, 0xC6, 0x42, 0xD5, 0x24, 0x78, + 0xC9, 0x8C, 0x12, 0xA3, 0xF1, 0x6E, 0xF2, 0xB6, + 0x2B, 0x4F, 0x59, 0xEA, 0x1B, 0xB5, 0x8D, 0xE7, + 0xB6, 0x5B, 0x3C, 0x71, 0x53, 0xCE, 0x6D, 0xA5, + 0xE4, 0x95, 0x07, 0x46, 0xF8, 0x0E, 0x08, 0x7A, + 0x0E, 0x35, 0x86, 0xD0, 0x97, 0x79, 0x1B, 0xF3, + 0x6D, 0xEF, 0x86, 0x5D, 0x68, 0x59, 0x1D, 0x39, + 0xD0, 0x90, 0x37, 0x73, 0xEE, 0xA9, 0x62, 0x14, + 0x7F, 0x34, 0x70, 0x41, 0x38, 0xB5, 0x4D, 0xF7, + 0x92, 0x4C, 0xDD, 0x8C, 0x33, 0x3D, 0xB5, 0xE1, + 0xA4, 0x09, 0xCC, 0xB2, 0xB3, 0x4E, 0x2C, 0x3C, + 0x8C, 0x7F, 0xDD, 0x3F, 0xD8, 0xD0, 0x12, 0xCB, + 0xF3, 0x82, 0xAA, 0xA8, 0x5E, 0x83, 0xA1, 0x2F, + 0x23, 0x5A, 0x2D, 0x14, 0x7D, 0x03, 0x5B, 0x7B, + 0x28, 0xB3, 0x4B, 0x6F, 0x57, 0x94, 0x9F, 0x32, + 0x24, 0x82, 0xA7, 0xD4, 0xD3, 0xB1, 0x50, 0x45, + 0xC4, 0x20, 0xD5, 0xAD, 0xDC, 0x7F, 0x0E, 0x69, + 0xB4, 0xDC, 0x1C, 0xBA, 0x58, 0xB0, 0x1D, 0x87, + 0x24, 0x80, 0xB0, 0x6A, 0x26, 0x0D, 0x82, 0x7D, + 0x89, 0x1B, 0x13, 0xC4, 0xC5, 0xCA, 0x50, 0xC7, + 0x48, 0xDE, 0x3C, 0x77, 0x1B, 0xE6, 0x1E, 0x9A, + 0xA1, 0x70, 0x16, 0x5C, 0xB0, 0x1F, 0x4B, 0xF5, + 0xDA, 0x27, 0xA7, 0x79, 0x1D, 0x3A, 0xD3, 0xF6, + 0x26, 0x7B, 0x4C, 0xB4, 0xE6, 0x1B, 0x28, 0xFA, + 0x17, 0x08, 0x41, 0x8D, 0x93, 0x2D, 0xFC, 0x41, + 0x61, 0x88, 0x0C, 0x5D, 0x3B, 0x17, 0xA9, 0x66, + 0x3A, 0x90, 0x61, 0xFA, 0x8F, 0x18, 0x04, 0x31, + 0x58, 0x50, 0xFE, 0x4E, 0x73, 0x06, 0xC8, 0x82, + 0xB3, 0x82, 0x27, 0xE8, 0x67, 0xF8, 0x08, 0x72, + 0xCD, 0xC1, 0x94, 0x4D, 0x47, 0x26, 0x15, 0xEA, + 0x49, 0x00, 0xEF, 0x7D, 0x27, 0x0B, 0x88, 0x1D, + 0x41, 0x30, 0xF5, 0x6C, 0x5C, 0xC9, 0x80, 0xD9, + 0x2A, 0x47, 0xAD, 0xA6, 0x65, 0x7E, 0xB6, 0xF3, + 0x7A, 0x38, 0x5D, 0x2D, 0x8C, 0xC9, 0x93, 0xE1, + 0x44, 0x2E, 0xB0, 0x52, 0x81, 0x85, 0x36, 0x36, + 0x99, 0x1E, 0x34, 0xAA, 0xDC, 0x68, 0x95, 0x4D, + 0x04, 0xE7, 0xAD, 0xEF, 0x76, 0xBF, 0x88, 0x0F, + 0x05, 0x9B, 0x0C, 0xBB, 0x55, 0xD9, 0x15, 0xA4, + 0xB1, 0x23, 0xE2, 0xF1, 0x33, 0x9A, 0x07, 0x3C, + 0xBF, 0xBC, 0x40, 0x9B, 0xEF, 0xF6, 0x40, 0x0A, + 0xE0, 0x96, 0xD5, 0xAE, 0x18, 0xEC, 0x42, 0xCF, + 0xFA, 0xD5, 0xB4, 0x98, 0x0F, 0xA3, 0x5B, 0xF0, + 0x34, 0x13, 0xAD, 0xB5, 0xD7, 0xE6, 0x87, 0x6A, + 0xC3, 0x55, 0xD1, 0xC9, 0xED, 0x70, 0xCA, 0x2B, + 0x97, 0x39, 0x54, 0xD1, 0x2B, 0x3C, 0xDD, 0x76, + 0xAC, 0x68, 0x35, 0xDB, 0x96, 0x00, 0x3E, 0xD8, + 0xC4, 0xE2, 0x88, 0xB7, 0x1F, 0xD7, 0x7D, 0xBA, + 0xA7, 0x63, 0x57, 0x20, 0xE1, 0x2A, 0xE0, 0xA3, + 0x17, 0xDE, 0x80, 0x8C, 0x66, 0x4E, 0x31, 0x7F, + 0x55, 0x27, 0x57, 0x91, 0xF3, 0x24, 0x5C, 0xA4, + 0xFE, 0x5D, 0x4D, 0x41, 0x07, 0x7F, 0xC1, 0x50, + 0xA6, 0xE4, 0x03, 0xD5, 0xA2, 0x08, 0xE4, 0x6E, + 0xAD, 0xBE, 0x8F, 0x2C, 0xFB, 0x8A, 0xF4, 0x72, + 0xF4, 0xA0, 0xCE, 0xAC, 0x01, 0x52, 0x19, 0x47, + 0x8E, 0x6B, 0x86, 0xC9, 0x58, 0xCF, 0x86, 0x52, + 0x5B, 0x74, 0x85, 0xC1, 0x73, 0x4C, 0x7E, 0xF0, + 0x0E, 0x90, 0x68, 0x3F, 0xFF, 0x5D, 0xBD, 0x0A, + 0x7D, 0x41, 0x3A, 0x85, 0x50, 0x21, 0x02, 0x6A, + 0x1B, 0x32, 0x01, 0x3A, 0x46, 0x16, 0xCB, 0xCD, + 0x37, 0x00, 0xAC, 0xBC, 0x70, 0x5B, 0xE3, 0xEF, + 0xBA, 0x62, 0x5C, 0x69, 0xA0, 0x25, 0x26, 0x7B, + 0xCE, 0x9D, 0x13, 0x5E, 0x3F, 0x5B, 0x5C, 0xC8, + 0xC4, 0x39, 0x56, 0x40, 0x7E, 0x84, 0xB6, 0x66, + 0x31, 0x03, 0xE2, 0x9C, 0x24, 0x20, 0x35, 0x55, + 0x1A, 0xE7, 0x97, 0xF5, 0x6C, 0x63, 0x74, 0xBE, + 0x0C, 0x79, 0x8C, 0x0C, 0xF3, 0x98, 0xF1, 0xED }; static const byte sk_65[] = { - 0xDC, 0x38, 0xE5, 0x5F, 0xDF, 0x2E, 0x9D, 0xD4, - 0x34, 0x5C, 0xAE, 0x1A, 0x7D, 0xF4, 0x2E, 0x2E, - 0xBC, 0x58, 0x57, 0x80, 0x55, 0x02, 0xE4, 0x3F, - 0xA5, 0x19, 0x41, 0xE4, 0x44, 0x58, 0x66, 0x41, - 0x52, 0x8D, 0xA0, 0xC7, 0xD2, 0x80, 0xDD, 0x49, - 0x0D, 0x5E, 0xB7, 0x65, 0xDB, 0x32, 0x33, 0x15, - 0x0F, 0x9E, 0xC8, 0xEB, 0xC9, 0x6E, 0xE8, 0xE8, - 0x5C, 0xBD, 0x18, 0x4F, 0xDC, 0xF8, 0xA8, 0xD9, - 0xC5, 0x33, 0x84, 0x79, 0x5A, 0x5E, 0xB7, 0x3C, - 0x6D, 0x82, 0xCA, 0xB9, 0xBA, 0x94, 0xB6, 0x46, - 0xAE, 0x3A, 0xD9, 0x19, 0x6C, 0xB4, 0xDA, 0xE2, - 0xF1, 0x4B, 0xB6, 0x43, 0xF0, 0x24, 0x08, 0xE5, - 0xF7, 0x9A, 0x41, 0xF1, 0x15, 0x9C, 0xA8, 0x08, - 0x79, 0x9F, 0xB8, 0x26, 0xD4, 0x08, 0x32, 0x47, - 0xC8, 0xF0, 0xD5, 0x31, 0xA1, 0xC1, 0x19, 0x04, - 0x02, 0x06, 0x2B, 0x4D, 0x46, 0xAE, 0x43, 0x6A, - 0x25, 0x82, 0x75, 0x41, 0x70, 0x36, 0x42, 0x48, - 0x78, 0x06, 0x36, 0x50, 0x23, 0x84, 0x68, 0x10, - 0x87, 0x08, 0x62, 0x00, 0x08, 0x34, 0x20, 0x73, - 0x32, 0x13, 0x36, 0x61, 0x87, 0x61, 0x43, 0x50, - 0x30, 0x02, 0x26, 0x07, 0x65, 0x45, 0x32, 0x00, - 0x25, 0x75, 0x01, 0x04, 0x88, 0x81, 0x58, 0x64, - 0x52, 0x40, 0x84, 0x22, 0x88, 0x42, 0x82, 0x56, - 0x47, 0x50, 0x05, 0x21, 0x88, 0x25, 0x32, 0x25, - 0x12, 0x85, 0x14, 0x52, 0x87, 0x77, 0x67, 0x18, - 0x46, 0x54, 0x63, 0x07, 0x88, 0x67, 0x37, 0x26, - 0x72, 0x62, 0x41, 0x02, 0x00, 0x01, 0x17, 0x84, - 0x33, 0x64, 0x32, 0x57, 0x06, 0x20, 0x05, 0x44, - 0x88, 0x57, 0x33, 0x45, 0x70, 0x55, 0x14, 0x43, - 0x12, 0x54, 0x04, 0x38, 0x37, 0x08, 0x42, 0x57, - 0x36, 0x05, 0x30, 0x03, 0x86, 0x53, 0x02, 0x53, - 0x75, 0x22, 0x62, 0x13, 0x38, 0x82, 0x48, 0x30, - 0x83, 0x83, 0x64, 0x83, 0x13, 0x74, 0x57, 0x32, - 0x46, 0x70, 0x06, 0x05, 0x82, 0x52, 0x73, 0x55, - 0x25, 0x77, 0x21, 0x78, 0x57, 0x83, 0x66, 0x20, - 0x38, 0x53, 0x21, 0x41, 0x77, 0x56, 0x77, 0x46, - 0x34, 0x42, 0x58, 0x31, 0x08, 0x06, 0x03, 0x62, - 0x20, 0x35, 0x11, 0x42, 0x35, 0x38, 0x63, 0x86, - 0x64, 0x13, 0x13, 0x75, 0x40, 0x01, 0x53, 0x74, - 0x41, 0x31, 0x56, 0x64, 0x38, 0x17, 0x14, 0x16, - 0x62, 0x33, 0x22, 0x12, 0x64, 0x40, 0x67, 0x11, - 0x62, 0x42, 0x25, 0x60, 0x38, 0x05, 0x83, 0x13, - 0x51, 0x00, 0x28, 0x36, 0x62, 0x56, 0x41, 0x43, - 0x58, 0x37, 0x51, 0x22, 0x70, 0x25, 0x82, 0x82, - 0x35, 0x24, 0x06, 0x83, 0x48, 0x58, 0x81, 0x78, - 0x07, 0x86, 0x23, 0x15, 0x75, 0x32, 0x46, 0x75, - 0x35, 0x40, 0x08, 0x43, 0x10, 0x66, 0x74, 0x05, - 0x13, 0x72, 0x74, 0x08, 0x83, 0x41, 0x81, 0x08, - 0x75, 0x87, 0x83, 0x28, 0x56, 0x66, 0x20, 0x01, - 0x18, 0x83, 0x57, 0x22, 0x14, 0x64, 0x18, 0x05, - 0x27, 0x75, 0x22, 0x84, 0x12, 0x38, 0x87, 0x52, - 0x32, 0x25, 0x28, 0x08, 0x14, 0x41, 0x81, 0x14, - 0x03, 0x24, 0x54, 0x23, 0x04, 0x81, 0x40, 0x36, - 0x38, 0x38, 0x64, 0x42, 0x46, 0x36, 0x68, 0x11, - 0x55, 0x00, 0x11, 0x25, 0x76, 0x16, 0x43, 0x07, - 0x23, 0x03, 0x34, 0x10, 0x46, 0x41, 0x14, 0x02, - 0x26, 0x10, 0x74, 0x38, 0x38, 0x72, 0x07, 0x87, - 0x54, 0x11, 0x12, 0x83, 0x75, 0x05, 0x82, 0x17, - 0x45, 0x20, 0x38, 0x41, 0x37, 0x20, 0x00, 0x08, - 0x32, 0x18, 0x16, 0x25, 0x58, 0x85, 0x16, 0x88, - 0x71, 0x82, 0x45, 0x60, 0x33, 0x11, 0x13, 0x42, - 0x43, 0x37, 0x68, 0x11, 0x16, 0x54, 0x04, 0x08, - 0x52, 0x78, 0x13, 0x56, 0x83, 0x52, 0x15, 0x24, - 0x03, 0x61, 0x78, 0x44, 0x13, 0x70, 0x67, 0x36, - 0x74, 0x86, 0x52, 0x50, 0x15, 0x41, 0x88, 0x74, - 0x53, 0x00, 0x05, 0x18, 0x65, 0x62, 0x14, 0x84, - 0x12, 0x32, 0x01, 0x88, 0x40, 0x42, 0x34, 0x05, - 0x32, 0x80, 0x72, 0x55, 0x20, 0x68, 0x16, 0x43, - 0x14, 0x15, 0x15, 0x38, 0x43, 0x85, 0x27, 0x60, - 0x70, 0x18, 0x27, 0x35, 0x53, 0x01, 0x28, 0x73, - 0x27, 0x84, 0x10, 0x53, 0x67, 0x10, 0x45, 0x40, - 0x81, 0x52, 0x86, 0x06, 0x11, 0x18, 0x04, 0x31, - 0x57, 0x25, 0x22, 0x44, 0x47, 0x81, 0x45, 0x44, - 0x55, 0x04, 0x72, 0x57, 0x06, 0x46, 0x76, 0x23, - 0x38, 0x85, 0x65, 0x30, 0x08, 0x48, 0x20, 0x13, - 0x22, 0x77, 0x44, 0x60, 0x43, 0x14, 0x15, 0x27, - 0x86, 0x22, 0x37, 0x37, 0x27, 0x04, 0x27, 0x50, - 0x74, 0x31, 0x10, 0x82, 0x00, 0x75, 0x80, 0x44, - 0x38, 0x10, 0x58, 0x40, 0x86, 0x60, 0x63, 0x13, - 0x65, 0x18, 0x33, 0x70, 0x57, 0x68, 0x05, 0x10, - 0x81, 0x03, 0x42, 0x05, 0x25, 0x65, 0x33, 0x57, - 0x38, 0x05, 0x65, 0x34, 0x46, 0x53, 0x68, 0x11, - 0x75, 0x10, 0x04, 0x54, 0x18, 0x47, 0x52, 0x24, - 0x63, 0x23, 0x74, 0x45, 0x11, 0x34, 0x68, 0x32, - 0x35, 0x38, 0x52, 0x85, 0x28, 0x08, 0x71, 0x78, - 0x37, 0x38, 0x27, 0x10, 0x80, 0x54, 0x26, 0x33, - 0x31, 0x82, 0x44, 0x88, 0x33, 0x24, 0x62, 0x86, - 0x32, 0x82, 0x73, 0x31, 0x28, 0x14, 0x73, 0x87, - 0x06, 0x35, 0x80, 0x36, 0x67, 0x02, 0x33, 0x75, - 0x27, 0x36, 0x38, 0x16, 0x35, 0x70, 0x52, 0x16, - 0x87, 0x58, 0x85, 0x17, 0x22, 0x13, 0x54, 0x85, - 0x07, 0x53, 0x31, 0x26, 0x78, 0x01, 0x85, 0x18, - 0x08, 0x68, 0x38, 0x52, 0x11, 0x73, 0x32, 0x25, - 0x58, 0x82, 0x70, 0x70, 0x36, 0x30, 0x50, 0x38, - 0x65, 0x12, 0x78, 0x31, 0x77, 0x72, 0x18, 0x41, - 0x05, 0x42, 0x32, 0x26, 0x26, 0x50, 0x52, 0x86, - 0x15, 0x76, 0x28, 0x66, 0x88, 0x03, 0x78, 0x28, - 0x70, 0x33, 0x36, 0x27, 0x16, 0x61, 0x43, 0x56, - 0x62, 0x81, 0x85, 0x75, 0x47, 0x60, 0x63, 0x38, - 0x66, 0x81, 0x51, 0x78, 0x03, 0x42, 0x60, 0x38, - 0x01, 0x24, 0x73, 0x63, 0x81, 0x12, 0x01, 0x27, - 0x63, 0x13, 0x11, 0x78, 0x36, 0x37, 0x15, 0x03, - 0x84, 0x58, 0x17, 0x25, 0x67, 0x87, 0x57, 0x83, - 0x71, 0x85, 0x37, 0x53, 0x86, 0x22, 0x33, 0x28, - 0x77, 0x30, 0x18, 0x15, 0x01, 0x37, 0x85, 0x40, - 0x15, 0x38, 0x51, 0x33, 0x17, 0x42, 0x64, 0x04, - 0x56, 0x27, 0x50, 0x45, 0x11, 0x27, 0x20, 0x17, - 0x76, 0x55, 0x33, 0x37, 0x58, 0x88, 0x88, 0x45, - 0x16, 0x55, 0x08, 0x53, 0x52, 0x48, 0x72, 0x85, - 0x30, 0x15, 0x23, 0x44, 0x22, 0x02, 0x43, 0x45, - 0x41, 0x10, 0x00, 0x52, 0x32, 0x73, 0x05, 0x75, - 0x72, 0x16, 0x08, 0x11, 0x51, 0x36, 0x20, 0x04, - 0x76, 0x48, 0x78, 0x56, 0x60, 0x88, 0x07, 0x47, - 0x70, 0x20, 0x46, 0x40, 0x43, 0x26, 0x04, 0x37, - 0x17, 0x51, 0x58, 0x46, 0x72, 0x44, 0x50, 0x23, - 0x67, 0x63, 0x60, 0x84, 0x30, 0x51, 0x52, 0x53, - 0x21, 0x74, 0x85, 0x45, 0x74, 0x43, 0x11, 0x72, - 0x52, 0x65, 0x76, 0x08, 0x78, 0x63, 0x14, 0x27, - 0x41, 0x34, 0x67, 0x07, 0x45, 0x15, 0x10, 0x83, - 0x24, 0x02, 0x80, 0x53, 0x07, 0x21, 0x58, 0x10, - 0x34, 0x20, 0x54, 0x12, 0x58, 0x44, 0x25, 0x53, - 0x33, 0x46, 0x02, 0x38, 0x60, 0x17, 0x70, 0x64, - 0x18, 0x52, 0x62, 0x26, 0x65, 0x61, 0x42, 0x31, - 0x22, 0x57, 0x34, 0x57, 0x02, 0x34, 0x62, 0x76, - 0x74, 0x38, 0x73, 0x21, 0x68, 0x71, 0x07, 0x21, - 0x61, 0x05, 0x20, 0x20, 0x86, 0x83, 0x30, 0x25, - 0x50, 0x50, 0x83, 0x30, 0x31, 0x56, 0x30, 0x31, - 0x76, 0x04, 0x54, 0x80, 0x75, 0x18, 0x82, 0x23, - 0x61, 0x87, 0x58, 0x25, 0x13, 0x63, 0x21, 0x51, - 0x48, 0x02, 0x67, 0x37, 0x12, 0x88, 0x70, 0x60, - 0x07, 0x36, 0x18, 0x15, 0x87, 0x74, 0x55, 0x60, - 0x00, 0x54, 0x37, 0x11, 0x01, 0x37, 0x14, 0x17, - 0x11, 0x72, 0x14, 0x55, 0x31, 0x75, 0x77, 0x48, - 0x10, 0x23, 0x83, 0x20, 0x00, 0x04, 0x32, 0x64, - 0x66, 0x61, 0x71, 0x31, 0x03, 0x15, 0x44, 0x32, - 0x57, 0x25, 0x64, 0x31, 0x28, 0x15, 0x33, 0x67, - 0x86, 0x87, 0x37, 0x03, 0x12, 0x78, 0x86, 0x13, - 0x47, 0x80, 0x61, 0x42, 0x50, 0x40, 0x23, 0x37, - 0x01, 0x01, 0x66, 0x24, 0x06, 0x57, 0x82, 0x02, - 0x22, 0x42, 0x41, 0x02, 0x26, 0x06, 0x41, 0x35, - 0x64, 0x16, 0x44, 0x42, 0x38, 0x30, 0x86, 0x88, - 0x47, 0x71, 0x62, 0x33, 0x24, 0x02, 0x12, 0x37, - 0x42, 0x33, 0x20, 0x81, 0x80, 0x53, 0x07, 0x65, - 0x71, 0x27, 0x13, 0x53, 0x15, 0x43, 0x76, 0x38, - 0x71, 0x30, 0x07, 0x87, 0x25, 0x63, 0x03, 0x33, - 0x70, 0x56, 0x18, 0x13, 0x83, 0x51, 0x44, 0x40, - 0x04, 0x80, 0x62, 0x24, 0x20, 0x64, 0x54, 0x40, - 0x20, 0x73, 0x61, 0x45, 0x01, 0x24, 0x47, 0x78, - 0x23, 0x34, 0x56, 0x10, 0x25, 0x32, 0x02, 0x70, - 0x08, 0x02, 0x23, 0x24, 0x80, 0x43, 0x04, 0x02, - 0x81, 0x11, 0x23, 0x82, 0x03, 0x61, 0x30, 0x33, - 0x15, 0x36, 0x25, 0x32, 0x14, 0x73, 0x22, 0x46, - 0x81, 0x25, 0x16, 0x13, 0x52, 0x58, 0x71, 0x61, - 0x67, 0x08, 0x38, 0x76, 0x71, 0x15, 0x88, 0x47, - 0x31, 0x25, 0x27, 0x18, 0x31, 0x50, 0x40, 0x71, - 0x06, 0x87, 0x37, 0x30, 0x85, 0x64, 0x62, 0x78, - 0x32, 0x74, 0x18, 0x83, 0x67, 0x40, 0x37, 0x44, - 0x56, 0x02, 0x72, 0x61, 0x27, 0x28, 0x38, 0x38, - 0x67, 0x17, 0x58, 0x04, 0x61, 0x28, 0x67, 0x37, - 0x46, 0x50, 0x38, 0x15, 0x45, 0x12, 0x71, 0x44, - 0x22, 0x02, 0x34, 0x83, 0x40, 0x70, 0x55, 0x75, - 0x54, 0x26, 0x88, 0x07, 0x25, 0x58, 0x73, 0x60, - 0x58, 0x61, 0x45, 0x63, 0x35, 0x05, 0x48, 0x63, - 0x48, 0x57, 0x03, 0x31, 0x28, 0x14, 0x05, 0x01, - 0x57, 0x34, 0x64, 0x50, 0x23, 0x86, 0x75, 0x85, - 0x18, 0x75, 0x56, 0x88, 0x08, 0x26, 0x01, 0x34, - 0x01, 0x57, 0x05, 0x28, 0x35, 0x48, 0x17, 0x57, - 0x71, 0x81, 0x41, 0x33, 0x77, 0x86, 0x07, 0x77, - 0x02, 0x25, 0x71, 0x74, 0x37, 0x31, 0x20, 0x14, - 0x32, 0x54, 0x20, 0x35, 0x54, 0x76, 0x83, 0x15, - 0x80, 0x73, 0x27, 0x23, 0x00, 0x58, 0x22, 0x84, - 0x64, 0x56, 0x14, 0x84, 0x38, 0x34, 0x16, 0x21, - 0x77, 0x07, 0x34, 0x81, 0x66, 0x87, 0x40, 0x11, - 0x62, 0x46, 0x45, 0x01, 0x20, 0x53, 0x21, 0x73, - 0x07, 0x76, 0x44, 0x15, 0x61, 0x50, 0x83, 0x48, - 0x58, 0x58, 0x45, 0x33, 0x25, 0x36, 0x07, 0x42, - 0x70, 0x24, 0x07, 0x41, 0x08, 0x35, 0x00, 0x78, - 0x41, 0x47, 0x02, 0x56, 0x07, 0x14, 0x68, 0x33, - 0x55, 0x77, 0x32, 0x40, 0x55, 0x24, 0x50, 0x26, - 0x47, 0x12, 0x65, 0x58, 0x43, 0x05, 0x52, 0x55, - 0x75, 0x50, 0x18, 0x46, 0x65, 0x48, 0x03, 0x32, - 0x85, 0x31, 0x16, 0x52, 0x71, 0x57, 0x87, 0x46, - 0x76, 0x14, 0x42, 0x81, 0x28, 0x74, 0x60, 0x34, - 0x35, 0x55, 0x52, 0x16, 0x58, 0x48, 0x61, 0x75, - 0x80, 0x88, 0x15, 0x32, 0x72, 0x26, 0x31, 0x03, - 0x05, 0x03, 0x16, 0x04, 0x07, 0x37, 0x37, 0x73, - 0x43, 0x81, 0x57, 0x31, 0x88, 0x04, 0x72, 0x76, - 0x01, 0x61, 0x81, 0x17, 0x37, 0x65, 0x44, 0x38, - 0x61, 0x23, 0x16, 0x26, 0x52, 0x45, 0x00, 0x73, - 0x83, 0x63, 0x64, 0x62, 0x26, 0x74, 0x60, 0x11, - 0x81, 0x08, 0x06, 0x30, 0x36, 0x05, 0x10, 0x48, - 0x47, 0x35, 0x10, 0x85, 0x30, 0x86, 0x71, 0x38, - 0x16, 0x37, 0x6F, 0x3B, 0x1C, 0x18, 0xB1, 0xE3, - 0xE8, 0xEE, 0x83, 0x3E, 0x8D, 0x38, 0x43, 0x9E, - 0x78, 0x1C, 0xA3, 0xB8, 0x94, 0x06, 0x54, 0xEF, - 0x44, 0x6C, 0x9A, 0xAC, 0xC3, 0xF1, 0xD3, 0x0E, - 0xE0, 0x10, 0x5B, 0x8F, 0x63, 0xEB, 0x89, 0x74, - 0x6E, 0xF4, 0xBE, 0xB5, 0x4C, 0xFC, 0xE8, 0x81, - 0x2C, 0xF9, 0x47, 0xCF, 0x54, 0x54, 0xFB, 0x1C, - 0xA5, 0x5F, 0x25, 0xA0, 0xFE, 0x57, 0xF5, 0xFC, - 0xFD, 0x73, 0xB0, 0xDA, 0x04, 0xB0, 0xBF, 0x28, - 0x92, 0x92, 0xAF, 0x39, 0x74, 0x72, 0x56, 0x69, - 0xC3, 0x00, 0x03, 0xE0, 0x50, 0x9F, 0xED, 0xC8, - 0x0F, 0x6C, 0x89, 0x4B, 0xB0, 0x47, 0xC2, 0xE2, - 0xAF, 0x48, 0x5C, 0xAD, 0x68, 0xC2, 0x1D, 0x80, - 0xEF, 0x33, 0xB0, 0xC4, 0xFD, 0xA6, 0x7B, 0x85, - 0x31, 0xA1, 0x58, 0x87, 0x67, 0x54, 0x71, 0x3F, - 0xF8, 0xA8, 0xA6, 0x8D, 0x9A, 0xBD, 0xC4, 0x81, - 0x6B, 0x24, 0xB4, 0xA3, 0x6A, 0x8A, 0x2B, 0xB1, - 0xFD, 0x1C, 0x2C, 0x25, 0xC3, 0x72, 0xC4, 0xB7, - 0x75, 0xF8, 0xCC, 0x17, 0x39, 0xCF, 0x2C, 0xE9, - 0xA4, 0x54, 0x58, 0xE4, 0x1A, 0xAE, 0xC6, 0x4A, - 0xEE, 0xDE, 0x75, 0x7C, 0xE7, 0x38, 0xBC, 0xDF, - 0x4D, 0xA0, 0xEE, 0x2B, 0xDD, 0x5F, 0x80, 0x5C, - 0xCF, 0xF7, 0x2A, 0x5F, 0x73, 0x8B, 0xAC, 0x12, - 0x34, 0x2E, 0xE3, 0xF1, 0x4C, 0xB7, 0x22, 0x68, - 0xC2, 0xD6, 0x36, 0x7D, 0xF1, 0x7F, 0x20, 0x46, - 0xA2, 0x4B, 0x47, 0x4B, 0x32, 0x58, 0xF7, 0xB0, - 0x88, 0x54, 0x6C, 0x99, 0x3B, 0x0D, 0xA1, 0xE2, - 0x92, 0x92, 0xEB, 0x72, 0x1E, 0xE7, 0xE5, 0xA1, - 0xF8, 0x6E, 0x14, 0xA5, 0x39, 0xB0, 0x63, 0x6F, - 0x78, 0x82, 0xA1, 0x9C, 0x8D, 0x79, 0x02, 0x85, - 0xA6, 0xDF, 0x7D, 0xEE, 0xCE, 0x17, 0x4D, 0x63, - 0xCF, 0xF3, 0xB2, 0xFF, 0x85, 0x68, 0x81, 0xCB, - 0x38, 0x6B, 0x1B, 0x38, 0xA2, 0xE0, 0xF2, 0x4C, - 0x31, 0xE0, 0x91, 0x93, 0xDD, 0xF3, 0x71, 0x47, - 0xF2, 0x69, 0xD9, 0x4C, 0xDE, 0xF9, 0x90, 0x61, - 0x34, 0x62, 0x07, 0x71, 0x79, 0xD0, 0xDD, 0x09, - 0x32, 0x64, 0x39, 0x49, 0x93, 0x1A, 0x02, 0xBA, - 0xFA, 0x80, 0x17, 0x6E, 0xDF, 0x97, 0xB6, 0xA2, - 0x31, 0x34, 0x71, 0xF0, 0xB1, 0x9B, 0x3B, 0x59, - 0xF4, 0x3B, 0xD2, 0x2A, 0x05, 0x49, 0x3E, 0xFB, - 0x0C, 0xF8, 0xB5, 0xD7, 0xB6, 0x25, 0x2B, 0x09, - 0x8B, 0x4B, 0xFA, 0x39, 0x5B, 0xF9, 0xA2, 0x09, - 0xE9, 0xBB, 0x46, 0x01, 0x30, 0x00, 0x90, 0x32, - 0x58, 0xA6, 0x9B, 0x67, 0xF5, 0x94, 0x11, 0xC8, - 0x35, 0x95, 0xFA, 0x6E, 0x67, 0x42, 0x8D, 0x96, - 0x6D, 0x20, 0xFC, 0xD3, 0x09, 0x61, 0x11, 0x86, - 0x77, 0xC0, 0x86, 0xA3, 0x54, 0xAE, 0x6D, 0x41, - 0xEE, 0x17, 0xDC, 0xA1, 0xB0, 0xB7, 0x50, 0x43, - 0xD6, 0xCE, 0x23, 0xBD, 0xB0, 0x1E, 0x02, 0xE5, - 0x9E, 0xCF, 0xC6, 0x2E, 0x8C, 0x39, 0x71, 0xB1, - 0x45, 0x02, 0x75, 0xBA, 0x7F, 0x60, 0xB0, 0x8B, - 0x1C, 0x33, 0xBA, 0x0C, 0xFF, 0x54, 0x63, 0xE3, - 0x47, 0x5B, 0x07, 0x77, 0x77, 0xC5, 0x72, 0x24, - 0x60, 0xFA, 0xDB, 0x0B, 0xF6, 0x41, 0x82, 0x69, - 0x3C, 0x68, 0x37, 0xF5, 0xFD, 0x45, 0x4A, 0x66, - 0x6C, 0xD7, 0x01, 0x10, 0x78, 0x4A, 0xED, 0x09, - 0xAE, 0x49, 0x0A, 0x60, 0xC7, 0x78, 0x56, 0x51, - 0x15, 0xE3, 0x4A, 0xB5, 0xAE, 0xAD, 0x09, 0xD1, - 0x71, 0xA8, 0xCA, 0x3C, 0x8A, 0xE6, 0xCA, 0x39, - 0x43, 0x60, 0x56, 0x83, 0x3C, 0x58, 0x04, 0xD4, - 0xB4, 0x62, 0xDD, 0x53, 0x05, 0xC8, 0x51, 0xAF, - 0x59, 0xF6, 0x4F, 0x04, 0xC3, 0x1E, 0x69, 0xFF, - 0x82, 0xBF, 0xD7, 0x89, 0xD2, 0x30, 0x9F, 0xF2, - 0xE6, 0x38, 0x05, 0x9C, 0xD5, 0x08, 0xB8, 0x25, - 0xF3, 0x3B, 0x99, 0x85, 0x4E, 0x40, 0xF8, 0x40, - 0xF2, 0x4B, 0x5C, 0x3A, 0xA8, 0x64, 0x41, 0x92, - 0xEA, 0xCA, 0x9A, 0x7B, 0xCF, 0xBA, 0x1F, 0xDE, - 0xE0, 0x9D, 0xCA, 0xAD, 0xB4, 0x0C, 0x90, 0xFF, - 0xE1, 0x6C, 0xEC, 0xDD, 0x32, 0x38, 0x2A, 0xF7, - 0x19, 0x20, 0x39, 0xCB, 0x29, 0x67, 0x2F, 0x70, - 0x71, 0x12, 0x10, 0xB6, 0xB8, 0x3E, 0x8D, 0xFD, - 0xB5, 0xFB, 0xBD, 0xBF, 0xA8, 0xCA, 0x19, 0xC4, - 0xC6, 0xAC, 0x37, 0x31, 0xFC, 0x33, 0xC2, 0x7F, - 0xA2, 0xA2, 0x6D, 0xEB, 0x15, 0x2E, 0xA1, 0x90, - 0xF8, 0x29, 0xC6, 0x34, 0xD1, 0x39, 0x30, 0x24, - 0x1C, 0xB9, 0x26, 0xAC, 0xDD, 0xE5, 0x24, 0x9C, - 0xDD, 0x35, 0x60, 0x7E, 0x38, 0x0C, 0xC1, 0x2A, - 0x7D, 0x1E, 0xA9, 0xBA, 0xA5, 0x58, 0x4C, 0xDD, - 0x26, 0x86, 0x09, 0xDC, 0xC3, 0xB0, 0x1F, 0xCD, - 0xC9, 0xAD, 0xCB, 0x4A, 0x7E, 0x51, 0x67, 0xE5, - 0xED, 0x5A, 0xD2, 0x21, 0xDB, 0x2E, 0xAB, 0xD9, - 0x0A, 0xEC, 0xAE, 0x71, 0xFA, 0x23, 0x7A, 0xEF, - 0x98, 0xDF, 0x53, 0x89, 0x93, 0xE8, 0x71, 0xD7, - 0x35, 0xDA, 0x6B, 0x88, 0x31, 0xAF, 0x67, 0xF2, - 0x97, 0x29, 0x1C, 0x39, 0x67, 0xEB, 0xAF, 0x60, - 0xD9, 0x53, 0xC4, 0x0F, 0x7A, 0x46, 0x4E, 0xF3, - 0x2F, 0x8E, 0xAE, 0xFA, 0x64, 0x2E, 0x37, 0xDE, - 0xA9, 0x74, 0x73, 0x5D, 0xDD, 0xBB, 0x83, 0x54, - 0x27, 0xB9, 0x7A, 0x63, 0x2B, 0x19, 0x8B, 0x26, - 0x22, 0x28, 0x84, 0xA0, 0x58, 0x00, 0x2D, 0x55, - 0xEA, 0x2A, 0x80, 0x0D, 0x6C, 0x97, 0x0E, 0x8B, - 0xF7, 0x67, 0xB2, 0x8B, 0x2D, 0xDE, 0x8F, 0x58, - 0xFE, 0x97, 0x81, 0xE7, 0xE2, 0x58, 0x8D, 0x7E, - 0x1B, 0xAB, 0xE5, 0x15, 0x9D, 0x54, 0xF4, 0x00, - 0x34, 0x1D, 0x12, 0x1B, 0x03, 0x23, 0x2B, 0x06, - 0x2E, 0x8C, 0xD0, 0x0A, 0xDC, 0x19, 0xA1, 0x69, - 0x1D, 0x72, 0x91, 0xB4, 0xED, 0x0E, 0x81, 0xF7, - 0x05, 0x99, 0x84, 0xFC, 0x74, 0x0F, 0x7D, 0xF8, - 0x9B, 0x3E, 0x7F, 0x63, 0x7C, 0x73, 0xEB, 0xF5, - 0x36, 0xB3, 0x24, 0x22, 0xAA, 0x33, 0x0C, 0x30, - 0x42, 0xC3, 0xE2, 0x04, 0x6B, 0x3F, 0x2A, 0x0D, - 0xAB, 0xE8, 0x5A, 0x9A, 0x09, 0xD7, 0xB6, 0xAA, - 0x9C, 0x3E, 0xD0, 0x9E, 0xB5, 0x9B, 0x52, 0x7B, - 0xAF, 0x2D, 0x6B, 0xE0, 0x40, 0x12, 0x34, 0xBE, - 0x49, 0xAB, 0xD2, 0xC8, 0xB5, 0x89, 0x1B, 0x79, - 0xEC, 0xAE, 0x88, 0x89, 0x3C, 0x05, 0xC7, 0x75, - 0xC5, 0x84, 0xF7, 0x10, 0x49, 0x48, 0x92, 0x69, - 0x9E, 0xD5, 0x56, 0xB2, 0x1E, 0x81, 0x18, 0x78, - 0xCB, 0x93, 0x5D, 0x70, 0x3A, 0xB2, 0x67, 0xD1, - 0xCC, 0x8F, 0x83, 0x03, 0xB9, 0x64, 0x46, 0x22, - 0x78, 0x0D, 0x55, 0x67, 0x22, 0x58, 0x0E, 0x22, - 0x6B, 0xBA, 0x01, 0xD4, 0x77, 0x05, 0xA7, 0xAC, - 0xB7, 0xE5, 0xFC, 0xE6, 0x11, 0xCC, 0x92, 0x5A, - 0x8C, 0xC0, 0x08, 0x24, 0xAF, 0xCC, 0x4D, 0xBD, - 0x79, 0xD3, 0x5C, 0x52, 0x2C, 0xFF, 0x1A, 0x48, - 0xBB, 0x91, 0x59, 0x6A, 0x80, 0x32, 0x8C, 0x75, - 0x7C, 0xD2, 0xC1, 0x94, 0x94, 0xA8, 0x55, 0x4B, - 0xF2, 0x96, 0xF7, 0x86, 0xF7, 0x53, 0x4F, 0x54, - 0x74, 0x05, 0x5C, 0xEF, 0x02, 0xA0, 0x8A, 0xD1, - 0x88, 0x72, 0xEB, 0x1B, 0x82, 0xF9, 0xFB, 0xDA, - 0xBC, 0xB9, 0x90, 0x98, 0xF2, 0x4B, 0x9A, 0xA6, - 0x89, 0xD5, 0xB3, 0xD8, 0x7B, 0x94, 0xE3, 0x1F, - 0x17, 0x4F, 0xEB, 0x24, 0x06, 0x2B, 0xAB, 0x5F, - 0x27, 0x9B, 0xCD, 0xCE, 0x50, 0x06, 0x40, 0xDD, - 0x7A, 0x8C, 0x67, 0xF0, 0x8E, 0x07, 0xB4, 0x1C, - 0x3C, 0x13, 0xB2, 0x07, 0x6A, 0x38, 0x59, 0x94, - 0x2C, 0xB1, 0x72, 0xA8, 0x77, 0x5B, 0x15, 0x8F, - 0x88, 0xC4, 0x5C, 0xDC, 0x92, 0xCA, 0xC0, 0xED, - 0x02, 0xFF, 0x1D, 0x57, 0x25, 0xBE, 0x67, 0x3E, - 0x4C, 0xE8, 0x95, 0x2A, 0x80, 0xB2, 0x5D, 0xBC, - 0xFA, 0x17, 0xA9, 0x35, 0x0A, 0x6B, 0x07, 0xC8, - 0x8F, 0x88, 0x8D, 0xBC, 0x97, 0x84, 0xE2, 0x07, - 0x57, 0x92, 0x99, 0x4B, 0xE8, 0xDD, 0xD7, 0xA4, - 0x58, 0xCB, 0x61, 0xCE, 0x16, 0xFC, 0x22, 0xCD, - 0x4B, 0x1A, 0x08, 0xC9, 0xAD, 0x3D, 0xB1, 0xF2, - 0xA9, 0x1B, 0x8E, 0xD0, 0xC7, 0xBC, 0xCE, 0xF9, - 0x0A, 0x7A, 0x4D, 0xBE, 0x82, 0x0A, 0xBD, 0x6C, - 0x42, 0x99, 0xBF, 0x86, 0x65, 0x53, 0xAA, 0x04, - 0x79, 0xD6, 0x6D, 0x7E, 0x0F, 0x40, 0xFA, 0xEE, - 0xCE, 0x38, 0x3B, 0x1C, 0x2F, 0xA4, 0x45, 0xA3, - 0x78, 0x2B, 0xA0, 0x29, 0xC5, 0xAA, 0xA9, 0x09, - 0x29, 0x51, 0xDC, 0x5B, 0xB5, 0x95, 0xE4, 0xCE, - 0xC8, 0x50, 0x71, 0x2D, 0xE9, 0x32, 0x12, 0xA0, - 0x7C, 0x88, 0x6B, 0xED, 0xE4, 0x38, 0xB7, 0x92, - 0xCA, 0xE4, 0xDC, 0xD4, 0x05, 0x3B, 0x2B, 0x84, - 0x95, 0x07, 0xFF, 0xF4, 0x79, 0xFF, 0x1E, 0x73, - 0x1B, 0x8E, 0xDF, 0xA3, 0x15, 0xBD, 0x56, 0xAC, - 0xDA, 0xAD, 0x73, 0x95, 0xC2, 0xD3, 0x72, 0xA8, - 0xF0, 0x8E, 0x6C, 0xE3, 0x7D, 0xBE, 0x4C, 0x87, - 0xFC, 0x0F, 0xA6, 0x3B, 0xED, 0xA4, 0x0F, 0x4F, - 0xF1, 0x5D, 0xF2, 0x56, 0x54, 0xD1, 0xCE, 0x6C, - 0xCA, 0x1C, 0xCB, 0xC2, 0x45, 0x7F, 0x90, 0x61, - 0x0E, 0x3D, 0xCE, 0xBB, 0x5E, 0x41, 0x38, 0x2B, - 0xD4, 0x41, 0x7C, 0x67, 0x7C, 0x71, 0x95, 0x34, - 0xD7, 0xED, 0x4D, 0xAC, 0x6E, 0xF1, 0x46, 0xEA, - 0x7D, 0xA4, 0x4C, 0x69, 0x0B, 0x9C, 0x2F, 0xAA, - 0xF1, 0x17, 0x90, 0x1B, 0xF4, 0x4C, 0x03, 0xBE, - 0x9D, 0x56, 0xCE, 0x0C, 0xCF, 0xE0, 0x87, 0x44, - 0xBE, 0x2C, 0x52, 0xD3, 0xBC, 0xAE, 0x02, 0x30, - 0xC7, 0x26, 0x06, 0x88, 0xA6, 0xAA, 0x9D, 0x50, - 0xF1, 0x94, 0x58, 0xC7, 0x60, 0xF3, 0xA0, 0x6F, - 0x53, 0x66, 0x53, 0xCD, 0x1D, 0xBE, 0xD1, 0xF2, - 0x39, 0xBA, 0x1F, 0xE8, 0x40, 0x84, 0xCD, 0x1C, - 0x8F, 0x3D, 0xB7, 0xD1, 0x51, 0x00, 0xDE, 0xB8, - 0x11, 0xD9, 0x66, 0xAD, 0xD5, 0xE9, 0x33, 0x09, - 0xE1, 0xA8, 0x00, 0x58, 0x65, 0xF1, 0xC1, 0x67, - 0xB4, 0x3A, 0xA7, 0x98, 0x90, 0x6A, 0xDB, 0x91, - 0xDB, 0x4A, 0x16, 0x35, 0xDC, 0x3D, 0x69, 0xEB, - 0x7B, 0xDE, 0xCC, 0x91, 0x1B, 0x8D, 0xE6, 0x46, - 0x61, 0x8E, 0x3F, 0x4C, 0x88, 0x81, 0x85, 0x4A, - 0x73, 0x08, 0x56, 0x52, 0xAE, 0xE6, 0x4A, 0x60, - 0x4A, 0x2E, 0x0C, 0x9A, 0x93, 0x76, 0x35, 0xC9, - 0x36, 0x28, 0x0C, 0x72, 0x19, 0xAD, 0x33, 0xCF, - 0x2B, 0xFB, 0xCE, 0x1A, 0x7D, 0xAC, 0xAA, 0x75, - 0x15, 0x76, 0x81, 0x52, 0x55, 0xCC, 0xB9, 0x39, - 0x07, 0xA3, 0x39, 0x12, 0x8D, 0x6F, 0x53, 0xAF, - 0xC7, 0x14, 0x7F, 0xC7, 0x96, 0x5A, 0x49, 0x3C, - 0x5C, 0xB0, 0x26, 0x47, 0xF4, 0x9D, 0xCA, 0x23, - 0xA6, 0x7D, 0xA6, 0x61, 0xC4, 0xA3, 0x26, 0x40, - 0x0F, 0xA7, 0x27, 0x09, 0xBC, 0x39, 0xFD, 0xA7, - 0x75, 0x38, 0x74, 0xD0, 0x9D, 0x29, 0x15, 0x97, - 0xDE, 0x25, 0x60, 0x4D, 0x19, 0x36, 0x04, 0xFB, - 0xA5, 0x2C, 0xB0, 0xC8, 0xB5, 0xFE, 0xE5, 0x94, - 0x7C, 0xE2, 0x1F, 0x84, 0xBB, 0xFB, 0x78, 0x9E, - 0xA5, 0x7C, 0x5D, 0x4A, 0xB2, 0x48, 0x6F, 0x6E, - 0x67, 0x95, 0x16, 0x5F, 0x01, 0x2A, 0xF8, 0x70, - 0x95, 0xCB, 0x06, 0x93, 0x26, 0x6E, 0x7A, 0x75, - 0xB5, 0xE5, 0x4E, 0x27, 0x1D, 0x8B, 0x30, 0xA6, - 0x67, 0x67, 0xD6, 0xE2, 0xD6, 0xD1, 0x99, 0xA4, - 0x55, 0x73, 0x19, 0x32, 0xF6, 0x0B, 0x6B, 0x4A, - 0xEE, 0x23, 0x33, 0x38, 0x30, 0x68, 0x6F, 0x8E, - 0x60, 0xA9, 0x60, 0x97, 0x3E, 0xEA, 0x5D, 0xE1, - 0x40, 0x6F, 0x0C, 0x76, 0x84, 0xCF, 0xAF, 0x86, - 0x8D, 0x36, 0xE5, 0x7D, 0xAE, 0x9A, 0x13, 0x70, - 0x22, 0x2A, 0x31, 0xFE, 0xC2, 0xFB, 0xE1, 0x58, - 0xA5, 0x4E, 0xEF, 0x10, 0x5B, 0x5E, 0xD4, 0x39, - 0xFC, 0xF9, 0x15, 0x64, 0x78, 0x43, 0x7D, 0x03, - 0x9F, 0x5B, 0xCB, 0x86, 0xD2, 0xEF, 0x28, 0xBD, - 0x14, 0xCB, 0x8A, 0x04, 0x1D, 0x59, 0x23, 0x53, - 0x4D, 0x13, 0xF9, 0x93, 0xFE, 0x19, 0x9C, 0xC3, - 0x3F, 0xD9, 0xC1, 0x12, 0x94, 0x84, 0x13, 0x95, - 0x8F, 0xD9, 0x10, 0xAB, 0x37, 0x69, 0x08, 0x04, - 0x4A, 0x97, 0x82, 0x28, 0x75, 0xBB, 0xC9, 0xF4, - 0x3F, 0x19, 0x6B, 0x00, 0x4C, 0x56, 0x16, 0x1F, - 0x50, 0x82, 0xD1, 0x45, 0xFF, 0x0C, 0x37, 0x28, - 0x04, 0xBB, 0x6C, 0x00, 0x97, 0x3A, 0x79, 0x2D, - 0x9A, 0xB9, 0xA5, 0x16, 0x52, 0x02, 0xA3, 0x86, - 0x81, 0xAA, 0x3A, 0x31, 0xE5, 0xB5, 0x44, 0x2D, - 0x34, 0xE2, 0x7A, 0xD8, 0xFE, 0xA1, 0x36, 0xC0, - 0x36, 0x65, 0x73, 0x12, 0x9F, 0x61, 0x3F, 0x59, - 0xC9, 0x68, 0xB6, 0x34, 0x41, 0x40, 0x25, 0xD6, - 0xE7, 0xAD, 0x25, 0x7D, 0xCB, 0xF1, 0x2A, 0xD8, - 0x53, 0x48, 0x9D, 0xBF, 0xB5, 0xD5, 0x61, 0x18, - 0x0E, 0x2A, 0x21, 0x3E, 0x61, 0x18, 0x07, 0x8E, - 0x6F, 0x9A, 0x96, 0xA8, 0x61, 0xFE, 0x8D, 0x66, - 0x1A, 0x21, 0x99, 0xD9, 0x60, 0x8B, 0xAC, 0x85, - 0x84, 0x3D, 0x41, 0xF9, 0x93, 0x35, 0x24, 0x32, - 0xFF, 0xC0, 0x8A, 0xFA, 0xBC, 0xA7, 0x85, 0x57, - 0x3C, 0x16, 0x83, 0xAE, 0x90, 0xDE, 0x40, 0x12, - 0xE4, 0x2B, 0xA2, 0x47, 0xA4, 0x92, 0x73, 0x54, - 0x6C, 0xA5, 0xB7, 0xEE, 0x62, 0xEA, 0x62, 0x37, - 0xD9, 0xD7, 0x73, 0x58, 0x43, 0xDB, 0x20, 0x60, - 0x8C, 0x4F, 0x87, 0x58, 0xB2, 0x2B, 0xC3, 0x40, - 0xB0, 0xC1, 0xB6, 0xB6, 0xA9, 0xCD, 0xCC, 0x05, - 0x4F, 0x38, 0x5F, 0x08, 0xB3, 0x3B, 0x08, 0x4D, - 0x78, 0x6B, 0x0D, 0x40, 0x46, 0xB9, 0x20, 0xDE, - 0x29, 0x6F, 0x23, 0x96, 0xDA, 0x02, 0xF5, 0x1C, - 0x1A, 0x1A, 0x36, 0xA3, 0x3A, 0xFA, 0x1D, 0x80, - 0x36, 0x3C, 0xF6, 0xB4, 0xDC, 0x2C, 0x88, 0x54, - 0xF7, 0x86, 0xC6, 0xF2, 0x15, 0xF8, 0x85, 0x33, - 0xFB, 0x21, 0x20, 0x59, 0xCE, 0x60, 0x4B, 0xE8, - 0xF1, 0xB7, 0x54, 0x17, 0x1E, 0x83, 0xCD, 0x82, - 0x39, 0x40, 0x14, 0x31, 0xEC, 0x89, 0xC8, 0xE2, - 0x6A, 0xAE, 0x3F, 0x49, 0x5B, 0x38, 0xE7, 0xCD, - 0xE2, 0xF6, 0xEF, 0x90, 0x51, 0x10, 0x83, 0x79, - 0x27, 0x80, 0x2F, 0x45, 0x78, 0x67, 0xAF, 0xF4, - 0x65, 0x95, 0x2D, 0xFE, 0x00, 0xF3, 0x2A, 0x60, - 0x00, 0xF7, 0x26, 0xFA, 0x3C, 0xAD, 0xA9, 0xAF, - 0xCA, 0xF6, 0x69, 0x48, 0x03, 0xBE, 0x18, 0x73, - 0x54, 0x06, 0x06, 0x3E, 0x4E, 0xAD, 0xFC, 0x8B, - 0xC3, 0x43, 0x24, 0x5D, 0xE9, 0xDE, 0x78, 0xDC, - 0xD0, 0xA7, 0x04, 0x77, 0xF0, 0x0D, 0xA3, 0x37, - 0x8C, 0x5F, 0x8B, 0xDF, 0xBE, 0x90, 0x1F, 0xA6, - 0xB3, 0x17, 0x9D, 0x68, 0x36, 0x45, 0x11, 0x60, - 0xFF, 0xF9, 0xBA, 0xDA, 0x80, 0xAA, 0x37, 0x57, - 0xDD, 0x34, 0x30, 0x42, 0x7A, 0x9C, 0x86, 0xB4, - 0x91, 0x30, 0xB8, 0xC0, 0xC4, 0x29, 0x15, 0x31, - 0xF3, 0x9A, 0xB0, 0xCD, 0xAC, 0x8C, 0x7C, 0x8C, - 0x4A, 0xDC, 0x76, 0xB6, 0x31, 0x30, 0xDE, 0x2D, - 0x81, 0x04, 0xC7, 0x48, 0x73, 0x69, 0x02, 0x40, - 0x30, 0x19, 0x66, 0x94, 0x21, 0x65, 0x13, 0x18, - 0xC2, 0x09, 0x14, 0x5F, 0xC4, 0x2F, 0xC4, 0xD6, - 0xA6, 0x05, 0x37, 0xAF, 0x72, 0x0C, 0x47, 0x02, - 0x29, 0x95, 0x08, 0x9D, 0xC9, 0x07, 0x31, 0x38, - 0xA9, 0xB5, 0xDA, 0x21, 0x76, 0x1D, 0x84, 0xD0, - 0x15, 0xAF, 0x2A, 0xA3, 0x69, 0x0A, 0xE9, 0x4F, - 0x75, 0x8A, 0x50, 0xA5, 0x11, 0xD4, 0x5F, 0xAF, - 0x70, 0x43, 0xCB, 0xD7, 0x03, 0x9E, 0xB0, 0xBD, - 0x19, 0x47, 0x94, 0x58, 0x22, 0x86, 0xC6, 0xE3, - 0x62, 0xD8, 0x63, 0x05, 0xD9, 0xE2, 0xE5, 0x4A, - 0x04, 0x54, 0x5A, 0x55, 0x25, 0xAD, 0x15, 0x5C, - 0x4B, 0x71, 0x25, 0xE1, 0x50, 0xE3, 0x62, 0x1B, - 0xD2, 0x43, 0x28, 0xD2, 0x84, 0xE4, 0xE2, 0x05, - 0xE3, 0x01, 0x4C, 0x8F, 0x38, 0x17, 0x49, 0xFD, - 0x3B, 0x52, 0x1A, 0x55, 0xB3, 0x1D, 0x69, 0x83, - 0xAB, 0x9E, 0xC4, 0x73, 0xEE, 0x64, 0x7A, 0x73, - 0x19, 0xEF, 0xCD, 0x7D, 0xB7, 0xF4, 0x2E, 0xCB, - 0x55, 0x2A, 0x8A, 0xCC, 0x8F, 0xF8, 0x4E, 0xFB, - 0xD2, 0x63, 0x8F, 0xF1, 0x10, 0x89, 0x02, 0x93, - 0x3E, 0xAC, 0xA4, 0xB4, 0x89, 0xC7, 0xF7, 0x8B, - 0x3E, 0xE1, 0xE8, 0x93, 0xB9, 0x8E, 0x36, 0x25, - 0xC1, 0xC0, 0xD9, 0x44, 0x81, 0xC0, 0x99, 0x3C, - 0x2B, 0x89, 0xF7, 0xDF, 0xDB, 0xD8, 0xCC, 0x84, - 0xE6, 0xFF, 0xFE, 0xAC, 0x21, 0x16, 0xF1, 0xE2, - 0xEF, 0x0A, 0x32, 0xA7, 0xDE, 0x87, 0x51, 0xEC, - 0xB1, 0x0C, 0x0B, 0xC7, 0x07, 0xD9, 0x9A, 0xF8, - 0xE8, 0xB0, 0xFE, 0xA5, 0x67, 0xAF, 0x53, 0x9F, - 0xEF, 0x23, 0xEF, 0x7D, 0xFF, 0xA8, 0x8E, 0xDE, - 0x97, 0x93, 0x32, 0xA6, 0x7C, 0xCF, 0x49, 0xBC, - 0x36, 0x0D, 0x88, 0x90, 0x89, 0x39, 0x76, 0xA8, - 0x82, 0x19, 0x02, 0xB6, 0x02, 0x82, 0xFE, 0xED, - 0x9C, 0x28, 0x8D, 0xB0, 0x1E, 0x2B, 0x2A, 0xCF, - 0xF3, 0x94, 0xFF, 0x66, 0x33, 0x93, 0x31, 0xD6, - 0xFC, 0xAF, 0xE7, 0xC5, 0x98, 0x01, 0x46, 0xCD, - 0xCB, 0xC4, 0x41, 0x13, 0x6D, 0x42, 0xF5, 0x13, - 0xDF, 0xF9, 0x97, 0x65, 0xD4, 0x7B, 0x6E, 0x10, - 0x79, 0x5D, 0x5A, 0x82, 0xA2, 0x49, 0x53, 0xA7, - 0x6D, 0x9C, 0xDD, 0x0A, 0x80, 0x98, 0x58, 0x07, - 0x30, 0xBF, 0x0B, 0x30, 0xAC, 0x24, 0x9E, 0xA0, - 0xE8, 0xE4, 0x7A, 0x0D, 0xD0, 0x50, 0x82, 0xAE, - 0xBB, 0xEC, 0x15, 0x30, 0x2A, 0xF2, 0xA7, 0xA6, - 0x6A, 0xC8, 0xAE, 0x1E, 0x14, 0x80, 0x7C, 0x18, - 0xE7, 0x2B, 0x88, 0x65, 0xB7, 0x93, 0x12, 0xB3, - 0xC1, 0x2A, 0x20, 0xAD, 0x3B, 0x2E, 0x84, 0xC4, - 0x0D, 0xA7, 0x62, 0x5C, 0x79, 0x52, 0x5D, 0x59, - 0xA4, 0x69, 0x5C, 0x26, 0xFD, 0x4F, 0x80, 0xCC, - 0xFE, 0x8E, 0x70, 0x72, 0xB1, 0x41, 0xE1, 0x75, - 0x53, 0x51, 0xCF, 0x4C, 0x0B, 0x57, 0xF2, 0xB8, - 0x59, 0x76, 0xE6, 0xEF, 0x6D, 0x74, 0xA6, 0x73, - 0x69, 0x7F, 0x7C, 0xB2, 0x35, 0xFE, 0x8A, 0x02, - 0x2F, 0xBE, 0x7C, 0x4D, 0x02, 0xBE, 0x8F, 0xFB, - 0x7A, 0x58, 0x45, 0xEC, 0xBA, 0x1B, 0xC6, 0xB9, - 0x8D, 0xF5, 0xB0, 0x82, 0xD1, 0xB4, 0x97, 0x86, - 0x9B, 0x33, 0x54, 0x49, 0x5B, 0x88, 0xD9, 0xB5, - 0xD0, 0x93, 0x8A, 0x00, 0x5D, 0x0F, 0x37, 0x88, - 0x57, 0xE3, 0xFA, 0x7E, 0x7B, 0xFA, 0x43, 0x74, - 0x8D, 0x64, 0x07, 0xD7, 0x07, 0x85, 0x4D, 0x49, - 0xBC, 0x83, 0xF5, 0xD4, 0x95, 0x3E, 0x3E, 0x09, - 0x65, 0xF3, 0xFC, 0x88, 0xA7, 0xF0, 0x46, 0x61, - 0x44, 0x7D, 0x76, 0xED, 0xC9, 0x8D, 0x0F, 0x8D, - 0xDA, 0x0D, 0x01, 0xC8, 0xB1, 0xA8, 0x9B, 0x4A, - 0xF0, 0xA3, 0x88, 0x54, 0xC1, 0xD6, 0x52, 0x97 + 0xD2, 0xFD, 0x03, 0xF3, 0xA1, 0xB7, 0xF6, 0x35, + 0xAF, 0x9F, 0x34, 0xD5, 0x80, 0xA9, 0x8F, 0x52, + 0x4C, 0x73, 0x5B, 0xD5, 0xBA, 0x23, 0x55, 0xDC, + 0x6E, 0x03, 0x5B, 0xD2, 0x17, 0x65, 0x58, 0x0C, + 0xE3, 0x8D, 0x1C, 0x14, 0xF6, 0x46, 0x7C, 0x35, + 0xA9, 0xF3, 0x80, 0xD2, 0x7D, 0xE6, 0x1F, 0x7C, + 0x75, 0x03, 0x15, 0x69, 0xEA, 0x2E, 0xC8, 0x26, + 0x0E, 0xEE, 0x91, 0x05, 0x26, 0x1B, 0x7F, 0xE1, + 0x60, 0xC9, 0x13, 0x44, 0xB0, 0xC6, 0x76, 0x4C, + 0x20, 0x4E, 0x5B, 0x8D, 0x42, 0x46, 0x50, 0xBE, + 0xC0, 0x6B, 0x9E, 0x2E, 0x62, 0x5A, 0xF0, 0x7E, + 0x23, 0xF4, 0x95, 0x0C, 0xA2, 0x4F, 0xB4, 0xD6, + 0xEC, 0x2C, 0x8B, 0x3A, 0x71, 0x7C, 0x93, 0x11, + 0xEB, 0x87, 0x27, 0x9F, 0xE2, 0x5E, 0x31, 0x1F, + 0x48, 0xB8, 0x25, 0x65, 0x01, 0xF6, 0x46, 0x34, + 0x12, 0xB5, 0x0D, 0xBC, 0x89, 0xA8, 0x69, 0xBA, + 0x22, 0x41, 0x11, 0x26, 0x48, 0x40, 0x07, 0x38, + 0x73, 0x02, 0x12, 0x44, 0x25, 0x44, 0x57, 0x54, + 0x83, 0x72, 0x50, 0x33, 0x35, 0x62, 0x58, 0x42, + 0x32, 0x01, 0x62, 0x11, 0x83, 0x61, 0x02, 0x45, + 0x66, 0x56, 0x48, 0x35, 0x61, 0x20, 0x84, 0x52, + 0x60, 0x68, 0x50, 0x45, 0x65, 0x55, 0x12, 0x72, + 0x47, 0x47, 0x21, 0x21, 0x25, 0x40, 0x22, 0x21, + 0x42, 0x81, 0x17, 0x65, 0x03, 0x06, 0x42, 0x61, + 0x52, 0x13, 0x43, 0x25, 0x24, 0x33, 0x82, 0x12, + 0x11, 0x35, 0x62, 0x33, 0x32, 0x07, 0x47, 0x86, + 0x22, 0x31, 0x50, 0x83, 0x70, 0x84, 0x26, 0x43, + 0x45, 0x64, 0x51, 0x48, 0x31, 0x14, 0x86, 0x24, + 0x66, 0x86, 0x74, 0x33, 0x71, 0x36, 0x67, 0x26, + 0x01, 0x47, 0x07, 0x72, 0x11, 0x61, 0x58, 0x85, + 0x58, 0x38, 0x71, 0x83, 0x80, 0x67, 0x01, 0x65, + 0x78, 0x70, 0x64, 0x77, 0x85, 0x60, 0x02, 0x88, + 0x53, 0x48, 0x46, 0x62, 0x25, 0x83, 0x54, 0x88, + 0x04, 0x74, 0x40, 0x12, 0x57, 0x43, 0x71, 0x07, + 0x75, 0x44, 0x38, 0x71, 0x21, 0x14, 0x22, 0x08, + 0x88, 0x72, 0x23, 0x58, 0x87, 0x46, 0x14, 0x85, + 0x53, 0x71, 0x67, 0x73, 0x82, 0x28, 0x22, 0x74, + 0x14, 0x03, 0x57, 0x73, 0x28, 0x71, 0x83, 0x80, + 0x78, 0x14, 0x34, 0x87, 0x52, 0x07, 0x64, 0x74, + 0x01, 0x60, 0x75, 0x61, 0x06, 0x08, 0x61, 0x32, + 0x21, 0x46, 0x15, 0x65, 0x42, 0x67, 0x08, 0x20, + 0x84, 0x10, 0x73, 0x13, 0x03, 0x61, 0x02, 0x86, + 0x50, 0x45, 0x26, 0x12, 0x16, 0x68, 0x33, 0x55, + 0x25, 0x84, 0x73, 0x53, 0x54, 0x52, 0x65, 0x17, + 0x10, 0x60, 0x00, 0x38, 0x57, 0x77, 0x81, 0x24, + 0x26, 0x80, 0x41, 0x46, 0x43, 0x26, 0x67, 0x41, + 0x06, 0x03, 0x55, 0x41, 0x28, 0x33, 0x37, 0x25, + 0x23, 0x06, 0x77, 0x82, 0x15, 0x16, 0x31, 0x73, + 0x00, 0x08, 0x75, 0x26, 0x58, 0x46, 0x34, 0x63, + 0x88, 0x08, 0x84, 0x64, 0x51, 0x11, 0x24, 0x05, + 0x32, 0x10, 0x11, 0x18, 0x18, 0x64, 0x78, 0x22, + 0x41, 0x00, 0x38, 0x55, 0x75, 0x42, 0x10, 0x46, + 0x83, 0x43, 0x73, 0x38, 0x80, 0x07, 0x83, 0x43, + 0x78, 0x74, 0x13, 0x57, 0x62, 0x32, 0x68, 0x80, + 0x65, 0x86, 0x48, 0x53, 0x48, 0x35, 0x51, 0x58, + 0x50, 0x74, 0x46, 0x05, 0x88, 0x70, 0x07, 0x72, + 0x01, 0x31, 0x00, 0x87, 0x54, 0x88, 0x14, 0x20, + 0x84, 0x16, 0x61, 0x15, 0x60, 0x56, 0x85, 0x11, + 0x58, 0x08, 0x05, 0x88, 0x63, 0x01, 0x82, 0x86, + 0x13, 0x14, 0x17, 0x22, 0x01, 0x68, 0x17, 0x17, + 0x86, 0x58, 0x53, 0x10, 0x62, 0x28, 0x52, 0x82, + 0x26, 0x15, 0x04, 0x31, 0x42, 0x88, 0x54, 0x31, + 0x78, 0x05, 0x80, 0x11, 0x50, 0x45, 0x68, 0x82, + 0x33, 0x66, 0x36, 0x36, 0x40, 0x65, 0x15, 0x24, + 0x47, 0x67, 0x06, 0x45, 0x36, 0x42, 0x26, 0x86, + 0x75, 0x06, 0x35, 0x41, 0x33, 0x47, 0x85, 0x12, + 0x17, 0x80, 0x83, 0x87, 0x65, 0x51, 0x42, 0x31, + 0x38, 0x87, 0x56, 0x62, 0x05, 0x17, 0x40, 0x85, + 0x28, 0x14, 0x17, 0x21, 0x38, 0x12, 0x60, 0x81, + 0x24, 0x41, 0x45, 0x75, 0x01, 0x82, 0x87, 0x10, + 0x10, 0x02, 0x13, 0x25, 0x57, 0x04, 0x21, 0x72, + 0x42, 0x78, 0x61, 0x11, 0x70, 0x05, 0x30, 0x47, + 0x72, 0x13, 0x20, 0x30, 0x21, 0x67, 0x44, 0x31, + 0x57, 0x71, 0x45, 0x57, 0x10, 0x54, 0x16, 0x65, + 0x74, 0x15, 0x24, 0x02, 0x43, 0x71, 0x51, 0x20, + 0x55, 0x11, 0x67, 0x83, 0x67, 0x82, 0x52, 0x53, + 0x35, 0x66, 0x42, 0x46, 0x13, 0x70, 0x22, 0x32, + 0x74, 0x00, 0x07, 0x06, 0x81, 0x87, 0x17, 0x57, + 0x80, 0x28, 0x68, 0x01, 0x72, 0x10, 0x04, 0x27, + 0x55, 0x22, 0x86, 0x42, 0x53, 0x15, 0x81, 0x76, + 0x30, 0x86, 0x40, 0x83, 0x11, 0x43, 0x30, 0x53, + 0x82, 0x73, 0x53, 0x03, 0x72, 0x35, 0x68, 0x70, + 0x45, 0x41, 0x15, 0x73, 0x14, 0x12, 0x31, 0x64, + 0x32, 0x66, 0x63, 0x56, 0x21, 0x51, 0x50, 0x82, + 0x10, 0x30, 0x23, 0x38, 0x17, 0x21, 0x27, 0x10, + 0x23, 0x14, 0x22, 0x75, 0x77, 0x28, 0x37, 0x71, + 0x62, 0x75, 0x06, 0x88, 0x72, 0x14, 0x18, 0x73, + 0x13, 0x03, 0x01, 0x50, 0x71, 0x58, 0x62, 0x86, + 0x62, 0x88, 0x86, 0x86, 0x03, 0x27, 0x01, 0x46, + 0x17, 0x22, 0x71, 0x38, 0x53, 0x81, 0x70, 0x33, + 0x88, 0x68, 0x13, 0x78, 0x81, 0x04, 0x86, 0x57, + 0x30, 0x16, 0x52, 0x31, 0x40, 0x83, 0x07, 0x56, + 0x82, 0x10, 0x32, 0x31, 0x28, 0x50, 0x06, 0x50, + 0x81, 0x63, 0x06, 0x75, 0x76, 0x65, 0x11, 0x60, + 0x14, 0x17, 0x12, 0x12, 0x55, 0x56, 0x48, 0x11, + 0x41, 0x13, 0x28, 0x82, 0x62, 0x07, 0x47, 0x64, + 0x24, 0x48, 0x23, 0x24, 0x77, 0x53, 0x26, 0x08, + 0x17, 0x58, 0x11, 0x56, 0x37, 0x48, 0x35, 0x51, + 0x47, 0x86, 0x85, 0x66, 0x66, 0x81, 0x73, 0x20, + 0x21, 0x36, 0x75, 0x22, 0x74, 0x66, 0x83, 0x44, + 0x57, 0x00, 0x66, 0x64, 0x77, 0x20, 0x47, 0x22, + 0x28, 0x56, 0x87, 0x12, 0x47, 0x02, 0x48, 0x07, + 0x02, 0x54, 0x23, 0x01, 0x25, 0x71, 0x37, 0x36, + 0x75, 0x36, 0x00, 0x52, 0x68, 0x15, 0x33, 0x35, + 0x82, 0x06, 0x13, 0x73, 0x24, 0x08, 0x71, 0x76, + 0x15, 0x22, 0x42, 0x60, 0x18, 0x53, 0x43, 0x11, + 0x64, 0x57, 0x76, 0x17, 0x61, 0x56, 0x68, 0x76, + 0x60, 0x65, 0x54, 0x78, 0x10, 0x33, 0x63, 0x14, + 0x21, 0x83, 0x21, 0x60, 0x15, 0x55, 0x80, 0x42, + 0x38, 0x42, 0x03, 0x13, 0x12, 0x34, 0x36, 0x25, + 0x27, 0x30, 0x82, 0x81, 0x25, 0x47, 0x51, 0x35, + 0x44, 0x12, 0x67, 0x35, 0x00, 0x10, 0x01, 0x83, + 0x85, 0x74, 0x42, 0x40, 0x13, 0x03, 0x61, 0x27, + 0x81, 0x26, 0x26, 0x81, 0x18, 0x87, 0x43, 0x51, + 0x20, 0x62, 0x71, 0x27, 0x51, 0x56, 0x10, 0x22, + 0x22, 0x81, 0x11, 0x81, 0x41, 0x66, 0x66, 0x38, + 0x20, 0x86, 0x75, 0x56, 0x12, 0x40, 0x06, 0x54, + 0x61, 0x12, 0x74, 0x40, 0x34, 0x58, 0x58, 0x78, + 0x10, 0x07, 0x85, 0x25, 0x72, 0x88, 0x57, 0x22, + 0x22, 0x25, 0x50, 0x84, 0x00, 0x41, 0x26, 0x08, + 0x36, 0x46, 0x28, 0x78, 0x46, 0x78, 0x05, 0x02, + 0x28, 0x20, 0x77, 0x13, 0x60, 0x75, 0x14, 0x43, + 0x68, 0x78, 0x64, 0x31, 0x38, 0x77, 0x73, 0x73, + 0x55, 0x41, 0x27, 0x00, 0x54, 0x07, 0x08, 0x28, + 0x68, 0x80, 0x04, 0x53, 0x83, 0x43, 0x22, 0x81, + 0x00, 0x64, 0x35, 0x48, 0x67, 0x66, 0x50, 0x17, + 0x75, 0x76, 0x12, 0x75, 0x43, 0x81, 0x62, 0x40, + 0x33, 0x43, 0x45, 0x38, 0x87, 0x21, 0x66, 0x14, + 0x70, 0x48, 0x41, 0x43, 0x14, 0x66, 0x58, 0x78, + 0x45, 0x82, 0x02, 0x25, 0x45, 0x73, 0x15, 0x21, + 0x32, 0x03, 0x02, 0x48, 0x80, 0x80, 0x13, 0x71, + 0x25, 0x54, 0x32, 0x72, 0x05, 0x68, 0x65, 0x24, + 0x68, 0x04, 0x06, 0x16, 0x83, 0x50, 0x54, 0x53, + 0x37, 0x37, 0x27, 0x22, 0x20, 0x68, 0x08, 0x25, + 0x50, 0x84, 0x72, 0x86, 0x74, 0x22, 0x36, 0x16, + 0x80, 0x07, 0x55, 0x18, 0x12, 0x17, 0x84, 0x44, + 0x81, 0x15, 0x64, 0x50, 0x71, 0x10, 0x58, 0x15, + 0x51, 0x10, 0x10, 0x47, 0x16, 0x21, 0x07, 0x58, + 0x61, 0x18, 0x78, 0x00, 0x52, 0x72, 0x64, 0x52, + 0x17, 0x43, 0x23, 0x40, 0x76, 0x48, 0x67, 0x30, + 0x77, 0x63, 0x64, 0x87, 0x51, 0x31, 0x63, 0x84, + 0x68, 0x74, 0x53, 0x63, 0x84, 0x23, 0x54, 0x66, + 0x10, 0x48, 0x36, 0x33, 0x85, 0x21, 0x48, 0x42, + 0x03, 0x82, 0x51, 0x10, 0x33, 0x57, 0x46, 0x80, + 0x16, 0x43, 0x34, 0x02, 0x07, 0x03, 0x53, 0x22, + 0x12, 0x75, 0x73, 0x34, 0x65, 0x83, 0x33, 0x87, + 0x43, 0x85, 0x17, 0x50, 0x36, 0x60, 0x88, 0x02, + 0x58, 0x75, 0x80, 0x88, 0x31, 0x63, 0x60, 0x18, + 0x21, 0x32, 0x26, 0x15, 0x68, 0x74, 0x11, 0x10, + 0x33, 0x14, 0x13, 0x05, 0x34, 0x16, 0x72, 0x65, + 0x35, 0x50, 0x13, 0x34, 0x80, 0x87, 0x10, 0x26, + 0x48, 0x68, 0x84, 0x52, 0x71, 0x44, 0x23, 0x58, + 0x80, 0x35, 0x57, 0x70, 0x54, 0x84, 0x28, 0x70, + 0x55, 0x88, 0x86, 0x83, 0x86, 0x25, 0x21, 0x82, + 0x72, 0x61, 0x17, 0x78, 0x85, 0x17, 0x67, 0x73, + 0x00, 0x57, 0x71, 0x11, 0x78, 0x51, 0x10, 0x65, + 0x63, 0x57, 0x02, 0x87, 0x40, 0x13, 0x40, 0x01, + 0x26, 0x53, 0x45, 0x12, 0x05, 0x46, 0x75, 0x18, + 0x80, 0x70, 0x33, 0x35, 0x66, 0x22, 0x62, 0x00, + 0x70, 0x23, 0x26, 0x87, 0x72, 0x63, 0x11, 0x13, + 0x33, 0x33, 0x81, 0x41, 0x70, 0x62, 0x28, 0x61, + 0x51, 0x47, 0x31, 0x30, 0x25, 0x46, 0x51, 0x17, + 0x61, 0x58, 0x07, 0x41, 0x61, 0x37, 0x37, 0x06, + 0x14, 0x00, 0x54, 0x88, 0x77, 0x75, 0x67, 0x77, + 0x66, 0x53, 0x16, 0x72, 0x66, 0x66, 0x88, 0x76, + 0x43, 0x58, 0x31, 0x04, 0x87, 0x57, 0x06, 0x76, + 0x47, 0x00, 0x43, 0x63, 0x58, 0x60, 0x52, 0x03, + 0x44, 0x27, 0x36, 0x48, 0x61, 0x23, 0x72, 0x16, + 0x10, 0x62, 0x42, 0x08, 0x60, 0x83, 0x23, 0x54, + 0x03, 0x55, 0x55, 0x73, 0x00, 0x61, 0x03, 0x65, + 0x34, 0x27, 0x14, 0x15, 0x86, 0x62, 0x55, 0x80, + 0x16, 0x53, 0x10, 0x18, 0x26, 0x11, 0x35, 0x46, + 0x82, 0x46, 0x13, 0x25, 0x83, 0x47, 0x70, 0x50, + 0x06, 0x01, 0x56, 0x02, 0x11, 0x68, 0x54, 0x53, + 0x03, 0x68, 0x73, 0x36, 0x41, 0x88, 0x86, 0x33, + 0x42, 0x52, 0x01, 0x58, 0x33, 0x42, 0x32, 0x88, + 0x56, 0x81, 0x77, 0x55, 0x51, 0x48, 0x48, 0x12, + 0x01, 0x58, 0x13, 0x85, 0x04, 0x14, 0x71, 0x83, + 0x57, 0x07, 0x54, 0x55, 0x54, 0x55, 0x28, 0x27, + 0x31, 0x36, 0x02, 0x12, 0x32, 0x68, 0x32, 0x13, + 0x82, 0x58, 0x70, 0x28, 0x58, 0x53, 0x44, 0x86, + 0x72, 0x73, 0x42, 0x84, 0x18, 0x22, 0x08, 0x83, + 0x61, 0x02, 0x14, 0x16, 0x17, 0x12, 0x41, 0x57, + 0x48, 0x85, 0x25, 0x10, 0x26, 0x07, 0x36, 0x76, + 0x12, 0x66, 0x17, 0x21, 0x32, 0x36, 0x03, 0x25, + 0x41, 0x10, 0x11, 0x22, 0x66, 0x60, 0x16, 0x16, + 0x32, 0x64, 0x26, 0x05, 0x18, 0x63, 0x51, 0x58, + 0x51, 0x31, 0x42, 0x53, 0x84, 0x56, 0x66, 0x27, + 0x83, 0x33, 0x54, 0x50, 0x76, 0x46, 0x50, 0x80, + 0x25, 0x43, 0x41, 0x57, 0x35, 0x78, 0x25, 0x43, + 0x02, 0x82, 0x38, 0x47, 0x45, 0x70, 0x15, 0x67, + 0x51, 0x77, 0x47, 0x80, 0x31, 0x52, 0x75, 0x00, + 0x00, 0x94, 0x7B, 0xCA, 0x93, 0xC2, 0x7D, 0x58, + 0x4E, 0x2C, 0x66, 0xEA, 0xC9, 0xC7, 0x64, 0x0C, + 0x1C, 0xA2, 0x17, 0xEE, 0xF6, 0x6D, 0xAB, 0xBC, + 0xB2, 0x60, 0xB4, 0xC3, 0x43, 0x00, 0xFA, 0x05, + 0x13, 0x57, 0x82, 0x0F, 0x57, 0x39, 0x25, 0x44, + 0x98, 0x2F, 0xD1, 0x10, 0x57, 0xDE, 0x23, 0x3E, + 0x6D, 0x2D, 0xD8, 0x49, 0x72, 0xA7, 0xE4, 0x7D, + 0x4D, 0xBA, 0x99, 0xBC, 0x30, 0xCF, 0x8F, 0x2A, + 0xD5, 0xA2, 0xC0, 0x24, 0x31, 0x95, 0xED, 0x27, + 0x30, 0xFF, 0xA9, 0x2D, 0x22, 0x7D, 0x15, 0x30, + 0x95, 0x97, 0x2D, 0x4B, 0x34, 0x47, 0xFF, 0xAC, + 0x45, 0xA2, 0x3E, 0xB4, 0x1C, 0xBC, 0x87, 0xCD, + 0xD1, 0x25, 0x0A, 0x8A, 0x47, 0x8B, 0x0F, 0x7A, + 0x1D, 0x5B, 0x39, 0xAA, 0x22, 0x06, 0xE4, 0x86, + 0x45, 0x58, 0x4F, 0xE7, 0xBF, 0x7A, 0x13, 0x16, + 0x8F, 0x48, 0x27, 0x65, 0xE5, 0x7B, 0xB9, 0x24, + 0xAC, 0x6D, 0x9A, 0x11, 0x36, 0x9F, 0x4A, 0x6A, + 0xFF, 0xCD, 0x16, 0x9B, 0x7D, 0x75, 0x12, 0x9B, + 0x35, 0xD5, 0x13, 0x4A, 0x31, 0x76, 0x1B, 0xB8, + 0x35, 0x5A, 0xEE, 0xED, 0x27, 0xE2, 0x01, 0xA0, + 0x63, 0x13, 0x01, 0x3E, 0x30, 0x7A, 0x01, 0xA7, + 0x3A, 0xEA, 0x79, 0x55, 0xC0, 0x57, 0x8C, 0x8C, + 0x5E, 0x5A, 0x1A, 0x2D, 0x2F, 0xA4, 0x59, 0x3F, + 0xAC, 0xD9, 0x04, 0xC6, 0x20, 0x40, 0xBD, 0xB9, + 0xF3, 0x29, 0x93, 0x35, 0x36, 0xBF, 0x8D, 0x81, + 0xC4, 0x25, 0x6B, 0xAA, 0xE8, 0x72, 0x3F, 0xD4, + 0xDC, 0x66, 0xBB, 0x5E, 0x7F, 0x9C, 0xA4, 0x90, + 0x31, 0xA1, 0x93, 0xEC, 0xEC, 0xBB, 0x5D, 0xC3, + 0x90, 0xEC, 0x6D, 0x55, 0x13, 0xC7, 0x9A, 0x05, + 0x2B, 0x3F, 0xD4, 0x36, 0x12, 0xFB, 0x73, 0x75, + 0x31, 0x5D, 0x80, 0x91, 0xF7, 0x9B, 0xAB, 0x13, + 0x18, 0xF1, 0x78, 0x54, 0x56, 0x1B, 0xC9, 0x3A, + 0xE0, 0xE5, 0xCD, 0x6D, 0x13, 0x1E, 0x56, 0x2C, + 0x81, 0x14, 0x81, 0x0C, 0x93, 0x9A, 0xE5, 0x63, + 0xAA, 0x10, 0xB4, 0x7C, 0xE4, 0x48, 0x43, 0x17, + 0xF3, 0x4A, 0xBD, 0x02, 0xD0, 0xCC, 0xAD, 0x58, + 0xDD, 0x29, 0xBC, 0xF6, 0x57, 0xBB, 0xD9, 0x25, + 0x4B, 0x01, 0xCA, 0x97, 0x26, 0x09, 0x19, 0x38, + 0xED, 0x32, 0x05, 0x4B, 0x37, 0xDD, 0x61, 0x72, + 0x40, 0xF4, 0x43, 0x4C, 0x1A, 0x4A, 0x87, 0x11, + 0xAA, 0x3A, 0x39, 0x9A, 0x8A, 0x53, 0x88, 0x33, + 0x0B, 0x70, 0x59, 0xEC, 0xCB, 0xB6, 0xB1, 0xB9, + 0xCF, 0x71, 0x87, 0xAD, 0xF1, 0x0B, 0x0C, 0x91, + 0x71, 0xD3, 0xC0, 0xF6, 0xE2, 0xD4, 0x60, 0xA4, + 0x19, 0x24, 0x76, 0x72, 0xE3, 0xB9, 0xFE, 0xA2, + 0xC9, 0x59, 0x10, 0xBF, 0x2F, 0xB6, 0xA5, 0xD6, + 0x1F, 0x25, 0x74, 0x53, 0xB0, 0x7A, 0xFB, 0x64, + 0xB0, 0xBA, 0x27, 0x58, 0xBC, 0xD7, 0x35, 0x75, + 0x1F, 0x2D, 0x53, 0x51, 0x5E, 0x23, 0x6F, 0xE8, + 0xA5, 0xB4, 0x39, 0x3B, 0x80, 0xBF, 0x06, 0xDF, + 0x97, 0xBD, 0xC6, 0x38, 0x00, 0x87, 0xE6, 0xAA, + 0x8D, 0xDE, 0x6E, 0x09, 0x81, 0x11, 0xA7, 0x34, + 0x3F, 0xCD, 0xD1, 0xE9, 0x03, 0x70, 0x8E, 0x63, + 0x7E, 0xBF, 0x28, 0x32, 0x3C, 0xDA, 0x6B, 0x94, + 0x05, 0x81, 0x0E, 0xDC, 0xFB, 0x36, 0x91, 0x14, + 0x9E, 0xCF, 0x22, 0x4C, 0x50, 0xF8, 0xDF, 0x92, + 0xA9, 0x4A, 0xA4, 0x77, 0x0A, 0x0E, 0x91, 0x46, + 0x61, 0x94, 0xBB, 0x0E, 0x27, 0xBF, 0x1C, 0xAB, + 0xF1, 0x6A, 0xDF, 0xD3, 0x51, 0x22, 0x00, 0x33, + 0xF7, 0x6F, 0x59, 0x25, 0x55, 0x7B, 0xCF, 0x96, + 0x34, 0xE9, 0x46, 0x13, 0x59, 0x62, 0x1D, 0x80, + 0xB4, 0xBB, 0xAD, 0x7E, 0x2A, 0x6E, 0x43, 0x2D, + 0xC4, 0x3B, 0x12, 0x6C, 0xA4, 0x2A, 0xB8, 0x8A, + 0xA8, 0x8F, 0x0A, 0x84, 0xAF, 0x58, 0x02, 0x9C, + 0x99, 0xA0, 0x24, 0x8F, 0x0C, 0x45, 0x40, 0x71, + 0xF3, 0x5B, 0x83, 0x1F, 0xED, 0x12, 0x54, 0xD6, + 0xF4, 0xE2, 0x72, 0x04, 0x85, 0x78, 0x62, 0x15, + 0xF7, 0xC7, 0xF0, 0xC4, 0xED, 0x15, 0xFA, 0x85, + 0x3C, 0xD3, 0xAA, 0x07, 0x25, 0x9B, 0x39, 0x24, + 0x0A, 0x82, 0x13, 0x5C, 0x29, 0x23, 0xA7, 0x2B, + 0x87, 0x6F, 0xAB, 0xB3, 0xF0, 0xF2, 0xC0, 0x96, + 0x13, 0xDE, 0x39, 0xD4, 0x59, 0xA0, 0x7C, 0x14, + 0xE7, 0xBA, 0x43, 0x7D, 0x80, 0x41, 0x49, 0x1F, + 0xCE, 0xC1, 0x43, 0x34, 0x04, 0xBA, 0xD1, 0xDA, + 0x9E, 0xE9, 0x47, 0x1E, 0x17, 0xCB, 0x69, 0x1B, + 0x2A, 0x35, 0x37, 0x10, 0xC9, 0xFF, 0xA4, 0xE5, + 0x17, 0x81, 0x12, 0x02, 0x77, 0x64, 0xEB, 0x7D, + 0xE8, 0x09, 0xC3, 0xE1, 0xF1, 0xFA, 0x41, 0x78, + 0xA5, 0xD4, 0xDC, 0x9E, 0xE2, 0x78, 0x57, 0xEF, + 0xF2, 0x6B, 0x91, 0x71, 0x1F, 0xC1, 0x44, 0xD5, + 0xA7, 0x75, 0xB8, 0xB5, 0x0D, 0x5D, 0xB9, 0x39, + 0xBA, 0x32, 0x07, 0x68, 0x0C, 0x24, 0x2F, 0xC8, + 0x21, 0x94, 0x7F, 0x93, 0x4C, 0x8D, 0xAE, 0xE2, + 0x03, 0x56, 0x3D, 0x28, 0x60, 0x6B, 0xE6, 0x24, + 0xA3, 0x29, 0x01, 0x93, 0x2D, 0xAE, 0x85, 0x71, + 0x2A, 0xF6, 0xC8, 0x01, 0x60, 0x26, 0x92, 0x7E, + 0x9B, 0x81, 0x29, 0x57, 0x4B, 0xE3, 0xCB, 0x1E, + 0x95, 0x33, 0x2B, 0x05, 0x27, 0x07, 0xAC, 0x8A, + 0xA8, 0xF4, 0x35, 0xE8, 0x8B, 0x7E, 0x56, 0x8D, + 0x49, 0x87, 0xC6, 0xAC, 0x0E, 0x90, 0x2B, 0x06, + 0x09, 0xA0, 0x2D, 0x91, 0xB3, 0xF5, 0xFD, 0x3F, + 0xD9, 0x01, 0xDD, 0xD0, 0xDB, 0x98, 0x73, 0xBD, + 0x7C, 0x71, 0xED, 0x92, 0x1D, 0x45, 0x77, 0xA7, + 0x8C, 0x4F, 0xCC, 0x9B, 0xF0, 0x75, 0x20, 0x3D, + 0x38, 0xF5, 0xE7, 0x6E, 0x74, 0xF2, 0x77, 0x48, + 0x4E, 0x05, 0x7B, 0x61, 0x89, 0x00, 0x41, 0x31, + 0xB0, 0xC9, 0xB1, 0xA1, 0x55, 0x29, 0x4D, 0x1C, + 0xD3, 0xD5, 0x20, 0x8E, 0x26, 0x69, 0x01, 0xD7, + 0xD3, 0x14, 0xFA, 0xCC, 0xE7, 0xE2, 0xAA, 0x58, + 0x45, 0x83, 0xA1, 0x1E, 0x4D, 0x7C, 0x21, 0xB9, + 0x4A, 0x32, 0xE5, 0x08, 0xED, 0xDB, 0xBD, 0x7A, + 0x65, 0xAA, 0x86, 0xB4, 0xFD, 0xFA, 0x6B, 0xC2, + 0x85, 0xD4, 0xCF, 0xF5, 0x39, 0x26, 0xC7, 0x17, + 0x3F, 0xBE, 0x1F, 0x89, 0xCC, 0x30, 0x32, 0x34, + 0xB8, 0x78, 0xC6, 0xB8, 0x10, 0x1F, 0x58, 0xAC, + 0x8D, 0x3E, 0x5E, 0x1B, 0xF5, 0xAB, 0x6B, 0x26, + 0x29, 0x7C, 0xC9, 0x7B, 0x95, 0x95, 0x4A, 0xAB, + 0xDB, 0x25, 0xBE, 0x00, 0x8A, 0x3F, 0x47, 0xE5, + 0x64, 0x87, 0xB0, 0x0D, 0x3D, 0xED, 0xA8, 0x90, + 0xD9, 0x2C, 0x83, 0x95, 0x7F, 0xEA, 0xC6, 0xB8, + 0x29, 0x1A, 0xF6, 0x59, 0x59, 0xE1, 0xD1, 0xFC, + 0xA3, 0xBD, 0x19, 0x6E, 0x9F, 0xC9, 0xE6, 0x7E, + 0x06, 0x07, 0x09, 0x48, 0x22, 0xE5, 0xB4, 0x19, + 0x1D, 0xB9, 0x68, 0x24, 0xB9, 0xF0, 0x3F, 0x2E, + 0xF5, 0x7F, 0x52, 0x38, 0xBA, 0x7E, 0x1E, 0x84, + 0xED, 0x55, 0xB7, 0xDF, 0xF3, 0xD6, 0xC2, 0xC1, + 0x27, 0x36, 0x92, 0xA9, 0xA1, 0x92, 0x72, 0x16, + 0x61, 0x30, 0xDB, 0x89, 0xFC, 0x67, 0xDC, 0x94, + 0xDB, 0x61, 0x4E, 0x3E, 0x82, 0xBA, 0x3A, 0x35, + 0x12, 0xB0, 0x12, 0xD5, 0x1F, 0xB4, 0x86, 0xB5, + 0xA3, 0x15, 0x0B, 0x78, 0xE7, 0x24, 0xE2, 0xA1, + 0x2D, 0xE0, 0x7D, 0x86, 0x71, 0xFB, 0xA2, 0xDA, + 0x7F, 0xD5, 0xD1, 0x47, 0x20, 0x8F, 0xC3, 0xAF, + 0x65, 0x3E, 0x65, 0x20, 0xFC, 0x40, 0x87, 0x1A, + 0xF2, 0x17, 0x7E, 0x65, 0xCB, 0xD0, 0xEA, 0xF3, + 0x04, 0x21, 0x7B, 0x36, 0x7A, 0x66, 0x5F, 0x22, + 0x4C, 0xAE, 0xDF, 0xE9, 0x30, 0x06, 0xAC, 0x1E, + 0x14, 0xBC, 0xD6, 0x7A, 0x88, 0xD1, 0x71, 0xF3, + 0xD8, 0xF3, 0xE3, 0x58, 0xA7, 0x19, 0x26, 0xBA, + 0x3E, 0x5C, 0x23, 0x9A, 0x53, 0x12, 0x63, 0xEC, + 0x94, 0x37, 0xBF, 0x2A, 0x03, 0x3B, 0x8B, 0x55, + 0xB2, 0xC0, 0xCB, 0x6E, 0x7E, 0x97, 0x31, 0x6E, + 0x22, 0xDF, 0x77, 0xCA, 0xD9, 0x10, 0xD2, 0x0E, + 0xEC, 0xE1, 0xC5, 0x09, 0x10, 0xA5, 0xCC, 0x32, + 0xAD, 0xAB, 0x09, 0x37, 0x75, 0x50, 0xF9, 0x2D, + 0x5B, 0xB1, 0xF4, 0xC0, 0x7F, 0x4A, 0x28, 0x22, + 0x33, 0x8E, 0x2C, 0xFF, 0x53, 0x48, 0xDF, 0x77, + 0xCF, 0x8E, 0xF8, 0xE6, 0x65, 0x7D, 0xED, 0x1E, + 0x0C, 0xE0, 0x58, 0xE3, 0xCC, 0xFB, 0xF3, 0x9B, + 0x3F, 0x16, 0x6E, 0x30, 0x3D, 0x33, 0xC3, 0x55, + 0x6C, 0x9A, 0xC8, 0xEC, 0xB3, 0xDF, 0x7C, 0x74, + 0xAB, 0x36, 0xD0, 0xF2, 0x79, 0x44, 0x41, 0xBA, + 0x98, 0x08, 0x82, 0x7B, 0x57, 0x8F, 0xB5, 0xC2, + 0x9E, 0x49, 0x4E, 0x21, 0x53, 0x9A, 0xD3, 0xAB, + 0x2B, 0x41, 0xBF, 0x16, 0x1D, 0x7F, 0x69, 0x58, + 0x9D, 0x45, 0x24, 0xC5, 0x4C, 0x89, 0xB4, 0x86, + 0xF7, 0x5D, 0x25, 0x2F, 0x54, 0x1C, 0xC6, 0x3B, + 0x9E, 0x70, 0x6D, 0x64, 0xA1, 0x28, 0x9A, 0x23, + 0x06, 0xC5, 0x95, 0x36, 0x3C, 0xB6, 0xFB, 0xEF, + 0x0A, 0x1B, 0x5B, 0x17, 0xAB, 0x5B, 0x17, 0x94, + 0xBF, 0x27, 0x03, 0x6F, 0x64, 0xEA, 0xF0, 0xBD, + 0x43, 0x0D, 0xD5, 0x8D, 0x80, 0x01, 0x0C, 0xCD, + 0xAD, 0xA4, 0xA5, 0xA3, 0xA1, 0xE4, 0x1A, 0x6F, + 0xBF, 0x12, 0x9D, 0x73, 0x77, 0x9A, 0x37, 0xAE, + 0x5C, 0x8D, 0x68, 0x41, 0xA9, 0x99, 0x3C, 0x51, + 0xE3, 0x64, 0xE0, 0x4F, 0xAC, 0x8E, 0x25, 0xA4, + 0xE6, 0x87, 0x2F, 0x6C, 0x86, 0x0F, 0xA2, 0x65, + 0xC1, 0xC4, 0x42, 0x6A, 0xD9, 0xC2, 0x1D, 0x26, + 0xDA, 0x8C, 0x27, 0x85, 0x46, 0xAD, 0xCD, 0x83, + 0x1F, 0x2B, 0x8B, 0x26, 0xD4, 0xE1, 0xF6, 0x70, + 0x62, 0x3D, 0x95, 0xC8, 0x36, 0x2D, 0xA6, 0x62, + 0xD1, 0xFF, 0x0A, 0xB6, 0x87, 0x50, 0x3F, 0x32, + 0x8D, 0xE0, 0x95, 0x81, 0x0E, 0xDE, 0x12, 0xB4, + 0x9E, 0xAD, 0x15, 0x33, 0x51, 0x95, 0x58, 0xC1, + 0xE9, 0x40, 0xB4, 0x6E, 0x4E, 0xDB, 0x02, 0x7B, + 0xE9, 0xDA, 0x20, 0x39, 0xB2, 0x5D, 0xCF, 0x73, + 0x57, 0xE1, 0x9E, 0x54, 0x16, 0xAE, 0x26, 0x8C, + 0x14, 0xFB, 0x3A, 0x8B, 0xAB, 0xCB, 0x3D, 0x23, + 0xF7, 0x0C, 0xC9, 0xD5, 0x96, 0x81, 0xC5, 0xD8, + 0x33, 0xAC, 0x22, 0xE6, 0x53, 0xD8, 0x6E, 0x22, + 0xCE, 0x82, 0x25, 0x40, 0x75, 0x5D, 0x8D, 0x24, + 0x3C, 0x15, 0x21, 0x3D, 0x07, 0x6C, 0x6B, 0x26, + 0x43, 0x6D, 0xDC, 0x07, 0xC7, 0xE0, 0x01, 0x34, + 0x7B, 0x0C, 0xB8, 0x78, 0x3D, 0xFE, 0xFE, 0xDF, + 0x27, 0x5F, 0xEC, 0x47, 0x92, 0x68, 0x67, 0x34, + 0x00, 0x7F, 0x0F, 0xF8, 0x54, 0x08, 0x11, 0xC2, + 0xAF, 0xE6, 0xCA, 0x15, 0x14, 0x20, 0x53, 0x2F, + 0xA5, 0x52, 0x6A, 0x10, 0x74, 0xC3, 0xD7, 0x89, + 0xF2, 0x93, 0x2D, 0xE4, 0x2E, 0x3A, 0xCF, 0xBF, + 0x94, 0x76, 0x0F, 0x42, 0x6D, 0x96, 0xCF, 0x03, + 0x3F, 0xA4, 0x9E, 0x2F, 0x45, 0x8F, 0x9A, 0x9C, + 0x2E, 0x71, 0xDA, 0xCF, 0xE0, 0x09, 0xDD, 0x9C, + 0x3F, 0x3C, 0x8A, 0xB3, 0x28, 0x2D, 0x6F, 0x38, + 0x3B, 0x98, 0x1C, 0x82, 0xD6, 0x36, 0x4F, 0x0E, + 0x4B, 0xDB, 0x2A, 0xF6, 0xA9, 0x5B, 0xA6, 0x1F, + 0x47, 0x41, 0x50, 0xCA, 0xD7, 0x23, 0x3F, 0x89, + 0x03, 0xDF, 0x97, 0x2D, 0xBB, 0x03, 0x28, 0xC0, + 0xCB, 0x9D, 0x0C, 0xCB, 0xEF, 0x88, 0x3D, 0x2E, + 0x6A, 0xDD, 0x18, 0x0E, 0xCA, 0x1B, 0x66, 0x2F, + 0xC1, 0xD2, 0xDB, 0xBD, 0xDB, 0x36, 0x34, 0x21, + 0x9E, 0x1E, 0xFF, 0x38, 0xB1, 0xE5, 0x28, 0x75, + 0x35, 0x6C, 0x03, 0xEA, 0xDE, 0x94, 0x20, 0x55, + 0xF4, 0x83, 0x50, 0x4B, 0xBB, 0xCB, 0x43, 0x02, + 0xA4, 0x17, 0xCF, 0x6D, 0x32, 0x8E, 0xD7, 0x93, + 0xB1, 0xA3, 0xC0, 0x96, 0x9B, 0x7B, 0x34, 0x18, + 0xF5, 0x0A, 0xB3, 0x9F, 0x83, 0xC5, 0x66, 0x6C, + 0x90, 0xE3, 0x83, 0x56, 0xF7, 0xF9, 0xD4, 0x94, + 0xA6, 0xDC, 0xB6, 0x3D, 0x67, 0xC3, 0x4E, 0x3D, + 0x14, 0xA4, 0xE1, 0x55, 0x96, 0x49, 0x79, 0x26, + 0xC8, 0x56, 0x8D, 0x8E, 0xC3, 0xDB, 0xD9, 0xC2, + 0xE8, 0x2C, 0x38, 0x5B, 0xCF, 0xB8, 0xD9, 0x67, + 0x48, 0x63, 0xBD, 0x4F, 0xBF, 0x17, 0x57, 0xDB, + 0x44, 0x7B, 0xF8, 0x04, 0xAE, 0x95, 0x01, 0x47, + 0xC9, 0x1F, 0xBF, 0x9A, 0xA1, 0x78, 0x91, 0x04, + 0x4C, 0xCA, 0xA7, 0x3B, 0x45, 0x52, 0x85, 0x97, + 0x46, 0x2C, 0xED, 0x75, 0x1D, 0x01, 0x5E, 0xBB, + 0xA9, 0xE2, 0xB7, 0xCD, 0xCB, 0xE6, 0xDC, 0x05, + 0xAA, 0x9E, 0xAE, 0x0C, 0x86, 0x84, 0x8A, 0x34, + 0x75, 0xBB, 0x1C, 0x57, 0x44, 0xF5, 0x90, 0x3E, + 0xE4, 0xA8, 0x42, 0xA4, 0x69, 0xCC, 0x18, 0x12, + 0x71, 0xF2, 0x45, 0xAD, 0x70, 0xD0, 0x2A, 0x48, + 0x37, 0x86, 0x3B, 0x29, 0x6B, 0x4A, 0xDB, 0x4E, + 0x8D, 0x03, 0xD8, 0x2B, 0x64, 0xAA, 0x11, 0xDD, + 0x31, 0xCD, 0xF2, 0x1E, 0xDF, 0x1D, 0xFE, 0x32, + 0x76, 0xC4, 0xDB, 0xC8, 0x77, 0xE3, 0x5B, 0x15, + 0xFB, 0x28, 0x35, 0xEC, 0x3A, 0x1C, 0x45, 0x31, + 0x68, 0xA3, 0x8C, 0xA8, 0xE5, 0x63, 0xCF, 0x3E, + 0x9A, 0x00, 0x73, 0x6C, 0xD5, 0xCF, 0xBD, 0x28, + 0x41, 0xD1, 0x0F, 0x94, 0xAD, 0x55, 0x79, 0x9C, + 0x29, 0x27, 0xE5, 0x46, 0x1B, 0x28, 0xBA, 0xC5, + 0x17, 0x4D, 0x0C, 0xE3, 0xF8, 0xF7, 0xCD, 0x76, + 0x09, 0xFB, 0xC8, 0xDA, 0x0C, 0x38, 0xCC, 0x21, + 0x69, 0x5C, 0xED, 0xAD, 0x12, 0xF8, 0xD2, 0xE6, + 0x49, 0x51, 0xA8, 0x99, 0x6E, 0x51, 0x0D, 0x6D, + 0x52, 0x79, 0x7C, 0x5B, 0xA0, 0xEB, 0x4A, 0xFA, + 0x6B, 0xF2, 0xCC, 0x43, 0xDA, 0x09, 0xDE, 0x31, + 0x79, 0xE8, 0x99, 0xBD, 0x71, 0x88, 0xB3, 0x2A, + 0x98, 0xA4, 0x99, 0xD3, 0x72, 0xF3, 0x70, 0x7C, + 0xED, 0x47, 0x9B, 0x09, 0x81, 0xCB, 0x50, 0xC0, + 0xC0, 0x53, 0x9C, 0xF7, 0xE3, 0x10, 0x0B, 0x72, + 0x0E, 0x46, 0x66, 0x52, 0xA4, 0xF4, 0x99, 0xC2, + 0xBA, 0x3A, 0x17, 0xF5, 0x23, 0x22, 0x68, 0x73, + 0x0B, 0x96, 0x2B, 0xC5, 0x72, 0xC0, 0xDE, 0x96, + 0xE8, 0xC9, 0xE2, 0x8F, 0x7E, 0x35, 0x32, 0xC2, + 0x22, 0x41, 0x96, 0xAA, 0x9E, 0x27, 0x68, 0x8D, + 0xD0, 0x50, 0xD7, 0xCB, 0x78, 0x54, 0xFB, 0x3C, + 0x35, 0xF9, 0xC6, 0x2E, 0xFB, 0x10, 0xDA, 0x84, + 0x83, 0x3F, 0x29, 0xBB, 0x1B, 0xE5, 0xEF, 0x3B, + 0x53, 0x36, 0x38, 0xEE, 0xF7, 0x43, 0xD8, 0x11, + 0x9D, 0xDC, 0x29, 0x0B, 0xDF, 0x08, 0xB6, 0xF0, + 0xF9, 0xE4, 0xE1, 0xE1, 0x34, 0x46, 0xC5, 0x3E, + 0xD6, 0x98, 0x05, 0xDA, 0x26, 0x90, 0x8A, 0x15, + 0xDF, 0x1C, 0x48, 0xE0, 0x09, 0xEC, 0x12, 0x53, + 0xBD, 0x5A, 0x58, 0x98, 0xEB, 0xB5, 0x12, 0x1C, + 0xC2, 0x49, 0x04, 0xC8, 0xB1, 0x0E, 0x24, 0xE6, + 0x80, 0xE5, 0x65, 0x98, 0x50, 0x76, 0xFD, 0xA1, + 0x1D, 0x13, 0xFF, 0xDF, 0xA4, 0xDB, 0x28, 0xAC, + 0x9F, 0x0A, 0xEA, 0x2F, 0x81, 0xFD, 0x7E, 0xD4, + 0xDC, 0xA8, 0xD3, 0xB2, 0xE3, 0x84, 0x8B, 0x4D, + 0x60, 0x46, 0xF6, 0xE0, 0xDE, 0x3A, 0x4F, 0x68, + 0x3F, 0x25, 0xE0, 0x60, 0x5E, 0x84, 0xB3, 0x6F, + 0x48, 0x3C, 0x40, 0x4E, 0xF8, 0x99, 0xCB, 0x3F, + 0xCC, 0xBE, 0x8C, 0xB2, 0xA6, 0xF0, 0xA7, 0xE1, + 0x0B, 0x19, 0x48, 0xCD, 0x4F, 0x93, 0xF1, 0x81, + 0x55, 0x5F, 0x66, 0x1D, 0x31, 0xD4, 0x26, 0x80, + 0x8B, 0xBF, 0x9F, 0x66, 0xFD, 0x60, 0xD6, 0x49, + 0x26, 0x9C, 0xA3, 0xFE, 0x99, 0x1B, 0x22, 0x42, + 0x8C, 0x37, 0xAD, 0x2A, 0x08, 0x68, 0x0F, 0x74, + 0x7C, 0xC0, 0x36, 0x0C, 0xCD, 0x37, 0x3D, 0xC6, + 0xA9, 0xF4, 0x3A, 0x66, 0x47, 0x0E, 0x01, 0x4E, + 0x72, 0xB3, 0xD8, 0xC3, 0x8E, 0x02, 0x04, 0x42, + 0xD8, 0xAA, 0xB9, 0x74, 0xE6, 0x04, 0x93, 0x74, + 0x14, 0x5B, 0x04, 0xCB, 0x7F, 0x30, 0x44, 0xAA, + 0xC1, 0xEF, 0xDA, 0xB2, 0xA1, 0x8B, 0xB4, 0x64, + 0xD4, 0xF2, 0xF2, 0xD8, 0x14, 0x39, 0x74, 0xC9, + 0x5E, 0xEE, 0x85, 0x6D, 0x59, 0xEC, 0x00, 0x28, + 0x8E, 0xD4, 0x3F, 0xF5, 0xCC, 0x88, 0x03, 0x00, + 0x6C, 0x99, 0x55, 0x14, 0xA2, 0xCC, 0x9C, 0xA6, + 0x22, 0xB6, 0x1B, 0xCD, 0x75, 0xEC, 0x51, 0xC2, + 0x02, 0xA9, 0x17, 0x10, 0x5B, 0x4A, 0x4B, 0xED, + 0x1B, 0x80, 0x14, 0x68, 0x31, 0xDC, 0xED, 0x07, + 0xEF, 0xD2, 0xED, 0x25, 0x73, 0x9F, 0x54, 0x09, + 0x69, 0x11, 0xB1, 0x50, 0xD3, 0x07, 0x7C, 0xCD, + 0x73, 0x1A, 0x03, 0x61, 0x68, 0x27, 0x25, 0xD5, + 0x38, 0x03, 0xF8, 0xFC, 0xEA, 0xA8, 0x39, 0x19, + 0x29, 0x1E, 0xDB, 0x44, 0x93, 0xEC, 0x84, 0xCC, + 0xE1, 0xD0, 0xF8, 0x2A, 0x67, 0x92, 0x36, 0xEA, + 0xD1, 0x00, 0x2A, 0xE8, 0x01, 0x8C, 0xAC, 0x9F, + 0xDB, 0xD2, 0x46, 0xFF, 0x09, 0x3D, 0x80, 0x3C, + 0x0D, 0xE3, 0x32, 0x6A, 0x57, 0x90, 0x7B, 0x0D, + 0xD6, 0xB0, 0x1D, 0x08, 0x14, 0x58, 0xC7, 0x57, + 0x28, 0xC6, 0x00, 0x82, 0x99, 0x28, 0x89, 0x0A, + 0x56, 0xAA, 0xAF, 0xEF, 0xCF, 0x74, 0x23, 0xB7, + 0x0A, 0x6D, 0x86, 0xB4, 0x15, 0xB8, 0x35, 0x8D, + 0xD0, 0x44, 0xAB, 0xEE, 0x00, 0xB9, 0xC9, 0x79, + 0x5F, 0xC8, 0xF6, 0x1A, 0x64, 0x68, 0x6D, 0xF5, + 0xF8, 0x76, 0xA8, 0xF3, 0x30, 0x61, 0x59, 0x9A, + 0xE8, 0x30, 0xF7, 0xEB, 0x4C, 0x4B, 0xFF, 0x87, + 0x5F, 0x4A, 0x93, 0x6C, 0x40, 0x3C, 0x5D, 0x16, + 0x0D, 0xE5, 0xD3, 0x3C, 0xAE, 0xE4, 0x0F, 0xB7, + 0x18, 0xDD, 0xA4, 0x47, 0x8A, 0xC6, 0xF5, 0x1C, + 0x59, 0xC2, 0x15, 0x52, 0x54, 0xBD, 0x77, 0x67, + 0x11, 0x18, 0x41, 0x1E, 0x26, 0x09, 0xD0, 0x00, + 0x30, 0x6F, 0xC9, 0x50, 0x70, 0x04, 0xA3, 0x1E, + 0x89, 0x57, 0xEA, 0x40, 0xC2, 0x56, 0x4B, 0x83, + 0xC3, 0xAB, 0xB7, 0x1A, 0x87, 0xC1, 0x1B, 0xD1, + 0x8D, 0x78, 0x91, 0xC4, 0x49, 0xDB, 0xBE, 0x79, + 0xB4, 0xA4, 0xFB, 0x04, 0x83, 0x07, 0xCE, 0x0E, + 0x81, 0x2B, 0x2C, 0x68, 0xEC, 0xAB, 0x77, 0xFD, + 0x11, 0x11, 0x52, 0x6A, 0xB0, 0x81, 0x73, 0x06, + 0xCE, 0xBC, 0xB0, 0x49, 0x7C, 0x55, 0x24, 0x31, + 0xCE, 0x15, 0xE4, 0xAB, 0x52, 0x28, 0x3F, 0x67, + 0x94, 0x80, 0xD6, 0x9D, 0xDD, 0xE1, 0xF2, 0x57, + 0x9C, 0xFD, 0xBE, 0x0B, 0xCA, 0x95, 0xFC, 0x5B, + 0x2D, 0xB0, 0xC5, 0xCC, 0x76, 0xA3, 0x19, 0x50, + 0xF5, 0x11, 0x6A, 0xAE, 0x5F, 0x02, 0xD4, 0x67, + 0x10, 0xE4, 0x25, 0x7A, 0x75, 0xFD, 0xED, 0xF2, + 0xF4, 0x7C, 0xE3, 0x7C, 0x20, 0x3E, 0x7F, 0x24, + 0xD3, 0xC9, 0x17, 0x97, 0x13, 0xC5, 0xD8, 0x07, + 0xC2, 0x96, 0x14, 0x9A, 0x75, 0xCC, 0xB4, 0x44, + 0xF0, 0xC6, 0xF6, 0xAB, 0xDD, 0x2D, 0xBB, 0x29, + 0x85, 0xFE, 0x26, 0x74, 0x82, 0x85, 0x8A, 0x1E }; #endif /* WOLFSSL_NO_ML_DSA_65 */ #ifndef WOLFSSL_NO_ML_DSA_87 static const byte seed_87[] = { - 0x22, 0x5F, 0x77, 0x07, 0x5E, 0x66, 0xCE, 0x1C, - 0x99, 0xBA, 0x95, 0xB4, 0xFC, 0xDF, 0x25, 0x8B, - 0xBB, 0x6F, 0xA5, 0xFE, 0x9C, 0x34, 0x9F, 0x0F, - 0xDE, 0x3F, 0x71, 0xD5, 0x33, 0x9F, 0x6F, 0xD8 + 0x38, 0x35, 0x9F, 0xBC, 0xD7, 0x95, 0x82, 0xCF, + 0xFE, 0x60, 0x9E, 0x13, 0x7E, 0xE2, 0xEF, 0xE8, + 0xA8, 0xDB, 0xCB, 0xAD, 0x18, 0xBA, 0x92, 0xBB, + 0x43, 0x3A, 0xB4, 0xF0, 0x9B, 0x49, 0x29, 0x9D }; static const byte pk_87[] = { - 0x8C, 0x52, 0x4B, 0xD9, 0xAC, 0x48, 0x5C, 0xC6, - 0x9A, 0xA0, 0x75, 0x64, 0xE1, 0x4F, 0x0F, 0x60, - 0x13, 0x0E, 0xDE, 0x34, 0x08, 0xA5, 0xD4, 0x81, - 0xFD, 0x76, 0xC2, 0x51, 0x74, 0x75, 0xA8, 0xFB, - 0x24, 0xBF, 0x9E, 0x97, 0x9C, 0xD2, 0x3E, 0xDA, - 0x8A, 0x1B, 0xB6, 0x76, 0xDA, 0x7D, 0x7F, 0x44, - 0xAD, 0x6B, 0xB9, 0xB0, 0x70, 0xD3, 0xD6, 0x44, - 0x7F, 0xBE, 0x6C, 0x0C, 0x71, 0x37, 0xC6, 0xFB, - 0x7B, 0x39, 0x83, 0x63, 0x9C, 0x41, 0x5C, 0xF2, - 0xC9, 0x15, 0xFF, 0xD4, 0x18, 0xEA, 0xA1, 0x4D, - 0xA9, 0xD1, 0xAD, 0x3C, 0x09, 0x8E, 0xA9, 0x05, - 0x34, 0x6C, 0xAA, 0x75, 0x78, 0xF8, 0x6B, 0x6E, - 0x52, 0xE6, 0x57, 0x55, 0x16, 0xF4, 0x92, 0x3E, - 0x74, 0x3F, 0x96, 0xA3, 0x2A, 0xD0, 0x0E, 0xEE, - 0xA1, 0xCE, 0x8A, 0x33, 0xF4, 0x87, 0xB9, 0xF3, - 0x22, 0x5D, 0x2D, 0x84, 0xCD, 0x27, 0x57, 0xCC, - 0xCF, 0xE6, 0xA3, 0x66, 0x24, 0x53, 0x0E, 0x52, - 0x8A, 0x2F, 0x64, 0xFC, 0xE7, 0x04, 0xE7, 0xA7, - 0x6C, 0x2E, 0x6A, 0xDC, 0x00, 0xEF, 0x9B, 0xEC, - 0x91, 0x07, 0xB9, 0x69, 0x8F, 0x11, 0x59, 0xFC, - 0x52, 0xEF, 0x4C, 0x36, 0x5A, 0xFD, 0xB1, 0x50, - 0xED, 0xC3, 0x43, 0x5E, 0x03, 0xBB, 0x70, 0x26, - 0x00, 0x6E, 0x5A, 0x55, 0x13, 0x51, 0xA4, 0xB1, - 0x5F, 0xB8, 0x9F, 0xD2, 0xE9, 0x98, 0x38, 0xE8, - 0xCF, 0x41, 0x73, 0xFD, 0x0D, 0xF1, 0xF6, 0x80, - 0x89, 0xE1, 0x51, 0x8D, 0xD4, 0xB5, 0x79, 0x27, - 0x76, 0xBD, 0xD9, 0x2F, 0xC7, 0xC7, 0x9B, 0xC7, - 0x99, 0x7F, 0x78, 0x84, 0xD2, 0xB8, 0x80, 0xC5, - 0xD2, 0xB7, 0xEE, 0xC8, 0x0A, 0xFE, 0x35, 0x59, - 0x84, 0x5D, 0x39, 0x08, 0x39, 0xBE, 0x5E, 0xBF, - 0x95, 0x93, 0xA7, 0x3E, 0xD0, 0x1E, 0xF6, 0x7D, - 0x50, 0x3F, 0xFB, 0x74, 0x47, 0x04, 0xA2, 0xDC, - 0x49, 0x48, 0x76, 0x2B, 0xC8, 0x43, 0x45, 0x75, - 0x72, 0x84, 0x4D, 0x15, 0x74, 0xE3, 0xEB, 0x37, - 0x83, 0x0A, 0x3B, 0x7C, 0xD4, 0x02, 0xC7, 0x6E, - 0xD5, 0xB4, 0xFC, 0x15, 0xF0, 0x5E, 0x76, 0x03, - 0x4C, 0xBB, 0x6A, 0x29, 0xDE, 0xBC, 0x7E, 0x2B, - 0x34, 0xB2, 0x14, 0x2A, 0x57, 0xCF, 0x1B, 0x39, - 0x73, 0xE5, 0x8B, 0xFF, 0x47, 0x50, 0x42, 0xDC, - 0x22, 0x6C, 0x7E, 0x13, 0x71, 0xF3, 0x37, 0x51, - 0x40, 0xF2, 0x90, 0x57, 0xAC, 0xB4, 0x64, 0x7C, - 0x5F, 0x92, 0x6D, 0x3F, 0xDC, 0xCC, 0xC8, 0xD2, - 0xE1, 0x6B, 0x81, 0xA9, 0xED, 0xCD, 0x0C, 0x8B, - 0x5B, 0x2E, 0x11, 0x89, 0x87, 0x42, 0x4B, 0xEC, - 0xAD, 0x40, 0xA5, 0xE5, 0xB4, 0x6D, 0x1C, 0xB4, - 0x01, 0x0A, 0x8E, 0x9F, 0x6F, 0x25, 0x92, 0x5D, - 0xFE, 0x6B, 0x6F, 0x24, 0x64, 0x5F, 0x9C, 0x88, - 0x86, 0x96, 0xE8, 0x79, 0x64, 0x5B, 0x6A, 0x3A, - 0x76, 0x21, 0x90, 0xCC, 0xB7, 0xD6, 0x26, 0x9D, - 0x35, 0x54, 0x79, 0xDF, 0x71, 0x90, 0x55, 0x2A, - 0x38, 0x52, 0xD1, 0xE9, 0x56, 0x73, 0xE7, 0x19, - 0x44, 0x6A, 0xD3, 0x10, 0x24, 0xB9, 0x4B, 0xF8, - 0xBB, 0xC9, 0x7B, 0x04, 0x66, 0x39, 0xCE, 0x12, - 0x3F, 0xDE, 0xC3, 0x75, 0xAF, 0x9F, 0x8D, 0x4C, - 0xF7, 0x16, 0x9B, 0xEB, 0x5F, 0xE5, 0x1B, 0xBF, - 0x82, 0x2C, 0x53, 0xBA, 0x2D, 0x98, 0xA4, 0xA0, - 0x14, 0xA2, 0xDE, 0x69, 0x7F, 0x03, 0x3C, 0x9E, - 0x4A, 0x57, 0xC6, 0xED, 0xF6, 0x10, 0x6A, 0x76, - 0x2A, 0x81, 0x92, 0x9F, 0x3E, 0xF0, 0xFD, 0xE9, - 0xB7, 0xB3, 0x8A, 0xF6, 0x1A, 0x19, 0x9A, 0x16, - 0x0F, 0x09, 0x45, 0xBD, 0xBB, 0x96, 0x7C, 0x72, - 0x40, 0xFE, 0x94, 0xBD, 0xE1, 0x60, 0x50, 0x53, - 0x13, 0xC9, 0x2B, 0xFA, 0x52, 0x40, 0xA2, 0xA7, - 0xF0, 0x8C, 0x85, 0x78, 0xDB, 0xD6, 0x7F, 0x21, - 0x39, 0xB5, 0x06, 0x72, 0xEE, 0x99, 0xA1, 0xBD, - 0x78, 0x1F, 0xA4, 0xE9, 0x54, 0xF4, 0xFA, 0xDF, - 0xA7, 0x9E, 0xDD, 0x8E, 0xB1, 0xCF, 0xA8, 0x48, - 0x84, 0x5D, 0x70, 0xCB, 0x2D, 0xA9, 0x66, 0x09, - 0x0B, 0x75, 0x75, 0xA2, 0x32, 0xFE, 0xDF, 0x96, - 0x33, 0x84, 0xA7, 0x84, 0x48, 0x1A, 0xFA, 0x82, - 0x79, 0x0A, 0x87, 0xE1, 0x1F, 0x11, 0x74, 0xD4, - 0x3C, 0xC0, 0x8D, 0x4F, 0xD2, 0x5D, 0xBB, 0x40, - 0x10, 0xB2, 0x6F, 0x23, 0xD2, 0xD6, 0xF4, 0xA5, - 0x87, 0xEF, 0x7D, 0xE8, 0xC6, 0xF7, 0xC6, 0x0F, - 0xF9, 0x6F, 0xF8, 0x4C, 0x39, 0xE4, 0x82, 0x1E, - 0x1E, 0x6A, 0x80, 0x2F, 0xEC, 0x22, 0xD6, 0xA0, - 0xAA, 0xB6, 0x2C, 0xCB, 0x16, 0x43, 0x68, 0xC2, - 0x27, 0xF6, 0xA2, 0x31, 0x62, 0x66, 0xEC, 0x2F, - 0xFF, 0x8D, 0xB4, 0x19, 0x51, 0x19, 0xA0, 0x8C, - 0x67, 0xE2, 0x04, 0x04, 0xB9, 0x1F, 0x08, 0x70, - 0x9E, 0xAA, 0xC2, 0xDE, 0xCB, 0x96, 0x19, 0x8F, - 0x02, 0x74, 0x10, 0xCC, 0x1B, 0x82, 0x5D, 0x9C, - 0x07, 0x00, 0xE5, 0xD7, 0x04, 0x51, 0xBA, 0x7F, - 0x67, 0xF9, 0x64, 0x0C, 0xA3, 0x6B, 0xF3, 0x12, - 0x21, 0x80, 0x68, 0xD6, 0xA2, 0xCA, 0xFF, 0x59, - 0x33, 0x43, 0x7D, 0x67, 0xBF, 0xD4, 0x88, 0x4A, - 0x6E, 0x92, 0xBA, 0x41, 0xE1, 0x28, 0xDA, 0xEB, - 0xE1, 0xEA, 0x25, 0x60, 0xE1, 0x2F, 0xED, 0x2C, - 0xD4, 0x4B, 0xC9, 0x4E, 0x9E, 0x9D, 0xFA, 0xBB, - 0xF9, 0x61, 0x41, 0x4C, 0x24, 0x24, 0xFC, 0x9B, - 0x62, 0xFE, 0x73, 0x74, 0xF6, 0xB8, 0x9B, 0xA9, - 0x02, 0x96, 0xF4, 0x90, 0x18, 0xA7, 0xF5, 0x49, - 0xC1, 0xA3, 0x94, 0xB8, 0xED, 0xBD, 0x0B, 0xF3, - 0xDB, 0xF3, 0xBC, 0x10, 0x6A, 0x6B, 0x3F, 0x79, - 0x07, 0xF2, 0x11, 0x09, 0xD5, 0x42, 0x8F, 0xA9, - 0x09, 0x94, 0xBE, 0xF2, 0x0D, 0x3A, 0x91, 0x33, - 0x01, 0x31, 0x34, 0xBF, 0x0A, 0xCA, 0xF1, 0x3E, - 0x66, 0x18, 0xA6, 0x69, 0xEC, 0xEA, 0xC5, 0xE9, - 0x8B, 0x80, 0xFE, 0x4D, 0x93, 0x7B, 0xD4, 0xE5, - 0x74, 0x90, 0xFA, 0xFD, 0xCE, 0x45, 0xE8, 0xD7, - 0xD8, 0x8F, 0x08, 0x8B, 0x3A, 0xA8, 0x01, 0xA2, - 0xB4, 0xE5, 0xF2, 0x29, 0x41, 0x02, 0xBD, 0xCB, - 0xF9, 0x4A, 0x62, 0x54, 0x99, 0x94, 0x61, 0xB7, - 0x8F, 0xA5, 0x8A, 0x7F, 0xDC, 0xAD, 0xD2, 0xF2, - 0x28, 0x1E, 0xF3, 0x18, 0xAE, 0x21, 0x81, 0xF7, - 0xE9, 0xE5, 0xBF, 0x2B, 0xC2, 0x98, 0x24, 0xB1, - 0x45, 0x56, 0x57, 0x31, 0xA1, 0x48, 0xAB, 0x39, - 0xC2, 0x04, 0x29, 0x1B, 0x5B, 0xD3, 0x23, 0x35, - 0xCC, 0x5A, 0x58, 0x10, 0x11, 0x5B, 0xD5, 0x88, - 0xC2, 0x60, 0x37, 0x3D, 0x1C, 0x1C, 0x7B, 0x09, - 0x95, 0xB5, 0x05, 0x12, 0xD8, 0x52, 0x8D, 0xF5, - 0xBD, 0x4A, 0xA5, 0x45, 0x6F, 0x3D, 0x55, 0x9D, - 0x90, 0xAD, 0xD7, 0xA9, 0xD0, 0x25, 0x0B, 0xD7, - 0x55, 0x11, 0x5C, 0x60, 0xBF, 0xBD, 0xFB, 0x9D, - 0x2A, 0xCE, 0x4F, 0xE6, 0xB8, 0x36, 0x3A, 0x4D, - 0xE7, 0xB6, 0xFF, 0x6B, 0xD8, 0xBA, 0xD4, 0xEE, - 0x95, 0x9A, 0x0A, 0x47, 0xD4, 0x76, 0xE0, 0xF7, - 0xAC, 0x02, 0xB6, 0xA8, 0x10, 0x1E, 0xA5, 0x98, - 0xC0, 0xF4, 0x68, 0x5E, 0x55, 0xC1, 0x67, 0xCD, - 0x16, 0x31, 0xBD, 0xA2, 0x86, 0xF3, 0xF8, 0xC0, - 0xED, 0x4A, 0xFF, 0xE8, 0xF5, 0x2C, 0xFA, 0xD2, - 0x06, 0x78, 0x6D, 0x34, 0xBE, 0xF9, 0x15, 0x84, - 0x6D, 0xE5, 0x5F, 0xA4, 0xAC, 0x84, 0x3B, 0x3A, - 0xA6, 0x2D, 0xC2, 0x01, 0xE0, 0x63, 0x92, 0xC7, - 0x77, 0xB5, 0x4E, 0x2C, 0x40, 0x90, 0x48, 0xAF, - 0x8B, 0xE9, 0x6C, 0x1E, 0xEE, 0x16, 0x8F, 0x4E, - 0x4F, 0xFF, 0x35, 0x15, 0xE5, 0x51, 0xF4, 0xB2, - 0x23, 0x1C, 0x6A, 0xCE, 0x05, 0xDC, 0xDC, 0xAD, - 0x7F, 0x9D, 0xDA, 0xB3, 0x0C, 0xAD, 0x9C, 0x62, - 0x68, 0xD6, 0x84, 0x00, 0x76, 0xFF, 0xD3, 0x01, - 0x18, 0xB0, 0xC4, 0xE5, 0xE5, 0x0D, 0x87, 0x8E, - 0xAF, 0x77, 0xEE, 0xCB, 0x56, 0x88, 0x7F, 0xED, - 0xC5, 0x7C, 0x54, 0xD6, 0x28, 0x46, 0xE0, 0x8C, - 0xE6, 0x87, 0xF2, 0x4D, 0x0D, 0x2F, 0x12, 0x62, - 0x06, 0xDF, 0xB2, 0x4E, 0x03, 0x04, 0x78, 0x0B, - 0x03, 0x4C, 0xCE, 0x86, 0xD1, 0xCD, 0x53, 0x00, - 0xED, 0xC6, 0xF8, 0x9A, 0xCB, 0x59, 0x14, 0xA6, - 0x0C, 0x87, 0x35, 0x92, 0x66, 0x0D, 0x02, 0xA9, - 0xEF, 0x0D, 0x7D, 0xC6, 0x45, 0xF3, 0x11, 0xEF, - 0x1F, 0x55, 0x72, 0x1F, 0x1B, 0x45, 0xD2, 0xE4, - 0x8F, 0x3F, 0x9F, 0xEB, 0x27, 0x02, 0xD8, 0x2C, - 0xEF, 0xAD, 0x7E, 0x7E, 0x10, 0xDD, 0x91, 0x5E, - 0x39, 0x06, 0x7C, 0x39, 0xEA, 0x61, 0xB9, 0xCC, - 0xF1, 0x45, 0x56, 0x81, 0x53, 0x55, 0x42, 0xD4, - 0x37, 0x0F, 0x53, 0xF0, 0x7F, 0xA0, 0xC6, 0x50, - 0x9B, 0x1D, 0xC6, 0x7E, 0x9F, 0x1D, 0x89, 0x3B, - 0xEB, 0x85, 0x59, 0x6D, 0x9C, 0x12, 0xEE, 0xAC, - 0xFC, 0xAE, 0xC0, 0xAE, 0x5F, 0xD4, 0x9C, 0x62, - 0xE7, 0x09, 0x8C, 0xFA, 0x80, 0x1A, 0x19, 0x09, - 0x0F, 0x8D, 0x68, 0x9E, 0x45, 0x33, 0xE2, 0x58, - 0x7B, 0xEF, 0xC7, 0x6A, 0xDC, 0x38, 0x33, 0x3E, - 0x5C, 0x53, 0xB5, 0x99, 0xDB, 0x04, 0xA7, 0xEA, - 0xFB, 0x07, 0x9B, 0x25, 0x47, 0xED, 0xAC, 0x5A, - 0xAA, 0x1E, 0xE5, 0x23, 0xDE, 0x64, 0xE5, 0x87, - 0x46, 0x8C, 0x41, 0x52, 0xC9, 0x4F, 0x90, 0x48, - 0x1C, 0xAA, 0xA6, 0xB0, 0x3A, 0x1E, 0xC9, 0x08, - 0xF7, 0x82, 0x71, 0x13, 0x76, 0x6B, 0x9E, 0x52, - 0x22, 0x32, 0xE0, 0xC6, 0xF7, 0xD7, 0x4C, 0xBD, - 0xC3, 0x1C, 0x18, 0xAF, 0xA0, 0x12, 0xD3, 0x22, - 0x6A, 0xFC, 0x71, 0x8A, 0x64, 0x24, 0xAC, 0x19, - 0x4E, 0x85, 0x3C, 0x51, 0xE6, 0xA3, 0xAD, 0xA9, - 0x59, 0x94, 0xD2, 0x7F, 0xC4, 0x9D, 0x93, 0x5B, - 0x51, 0xD7, 0xF3, 0x03, 0xE7, 0x7D, 0x5B, 0x13, - 0x0E, 0xCD, 0x7D, 0x0F, 0x77, 0x3E, 0x84, 0xD7, - 0x4E, 0x69, 0x57, 0x1B, 0x73, 0x99, 0xC9, 0x4D, - 0xC0, 0x19, 0x6B, 0x9D, 0x5F, 0xBA, 0x69, 0xEE, - 0x11, 0xBD, 0x7C, 0x45, 0xD9, 0xA9, 0x65, 0x88, - 0xA7, 0x0E, 0x16, 0xBF, 0xB3, 0x82, 0x5E, 0x5E, - 0x56, 0x13, 0x02, 0x7D, 0xB1, 0xDC, 0xF5, 0x4A, - 0x82, 0x73, 0x72, 0x35, 0x9B, 0x91, 0xAC, 0x04, - 0x69, 0xE9, 0xEA, 0x19, 0xC9, 0xD8, 0x59, 0xEB, - 0x8F, 0x22, 0x5F, 0x43, 0x11, 0x0C, 0xCF, 0xB4, - 0x16, 0x6C, 0x7D, 0x60, 0xCE, 0x14, 0x24, 0xAD, - 0xD7, 0x07, 0xC2, 0x4E, 0x98, 0xA0, 0xDE, 0x9E, - 0xE6, 0x31, 0xED, 0xF8, 0x5B, 0x9C, 0xAF, 0xF7, - 0x57, 0x59, 0x10, 0xA9, 0x92, 0xDC, 0x4F, 0x0C, - 0x2B, 0x88, 0x75, 0x19, 0x1D, 0xB3, 0xBF, 0x70, - 0x23, 0x17, 0xD5, 0x1A, 0x50, 0x30, 0x18, 0x14, - 0x1A, 0x14, 0xE6, 0x1D, 0x4F, 0x8A, 0x96, 0x3E, - 0xD8, 0x6E, 0xD9, 0xBF, 0x94, 0x4E, 0xDE, 0xB8, - 0xFF, 0xE1, 0x6F, 0xFD, 0x31, 0xE8, 0xFE, 0x43, - 0xC2, 0x40, 0x82, 0x45, 0x50, 0xFE, 0x1B, 0xBC, - 0x77, 0x4B, 0xB4, 0x30, 0xA7, 0xD4, 0x46, 0x32, - 0x6A, 0xF7, 0xC5, 0x92, 0xDA, 0x70, 0xB1, 0xB7, - 0xA1, 0x5A, 0x5D, 0x17, 0x3B, 0xDB, 0x2F, 0x28, - 0x8A, 0x6E, 0xEC, 0xDA, 0xC4, 0xF7, 0x2E, 0xCB, - 0xEB, 0x96, 0x60, 0x92, 0x1B, 0xDD, 0xD6, 0x13, - 0x7C, 0x85, 0x9F, 0x8A, 0x9A, 0xE9, 0x5F, 0xC4, - 0x24, 0xFD, 0x33, 0xDF, 0xB3, 0x98, 0x66, 0xF7, - 0xA1, 0x5A, 0xDC, 0x01, 0xC9, 0xFA, 0x37, 0xF1, - 0x7B, 0xD0, 0xF6, 0x66, 0x8A, 0x26, 0x7C, 0xC2, - 0x1B, 0xFF, 0x62, 0xBC, 0xFD, 0xCD, 0x47, 0xDA, - 0xEE, 0x75, 0xF2, 0xAC, 0x60, 0x69, 0x87, 0x26, - 0xCC, 0x92, 0x10, 0x1C, 0x92, 0xC1, 0x43, 0x09, - 0xE9, 0xCE, 0x7D, 0x05, 0x5C, 0x64, 0x55, 0xCB, - 0xBB, 0x7A, 0xAE, 0x05, 0xDB, 0x38, 0xD3, 0xD5, - 0xBB, 0xD9, 0x9F, 0xCB, 0xCF, 0xB7, 0x9C, 0xEF, - 0x7E, 0x7B, 0x2A, 0x6F, 0x84, 0x4E, 0x6A, 0x7F, - 0xD3, 0x5F, 0xF3, 0xB3, 0xC1, 0xF0, 0x02, 0x9C, - 0xA2, 0x4C, 0x86, 0x0E, 0x6B, 0xE2, 0x2B, 0x1D, - 0x1D, 0xB4, 0x55, 0x7F, 0x85, 0x54, 0x2D, 0x85, - 0x64, 0x89, 0x92, 0x19, 0x65, 0x44, 0xD7, 0x95, - 0x48, 0x2C, 0x46, 0x8D, 0x0E, 0xBA, 0xFB, 0x13, - 0x63, 0x52, 0x2E, 0x22, 0x19, 0x3F, 0x7F, 0xFB, - 0x54, 0x4D, 0x73, 0xA1, 0x3C, 0x22, 0xD6, 0x5D, - 0x2B, 0x4A, 0xBD, 0xD7, 0xBB, 0x72, 0x55, 0x80, - 0xD4, 0x57, 0x4E, 0xDC, 0xF2, 0x8B, 0xB3, 0x09, - 0x6A, 0xF9, 0x1A, 0xD3, 0x41, 0x0E, 0x72, 0x95, - 0x49, 0xE7, 0xD1, 0xDC, 0x05, 0x22, 0xC3, 0x3E, - 0x26, 0x95, 0x00, 0x01, 0x8C, 0xE1, 0x54, 0x47, - 0x84, 0x10, 0xA7, 0x67, 0x45, 0xBB, 0xB9, 0x7B, - 0x0B, 0xB4, 0x74, 0x82, 0xED, 0x6C, 0x26, 0x6E, - 0xF2, 0x56, 0xCA, 0x1A, 0xD1, 0x10, 0x68, 0x40, - 0x28, 0x23, 0xD5, 0x98, 0xB3, 0x6B, 0x75, 0x16, - 0x13, 0x87, 0xE1, 0xF2, 0x3F, 0xAB, 0xC0, 0x2A, - 0xF0, 0x16, 0x59, 0x85, 0x1A, 0x5B, 0x41, 0xB7, - 0x52, 0xB1, 0x79, 0x46, 0x20, 0xDF, 0x59, 0xFB, - 0x33, 0xB3, 0x05, 0xF1, 0x12, 0x8B, 0xDB, 0x7C, - 0x51, 0x90, 0xC9, 0x8A, 0xC9, 0x48, 0x10, 0x54, - 0xF4, 0x0F, 0x88, 0x1D, 0xDB, 0x40, 0x1B, 0x3A, - 0xD7, 0x62, 0xD1, 0x75, 0x73, 0xD6, 0xCA, 0x23, - 0x26, 0xB2, 0xBF, 0x4C, 0xCA, 0x22, 0xDD, 0xF6, - 0xAF, 0x22, 0xB8, 0x4F, 0xC2, 0xC3, 0xB3, 0xD3, - 0xED, 0xFA, 0xBA, 0x2E, 0x38, 0x28, 0x6A, 0xAE, - 0x60, 0xE9, 0x2D, 0x11, 0x33, 0xED, 0x7E, 0xE9, - 0x29, 0x8E, 0x01, 0xB0, 0x0F, 0x13, 0x83, 0x44, - 0x17, 0xFA, 0xB6, 0x54, 0x7C, 0xAC, 0x1F, 0xED, - 0xC9, 0x22, 0xF2, 0x4F, 0x69, 0x24, 0x04, 0xFE, - 0xC2, 0x6A, 0xEB, 0xB0, 0xE4, 0xF5, 0x03, 0xCB, - 0xB3, 0x99, 0x50, 0x66, 0x1F, 0x6B, 0xF3, 0xFE, - 0xB7, 0xBF, 0x8D, 0xBA, 0x59, 0x75, 0x75, 0x51, - 0xB0, 0xA5, 0xB9, 0x66, 0xC8, 0xDD, 0x35, 0xAE, - 0x20, 0x66, 0x21, 0x9B, 0x04, 0x3F, 0xC6, 0x90, - 0x6F, 0x2B, 0x5C, 0x78, 0x49, 0x3C, 0x40, 0xE6, - 0xF9, 0x6B, 0x1A, 0xEF, 0xCE, 0x5A, 0xC1, 0x68, - 0xD3, 0x34, 0x05, 0xD0, 0x21, 0x6C, 0xF8, 0xA8, - 0x55, 0xE4, 0x6E, 0x80, 0x9B, 0xAD, 0xA5, 0xC3, - 0x55, 0x0B, 0x28, 0xBB, 0x54, 0x02, 0xD4, 0xF6, - 0x82, 0x73, 0xAB, 0x56, 0x0B, 0xB1, 0x5F, 0x94, - 0xC3, 0xDA, 0x24, 0x1E, 0x7F, 0x62, 0x6B, 0x98, - 0x6B, 0x2A, 0xF3, 0x92, 0x37, 0x3A, 0xB9, 0xE6, - 0x27, 0xC4, 0xBB, 0xAB, 0xE4, 0x9A, 0x60, 0xD2, - 0xAE, 0xCE, 0xFD, 0x44, 0xEB, 0x1C, 0xCF, 0x74, - 0x54, 0xFC, 0xEC, 0x4F, 0xC2, 0xBA, 0xF4, 0x3B, - 0xAC, 0x03, 0xC7, 0x2E, 0xE6, 0x62, 0x44, 0x61, - 0x42, 0xC8, 0xAE, 0xF1, 0xB2, 0xA9, 0xAC, 0xE0, - 0xCE, 0x23, 0xAF, 0xCC, 0x86, 0x61, 0xFE, 0xC5, - 0xCB, 0xAC, 0x4A, 0x1B, 0x5C, 0xC7, 0x2B, 0xFF, - 0x8A, 0x20, 0x62, 0x0E, 0xB9, 0x1D, 0xDD, 0x93, - 0x19, 0x29, 0xE4, 0xD9, 0x13, 0x1D, 0x28, 0x32, - 0x03, 0x5A, 0xA6, 0x8E, 0x20, 0xC7, 0xD6, 0xC6, - 0x4D, 0x19, 0x17, 0xCC, 0x65, 0xB8, 0x84, 0x0C, - 0x38, 0xB4, 0xA9, 0x45, 0x2B, 0x91, 0x61, 0x79, - 0x87, 0x08, 0xA6, 0xBD, 0x28, 0x9A, 0x58, 0x48, - 0xD5, 0x58, 0xC6, 0xCE, 0xC2, 0xC5, 0x72, 0x16, - 0xD9, 0xF4, 0xED, 0x66, 0xAC, 0xFA, 0x93, 0xE8, - 0x26, 0x10, 0x3B, 0x3D, 0x8F, 0xEA, 0x51, 0xCC, - 0x82, 0xC0, 0xDB, 0xDF, 0xA7, 0x13, 0xFB, 0x1B, - 0x77, 0x7E, 0x6F, 0x9E, 0x3C, 0xC5, 0x86, 0x35, - 0x92, 0x5B, 0x6F, 0x76, 0xA1, 0x71, 0x0D, 0x8C, - 0xDC, 0x95, 0x9F, 0xAC, 0x2C, 0x8E, 0x21, 0x01, - 0x37, 0x06, 0x28, 0x64, 0x4C, 0x23, 0xE2, 0x75, - 0x0B, 0xA7, 0xA4, 0xF5, 0x90, 0x87, 0xD2, 0x43, - 0x71, 0x59, 0x7C, 0x8C, 0xCA, 0x77, 0x3B, 0xC5, - 0x36, 0x46, 0xF7, 0x2F, 0xD3, 0x47, 0x18, 0xD7, - 0xC9, 0x4E, 0x56, 0x2D, 0x49, 0x82, 0xAC, 0x7D, - 0xD7, 0x3D, 0xF1, 0xDD, 0x73, 0x8B, 0xE4, 0xA1, - 0x10, 0x85, 0xB6, 0x94, 0xBE, 0x6A, 0x5E, 0xEE, - 0xBD, 0x60, 0xEB, 0x95, 0x76, 0xA8, 0x52, 0xE1, - 0x47, 0x57, 0xA1, 0x9C, 0xEC, 0x44, 0xE5, 0x6F, - 0x68, 0x34, 0x7E, 0x19, 0xBE, 0xCE, 0x56, 0xC9, - 0xBE, 0xCE, 0xFC, 0xB8, 0x32, 0x6D, 0xCB, 0x84, - 0x59, 0xBF, 0x4D, 0xF6, 0xE1, 0x53, 0x41, 0x61, - 0x5C, 0xFB, 0xD2, 0x48, 0xA6, 0x7F, 0x05, 0xB2, - 0xFC, 0xE8, 0xB2, 0x8A, 0x55, 0x7D, 0x19, 0xC0, - 0x69, 0x3B, 0x91, 0x5D, 0x71, 0xE7, 0xBB, 0x72, - 0x7D, 0xB9, 0x64, 0x6E, 0x8B, 0x5B, 0x70, 0x51, - 0xB5, 0x69, 0x8C, 0xC0, 0xFC, 0x95, 0xB2, 0x43, - 0x08, 0xF8, 0x70, 0xE4, 0x6F, 0x87, 0xA7, 0xDF, - 0x23, 0x84, 0xEE, 0xCF, 0x73, 0x38, 0xDE, 0x99, - 0x4C, 0xF8, 0xF1, 0x2D, 0xA2, 0x68, 0x99, 0xE3, - 0x9B, 0xB8, 0xF6, 0xC1, 0x5C, 0x83, 0x07, 0xE9, - 0xB9, 0xE2, 0x51, 0x62, 0xC8, 0x53, 0xF1, 0xC2, - 0xF7, 0x57, 0x8A, 0xA0, 0x42, 0x3C, 0x18, 0x36, - 0xF3, 0x99, 0xFD, 0x34, 0xB2, 0xF0, 0x1D, 0xBA, - 0x43, 0xEA, 0x72, 0x1C, 0x0B, 0x37, 0x47, 0xBC, - 0xAF, 0xDA, 0x22, 0x1F, 0x1C, 0x08, 0x16, 0x13, - 0xBD, 0xAA, 0x07, 0xFD, 0x7E, 0xCA, 0x70, 0x57, - 0x74, 0xDF, 0x68, 0x6B, 0x9F, 0x2D, 0x56, 0xBD, - 0x21, 0x89, 0xFA, 0x09, 0x04, 0xCA, 0x09, 0xBD, - 0x4F, 0xE6, 0x15, 0xF5, 0x89, 0xAB, 0xAC, 0xB2, - 0xC9, 0xBF, 0xC8, 0xBB, 0x87, 0x83, 0xB4, 0xD3, - 0xDC, 0xB1, 0x25, 0x9B, 0xAE, 0xC5, 0x75, 0x0C, - 0x9E, 0x6A, 0x83, 0x41, 0x85, 0x9D, 0x4B, 0xBF, - 0x62, 0x0C, 0x7D, 0x77, 0xC9, 0x89, 0xA6, 0xE1, - 0x28, 0xBD, 0x13, 0x5D, 0x41, 0x26, 0x80, 0x75, - 0x23, 0x57, 0xE7, 0x4F, 0x4D, 0x02, 0x8E, 0x0F, - 0x43, 0x67, 0xF6, 0xA6, 0xE6, 0xB6, 0x84, 0x8D, - 0xF5, 0x7B, 0x6A, 0x95, 0x73, 0x27, 0x86, 0x02, - 0x72, 0xCB, 0xDF, 0x77, 0x1C, 0x6C, 0x5E, 0xD3, - 0xF0, 0x1C, 0x82, 0x7A, 0x0D, 0xBB, 0x70, 0xA3, - 0x98, 0x8B, 0x7B, 0x4A, 0xFE, 0x2D, 0xB1, 0x5C, - 0x61, 0x89, 0x34, 0x4C, 0x81, 0x4B, 0x52, 0x17, - 0x03, 0x81, 0x54, 0x4F, 0x9E, 0x9E, 0x07, 0x16, - 0xF3, 0xD9, 0x18, 0x01, 0x11, 0xFD, 0x67, 0x18, - 0xA2, 0x64, 0x35, 0x42, 0x81, 0x80, 0x4A, 0xBA, - 0xCB, 0xD5, 0xF5, 0x4A, 0x10, 0x7F, 0xE2, 0xCF, - 0xA5, 0x1E, 0xCB, 0x0C, 0xAB, 0x3E, 0x03, 0x98, - 0x73, 0x89, 0xA4, 0x10, 0x75, 0xD5, 0xAC, 0x3D, - 0xCF, 0x56, 0x75, 0xD8, 0x86, 0xC2, 0x21, 0x42, - 0x99, 0x8D, 0x1B, 0x49, 0x09, 0xFE, 0x86, 0x41, - 0xC9, 0xDC, 0x87, 0x8D, 0x5A, 0xF0, 0xF5, 0xBE, - 0xF5, 0x49, 0x64, 0x5A, 0x7A, 0xC3, 0x5D, 0xE4, - 0xD6, 0xB7, 0x30, 0x92, 0x2A, 0x15, 0x86, 0x02, - 0xBE, 0xBA, 0x6E, 0xF6, 0x3D, 0x2D, 0x70, 0x89, - 0xFB, 0xB5, 0x1E, 0xBA, 0xDA, 0x20, 0x12, 0x49, - 0x22, 0xA0, 0xD8, 0x33, 0x9E, 0x4C, 0xC0, 0x27, - 0x0F, 0x9C, 0x1F, 0xD2, 0xA9, 0xF4, 0xD2, 0xA9, - 0x6D, 0xC5, 0x32, 0x16, 0x35, 0x9F, 0x19, 0x88, - 0xC1, 0xAA, 0xA4, 0x66, 0x33, 0xE6, 0x2C, 0x6A, - 0x6E, 0xA2, 0x1B, 0x33, 0xCB, 0xC3, 0x7E, 0xC5, - 0x31, 0x4D, 0x5C, 0x17, 0x4C, 0x33, 0x7F, 0x09, - 0x01, 0x33, 0x82, 0x84, 0x37, 0x03, 0xEB, 0x0E, - 0xB1, 0x5F, 0x1B, 0x60, 0x8A, 0x2C, 0x9F, 0x39 + 0x69, 0x24, 0xBB, 0x42, 0x57, 0xA7, 0xB9, 0xAF, + 0xF0, 0x95, 0xC3, 0x0B, 0xB3, 0x5C, 0x6A, 0xE4, + 0x19, 0x82, 0x63, 0x12, 0x0F, 0x80, 0x39, 0xAA, + 0x4E, 0x78, 0xE1, 0x74, 0xA7, 0x86, 0xCE, 0x00, + 0x83, 0x01, 0xE6, 0x66, 0xF5, 0x9D, 0x3E, 0xC5, + 0x04, 0x4D, 0xE4, 0x56, 0x78, 0x8F, 0xDE, 0x19, + 0xEB, 0x39, 0x67, 0x7B, 0x5F, 0x9F, 0xE1, 0x41, + 0x50, 0xDA, 0x46, 0x3A, 0x70, 0x6F, 0x3B, 0xAF, + 0x71, 0x5B, 0x95, 0x33, 0x6B, 0x2D, 0x68, 0x5A, + 0x7C, 0xD7, 0x88, 0x07, 0x13, 0xE4, 0x58, 0x7B, + 0xF7, 0xD8, 0x57, 0xBF, 0x7E, 0x31, 0x56, 0x96, + 0xB8, 0xD0, 0xD9, 0xD4, 0x9E, 0x14, 0x29, 0x18, + 0xBF, 0x09, 0x74, 0xE7, 0xF4, 0x32, 0x37, 0xD4, + 0xBE, 0x3A, 0xD3, 0x94, 0x59, 0x9E, 0x3D, 0x39, + 0xBB, 0x76, 0x49, 0x93, 0x25, 0x53, 0x44, 0x7E, + 0x5D, 0x5A, 0xCC, 0x34, 0x99, 0x93, 0x01, 0x76, + 0xEC, 0xD3, 0xA8, 0x44, 0xA4, 0x25, 0xF5, 0x0D, + 0x05, 0x11, 0xC9, 0x22, 0x6C, 0x4B, 0x9A, 0x24, + 0xF2, 0xA0, 0x11, 0xCD, 0x88, 0xD3, 0x23, 0x08, + 0xE0, 0x31, 0x2A, 0x0C, 0x87, 0xCC, 0x34, 0xA9, + 0x95, 0x82, 0x3C, 0x65, 0xF4, 0xF0, 0xF9, 0x8E, + 0x50, 0xC3, 0x77, 0x88, 0xCE, 0x38, 0xDC, 0x28, + 0xFB, 0x8B, 0x9B, 0xFA, 0xAF, 0xA9, 0x04, 0xB5, + 0x41, 0xEE, 0x71, 0x2F, 0x6A, 0x04, 0x1E, 0x06, + 0x11, 0x37, 0x4F, 0x6B, 0xF1, 0x7E, 0xAC, 0x0B, + 0xD5, 0x6F, 0x3B, 0x6B, 0xF3, 0x36, 0xDA, 0x92, + 0x42, 0x07, 0x0C, 0x24, 0x69, 0xA2, 0x0C, 0x4D, + 0x16, 0x16, 0x14, 0x9A, 0x61, 0x59, 0x25, 0x20, + 0x11, 0xD2, 0x99, 0xF9, 0x3F, 0x98, 0x6D, 0x87, + 0x5D, 0xD3, 0x0B, 0x38, 0xA2, 0x25, 0x49, 0x17, + 0x45, 0x70, 0x13, 0x8C, 0x2B, 0xB3, 0xAA, 0x9C, + 0xBE, 0xA9, 0x19, 0x74, 0xF3, 0xD8, 0x9B, 0xF5, + 0xAE, 0x32, 0xBE, 0x9E, 0x58, 0xB8, 0x54, 0xA2, + 0xF8, 0xE8, 0x6F, 0xF7, 0x67, 0x80, 0xC0, 0x34, + 0x90, 0xF4, 0x67, 0xDB, 0x06, 0x51, 0xC2, 0x0B, + 0x1D, 0xF6, 0x0E, 0xB9, 0x7A, 0x3C, 0x99, 0xD9, + 0xBD, 0x66, 0x4B, 0xE6, 0xA5, 0xE4, 0xC8, 0xA8, + 0xAD, 0x4C, 0xC3, 0x63, 0x90, 0xD7, 0x00, 0x4E, + 0x4B, 0xB4, 0x21, 0xDA, 0xED, 0x65, 0x4C, 0x35, + 0x7D, 0xA4, 0xD6, 0x84, 0x98, 0x93, 0x3E, 0xC7, + 0x17, 0x77, 0xAD, 0x64, 0xC2, 0xAE, 0x01, 0x3C, + 0x73, 0xEB, 0x45, 0x7C, 0x68, 0xEF, 0x9A, 0x74, + 0x5A, 0xDE, 0xEB, 0x4F, 0xDF, 0xC8, 0x79, 0xE7, + 0x74, 0xD0, 0x3F, 0xAF, 0x6B, 0x14, 0xAA, 0xB1, + 0x07, 0x52, 0xE2, 0x4B, 0x52, 0xD0, 0xF2, 0xD9, + 0x4D, 0x54, 0x0A, 0x1E, 0xBE, 0x10, 0xF5, 0x97, + 0xE5, 0x14, 0x44, 0x2D, 0x6C, 0x13, 0xC2, 0xE2, + 0x49, 0x8E, 0x8A, 0xF3, 0x01, 0x7C, 0x52, 0xDB, + 0x23, 0x3A, 0x90, 0x71, 0x7D, 0xF2, 0x5B, 0x4D, + 0x07, 0x2B, 0x7D, 0x88, 0xEE, 0x87, 0x31, 0xD1, + 0x68, 0x24, 0xC9, 0x5D, 0x1F, 0xB9, 0x83, 0xC4, + 0x49, 0xDE, 0xB4, 0x66, 0x27, 0x60, 0x60, 0xFE, + 0xE4, 0xC7, 0xEE, 0x38, 0x14, 0x51, 0xF2, 0x32, + 0xC2, 0x9C, 0x7C, 0x32, 0x20, 0x85, 0x0C, 0x61, + 0xD1, 0xC3, 0xC0, 0x0D, 0xB1, 0xCD, 0x97, 0x26, + 0xA0, 0x2A, 0x56, 0x60, 0x9F, 0x3A, 0x65, 0xD3, + 0xD1, 0x64, 0x60, 0x45, 0x88, 0xCD, 0x9B, 0x43, + 0x14, 0x12, 0xF1, 0xAD, 0xD9, 0x14, 0xC5, 0xC2, + 0xDA, 0xBB, 0xC9, 0x04, 0x67, 0xC0, 0xC4, 0xEA, + 0x5F, 0x76, 0xE2, 0x4A, 0xA6, 0x18, 0x76, 0x5F, + 0x8B, 0x06, 0x36, 0xD7, 0xB0, 0x65, 0xE1, 0xF4, + 0xE6, 0xF6, 0x22, 0xEA, 0xE1, 0x71, 0x52, 0x45, + 0x8C, 0x76, 0x65, 0x86, 0x77, 0x2D, 0x36, 0x3F, + 0xA9, 0x92, 0x14, 0xF4, 0x72, 0xB0, 0xDB, 0x8A, + 0x1E, 0x49, 0xD8, 0x2D, 0x02, 0x78, 0xF2, 0x95, + 0x8B, 0x0A, 0xAA, 0x15, 0x86, 0xDB, 0x13, 0x4B, + 0xDF, 0xD2, 0x43, 0x87, 0x42, 0x49, 0x50, 0x07, + 0xE2, 0xFE, 0x5B, 0x60, 0xE2, 0x46, 0x39, 0x92, + 0x26, 0x94, 0x7A, 0x12, 0xEA, 0x17, 0x63, 0x1C, + 0xAA, 0x53, 0x46, 0x87, 0xCB, 0x75, 0xC0, 0x60, + 0xB4, 0x79, 0x7E, 0xAB, 0x82, 0x77, 0xCC, 0x4F, + 0x8A, 0x7A, 0x20, 0x38, 0x76, 0x06, 0xEF, 0xE2, + 0xDB, 0xD3, 0xE7, 0x36, 0x24, 0x92, 0x77, 0xD9, + 0x0F, 0xCA, 0xB9, 0x92, 0xA8, 0xC9, 0x9E, 0x85, + 0xAB, 0x03, 0xEB, 0x4C, 0xAC, 0x5D, 0x88, 0x55, + 0x39, 0x58, 0x52, 0x8A, 0xF9, 0x29, 0x74, 0x71, + 0x81, 0x35, 0xF1, 0xD0, 0xC7, 0x93, 0xEB, 0x00, + 0x0E, 0xA0, 0xAE, 0xC3, 0xEC, 0x18, 0x58, 0xFD, + 0xD1, 0x86, 0x88, 0xD1, 0xDA, 0x27, 0x27, 0x8D, + 0xEB, 0xF2, 0xCA, 0x81, 0x10, 0xBA, 0x4A, 0x20, + 0x4F, 0x79, 0x30, 0xE1, 0xC8, 0xCE, 0xEC, 0xAF, + 0xB7, 0x3F, 0x75, 0xDD, 0xB3, 0x4C, 0x5C, 0x55, + 0x96, 0x8A, 0x79, 0x33, 0x05, 0x84, 0x26, 0xB5, + 0x5D, 0x03, 0x9F, 0x72, 0x92, 0xAC, 0x43, 0xF6, + 0x45, 0x84, 0xF6, 0xDF, 0x18, 0x7A, 0x1D, 0x6B, + 0x00, 0x3F, 0x51, 0x4C, 0xC1, 0x3B, 0x26, 0xC2, + 0xF3, 0x48, 0x19, 0x5A, 0xA3, 0x21, 0xDE, 0x6A, + 0x27, 0xEC, 0x11, 0x34, 0x8D, 0xE5, 0x0D, 0x82, + 0x5A, 0x29, 0x64, 0xC6, 0x31, 0x99, 0x2E, 0x4B, + 0x0B, 0x42, 0x5B, 0x1B, 0xEB, 0x4F, 0x96, 0x00, + 0xE3, 0xAD, 0xC4, 0x43, 0x1C, 0xF2, 0xE8, 0x8B, + 0x42, 0x23, 0xD2, 0xDB, 0x66, 0x3C, 0x3C, 0xE7, + 0x0E, 0xF8, 0x5D, 0xDD, 0x56, 0xA9, 0xBA, 0xF1, + 0x38, 0xA9, 0xD7, 0xED, 0xD8, 0x94, 0x13, 0x1C, + 0x3A, 0x8F, 0x41, 0xA0, 0x4E, 0xF9, 0xF8, 0x67, + 0x52, 0xB7, 0x21, 0x81, 0xFA, 0xBB, 0x37, 0xC8, + 0x6B, 0x87, 0x7E, 0x61, 0xD6, 0x0E, 0xED, 0x95, + 0xEE, 0xFF, 0xAB, 0xE6, 0x37, 0x6E, 0x14, 0xAC, + 0xA8, 0x17, 0xC5, 0xF4, 0x19, 0x61, 0xAF, 0x8A, + 0x78, 0x49, 0xBA, 0xC0, 0x94, 0x91, 0x7B, 0x2D, + 0x13, 0x22, 0x76, 0xB6, 0xB3, 0x48, 0x6A, 0xFF, + 0x95, 0x0D, 0x23, 0xD4, 0xAA, 0xDC, 0x24, 0xCE, + 0x98, 0xA5, 0x26, 0x9E, 0x1C, 0x69, 0x91, 0x79, + 0x60, 0xA3, 0x1E, 0xE0, 0x9A, 0x52, 0x7C, 0x35, + 0x81, 0x75, 0xCA, 0xA0, 0xCB, 0x1B, 0x01, 0x8E, + 0x95, 0x26, 0xD9, 0x35, 0x34, 0xEA, 0xDB, 0xAC, + 0xB5, 0x2B, 0x27, 0x3D, 0x73, 0x5E, 0x22, 0xDD, + 0x0D, 0x5C, 0x28, 0xFA, 0x3E, 0x47, 0xCF, 0xE9, + 0x0B, 0x52, 0x15, 0xAE, 0x24, 0xF1, 0x46, 0xC3, + 0x46, 0x4B, 0xFE, 0xAF, 0x01, 0xD2, 0x8D, 0xAA, + 0x55, 0x3C, 0x1E, 0x94, 0x42, 0x8A, 0x10, 0x4A, + 0x9D, 0x78, 0xAE, 0xC7, 0x62, 0x59, 0x1E, 0x88, + 0x79, 0xF7, 0x68, 0x51, 0xCF, 0xB4, 0x64, 0x85, + 0x66, 0x72, 0x1B, 0x0C, 0xAC, 0x1F, 0x14, 0xFE, + 0x16, 0x14, 0x9A, 0x9D, 0x82, 0x10, 0xCC, 0x8F, + 0x2F, 0x50, 0xDE, 0xF7, 0xB4, 0x6C, 0x84, 0x3B, + 0xE9, 0x3B, 0xD8, 0xD5, 0x56, 0x02, 0x49, 0x33, + 0x50, 0xAB, 0x56, 0x0E, 0xA5, 0xBA, 0x17, 0x71, + 0x64, 0x23, 0xBE, 0x0E, 0xB8, 0x36, 0x0A, 0xB1, + 0x09, 0xD8, 0xFB, 0x18, 0xBF, 0xEA, 0x04, 0x08, + 0x47, 0xB7, 0x33, 0x51, 0x45, 0xD4, 0xF2, 0x00, + 0xD1, 0x9C, 0xF6, 0xFE, 0x7B, 0xAC, 0x91, 0x7F, + 0x42, 0x6C, 0x9B, 0x3D, 0x39, 0xA9, 0xCA, 0x43, + 0x29, 0x81, 0x8F, 0x24, 0x0E, 0x7D, 0xA3, 0x82, + 0x76, 0x10, 0x72, 0xF4, 0xA6, 0x50, 0x5E, 0xA8, + 0xE7, 0x6C, 0x1E, 0x44, 0x6F, 0xEB, 0x66, 0x25, + 0xE3, 0x8D, 0xDB, 0xCD, 0x3C, 0xDA, 0x81, 0xE8, + 0x3B, 0xF7, 0x68, 0xF3, 0xE0, 0x1D, 0x9D, 0x26, + 0x3B, 0x36, 0x73, 0x03, 0xAE, 0x15, 0x6C, 0x0B, + 0x71, 0x83, 0x36, 0x4A, 0x1E, 0x79, 0x41, 0xA0, + 0x92, 0x98, 0xA3, 0xAD, 0xF7, 0xBD, 0x23, 0x1E, + 0x61, 0x14, 0xB9, 0xDC, 0xE7, 0x95, 0x2B, 0x11, + 0x3F, 0x78, 0x16, 0x31, 0x38, 0xB9, 0x26, 0x6F, + 0x84, 0x3F, 0x1E, 0xD9, 0x7D, 0x9C, 0x2B, 0x16, + 0x3A, 0x6E, 0x8B, 0xD4, 0xC1, 0xAB, 0x4E, 0x17, + 0x93, 0x67, 0xC5, 0xAC, 0x96, 0xCE, 0xCF, 0x50, + 0x50, 0xFE, 0x82, 0x1F, 0xDF, 0xA4, 0x4E, 0x9E, + 0x68, 0x0B, 0x61, 0xC6, 0x01, 0x89, 0x32, 0xDF, + 0x71, 0x78, 0x11, 0x45, 0x9A, 0xF2, 0x54, 0x2E, + 0x2C, 0xDE, 0x77, 0x17, 0x8C, 0x2E, 0x98, 0x80, + 0xF0, 0x11, 0xE4, 0x05, 0xEA, 0xFA, 0x59, 0xC8, + 0xCB, 0xBE, 0xD7, 0x6E, 0x5A, 0x19, 0x41, 0x10, + 0x4B, 0x1B, 0x9D, 0x3A, 0x60, 0x49, 0x1C, 0x95, + 0x47, 0x55, 0xE0, 0x2E, 0x89, 0x41, 0x03, 0xF1, + 0xF4, 0x97, 0x74, 0x75, 0xE9, 0xEA, 0x36, 0x60, + 0x9F, 0xD6, 0x7C, 0x9D, 0xE3, 0x18, 0xED, 0xA2, + 0x37, 0x0D, 0xCC, 0xDB, 0xB9, 0xCE, 0xF7, 0xAE, + 0x63, 0x60, 0x90, 0x5E, 0xC2, 0x20, 0x83, 0x8C, + 0x97, 0x69, 0x82, 0x34, 0x41, 0xCD, 0xD0, 0xDA, + 0x8E, 0xF0, 0xAB, 0xE5, 0xF2, 0xD1, 0xD7, 0x6E, + 0x2F, 0xE0, 0x8F, 0xEF, 0x53, 0xDE, 0x1D, 0x61, + 0x66, 0xAB, 0x1A, 0x92, 0xB1, 0xAC, 0x09, 0x3E, + 0x5A, 0xBF, 0x76, 0x58, 0xC4, 0xB5, 0x72, 0x87, + 0xF2, 0xD1, 0xFD, 0x7B, 0x82, 0xDE, 0xDA, 0xF8, + 0xD5, 0xA4, 0xFB, 0xAC, 0x4B, 0x35, 0xD5, 0x82, + 0x31, 0x69, 0x4E, 0x16, 0x24, 0x97, 0x57, 0x8A, + 0xBD, 0x7A, 0xA7, 0xC8, 0xFE, 0x7B, 0x35, 0x41, + 0xA7, 0xF1, 0x8E, 0x54, 0xE8, 0xB7, 0xF0, 0x87, + 0x64, 0xC5, 0xE6, 0x84, 0x49, 0xDF, 0x65, 0x59, + 0x01, 0x54, 0x98, 0x32, 0xD6, 0x28, 0xFA, 0x63, + 0xD2, 0xB2, 0xC5, 0xA1, 0x50, 0x93, 0x39, 0x94, + 0xA9, 0x86, 0x33, 0x17, 0xAD, 0x40, 0xD7, 0x78, + 0xD9, 0xD2, 0xC0, 0x5C, 0x78, 0x98, 0x85, 0x0B, + 0x90, 0x17, 0x32, 0x23, 0xC7, 0xA0, 0xAF, 0x89, + 0x0F, 0xD7, 0xE6, 0x62, 0x21, 0xB6, 0xF0, 0x63, + 0x18, 0xB2, 0xED, 0x5E, 0x19, 0x9C, 0xB4, 0x24, + 0x88, 0x5A, 0xB8, 0x41, 0xE7, 0xA4, 0x72, 0x6F, + 0xAB, 0xA2, 0xF9, 0xBB, 0x53, 0xBC, 0x32, 0x36, + 0x43, 0x4C, 0x35, 0xFB, 0xBE, 0x4B, 0x1A, 0x0F, + 0x93, 0xF5, 0x0C, 0x37, 0x89, 0x6C, 0x29, 0xF8, + 0xE3, 0x02, 0xAD, 0x31, 0xED, 0x33, 0x31, 0xD6, + 0x20, 0xE3, 0xB6, 0x29, 0x45, 0x51, 0x01, 0xA1, + 0xF1, 0xCC, 0x7B, 0xA5, 0xE4, 0x6E, 0x68, 0xED, + 0x4A, 0x8C, 0xCC, 0x87, 0xB4, 0xDC, 0x75, 0xBC, + 0x01, 0x62, 0xB6, 0x33, 0x0F, 0x83, 0x3F, 0xBA, + 0x25, 0x75, 0xDF, 0xAF, 0x5B, 0x5F, 0x28, 0xBC, + 0x54, 0xFF, 0x2B, 0xA8, 0x1E, 0x7A, 0x47, 0x31, + 0x3C, 0x15, 0x48, 0x2B, 0x60, 0x5E, 0x66, 0xBB, + 0x38, 0xC6, 0x19, 0x8F, 0x13, 0x92, 0x10, 0x40, + 0x80, 0xFB, 0xE7, 0x8B, 0x86, 0xB1, 0xBC, 0x9A, + 0x6F, 0xB8, 0x81, 0xF5, 0xC7, 0x82, 0x01, 0x47, + 0xE6, 0xBA, 0x14, 0xB8, 0x1A, 0xCC, 0xF2, 0x0C, + 0xAE, 0x96, 0x64, 0x10, 0x94, 0xC2, 0x16, 0x90, + 0x2E, 0xA5, 0xC1, 0x25, 0xF6, 0xC9, 0x35, 0xA1, + 0x50, 0xD7, 0xC9, 0xAC, 0xC5, 0xD9, 0xE2, 0xE5, + 0xD9, 0x0E, 0x38, 0xC0, 0x50, 0x3A, 0xA9, 0x42, + 0x60, 0x17, 0xC7, 0x6A, 0xAF, 0xCD, 0x52, 0x61, + 0xB5, 0x06, 0x27, 0x4E, 0xC1, 0x3A, 0x96, 0x79, + 0xFB, 0x09, 0x79, 0x60, 0x27, 0xA4, 0xBB, 0x75, + 0x9D, 0x92, 0x82, 0x79, 0xB9, 0x4D, 0x84, 0x1A, + 0x09, 0x73, 0x93, 0xBF, 0x7E, 0x5B, 0xD6, 0x9A, + 0x49, 0x6C, 0xC3, 0xDE, 0xCD, 0x2B, 0x0F, 0x07, + 0xF8, 0x33, 0x92, 0xAA, 0xDE, 0x33, 0xDC, 0x51, + 0xB2, 0xA8, 0x4F, 0x6A, 0x07, 0x63, 0x5D, 0xC0, + 0xEF, 0x57, 0xA9, 0xAD, 0x59, 0x59, 0xB6, 0xA5, + 0x0B, 0x7B, 0xA5, 0x09, 0xAD, 0x5B, 0x11, 0xFA, + 0xD2, 0x6B, 0x41, 0x9F, 0x9F, 0x1E, 0x3F, 0x9C, + 0x73, 0x29, 0xB5, 0xA9, 0x53, 0xD7, 0xCC, 0x87, + 0xB2, 0xDE, 0x21, 0x06, 0x11, 0xCF, 0x52, 0xA6, + 0x39, 0xEF, 0x2B, 0x39, 0x08, 0x01, 0x2C, 0xB8, + 0x8E, 0x1D, 0x6F, 0x57, 0x62, 0x50, 0x79, 0xCB, + 0x10, 0x3D, 0x6C, 0x98, 0x10, 0x1A, 0x11, 0xBD, + 0x22, 0x33, 0xB6, 0x56, 0x02, 0xCA, 0x30, 0x49, + 0xBD, 0x32, 0x05, 0x20, 0x41, 0x9F, 0x76, 0xB0, + 0x61, 0xE3, 0x59, 0x8D, 0xE3, 0x81, 0x52, 0xC8, + 0x87, 0x67, 0xD1, 0xA2, 0x4F, 0xBD, 0x02, 0xBB, + 0x10, 0xC3, 0x8E, 0xAC, 0xAE, 0x31, 0x7D, 0xE6, + 0xBB, 0x28, 0x7B, 0x4D, 0x2C, 0xAE, 0x5D, 0xA0, + 0x21, 0x49, 0x65, 0xD8, 0x77, 0x37, 0x78, 0x62, + 0x6E, 0x9B, 0x97, 0x28, 0x59, 0xD8, 0x48, 0x2B, + 0x8D, 0x05, 0x47, 0xE4, 0xF5, 0x6D, 0xFF, 0x87, + 0x68, 0x1D, 0x5B, 0xC5, 0x12, 0x0F, 0x61, 0x3F, + 0xBB, 0xD9, 0x1E, 0x1F, 0x14, 0xE6, 0xDE, 0xFE, + 0x67, 0x2E, 0x2A, 0x7E, 0xAB, 0xCB, 0xBB, 0x9B, + 0x11, 0x08, 0x2C, 0x5E, 0x70, 0x0A, 0xA0, 0xB1, + 0xF7, 0xC1, 0x78, 0x5F, 0xCE, 0xD1, 0x9A, 0x93, + 0xAF, 0xE7, 0xC5, 0x9F, 0xA2, 0x51, 0x9B, 0xCD, + 0xEB, 0x49, 0x4C, 0x3D, 0x13, 0xB2, 0x12, 0x5F, + 0x38, 0x53, 0x23, 0xB8, 0x16, 0xC6, 0x8F, 0x8F, + 0x56, 0x28, 0xC7, 0xC2, 0xAB, 0xFD, 0x02, 0x78, + 0xA3, 0x37, 0x07, 0x3D, 0xA7, 0x4D, 0x16, 0x09, + 0x96, 0x98, 0xC4, 0xB1, 0x14, 0xE8, 0xA8, 0xCE, + 0x34, 0x4E, 0x0A, 0x15, 0xD0, 0xFC, 0x7E, 0xD4, + 0x97, 0xB0, 0x01, 0xD5, 0x3D, 0x4C, 0x96, 0xDC, + 0x39, 0x54, 0xD3, 0xB4, 0xB9, 0x56, 0xCB, 0x9D, + 0x2A, 0x27, 0x2C, 0x51, 0xF1, 0x55, 0x9B, 0x22, + 0x90, 0x4B, 0x40, 0xCC, 0x85, 0x31, 0xE4, 0x0C, + 0xC4, 0x12, 0xC6, 0x8C, 0xB6, 0xEE, 0xA4, 0xA4, + 0x09, 0x0B, 0x38, 0xE2, 0x79, 0x73, 0x29, 0x98, + 0x54, 0x67, 0xE8, 0x18, 0xA5, 0x24, 0xD3, 0x22, + 0x8E, 0xAC, 0xAE, 0x78, 0x25, 0xD3, 0xDA, 0xD2, + 0xEA, 0xA4, 0x22, 0xFD, 0xC7, 0x7A, 0xED, 0x71, + 0xA2, 0x05, 0xDA, 0x78, 0x38, 0xD9, 0x45, 0xE7, + 0xFE, 0xC3, 0x7E, 0x4D, 0xCA, 0x67, 0xE5, 0x04, + 0xCE, 0x35, 0xE5, 0xB0, 0x45, 0xF5, 0x6F, 0x1E, + 0x8D, 0x75, 0x29, 0xEB, 0xD6, 0xF1, 0xAF, 0x7B, + 0x6E, 0x93, 0x9E, 0x2B, 0x7A, 0xB4, 0x02, 0x7D, + 0x37, 0xA5, 0x13, 0x5D, 0x17, 0x2D, 0xA1, 0xAF, + 0x9C, 0xA2, 0xF7, 0x28, 0xA6, 0xF3, 0x7D, 0xE6, + 0x0D, 0xD2, 0x3D, 0x97, 0xD1, 0x1E, 0x75, 0xAB, + 0x1F, 0xD5, 0x1F, 0x8E, 0x9A, 0x13, 0x97, 0xE5, + 0x82, 0x21, 0x59, 0xDB, 0x58, 0x38, 0x02, 0xB3, + 0x2E, 0xEB, 0xB4, 0x56, 0x7E, 0xCE, 0x37, 0x46, + 0xD1, 0xAE, 0x33, 0x31, 0x47, 0x85, 0x64, 0x3D, + 0xD2, 0xA0, 0x74, 0x1E, 0x7F, 0x1B, 0xF2, 0xD2, + 0x61, 0xF2, 0x21, 0x24, 0xE8, 0xDD, 0xD0, 0x8C, + 0x64, 0x0A, 0x48, 0xB5, 0x47, 0x17, 0x51, 0x7C, + 0x21, 0xCD, 0x32, 0x53, 0x28, 0xBC, 0x23, 0x9C, + 0xA0, 0x28, 0xB2, 0x63, 0x0D, 0x06, 0x3C, 0x8C, + 0xC2, 0x0B, 0xE9, 0xBD, 0xB4, 0x85, 0x02, 0xDA, + 0xDD, 0xE7, 0x3F, 0xFE, 0xD5, 0x96, 0x38, 0x16, + 0x53, 0x3E, 0x02, 0x0A, 0xED, 0x12, 0x08, 0x53, + 0x62, 0x55, 0xB1, 0xCC, 0xE9, 0x85, 0x43, 0x31, + 0x27, 0xFF, 0x4F, 0x04, 0xD5, 0xB1, 0xE2, 0xF2, + 0x10, 0x87, 0x04, 0xB8, 0xB9, 0x66, 0x58, 0x8C, + 0x01, 0x56, 0xAF, 0xC2, 0xAE, 0x19, 0x29, 0x86, + 0xFB, 0xEC, 0x44, 0x3B, 0xAE, 0xF6, 0xCB, 0x85, + 0xA6, 0xF2, 0x9C, 0x77, 0x92, 0x40, 0x5A, 0x24, + 0x11, 0x47, 0x10, 0xAE, 0x1C, 0x74, 0x64, 0x44, + 0xFD, 0xF5, 0xFB, 0x65, 0x9E, 0x5E, 0x34, 0x68, + 0x26, 0x20, 0x7B, 0x8C, 0x54, 0x46, 0x3A, 0x06, + 0x17, 0xCE, 0x17, 0xFF, 0x33, 0xE4, 0x0F, 0x93, + 0x1F, 0xE5, 0x76, 0x71, 0x5C, 0x93, 0x2E, 0xF2, + 0x9F, 0xD7, 0x6B, 0x04, 0xA6, 0x9B, 0x58, 0xE0, + 0x30, 0x3D, 0x8E, 0xF2, 0x56, 0x78, 0xC8, 0xB7, + 0x0A, 0xF1, 0x2E, 0x90, 0x45, 0x59, 0x1C, 0x04, + 0xE8, 0xB7, 0x71, 0x06, 0x94, 0x04, 0x15, 0x17, + 0x7E, 0x86, 0x85, 0x93, 0xA0, 0x9C, 0x7E, 0x14, + 0x61, 0x9A, 0x4B, 0x33, 0x2F, 0x9A, 0xDC, 0x3A, + 0x65, 0x8B, 0x86, 0x01, 0x7F, 0x32, 0x65, 0x6C, + 0x54, 0x29, 0xC1, 0x15, 0xE1, 0x10, 0x03, 0x7A, + 0x8C, 0xC7, 0xE5, 0x44, 0x67, 0x7D, 0x2D, 0xD2, + 0x39, 0xA5, 0x9D, 0x54, 0xD0, 0xF3, 0xC7, 0x46, + 0x0E, 0xC1, 0x52, 0x08, 0x34, 0x6B, 0xA5, 0x6D, + 0xF5, 0x08, 0x6C, 0x5D, 0xBC, 0xC4, 0x1E, 0x0C, + 0x95, 0xFC, 0xB6, 0x86, 0x1C, 0x2C, 0x0C, 0x32, + 0xAA, 0xF3, 0x45, 0x4E, 0xFE, 0xE2, 0xFF, 0xBA, + 0x21, 0x4B, 0x43, 0x0E, 0xF2, 0x48, 0xA5, 0x9B, + 0x32, 0x44, 0x4D, 0x8D, 0x0D, 0x3D, 0xB8, 0x7C, + 0x9D, 0x4B, 0x15, 0x36, 0xD1, 0x57, 0x72, 0x8E, + 0xE7, 0x58, 0x5E, 0xF5, 0x32, 0x77, 0x6A, 0x00, + 0x3A, 0x02, 0x3C, 0x0A, 0xB0, 0xE9, 0xFF, 0x55, + 0x71, 0x08, 0xC3, 0x90, 0x68, 0x4D, 0x56, 0x5A, + 0x66, 0x50, 0x63, 0x26, 0x6A, 0xE6, 0x67, 0x0E, + 0xD5, 0x3B, 0x0F, 0xAF, 0x8F, 0xF6, 0x78, 0x29, + 0xBB, 0x73, 0x78, 0x25, 0xB1, 0x53, 0xA9, 0x33, + 0x8C, 0xBE, 0x3D, 0xF1, 0xA4, 0x62, 0x84, 0x9B, + 0x93, 0xA8, 0x1F, 0x84, 0xED, 0x07, 0xBE, 0x6D, + 0x62, 0x40, 0x00, 0x32, 0x74, 0x73, 0x7F, 0x61, + 0x8D, 0xCB, 0x26, 0xE4, 0x82, 0x52, 0xCE, 0x42, + 0x04, 0xDD, 0x31, 0x39, 0xFF, 0x68, 0x76, 0xF4, + 0x3B, 0x30, 0x5D, 0x83, 0x56, 0x20, 0xFE, 0xDF, + 0x79, 0xAA, 0x67, 0x43, 0x3D, 0xC2, 0x52, 0x87, + 0x32, 0x0E, 0x99, 0x17, 0x96, 0x7B, 0x70, 0xB2, + 0xD8, 0x66, 0xD1, 0x7B, 0x69, 0x8B, 0xFF, 0xF2, + 0xB3, 0xAB, 0x95, 0x14, 0x94, 0x9E, 0x58, 0xB5, + 0x7C, 0x68, 0xA4, 0x54, 0x12, 0xC1, 0xFC, 0x42, + 0x1C, 0x76, 0x8B, 0xF5, 0xEE, 0x8A, 0x10, 0xC8, + 0xAE, 0xF5, 0x69, 0x26, 0xF5, 0x1E, 0xC6, 0x2C, + 0x11, 0x56, 0x9F, 0x31, 0xAA, 0x51, 0x78, 0x68, + 0xE5, 0xCA, 0xD8, 0x9E, 0x95, 0x80, 0x66, 0xEB, + 0x9E, 0xDD, 0x72, 0x71, 0xB3, 0x1C, 0xB4, 0xB1, + 0xD6, 0xCE, 0x21, 0x12, 0x25, 0xAE, 0xB5, 0xB5, + 0x7F, 0x74, 0x97, 0x19, 0xDA, 0x07, 0xEC, 0xBE, + 0xFE, 0x03, 0x88, 0x1D, 0xDE, 0x3D, 0x81, 0xE4, + 0x13, 0x5F, 0x2D, 0xC8, 0x1A, 0xF7, 0x79, 0x77, + 0x6C, 0x1B, 0x80, 0x57, 0x16, 0x2A, 0x6C, 0x98, + 0x2F, 0xBB, 0x4D, 0xA6, 0xA9, 0xAD, 0x28, 0x4A, + 0xB1, 0x0C, 0x70, 0x02, 0x20, 0x44, 0xF4, 0x6D, + 0x40, 0x0B, 0xF6, 0xAD, 0x71, 0x82, 0xD1, 0x97, + 0x78, 0x99, 0x83, 0xBE, 0x99, 0x22, 0x79, 0x79, + 0xA1, 0x33, 0x4B, 0xA1, 0x49, 0xD8, 0x69, 0xBA, + 0x1C, 0x40, 0x88, 0x12, 0x34, 0x35, 0xBF, 0x97, + 0x85, 0x41, 0x35, 0x6D, 0xAF, 0x17, 0x1F, 0x33, + 0xAD, 0xB1, 0xC9, 0x79, 0x07, 0xA0, 0xFB, 0x58, + 0x45, 0x07, 0x4A, 0x85, 0xD2, 0x6F, 0x54, 0x61, + 0x35, 0xAE, 0xD0, 0xF9, 0x1B, 0xE4, 0x53, 0x9C, + 0x12, 0xBF, 0x94, 0x11, 0xE4, 0xB5, 0x56, 0xF6, + 0x87, 0xD0, 0x69, 0xDB, 0x6B, 0x21, 0xFE, 0x2B, + 0x7F, 0x32, 0x18, 0x87, 0x44, 0x8C, 0xEA, 0x55, + 0xDB, 0x19, 0xFB, 0xB8, 0xB0, 0x48, 0x2A, 0x55, + 0xAE, 0xC1, 0x67, 0x38, 0xD7, 0x4C, 0xD2, 0x65, + 0x09, 0x38, 0x36, 0xBE, 0x99, 0xD4, 0xFB, 0x53, + 0xE9, 0xB0, 0x14, 0xB0, 0x37, 0xCD, 0xBF, 0xE9 }; static const byte sk_87[] = { - 0x8C, 0x52, 0x4B, 0xD9, 0xAC, 0x48, 0x5C, 0xC6, - 0x9A, 0xA0, 0x75, 0x64, 0xE1, 0x4F, 0x0F, 0x60, - 0x13, 0x0E, 0xDE, 0x34, 0x08, 0xA5, 0xD4, 0x81, - 0xFD, 0x76, 0xC2, 0x51, 0x74, 0x75, 0xA8, 0xFB, - 0x9A, 0xFE, 0xF5, 0x92, 0x58, 0xBB, 0x3C, 0xEB, - 0x4C, 0x5E, 0x83, 0xF9, 0xFF, 0xBC, 0x3B, 0x49, - 0xAE, 0xE1, 0xFC, 0x4B, 0x94, 0x4B, 0x8C, 0x75, - 0xD4, 0x67, 0x75, 0x66, 0x7D, 0x6B, 0xA4, 0xF2, - 0xDA, 0xC2, 0xB7, 0xC4, 0xD8, 0x50, 0x25, 0xCB, - 0x5A, 0xDB, 0xA4, 0xAD, 0xBB, 0x44, 0x20, 0x24, - 0x90, 0xEA, 0xA5, 0x2C, 0xAE, 0x80, 0x22, 0xC9, - 0x59, 0x02, 0xB7, 0x10, 0xB0, 0x5E, 0x1E, 0x5F, - 0x52, 0x7D, 0x88, 0xDA, 0xE2, 0x04, 0xBF, 0x45, - 0xA7, 0xA8, 0x49, 0x97, 0x7D, 0xAD, 0x7C, 0x7C, - 0x9E, 0x9C, 0x4A, 0xCC, 0x36, 0x33, 0x0F, 0x30, - 0xFA, 0xDE, 0x52, 0xE9, 0xAE, 0x23, 0x29, 0x13, - 0x10, 0x17, 0x8A, 0xD0, 0x08, 0x8E, 0xE1, 0x10, - 0x30, 0xD0, 0x84, 0x65, 0x92, 0x12, 0x2A, 0x81, - 0x26, 0x2E, 0x11, 0x14, 0x30, 0x61, 0x38, 0x61, - 0x64, 0x42, 0x05, 0x08, 0x91, 0x90, 0x4C, 0x06, - 0x82, 0xCC, 0x90, 0x45, 0x10, 0x39, 0x90, 0x22, - 0x40, 0x2A, 0x9B, 0x16, 0x26, 0x9A, 0xA8, 0x50, - 0x91, 0x12, 0x70, 0x91, 0x20, 0x4D, 0xC0, 0x34, - 0x90, 0x18, 0x28, 0x31, 0x10, 0x02, 0x11, 0x22, - 0xB3, 0x6C, 0x8B, 0xB8, 0x2C, 0x22, 0xB0, 0x69, - 0x53, 0x36, 0x31, 0x61, 0x42, 0x6C, 0xD9, 0x06, - 0x6A, 0xD9, 0x04, 0x45, 0xDB, 0x18, 0x05, 0x12, - 0x37, 0x4A, 0xD4, 0x06, 0x64, 0xD3, 0xA2, 0x85, - 0xA0, 0x38, 0x8A, 0x14, 0xA5, 0x85, 0x50, 0x20, - 0x85, 0xE4, 0xA8, 0x24, 0xC3, 0xC6, 0x31, 0xC9, - 0x34, 0x4E, 0xD2, 0x14, 0x68, 0x82, 0x90, 0x85, - 0xC4, 0x02, 0x61, 0x24, 0x38, 0x05, 0x01, 0xA3, - 0x50, 0x48, 0x08, 0x62, 0x20, 0xB0, 0x25, 0x5B, - 0xA6, 0x4D, 0x98, 0x92, 0x11, 0xC2, 0x06, 0x00, - 0xD1, 0xB0, 0x4D, 0x21, 0xA4, 0x8C, 0x01, 0x16, - 0x72, 0x11, 0xA6, 0x20, 0xD0, 0x16, 0x45, 0x10, - 0x31, 0x8E, 0xCB, 0xC2, 0x69, 0x02, 0x08, 0x91, - 0xD4, 0x30, 0x89, 0x03, 0x41, 0x05, 0x93, 0x16, - 0x8E, 0x5A, 0x18, 0x04, 0x41, 0x10, 0x6D, 0x18, - 0x42, 0x70, 0x53, 0x16, 0x31, 0x52, 0x30, 0x8E, - 0x0C, 0x49, 0x66, 0x0C, 0x90, 0x0C, 0xA4, 0x08, - 0x2E, 0x41, 0x92, 0x05, 0x24, 0x07, 0x30, 0x12, - 0x46, 0x72, 0x13, 0x99, 0x20, 0xE0, 0xA2, 0x4C, - 0x1B, 0x14, 0x52, 0x5A, 0x90, 0x05, 0x08, 0x82, - 0x31, 0x53, 0xC2, 0x90, 0xCC, 0x42, 0x68, 0x18, - 0xB0, 0x2C, 0x00, 0x80, 0x65, 0x58, 0x12, 0x84, - 0x19, 0x90, 0x08, 0x44, 0x26, 0x4A, 0x10, 0xA9, - 0x0C, 0x12, 0x25, 0x0C, 0x9C, 0x10, 0x25, 0x0C, - 0x28, 0x25, 0xD8, 0x46, 0x84, 0x1A, 0x22, 0x71, - 0x5B, 0x28, 0x6E, 0x98, 0x02, 0x51, 0x61, 0xB4, - 0x51, 0x01, 0xA1, 0x21, 0x24, 0x39, 0x12, 0xC8, - 0x08, 0x85, 0xD1, 0x34, 0x64, 0xA4, 0xA8, 0x04, - 0xA2, 0xC0, 0x09, 0x44, 0x48, 0x48, 0x03, 0x37, - 0x00, 0x20, 0x05, 0x4D, 0x20, 0xA4, 0x05, 0x11, - 0x18, 0x82, 0x42, 0x94, 0x4D, 0x24, 0x16, 0x01, - 0x02, 0x93, 0x4C, 0x00, 0x16, 0x06, 0xC1, 0xC0, - 0x0C, 0x8B, 0xC0, 0x41, 0x41, 0x06, 0x42, 0xA3, - 0xC6, 0x64, 0x1A, 0x85, 0x91, 0x41, 0x06, 0x49, - 0x04, 0xA7, 0x44, 0x82, 0x22, 0x6A, 0x50, 0x08, - 0x0E, 0x14, 0x18, 0x20, 0x4B, 0x88, 0x91, 0x01, - 0xA0, 0x49, 0x1A, 0x85, 0x4D, 0x94, 0x18, 0x10, - 0x0A, 0x05, 0x44, 0x94, 0x38, 0x05, 0x93, 0x40, - 0x68, 0x23, 0x07, 0x85, 0xE2, 0x12, 0x22, 0x9B, - 0xB8, 0x08, 0xD2, 0x10, 0x2A, 0x08, 0xA8, 0x10, - 0x92, 0x40, 0x2D, 0xD8, 0x44, 0x4C, 0xCC, 0x94, - 0x05, 0x24, 0x43, 0x4C, 0xD3, 0xC2, 0x48, 0x10, - 0x21, 0x2D, 0xC9, 0xB6, 0x08, 0xC9, 0x06, 0x4D, - 0xE1, 0x90, 0x20, 0x14, 0x24, 0x70, 0x5C, 0x84, - 0x28, 0xC0, 0xC2, 0x81, 0x22, 0x13, 0x50, 0x44, - 0x84, 0x91, 0xCA, 0xA2, 0x48, 0x12, 0x91, 0x05, - 0x5B, 0x92, 0x8D, 0x92, 0x92, 0x24, 0x82, 0x42, - 0x48, 0x03, 0x37, 0x46, 0xD8, 0x44, 0x86, 0x44, - 0x20, 0x89, 0xE4, 0xC2, 0x84, 0xC2, 0x04, 0x65, - 0x49, 0xA8, 0x4D, 0xA4, 0x38, 0x28, 0xDB, 0xA4, - 0x64, 0x24, 0x00, 0x51, 0xC8, 0x12, 0x6D, 0x19, - 0x82, 0x24, 0xCB, 0x00, 0x44, 0x4B, 0x20, 0x20, - 0x9B, 0x82, 0x4C, 0x5C, 0xA8, 0x08, 0xD2, 0xB6, - 0x8C, 0x08, 0x35, 0x20, 0xC0, 0x92, 0x45, 0xE3, - 0xB4, 0x2C, 0x50, 0x32, 0x0E, 0xD1, 0x82, 0x11, - 0x4A, 0x96, 0x08, 0x1C, 0x86, 0x29, 0x02, 0x19, - 0x71, 0x12, 0x03, 0x6E, 0x94, 0x08, 0x50, 0x12, - 0x27, 0x20, 0x0B, 0x10, 0x12, 0xA1, 0x18, 0x06, - 0x5A, 0x36, 0x4C, 0x93, 0xB4, 0x68, 0x21, 0xA7, - 0x28, 0x09, 0x34, 0x91, 0x18, 0x93, 0x49, 0x4A, - 0x32, 0x60, 0x00, 0x29, 0x2D, 0x94, 0x48, 0x44, - 0x09, 0x94, 0x2C, 0x21, 0x07, 0x6C, 0x41, 0x38, - 0x60, 0x8C, 0x10, 0x46, 0x11, 0x19, 0x65, 0x01, - 0x46, 0x60, 0x1A, 0x29, 0x42, 0x23, 0x30, 0x29, - 0x40, 0x96, 0x85, 0x81, 0xC6, 0x6C, 0x09, 0xA2, - 0x31, 0x23, 0xC9, 0x84, 0x18, 0x27, 0x61, 0x02, - 0xA6, 0x05, 0x1B, 0x11, 0x32, 0xD1, 0x80, 0x24, - 0x59, 0x22, 0x52, 0x21, 0x34, 0x64, 0x0A, 0x21, - 0x52, 0x10, 0xC2, 0x80, 0x5C, 0x98, 0x0D, 0x81, - 0xA0, 0x84, 0x14, 0x97, 0x04, 0xCC, 0xC2, 0x04, - 0x1A, 0x81, 0x45, 0x23, 0x44, 0x6C, 0x13, 0xC0, - 0x44, 0x59, 0xC2, 0x68, 0x64, 0x08, 0x52, 0x51, - 0x30, 0x71, 0x12, 0x49, 0x70, 0x12, 0x94, 0x84, - 0x80, 0x12, 0x12, 0x1B, 0x00, 0x50, 0x84, 0x10, - 0x45, 0x4A, 0x30, 0x10, 0x22, 0x95, 0x49, 0xC9, - 0x82, 0x24, 0x03, 0x35, 0x21, 0x18, 0x16, 0x72, - 0x09, 0x89, 0x65, 0x88, 0xB2, 0x89, 0x41, 0xB4, - 0x90, 0x92, 0x38, 0x8C, 0x08, 0x23, 0x26, 0x0B, - 0x80, 0x61, 0x84, 0x28, 0x6A, 0x4C, 0x98, 0x44, - 0x10, 0xB9, 0x30, 0x93, 0x02, 0x49, 0x22, 0x13, - 0x80, 0x1C, 0xC3, 0x48, 0x50, 0xA8, 0x20, 0x1C, - 0x05, 0x00, 0x5B, 0x02, 0x41, 0xD2, 0x84, 0x61, - 0x4B, 0x40, 0x46, 0x20, 0x21, 0x44, 0xD9, 0xC4, - 0x21, 0xD3, 0xA4, 0x4D, 0xC0, 0xC0, 0x09, 0x5B, - 0x28, 0x91, 0x18, 0x15, 0x41, 0x18, 0xC5, 0x4C, - 0x14, 0xB7, 0x61, 0xDB, 0x34, 0x25, 0x02, 0x06, - 0x41, 0x14, 0xA9, 0x65, 0x0B, 0x10, 0x04, 0x23, - 0xC7, 0x49, 0x13, 0x47, 0x0A, 0xD0, 0x30, 0x80, - 0x99, 0x32, 0x68, 0x50, 0x18, 0x06, 0xA2, 0x28, - 0x65, 0x13, 0x35, 0x82, 0xD3, 0x06, 0x81, 0x22, - 0x49, 0x4D, 0x48, 0x44, 0x30, 0xCA, 0x96, 0x2C, - 0x12, 0xC8, 0x08, 0xA1, 0x24, 0x2C, 0x52, 0xA8, - 0x28, 0x23, 0x14, 0x0A, 0xD4, 0x20, 0x4D, 0x18, - 0x12, 0x72, 0xD4, 0x80, 0x44, 0xDC, 0x26, 0x2C, - 0x88, 0x10, 0x0A, 0x04, 0x14, 0x51, 0xC1, 0x96, - 0x00, 0xA3, 0x40, 0x30, 0x99, 0x48, 0x92, 0x9B, - 0x08, 0x86, 0x81, 0x04, 0x20, 0x4C, 0xB2, 0x29, - 0x18, 0x31, 0x08, 0x09, 0x23, 0x8C, 0x4C, 0x02, - 0x6A, 0xCA, 0x00, 0x62, 0x09, 0x22, 0x2D, 0x21, - 0x00, 0x02, 0x0A, 0x39, 0x41, 0x04, 0xA3, 0x50, - 0x90, 0x80, 0x2D, 0x59, 0xB4, 0x71, 0x13, 0x16, - 0x31, 0x11, 0x90, 0x4C, 0xC3, 0x14, 0x20, 0x60, - 0xB2, 0x30, 0x0A, 0xB6, 0x24, 0x21, 0xA9, 0x10, - 0x89, 0x80, 0x88, 0x44, 0x06, 0x8A, 0x91, 0x22, - 0x8E, 0xD9, 0x36, 0x86, 0x10, 0x46, 0x0A, 0xE1, - 0x16, 0x85, 0x42, 0x40, 0x6C, 0x09, 0x49, 0x11, - 0xE0, 0x88, 0x68, 0x12, 0x08, 0x68, 0x5C, 0x26, - 0x24, 0x04, 0xA8, 0x70, 0xC8, 0x08, 0x05, 0x13, - 0x87, 0x41, 0x23, 0x29, 0x72, 0xC9, 0xB8, 0x88, - 0x1B, 0x22, 0x66, 0x11, 0xA5, 0x2D, 0x11, 0x29, - 0x12, 0x50, 0x12, 0x70, 0x03, 0x09, 0x6A, 0x4B, - 0x88, 0x4C, 0xD2, 0xC8, 0x31, 0x40, 0x26, 0x40, - 0x4C, 0x04, 0x50, 0x58, 0x16, 0x71, 0x90, 0xC2, - 0x00, 0x0A, 0x30, 0x8A, 0xDC, 0x24, 0x85, 0x19, - 0xB0, 0x65, 0x1A, 0xA3, 0x64, 0x13, 0xA3, 0x45, - 0xC8, 0x48, 0x91, 0x91, 0x12, 0x20, 0xDC, 0x42, - 0x40, 0x24, 0xC0, 0x4D, 0xA3, 0x98, 0x10, 0x40, - 0x26, 0x25, 0xDC, 0xB4, 0x68, 0x4B, 0xC2, 0x45, - 0x13, 0x06, 0x91, 0xC8, 0x92, 0x24, 0x82, 0xA8, - 0x20, 0x4C, 0x30, 0x48, 0x52, 0x06, 0x01, 0x0B, - 0x24, 0x51, 0x41, 0x36, 0x40, 0x93, 0xC4, 0x70, - 0x44, 0x40, 0x2C, 0x24, 0x28, 0x22, 0x81, 0xA4, - 0x4C, 0x43, 0x84, 0x60, 0x20, 0x23, 0x90, 0x01, - 0x94, 0x6C, 0xDB, 0x28, 0x21, 0x93, 0x30, 0x80, - 0x93, 0xC0, 0x25, 0xC8, 0xA6, 0x50, 0xCA, 0x24, - 0x26, 0xD1, 0x40, 0x31, 0x04, 0xC4, 0x8D, 0xE2, - 0xC0, 0x04, 0x08, 0x33, 0x8C, 0x18, 0x87, 0x91, - 0xC8, 0xC8, 0x71, 0x40, 0x46, 0x06, 0x00, 0x44, - 0x20, 0x22, 0x49, 0x70, 0x11, 0x45, 0x90, 0x02, - 0xC3, 0x61, 0x60, 0xB4, 0x25, 0x80, 0x16, 0x21, - 0x11, 0x09, 0x04, 0x88, 0x04, 0x05, 0xCC, 0x36, - 0x20, 0x01, 0xB1, 0x2C, 0x64, 0xB6, 0x50, 0x54, - 0x32, 0x42, 0x0B, 0x08, 0x8D, 0x12, 0x39, 0x0D, - 0x10, 0x29, 0x52, 0x88, 0xB0, 0x04, 0x11, 0x38, - 0x44, 0xD2, 0xA6, 0x71, 0x0B, 0x45, 0x48, 0x9C, - 0x34, 0x72, 0xA0, 0x28, 0x49, 0x82, 0x16, 0x86, - 0x12, 0x18, 0x61, 0x04, 0x41, 0x0D, 0x8A, 0xA6, - 0x41, 0x80, 0xA8, 0x61, 0xDA, 0x30, 0x65, 0x82, - 0x84, 0x30, 0x08, 0xA3, 0x29, 0x04, 0x33, 0x8E, - 0x02, 0x24, 0x0D, 0x9C, 0x44, 0x10, 0xC9, 0x02, - 0x81, 0x53, 0x06, 0x66, 0x8B, 0x06, 0x90, 0x03, - 0x87, 0x69, 0x21, 0xC9, 0x69, 0x83, 0x46, 0x4E, - 0x14, 0x24, 0x89, 0x8C, 0xA0, 0x6C, 0x99, 0xA2, - 0x2C, 0x11, 0x37, 0x66, 0x0C, 0xA6, 0x4D, 0xD3, - 0xC8, 0x70, 0x03, 0x02, 0x61, 0xC3, 0xB6, 0x65, - 0x23, 0xC1, 0x6C, 0x10, 0x34, 0x8D, 0x1A, 0xC1, - 0x31, 0x43, 0x40, 0x44, 0xD4, 0x08, 0x02, 0x0A, - 0x36, 0x20, 0xE3, 0x26, 0x42, 0x0A, 0x48, 0x26, - 0x1A, 0x13, 0x44, 0x0C, 0x18, 0x61, 0x91, 0x96, - 0x84, 0x02, 0x17, 0x46, 0x9C, 0x20, 0x40, 0x41, - 0xC6, 0x2D, 0x1B, 0x16, 0x0C, 0x98, 0xB2, 0x90, - 0x1A, 0x20, 0x84, 0xE2, 0x34, 0x2D, 0xCB, 0x14, - 0x44, 0x93, 0xC6, 0x8D, 0x58, 0xB2, 0x69, 0x22, - 0xB2, 0x88, 0xC0, 0xB8, 0x2D, 0xA2, 0xC2, 0x31, - 0x20, 0xA3, 0x24, 0x11, 0x46, 0x48, 0x4A, 0xA6, - 0x50, 0x24, 0x09, 0x21, 0x1A, 0x01, 0x0D, 0x20, - 0x36, 0x01, 0xC4, 0x34, 0x70, 0xDA, 0x16, 0x68, - 0x84, 0x22, 0x4C, 0x11, 0x14, 0x09, 0x13, 0xC4, - 0x68, 0x11, 0x41, 0x2D, 0x1C, 0x10, 0x31, 0xDC, - 0xB2, 0x64, 0x42, 0x36, 0x08, 0x5C, 0x10, 0x88, - 0x04, 0x91, 0x25, 0xE1, 0xA0, 0x20, 0x14, 0x18, - 0x12, 0x14, 0x94, 0x91, 0x4C, 0xC2, 0x24, 0xD4, - 0x06, 0x71, 0x21, 0x02, 0x8D, 0xD4, 0x88, 0x30, - 0xC9, 0x36, 0x0E, 0xE4, 0x82, 0x81, 0xC0, 0x04, - 0x6D, 0x24, 0x23, 0x09, 0x21, 0x45, 0x45, 0x20, - 0x06, 0x65, 0xC2, 0x30, 0x2A, 0x18, 0x30, 0x8E, - 0x24, 0x83, 0x89, 0x93, 0x32, 0x66, 0xC1, 0x48, - 0x45, 0x62, 0x48, 0x0A, 0x52, 0xB8, 0x80, 0x11, - 0x86, 0x21, 0x04, 0x34, 0x11, 0x24, 0xB5, 0x6C, - 0x50, 0x36, 0x0A, 0x19, 0xA7, 0x8C, 0x14, 0x90, - 0x0D, 0x1A, 0xA5, 0x68, 0x0B, 0xB1, 0x11, 0x50, - 0x40, 0x08, 0x48, 0xB6, 0x31, 0x14, 0x28, 0x8D, - 0xE3, 0x47, 0xB4, 0xA1, 0x44, 0x94, 0xCC, 0x9F, - 0x0B, 0x94, 0x9F, 0x25, 0x49, 0xD9, 0xB3, 0x8F, - 0x71, 0xF4, 0x17, 0xA4, 0xA6, 0xAC, 0x24, 0x58, - 0x14, 0x25, 0x03, 0xC8, 0x63, 0x3E, 0x10, 0xA8, - 0xD4, 0x10, 0xD7, 0x90, 0x4A, 0x28, 0x37, 0x90, - 0x70, 0x27, 0xE3, 0x56, 0x5F, 0x04, 0x67, 0x76, - 0xC3, 0x67, 0x3F, 0xF5, 0xA5, 0x11, 0xA2, 0x2C, - 0x11, 0x01, 0x5D, 0x63, 0x71, 0x1A, 0xE6, 0x70, - 0x86, 0x46, 0xAB, 0xCE, 0x03, 0xB6, 0x82, 0xAF, - 0x51, 0xBA, 0x81, 0x94, 0x9C, 0x82, 0x36, 0xA9, - 0x49, 0xA5, 0xA3, 0x11, 0x08, 0x8C, 0x4B, 0x13, - 0x41, 0xF0, 0x08, 0xFD, 0xB2, 0x99, 0xED, 0xA8, - 0x07, 0x61, 0x3C, 0x2E, 0xBC, 0x49, 0x7B, 0x1C, - 0xBC, 0x87, 0xBC, 0xAE, 0x5F, 0x5E, 0x8F, 0x5D, - 0xE7, 0xB9, 0x0C, 0x70, 0x36, 0x25, 0x61, 0xFD, - 0x95, 0x9F, 0xAE, 0x0F, 0x8D, 0xF3, 0xA2, 0x45, - 0x24, 0xA7, 0xDE, 0x60, 0xD1, 0x4E, 0x6D, 0xAC, - 0xC7, 0x6A, 0x32, 0x42, 0xC0, 0x73, 0xEB, 0x78, - 0x50, 0xF4, 0x49, 0x52, 0x5E, 0x6F, 0x81, 0x42, - 0x54, 0xF8, 0x82, 0x05, 0xC9, 0x64, 0x74, 0x6A, - 0x60, 0x5E, 0x36, 0x59, 0x40, 0x50, 0xA3, 0xFE, - 0xDA, 0xE2, 0x6D, 0x8D, 0x6E, 0xE4, 0x5A, 0x27, - 0x73, 0x89, 0xDB, 0x0C, 0x5B, 0x14, 0xD9, 0xED, - 0xB2, 0xC7, 0x1D, 0x71, 0x93, 0x91, 0x0A, 0x72, - 0x32, 0xBE, 0xA3, 0xD8, 0x95, 0x8C, 0x94, 0x7E, - 0x63, 0xEB, 0xCE, 0x8B, 0xFC, 0xB0, 0x3F, 0x77, - 0x5C, 0x43, 0x48, 0x18, 0x83, 0xFE, 0xC8, 0xDA, - 0x89, 0xF2, 0x3B, 0x54, 0x82, 0x44, 0xC6, 0x9C, - 0xCC, 0x77, 0x0A, 0xC1, 0x6F, 0xB9, 0x98, 0x10, - 0xD5, 0xF2, 0x60, 0xFF, 0x38, 0xD2, 0x0D, 0xD6, - 0x8C, 0x38, 0x54, 0x5B, 0xD8, 0x38, 0x84, 0x50, - 0x36, 0xF4, 0x02, 0xC1, 0x06, 0x0F, 0x15, 0x1B, - 0xC8, 0x90, 0x9B, 0x6E, 0x36, 0xC8, 0x3F, 0xE9, - 0x8B, 0x62, 0x15, 0x6F, 0xF0, 0xC2, 0x86, 0x7F, - 0xD1, 0xB5, 0x97, 0x53, 0xAE, 0x41, 0xAE, 0x21, - 0x84, 0xAC, 0x57, 0xA5, 0x1F, 0xA7, 0xC7, 0x24, - 0xDF, 0xDE, 0x2F, 0x3C, 0xCD, 0xA2, 0x7E, 0x1D, - 0x97, 0xE1, 0x96, 0xC5, 0xB4, 0x7D, 0xF9, 0x5F, - 0x7E, 0xEF, 0x09, 0xC4, 0xF3, 0x57, 0xF0, 0x51, - 0x73, 0xAB, 0x0E, 0x6A, 0xCA, 0x64, 0xE4, 0x99, - 0x0F, 0xD2, 0x20, 0xAC, 0x72, 0xF1, 0xA8, 0x23, - 0x8F, 0x94, 0x63, 0xDC, 0xB3, 0xBB, 0x62, 0x2C, - 0xEA, 0xA6, 0x27, 0x5A, 0x93, 0xC6, 0xCD, 0xCE, - 0x1E, 0x09, 0xAF, 0x89, 0xEC, 0x22, 0xE4, 0x30, - 0x2D, 0xB9, 0xCD, 0x08, 0x2E, 0x12, 0x76, 0x79, - 0x99, 0xBC, 0xA0, 0x34, 0x0B, 0xDA, 0x89, 0x08, - 0x14, 0x60, 0x7B, 0x98, 0xE6, 0xAF, 0xD2, 0xE1, - 0x87, 0xC8, 0xDA, 0x50, 0xF7, 0x10, 0x2C, 0x72, - 0x74, 0x50, 0xD0, 0x3C, 0x98, 0x06, 0xFE, 0xEB, - 0xC6, 0xC5, 0x69, 0x31, 0x06, 0xE2, 0x2E, 0x7E, - 0x7D, 0x3D, 0x2B, 0x1F, 0x48, 0x43, 0xC5, 0x95, - 0xDA, 0x84, 0x08, 0x1E, 0x2B, 0x50, 0x6D, 0x91, - 0xA6, 0x2B, 0xCD, 0x08, 0x43, 0x7B, 0xA2, 0xD8, - 0x60, 0x6E, 0xF7, 0x80, 0x08, 0xC3, 0x3F, 0x35, - 0xF3, 0x70, 0xA5, 0xC7, 0x56, 0xFC, 0xBD, 0x34, - 0x46, 0x7B, 0xBF, 0x63, 0x19, 0xAC, 0xB6, 0xC3, - 0x1B, 0x81, 0x84, 0x9F, 0xBB, 0x54, 0x05, 0x99, - 0xAE, 0x43, 0xE2, 0xA5, 0x20, 0xFD, 0x5C, 0xC7, - 0x25, 0x47, 0xB1, 0xFD, 0x80, 0xB5, 0x78, 0xC2, - 0x00, 0x98, 0x02, 0xB9, 0x61, 0x2A, 0xBA, 0x39, - 0xC7, 0x20, 0xB8, 0x7D, 0x7A, 0x03, 0x68, 0xE5, - 0x37, 0x71, 0x1F, 0x72, 0xAA, 0x41, 0x61, 0xB4, - 0xC0, 0xC2, 0xD3, 0x7A, 0xCD, 0xD2, 0xED, 0xC2, - 0xC5, 0x99, 0x8C, 0x62, 0xA3, 0x7D, 0xC8, 0x9C, - 0xD2, 0x50, 0x02, 0x0D, 0xCB, 0x68, 0x15, 0xB0, - 0xD6, 0x19, 0x03, 0xC8, 0x01, 0x12, 0x72, 0xA1, - 0x3A, 0xC2, 0xA6, 0x63, 0x51, 0x26, 0x03, 0x5D, - 0x3F, 0x1D, 0x3B, 0x0E, 0x30, 0x6B, 0xB7, 0xEC, - 0xB6, 0x8E, 0x2D, 0x76, 0xC8, 0xD7, 0xAE, 0x59, - 0x81, 0xFC, 0x5F, 0x57, 0x5E, 0xAD, 0xA0, 0x20, - 0xC8, 0xB4, 0x91, 0x2D, 0xEC, 0x03, 0xC4, 0xC6, - 0x55, 0x05, 0x87, 0xA4, 0xA2, 0x21, 0x09, 0x25, - 0x97, 0x21, 0xA4, 0x46, 0x45, 0x46, 0x40, 0x3B, - 0xDC, 0x6F, 0xCD, 0xFB, 0xFB, 0xD9, 0xF4, 0x2C, - 0xEC, 0xF1, 0xC4, 0x73, 0x41, 0x30, 0x60, 0x63, - 0x9A, 0xF2, 0xA5, 0x26, 0x78, 0x9A, 0x5E, 0x70, - 0x98, 0xDE, 0x35, 0x10, 0xA0, 0x5D, 0x45, 0xD5, - 0x95, 0xF7, 0x11, 0xBC, 0x99, 0xD3, 0x00, 0x67, - 0x9A, 0x30, 0x85, 0x36, 0x50, 0xDB, 0x18, 0xEA, - 0x6D, 0xB2, 0xF3, 0x14, 0xDA, 0x23, 0xE2, 0x8A, - 0x44, 0x21, 0x25, 0xD4, 0xA3, 0x28, 0x43, 0xA0, - 0xC6, 0x5C, 0x99, 0xB0, 0x72, 0x6B, 0xC2, 0x1A, - 0x30, 0xBE, 0x6B, 0x7B, 0xE0, 0x31, 0x54, 0x8C, - 0x29, 0xE5, 0xC6, 0x69, 0x53, 0xDE, 0x05, 0x1E, - 0x43, 0xCC, 0x7E, 0x9A, 0x82, 0x4A, 0xC4, 0x0A, - 0x50, 0x65, 0xDC, 0xD8, 0xF9, 0x01, 0x32, 0x65, - 0x1E, 0xF9, 0xA4, 0xCC, 0x07, 0xB9, 0x55, 0x97, - 0x45, 0xA9, 0x61, 0xF8, 0xBE, 0x99, 0x00, 0x12, - 0xD8, 0x17, 0x62, 0xFB, 0x89, 0xE7, 0x05, 0x5E, - 0x1B, 0xCD, 0x2B, 0x09, 0x6C, 0x5A, 0x5C, 0xA3, - 0x66, 0x4D, 0x02, 0x78, 0x0C, 0xC3, 0x63, 0x30, - 0xD0, 0xFA, 0x7B, 0x11, 0x00, 0x40, 0xDD, 0xF0, - 0x8C, 0x7C, 0xBA, 0x4C, 0x63, 0x78, 0xDA, 0xBB, - 0xDF, 0xF9, 0xC9, 0xA4, 0x40, 0x25, 0x86, 0xD1, - 0xBA, 0x22, 0xD7, 0x69, 0x98, 0x4E, 0x9D, 0x15, - 0x21, 0xA8, 0x56, 0xC0, 0xFF, 0x52, 0xE4, 0xB4, - 0x0F, 0xB2, 0x53, 0xE7, 0xA1, 0x34, 0x18, 0xEA, - 0x5B, 0x25, 0x42, 0x13, 0xE3, 0x13, 0xE7, 0xDF, - 0x54, 0x2B, 0x8D, 0x70, 0x51, 0xC7, 0x60, 0xB1, - 0x1E, 0x4D, 0x3A, 0x46, 0x04, 0xA1, 0x11, 0x43, - 0xAD, 0x24, 0x29, 0x90, 0xC9, 0x04, 0x15, 0xC5, - 0x07, 0xE5, 0x46, 0xB8, 0x50, 0x16, 0x6B, 0x66, - 0xFE, 0x1C, 0x8B, 0xFC, 0x20, 0x9C, 0xC4, 0x88, - 0x10, 0x36, 0x5E, 0x56, 0xE8, 0x45, 0x75, 0x89, - 0xFB, 0xD6, 0xD0, 0x8D, 0x9D, 0x53, 0xAE, 0x89, - 0x19, 0x54, 0xCF, 0xE1, 0xFF, 0x12, 0x13, 0xF2, - 0xC7, 0xBE, 0x4C, 0x1E, 0xB0, 0x70, 0x6E, 0xDC, - 0x0A, 0x64, 0x3B, 0x60, 0x3A, 0xEA, 0x0D, 0x41, - 0xDD, 0x8E, 0x09, 0xB9, 0x96, 0x8F, 0x6A, 0x49, - 0x50, 0xEF, 0xDF, 0xD7, 0x73, 0x8D, 0x16, 0x32, - 0xA8, 0x5C, 0x0A, 0x90, 0x18, 0xA1, 0xEB, 0x19, - 0xCC, 0x50, 0xD5, 0x59, 0xD7, 0x35, 0x3F, 0xBA, - 0x38, 0x1B, 0x5F, 0x71, 0x56, 0x70, 0xB3, 0x20, - 0x4D, 0x9E, 0x16, 0xA8, 0xF7, 0x35, 0x19, 0xD2, - 0x09, 0x0A, 0x22, 0x28, 0x81, 0x61, 0x26, 0x5B, - 0x9C, 0xEC, 0x9D, 0x4A, 0x61, 0xCF, 0x0D, 0x3C, - 0x88, 0xEA, 0x0B, 0x7A, 0xA7, 0xC6, 0xAE, 0x31, - 0xBE, 0xC2, 0xBA, 0x48, 0xBB, 0x9D, 0x06, 0xE1, - 0x32, 0x6D, 0x80, 0xCE, 0x27, 0x5C, 0x6F, 0x13, - 0x79, 0x35, 0x9F, 0x9C, 0x11, 0xEA, 0xDB, 0xF5, - 0x49, 0x15, 0xB6, 0x51, 0x86, 0xFC, 0x62, 0x34, - 0x3D, 0x58, 0x6B, 0x0E, 0xF8, 0x3B, 0xBB, 0x42, - 0xF6, 0x2D, 0x5C, 0xE2, 0xF3, 0xAA, 0x9F, 0x03, - 0x43, 0xE9, 0x9E, 0x90, 0xB9, 0xFF, 0x55, 0x93, - 0x60, 0xF8, 0x10, 0x2F, 0xFC, 0xBD, 0x40, 0x23, - 0xB8, 0x4F, 0x4C, 0x7A, 0x74, 0x9F, 0xDC, 0x55, - 0xDF, 0x5E, 0xCD, 0x23, 0xEB, 0xAC, 0x47, 0x4E, - 0x0D, 0x0F, 0xBE, 0xDE, 0x02, 0x64, 0x61, 0x7E, - 0x73, 0x78, 0x8E, 0x25, 0xE9, 0x7D, 0x66, 0xE5, - 0x82, 0xBF, 0x98, 0x5B, 0x36, 0xCE, 0x17, 0x72, - 0x56, 0x9C, 0xDA, 0x63, 0x77, 0x55, 0x8B, 0xA9, - 0x75, 0xF5, 0x28, 0xC3, 0x78, 0x6D, 0x8F, 0xC2, - 0x75, 0x5F, 0x28, 0x9E, 0x3F, 0xFB, 0xF1, 0xFD, - 0xB7, 0xDE, 0x05, 0x3C, 0xD3, 0xE8, 0xD7, 0x7A, - 0x7D, 0xC9, 0xF7, 0x9D, 0x58, 0xB4, 0xA6, 0x21, - 0x25, 0xFC, 0x52, 0x84, 0x21, 0xF6, 0x0B, 0x6D, - 0xA6, 0x62, 0x51, 0x97, 0xCD, 0xA9, 0xA1, 0x0C, - 0x88, 0x21, 0x67, 0xA5, 0xFB, 0x8C, 0x8A, 0x50, - 0xC5, 0x21, 0x91, 0x3A, 0xAB, 0x95, 0x96, 0xF3, - 0x30, 0x6D, 0x08, 0x42, 0x07, 0x4B, 0x78, 0x1F, - 0xC1, 0xD3, 0x41, 0x15, 0x68, 0xED, 0x93, 0x09, - 0xC7, 0x8B, 0xF9, 0x77, 0x25, 0xD3, 0xCE, 0x2B, - 0xA2, 0x0D, 0xB4, 0xC6, 0x84, 0x7F, 0x8E, 0xE5, - 0x24, 0x46, 0x59, 0x8D, 0x6F, 0x0F, 0x0C, 0xA8, - 0xFC, 0x04, 0x9B, 0x4D, 0x2B, 0xA7, 0x70, 0x1F, - 0x46, 0x7E, 0x76, 0x03, 0xC6, 0x7E, 0xA5, 0x3D, - 0x79, 0xE2, 0xF1, 0xAC, 0xBC, 0xDD, 0xF6, 0x91, - 0x69, 0x4C, 0x44, 0x1F, 0xC3, 0xBF, 0x9F, 0xFC, - 0x4E, 0xB0, 0x79, 0x30, 0x68, 0x89, 0xAC, 0xF2, - 0xD7, 0xC6, 0xE1, 0x6C, 0x37, 0xFB, 0xB3, 0x38, - 0x44, 0x2C, 0x97, 0xAB, 0xDA, 0x2C, 0x88, 0xC7, - 0xF2, 0x80, 0x08, 0x00, 0x4E, 0x44, 0xED, 0xBE, - 0xA4, 0x28, 0x3D, 0xC1, 0xCF, 0x9E, 0x83, 0xE7, - 0x2E, 0x7F, 0xF5, 0x08, 0x47, 0x26, 0xE0, 0xBD, - 0x1A, 0x17, 0xDB, 0x2F, 0xED, 0x19, 0x2E, 0x65, - 0x1B, 0x62, 0x5F, 0x08, 0x82, 0x10, 0x61, 0xCB, - 0xAA, 0xA7, 0xF8, 0x59, 0x4B, 0x46, 0xCB, 0xA2, - 0xCB, 0x41, 0x34, 0x30, 0x51, 0x58, 0x2A, 0xEE, - 0xE1, 0x5E, 0xAC, 0xCA, 0xBF, 0x37, 0x45, 0x98, - 0xBD, 0x93, 0x1B, 0x5A, 0x5E, 0x92, 0x14, 0x05, - 0x75, 0x2D, 0xFB, 0x8F, 0xBD, 0x24, 0x9B, 0x81, - 0xCD, 0xDD, 0xF5, 0xBE, 0x05, 0x0D, 0xBD, 0x4B, - 0x2B, 0x8C, 0x0A, 0xF0, 0x3A, 0x85, 0xD6, 0x74, - 0x65, 0x7F, 0x98, 0xF8, 0x57, 0xA2, 0x36, 0xA2, - 0xFE, 0xE4, 0xB4, 0xA4, 0x0D, 0xEA, 0x9A, 0xBE, - 0x41, 0x79, 0x68, 0x63, 0x70, 0x3F, 0x3E, 0x38, - 0x60, 0xC3, 0x40, 0x81, 0x72, 0xDD, 0x25, 0x34, - 0xB4, 0xFE, 0xAC, 0x41, 0x6E, 0x4A, 0xE7, 0xBF, - 0xE3, 0x87, 0xFA, 0x20, 0x8B, 0xBD, 0x68, 0x9E, - 0x06, 0xA9, 0x15, 0x23, 0x07, 0x04, 0x4B, 0xFA, - 0x45, 0x45, 0xB7, 0x75, 0xD3, 0x3E, 0x16, 0x70, - 0xF6, 0x26, 0xF2, 0x3A, 0x9D, 0xFB, 0xEA, 0xEB, - 0x47, 0xCE, 0x99, 0x6B, 0x0E, 0xB2, 0xE8, 0x2B, - 0x18, 0x15, 0x14, 0x2E, 0xF2, 0x14, 0x0D, 0x44, - 0x47, 0x1E, 0x63, 0x84, 0x5B, 0x3F, 0xA8, 0xEF, - 0x5F, 0xEB, 0xA0, 0x41, 0x77, 0xC1, 0xF4, 0x4F, - 0x8E, 0x2E, 0x29, 0xCD, 0xDB, 0xF2, 0x75, 0x24, - 0x24, 0x46, 0x73, 0xC3, 0x46, 0xB5, 0xCA, 0x13, - 0x35, 0x12, 0x0A, 0x8D, 0x88, 0x89, 0x17, 0x99, - 0x13, 0xCA, 0x66, 0x07, 0x67, 0x6B, 0x7B, 0x3B, - 0x20, 0xD3, 0x5F, 0x78, 0x1C, 0xC0, 0x99, 0x59, - 0x0A, 0xBA, 0x8F, 0xA0, 0xDB, 0xDF, 0xCC, 0x03, - 0xC4, 0xA6, 0xC7, 0x08, 0xB9, 0xFD, 0x95, 0xC2, - 0x45, 0xF9, 0xF3, 0x11, 0x62, 0xF7, 0x14, 0xB9, - 0xEB, 0x09, 0xB3, 0x7C, 0xF8, 0xF6, 0x67, 0xCC, - 0x03, 0xB3, 0x06, 0x6F, 0x60, 0xAC, 0x72, 0xF2, - 0xD3, 0x71, 0x6C, 0x4D, 0xAD, 0x3A, 0x99, 0x75, - 0x5C, 0x52, 0x2D, 0x87, 0x69, 0x3E, 0xD6, 0x7E, - 0x12, 0x96, 0xD3, 0x88, 0x8D, 0x11, 0x85, 0xAA, - 0x0A, 0xA5, 0x32, 0x90, 0x51, 0xC5, 0x65, 0x64, - 0xE0, 0xA9, 0x73, 0xA4, 0xF3, 0x8A, 0x32, 0x83, - 0xE5, 0x08, 0x09, 0x39, 0x6A, 0x90, 0x2C, 0xC3, - 0xFC, 0x92, 0x29, 0x7A, 0x45, 0xBE, 0x02, 0x79, - 0x15, 0x1B, 0xBB, 0x60, 0xBB, 0xD9, 0x42, 0xF1, - 0xE5, 0x14, 0xB4, 0xA5, 0xFF, 0x12, 0x42, 0x30, - 0xB0, 0xCB, 0xD0, 0x1D, 0xB4, 0x62, 0x49, 0xC5, - 0xB7, 0xDA, 0x37, 0x47, 0x2C, 0x8B, 0x16, 0xCA, - 0xD2, 0x2C, 0xA1, 0x24, 0xE6, 0x57, 0xFA, 0xEB, - 0x2C, 0x62, 0x2E, 0x12, 0x74, 0x37, 0x2B, 0x3F, - 0x56, 0x23, 0x9C, 0xED, 0x90, 0xDE, 0x0D, 0x6E, - 0x9E, 0x11, 0x78, 0xA4, 0x9C, 0xB3, 0xA1, 0x37, - 0xF7, 0x4B, 0x09, 0x61, 0xD8, 0x33, 0x1D, 0x80, - 0x68, 0x5C, 0xDD, 0xBD, 0x3E, 0xAE, 0x9D, 0xB8, - 0xBA, 0x42, 0x41, 0xDC, 0xC9, 0x93, 0xF1, 0x92, - 0x2F, 0x7A, 0xF9, 0xFE, 0x67, 0x13, 0x87, 0xBD, - 0x7D, 0x04, 0x17, 0x91, 0xB6, 0x03, 0x5E, 0xA0, - 0x5B, 0x23, 0xEA, 0x0C, 0xFA, 0x45, 0xCB, 0x1A, - 0xC5, 0x7F, 0x63, 0xD6, 0x3D, 0x3C, 0x66, 0x4A, - 0x83, 0x4E, 0x4E, 0x90, 0xA6, 0x63, 0xB0, 0x8A, - 0xD7, 0x0D, 0xB4, 0xB7, 0xA9, 0x0F, 0xC6, 0xC7, - 0x3B, 0xAD, 0x07, 0xA6, 0x94, 0x47, 0xDB, 0x63, - 0x26, 0x00, 0x18, 0x5E, 0x27, 0xB5, 0xE2, 0xE3, - 0xED, 0x8D, 0x97, 0x95, 0x38, 0x20, 0x24, 0x9F, - 0x40, 0x84, 0x44, 0x7E, 0x8C, 0x05, 0xAB, 0xB1, - 0x89, 0x26, 0x7D, 0x46, 0x2C, 0x9F, 0xE5, 0xC1, - 0x27, 0xCE, 0x1D, 0x5A, 0x9F, 0xF1, 0xF8, 0x57, - 0x8F, 0xCF, 0xB7, 0x4E, 0x07, 0xF3, 0xBA, 0x56, - 0xCF, 0xE9, 0x87, 0x21, 0x61, 0xD6, 0x97, 0x7B, - 0x26, 0x97, 0x07, 0xB4, 0x87, 0xFE, 0x25, 0x9C, - 0xA9, 0x8E, 0x06, 0x90, 0x17, 0x2C, 0x98, 0x26, - 0x23, 0xEE, 0xBB, 0x91, 0x8A, 0x15, 0x38, 0xA1, - 0x38, 0xCB, 0x8B, 0xA0, 0xF3, 0x4A, 0xF2, 0x12, - 0xA7, 0xB7, 0x05, 0xB6, 0x09, 0xD0, 0xEC, 0xDD, - 0x21, 0xB6, 0xFA, 0x29, 0x95, 0xB4, 0x08, 0xD5, - 0x95, 0xB7, 0xB8, 0x2E, 0x23, 0xAA, 0x89, 0x81, - 0xE2, 0xD0, 0xFD, 0x9C, 0x8D, 0xF0, 0xCA, 0x61, - 0xE3, 0x1E, 0x73, 0x9E, 0xD1, 0x72, 0x5C, 0x63, - 0xB8, 0x74, 0x0E, 0x2C, 0x27, 0x3A, 0x71, 0xF9, - 0xFE, 0x66, 0x33, 0xE9, 0x41, 0x27, 0x61, 0xA3, - 0xFA, 0xD8, 0x66, 0x2A, 0x52, 0x6D, 0xAB, 0xBF, - 0x32, 0xC2, 0x8E, 0x8F, 0xB0, 0x60, 0x52, 0xE1, - 0x96, 0xC8, 0x1E, 0x9A, 0x3E, 0x07, 0xFA, 0x34, - 0xFA, 0x9C, 0x4C, 0x0D, 0x29, 0x0F, 0x68, 0xA6, - 0x59, 0x28, 0x22, 0xB1, 0x99, 0x56, 0x2C, 0x01, - 0x04, 0x2F, 0x34, 0x65, 0xFD, 0xD4, 0xD0, 0xD5, - 0x17, 0x7C, 0x14, 0x92, 0x73, 0x6C, 0x31, 0xCE, - 0xD4, 0xB3, 0x59, 0x83, 0x6B, 0x34, 0x7C, 0x76, - 0x8C, 0xED, 0xD5, 0xE2, 0x4F, 0x39, 0x44, 0xBF, - 0x90, 0x53, 0x9A, 0xC7, 0xD4, 0x6A, 0x86, 0xA3, - 0xE2, 0x15, 0x59, 0xD0, 0x0F, 0x32, 0x92, 0xC2, - 0x9B, 0x9E, 0xE3, 0xF6, 0x94, 0x96, 0xFD, 0x0B, - 0xB6, 0x06, 0x8F, 0x0D, 0x1F, 0x38, 0xFC, 0x6F, - 0xA2, 0x78, 0xAC, 0xC5, 0xB5, 0x6A, 0x6B, 0xEC, - 0x78, 0x8A, 0x6F, 0xD8, 0x21, 0xB7, 0xCF, 0x66, - 0x73, 0x03, 0xCA, 0x2E, 0x3C, 0x7F, 0x2F, 0x29, - 0x41, 0xC9, 0x88, 0xFD, 0x0E, 0xA0, 0x43, 0xD6, - 0x9E, 0xB1, 0xE7, 0x13, 0x9C, 0xF0, 0x9C, 0xCF, - 0x33, 0x22, 0x57, 0xEF, 0xE5, 0xCE, 0xD9, 0xAC, - 0x7D, 0x34, 0x75, 0xBD, 0xAE, 0x84, 0xEE, 0xE8, - 0x5D, 0x8C, 0x55, 0x86, 0xBA, 0x19, 0xE5, 0x9D, - 0x35, 0x6D, 0xD8, 0x70, 0xC5, 0xE0, 0xEA, 0x77, - 0x3A, 0xE5, 0xB5, 0x2C, 0xD2, 0x28, 0xB5, 0xE8, - 0xAF, 0xB1, 0xD2, 0xC4, 0xE5, 0x59, 0x06, 0xB8, - 0x2E, 0xA6, 0x8F, 0xC4, 0x9B, 0x30, 0xF9, 0x37, - 0xDB, 0x29, 0xA1, 0x44, 0x0B, 0xB7, 0xB5, 0xB4, - 0x12, 0xD3, 0x4E, 0xB3, 0xB7, 0xD8, 0x2F, 0x19, - 0xDE, 0x3B, 0xC3, 0x53, 0xCE, 0x1C, 0x34, 0x4C, - 0xA4, 0x6A, 0xE2, 0xD0, 0x04, 0xDF, 0x3C, 0x53, - 0x8B, 0x06, 0x8F, 0x36, 0xE5, 0x77, 0xB2, 0x7A, - 0x1A, 0xC0, 0x0C, 0xBD, 0xA3, 0xA0, 0xEE, 0xB6, - 0x40, 0xAD, 0x5C, 0x04, 0xAE, 0xCF, 0x64, 0x2B, - 0x8A, 0x18, 0x58, 0x86, 0xDE, 0xC9, 0x3D, 0x7D, - 0x15, 0xBC, 0xEE, 0x4C, 0x22, 0xF4, 0x98, 0xD9, - 0x37, 0xEE, 0xE2, 0x40, 0x43, 0xFF, 0xB2, 0x6F, - 0x05, 0xC0, 0x0E, 0x30, 0xDE, 0xD8, 0x0C, 0x0B, - 0xAD, 0xED, 0xCC, 0xBC, 0x29, 0x95, 0x07, 0x40, - 0x10, 0x99, 0xA0, 0xD1, 0x08, 0xF7, 0xD5, 0xF1, - 0xAD, 0xC9, 0xDD, 0xC8, 0x6A, 0x1E, 0x9E, 0x06, - 0xDF, 0x12, 0xFF, 0x66, 0x33, 0x5E, 0x21, 0x47, - 0xC3, 0xDE, 0x36, 0x98, 0x5B, 0xBF, 0x42, 0x9E, - 0x30, 0xA0, 0x81, 0x5C, 0x28, 0x34, 0x1B, 0x3A, - 0x32, 0xBC, 0xDE, 0x52, 0x53, 0x25, 0x1E, 0xF6, - 0xE2, 0x99, 0x12, 0x92, 0x07, 0x1D, 0xEB, 0x08, - 0x36, 0xA7, 0xD5, 0x18, 0x1F, 0xDB, 0x44, 0xA7, - 0xE1, 0x13, 0x06, 0xB0, 0xDF, 0x63, 0x82, 0x68, - 0xEF, 0xF5, 0x2B, 0x04, 0x0B, 0x93, 0xE8, 0xB0, - 0x92, 0x7B, 0xDE, 0x1F, 0xC9, 0x39, 0x8F, 0x42, - 0x9D, 0x06, 0x22, 0x13, 0xC9, 0x97, 0x2F, 0x43, - 0x8A, 0xBA, 0xAF, 0xF9, 0x71, 0xE3, 0x55, 0x5D, - 0x06, 0x77, 0x38, 0x39, 0xA3, 0xED, 0x41, 0x63, - 0xFE, 0x2A, 0xB3, 0x23, 0x43, 0x0C, 0xF3, 0x17, - 0x3B, 0x69, 0xED, 0x32, 0x0A, 0x54, 0xF3, 0x8D, - 0x76, 0xC6, 0x09, 0xDD, 0x88, 0x5B, 0x23, 0x57, - 0x72, 0xC4, 0x87, 0xB8, 0x9D, 0xF7, 0xCA, 0xFB, - 0x7C, 0x61, 0x67, 0x5C, 0x65, 0xF8, 0xD6, 0xD7, - 0x1E, 0x95, 0xB9, 0x73, 0x4D, 0x2E, 0x1F, 0x43, - 0x3E, 0x2B, 0x58, 0x92, 0x15, 0x2E, 0xAA, 0x51, - 0xF0, 0xD4, 0xF2, 0xA6, 0xCD, 0x12, 0x21, 0xD6, - 0xCA, 0x46, 0x2A, 0xFF, 0xCB, 0x1B, 0x6B, 0xB4, - 0x09, 0x17, 0x3B, 0xA2, 0x94, 0xDF, 0x1D, 0x68, - 0x8B, 0x75, 0xEA, 0x11, 0xD6, 0x99, 0x04, 0xD1, - 0x00, 0xDB, 0x61, 0xBC, 0xF2, 0x3B, 0x88, 0x4B, - 0x33, 0xDF, 0x0F, 0xD4, 0xFB, 0x14, 0x0C, 0x6A, - 0x53, 0x61, 0x1F, 0xBD, 0x28, 0xB2, 0x11, 0x19, - 0x38, 0x71, 0x17, 0x76, 0x4D, 0xEE, 0x01, 0xC4, - 0x77, 0x53, 0x2A, 0xAF, 0xD3, 0x78, 0xFF, 0x45, - 0x7F, 0x97, 0x9D, 0x26, 0x92, 0x0E, 0xD9, 0x4E, - 0x34, 0x1D, 0xE8, 0xDD, 0xBF, 0x5F, 0x87, 0xE6, - 0x35, 0x9A, 0x39, 0x71, 0x59, 0x20, 0x01, 0xFB, - 0x53, 0x2C, 0x61, 0x38, 0x0C, 0x8C, 0x02, 0xD3, - 0xA0, 0x53, 0x95, 0x02, 0xED, 0x5C, 0xFE, 0x9B, - 0xD3, 0x6A, 0xF3, 0x3F, 0x92, 0x6F, 0x33, 0x37, - 0x19, 0x97, 0x81, 0x3A, 0x50, 0xE1, 0xD9, 0x27, - 0x7E, 0x64, 0xF8, 0x01, 0x52, 0x26, 0x51, 0xD1, - 0x06, 0xAF, 0x20, 0xA0, 0x28, 0x0F, 0x3F, 0xCB, - 0x21, 0xB7, 0x55, 0x1A, 0x76, 0xB8, 0x9B, 0x4D, - 0xED, 0x2A, 0x05, 0x0E, 0x6E, 0xAF, 0xCC, 0xA1, - 0x08, 0x9C, 0xBE, 0x3F, 0x98, 0xE6, 0xB4, 0xB9, - 0x83, 0xC9, 0x08, 0x41, 0x96, 0xDD, 0xD9, 0x0D, - 0x52, 0x66, 0x94, 0xA4, 0xEA, 0xFC, 0xE5, 0x48, - 0x04, 0x73, 0x64, 0x79, 0x68, 0xC9, 0x4A, 0x81, - 0xA8, 0x07, 0xF8, 0xD9, 0x4E, 0x07, 0x1E, 0xC1, - 0x8F, 0x62, 0xAB, 0xA6, 0xD7, 0x68, 0xFC, 0x57, - 0x5E, 0x75, 0x1B, 0xBF, 0x3D, 0xA6, 0x91, 0xC5, - 0x08, 0x14, 0x5E, 0xF2, 0x4C, 0x22, 0x8B, 0x4E, - 0x29, 0x2D, 0xC0, 0x46, 0x3A, 0x9C, 0x9D, 0x86, - 0xCF, 0x51, 0x85, 0x9D, 0x93, 0x23, 0xA1, 0xA1, - 0xF3, 0x76, 0xB1, 0x56, 0xB0, 0xF4, 0x1F, 0x39, - 0xDA, 0xDB, 0x13, 0x70, 0x29, 0x89, 0x95, 0xD2, - 0xC5, 0xF3, 0x76, 0xFE, 0xEE, 0x99, 0xCF, 0xA0, - 0x84, 0xEC, 0x70, 0xF0, 0xD3, 0xFA, 0x42, 0xDB, - 0xFD, 0x99, 0x65, 0x2F, 0x84, 0x11, 0x99, 0xCD, - 0x38, 0xB3, 0x1B, 0xAB, 0x8C, 0x2D, 0x33, 0x04, - 0xCA, 0xE1, 0xB3, 0x05, 0x9A, 0x20, 0x80, 0xDB, - 0xED, 0x59, 0x42, 0x30, 0x48, 0x37, 0xB3, 0x85, - 0x5C, 0xEE, 0x54, 0x06, 0x92, 0x97, 0x4E, 0xFC, - 0xFA, 0xF7, 0x25, 0xE0, 0x4E, 0x57, 0xC4, 0x72, - 0x38, 0x59, 0xCA, 0x3C, 0x4A, 0x3F, 0x09, 0xD6, - 0x09, 0x15, 0x83, 0xEF, 0x24, 0x21, 0xDD, 0xFD, - 0x66, 0x9E, 0xBF, 0xEE, 0xCC, 0xBF, 0x86, 0x20, - 0x29, 0x40, 0x5E, 0x42, 0xD2, 0xC0, 0x24, 0x2D, - 0x76, 0xE6, 0x64, 0xF9, 0x5D, 0xC2, 0x85, 0xB6, - 0x09, 0x41, 0x04, 0x62, 0x17, 0xDC, 0xF8, 0xFA, - 0x2A, 0x4C, 0xD1, 0x82, 0x31, 0x57, 0xB7, 0x2B, - 0x49, 0xE8, 0x40, 0x13, 0x2A, 0xA1, 0x86, 0xD2, - 0x9A, 0xB8, 0xA9, 0xBE, 0x39, 0xBE, 0xE9, 0xA5, - 0x35, 0x12, 0x08, 0xF1, 0xA9, 0x9E, 0x57, 0x46, - 0x3A, 0x55, 0x16, 0xA7, 0x41, 0xD9, 0x25, 0xB8, - 0x2F, 0xAF, 0xA8, 0x81, 0x5F, 0x5F, 0x46, 0xA4, - 0x3B, 0xB3, 0xE9, 0x1B, 0x74, 0xEF, 0x5D, 0x57, - 0x48, 0x4A, 0x72, 0x08, 0xDA, 0xFE, 0x1D, 0x55, - 0x6B, 0xAB, 0x8B, 0x13, 0x18, 0xBF, 0xDD, 0xF4, - 0x4E, 0x01, 0x5F, 0x4B, 0xF6, 0x80, 0xD4, 0x16, - 0x4B, 0x2F, 0x03, 0x4B, 0xF8, 0x93, 0x20, 0x21, - 0x55, 0x52, 0x49, 0x4A, 0x6C, 0x1F, 0x7D, 0xAD, - 0x04, 0xEF, 0xB3, 0x74, 0xEE, 0xC5, 0xB6, 0xBC, - 0x33, 0x7A, 0xCF, 0x64, 0xB9, 0xF9, 0x41, 0x70, - 0xAF, 0xE9, 0xC7, 0xD6, 0x25, 0x18, 0x17, 0xAB, - 0xBA, 0xC9, 0x05, 0xEF, 0x40, 0x89, 0xD5, 0x69, - 0x76, 0xAA, 0xA0, 0x3E, 0x4D, 0x1C, 0xE7, 0x9D, - 0x9E, 0x74, 0xF4, 0xF2, 0x7B, 0x40, 0xF6, 0x57, - 0x78, 0x66, 0xFC, 0xDA, 0xE3, 0x6B, 0xD2, 0x6E, - 0xC7, 0x9D, 0x65, 0x84, 0xAF, 0x7A, 0x1F, 0xE4, - 0x34, 0xD4, 0x1A, 0x17, 0xA2, 0x72, 0xB0, 0xEE, - 0x5A, 0x0C, 0xF4, 0x02, 0xAC, 0x1D, 0x6F, 0x4A, - 0xD0, 0xB2, 0x02, 0x3A, 0x7D, 0x2C, 0xF1, 0x43, - 0x0E, 0x1E, 0x96, 0xEB, 0x42, 0xF8, 0x3A, 0xF5, - 0x0B, 0x5D, 0xA9, 0x23, 0x02, 0x28, 0xE5, 0x26, - 0x5E, 0x69, 0x38, 0x2F, 0x85, 0x34, 0x32, 0x5E, - 0x5E, 0x29, 0x33, 0x94, 0x05, 0xBD, 0x58, 0xF8, - 0xE8, 0x9C, 0xBF, 0xB1, 0x5A, 0x05, 0xC6, 0x23, - 0x9B, 0xBB, 0x57, 0x69, 0x8C, 0xE6, 0x41, 0x97, - 0x48, 0x01, 0x95, 0xAF, 0xE9, 0x62, 0x8C, 0x6F, - 0x09, 0x43, 0xF3, 0x64, 0x50, 0x90, 0x2F, 0x14, - 0xF7, 0x30, 0x07, 0xE0, 0x4B, 0xA8, 0x39, 0xAC, - 0x21, 0xC4, 0x07, 0x45, 0x5F, 0xD9, 0x87, 0xB1, - 0x57, 0x47, 0x07, 0x66, 0xFF, 0xC7, 0xAB, 0xEE, - 0x1F, 0x55, 0x71, 0x50, 0x63, 0xCF, 0x58, 0x3B, - 0xC8, 0x1B, 0xEA, 0xA5, 0xE2, 0xF1, 0x57, 0xB3, - 0x77, 0x65, 0xA9, 0xBD, 0x23, 0xC8, 0x30, 0x86, - 0xC3, 0x5F, 0xBF, 0x16, 0x3F, 0x42, 0x28, 0x0A, - 0xC6, 0x5A, 0x57, 0x15, 0x2F, 0xA1, 0x96, 0xA9, - 0x25, 0xC5, 0x8E, 0x32, 0x11, 0x62, 0xB3, 0x54, - 0x18, 0x00, 0xA4, 0xA6, 0xD4, 0x0F, 0x68, 0x27, - 0x8F, 0x21, 0x78, 0x02, 0x37, 0x98, 0xBD, 0xCE, - 0x3F, 0xBC, 0xF2, 0x9C, 0x66, 0x8E, 0x79, 0xA1, - 0x54, 0x12, 0x55, 0x2E, 0xC0, 0x59, 0xC7, 0x18, - 0x18, 0x22, 0x4D, 0x27, 0x8B, 0x8D, 0xF3, 0x08, - 0x99, 0xE6, 0x35, 0x14, 0xB1, 0xE3, 0xB8, 0x7A, - 0x40, 0x7B, 0x68, 0x7B, 0xFF, 0xDC, 0x54, 0x41, - 0x06, 0xCA, 0x91, 0xFE, 0xDB, 0x2B, 0xDA, 0x9E, - 0xC5, 0x20, 0xD8, 0xBF, 0x42, 0xBC, 0xE6, 0x39, - 0xC4, 0x26, 0x9E, 0xF3, 0x82, 0xD9, 0xF1, 0xA0, - 0x04, 0xAF, 0xFB, 0x77, 0x13, 0x36, 0xAF, 0xD7, - 0x91, 0x9B, 0x3A, 0x57, 0x98, 0xFE, 0xAD, 0xCD, - 0x46, 0xF8, 0xF8, 0xF1, 0x87, 0x53, 0xBD, 0x57, - 0x3F, 0x99, 0xBC, 0xA6, 0xBD, 0x9B, 0x6E, 0xF4, - 0x17, 0x7A, 0x78, 0x30, 0x70, 0xA3, 0x43, 0xFF, - 0x92, 0xCD, 0x99, 0x73, 0xAE, 0x65, 0x6A, 0x10, - 0xFF, 0x70, 0x47, 0x0F, 0x16, 0x4C, 0x4A, 0x90, - 0xF4, 0x52, 0x05, 0x79, 0x33, 0x63, 0xDE, 0x14, - 0x65, 0xAF, 0x8A, 0x5E, 0x67, 0x20, 0x03, 0x9F, - 0xE6, 0x70, 0x13, 0x6B, 0xE0, 0xF3, 0x6A, 0x4C, - 0x6B, 0x5B, 0xCB, 0xE1, 0x7C, 0x5D, 0x7D, 0xE3, - 0x23, 0xFD, 0xB8, 0x6A, 0xDA, 0x56, 0x1E, 0xA8, - 0x36, 0xC4, 0x29, 0x2D, 0x70, 0x41, 0x03, 0x18, - 0x31, 0x40, 0x79, 0x2E, 0xC8, 0x22, 0x98, 0x5E, - 0x11, 0xED, 0xA6, 0xDD, 0xB9, 0xAF, 0x8C, 0x27, - 0x5C, 0x1B, 0x2E, 0xEA, 0xB8, 0xC6, 0x2F, 0xA0, - 0x40, 0xB2, 0x64, 0x61, 0xFC, 0x0A, 0x3A, 0x10, - 0x88, 0xC2, 0x58, 0xEC, 0xA5, 0x8D, 0x14, 0xE9, - 0x9D, 0x21, 0xAF, 0x64, 0xD6, 0xC2, 0x5D, 0xAA, - 0x0B, 0x8A, 0x57, 0x0F, 0x84, 0x3E, 0x60, 0x8D, - 0xED, 0x05, 0x1D, 0x98, 0xED, 0xAE, 0x11, 0xD9, - 0x27, 0x03, 0x55, 0xED, 0xF5, 0x34, 0x92, 0x52, - 0xF2, 0x6F, 0x30, 0x3E, 0x69, 0xA5, 0x54, 0xA7, - 0x2E, 0x1B, 0x85, 0xAB, 0xA2, 0x3B, 0xEC, 0xC8, - 0x9D, 0xA9, 0xA3, 0xE4, 0xEF, 0x58, 0xB5, 0x33, - 0x88, 0x55, 0x16, 0x5E, 0x7D, 0x7E, 0x69, 0xFC, - 0xCA, 0xBD, 0x9C, 0x65, 0xFA, 0x0B, 0xBD, 0x7B, - 0x16, 0xC4, 0xE2, 0x9C, 0xB4, 0xF1, 0x6A, 0x25, - 0x70, 0x30, 0x32, 0xED, 0xEA, 0xD3, 0x1D, 0xDB, - 0x6F, 0x29, 0x2E, 0x42, 0x14, 0xBE, 0x03, 0x29, - 0x0A, 0x8A, 0x98, 0x9A, 0xD7, 0xB7, 0x0C, 0xF8, - 0xB9, 0xCF, 0x37, 0xC6, 0xAC, 0xAC, 0x6D, 0xCC, - 0x03, 0x23, 0x9F, 0x66, 0x85, 0x4B, 0x70, 0x45 + 0x69, 0x24, 0xBB, 0x42, 0x57, 0xA7, 0xB9, 0xAF, + 0xF0, 0x95, 0xC3, 0x0B, 0xB3, 0x5C, 0x6A, 0xE4, + 0x19, 0x82, 0x63, 0x12, 0x0F, 0x80, 0x39, 0xAA, + 0x4E, 0x78, 0xE1, 0x74, 0xA7, 0x86, 0xCE, 0x00, + 0x3B, 0x9A, 0xC2, 0xC1, 0x42, 0x2A, 0x1A, 0xE8, + 0x02, 0xDD, 0xD7, 0x46, 0x4D, 0x3F, 0x32, 0x72, + 0x9A, 0x3C, 0x7D, 0xE8, 0x94, 0xD5, 0x06, 0xAC, + 0xAD, 0x25, 0xCE, 0xB3, 0x72, 0xEA, 0x31, 0x49, + 0xC9, 0x87, 0x80, 0xDC, 0xD1, 0x31, 0x4B, 0xAA, + 0x29, 0xB9, 0xB8, 0x07, 0x75, 0x4C, 0x47, 0xDE, + 0x5D, 0xCA, 0x95, 0x40, 0x64, 0xF2, 0x85, 0x28, + 0xB8, 0x15, 0xFE, 0x27, 0xB7, 0x9A, 0xC5, 0x06, + 0xB3, 0xAD, 0x76, 0x29, 0xD2, 0xC9, 0x71, 0xAB, + 0x8F, 0x28, 0x2E, 0x0C, 0x6E, 0x7E, 0x55, 0x48, + 0xEE, 0x0E, 0x11, 0x32, 0x42, 0xB7, 0xA0, 0xE0, + 0x64, 0xA6, 0xDB, 0xCE, 0x30, 0xC5, 0x61, 0x9B, + 0x19, 0x80, 0x08, 0x89, 0xA0, 0x44, 0x04, 0xB5, + 0x00, 0x13, 0xC0, 0x88, 0xC1, 0x30, 0x29, 0x62, + 0x12, 0x4C, 0xD3, 0xB4, 0x91, 0x0A, 0x35, 0x2C, + 0x43, 0x12, 0x31, 0x19, 0x99, 0x65, 0x22, 0x18, + 0x52, 0x02, 0xC3, 0x85, 0x23, 0x44, 0x0D, 0x90, + 0x24, 0x4A, 0x1A, 0x30, 0x22, 0x44, 0x28, 0x61, + 0x81, 0x06, 0x29, 0x18, 0x97, 0x68, 0x0A, 0x20, + 0x09, 0x08, 0x32, 0x6A, 0x44, 0xA4, 0x4C, 0x44, + 0x90, 0x21, 0x8A, 0x16, 0x68, 0x9A, 0xA8, 0x51, + 0x1A, 0xA5, 0x2C, 0x62, 0x46, 0x8D, 0x04, 0xC3, + 0x40, 0xD3, 0x86, 0x28, 0x60, 0xA4, 0x60, 0x13, + 0x18, 0x70, 0x84, 0x94, 0x8C, 0x63, 0xC0, 0x44, + 0x04, 0xA9, 0x28, 0x20, 0x08, 0x20, 0x43, 0x16, + 0x2A, 0x23, 0x29, 0x2D, 0x1A, 0xB1, 0x29, 0x48, + 0xB6, 0x09, 0x21, 0x88, 0x31, 0x00, 0xC5, 0x30, + 0x00, 0xC4, 0x8C, 0xD9, 0x82, 0x68, 0xE1, 0x30, + 0x4C, 0x63, 0x32, 0x45, 0x0C, 0x32, 0x86, 0x18, + 0x08, 0x31, 0x91, 0x98, 0x0D, 0x10, 0xB8, 0x70, + 0x9B, 0x30, 0x22, 0x64, 0x04, 0x08, 0x93, 0xA4, + 0x8C, 0x21, 0xC9, 0x70, 0x0C, 0x35, 0x71, 0x5B, + 0x00, 0x0D, 0x14, 0x31, 0x22, 0xCC, 0x98, 0x10, + 0x21, 0x04, 0x80, 0x9B, 0x28, 0x64, 0x1C, 0x30, + 0x80, 0x21, 0x30, 0x71, 0x18, 0x33, 0x50, 0x24, + 0x25, 0x44, 0x08, 0x17, 0x8C, 0xC0, 0x08, 0x48, + 0x84, 0x44, 0x90, 0x48, 0x98, 0x30, 0xCA, 0x44, + 0x00, 0x09, 0x19, 0x51, 0x19, 0x23, 0x0C, 0x52, + 0x20, 0x0E, 0x49, 0x06, 0x32, 0x1C, 0x15, 0x4E, + 0x19, 0x48, 0x85, 0x13, 0x25, 0x49, 0xA3, 0x00, + 0x04, 0x08, 0x15, 0x6D, 0x20, 0x41, 0x0C, 0xDA, + 0x42, 0x52, 0xC1, 0x34, 0x8C, 0x00, 0x31, 0x69, + 0x43, 0x82, 0x24, 0x64, 0x94, 0x6D, 0x1C, 0x81, + 0x11, 0x01, 0x96, 0x21, 0x4B, 0x02, 0x00, 0xCA, + 0x28, 0x84, 0xCC, 0x46, 0x64, 0x51, 0x18, 0x6A, + 0x18, 0x10, 0x00, 0xA4, 0x98, 0x21, 0x60, 0xB0, + 0x68, 0x03, 0x94, 0x6C, 0x94, 0x48, 0x51, 0x80, + 0x40, 0x46, 0x92, 0x22, 0x2C, 0x23, 0x44, 0x69, + 0x98, 0x26, 0x4D, 0x1C, 0x01, 0x08, 0x52, 0x02, + 0x20, 0x8A, 0xA6, 0x08, 0x0A, 0x31, 0x61, 0x93, + 0x40, 0x0E, 0x9C, 0xC8, 0x11, 0x81, 0x32, 0x2E, + 0x21, 0x15, 0x84, 0x84, 0xC2, 0x41, 0x00, 0x22, + 0x72, 0x54, 0x22, 0x62, 0x58, 0x06, 0x92, 0x48, + 0x48, 0x44, 0x11, 0x27, 0x04, 0x04, 0xC0, 0x11, + 0x92, 0x82, 0x45, 0xA1, 0xC6, 0x8C, 0xE3, 0x32, + 0x66, 0xC1, 0x38, 0x72, 0x5A, 0x86, 0x01, 0x0C, + 0xC9, 0x90, 0x84, 0x34, 0x08, 0x58, 0xA8, 0x60, + 0x80, 0xC0, 0x70, 0xD0, 0x26, 0x62, 0x9B, 0x30, + 0x2A, 0x04, 0x29, 0x69, 0x04, 0x10, 0x8D, 0x0B, + 0xB9, 0x04, 0x50, 0x46, 0x28, 0x50, 0x48, 0x24, + 0xD0, 0x48, 0x05, 0xA2, 0x48, 0x02, 0xC3, 0x20, + 0x8C, 0xA0, 0x14, 0x00, 0x41, 0x38, 0x21, 0x4B, + 0x24, 0x01, 0x04, 0xB5, 0x49, 0x42, 0x00, 0x00, + 0x0C, 0x24, 0x28, 0x12, 0x40, 0x84, 0xA2, 0x20, + 0x44, 0x9B, 0x06, 0x90, 0x63, 0xC0, 0x88, 0x8C, + 0x14, 0x21, 0x49, 0x12, 0x10, 0x54, 0x16, 0x24, + 0x20, 0x87, 0x44, 0x50, 0x10, 0x85, 0x0C, 0xB5, + 0x64, 0xDB, 0x24, 0x41, 0xD0, 0x42, 0x29, 0x9A, + 0x16, 0x8A, 0x21, 0xB4, 0x4C, 0x13, 0xB7, 0x70, + 0x10, 0xC0, 0x85, 0x19, 0x02, 0x69, 0xCC, 0x40, + 0x61, 0x1C, 0x48, 0x46, 0x98, 0x06, 0x25, 0x60, + 0x14, 0x46, 0xE4, 0x22, 0x62, 0x24, 0x27, 0x22, + 0x62, 0x24, 0x29, 0x44, 0xC6, 0x2D, 0x08, 0x31, + 0x84, 0x20, 0x32, 0x21, 0x04, 0xB4, 0x61, 0x0A, + 0x38, 0x12, 0xD9, 0x28, 0x44, 0xA4, 0x08, 0x20, + 0xCC, 0xA8, 0x29, 0x0B, 0x21, 0x31, 0x0A, 0x34, + 0x29, 0x03, 0x21, 0x40, 0xC1, 0xA2, 0x6C, 0x8A, + 0x16, 0x12, 0x52, 0xA6, 0x64, 0xA3, 0xB2, 0x51, + 0x04, 0x29, 0x51, 0xC4, 0x04, 0x91, 0x63, 0xB0, + 0x2D, 0x14, 0x44, 0x30, 0x8C, 0x40, 0x66, 0x0C, + 0x40, 0x0C, 0x01, 0xA5, 0x2C, 0x09, 0x94, 0x2D, + 0x62, 0xC6, 0x11, 0x03, 0x98, 0x50, 0x19, 0x10, + 0x4D, 0x19, 0xA8, 0x28, 0xD3, 0x86, 0x40, 0xC0, + 0x30, 0x65, 0x54, 0xA6, 0x71, 0xE0, 0xB4, 0x85, + 0x9B, 0x86, 0x10, 0x04, 0x36, 0x69, 0xD0, 0x46, + 0x29, 0x18, 0xA3, 0x71, 0x40, 0x22, 0x49, 0x00, + 0x43, 0x85, 0xCB, 0x40, 0x28, 0x89, 0x36, 0x66, + 0x41, 0x22, 0x69, 0xA4, 0x28, 0x51, 0xD9, 0x80, + 0x29, 0x14, 0x07, 0x21, 0xDA, 0x80, 0x91, 0x1B, + 0x26, 0x50, 0x5B, 0xA0, 0x60, 0x99, 0x42, 0x71, + 0x50, 0x88, 0x49, 0x10, 0x23, 0x09, 0x5A, 0x90, + 0x21, 0x22, 0x27, 0x8E, 0x43, 0xB2, 0x70, 0x0C, + 0xC9, 0x4C, 0xA4, 0x02, 0x70, 0x92, 0x40, 0x10, + 0x0A, 0x39, 0x70, 0x02, 0x36, 0x0E, 0x11, 0x30, + 0x41, 0xD8, 0x40, 0x2D, 0x1B, 0x24, 0x6D, 0xC3, + 0x92, 0x61, 0x4C, 0x86, 0x8D, 0x21, 0xB8, 0x00, + 0xD3, 0x24, 0x22, 0x12, 0xC8, 0x21, 0x12, 0x99, + 0x85, 0x09, 0x16, 0x0C, 0x5A, 0xA2, 0x24, 0x09, + 0x34, 0x42, 0x10, 0xA2, 0x24, 0x03, 0x42, 0x8C, + 0xC0, 0xB2, 0x8D, 0x12, 0xB6, 0x69, 0x63, 0x34, + 0x0D, 0xCC, 0xB0, 0x65, 0xA1, 0x12, 0x11, 0x4A, + 0x38, 0x69, 0xCC, 0x14, 0x81, 0x58, 0x44, 0x09, + 0x54, 0xA6, 0x80, 0x0C, 0xA8, 0x05, 0xC4, 0x38, + 0x8A, 0x84, 0x06, 0x01, 0x9B, 0x32, 0x2D, 0x83, + 0x12, 0x90, 0x09, 0x02, 0x60, 0xA1, 0x28, 0x88, + 0x58, 0x10, 0x41, 0x24, 0x40, 0x02, 0x19, 0x34, + 0x48, 0x18, 0xA0, 0x4D, 0x00, 0x10, 0x62, 0x13, + 0x22, 0x50, 0xE3, 0x38, 0x21, 0x9A, 0x96, 0x21, + 0x53, 0x08, 0x80, 0x51, 0x26, 0x01, 0x99, 0xC4, + 0x28, 0x1B, 0xB9, 0x71, 0x04, 0x97, 0x84, 0x04, + 0x05, 0x2C, 0xA0, 0xC2, 0x10, 0xD3, 0x42, 0x81, + 0x81, 0x42, 0x4D, 0x61, 0x84, 0x6C, 0x5A, 0x30, + 0x49, 0x1B, 0xC2, 0x24, 0xC0, 0x20, 0x28, 0xCA, + 0x92, 0x2D, 0x4A, 0x90, 0x10, 0x04, 0x27, 0x86, + 0x4C, 0x96, 0x21, 0x09, 0x19, 0x45, 0x14, 0x82, + 0x2C, 0x11, 0xA6, 0x91, 0x13, 0xB8, 0x04, 0x03, + 0x18, 0x70, 0x01, 0xA2, 0x51, 0x52, 0x14, 0x49, + 0x5A, 0x02, 0x30, 0xCB, 0x30, 0x2C, 0x94, 0x10, + 0x2C, 0x00, 0x49, 0x86, 0x09, 0xA0, 0x25, 0xC2, + 0x12, 0x4C, 0x1B, 0x02, 0x69, 0x40, 0xA4, 0x44, + 0x41, 0x16, 0x62, 0x02, 0x25, 0x28, 0xDC, 0xA2, + 0x2D, 0x00, 0x16, 0x42, 0x58, 0x30, 0x66, 0x5B, + 0x86, 0x24, 0xD4, 0x24, 0x48, 0xDB, 0x26, 0x0C, + 0x4C, 0x08, 0x85, 0x01, 0x90, 0x49, 0x21, 0x24, + 0x41, 0x54, 0x06, 0x84, 0x02, 0x43, 0x4A, 0x24, + 0x42, 0x05, 0x40, 0x14, 0x48, 0xCA, 0x44, 0x84, + 0xC0, 0x42, 0x0C, 0x98, 0x26, 0x04, 0x9C, 0xA2, + 0x05, 0xD1, 0xC2, 0x51, 0x13, 0x01, 0x86, 0x1C, + 0xA1, 0x50, 0xD9, 0x02, 0x50, 0x0C, 0x39, 0x86, + 0x8C, 0x00, 0x31, 0x22, 0x05, 0x48, 0xD3, 0x10, + 0x81, 0x12, 0x48, 0x05, 0xD1, 0x08, 0x69, 0x62, + 0x38, 0x2C, 0x0A, 0x23, 0x70, 0x9B, 0x44, 0x72, + 0xE3, 0x48, 0x6E, 0x22, 0x96, 0x70, 0x14, 0x33, + 0x6C, 0xD8, 0x90, 0x29, 0x03, 0x00, 0x49, 0x63, + 0x20, 0x8A, 0x03, 0x91, 0x25, 0x08, 0x89, 0x21, + 0xC0, 0x82, 0x0C, 0x99, 0x40, 0x32, 0xC2, 0x34, + 0x4E, 0x4B, 0x98, 0x69, 0x09, 0x80, 0x44, 0xE4, + 0x04, 0x69, 0x94, 0x20, 0x09, 0x99, 0x24, 0x6D, + 0x09, 0xA9, 0x60, 0x01, 0x29, 0x2D, 0xC8, 0x42, + 0x28, 0x8A, 0x34, 0x02, 0xE4, 0x08, 0x70, 0x0C, + 0x23, 0x6E, 0x0A, 0x05, 0x49, 0x64, 0x44, 0x2A, + 0x82, 0xC8, 0x00, 0x02, 0x48, 0x31, 0xCB, 0x90, + 0x50, 0x1C, 0x05, 0x68, 0x12, 0x12, 0x2C, 0xD0, + 0x80, 0x0C, 0x59, 0x48, 0x61, 0xCB, 0xA6, 0x09, + 0x9C, 0xC0, 0x81, 0x42, 0xB8, 0x00, 0x24, 0x41, + 0x8A, 0x94, 0x20, 0x40, 0x42, 0x14, 0x4D, 0x19, + 0x46, 0x62, 0x18, 0x05, 0x09, 0x24, 0x33, 0x6A, + 0xD4, 0x00, 0x61, 0x12, 0x48, 0x32, 0x8A, 0x04, + 0x72, 0x93, 0xB4, 0x69, 0x62, 0xC2, 0x71, 0x41, + 0xA6, 0x89, 0x44, 0x96, 0x31, 0x62, 0x30, 0x46, + 0x83, 0x42, 0x6C, 0x00, 0x19, 0x22, 0x09, 0x46, + 0x4D, 0x8B, 0x06, 0x49, 0xE1, 0xB0, 0x70, 0x42, + 0x44, 0x31, 0xC1, 0x80, 0x65, 0x9C, 0x00, 0x24, + 0x11, 0xA8, 0x31, 0x13, 0x21, 0x2C, 0x4B, 0x46, + 0x28, 0x1B, 0x18, 0x0D, 0x88, 0x42, 0x70, 0xD1, + 0xB0, 0x0D, 0x90, 0xC8, 0x45, 0xDA, 0xC2, 0x48, + 0x59, 0x14, 0x26, 0x22, 0x44, 0x00, 0xC2, 0x94, + 0x41, 0x50, 0xC8, 0x04, 0x18, 0x00, 0x00, 0xCB, + 0xA6, 0x24, 0x19, 0x02, 0x10, 0x10, 0x89, 0x0C, + 0x18, 0x22, 0x21, 0x62, 0xA8, 0x81, 0xC8, 0x92, + 0x48, 0xD3, 0x94, 0x20, 0x82, 0x06, 0x72, 0x09, + 0xA8, 0x90, 0x0C, 0x49, 0x8A, 0x41, 0x86, 0x28, + 0x19, 0xC5, 0x80, 0x9A, 0x18, 0x4D, 0x14, 0x10, + 0x2E, 0x22, 0x12, 0x52, 0x00, 0x08, 0x12, 0x0C, + 0x33, 0x45, 0x63, 0xC6, 0x30, 0x10, 0x93, 0x4C, + 0x60, 0xC6, 0x31, 0xDC, 0x40, 0x0E, 0x98, 0x82, + 0x50, 0x60, 0x02, 0x2A, 0xD2, 0x22, 0x40, 0xE4, + 0x06, 0x2D, 0xDB, 0x32, 0x0E, 0xCA, 0x32, 0x4E, + 0xD4, 0x18, 0x24, 0x08, 0xC3, 0x28, 0x4A, 0xC2, + 0x68, 0xE2, 0x80, 0x40, 0xA1, 0xC8, 0x64, 0x51, + 0xC2, 0x65, 0xCB, 0x16, 0x60, 0x23, 0x09, 0x4C, + 0x82, 0x04, 0x68, 0xD9, 0x22, 0x2E, 0x1C, 0x49, + 0x92, 0x42, 0x24, 0x21, 0x00, 0x37, 0x0E, 0xC8, + 0x12, 0x72, 0x64, 0x08, 0x25, 0x0A, 0x20, 0x2A, + 0x58, 0x24, 0x04, 0x59, 0x16, 0x4C, 0x08, 0x17, + 0x30, 0x00, 0x46, 0x05, 0x12, 0x90, 0x40, 0x03, + 0x07, 0x21, 0x52, 0xC0, 0x64, 0x1C, 0x83, 0x6D, + 0x9C, 0x32, 0x2E, 0x11, 0x15, 0x8A, 0x10, 0x35, + 0x88, 0x5A, 0xA0, 0x8D, 0xD9, 0x80, 0x48, 0x03, + 0xB6, 0x4C, 0x01, 0x10, 0x65, 0x10, 0x86, 0x40, + 0x11, 0x01, 0x42, 0x0A, 0xC1, 0x64, 0xDB, 0x22, + 0x4D, 0x64, 0xB2, 0x51, 0x02, 0x36, 0x0D, 0x93, + 0x46, 0x31, 0x14, 0xB6, 0x68, 0x63, 0x84, 0x29, + 0xC8, 0x10, 0x24, 0x94, 0x30, 0x08, 0x19, 0x37, + 0x02, 0x14, 0x82, 0x45, 0x88, 0x28, 0x40, 0x54, + 0xA8, 0x29, 0x90, 0x14, 0x12, 0x61, 0x36, 0x12, + 0x0B, 0x09, 0x8C, 0xA4, 0x98, 0x28, 0xC2, 0x92, + 0x45, 0x4C, 0x00, 0x60, 0x63, 0xC4, 0x81, 0xC0, + 0x36, 0x25, 0xCA, 0x88, 0x2D, 0x24, 0x40, 0x30, + 0xD3, 0xA8, 0x2D, 0xC9, 0xC8, 0x25, 0xD2, 0x84, + 0x48, 0x00, 0x32, 0x92, 0x50, 0xA2, 0x71, 0xD3, + 0x44, 0x0D, 0x22, 0x34, 0x60, 0x12, 0x13, 0x12, + 0x86, 0x8C, 0x5F, 0x86, 0x20, 0x79, 0x4A, 0x05, + 0x0E, 0x20, 0xD0, 0xE1, 0x01, 0x17, 0x86, 0x24, + 0x0E, 0xA6, 0x64, 0xF2, 0xF6, 0x9B, 0xB1, 0xB7, + 0xE3, 0x0E, 0xC6, 0x6B, 0x1A, 0x4A, 0x0B, 0xE5, + 0x9B, 0x79, 0xF2, 0x19, 0x8A, 0xD9, 0x80, 0x44, + 0x83, 0xE4, 0x75, 0xE5, 0x3B, 0x3C, 0x49, 0xCB, + 0x0C, 0xE5, 0xEF, 0x92, 0x91, 0x2A, 0xF4, 0x40, + 0xF2, 0x3B, 0x99, 0x58, 0x13, 0xD1, 0x1B, 0x59, + 0xF7, 0x98, 0xE9, 0x3C, 0x9D, 0x13, 0x53, 0x98, + 0x17, 0xC7, 0xAC, 0x68, 0xCA, 0xD1, 0xAA, 0x1A, + 0xC2, 0x76, 0x56, 0xBD, 0x0C, 0x47, 0x97, 0xE9, + 0xC8, 0xEC, 0x17, 0x78, 0x4C, 0x1A, 0x32, 0x7A, + 0x9D, 0xFE, 0xAF, 0x4D, 0x61, 0x91, 0xEE, 0xCD, + 0xAF, 0xE0, 0x49, 0xB7, 0x33, 0xFE, 0x39, 0xD5, + 0xEB, 0x40, 0x00, 0x93, 0x6F, 0xEE, 0xFC, 0xF8, + 0x29, 0x28, 0xE9, 0xF9, 0x4C, 0xFD, 0x5C, 0xF4, + 0xC1, 0xE3, 0xDE, 0xB1, 0x43, 0x3A, 0x47, 0xF6, + 0xD3, 0x28, 0xB5, 0xE8, 0x3D, 0xD1, 0x56, 0xD0, + 0x18, 0x2D, 0xC6, 0x92, 0x34, 0x75, 0x91, 0xAA, + 0x6F, 0x73, 0x2C, 0xFB, 0xE9, 0x82, 0x93, 0x5F, + 0xD1, 0x84, 0x6C, 0xAC, 0xF4, 0xCB, 0x85, 0x15, + 0xC5, 0x5A, 0xB8, 0x5E, 0xE5, 0xAD, 0x44, 0xCB, + 0x09, 0xD3, 0x26, 0x9E, 0x2E, 0x6D, 0x11, 0x78, + 0x09, 0x61, 0xFD, 0x13, 0x1D, 0x5E, 0x6F, 0xBF, + 0x89, 0x84, 0x9F, 0x47, 0xF2, 0xB7, 0x1D, 0x82, + 0x83, 0xFF, 0x25, 0x38, 0x5E, 0x52, 0xB0, 0x7D, + 0xBB, 0x26, 0x6C, 0x67, 0x4C, 0xEE, 0x3D, 0x0B, + 0x5D, 0xF5, 0xA5, 0x6D, 0x8B, 0xDC, 0xDC, 0xFA, + 0xAE, 0xE6, 0xA2, 0x48, 0xE7, 0x1D, 0xB1, 0x34, + 0x5A, 0xFC, 0x59, 0x7C, 0xA8, 0x30, 0xA1, 0xA3, + 0x5B, 0x43, 0x96, 0xEF, 0x4C, 0x1A, 0xDF, 0x9E, + 0xD0, 0x1B, 0xCE, 0x9B, 0x6E, 0xB6, 0x37, 0xFA, + 0x24, 0xAA, 0x16, 0x0B, 0x90, 0x76, 0xBA, 0xE3, + 0x05, 0x59, 0xF8, 0xB2, 0x9D, 0xED, 0xB3, 0xD2, + 0x5B, 0x79, 0x06, 0x4A, 0xB0, 0xCF, 0x8B, 0x8D, + 0x70, 0xAD, 0xDD, 0xEB, 0x8B, 0x17, 0x42, 0x48, + 0xD5, 0xAE, 0xA4, 0xD1, 0x8D, 0xE4, 0x3B, 0x89, + 0x38, 0xCD, 0xD2, 0xAC, 0xBA, 0x54, 0x77, 0xBD, + 0x4A, 0xAC, 0xC3, 0xCE, 0x59, 0x5E, 0x5D, 0x26, + 0x9F, 0xE6, 0x75, 0x21, 0x0D, 0x23, 0x15, 0x2B, + 0x04, 0x71, 0x0F, 0x36, 0x84, 0x28, 0x79, 0x4A, + 0x75, 0xF4, 0x9B, 0x68, 0x3E, 0xD2, 0x0D, 0xD6, + 0x47, 0x51, 0x57, 0x77, 0x95, 0x5A, 0x8C, 0xB3, + 0x8A, 0x36, 0xAF, 0xCD, 0x2C, 0xE0, 0xAC, 0xEC, + 0x4F, 0x0D, 0xFE, 0x80, 0x77, 0x02, 0xD1, 0xEB, + 0x3B, 0xDE, 0x72, 0xE9, 0xE0, 0x85, 0xAA, 0x4E, + 0x09, 0xEB, 0x1B, 0x09, 0x47, 0x41, 0x38, 0x52, + 0xEC, 0x3C, 0x0A, 0xC5, 0x2F, 0x06, 0xCB, 0x95, + 0x9C, 0x85, 0x39, 0x4E, 0xB3, 0x74, 0x81, 0x19, + 0xED, 0xBE, 0x6C, 0x80, 0xD2, 0xD8, 0xF7, 0x92, + 0xCE, 0x0D, 0x91, 0x5E, 0x4F, 0x4B, 0x15, 0x1E, + 0xFB, 0x13, 0x5E, 0x7F, 0x4D, 0xC9, 0x7D, 0x85, + 0x81, 0x41, 0xC5, 0x7F, 0x70, 0x41, 0x7B, 0x43, + 0xA6, 0xA1, 0x26, 0x95, 0x69, 0x78, 0xD7, 0x8E, + 0xFB, 0x9F, 0x03, 0x72, 0x43, 0xB4, 0xCB, 0x41, + 0xDF, 0x96, 0x8B, 0x7E, 0xE5, 0xB5, 0x20, 0x87, + 0xF0, 0x5A, 0xA9, 0xFE, 0x48, 0x7B, 0xD1, 0x6C, + 0x03, 0x47, 0xCF, 0x13, 0x35, 0x76, 0x0B, 0xD2, + 0x39, 0x8A, 0xD5, 0x4D, 0xDA, 0x00, 0xA5, 0xAA, + 0xC4, 0x46, 0xD8, 0x0B, 0x1C, 0x79, 0x98, 0xC6, + 0x02, 0x19, 0x2A, 0xDA, 0xFC, 0xB8, 0x09, 0xD1, + 0x4E, 0xE3, 0x28, 0x64, 0x1B, 0xA3, 0xAA, 0x00, + 0xF8, 0xD2, 0x9C, 0x3A, 0x84, 0x8A, 0xCB, 0xDC, + 0x19, 0x46, 0xBC, 0x0D, 0x35, 0xE0, 0xBE, 0x0F, + 0x8F, 0x7E, 0x3D, 0xA3, 0xF6, 0x8D, 0x9F, 0xA9, + 0x76, 0x8F, 0x5C, 0xF2, 0x75, 0x53, 0x4A, 0x0E, + 0xCA, 0x9E, 0x60, 0xFC, 0xEA, 0x38, 0xF1, 0xE0, + 0x42, 0xC3, 0x16, 0x14, 0x3A, 0x76, 0x7B, 0x33, + 0xAC, 0xCA, 0xD8, 0xC8, 0xD6, 0x6C, 0x70, 0xC7, + 0x5F, 0xD1, 0xF0, 0xB2, 0x58, 0x6B, 0x65, 0x3A, + 0xD4, 0xAF, 0x54, 0xE5, 0x6E, 0xF0, 0x69, 0x33, + 0xEA, 0xD3, 0x1D, 0xE3, 0x65, 0xD1, 0x10, 0xB9, + 0xC4, 0xA2, 0xA9, 0x8B, 0xCB, 0xA1, 0x65, 0xCA, + 0xFE, 0x38, 0x6F, 0x88, 0x7C, 0x72, 0x15, 0x6E, + 0xB1, 0x4F, 0xF0, 0xDA, 0xD6, 0x65, 0x61, 0x6C, + 0xE3, 0xCE, 0x65, 0xC1, 0x90, 0x4F, 0x2C, 0x17, + 0x47, 0xB2, 0xEC, 0x2B, 0x5C, 0x9D, 0x67, 0x76, + 0xBC, 0xD7, 0x9E, 0x5A, 0xC6, 0x4B, 0x79, 0x33, + 0xBD, 0xDE, 0xDE, 0xDD, 0xBB, 0xC7, 0x25, 0xBF, + 0xDB, 0xCC, 0xDE, 0x2F, 0xB3, 0x75, 0xAE, 0x2B, + 0xE3, 0x53, 0x7B, 0xDF, 0x89, 0xBF, 0x4C, 0x25, + 0xF8, 0x3A, 0x49, 0xD6, 0xA6, 0xA8, 0xD0, 0x76, + 0x1C, 0xF3, 0x9D, 0x62, 0x0C, 0x53, 0xED, 0x83, + 0x7D, 0x19, 0x82, 0x55, 0xCF, 0x5B, 0x91, 0x0A, + 0x6D, 0xB5, 0x78, 0x77, 0xDF, 0x92, 0xD8, 0xBB, + 0x6E, 0x9C, 0x52, 0x6B, 0x8C, 0x4E, 0xC9, 0x31, + 0x00, 0xDE, 0xE0, 0x50, 0x0A, 0x21, 0x0C, 0x98, + 0x45, 0x83, 0xE1, 0x53, 0x81, 0x60, 0xED, 0xAC, + 0x2C, 0x6F, 0x86, 0x6E, 0x7F, 0x5D, 0x99, 0xD7, + 0xB1, 0xB8, 0x15, 0x82, 0xF5, 0xD0, 0xEB, 0xBF, + 0x27, 0x86, 0xE3, 0xF5, 0x56, 0x01, 0x3B, 0xA9, + 0xB6, 0xF6, 0x56, 0xEB, 0x79, 0x88, 0x38, 0xEA, + 0x05, 0x79, 0x20, 0x1A, 0x95, 0xD5, 0x6B, 0xBC, + 0x3B, 0xCD, 0xB9, 0x51, 0x1A, 0xFB, 0xD4, 0xD8, + 0x12, 0x88, 0x89, 0x6F, 0x87, 0x10, 0x8C, 0x07, + 0x7F, 0x1A, 0x81, 0xA3, 0xBD, 0x29, 0x7B, 0xB1, + 0x24, 0xA8, 0x00, 0x86, 0x89, 0x02, 0x42, 0x99, + 0x5E, 0x03, 0xCF, 0x42, 0xA0, 0xC2, 0x1E, 0x27, + 0x2A, 0x9A, 0xFA, 0x1D, 0xC1, 0x03, 0x46, 0x3D, + 0x2A, 0xB4, 0x94, 0xF7, 0xD0, 0x17, 0x68, 0x6D, + 0x31, 0x89, 0x4D, 0xD2, 0xF6, 0xEB, 0xB0, 0xC3, + 0xCB, 0x62, 0x23, 0xEC, 0x79, 0xC6, 0x5D, 0x45, + 0xC1, 0xB0, 0xD4, 0xEF, 0x19, 0x61, 0xF1, 0x6D, + 0x65, 0x3F, 0xCF, 0x25, 0x97, 0x7B, 0x65, 0x1E, + 0xC5, 0x1A, 0x13, 0xAE, 0x8D, 0x4A, 0x34, 0x72, + 0xEE, 0x71, 0x96, 0x9A, 0x7A, 0x93, 0x6F, 0x5D, + 0xBB, 0xB9, 0x39, 0x6A, 0x46, 0xD9, 0x76, 0x42, + 0x35, 0x8C, 0xAF, 0x48, 0x94, 0xC9, 0xA6, 0xDF, + 0x84, 0xA5, 0x9C, 0x59, 0x62, 0xA6, 0x99, 0x0A, + 0x76, 0xF0, 0x61, 0x48, 0x90, 0x16, 0x9F, 0x00, + 0x18, 0x70, 0xD4, 0x9C, 0xF2, 0xE7, 0x50, 0x08, + 0xCC, 0x4A, 0x5D, 0x85, 0xE7, 0x2D, 0xE2, 0xD6, + 0xCF, 0x3F, 0xA7, 0x18, 0x52, 0x25, 0x35, 0x22, + 0xFE, 0x8B, 0x0E, 0x42, 0x3C, 0xB4, 0x17, 0xA3, + 0x8E, 0xB7, 0x8C, 0x87, 0x63, 0xC3, 0x72, 0x0C, + 0x04, 0xE6, 0x7F, 0xF8, 0x89, 0x79, 0xEB, 0xA0, + 0x9E, 0x34, 0x53, 0x8B, 0xB5, 0x23, 0xB9, 0x9B, + 0x8E, 0x34, 0x16, 0x74, 0x12, 0xF7, 0x7A, 0xEA, + 0x89, 0x4D, 0x83, 0xAC, 0xF9, 0x46, 0xFC, 0x05, + 0x4D, 0x0A, 0xF4, 0x72, 0x95, 0xE5, 0x1E, 0xD8, + 0x3F, 0x74, 0x86, 0x94, 0x0A, 0x4D, 0x41, 0xC0, + 0x4A, 0xD7, 0xEB, 0xEE, 0x61, 0x0B, 0xF1, 0xD0, + 0x3F, 0xA5, 0x40, 0x71, 0xD5, 0x1A, 0x15, 0x09, + 0xE4, 0xF4, 0x91, 0x63, 0xA2, 0x50, 0x81, 0xBE, + 0x87, 0x90, 0xD0, 0x87, 0xF5, 0xF4, 0xF0, 0x5C, + 0x88, 0x55, 0x0F, 0xCA, 0x9B, 0xF9, 0x9C, 0x9B, + 0xE5, 0x95, 0x3D, 0x51, 0xDD, 0x08, 0x45, 0xC9, + 0x3E, 0x41, 0xEE, 0xEF, 0x62, 0xE0, 0x79, 0x4B, + 0x29, 0x27, 0xC4, 0xF5, 0xED, 0x9B, 0xD3, 0xE3, + 0x4E, 0xA9, 0x20, 0x0A, 0x79, 0xDD, 0xEB, 0x4B, + 0x2D, 0x8F, 0x30, 0x5F, 0xE0, 0x5F, 0x82, 0x7C, + 0x7E, 0x2E, 0xD1, 0x86, 0x34, 0x1C, 0xB5, 0xD1, + 0x15, 0x2F, 0xC8, 0x01, 0x04, 0xE0, 0xE1, 0x36, + 0x83, 0xD9, 0x41, 0x29, 0x4C, 0x77, 0x84, 0x17, + 0x16, 0x4B, 0x68, 0x4A, 0x97, 0x6E, 0x56, 0xE7, + 0x8D, 0xA4, 0xD1, 0x7C, 0x3C, 0x73, 0x22, 0x93, + 0x14, 0x87, 0x0B, 0x85, 0xC4, 0x55, 0xC2, 0x3B, + 0x83, 0x0B, 0x9A, 0x28, 0xA3, 0xD8, 0xC0, 0xB5, + 0x66, 0x42, 0x6D, 0xC1, 0x69, 0xF3, 0x26, 0xAB, + 0xCE, 0x2E, 0xFF, 0xF3, 0x9E, 0x9B, 0x19, 0x9A, + 0xE5, 0xC1, 0x29, 0x2B, 0x6F, 0x2E, 0xF3, 0x7A, + 0xF1, 0xDE, 0xA9, 0x27, 0x2C, 0x8D, 0x54, 0x23, + 0xDF, 0x8A, 0x56, 0x32, 0xF9, 0x91, 0xE1, 0x4D, + 0xCA, 0x25, 0x14, 0x78, 0x8B, 0x62, 0xBE, 0x16, + 0x48, 0x28, 0xE9, 0xAC, 0xB8, 0x93, 0xDD, 0xA6, + 0x02, 0xA5, 0xE2, 0xFB, 0x9E, 0xFC, 0xBE, 0xFD, + 0x95, 0xAB, 0xFB, 0x82, 0xD2, 0xB0, 0x2D, 0x49, + 0xCC, 0x53, 0x08, 0x4A, 0x49, 0xAB, 0x1B, 0xEC, + 0x23, 0xE5, 0xB4, 0xC8, 0xE7, 0x14, 0xCB, 0x03, + 0x40, 0x5F, 0x1B, 0xCF, 0x7E, 0x11, 0xBB, 0x59, + 0x72, 0x9D, 0xDC, 0x0B, 0x7B, 0xEF, 0xB2, 0x91, + 0x27, 0x6D, 0xCE, 0xDA, 0xCA, 0xAD, 0x39, 0xA2, + 0xF0, 0x1C, 0x7D, 0xC9, 0x8B, 0x9E, 0x06, 0x5E, + 0xAF, 0xED, 0x1C, 0xC8, 0xCE, 0x3E, 0x84, 0x80, + 0x80, 0xA2, 0xFC, 0x5B, 0x98, 0xC9, 0xF6, 0xBF, + 0x50, 0x40, 0x27, 0x33, 0x42, 0xF0, 0x31, 0x2F, + 0x8B, 0x98, 0x44, 0x59, 0x4A, 0x50, 0x3D, 0xD3, + 0xE6, 0xAF, 0x1C, 0x9E, 0x35, 0xC1, 0x03, 0x2A, + 0x4A, 0x8A, 0x5E, 0x7B, 0xF3, 0x3A, 0x82, 0xF3, + 0x5E, 0x16, 0xED, 0xF8, 0xC6, 0x0C, 0x90, 0x02, + 0x1D, 0x8C, 0x0B, 0xA4, 0xC3, 0x86, 0x24, 0x5D, + 0xFE, 0xF0, 0x94, 0x48, 0x43, 0x1D, 0x8C, 0x00, + 0xD1, 0xE2, 0x6E, 0xE4, 0xD8, 0xC7, 0x7D, 0xAA, + 0x1A, 0x70, 0x5E, 0xD4, 0x79, 0x2A, 0xCB, 0x4E, + 0xA2, 0x7C, 0x15, 0x66, 0xFB, 0x56, 0x68, 0x3C, + 0x43, 0xBF, 0x67, 0x84, 0x2E, 0x67, 0x53, 0x4C, + 0xB3, 0xF9, 0x67, 0x7C, 0x8A, 0xB9, 0xD0, 0xEE, + 0xE7, 0x82, 0x7C, 0xDE, 0xFC, 0x22, 0x3A, 0xC9, + 0x48, 0xB8, 0x80, 0xB5, 0xF1, 0xCE, 0x95, 0x37, + 0x27, 0x29, 0x32, 0x00, 0x2C, 0x1A, 0x4D, 0xD2, + 0x18, 0xF5, 0x27, 0x16, 0x6E, 0xBF, 0xB2, 0xB2, + 0xFA, 0x2B, 0xF3, 0x72, 0x46, 0xEC, 0xDF, 0xDF, + 0xA7, 0x2B, 0x6D, 0xA1, 0x1C, 0x30, 0xD1, 0xC7, + 0xD2, 0x48, 0xAD, 0x64, 0x81, 0x8F, 0x69, 0x1D, + 0x59, 0xB7, 0x55, 0xDA, 0xF7, 0x1B, 0xED, 0x9A, + 0xB5, 0xFB, 0x52, 0xE0, 0x36, 0x22, 0xA9, 0x00, + 0xD6, 0x6B, 0x4C, 0x63, 0x84, 0x16, 0x9B, 0xDF, + 0x9E, 0xB6, 0x1C, 0x02, 0xDF, 0x45, 0xFB, 0x76, + 0xB1, 0xA2, 0x6F, 0x34, 0xE9, 0x38, 0xB1, 0x90, + 0x86, 0x17, 0x45, 0xC0, 0x21, 0xFA, 0x87, 0x62, + 0x00, 0xC7, 0xFC, 0x8E, 0x22, 0x2D, 0xDB, 0xFA, + 0xD8, 0xBE, 0x78, 0x1B, 0x18, 0x54, 0x24, 0xAA, + 0xAF, 0xC6, 0x58, 0x62, 0xDB, 0x13, 0x2B, 0xEC, + 0x6D, 0x18, 0x83, 0x7A, 0x1F, 0x58, 0xA8, 0x76, + 0xC9, 0x9E, 0x63, 0xF5, 0x14, 0x20, 0xB8, 0x3F, + 0x45, 0x96, 0x75, 0x61, 0x2F, 0x7A, 0xCF, 0x80, + 0xB4, 0xEB, 0x1D, 0xD0, 0x72, 0x1C, 0xAA, 0x1B, + 0x49, 0x70, 0xDA, 0x60, 0x86, 0x79, 0xC6, 0x38, + 0x3E, 0x81, 0x7F, 0xE1, 0x6B, 0x66, 0xB1, 0x91, + 0x81, 0xED, 0xFC, 0x39, 0x27, 0x0C, 0x7E, 0x91, + 0x7B, 0x1F, 0x10, 0xEB, 0x7A, 0x01, 0x19, 0x97, + 0xE9, 0x67, 0x85, 0x3B, 0x78, 0xE0, 0x0C, 0xFD, + 0x58, 0xD2, 0x24, 0xD9, 0x33, 0xCC, 0x5A, 0x99, + 0x55, 0x32, 0xDC, 0xD4, 0xE5, 0x32, 0xE4, 0x03, + 0x05, 0x15, 0xF4, 0xA0, 0x5B, 0x33, 0x1D, 0x57, + 0x5D, 0xDA, 0xC2, 0x9B, 0xAB, 0x06, 0x9F, 0x09, + 0xAF, 0x0D, 0x17, 0x33, 0x73, 0xDB, 0x1E, 0xC2, + 0xB6, 0x36, 0x6B, 0xB3, 0x71, 0x00, 0x8A, 0x23, + 0x86, 0xFD, 0x88, 0xBE, 0x77, 0xF5, 0xED, 0x5E, + 0x19, 0x8C, 0xBE, 0x88, 0xDF, 0x24, 0xBC, 0x6E, + 0x39, 0x3F, 0xEB, 0xC1, 0x0C, 0x47, 0x0A, 0x72, + 0xD4, 0x7C, 0x0F, 0x83, 0x46, 0x53, 0xC9, 0xAE, + 0x80, 0x0E, 0x89, 0x3C, 0x6B, 0xA6, 0x8E, 0xA2, + 0x8A, 0x83, 0x8F, 0xCB, 0xB6, 0x9C, 0x3E, 0x96, + 0x4A, 0x5F, 0xAF, 0xC2, 0x06, 0x7D, 0xD4, 0x06, + 0xB2, 0x57, 0xC9, 0x8D, 0xD3, 0x97, 0x9E, 0xC7, + 0xC7, 0xEC, 0xBE, 0x96, 0xA3, 0x3D, 0x85, 0x51, + 0x5D, 0xA2, 0xCB, 0x6A, 0xA5, 0xE1, 0xFF, 0xF2, + 0x04, 0xAF, 0x62, 0xDD, 0x41, 0x19, 0xA0, 0xE4, + 0x8C, 0x04, 0xA3, 0xF2, 0xB3, 0x86, 0x60, 0xF5, + 0x29, 0x64, 0xD8, 0xD4, 0xAE, 0xE1, 0x46, 0xA9, + 0xC5, 0x3C, 0x31, 0x90, 0x6D, 0xAD, 0x0F, 0xD9, + 0x0B, 0x5D, 0x83, 0xB3, 0xE3, 0x1B, 0x69, 0x0A, + 0x4C, 0x49, 0x35, 0x24, 0x99, 0x81, 0xBE, 0x1F, + 0x1A, 0x85, 0xEC, 0x6E, 0x0F, 0xEE, 0x4C, 0x88, + 0xF2, 0xD8, 0x9E, 0x29, 0x69, 0xAB, 0x8C, 0xBB, + 0xEB, 0x50, 0x19, 0x16, 0x55, 0x8D, 0x29, 0xEA, + 0x7C, 0x3E, 0xCF, 0x1C, 0x9E, 0xF1, 0xA0, 0x43, + 0x50, 0x63, 0x3B, 0x4C, 0xDA, 0x73, 0x7D, 0xFB, + 0x15, 0x1C, 0xB5, 0xE7, 0x36, 0x11, 0x73, 0xF3, + 0xAE, 0xDD, 0xDF, 0x52, 0x7D, 0x73, 0xF2, 0xF9, + 0xD5, 0xB6, 0x21, 0x3A, 0xA6, 0x8F, 0x88, 0x3E, + 0x9A, 0x26, 0x33, 0x78, 0x5E, 0xC6, 0xBE, 0x64, + 0x2A, 0x9F, 0xD0, 0xF2, 0x1A, 0x42, 0xF6, 0xB9, + 0xDA, 0xAB, 0xDC, 0xD1, 0xE6, 0xAD, 0xBE, 0xF6, + 0x48, 0x41, 0xB5, 0x96, 0x86, 0xEA, 0xE3, 0xEC, + 0x88, 0xEE, 0xF0, 0xA9, 0xCB, 0xC1, 0x2B, 0xC0, + 0x12, 0x62, 0x2D, 0xF2, 0xDD, 0x93, 0xA8, 0x62, + 0x29, 0x04, 0x4A, 0xF2, 0xF2, 0x60, 0xD2, 0x18, + 0x3F, 0x51, 0xE8, 0x33, 0xEE, 0x92, 0xD9, 0x8F, + 0x02, 0x51, 0xE3, 0xF8, 0x5F, 0xAB, 0x74, 0xCE, + 0x36, 0x7B, 0x8B, 0x7A, 0xA6, 0x3D, 0x3C, 0xF8, + 0xC8, 0xBF, 0x4D, 0x78, 0x35, 0x8B, 0xAE, 0x0A, + 0x02, 0x41, 0xE2, 0x10, 0xAC, 0x69, 0x35, 0x30, + 0x87, 0xCC, 0x73, 0x31, 0x35, 0x7E, 0xB4, 0x45, + 0x0F, 0x95, 0x09, 0xCF, 0xE5, 0x95, 0xF5, 0x40, + 0x32, 0xEE, 0x05, 0x77, 0x54, 0xA8, 0xED, 0xD7, + 0x46, 0xCB, 0x92, 0x82, 0xE7, 0x68, 0xDC, 0x6B, + 0x83, 0x0C, 0x5B, 0x4A, 0x21, 0x93, 0x43, 0xAD, + 0x12, 0x4E, 0xDB, 0x3B, 0xBC, 0x42, 0x50, 0x55, + 0x66, 0xA7, 0x03, 0x8C, 0x95, 0x9B, 0xC3, 0x55, + 0x85, 0xB6, 0x05, 0x5F, 0x19, 0x68, 0xDA, 0x24, + 0x3F, 0x77, 0x8F, 0x4E, 0x46, 0xDB, 0x46, 0x2A, + 0xBE, 0xB9, 0x3B, 0x81, 0x24, 0x3C, 0x31, 0xEB, + 0x59, 0x62, 0x2E, 0xDF, 0x81, 0xF0, 0x6C, 0xCC, + 0x61, 0xD2, 0xA6, 0xEA, 0x73, 0xE1, 0x09, 0xC3, + 0x87, 0x91, 0x5F, 0x27, 0x7B, 0xCF, 0x1F, 0xC1, + 0x11, 0x05, 0xBB, 0xA7, 0x02, 0x93, 0xC0, 0xFA, + 0xB5, 0xC0, 0x65, 0xF2, 0x3B, 0xAA, 0x19, 0x29, + 0x0A, 0x30, 0x2F, 0x08, 0x09, 0x11, 0x07, 0xA4, + 0xB1, 0xD5, 0x68, 0x85, 0x26, 0x22, 0x09, 0x83, + 0x83, 0x42, 0x77, 0x60, 0xEF, 0x8F, 0x29, 0x28, + 0x62, 0x5B, 0xDD, 0xA5, 0xF5, 0x14, 0xC5, 0xAD, + 0xE9, 0x59, 0x89, 0x1E, 0xF2, 0x95, 0x9F, 0x24, + 0x8A, 0x35, 0x32, 0xBF, 0x9D, 0x30, 0xE7, 0x14, + 0x05, 0x9E, 0xBD, 0xEC, 0x95, 0x87, 0x08, 0xF8, + 0xA8, 0x3C, 0x26, 0x8B, 0xEF, 0x26, 0x82, 0xD6, + 0x03, 0xCA, 0x88, 0x63, 0x47, 0xE1, 0x98, 0xFD, + 0x68, 0x23, 0x39, 0x99, 0xC7, 0x7D, 0x30, 0xD7, + 0x45, 0x5D, 0xE6, 0xBC, 0xFD, 0x01, 0x44, 0x27, + 0x70, 0x62, 0xB3, 0x04, 0xBE, 0xF0, 0xE3, 0x4C, + 0x5A, 0x9D, 0x8D, 0x78, 0x0D, 0x29, 0xEC, 0x23, + 0x21, 0xE0, 0x73, 0x40, 0x77, 0x1C, 0x46, 0x36, + 0x04, 0x83, 0xAD, 0xCA, 0xF1, 0x2D, 0x5B, 0x79, + 0xFD, 0xBF, 0xE2, 0x85, 0x6A, 0xCE, 0x88, 0x59, + 0xF6, 0xB1, 0x24, 0x14, 0xB3, 0xF7, 0xE8, 0xBB, + 0x58, 0x13, 0x49, 0x89, 0x60, 0xF3, 0x4F, 0xDC, + 0x64, 0xFC, 0x84, 0x85, 0x79, 0xCA, 0xF9, 0xDC, + 0xCF, 0x19, 0xB4, 0xFB, 0x82, 0x5E, 0xD5, 0x71, + 0x6D, 0xCC, 0xCD, 0x68, 0x72, 0xCB, 0xDE, 0x38, + 0x31, 0xD6, 0x73, 0x84, 0x94, 0x2C, 0xD8, 0xA9, + 0xEC, 0x4B, 0xBF, 0xEF, 0x57, 0x06, 0xB8, 0xF9, + 0xF0, 0x5F, 0xE1, 0xE8, 0xFE, 0x69, 0xD3, 0xEA, + 0x6A, 0x86, 0x21, 0xC2, 0x21, 0x44, 0x17, 0x7B, + 0x1C, 0x12, 0x59, 0xE1, 0xA7, 0x9D, 0xFD, 0xF8, + 0x97, 0x28, 0x88, 0x7B, 0xEF, 0x1A, 0x70, 0x48, + 0x25, 0x56, 0x83, 0x1B, 0x67, 0x24, 0x40, 0xE1, + 0x3F, 0xE3, 0xE3, 0xFC, 0x82, 0x04, 0xA0, 0x2E, + 0xA1, 0xEF, 0xF1, 0x9D, 0x95, 0x25, 0x38, 0x87, + 0x28, 0x5B, 0xFB, 0xEA, 0x16, 0xA0, 0xF2, 0x19, + 0xEF, 0xBC, 0xEC, 0x30, 0xA8, 0xAE, 0x86, 0x58, + 0x9A, 0x57, 0x03, 0x10, 0x3A, 0x8A, 0x39, 0x3F, + 0xA6, 0xF6, 0xB6, 0x57, 0x70, 0x4A, 0xC6, 0x77, + 0xC1, 0x4C, 0xD1, 0x0D, 0x3D, 0x62, 0xD1, 0x3F, + 0xBD, 0x37, 0x8C, 0x2D, 0xDA, 0x32, 0x5B, 0x61, + 0xB8, 0x59, 0x52, 0xD5, 0x12, 0x93, 0x87, 0x1E, + 0x1F, 0xCD, 0xC9, 0x48, 0xC7, 0x7B, 0xEA, 0xE9, + 0xA6, 0xF0, 0xE8, 0x7C, 0xE1, 0xA8, 0x05, 0x1C, + 0x8F, 0x80, 0x87, 0x68, 0x5C, 0x12, 0x62, 0x4B, + 0xDF, 0x58, 0x38, 0x0E, 0xD6, 0x6F, 0x55, 0xB4, + 0x3D, 0xDD, 0x6D, 0x36, 0x21, 0x73, 0xA5, 0xBD, + 0x38, 0x98, 0x59, 0xC1, 0x7D, 0x95, 0xEC, 0xE3, + 0xAB, 0x73, 0x26, 0x39, 0xFF, 0xE4, 0x51, 0xCD, + 0x10, 0x3E, 0xE4, 0x85, 0x4D, 0xB2, 0xF3, 0x96, + 0x14, 0xF6, 0x58, 0xBA, 0xA3, 0x84, 0xBC, 0x99, + 0x48, 0xD0, 0x71, 0x4E, 0xB4, 0x8A, 0x88, 0x71, + 0x43, 0xE7, 0xA1, 0xFA, 0x4B, 0x69, 0x0C, 0x22, + 0xB4, 0x92, 0xA7, 0x0C, 0x61, 0x2B, 0x59, 0xFF, + 0xD2, 0xD6, 0xB3, 0xB5, 0xE9, 0x9C, 0x20, 0x03, + 0xE2, 0xC3, 0x59, 0xB1, 0xE6, 0x2D, 0xCB, 0x62, + 0x0C, 0x7A, 0x24, 0x6A, 0x7B, 0x9B, 0x32, 0x46, + 0x13, 0x15, 0x56, 0xF2, 0xF3, 0xD5, 0x13, 0xA2, + 0x3C, 0x6A, 0x9F, 0xD2, 0x28, 0x0E, 0xD6, 0x86, + 0xD7, 0x67, 0xCC, 0xD0, 0x17, 0x54, 0xEB, 0x4C, + 0x99, 0x69, 0x2F, 0x2B, 0x38, 0x0C, 0x36, 0x08, + 0x13, 0x44, 0xC1, 0xD3, 0x5E, 0xE1, 0x94, 0x97, + 0x36, 0xB6, 0x97, 0x6F, 0x48, 0x52, 0xCF, 0xBE, + 0x64, 0xFA, 0xBC, 0xF1, 0x1B, 0x9A, 0xFB, 0x82, + 0x85, 0x76, 0xB4, 0xF9, 0x78, 0x7A, 0xA7, 0xD0, + 0x3E, 0x84, 0x59, 0x8A, 0x71, 0x43, 0xEF, 0x73, + 0x11, 0xFA, 0xF2, 0x97, 0x0E, 0x23, 0xED, 0x4C, + 0x17, 0x3F, 0x98, 0x5D, 0x64, 0x50, 0x16, 0x5A, + 0xE3, 0xE2, 0x41, 0xA1, 0x82, 0x34, 0xE7, 0x4F, + 0xF3, 0xDD, 0xB9, 0x21, 0xA5, 0x30, 0x0B, 0x1C, + 0x4F, 0xB6, 0xE4, 0x32, 0xE6, 0x98, 0xF5, 0x3F, + 0x66, 0xE3, 0x8C, 0x07, 0xBC, 0xD6, 0xE7, 0x76, + 0x05, 0xDF, 0x46, 0x24, 0xD5, 0x79, 0x07, 0x62, + 0x92, 0xDE, 0x1C, 0xE6, 0xFC, 0x6F, 0x00, 0x81, + 0xA3, 0x8B, 0xD9, 0x2D, 0x39, 0xB2, 0x4B, 0x73, + 0xBA, 0xC1, 0xC5, 0x2B, 0xD6, 0x8E, 0x91, 0x81, + 0xD3, 0xDC, 0xD0, 0xAC, 0x75, 0x34, 0xDB, 0x48, + 0x90, 0x1E, 0x59, 0x84, 0xF9, 0x90, 0x25, 0x57, + 0xBF, 0xA2, 0x31, 0xB2, 0xEA, 0x28, 0xC3, 0x18, + 0x32, 0x62, 0xA1, 0xB2, 0x22, 0x1F, 0x74, 0x26, + 0xEA, 0x88, 0xA5, 0x81, 0x60, 0x93, 0xA5, 0xCA, + 0xE2, 0xCD, 0x5D, 0x59, 0xA9, 0x39, 0x0F, 0xC9, + 0x3A, 0x29, 0x56, 0x94, 0x4B, 0x06, 0x4C, 0xF0, + 0x13, 0xBC, 0xDB, 0x67, 0xFB, 0x42, 0x3D, 0x13, + 0x28, 0xD2, 0xC6, 0xD7, 0xBA, 0x32, 0x90, 0x13, + 0xFA, 0x2D, 0x30, 0xEF, 0xD6, 0x9F, 0xDC, 0xA1, + 0xA9, 0x5E, 0xA6, 0xD0, 0x6C, 0x73, 0x63, 0x53, + 0x4B, 0x2F, 0x3F, 0x7D, 0xAA, 0xFA, 0x29, 0x6E, + 0xAA, 0x09, 0xB3, 0x66, 0x8E, 0x9C, 0xF8, 0x2D, + 0x9B, 0xA9, 0x59, 0xB3, 0x2F, 0x3C, 0xAD, 0x3C, + 0x10, 0xC6, 0xEA, 0x48, 0x61, 0x15, 0x54, 0x53, + 0x9C, 0x37, 0xDF, 0x6B, 0xCA, 0x33, 0x85, 0xEA, + 0xD3, 0xFC, 0xFF, 0x96, 0xD3, 0x72, 0xB4, 0x23, + 0x93, 0xB7, 0x3C, 0x8D, 0xAA, 0xAA, 0x31, 0x50, + 0x6E, 0xE0, 0x52, 0x7B, 0x7F, 0xB3, 0xE5, 0x93, + 0xDC, 0xCC, 0xA5, 0x7C, 0x8F, 0xBB, 0xD4, 0xA3, + 0xC7, 0xF8, 0xA5, 0x38, 0x99, 0x86, 0x91, 0x32, + 0xFB, 0xC3, 0xE4, 0x05, 0x06, 0x07, 0xBB, 0xFE, + 0x29, 0xC6, 0x75, 0xE3, 0x94, 0x5E, 0x74, 0xA3, + 0x1C, 0xD5, 0x31, 0xBA, 0x7A, 0xEB, 0x2E, 0x2F, + 0x0C, 0xD9, 0x90, 0xB8, 0xF9, 0x83, 0xA9, 0x0D, + 0xFE, 0xA0, 0x56, 0x8F, 0x06, 0x77, 0xEA, 0x95, + 0x63, 0xF7, 0xC4, 0x79, 0xDE, 0x96, 0x89, 0x40, + 0xCF, 0x24, 0x29, 0x92, 0x69, 0x28, 0x65, 0xCF, + 0xDA, 0x89, 0xFA, 0x07, 0x8B, 0xBE, 0xF4, 0x9C, + 0xE4, 0x57, 0x5B, 0xDF, 0xB3, 0x80, 0x36, 0x60, + 0x11, 0xC8, 0x43, 0x5F, 0x12, 0xB4, 0x2D, 0x9A, + 0xB9, 0x9A, 0xB6, 0xA3, 0x19, 0x12, 0xC4, 0x35, + 0x41, 0x49, 0xD7, 0x23, 0x10, 0x1D, 0x13, 0x65, + 0xA6, 0x5E, 0x7C, 0xC6, 0x8D, 0x82, 0xE3, 0x05, + 0x17, 0x77, 0x39, 0x02, 0xFB, 0x38, 0xDD, 0xA2, + 0xB3, 0x24, 0xE7, 0x20, 0x8E, 0x98, 0x7E, 0xD2, + 0x87, 0xD0, 0x92, 0xE7, 0x66, 0x2A, 0x43, 0x02, + 0x41, 0xBF, 0xCA, 0x55, 0x2D, 0x31, 0x41, 0x27, + 0xE3, 0x8C, 0x85, 0x97, 0xA8, 0x95, 0x19, 0xD4, + 0xF1, 0xE6, 0x2A, 0x79, 0x46, 0x5A, 0xD5, 0xF4, + 0xEA, 0xA3, 0xFA, 0x77, 0xCD, 0x98, 0x32, 0x6D, + 0x2F, 0x92, 0xCE, 0x98, 0x52, 0x05, 0x5C, 0xEC, + 0xCF, 0x62, 0xD6, 0x3C, 0xB9, 0xD7, 0xF1, 0x98, + 0xAE, 0x08, 0x5E, 0x4D, 0x45, 0xC8, 0xE4, 0x8F, + 0xCF, 0xFE, 0x59, 0x3A, 0xD6, 0x52, 0xD9, 0x15, + 0x41, 0x67, 0xBF, 0x3E, 0x61, 0x95, 0x81, 0x0A, + 0x44, 0x5A, 0xE1, 0x58, 0xF1, 0xF9, 0xA6, 0x79, + 0x33, 0x63, 0xAF, 0xC1, 0xF2, 0x2C, 0xA8, 0x82, + 0xFE, 0xED, 0x3A, 0x5F, 0x57, 0x27, 0xCA, 0x76, + 0x47, 0x7C, 0x5F, 0x23, 0xF0, 0xFC, 0x87, 0x00, + 0xCD, 0xC6, 0xA5, 0xBC, 0xB2, 0xB2, 0x0B, 0x4F, + 0x92, 0x66, 0x35, 0x1D, 0x30, 0x4A, 0x96, 0xA8, + 0x2B, 0xF5, 0xF3, 0x14, 0xAF, 0x68, 0x5C, 0x1C, + 0x70, 0x7C, 0x92, 0xE3, 0xE8, 0x47, 0xB7, 0x04, + 0x7D, 0x68, 0x9C, 0x70, 0xB2, 0x5E, 0x55, 0x01, + 0xCA, 0xEC, 0x99, 0x19, 0x62, 0x6F, 0x4A, 0x0F, + 0xC8, 0x15, 0x86, 0xAF, 0x1E, 0xC8, 0x88, 0x89, + 0xB4, 0x23, 0x38, 0x7D, 0x5D, 0x95, 0x48, 0x26, + 0x18, 0xA6, 0x50, 0xE8, 0x0B, 0x53, 0xB0, 0x7C, + 0xAC, 0xE3, 0x22, 0x89, 0x40, 0x60, 0x2E, 0x3D, + 0xB4, 0x74, 0x66, 0xCE, 0x9B, 0xCC, 0xB6, 0xE4, + 0xD8, 0xAA, 0x61, 0xC8, 0x91, 0x25, 0x83, 0xE8, + 0x10, 0xB3, 0xB2, 0xE7, 0xE9, 0xCB, 0x48, 0xBD, + 0x40, 0x3E, 0xCF, 0x08, 0xD2, 0x8C, 0x70, 0xAE, + 0x0B, 0x62, 0x08, 0x59, 0xC1, 0xF0, 0x9B, 0x61, + 0x13, 0x14, 0x04, 0xC3, 0xD5, 0xBF, 0xFC, 0xD8, + 0x60, 0xE0, 0xF4, 0x2A, 0xB2, 0x99, 0x00, 0x62, + 0x30, 0xB2, 0x87, 0x6D, 0x77, 0xDD, 0xA9, 0x1C, + 0x8C, 0x62, 0xBD, 0x93, 0xA8, 0x44, 0xE4, 0xB3, + 0x44, 0xE3, 0x25, 0x5E, 0xEA, 0x53, 0x1C, 0x6C, + 0x45, 0x8D, 0x04, 0xAB, 0xDB, 0x0F, 0xAE, 0xF2, + 0xD1, 0xC0, 0xB4, 0xC5, 0x5F, 0x57, 0x0A, 0x5A, + 0x51, 0x02, 0x3F, 0x4D, 0x4E, 0xFF, 0xF5, 0x9F, + 0x9A, 0xBE, 0x17, 0x92, 0x2F, 0xE7, 0x32, 0xCA, + 0x71, 0xBC, 0xD4, 0x34, 0xAD, 0x77, 0x10, 0xB8, + 0x4C, 0xD4, 0xAC, 0x9F, 0x25, 0x07, 0xA0, 0x68, + 0x26, 0x56, 0x2A, 0xD7, 0xF6, 0x47, 0x82, 0x6F, + 0x9D, 0xBB, 0xE4, 0xED, 0xD2, 0x3F, 0x12, 0x43, + 0x69, 0xDB, 0x85, 0x26, 0xFC, 0x2B, 0x4D, 0x52, + 0xF0, 0x74, 0x14, 0x15, 0xF9, 0x72, 0xBE, 0xF6, + 0xA9, 0x35, 0xBD, 0x81, 0x2A, 0x56, 0xC8, 0x22, + 0x1B, 0x7D, 0xEF, 0x0F, 0x51, 0x06, 0xBC, 0x01, + 0xE9, 0x13, 0xE3, 0xD4, 0x3D, 0xB8, 0x6C, 0x2B, + 0xB4, 0xC7, 0xE0, 0x76, 0x26, 0x63, 0xC6, 0xDE, + 0x78, 0x87, 0x21, 0xC2, 0xAA, 0x07, 0xF8, 0x95, + 0x48, 0x87, 0xE2, 0x14, 0x2F, 0x2E, 0x91, 0x4A, + 0x09, 0x9E, 0xFC, 0x0A, 0xEE, 0x13, 0x39, 0x21, + 0x0D, 0x3E, 0x53, 0xDA, 0x3E, 0xCF, 0x88, 0x62, + 0x4B, 0x11, 0x19, 0xBE, 0x34, 0x01, 0x0B, 0x88, + 0x6C, 0x80, 0xF5, 0x1D, 0x18, 0x50, 0x83, 0x8F, + 0x21, 0x50, 0xE7, 0x2B, 0x04, 0x2A, 0xF3, 0x28, + 0x99, 0xC0, 0xD3, 0xD7, 0xB0, 0x2A, 0x57, 0xF8, + 0xCF, 0x26, 0x3A, 0x36, 0x95, 0x62, 0xE4, 0xE9, + 0x45, 0xA3, 0x12, 0x82, 0xA5, 0x02, 0xA9, 0x5E, + 0xE9, 0xBB, 0x03, 0x16, 0xC6, 0x86, 0x10, 0x06, + 0xDA, 0xC1, 0x7F, 0x93, 0x6F, 0x54, 0xC4, 0xC7 }; #endif /* WOLFSSL_NO_ML_DSA_87 */ @@ -35764,2110 +35806,6925 @@ static int test_wc_dilithium_make_key_from_seed(void) return EXPECT_RESULT(); } +static int test_wc_dilithium_sig_kats(void) +{ + EXPECT_DECLS; +#if defined(HAVE_DILITHIUM) && defined(WOLFSSL_WC_DILITHIUM) && \ + !defined(WOLFSSL_DILITHIUM_NO_SIGN) + dilithium_key* key; +#ifndef WOLFSSL_NO_ML_DSA_44 + static const byte sk_44[] = { + 0x5D, 0xFB, 0x07, 0xA2, 0x04, 0x4B, 0x93, 0x16, + 0x75, 0xC7, 0x89, 0x43, 0xEA, 0xC3, 0xC4, 0xC5, + 0x7B, 0x07, 0x77, 0x8A, 0xD9, 0xAF, 0x2E, 0x87, + 0xC4, 0x70, 0xB9, 0xCC, 0x2C, 0x8D, 0xA1, 0xE3, + 0x75, 0xBC, 0xB3, 0xBC, 0xD1, 0x9E, 0x7B, 0xB9, + 0x83, 0xC9, 0x63, 0x66, 0xCC, 0xEA, 0x14, 0x1E, + 0xAE, 0x22, 0x07, 0x75, 0x52, 0x24, 0xC8, 0xC6, + 0xC6, 0x1F, 0x90, 0x89, 0x89, 0xCF, 0xF2, 0xF6, + 0x27, 0x98, 0xA6, 0x86, 0x45, 0x77, 0x95, 0x15, + 0xD4, 0x74, 0xDD, 0xA6, 0x1F, 0x33, 0x41, 0x42, + 0x4E, 0xDA, 0x24, 0x79, 0x60, 0x27, 0x34, 0x4E, + 0x36, 0x94, 0x14, 0x74, 0x81, 0x9A, 0x58, 0x44, + 0x2B, 0x74, 0xBF, 0x50, 0x60, 0xB8, 0x40, 0x94, + 0x4A, 0xEF, 0xDE, 0xA7, 0xA4, 0xCF, 0xFC, 0xB3, + 0x9D, 0xE2, 0x07, 0xFD, 0x9E, 0x6A, 0xC6, 0x2E, + 0x6D, 0x0D, 0xB2, 0xB4, 0x51, 0x2E, 0x20, 0x26, + 0x00, 0xB5, 0x30, 0x01, 0xA9, 0x2D, 0xE2, 0x42, + 0x02, 0x42, 0x12, 0x71, 0x24, 0xB7, 0x28, 0x94, + 0x30, 0x86, 0xDA, 0x22, 0x30, 0x00, 0x87, 0x65, + 0xCC, 0x22, 0x91, 0x1B, 0x05, 0x82, 0x03, 0x46, + 0x8A, 0xA0, 0x32, 0x26, 0x40, 0xB4, 0x84, 0xC3, + 0x14, 0x2D, 0x88, 0x14, 0x8C, 0x94, 0x92, 0x49, + 0x23, 0x15, 0x0E, 0xCA, 0x88, 0x09, 0x18, 0x94, + 0x68, 0x82, 0x38, 0x00, 0x21, 0x41, 0x28, 0x8C, + 0xB8, 0x80, 0x02, 0x09, 0x49, 0x5A, 0xB4, 0x11, + 0x9B, 0x28, 0x05, 0xE4, 0x42, 0x30, 0xCA, 0x24, + 0x80, 0xA4, 0x06, 0x2A, 0xD3, 0x92, 0x05, 0x1C, + 0x03, 0x6A, 0x22, 0x36, 0x4A, 0x92, 0x44, 0x52, + 0xE2, 0x48, 0x28, 0x19, 0x83, 0x68, 0x88, 0xC6, + 0x31, 0x41, 0x90, 0x50, 0x00, 0x43, 0x8E, 0x23, + 0x87, 0x60, 0x19, 0x43, 0x81, 0x50, 0x32, 0x69, + 0x81, 0xC0, 0x51, 0x12, 0x06, 0x08, 0x02, 0x08, + 0x82, 0xC4, 0xA6, 0x81, 0x03, 0xA5, 0x90, 0x8C, + 0xB6, 0x00, 0x90, 0x14, 0x66, 0x01, 0xB1, 0x08, + 0x12, 0x25, 0x48, 0x1A, 0x88, 0x11, 0x43, 0x38, + 0x60, 0x23, 0x26, 0x2E, 0x14, 0x45, 0x0D, 0x9C, + 0x92, 0x8C, 0xA2, 0x46, 0x12, 0x94, 0xA6, 0x05, + 0x88, 0xB0, 0x11, 0x0A, 0xB0, 0x28, 0xA4, 0x42, + 0x09, 0x9C, 0x82, 0x80, 0x1A, 0x80, 0x61, 0x59, + 0xB0, 0x8D, 0x40, 0xA6, 0x6D, 0x12, 0xC9, 0x0C, + 0xD9, 0x18, 0x68, 0xA3, 0x84, 0x2C, 0x02, 0xB6, + 0x25, 0x01, 0x40, 0x2C, 0xD8, 0x20, 0x4D, 0x1B, + 0x35, 0x30, 0x11, 0x10, 0x49, 0x63, 0x44, 0x31, + 0x8A, 0xB2, 0x70, 0x4B, 0x24, 0x28, 0xA0, 0x46, + 0x08, 0xC9, 0x06, 0x81, 0x08, 0xC5, 0x04, 0x4A, + 0xB2, 0x30, 0x08, 0x15, 0x04, 0x24, 0xA2, 0x65, + 0x9B, 0x88, 0x41, 0x19, 0x36, 0x2E, 0xE2, 0xB8, + 0x29, 0xD9, 0x12, 0x64, 0x41, 0xA6, 0x30, 0x22, + 0xB7, 0x8C, 0x93, 0x38, 0x69, 0x93, 0x30, 0x0A, + 0xC8, 0xB6, 0x85, 0x23, 0xB1, 0x8D, 0x01, 0x38, + 0x0A, 0x59, 0xA0, 0x09, 0x64, 0x12, 0x6E, 0x88, + 0x08, 0x22, 0xDB, 0x00, 0x08, 0x0C, 0x08, 0x12, + 0x99, 0x42, 0x44, 0x1B, 0x00, 0x68, 0x08, 0x13, + 0x26, 0x53, 0xA2, 0x40, 0x5A, 0x34, 0x25, 0x98, + 0x90, 0x8C, 0x00, 0x34, 0x2D, 0x93, 0x94, 0x48, + 0xC8, 0x22, 0x4C, 0xE2, 0x44, 0x29, 0xE2, 0x00, + 0x28, 0x14, 0x22, 0x40, 0x48, 0x28, 0x24, 0x22, + 0x49, 0x06, 0xCA, 0xC8, 0x0C, 0x4C, 0x12, 0x80, + 0x1B, 0xA5, 0x41, 0x11, 0x06, 0x48, 0x1B, 0x27, + 0x72, 0x20, 0x07, 0x31, 0x24, 0x10, 0x8E, 0x9C, + 0x94, 0x91, 0x1B, 0x37, 0x82, 0x51, 0x28, 0x2E, + 0x11, 0x06, 0x42, 0x01, 0x34, 0x6E, 0x8C, 0x22, + 0x25, 0x24, 0x34, 0x6A, 0x19, 0x47, 0x21, 0x23, + 0xB6, 0x09, 0x51, 0xB2, 0x31, 0x18, 0x34, 0x45, + 0x8C, 0xB8, 0x20, 0x1C, 0x19, 0x0A, 0x19, 0xB7, + 0x6D, 0x18, 0x97, 0x48, 0x09, 0x82, 0x04, 0x9C, + 0x12, 0x8A, 0x41, 0x08, 0x46, 0x24, 0x13, 0x31, + 0xD0, 0x42, 0x46, 0xC3, 0x16, 0x80, 0x51, 0x10, + 0x2E, 0x51, 0x48, 0x04, 0x5C, 0xC2, 0x64, 0x1A, + 0x10, 0x8E, 0xD9, 0x86, 0x64, 0x90, 0x24, 0x68, + 0x93, 0xB4, 0x45, 0x94, 0x30, 0x4A, 0xE3, 0x12, + 0x0C, 0x54, 0x04, 0x90, 0x03, 0x31, 0x40, 0x62, + 0x92, 0x4D, 0x5C, 0xC8, 0x10, 0x8A, 0xB8, 0x61, + 0x5C, 0x04, 0x6A, 0xC8, 0xB0, 0x85, 0x93, 0x00, + 0x05, 0xC3, 0x06, 0x69, 0x1B, 0x34, 0x8E, 0x03, + 0x84, 0x0C, 0x50, 0x00, 0x2C, 0x8C, 0x96, 0x90, + 0x08, 0x32, 0x68, 0x0B, 0x90, 0x8C, 0x02, 0x86, + 0x2D, 0x18, 0x38, 0x09, 0x1C, 0xB2, 0x21, 0x1B, + 0x48, 0x04, 0x5C, 0x10, 0x86, 0xD8, 0x34, 0x51, + 0x43, 0x84, 0x88, 0x43, 0xB2, 0x65, 0x12, 0xB6, + 0x8D, 0x03, 0x01, 0x45, 0x19, 0xB8, 0x8D, 0x92, + 0x26, 0x4E, 0x12, 0x12, 0x88, 0x52, 0xB2, 0x64, + 0x21, 0x09, 0x26, 0x49, 0x38, 0x05, 0x24, 0x11, + 0x0A, 0x22, 0x38, 0x32, 0x23, 0x31, 0x20, 0x4A, + 0x24, 0x42, 0xC4, 0xA2, 0x44, 0x20, 0x10, 0x0D, + 0xA1, 0xA8, 0x51, 0x23, 0x86, 0x84, 0x81, 0x38, + 0x8E, 0x02, 0x00, 0x4A, 0x1C, 0xB7, 0x24, 0x4C, + 0x06, 0x0A, 0x1C, 0x26, 0x4E, 0xCC, 0x22, 0x48, + 0x4C, 0x92, 0x2D, 0xC0, 0x20, 0x2D, 0xA1, 0x16, + 0x89, 0xC3, 0x44, 0x82, 0x19, 0xA7, 0x6D, 0xC4, + 0x90, 0x10, 0x01, 0x82, 0x89, 0xD8, 0x44, 0x22, + 0xD9, 0x98, 0x20, 0xC0, 0x88, 0x45, 0x88, 0x22, + 0x0C, 0x90, 0x36, 0x90, 0x90, 0xA4, 0x05, 0xD3, + 0x82, 0x21, 0xD0, 0xA6, 0x28, 0x00, 0x33, 0x25, + 0xA2, 0xC2, 0x6C, 0xD8, 0x10, 0x71, 0xD1, 0x96, + 0x50, 0xC3, 0x34, 0x08, 0x8B, 0x94, 0x2D, 0x61, + 0x88, 0x04, 0x1B, 0xC8, 0x2D, 0xE2, 0x30, 0x64, + 0x20, 0x28, 0x24, 0x1A, 0x34, 0x50, 0x10, 0x25, + 0x6A, 0x64, 0x36, 0x81, 0x09, 0xC1, 0x45, 0xE3, + 0x30, 0x80, 0xC3, 0xA6, 0x8C, 0xE0, 0xB6, 0x10, + 0xC3, 0x34, 0x8D, 0xD1, 0x06, 0x11, 0x88, 0x20, + 0x0A, 0x0A, 0xC8, 0x21, 0x20, 0x81, 0x30, 0x9C, + 0x14, 0x61, 0x9B, 0xC2, 0x50, 0x22, 0x15, 0x8D, + 0x80, 0xA0, 0x41, 0x89, 0x24, 0x41, 0x20, 0x93, + 0x40, 0x01, 0xA6, 0x09, 0x08, 0x25, 0x2E, 0xC1, + 0xC6, 0x85, 0x00, 0x17, 0x62, 0x41, 0x30, 0x32, + 0xDC, 0x06, 0x6D, 0x48, 0x88, 0x08, 0x84, 0xC8, + 0x30, 0x5B, 0x96, 0x8D, 0x42, 0xB4, 0x4C, 0xD0, + 0x34, 0x88, 0xD0, 0x04, 0x02, 0x18, 0x15, 0x52, + 0x52, 0x26, 0x30, 0x8C, 0x46, 0x28, 0x20, 0x94, + 0x4C, 0x21, 0x18, 0x00, 0xD0, 0xB2, 0x48, 0x1B, + 0x17, 0x0A, 0x09, 0x30, 0x4C, 0x44, 0xC2, 0x04, + 0x47, 0x5E, 0xF2, 0x33, 0x31, 0xFF, 0x66, 0x73, + 0xE2, 0x6E, 0x6A, 0x32, 0xF2, 0x94, 0xBE, 0xFB, + 0xD5, 0x96, 0x4F, 0xED, 0x98, 0x7A, 0x42, 0xA2, + 0x35, 0xFC, 0x5B, 0x16, 0x08, 0x61, 0x45, 0xC0, + 0xB8, 0xA8, 0x23, 0xFB, 0xC1, 0x4F, 0x1C, 0x8C, + 0xD0, 0x3F, 0xD6, 0xEE, 0xC4, 0x95, 0x28, 0x3E, + 0x03, 0x5C, 0x0D, 0xCA, 0xE5, 0x2E, 0x68, 0xF3, + 0x29, 0xDE, 0x7A, 0xDF, 0xD6, 0x4F, 0xEE, 0x0B, + 0x11, 0x6D, 0x4A, 0x14, 0xE1, 0x53, 0x94, 0xB3, + 0x1D, 0xF8, 0x8B, 0xCA, 0x10, 0xD1, 0xC9, 0x06, + 0xAA, 0x82, 0x28, 0x7C, 0x11, 0x74, 0x99, 0xE9, + 0xD8, 0xC7, 0x7D, 0x17, 0xA9, 0x5C, 0xCC, 0x14, + 0xAF, 0xF9, 0xC2, 0x05, 0xD2, 0x64, 0x80, 0xA5, + 0x70, 0xB5, 0x77, 0x0B, 0x04, 0x81, 0x99, 0xCF, + 0x3F, 0x0E, 0x1B, 0x91, 0xAB, 0x39, 0x4B, 0x1F, + 0x65, 0xD4, 0x7F, 0x92, 0x98, 0xD0, 0x96, 0xCA, + 0x25, 0xC0, 0x99, 0xBC, 0x67, 0xF4, 0x33, 0x42, + 0x63, 0xE3, 0x6B, 0xD9, 0xE6, 0x6B, 0x99, 0x8A, + 0x07, 0xDC, 0x1E, 0x18, 0x1E, 0x05, 0x38, 0x6E, + 0x96, 0x8F, 0x1C, 0xB0, 0xAB, 0x1E, 0x9A, 0x67, + 0xD5, 0xD3, 0x30, 0x11, 0x20, 0x37, 0x82, 0x24, + 0x88, 0x1F, 0x65, 0x17, 0x59, 0xEC, 0x7D, 0xBF, + 0x45, 0x78, 0x1E, 0xF8, 0xA8, 0x4D, 0xAD, 0xAF, + 0xE6, 0x13, 0xD6, 0x01, 0x69, 0x66, 0xBD, 0x88, + 0x44, 0xB6, 0xA6, 0x17, 0xAC, 0xA1, 0xEE, 0xF6, + 0x73, 0xB7, 0x74, 0xCC, 0x80, 0x7B, 0x36, 0xDD, + 0x02, 0xDD, 0x45, 0x21, 0x66, 0x86, 0x03, 0x7F, + 0x9A, 0xC0, 0xB1, 0x2F, 0x57, 0x26, 0xF2, 0x51, + 0xC5, 0x72, 0x43, 0xE2, 0xC1, 0x88, 0xF5, 0xEC, + 0xC0, 0x97, 0xE0, 0xB9, 0x89, 0xB5, 0x8A, 0x5D, + 0x80, 0x4A, 0xBF, 0xD7, 0x20, 0x25, 0x55, 0x77, + 0x66, 0x8E, 0xE3, 0x04, 0xD0, 0x1C, 0x50, 0xFE, + 0x8B, 0x6D, 0x90, 0x68, 0x53, 0xCF, 0x7A, 0x49, + 0x4F, 0xB4, 0x79, 0x91, 0xF1, 0x81, 0xB7, 0x42, + 0x0E, 0x74, 0x19, 0x9C, 0x82, 0xE7, 0x1A, 0x82, + 0x4B, 0xF8, 0xC6, 0x13, 0x1D, 0xF4, 0xD1, 0x85, + 0x6F, 0x11, 0xE7, 0x04, 0x07, 0x70, 0x72, 0x4D, + 0xE7, 0x2C, 0x81, 0x5A, 0xC0, 0x44, 0x3F, 0x2E, + 0x77, 0xEC, 0x22, 0xA1, 0x28, 0xDB, 0x18, 0xE1, + 0x18, 0x3E, 0xE7, 0x96, 0x82, 0xC4, 0x30, 0x24, + 0xC9, 0x07, 0x46, 0x6C, 0x35, 0x4B, 0x1C, 0x7B, + 0x0E, 0x0E, 0xF0, 0x9F, 0x16, 0x48, 0x7B, 0xD8, + 0xA9, 0x9C, 0x3A, 0x0A, 0x9E, 0xDB, 0xF0, 0x0F, + 0x15, 0xA5, 0xEB, 0x1C, 0x50, 0xD4, 0x27, 0x36, + 0xDB, 0x07, 0x63, 0xBD, 0x56, 0xBD, 0xFA, 0x81, + 0x09, 0x9A, 0xDE, 0xCE, 0xE8, 0x4A, 0xEA, 0x06, + 0x9C, 0x06, 0x5B, 0x67, 0x03, 0x14, 0xB9, 0xE4, + 0x8C, 0x66, 0x75, 0xA3, 0xCC, 0x69, 0x39, 0x57, + 0xDA, 0x1D, 0x21, 0xBA, 0xCE, 0xD8, 0x70, 0x02, + 0xFF, 0xF5, 0x6F, 0x25, 0x3A, 0x3D, 0xFC, 0x79, + 0xA3, 0xF0, 0x3A, 0x3F, 0x2B, 0x10, 0x51, 0x9A, + 0xCB, 0xC9, 0x1A, 0xF5, 0xF1, 0x98, 0x5B, 0x5C, + 0x87, 0x96, 0x4E, 0xC8, 0x00, 0x8A, 0x3A, 0x6E, + 0x85, 0x02, 0xA5, 0xF1, 0x69, 0x32, 0x6E, 0xC1, + 0x95, 0x68, 0xCF, 0xA8, 0xE8, 0x85, 0x55, 0x4D, + 0x6A, 0x68, 0x1F, 0x00, 0xDD, 0x26, 0xB3, 0x24, + 0xF4, 0x9D, 0xD2, 0x4D, 0x81, 0x06, 0xDA, 0xE6, + 0x4D, 0x11, 0x73, 0xDF, 0xFE, 0x4F, 0xA6, 0x22, + 0x5E, 0x6C, 0x6D, 0x5E, 0xE3, 0x59, 0xCF, 0xF4, + 0x35, 0xA0, 0x80, 0x86, 0x89, 0x49, 0xB2, 0xED, + 0x0C, 0xC7, 0x3B, 0x42, 0x06, 0x68, 0x8D, 0x90, + 0x04, 0x1A, 0xBD, 0x51, 0xF6, 0xB9, 0x29, 0x2E, + 0xB6, 0xF0, 0x79, 0x40, 0x1E, 0x6E, 0x59, 0x94, + 0xFB, 0xF5, 0x6B, 0x72, 0x82, 0x4C, 0xB6, 0xC7, + 0x2B, 0x12, 0x71, 0x77, 0xDD, 0x89, 0xCC, 0x2F, + 0x98, 0xB0, 0x93, 0x1C, 0x98, 0xCE, 0x5E, 0x89, + 0x0D, 0x95, 0x7B, 0x98, 0xE1, 0xEA, 0xDC, 0xB7, + 0xFF, 0x22, 0xC5, 0x31, 0x40, 0x9E, 0x1C, 0x80, + 0x59, 0x47, 0x01, 0x49, 0xEC, 0x81, 0xEF, 0x16, + 0x32, 0x6B, 0xB0, 0x4E, 0xE2, 0x3B, 0xA3, 0xC1, + 0x03, 0x12, 0x0D, 0xA6, 0x65, 0xDE, 0x8D, 0xB0, + 0xA0, 0xBB, 0x75, 0xEF, 0x5C, 0xDA, 0xF4, 0xEE, + 0x47, 0x6E, 0x55, 0x02, 0x38, 0xCD, 0xC1, 0xAC, + 0xDD, 0x71, 0xA6, 0x34, 0xAB, 0xCE, 0xA5, 0x5C, + 0x90, 0xFF, 0xF8, 0xE0, 0xA7, 0x87, 0xBD, 0x21, + 0x36, 0x91, 0x4F, 0x23, 0xD8, 0x75, 0x58, 0xC5, + 0xF6, 0xBA, 0xAC, 0x54, 0x6C, 0x24, 0xB1, 0x41, + 0x02, 0x02, 0xB9, 0x44, 0x31, 0x0E, 0xC4, 0xC9, + 0xC6, 0x87, 0x85, 0x36, 0x05, 0xC8, 0xAE, 0xC9, + 0xF1, 0xEF, 0x6B, 0x67, 0x52, 0xD3, 0x9A, 0x15, + 0xBF, 0xA2, 0x47, 0xEF, 0x89, 0xFC, 0x06, 0x99, + 0xA1, 0x1A, 0xE4, 0x5A, 0x75, 0xE5, 0x09, 0xD4, + 0x54, 0xE9, 0x89, 0xF2, 0x60, 0x6E, 0xAB, 0x10, + 0xF8, 0x42, 0xE4, 0xAD, 0x57, 0xC6, 0xE3, 0x65, + 0x48, 0x94, 0x14, 0x05, 0x4F, 0x62, 0x20, 0x0F, + 0x3A, 0x1E, 0xC7, 0x62, 0xDC, 0x5C, 0x8E, 0xFA, + 0x19, 0x88, 0x47, 0x5D, 0xE8, 0xC3, 0xD5, 0x8C, + 0x2B, 0x71, 0xBA, 0x11, 0x98, 0x7C, 0x0A, 0xC6, + 0x42, 0x08, 0x3B, 0xAC, 0x76, 0xFB, 0x50, 0x78, + 0x8C, 0x26, 0x8F, 0xEE, 0x7B, 0xE2, 0x59, 0x9B, + 0x34, 0x58, 0x09, 0x2A, 0x8B, 0xCB, 0x1F, 0x31, + 0x94, 0x8F, 0xE4, 0x82, 0xDF, 0x9A, 0x54, 0x5B, + 0x63, 0x85, 0x94, 0xD6, 0x7A, 0x44, 0x06, 0x91, + 0x5C, 0xCD, 0xC7, 0x55, 0x57, 0x47, 0xC0, 0x4E, + 0x72, 0xA5, 0x48, 0xAB, 0x8F, 0xEE, 0x87, 0x6B, + 0x25, 0x82, 0x61, 0x3C, 0xCA, 0xBD, 0xA9, 0x6C, + 0xF1, 0x4A, 0xAA, 0xF6, 0x71, 0x6B, 0x79, 0x0B, + 0xFE, 0x4D, 0x92, 0x32, 0xD9, 0x03, 0x70, 0xD6, + 0x0B, 0xBC, 0x18, 0x4B, 0xA3, 0x3B, 0xCF, 0x77, + 0x83, 0x16, 0xE3, 0x4B, 0x11, 0x83, 0x8D, 0x8F, + 0x71, 0xFE, 0xEA, 0xC0, 0x42, 0xF0, 0x35, 0xB0, + 0x76, 0xEA, 0xC1, 0xC2, 0x62, 0xFA, 0x9C, 0x32, + 0xBC, 0x8D, 0x69, 0xB1, 0x38, 0xB3, 0x51, 0x31, + 0x8E, 0xD1, 0xF3, 0x44, 0x95, 0x95, 0x11, 0x52, + 0x36, 0xF4, 0xCA, 0x7C, 0xBA, 0x2B, 0xA9, 0xE1, + 0x03, 0xF0, 0xF5, 0x09, 0xAB, 0x91, 0x6E, 0x48, + 0xB8, 0xAF, 0x03, 0x9B, 0xDC, 0xD5, 0x1C, 0xAB, + 0xFA, 0xCA, 0xDC, 0xEE, 0x8E, 0x49, 0x84, 0xF5, + 0x61, 0xF9, 0x7D, 0x17, 0xCB, 0xF1, 0xDE, 0x9A, + 0x7A, 0x7B, 0xDA, 0xF3, 0x26, 0xE6, 0xD8, 0xAD, + 0x90, 0xE9, 0x5B, 0xAF, 0x15, 0x45, 0xD3, 0xE2, + 0x46, 0x69, 0xD1, 0xC5, 0xF4, 0x28, 0xE0, 0x7E, + 0x2C, 0x71, 0x10, 0xFF, 0x43, 0x59, 0x80, 0x93, + 0xE6, 0xF9, 0x28, 0xA0, 0x34, 0xC6, 0x86, 0xBA, + 0xE7, 0x5A, 0x56, 0x7A, 0xE4, 0xF5, 0x20, 0xB4, + 0x4D, 0xAC, 0xB4, 0x95, 0xE5, 0xB2, 0xC6, 0x43, + 0x9E, 0x2E, 0x67, 0x8E, 0x7C, 0x05, 0x4F, 0xF7, + 0x60, 0x14, 0x88, 0xC6, 0xAE, 0x4A, 0x05, 0x36, + 0x99, 0x73, 0x55, 0x10, 0xF9, 0xDB, 0xC3, 0x4C, + 0xD7, 0x6A, 0x19, 0x94, 0xC0, 0xFE, 0x74, 0x12, + 0xC0, 0xCE, 0x95, 0x15, 0xBF, 0x60, 0x3A, 0x8E, + 0xB5, 0xFC, 0x8A, 0xBC, 0xAC, 0x9F, 0x15, 0x10, + 0x44, 0x73, 0x58, 0x60, 0x5D, 0xA1, 0x33, 0xFD, + 0xDE, 0xBD, 0xF2, 0x22, 0x69, 0xEE, 0x1D, 0x46, + 0x8E, 0x2E, 0xE8, 0x21, 0x62, 0x1D, 0x27, 0x84, + 0xC4, 0x6D, 0xA8, 0x30, 0x02, 0xA6, 0x26, 0x94, + 0xFA, 0xB1, 0xEF, 0xEC, 0x3B, 0x8D, 0x6F, 0x1B, + 0x2C, 0xCE, 0x2A, 0x4E, 0xC4, 0x28, 0x35, 0x4E, + 0x39, 0xA4, 0xF4, 0x5C, 0x96, 0x65, 0xC1, 0xB8, + 0x55, 0xA5, 0x09, 0x15, 0xBC, 0x4D, 0x3B, 0xD0, + 0x1F, 0x7F, 0xBA, 0x90, 0x20, 0xCD, 0xBD, 0xC2, + 0xC8, 0xE5, 0xC6, 0xB0, 0x6F, 0x14, 0x4E, 0x6B, + 0xEA, 0x8A, 0x24, 0x44, 0xE1, 0x0A, 0xCD, 0xB2, + 0x05, 0xF3, 0x15, 0x71, 0x7C, 0x86, 0xFC, 0xF1, + 0xFD, 0x6B, 0xA6, 0xE3, 0xFC, 0x86, 0xE3, 0xBA, + 0x56, 0x6B, 0x8F, 0xBE, 0x02, 0x9A, 0x03, 0x0C, + 0x8C, 0x69, 0xE5, 0x7C, 0x15, 0xAE, 0x13, 0x12, + 0x25, 0x2B, 0x36, 0xFB, 0x51, 0xA1, 0x61, 0x5E, + 0x37, 0x46, 0x92, 0x0C, 0x0B, 0x71, 0x5C, 0x1D, + 0xA4, 0xDB, 0x04, 0xC1, 0x08, 0xED, 0x5C, 0x44, + 0x80, 0x70, 0xC1, 0x0E, 0x63, 0x6D, 0x92, 0xC2, + 0x1E, 0x18, 0x8E, 0x71, 0x0E, 0x7C, 0x10, 0x21, + 0x1E, 0xC2, 0xCF, 0xD6, 0x38, 0x7A, 0x9B, 0x5C, + 0x9E, 0xE8, 0x82, 0x3D, 0xDD, 0x40, 0x0C, 0x96, + 0x17, 0xEF, 0xB1, 0x25, 0xBA, 0x84, 0x45, 0x4F, + 0x64, 0xA6, 0x8E, 0x2B, 0xBA, 0xF1, 0xED, 0xB3, + 0x4F, 0x92, 0x5F, 0x1A, 0x73, 0x2A, 0x2A, 0x22, + 0x68, 0x19, 0x4C, 0x8A, 0x87, 0x51, 0x75, 0x78, + 0xCF, 0x3C, 0xC5, 0x97, 0xFD, 0x77, 0x43, 0xCB, + 0xAE, 0x3D, 0x9C, 0xB6, 0x45, 0x54, 0x45, 0xF4, + 0x1B, 0x92, 0xEE, 0xF4, 0x9D, 0xC4, 0x32, 0x10, + 0x6A, 0x48, 0xAB, 0xE9, 0x47, 0xBF, 0x2B, 0x92, + 0x49, 0x84, 0x23, 0x52, 0x05, 0xA1, 0x92, 0x3B, + 0xD7, 0x78, 0x2D, 0x9A, 0x15, 0xB4, 0xD9, 0xD3, + 0x45, 0xD0, 0x69, 0xF1, 0x38, 0x4D, 0x39, 0xEA, + 0x49, 0x7E, 0xC0, 0xE7, 0x7A, 0x07, 0x88, 0x1D, + 0x1F, 0xA3, 0xAC, 0xE9, 0xC3, 0xFD, 0x6B, 0x5D, + 0xF6, 0xB2, 0xB9, 0xAA, 0x9A, 0xBE, 0xF4, 0x06, + 0xD9, 0x5E, 0x81, 0xE5, 0x68, 0xDF, 0xEA, 0x20, + 0x4C, 0xEE, 0xED, 0x42, 0xA4, 0xD3, 0x7B, 0xA8, + 0x82, 0x98, 0x0D, 0xB4, 0xC8, 0xC3, 0x43, 0x28, + 0x13, 0xE9, 0x6B, 0x11, 0x0E, 0x54, 0xE6, 0xCD, + 0x11, 0x0A, 0x01, 0x36, 0x41, 0x78, 0xC5, 0x7D, + 0x00, 0xC6, 0x8D, 0xE7, 0x7B, 0x4C, 0xE6, 0x35, + 0x57, 0x8F, 0x56, 0xA9, 0x73, 0x5A, 0xEF, 0x93, + 0xF0, 0xD8, 0x16, 0xE3, 0x44, 0x8A, 0xA0, 0xA9, + 0xF1, 0x9C, 0x2E, 0x02, 0xD1, 0x3C, 0x66, 0xDD, + 0xE5, 0x35, 0xFE, 0x81, 0x77, 0x8D, 0xC2, 0x46, + 0x64, 0x03, 0x23, 0xCC, 0x37, 0x22, 0x60, 0x68, + 0xCC, 0x7F, 0x79, 0xE8, 0x6B, 0xD0, 0xEE, 0x1C, + 0x6A, 0xC3, 0x3C, 0xEB, 0x51, 0x95, 0xFA, 0xE4, + 0x28, 0x17, 0x94, 0x49, 0x22, 0x69, 0x64, 0x98, + 0x82, 0x8B, 0x68, 0x9F, 0x69, 0x35, 0xF9, 0xBF, + 0x33, 0x22, 0xA4, 0x32, 0x0F, 0x4C, 0x26, 0xE4, + 0x8D, 0xDF, 0xAE, 0xBD, 0xF4, 0x4D, 0x01, 0xAF, + 0xA1, 0xFA, 0x3E, 0xCE, 0xD3, 0xB0, 0x5D, 0x02, + 0xDB, 0x3B, 0xB4, 0x23, 0xB8, 0x55, 0x97, 0xB5, + 0x1F, 0x25, 0x64, 0xA7, 0x5D, 0x4A, 0x8C, 0x90, + 0xD4, 0xB6, 0x85, 0x20, 0x32, 0x09, 0x37, 0x26, + 0x00, 0xD5, 0x4D, 0x98, 0x5A, 0xCF, 0x29, 0x3B, + 0x0E, 0xAF, 0x69, 0x88, 0x78, 0x18, 0xAD, 0xD1, + 0xE1, 0xB7, 0xC5, 0xD7, 0xB7, 0x5F, 0xFE, 0xB5, + 0x64, 0xE0, 0x68, 0x0B, 0x4F, 0x46, 0x7B, 0xDE, + 0x0B, 0x11, 0x7A, 0x42, 0x10, 0x86, 0x09, 0x60, + 0xB5, 0xE0, 0x22, 0x17, 0x28, 0x68, 0x7A, 0xE9, + 0xEB, 0xBC, 0x6B, 0xD5, 0x95, 0x4C, 0xE0, 0xAE, + 0x57, 0xB1, 0x45, 0xFF, 0xC2, 0x7E, 0xB6, 0xA0, + 0xD3, 0x8E, 0x46, 0x16, 0xCE, 0xBE, 0x76, 0xCE, + 0x59, 0x5B, 0xA4, 0x96, 0x1E, 0x9F, 0x80, 0xF0, + 0x06, 0x7E, 0xCD, 0x6E, 0x27, 0xB8, 0x7D, 0x26, + 0xB6, 0x60, 0xA3, 0xAB, 0x52, 0xC1, 0x37, 0x9A, + 0xDD, 0x46, 0xF5, 0xB9, 0x39, 0x75, 0xAA, 0x19, + 0xF3, 0xE4, 0xA8, 0x95, 0x4B, 0x25, 0x3F, 0x0B, + 0x44, 0x13, 0xF5, 0x82, 0x10, 0x68, 0x03, 0xD5, + 0x0F, 0x99, 0xB5, 0xB2, 0x8B, 0x85, 0x77, 0x2E, + 0x78, 0x3E, 0xEE, 0x21, 0x6E, 0xAD, 0x2D, 0xCF, + 0x95, 0x62, 0x94, 0x1C, 0x50, 0xAB, 0xC5, 0xFA, + 0x8E, 0x24, 0xB6, 0x14, 0x86, 0x46, 0x8A, 0xAA, + 0x20, 0xDF, 0x15, 0xD1, 0x72, 0xF6, 0xAC, 0x03, + 0xAF, 0xDF, 0xCD, 0x53, 0x81, 0xBA, 0xDB, 0x07, + 0x8B, 0x8E, 0xBB, 0x70, 0x91, 0x57, 0x04, 0xB9, + 0x88, 0xE5, 0x8F, 0x45, 0xD3, 0xD6, 0x31, 0x12, + 0xA5, 0xC1, 0x28, 0xC6, 0x49, 0x90, 0x0F, 0x1D, + 0x69, 0x66, 0xE3, 0x98, 0x56, 0x7D, 0xE3, 0x48, + 0xAC, 0xC0, 0xDE, 0xE4, 0x2B, 0x88, 0x01, 0x19, + 0x4E, 0x99, 0xBB, 0x1A, 0xAF, 0x02, 0x5A, 0x91, + 0xE3, 0x2C, 0xE6, 0x56, 0x4D, 0x05, 0x10, 0xB9, + 0x10, 0xF2, 0x2A, 0x27, 0xDE, 0xCF, 0x9D, 0x2E + }; + static const byte msg_44[] = { + 0xB1, 0x34, 0x49, 0x15, 0xCC, 0xD6, 0x93, 0x41, + 0x6B, 0x37, 0xFE, 0xBD, 0x8D, 0xC7, 0xC7, 0xDB, + 0x9F, 0x25, 0x3E, 0x9D, 0xF5, 0x3C, 0xEC, 0x51, + 0x49, 0x23, 0xAA, 0xA2, 0x67, 0x6F, 0xBF, 0xA4, + 0xCC, 0x04, 0xFC, 0x68, 0xF9, 0xE3, 0x2F, 0x9E, + 0x86, 0x4C, 0x68, 0x95, 0xDB, 0x37, 0xE9, 0xFF, + 0xEB, 0x80, 0xF0, 0xF6, 0xB8, 0x6C, 0xB6, 0xAD, + 0x9C, 0x42, 0xF8, 0xFC, 0x75, 0x19, 0x8D, 0xD3, + 0xCC, 0xDA, 0xF5, 0x77, 0xC7, 0xB3, 0x5B, 0x8F, + 0x1B, 0xF6, 0x0A, 0xAB, 0xEA, 0x89, 0x94, 0x42, + 0x20, 0x1F, 0xBB, 0xF4, 0x42, 0x8C, 0x7E, 0xC1, + 0x7B, 0xC3, 0x1B, 0x54, 0x72, 0x4B, 0x95, 0x90, + 0xF7, 0x53, 0x1E, 0x6F, 0x79, 0x0A, 0x1F, 0xA7, + 0x74, 0x32, 0x83, 0x37, 0x2D, 0x31, 0x71, 0xB8, + 0x96, 0x6B, 0x47, 0x0A, 0xAA, 0x85, 0x26, 0xEB, + 0x4A, 0x6E, 0x81, 0xE6, 0x5A, 0xD0, 0xC2, 0x9F, + 0x2D, 0x37, 0xDD, 0x5B, 0x41, 0x2B, 0xAE, 0x68, + 0x2A, 0x66, 0x79, 0x68, 0x77, 0xC8, 0x2F, 0xFD, + 0xA9, 0x76, 0x24, 0x34, 0xEA, 0xC2, 0xC7, 0xD4, + 0xAF, 0x60, 0x9B, 0x27, 0x72, 0x49, 0x0D, 0xEE, + 0x9B, 0xFB, 0x00, 0x5D, 0x2F, 0x1A, 0x2E, 0xBB, + 0xA0, 0x32, 0xCD, 0x71, 0x59, 0xD5, 0x4B, 0xE5, + 0x96, 0xF3, 0x30, 0x68, 0xBE, 0x5D, 0x9A, 0x2D, + 0x94, 0x0C, 0x76, 0x70, 0xE6, 0x4E, 0x9A, 0xF7, + 0xD7, 0xD3, 0x3E, 0xC3, 0xAE, 0xC6, 0xF1, 0xD9, + 0xDE, 0xE3, 0x92, 0x84, 0xF0, 0x5C, 0xE0, 0x25, + 0xD1, 0x81, 0x76, 0x0D, 0x40, 0xE5, 0xC2, 0xD9, + 0xBE, 0xAE, 0x24, 0x20, 0xF4, 0x0D, 0x9F, 0x32, + 0xB7, 0xBD, 0xCD, 0x3A, 0xFB, 0x1C, 0x66, 0x0D, + 0x01, 0x71, 0x4D, 0x81, 0x37, 0x58, 0xDB, 0xB8, + 0x2C, 0x6B, 0x7E, 0x85, 0x80, 0x52, 0xB5, 0xA5, + 0x0E, 0x39, 0xE0, 0x15, 0xD3, 0xF2, 0x4A, 0x2C, + 0x64, 0xC9, 0xDD, 0xCC, 0x15, 0x0D, 0x90, 0x4F, + 0x07, 0xF6, 0x5F, 0xF6, 0x8A, 0xD0, 0x12, 0x9E, + 0xC3, 0xF8, 0x12, 0x3F, 0x3A, 0x03, 0xFC, 0x95, + 0x8A, 0xE2, 0x47, 0x8C, 0x6C, 0x6E, 0x03, 0x61, + 0x67, 0xD8, 0x51, 0x49, 0xF7, 0x9F, 0xB0, 0x3F, + 0xAA, 0xB9, 0x89, 0x7C, 0xE7, 0x3F, 0x88, 0x55, + 0xC5, 0x4C, 0x83, 0xD7, 0x53, 0xB1, 0x04, 0xB5, + 0x13, 0xD5, 0x6B, 0xC6, 0x4C, 0x3B, 0x08, 0x91, + 0x73, 0x47, 0x35, 0x13, 0x26, 0xD8, 0xEB, 0x47, + 0xCF, 0x66, 0xF1, 0x3F, 0xB9, 0x0F, 0x6A, 0xF5, + 0xA8, 0x94, 0xC7, 0x75, 0x00, 0x77, 0xA8, 0x9C, + 0xEB, 0x77, 0x22, 0xE2, 0xE6, 0x80, 0xA5, 0x9B, + 0xF8, 0x43, 0x8C, 0x52, 0x35, 0x31, 0xEA, 0x8C, + 0xC2, 0x83, 0x4F, 0xFC, 0x4E, 0xF0, 0x2D, 0x35, + 0xB8, 0x51, 0x46, 0xF2, 0xD6, 0x01, 0xD5, 0x00, + 0x99, 0x6A, 0x44, 0x10, 0x64, 0xAD, 0xCA, 0x1F, + 0x62, 0x3F, 0x2F, 0xE7, 0x45, 0x22, 0x47, 0xEF, + 0x86, 0x9D, 0x76, 0xD5, 0x78, 0x42, 0x07, 0x30, + 0x88, 0x86, 0x90, 0xB1, 0xA0, 0x08, 0xDA, 0x28, + 0x2A, 0xD1, 0x75, 0x7D, 0x21, 0x71, 0x29, 0x38, + 0x59, 0xC7, 0x3F, 0x55, 0x20, 0xB5, 0xBB, 0x48, + 0x03, 0xE7, 0xFA, 0xB0, 0x29, 0x00, 0xD2, 0x0F, + 0xE7, 0x65, 0x81, 0x8E, 0xE6, 0x24, 0xE7, 0xA1, + 0x94, 0x50, 0x9D, 0x01, 0x6B, 0x4B, 0xD7, 0x81, + 0x4E, 0xA0, 0xD5, 0x4A, 0x51, 0xEE, 0x95, 0x0A, + 0x14, 0x76, 0xD5, 0x87, 0xAA, 0x6F, 0x78, 0xC8, + 0xD2, 0xE0, 0xC8, 0xF8, 0xF2, 0x78, 0xD8, 0x2E, + 0x11, 0x90, 0x44, 0xB6, 0xBF, 0xD0, 0xBE, 0xD8, + 0x6F, 0xA4, 0x20, 0xA2, 0xC8, 0xA4, 0xEF, 0xB0, + 0x5D, 0x73, 0x06, 0xBE, 0x52, 0xF9, 0x32, 0xD8, + 0x06, 0x5D, 0xD1, 0x29, 0x23, 0x46, 0x25, 0x6E, + 0x42, 0x9D, 0xEE, 0x41, 0x9E, 0xF3, 0x7D, 0x1B, + 0x35, 0x28, 0x81, 0xDC, 0x47, 0x7F, 0x25, 0xA4, + 0x0A, 0xEB, 0x3E, 0x17, 0xE6, 0x1B, 0xCC, 0x00, + 0xD2, 0xE2, 0xA9, 0x3D, 0xEC, 0xF3, 0x00, 0xF0, + 0x81, 0x68, 0x21, 0xED, 0x49, 0xF9, 0x9B, 0x9B, + 0x8B, 0xED, 0xD9, 0x1E, 0xFA, 0x04, 0xBB, 0xB0, + 0x9A, 0xBD, 0x1D, 0x24, 0x36, 0xA7, 0xD6, 0x64, + 0x8A, 0x38, 0x3A, 0x3A, 0x8F, 0x09, 0x08, 0x0E, + 0x46, 0x7B, 0xE1, 0x03, 0x30, 0xBF, 0x62, 0x27, + 0x10, 0x74, 0xBE, 0xBD, 0x7F, 0x56, 0x39, 0x0D, + 0x1D, 0x39, 0x47, 0xF4, 0x02, 0x47, 0x6B, 0x62, + 0x6B, 0x52, 0xAC, 0xAB, 0x21, 0xAC, 0x10, 0x4A, + 0xAB, 0x59, 0x75, 0x33, 0x11, 0xD9, 0xE9, 0xE2, + 0xB2, 0x20, 0x6B, 0xA1, 0x09, 0x42, 0xB6, 0x37, + 0xE4, 0x5C, 0xE6, 0x9F, 0x54, 0xB4, 0x67, 0xBC, + 0xAE, 0xF3, 0xDC, 0x1A, 0xA2, 0x15, 0x47, 0x7B, + 0x15, 0xC8, 0x00, 0x35, 0x8E, 0x1D, 0x69, 0x04, + 0xD8, 0x9C, 0xA9, 0x6A, 0x03, 0x1A, 0x55, 0x48, + 0x6C, 0x4F, 0xC1, 0x68, 0x27, 0x26, 0x13, 0xAB, + 0x8E, 0x03, 0x50, 0x7B, 0xDD, 0xC2, 0x7E, 0x5C, + 0x8A, 0x6F, 0xBB, 0x5F, 0x8B, 0x22, 0x86, 0xA5, + 0xC5, 0x0E, 0xC5, 0x68, 0x60, 0xF6, 0xBF, 0xFF, + 0x6E, 0xBA, 0xDC, 0x21, 0x71, 0xD2, 0xEB, 0xD1, + 0x27, 0x8C, 0x58, 0x14, 0xC3, 0x2E, 0x13, 0x9E, + 0x04, 0x09, 0x61, 0xC3, 0x19, 0xC3, 0x03, 0x48, + 0x70, 0x33, 0x3B, 0x12, 0xF7, 0x3B, 0x38, 0xE7, + 0x18, 0x14, 0xA9, 0xF1, 0x60, 0x83, 0x65, 0xEB, + 0x32, 0xD5, 0x23, 0x8F, 0x6B, 0xF7, 0xD8, 0x00, + 0x21, 0xBD, 0xA3, 0x98, 0xDE, 0xD7, 0x13, 0x17, + 0xAB, 0x3C, 0xA4, 0xD7, 0xBE, 0x1D, 0xA7, 0x4A, + 0x1B, 0xC4, 0x0C, 0x9B, 0x2E, 0x34, 0x5B, 0xA7, + 0xA2, 0x3F, 0x9B, 0x2D, 0xDB, 0xAF, 0x85, 0x14, + 0x0A, 0xF9, 0x30, 0x9E, 0x86, 0x53, 0xAC, 0x24, + 0xAF, 0xD8, 0x25, 0xBC, 0x2A, 0x07, 0x2B, 0xCD, + 0x02, 0xFE, 0x3E, 0xF0, 0x0B, 0xE3, 0xF9, 0x51, + 0x5C, 0x29, 0xEB, 0x8A, 0xFB, 0xC3, 0xEF, 0xD1, + 0xF9, 0xCF, 0xDF, 0xE9, 0xEB, 0xA9, 0x49, 0x59, + 0xB5, 0x17, 0x7E, 0x28, 0x86, 0xB8, 0xD1, 0x8D, + 0xCA, 0x97, 0xF0, 0xCB, 0x80, 0x7E, 0xE3, 0xEA, + 0xE3, 0x1B, 0x48, 0xCF, 0xAC, 0x61, 0x3C, 0x2E, + 0x00, 0xAB, 0x74, 0xFB, 0x95, 0xF6, 0x64, 0xF3, + 0xCA, 0xBF, 0x6E, 0xEF, 0xCD, 0xDD, 0x6D, 0xA5, + 0xF8, 0x98, 0xEC, 0x38, 0xF2, 0xF0, 0x7D, 0x6D, + 0xCB, 0x75, 0xE0, 0x50, 0x9D, 0x13, 0x19, 0x24, + 0x07, 0x4C, 0x05, 0xF4, 0x5D, 0xCA, 0x25, 0xB7, + 0xCF, 0xE2, 0xBC, 0xFE, 0xEC, 0xAF, 0x5F, 0xC3, + 0x6C, 0xE6, 0xE3, 0xC5, 0x85, 0x43, 0x7B, 0x06, + 0x9F, 0xD2, 0xC6, 0xBB, 0xAD, 0x33, 0xD6, 0x86, + 0xBD, 0x5B, 0x9E, 0x2C, 0xA0, 0xD9, 0x8B, 0xDC, + 0x5E, 0x71, 0x7B, 0x6D, 0xF7, 0x1D, 0x40, 0x91, + 0x30, 0x8E, 0x84, 0x73, 0x9A, 0xD6, 0x7F, 0xA6, + 0x79, 0xA6, 0xCE, 0xE9, 0xA6, 0x83, 0x28, 0x4B, + 0x4F, 0xB3, 0x1B, 0x2C, 0x40, 0x8F, 0x52, 0xF0, + 0x59, 0x7D, 0x9C, 0x04, 0xEA, 0xF4, 0xAC, 0x6D, + 0xBB, 0x6C, 0x3F, 0xD6, 0x7F, 0x25, 0x39, 0xD8, + 0x87, 0xDF, 0xBC, 0xF3, 0xCA, 0xE4, 0x59, 0xFA, + 0x76, 0x66, 0x61, 0xA4, 0x8B, 0xFC, 0xFD, 0x6F, + 0x64, 0x03, 0x99, 0xD3, 0xAF, 0x07, 0x86, 0x35, + 0x99, 0x98, 0xCE, 0xFF, 0x7E, 0x9E, 0xB1, 0xB0, + 0x57, 0xA6, 0x29, 0x3D, 0xFF, 0xB7, 0xF3, 0xF2, + 0x51, 0x4B, 0x0B, 0x70, 0x29, 0x46, 0x06, 0x8A, + 0x6B, 0xBD, 0x75, 0x30, 0xD6, 0x91, 0x7F, 0xB1, + 0x1D, 0xBB, 0xAA, 0xBE, 0xD7, 0xAA, 0x46, 0x81, + 0xD7, 0x8A, 0xEA, 0x91, 0x86, 0x69, 0x2D, 0xDA, + 0x34, 0x70, 0x65, 0x2E, 0xB8, 0xA3, 0xF1, 0x44, + 0x56, 0xA5, 0xAA, 0xC4, 0x20, 0x88, 0x3B, 0x42, + 0x37, 0xB0, 0xA7, 0x2D, 0x91, 0x27, 0x63, 0xB6, + 0x7A, 0xC4, 0x13, 0x1A, 0x8A, 0x5D, 0x2F, 0x16, + 0x82, 0x96, 0xB9, 0x12, 0xD3, 0xB6, 0x61, 0xC4, + 0xE8, 0x3C, 0xE6, 0x3A, 0x61, 0xC0, 0x45, 0xEB, + 0xA5, 0x75, 0xEE, 0xB6, 0x7F, 0xB0, 0x70, 0xED, + 0x82, 0x39, 0xE5, 0x1A, 0x67, 0xD9, 0x80, 0x3C, + 0xE0, 0x0B, 0x85, 0x66, 0x74, 0xE0, 0xB7, 0x26, + 0x66, 0x26, 0xDD, 0x02, 0x15, 0xE5, 0xEF, 0x5F, + 0xDE, 0x7B, 0xF4, 0x0B, 0x99, 0x10, 0x21, 0x08, + 0xFC, 0x2D, 0xF2, 0x8B, 0xDC, 0xC8, 0xEA, 0xC6, + 0x3E, 0xFB, 0x20, 0x50, 0x1F, 0x24, 0x66, 0x99, + 0x80, 0x88, 0xC7, 0xA0, 0xB9, 0x6D, 0x1B, 0x75, + 0xC4, 0xC2, 0xE2, 0x52, 0xA0, 0xBF, 0x38, 0x01, + 0x5C, 0xA5, 0x8A, 0xDA, 0x79, 0x38, 0xAE, 0x2E, + 0xC7, 0x96, 0x6F, 0x30, 0x5B, 0xB4, 0x21, 0xC0, + 0xCD, 0x95, 0xCA, 0xD2, 0x12, 0x7D, 0xAD, 0x87, + 0x08, 0x6C, 0xC3, 0x8B, 0xF6, 0xB1, 0x5D, 0xAD, + 0x2C, 0x7C, 0x04, 0x41, 0xE5, 0x34, 0x2E, 0x4B, + 0x5A, 0xD9, 0x1E, 0x66, 0xF4, 0x23, 0xE2, 0x88, + 0x4D, 0xD9, 0x03, 0xFE, 0x6C, 0x64, 0x7D, 0x61, + 0xE6, 0x70, 0x0E, 0xA8, 0x83, 0x08, 0x07, 0xE6, + 0xFD, 0x64, 0x54, 0x3E, 0x3C, 0x6E, 0x9A, 0xD1, + 0x93, 0x37, 0x36, 0x90, 0xDE, 0x94, 0xF7, 0x16, + 0x15, 0x47, 0x94, 0xFE, 0x97, 0x5B, 0x11, 0x80, + 0xBA, 0x40, 0xAF, 0x7F, 0x05, 0xC1, 0x82, 0x91, + 0x69, 0xFD, 0xFB, 0xEC, 0x3A, 0xF7, 0xCF, 0xE1, + 0xD7, 0x9B, 0x59, 0x7E, 0xE4, 0x38, 0xA2, 0x96, + 0xEF, 0x14, 0x6A, 0x05, 0x99, 0x71, 0xE3, 0xF9, + 0x50, 0x8E, 0x35, 0x0B, 0x50, 0x71, 0x6D, 0xEC, + 0xB5, 0x1B, 0xC8, 0x80, 0x2A, 0xE6, 0x2A, 0x7F, + 0x4C, 0x2E, 0x6F, 0x7B, 0x54, 0x62, 0x0E, 0xF0, + 0x4C, 0x00, 0xF0, 0x72, 0xAE, 0x37, 0xAC, 0x32, + 0x7E, 0x26, 0xD3, 0x65, 0x76, 0x1C, 0x10, 0x46, + 0x17, 0xAE, 0xE0, 0xF3, 0x28, 0xEE, 0x97, 0xE0, + 0x86, 0x18, 0x3D, 0x46, 0xA3, 0x62, 0x1F, 0x23, + 0xF3, 0xAC, 0x27, 0x60, 0xB8, 0x85, 0x9A, 0x96, + 0x0E, 0xF1, 0x6F, 0xC1, 0xC6, 0xB1, 0x97, 0x8A, + 0x74, 0x12, 0xDD, 0x73, 0x85, 0x02, 0x9C, 0x73, + 0x61, 0xA8, 0xF7, 0x49, 0xCE, 0xBA, 0x23, 0xED, + 0xE7, 0x9A, 0x17, 0x0E, 0xA6, 0x84, 0x59, 0xF5, + 0x21, 0x66, 0xF5, 0xC5, 0x61, 0xF8, 0x88, 0x7E, + 0x62, 0x0C, 0x00, 0xC6, 0x4F, 0x06, 0xBD, 0x0A, + 0xBB, 0xCD, 0xE5, 0x11, 0x7A, 0xBC, 0xFD, 0x03, + 0xB6, 0xD1, 0xBA, 0x4F, 0x30, 0xFA, 0x96, 0x75, + 0xD8, 0x2D, 0x7A, 0x43, 0x0D, 0x58, 0x41, 0x46, + 0xBA, 0x72, 0x06, 0xCB, 0xBD, 0xD9, 0xBE, 0xA1, + 0xEA, 0x47, 0x08, 0x3D, 0xF9, 0x32, 0x23, 0x9C, + 0xAA, 0x02, 0x1D, 0xA3, 0x3E, 0x43, 0xF1, 0x68, + 0xD8, 0xBE, 0x9F, 0x0E, 0xA8, 0xA8, 0x52, 0xC4, + 0x0A, 0xDE, 0x43, 0x9D, 0x58, 0xA8, 0x05, 0xD4, + 0x74, 0xF8, 0x93, 0x21, 0x62, 0x6E, 0x33, 0x78, + 0x3C, 0x23, 0xEB, 0x60, 0x1C, 0x4C, 0x25, 0xFE, + 0x0F, 0x5E, 0x73, 0xC3, 0xAD, 0x33, 0x9A, 0x7D, + 0x69, 0x6B, 0xAB, 0x2C, 0xAA, 0x5F, 0xBF, 0x96, + 0x62, 0x3A, 0xF0, 0x63, 0x41, 0x00, 0xC7, 0x4C, + 0x81, 0x4D, 0x42, 0x43, 0x25, 0xBC, 0x30, 0xB6, + 0x0B, 0xEE, 0xFC, 0x18, 0x3E, 0x68, 0x0E, 0x64, + 0x5C, 0xD4, 0x22, 0x2A, 0xBA, 0xB5, 0xC6, 0x7E, + 0x67, 0x11, 0x1C, 0x4C, 0x03, 0x30, 0xEC, 0x0C, + 0x77, 0xB2, 0x2B, 0xBC, 0x98, 0xF7, 0x52, 0x8C, + 0x95, 0x66, 0xE1, 0x71, 0xDD, 0x26, 0xA7, 0x7F, + 0x87, 0xF3, 0x94, 0x2E, 0x0D, 0x3E, 0xFE, 0xAD, + 0x0A, 0xDA, 0x3B, 0x77, 0x49, 0xC5, 0x1D, 0xED, + 0x5F, 0xDA, 0x3F, 0xE6, 0xE7, 0x96, 0x58, 0xF1, + 0x02, 0x30, 0x68, 0xB9, 0x62, 0xD0, 0x58, 0xA2, + 0x89, 0x65, 0x12, 0x20, 0x1E, 0x4C, 0xE7, 0xB6, + 0x98, 0x12, 0x52, 0xF0, 0xE8, 0x55, 0xBC, 0xFE, + 0x1F, 0x44, 0x42, 0x36, 0xC9, 0x30, 0xE4, 0x9A, + 0x13, 0xB3, 0x7A, 0xF4, 0xF5, 0x97, 0xC0, 0x5D, + 0xCA, 0x23, 0xCC, 0x05, 0xC4, 0x3C, 0x32, 0xA2, + 0x11, 0x08, 0x17, 0xCB, 0x30, 0x6B, 0xA4, 0x7D, + 0x24, 0x5E, 0x50, 0x22, 0x2E, 0x23, 0xC6, 0x55, + 0x6B, 0xD7, 0x5D, 0x50, 0xEE, 0xF8, 0xBE, 0xB0, + 0xDE, 0x83, 0x5C, 0x8D, 0xD2, 0xE1, 0x5C, 0x70, + 0x66, 0x70, 0x59, 0x8F, 0x86, 0x50, 0x71, 0x71, + 0x04, 0x69, 0xEC, 0xB3, 0x47, 0x9E, 0xE0, 0x26, + 0xB1, 0x9F, 0xE6, 0x21, 0xAC, 0x99, 0x12, 0x6B, + 0x97, 0x9E, 0x1B, 0xA1, 0xDD, 0xA8, 0xE6, 0x11, + 0x12, 0x97, 0xC1, 0x0E, 0x4A, 0x77, 0xF5, 0x52, + 0xF8, 0x09, 0xE9, 0x01, 0x63, 0x56, 0x4E, 0xFA, + 0x24, 0x39, 0x36, 0xB9, 0xF2, 0x6E, 0x07, 0x28, + 0x7F, 0xA4, 0x07, 0x7C, 0xA2, 0x69, 0x7B, 0xED, + 0x6A, 0x4F, 0x0A, 0x95, 0x99, 0x05, 0x60, 0xE7, + 0x58, 0xD9, 0x90, 0xB4, 0xC1, 0x92, 0x0F, 0x9E, + 0x1A, 0xBE, 0x0B, 0x58, 0x96, 0x50, 0x61, 0x1C, + 0x2D, 0x5A, 0x13, 0xAA, 0x5F, 0x4E, 0x2B, 0x88, + 0xBE, 0xAB, 0x93, 0x72, 0xF4, 0x68, 0xB8, 0x30, + 0x91, 0xCD, 0x0A, 0x53, 0x8A, 0x35, 0x82, 0x93, + 0x4F, 0x66, 0xCA, 0xCD, 0xF2, 0x39, 0x98, 0xFE, + 0xC2, 0xFE, 0xFE, 0x51, 0x35, 0xF1, 0xB5, 0x62, + 0x2D, 0x1A, 0xE9, 0x43, 0x25, 0x5E, 0x05, 0xE4, + 0x8B, 0xFE, 0x91, 0x2F, 0x4F, 0x24, 0x1B, 0x2B, + 0xAC, 0x49, 0x9C, 0x14, 0xB0, 0x58, 0xA3, 0xA8, + 0xEE, 0xB9, 0xD1, 0xFA, 0x4D, 0x44, 0x2E, 0x23, + 0xFC, 0x59, 0x77, 0xA5, 0x60, 0x2E, 0xDC, 0xEB, + 0x7B, 0x7B, 0x26, 0x95, 0xE1, 0x87, 0xB7, 0x94, + 0xF8, 0x4B, 0x96, 0x63, 0x15, 0xB1, 0xBB, 0xA5, + 0xC0, 0x4A, 0x72, 0x02, 0x4A, 0x80, 0x5F, 0xB1, + 0x94, 0x73, 0xB7, 0x06, 0xB8, 0x13, 0x76, 0x42, + 0xAD, 0xB1, 0xC6, 0x6C, 0xFD, 0x64, 0xF2, 0x60, + 0xBB, 0x1B, 0x7A, 0xAD, 0xF6, 0xC2, 0x96, 0xB3, + 0x5F, 0x30, 0xB9, 0xD7, 0x70, 0x8A, 0x9D, 0x41, + 0xE7, 0x23, 0xFA, 0xD4, 0xE8, 0x72, 0xAF, 0x73, + 0xF8, 0x8C, 0x26, 0xAB, 0x65, 0x1B, 0xD5, 0x7A, + 0x21, 0xE2, 0x8C, 0xE8, 0xC2, 0x47, 0xD5, 0x8E, + 0x47, 0x9F, 0x79, 0x68, 0x87, 0x6F, 0xCE, 0xD3, + 0x5D, 0x2B, 0x87, 0xD2, 0xDF, 0x14, 0x43, 0x47, + 0x03, 0x3D, 0xF4, 0xCB, 0x50, 0xDE, 0x52, 0xD8, + 0x98, 0x41, 0x46, 0x3F, 0x5D, 0xFB, 0x6D, 0x6F, + 0xF6, 0xD9, 0xE8, 0x2B, 0xBA, 0xB3, 0xB1, 0xEC, + 0x58, 0x77, 0x8A, 0xB8, 0xF3, 0x6D, 0xBC, 0x68, + 0x22, 0xEA, 0xE3, 0x2F, 0xB6, 0xCB, 0x67, 0x30, + 0xCB, 0x33, 0x1C, 0x39, 0x5C, 0x27, 0x4A, 0xE7, + 0xE3, 0x7B, 0x40, 0x9B, 0x7C, 0x66, 0x32, 0xE7, + 0x6D, 0xAA, 0x97, 0xB8, 0x0F, 0x1E, 0x0C, 0xB4, + 0x7A, 0xA3, 0x66, 0xA8, 0xE3, 0x50, 0xEA, 0x36, + 0x74, 0x65, 0x92, 0xEC, 0x9B, 0x1E, 0x97, 0xF0, + 0x2F, 0x99, 0xD6, 0x00, 0x21, 0x37, 0x0B, 0x89, + 0x93, 0xC6, 0x80, 0xA1, 0x02, 0xDC, 0x96, 0x5D, + 0x20, 0xB7, 0x57, 0xF4, 0x17, 0x7A, 0x81, 0xBA, + 0x7B, 0x61, 0xD2, 0x88, 0xEF, 0xC5, 0xAD, 0xED, + 0x4C, 0x9A, 0x94, 0xA5, 0x7B, 0x2C, 0x6B, 0xD2, + 0x97, 0x7E, 0x23, 0x64, 0x0A, 0x66, 0x98, 0x47, + 0xEE, 0x81, 0xB1, 0x49, 0x0B, 0xE3, 0x8A, 0xC4, + 0x3E, 0x52, 0x2C, 0x8D, 0x09, 0xA2, 0x07, 0xB6, + 0x2A, 0x8B, 0x07, 0x9A, 0x24, 0x84, 0xDE, 0xD1, + 0x00, 0x63, 0xD7, 0xA1, 0x3F, 0xBF, 0x0C, 0xA8, + 0xEE, 0xDC, 0x2B, 0xF6, 0x7B, 0xD8, 0x78, 0x53, + 0x35, 0xB8, 0x29, 0x5A, 0xFE, 0x6B, 0x35, 0x6E, + 0x20, 0x62, 0x24, 0x17, 0x0E, 0x87, 0x23, 0x1A, + 0x77, 0x2D, 0x21, 0x84, 0x37, 0xBF, 0x7D, 0x68, + 0xAC, 0x2A, 0xF9, 0x3F, 0x11, 0x27, 0x18, 0x4F, + 0xA2, 0x15, 0x21, 0x47, 0x9E, 0x56, 0xFF, 0x22, + 0xE8, 0x0F, 0x61, 0xBC, 0x28, 0xB8, 0xD2, 0xE7, + 0x1B, 0x3D, 0x1D, 0x94, 0x28, 0x1B, 0x69, 0x56, + 0x00, 0xC8, 0xB0, 0xFD, 0x8E, 0x1D, 0x7E, 0x81, + 0x1F, 0x4C, 0xCF, 0xE1, 0x6E, 0x3F, 0x57, 0x95, + 0xC2, 0x4A, 0xA0, 0xA0, 0x16, 0x7E, 0x30, 0x5C, + 0x28, 0x87, 0x5C, 0x8F, 0xA9, 0x38, 0x9B, 0x72, + 0xF7, 0x90, 0x86, 0xF6, 0xEC, 0xC1, 0x6C, 0x88, + 0xB0, 0x78, 0x3A, 0x58, 0x15, 0xFB, 0x6F, 0x77, + 0xCD, 0xC7, 0xCC, 0xC3, 0x8D, 0x60, 0xE7, 0x87, + 0xBE, 0x9C, 0xBF, 0xFA, 0xA6, 0x2E, 0xF9, 0x59, + 0xA5, 0xE5, 0xDC, 0xDE, 0xB6, 0x25, 0x5C, 0x8E, + 0x0D, 0x2E, 0x01, 0xFE, 0x05, 0xEF, 0xF9, 0xE7, + 0x81, 0x02, 0xBE, 0xA2, 0x91, 0x40, 0x57, 0xD3, + 0x6E, 0x3D, 0x1B, 0x48, 0x50, 0x7A, 0xB6, 0xB1, + 0x76, 0x40, 0x47, 0x0F, 0xE3, 0xF1, 0x7A, 0x8B, + 0x6A, 0x5E, 0x04, 0xE5, 0x34, 0x56, 0xC5, 0xD9, + 0xE5, 0x0F, 0x74, 0x5D, 0xE0, 0x6F, 0x9A, 0xED, + 0xF4, 0xBF, 0xCF, 0x31, 0xB0, 0xC6, 0xED, 0x12, + 0x13, 0x36, 0x54, 0xCB, 0xC8, 0xDE, 0xF7, 0xF6, + 0x60, 0x9E, 0x12, 0x2C, 0x2E, 0x4C, 0x93, 0x3E, + 0x6F, 0xCB, 0x0F, 0x3D, 0x8C, 0xCA, 0xE8, 0xCA, + 0x0B, 0x10, 0xED, 0xDA, 0xE8, 0xDB, 0x29, 0x7C, + 0x8B, 0x32, 0x31, 0xC8, 0x94, 0x34, 0xA5, 0xF5, + 0x4D, 0x01, 0x28, 0xC8, 0x3A, 0xA6, 0xFD, 0xE2, + 0x9A, 0xB7, 0x0C, 0xDA, 0x43, 0x78, 0x45, 0x45, + 0xFE, 0xE9, 0xFF, 0x6E, 0xD4, 0x44, 0xF8, 0x88, + 0x66, 0x4D, 0xD2, 0x2B, 0x2E, 0x2D, 0xF5, 0x7C, + 0xA6, 0x53, 0xB6, 0xD2, 0x10, 0xE6, 0xB4, 0x0B, + 0x7F, 0xC2, 0x1F, 0xE0, 0x63, 0x90, 0xCA, 0x5D, + 0x5E, 0x60, 0xF5, 0x8A, 0xB1, 0x4C, 0x49, 0x03, + 0xD4, 0x38, 0xAE, 0xEF, 0xB1, 0x7C, 0xA4, 0xB9, + 0x98, 0x70, 0x6A, 0x0E, 0xD6, 0xA4, 0xA6, 0xF4, + 0x74, 0xB1, 0xBA, 0x1D, 0x48, 0xCC, 0xC1, 0x14, + 0x3C, 0x84, 0xA8, 0xD2, 0xE7, 0x8D, 0xEC, 0x11, + 0x61, 0x8C, 0x76, 0xB6, 0xDA, 0x28, 0xBC, 0x39, + 0xDF, 0x68, 0xAD, 0x24, 0xA4, 0x07, 0xE1, 0x07, + 0x33, 0xDD, 0x18, 0x9D, 0x5D, 0xAA, 0x90, 0x4B, + 0xEF, 0x88, 0x18, 0x6E, 0xB6, 0x83, 0x21, 0x45, + 0x94, 0x0F, 0x15, 0xB8, 0xAC, 0xD9, 0xD1, 0x8D, + 0x4F, 0x17, 0xC8, 0xD9, 0x17, 0xB0, 0x9D, 0x54, + 0xF2, 0x5F, 0x56, 0x09, 0xD3, 0x80, 0x20, 0x77, + 0x44, 0x23, 0x90, 0xAB, 0xB6, 0x0B, 0x51, 0xA7, + 0x41, 0xC5, 0xD4, 0x42, 0x5B, 0xD4, 0x67, 0x89, + 0xE6, 0xEC, 0x1E, 0x7D, 0x22, 0xD5, 0x6E, 0x7F, + 0x34, 0xCE, 0x7A, 0x07, 0x2B, 0x63, 0x0A, 0x69, + 0x51, 0x71, 0x8C, 0x13, 0x63, 0xB8, 0x79, 0x6D, + 0x94, 0xEA, 0xAF, 0x86, 0x30, 0xD2, 0x22, 0x6C, + 0x67, 0x82, 0x6C, 0xDE, 0xEA, 0x71, 0xE8, 0xD1, + 0x36, 0xF3, 0x64, 0x2F, 0x79, 0xE6, 0x92, 0xF0, + 0x4B, 0x05, 0x14, 0x7E, 0x40, 0xCE, 0x0C, 0x53, + 0xCA, 0x08, 0xEF, 0x0A, 0xA6, 0xA5, 0x73, 0x99, + 0xFD, 0xF3, 0xED, 0xBD, 0x54, 0x56, 0x6E, 0x66, + 0xEF, 0xCC, 0xE1, 0x6F, 0x0C, 0x44, 0x76, 0x84, + 0xF5, 0x55, 0x2B, 0xA3, 0x6B, 0x20, 0x60, 0x54, + 0x3F, 0xC1, 0x35, 0x58, 0xD8, 0xD8, 0x9E, 0x18, + 0x63, 0x70, 0x73, 0xEF, 0x6A, 0x87, 0x46, 0x77, + 0xA9, 0x7F, 0x9F, 0xA0, 0x23, 0x4B, 0x14, 0x00, + 0x61, 0xC7, 0xE3, 0x44, 0xBE, 0xD6, 0x09, 0x71, + 0xE3, 0x58, 0x44, 0x9A, 0xCD, 0x17, 0xE5, 0x8E, + 0x6D, 0x05, 0xBB, 0x21, 0x44, 0xD7, 0x4B, 0xD8, + 0x9A, 0xE9, 0x7A, 0x75, 0x91, 0x43, 0xAD, 0x84, + 0x5B, 0x02, 0x70, 0xBE, 0x67, 0x0B, 0x1E, 0x1E, + 0x92, 0xB8, 0xC7, 0xB6, 0x5F, 0xE1, 0x60, 0x23, + 0xF5, 0x30, 0xE4, 0xD0, 0xCF, 0x70, 0x03, 0xD1, + 0x85, 0x4A, 0x50, 0xDC, 0xF4, 0x9C, 0x29, 0xAB, + 0x0E, 0xA4, 0x7B, 0x2E, 0x3B, 0xDB, 0xBF, 0x52, + 0xD5, 0x8A, 0x91, 0x47, 0xA9, 0xD1, 0x23, 0xEB, + 0xC5, 0x6F, 0x11, 0xBB, 0xEE, 0xBB, 0x29, 0xD7, + 0x31, 0xAB, 0x99, 0x27, 0x5E, 0xF3, 0xA9, 0x23, + 0xFF, 0x70, 0x87, 0x83, 0xCC, 0x26, 0x92, 0x06, + 0xEC, 0xD3, 0x8C, 0xF9, 0x47, 0x34, 0x7D, 0x1E, + 0x71, 0xAF, 0xCF, 0x9D, 0xBF, 0x29, 0x1B, 0x95, + 0x27, 0x48, 0x55, 0xCE, 0xE2, 0xAC, 0x25, 0x61, + 0x83, 0xD9, 0x7B, 0x26, 0xEF, 0x94, 0x9A, 0x95, + 0x0C, 0xD1, 0xE4, 0x0A, 0x51, 0x50, 0x1F, 0x86, + 0x7A, 0x7B, 0xD3, 0x83, 0x55, 0x2D, 0xFC, 0x7B, + 0x97, 0x77, 0x17, 0x67, 0xBB, 0x9F, 0xD7, 0xD1, + 0xDD, 0xDD, 0x49, 0x67, 0xBB, 0xF7, 0x9A, 0x45, + 0x33, 0x24, 0xCA, 0xBC, 0xA5, 0xB2, 0x0D, 0x3F, + 0xB0, 0x10, 0x6D, 0xB9, 0x7D, 0x03, 0x3F, 0xCD, + 0x40, 0x37, 0x1E, 0x8A, 0xDA, 0xCD, 0xBA, 0xD7, + 0x8D, 0x89, 0xBD, 0x5E, 0x90, 0xCF, 0x97, 0xE8, + 0x35, 0x51, 0x87, 0x94, 0xFA, 0x3D, 0xB2, 0xB5, + 0x01, 0xF2, 0x35, 0x75, 0x77, 0x65, 0x5B, 0x9A, + 0x3C, 0xDA, 0x36, 0x52, 0xDF, 0xCF, 0x96, 0xBA, + 0xB9, 0xC5, 0xF9, 0x57, 0x67, 0x0E, 0x32, 0xE5, + 0x86, 0xE5, 0x1F, 0xD8, 0x9D, 0x7B, 0xA8, 0x76, + 0x89, 0xFD, 0x59, 0x70, 0x88, 0x73, 0x9D, 0x87, + 0xE1, 0x24, 0x6D, 0xC2, 0xB5, 0x1E, 0xCD, 0x54, + 0x29, 0x25, 0x10, 0xA3, 0xB4, 0x3C, 0xB2, 0x5A, + 0x62, 0xBD, 0xE9, 0x14, 0xEC, 0x3C, 0xBF, 0xA9, + 0x9D, 0xEC, 0x70, 0xAC, 0x23, 0xC0, 0xDF, 0xC9, + 0x69, 0xAD, 0x94, 0x1A, 0x69, 0x94, 0xA3, 0x70, + 0xF9, 0x0B, 0x15, 0x5D, 0x25, 0x45, 0x63, 0xFA, + 0xAA, 0x7D, 0x30, 0x67, 0x3C, 0x06, 0x34, 0x75, + 0x3F, 0xD6, 0x57, 0x58, 0x8E, 0xC6, 0x60, 0x3F, + 0x82, 0x35, 0xE9, 0x17, 0x36, 0x5D, 0xD8, 0x93, + 0x25, 0x25, 0x1B, 0x21, 0xB2, 0xFF, 0x80, 0xF5, + 0x44, 0xFE, 0x73, 0x84, 0xFF, 0x62, 0xFE, 0x52, + 0xC4, 0xCA, 0x77, 0x41, 0x28, 0xC8, 0x95, 0x15, + 0x2C, 0xC7, 0x5C, 0xA6, 0x3B, 0xA8, 0xF8, 0x1E, + 0x01, 0x30, 0xC9, 0x3B, 0x59, 0xF9, 0x40, 0xB7, + 0x18, 0x80, 0x21, 0x24, 0xDB, 0x8D, 0x07, 0xDF, + 0xDC, 0x24, 0xBF, 0x2F, 0x7B, 0xD9, 0xC4, 0xEF, + 0x61, 0x74, 0x1A, 0xF2, 0xB6, 0x98, 0x75, 0x66, + 0x22, 0x4F, 0x11, 0x06, 0x41, 0xDB, 0x77, 0x83, + 0xFA, 0xF3, 0x1B, 0xEC, 0xB8, 0xF7, 0x89, 0x47, + 0xBA, 0x12, 0x3F, 0xB0, 0x0E, 0x1B, 0x6D, 0x13, + 0x36, 0x0B, 0x16, 0xD0, 0x7C, 0x3A, 0xAA, 0x33, + 0x6D, 0xDA, 0x1B, 0x65, 0xD4, 0xC2, 0xF2, 0x1B, + 0xD5, 0xCD, 0x4B, 0xE9, 0xED, 0xFA, 0xFA, 0x78, + 0x45, 0x97, 0x2D, 0x60, 0xCC, 0xE3, 0x40, 0x3E, + 0xB5, 0xE5, 0xC8, 0x33, 0xF6, 0x4C, 0x51, 0x45, + 0xDC, 0x08, 0xE7, 0xB3, 0x6F, 0xCF, 0xDE, 0xE8, + 0x73, 0x0B, 0x94, 0x4F, 0x5A, 0x23, 0xF9, 0xFF, + 0x3F, 0x0D, 0x1D, 0xCE, 0x80, 0x86, 0x3B, 0x55, + 0x8D, 0x8A, 0x35, 0xB2, 0xAA, 0x65, 0x27, 0x69, + 0x1D, 0xA5, 0x0C, 0xE6, 0xFA, 0x39, 0x85, 0x62, + 0x65, 0xAD, 0xE6, 0x08, 0x38, 0xCE, 0xC9, 0xEA, + 0x98, 0x73, 0x99, 0x1D, 0xB5, 0x6F, 0xEA, 0xE8, + 0xEE, 0xE2, 0xEC, 0xF4, 0x32, 0x44, 0x96, 0x5A, + 0x13, 0xCC, 0x1D, 0x23, 0x0E, 0x91, 0x72, 0xD8, + 0x2A, 0xD2, 0x3D, 0x6A, 0x6E, 0x2A, 0x37, 0x7A, + 0x7F, 0x67, 0xF6, 0x40, 0xBF, 0x3A, 0x36, 0x3B, + 0xC8, 0x1A, 0x78, 0x6D, 0x12, 0xB0, 0x35, 0xA3, + 0x18, 0x55, 0x33, 0x70, 0x48, 0x48, 0x52, 0x8F, + 0xB4, 0x59, 0x58, 0xEB, 0xAA, 0xB3, 0x03, 0x67, + 0x4F, 0xFF, 0xA5, 0x68, 0xE7, 0xAE, 0xAF, 0x46, + 0x3D, 0x66, 0x6B, 0x60, 0x21, 0x26, 0x31, 0x83, + 0xBE, 0xE8, 0x1E, 0x72, 0x92, 0x87, 0x79, 0x24, + 0xCF, 0xDE, 0xEF, 0x6F, 0x81, 0x73, 0xA1, 0x34, + 0x7B, 0x99, 0x94, 0x43, 0x33, 0xF4, 0x8B, 0x36, + 0xC8, 0xC5, 0xF8, 0xC1, 0x6D, 0x22, 0x6D, 0xA3, + 0xC9, 0xDA, 0x5F, 0x4C, 0xE7, 0x7F, 0x00, 0xE4, + 0x42, 0xD8, 0x5C, 0x73, 0xE5, 0x78, 0x0C, 0x36, + 0x28, 0xD9, 0x83, 0x8F, 0xCA, 0xFA, 0x5D, 0x1D, + 0x34, 0x05, 0xF1, 0x93, 0x6C, 0xBC, 0xFD, 0x2C, + 0x52, 0xD4, 0xE8, 0x8D, 0xA9, 0xC9, 0x0D, 0xFF, + 0x28, 0x5E, 0x3E, 0x91, 0x12, 0xC0, 0x3C, 0xBA, + 0x58, 0x64, 0x7E, 0x6B, 0x4E, 0xC0, 0x77, 0xB1, + 0x67, 0x08, 0x16, 0xF5, 0x7E, 0x29, 0x42, 0x81, + 0x6A, 0x6F, 0x34, 0x21, 0x32, 0x64, 0x9A, 0xA6, + 0x44, 0xD1, 0x4F, 0x41, 0xAB, 0xC5, 0x26, 0x4A, + 0xFA, 0x70, 0xBC, 0xAE, 0x3D, 0x67, 0x9B, 0x86, + 0xF5, 0x1A, 0xF2, 0x44, 0x70, 0x52, 0xD0, 0x78, + 0xA0, 0xEA, 0x56, 0x39, 0x0B, 0x37, 0x2A, 0x15, + 0x13, 0xBC, 0xD2, 0xEA, 0x46, 0x6D, 0xCB, 0x5A, + 0x4D, 0x86, 0x47, 0x4F, 0xA1, 0xE2, 0x6B, 0xC0, + 0xA8, 0x3F, 0x58, 0x5C, 0x79, 0xAD, 0x62, 0x17, + 0xBC, 0x96, 0xAF, 0x77, 0x1F, 0x74, 0xD1, 0x42, + 0xBF, 0x5E, 0x91, 0xA9, 0x28, 0x44, 0xC5, 0x4E, + 0x76, 0x6B, 0xF2, 0xD3, 0x69, 0x8C, 0x0E, 0x4F, + 0x61, 0x76, 0xAD, 0xDC, 0x79, 0xE9, 0x74, 0xA4, + 0x66, 0xFB, 0x2E, 0x0C, 0xBB, 0x42, 0xC5, 0x3F, + 0x59, 0xB0, 0xDC, 0xB0, 0x32, 0xCD, 0x37, 0x56, + 0x1B, 0xD2, 0x46, 0xED, 0x52, 0xC8, 0x12, 0xEA, + 0xA3, 0x6B, 0xB9, 0xE5, 0xB3, 0x2A, 0xF3, 0x9B, + 0x0F, 0xC3, 0x77, 0x5F, 0x9A, 0xE1, 0x20, 0xBC, + 0x59, 0x44, 0x9B, 0x7B, 0x77, 0xB1, 0xBA, 0x1A, + 0x5B, 0x60, 0x06, 0x6C, 0x85, 0x83, 0x68, 0xDD, + 0x5A, 0xC8, 0xEE, 0xDC, 0xFE, 0x1F, 0x83, 0xF5, + 0x2C, 0x53, 0x62, 0xED, 0xE8, 0x93, 0xB7, 0x22, + 0x3E, 0xCB, 0x70, 0xBA, 0xA6, 0x6D, 0xB2, 0x91, + 0x47, 0xB8, 0x04, 0x37, 0x20, 0x1F, 0xEF, 0x71, + 0xB0, 0x5F, 0xF2, 0x51, 0x03, 0x5F, 0x88, 0xCA, + 0xFF, 0x42, 0xE8, 0x2A, 0x43, 0x02, 0xD3, 0x60, + 0x98, 0x26, 0x8B, 0x74, 0xF4, 0x18, 0x3D, 0x4D, + 0x19, 0xF1, 0x3B, 0x87, 0xE9, 0x83, 0x37, 0x15, + 0x7D, 0xA5, 0xEF, 0xBB, 0xF3, 0x4F, 0x48, 0xCA, + 0x40, 0x65, 0xD3, 0xE3, 0xBA, 0xCC, 0x83, 0x83, + 0x3F, 0xEE, 0xBA, 0x57, 0x34, 0x6D, 0x16, 0x9F, + 0x1B, 0xE6, 0xA0, 0x4C, 0x29, 0xC8, 0x2F, 0xD2, + 0x25, 0xA3, 0xF7, 0xC6, 0x85, 0x12, 0x4F, 0x53, + 0x7E, 0xC0, 0xE1, 0x0A, 0xB8, 0x58, 0x34, 0xBA, + 0x3E, 0x65, 0x4F, 0x19, 0x55, 0x5C, 0xB9, 0x74, + 0x6B, 0x74, 0xCE, 0x43, 0xA2, 0xC7, 0x8B, 0x21, + 0x70, 0x8C, 0x3B, 0xEF, 0x87, 0xC1, 0xE8, 0x8F, + 0x08, 0x10, 0xB4, 0xED, 0xE1, 0x81, 0x14, 0xE9, + 0x2A, 0x43, 0x13, 0xB4, 0xEA, 0xA0, 0x5F, 0x60, + 0x93, 0x7E, 0x87, 0x6D, 0xA2, 0x57, 0x63, 0x32, + 0xAE, 0xC3, 0x8C, 0xCD, 0x42, 0x5E, 0xFD, 0x51, + 0x1A, 0x39, 0xB9, 0xB4, 0xBD, 0x4C, 0xF3, 0xF2, + 0xE2, 0x70, 0x9A, 0x05, 0xF9, 0x39, 0xE5, 0xFC, + 0x59, 0x7D, 0x4E, 0x85, 0x12, 0x02, 0xC9, 0xC2, + 0xC5, 0x71, 0x3A, 0xD5, 0x73, 0xF7, 0x5A, 0xC5, + 0x49, 0x0D, 0xEE, 0xCF, 0x9D, 0xB8, 0xDE, 0xE2, + 0x03, 0x99, 0x70, 0x6B, 0x19, 0x29, 0xA4, 0xE8, + 0x99, 0x00, 0xC4, 0x9C, 0x24, 0x46, 0x5E, 0x08, + 0x09, 0x56, 0x6D, 0x9C, 0x2E, 0xF7, 0x8C, 0x52, + 0xDB, 0xB4, 0x2F, 0x9E, 0x22, 0x7E, 0xFD, 0x1E, + 0x1A, 0x72, 0xCB, 0x71, 0x0B, 0xD2, 0x19, 0x33, + 0x0E, 0x69, 0xCC, 0x00, 0x49, 0x36, 0x79, 0x78, + 0xAB, 0x11, 0x4D, 0x9A, 0xD7, 0xF9, 0x55, 0xCF, + 0x0B, 0x7B, 0x3D, 0x32, 0x5C, 0xB3, 0x51, 0x65, + 0x00, 0x0E, 0xD2, 0x9D, 0xBE, 0x0A, 0x19, 0x56, + 0xF1, 0x45, 0x95, 0x83, 0xC6, 0x97, 0xCD, 0x19, + 0xE7, 0x8B, 0x51, 0x74, 0xE4, 0xFD, 0x2C, 0xEC, + 0x10, 0x8A, 0x7C, 0x24, 0x28, 0x0A, 0x78, 0xA3, + 0xEC, 0x93, 0x97, 0x16, 0x4F, 0x60, 0x03, 0xFD, + 0x85, 0x31, 0x98, 0x04, 0xE5, 0x65, 0x5A, 0x87, + 0x9F, 0x66, 0x3D, 0xD4, 0x56, 0x3E, 0xF9, 0x98, + 0x25, 0x21, 0xFE, 0xC2, 0x07, 0x9E, 0x88, 0x89, + 0x49, 0x7B, 0xE9, 0x20, 0x1F, 0x6D, 0x7F, 0x24, + 0x60, 0xA8, 0xB2, 0xDD, 0x96, 0x51, 0x0E, 0x0E, + 0x4C, 0x83, 0xC3, 0xB1, 0x93, 0xC1, 0x1F, 0xD6, + 0xB4, 0xB6, 0x84, 0xCE, 0x85, 0x63, 0xA5, 0x38, + 0x0F, 0x2E, 0x55, 0xF4, 0x74, 0xA6, 0x0B, 0x63, + 0x17, 0xD0, 0x96, 0x76, 0x15, 0xAD, 0x4F, 0xA9, + 0xF0, 0x83, 0x25, 0xAD, 0xD7, 0x97, 0xB7, 0x9E, + 0x6F, 0x5D, 0xC7, 0x2A, 0xD1, 0x97, 0xF5, 0xF6, + 0x1E, 0xC8, 0x8B, 0xE5, 0xFB, 0xFF, 0x92, 0x72, + 0x31, 0x9A, 0x49, 0x4B, 0x60, 0x8F, 0x34, 0x7C, + 0xE1, 0x55, 0x66, 0x7A, 0x59, 0xC3, 0x00, 0x9A, + 0x14, 0x50, 0xF3, 0x06, 0x19, 0x3C, 0xFE, 0x61, + 0x1C, 0xF7, 0x05, 0x49, 0x2A, 0x30, 0xFF, 0x56, + 0xFE, 0x7F, 0x71, 0xD7, 0x32, 0xCC, 0xEF, 0x63, + 0x64, 0xE1, 0x66, 0xCF, 0xF8, 0x12, 0xED, 0x23, + 0x11, 0xB5, 0x16, 0xFA, 0x56, 0x90, 0xF2, 0xA2, + 0x72, 0x7B, 0x18, 0x50, 0xF2, 0x98, 0x5D, 0x48, + 0x25, 0x5E, 0x8C, 0x47, 0xE7, 0x11, 0x50, 0x2A, + 0x4B, 0x4A, 0x97, 0x0B, 0xDF, 0x70, 0xDC, 0x34, + 0x47, 0xF8, 0xE2, 0x88, 0x78, 0x24, 0xB5, 0x8A, + 0xC7, 0x58, 0xE8, 0x83, 0xF7, 0x3B, 0xAD, 0xFC, + 0xED, 0x46, 0x40, 0xD5, 0x46, 0x35, 0x1B, 0xF3, + 0x3E, 0x8F, 0x1E, 0x0B, 0x1B, 0xB9, 0xFB, 0x5A, + 0xFF, 0x0F, 0x8B, 0xA0, 0x95, 0x4A, 0x8E, 0x65, + 0x33, 0xD3, 0x7C, 0x03, 0x04, 0x8E, 0xBA, 0x6A, + 0x55, 0xB3, 0xC5, 0xDA, 0xCB, 0xDC, 0x44, 0xD3, + 0x98, 0x77, 0xD3, 0x07, 0x8A, 0xE9, 0x5E, 0x44, + 0x5B, 0xED, 0x12, 0xB1, 0xA5, 0x03, 0xAF, 0xB2, + 0x20, 0x0C, 0xB1, 0x8B, 0x08, 0xB4, 0x6A, 0x11, + 0x96, 0xA9, 0xF5, 0x7A, 0xFD, 0x56, 0x48, 0x11, + 0xC0, 0x30, 0xA4, 0x45, 0xFC, 0xAE, 0x72, 0xE5, + 0x5E, 0x85, 0xB7, 0x6F, 0xA0, 0x50, 0x13, 0x4B, + 0x2E, 0xC2, 0x31, 0x13, 0xED, 0x04, 0x04, 0x3D, + 0xBC, 0xD0, 0xB6, 0xFC, 0xCE, 0xBD, 0xC9, 0x13, + 0x5C, 0xB2, 0x02, 0xB8, 0x4F, 0xDD, 0x74, 0x51, + 0x1F, 0x9E, 0x8F, 0x0C, 0xF2, 0x26, 0xE1, 0x4C, + 0xA5, 0xC4, 0x38, 0xC7, 0x6A, 0xA5, 0xC3, 0xC2, + 0xE9, 0xF3, 0x22, 0x71, 0x00, 0x91, 0x83, 0xEE, + 0x92, 0xA9, 0x95, 0x81, 0x9D, 0xB9, 0x0F, 0x66, + 0x89, 0x9B, 0xB9, 0xB0, 0xC7, 0xED, 0x31, 0xDF, + 0x41, 0xB6, 0x8E, 0x52, 0xAC, 0x5B, 0xBD, 0xF2, + 0x33, 0x9F, 0x71, 0x5E, 0x43, 0xFE, 0xED, 0xD9, + 0x4F, 0x57, 0xF9, 0x23, 0x05, 0x23, 0x03, 0x34, + 0x17, 0xE4, 0x22, 0x27, 0x97, 0xF7, 0x62, 0x5B, + 0x52, 0x66, 0x70, 0xEE, 0x6B, 0xD3, 0x46, 0x8C, + 0xCD, 0x9B, 0xA4, 0xA1, 0xED, 0x26, 0x4A, 0xAC, + 0xC2, 0x50, 0xA8, 0x2A, 0x48, 0x83, 0x46, 0xB2, + 0xA5, 0xF9, 0x26, 0xF2, 0xE7, 0x8A, 0x8E, 0xD8, + 0x40, 0x5F, 0x85, 0x8E, 0xAB, 0xB0, 0x29, 0xF7, + 0x81, 0x42, 0xA7, 0x4B, 0xD5, 0xA8, 0x2D, 0x3D, + 0xD7, 0x0A, 0xB1, 0x26, 0xCF, 0xA3, 0xBA, 0xD7, + 0xF5, 0x1B, 0x9E, 0x95, 0xCB, 0xC8, 0xCE, 0x75, + 0xE7, 0x7A, 0x4A, 0x1B, 0x63, 0x21, 0xB7, 0x74, + 0x77, 0x78, 0xCD, 0x03, 0x5B, 0x3B, 0xCD, 0x44, + 0x8E, 0xF1, 0xBB, 0xB6, 0xFF, 0x75, 0x52, 0x8A, + 0x7A, 0xE9, 0xAF, 0x62, 0x24, 0xA1, 0x6F, 0x4F, + 0x45, 0x03, 0x87, 0xA3, 0xED, 0xBC, 0x2E, 0x92, + 0xC0, 0xB1, 0x9C, 0x22, 0x2E, 0x35, 0xC1, 0xA5, + 0x7E, 0xC3, 0x36, 0x3B, 0x18, 0x14, 0x78, 0x6E, + 0x1D, 0x37, 0xD7, 0x92, 0xB3, 0x78, 0x26, 0x13, + 0x9A, 0xFB, 0x38, 0x1D, 0xE0, 0x4C, 0x07, 0xC4, + 0x2C, 0xD3, 0xCA, 0x78, 0xE4, 0x70, 0xC2, 0x52, + 0x7C, 0x63, 0xDB, 0x4B, 0xB4, 0x0A, 0x4B, 0x7D, + 0x20, 0x67, 0xF0, 0xF4, 0x80, 0x5B, 0x65, 0x8B, + 0x29, 0x80, 0x92, 0xF0, 0x87, 0x3D, 0x09, 0x5A, + 0x0E, 0xEA, 0x45, 0x63, 0x92, 0x99, 0xD6, 0x0D, + 0x2B, 0x58, 0xEE, 0x19, 0x03, 0x4F, 0x94, 0x2D, + 0xEC, 0xBF, 0x5A, 0xE9, 0xA6, 0x16, 0xAF, 0x72, + 0x37, 0x5C, 0x12, 0xBB, 0x7D, 0xED, 0xAA, 0x6A, + 0x7D, 0xDF, 0x9A, 0x48, 0x37, 0x37, 0x3D, 0x7B, + 0x51, 0x96, 0x0B, 0x30, 0xCE, 0x9C, 0xE7, 0x3B, + 0x3C, 0x10, 0xDE, 0x32, 0xA7, 0x86, 0x39, 0xA9, + 0x33, 0x7D, 0x9B, 0xCF, 0x15, 0x27, 0xA4, 0x36, + 0x88, 0xBD, 0xB6, 0xEB, 0x8B, 0xD0, 0x3D, 0xCA, + 0xF1, 0x02, 0x70, 0xDF, 0xC0, 0xE2, 0xF0, 0xD2, + 0x2C, 0x27, 0xE3, 0x22, 0x24, 0x33, 0x27, 0x34, + 0xCA, 0x26, 0x19, 0x74, 0x02, 0x2F, 0x7E, 0xC1, + 0x76, 0xCB, 0x12, 0xBE, 0x6F, 0x13, 0x62, 0x1F, + 0x32, 0x03, 0x65, 0xCF, 0xBB, 0x03, 0xD0, 0x4C, + 0xF2, 0x9E, 0xFE, 0x93, 0xE9, 0x1B, 0x02, 0x9B, + 0x7B, 0x26, 0xFF, 0xEE, 0xF0, 0x6F, 0xCE, 0x57, + 0xD1, 0x2B, 0xE3, 0x90, 0x2E, 0xE2, 0x71, 0x2A, + 0xBA, 0xCC, 0x3D, 0x27, 0xCE, 0xA3, 0x5A, 0xCA, + 0x15, 0x09, 0xE4, 0xD0, 0x86, 0x4F, 0xEC, 0x5A, + 0x5B, 0x41, 0xA0, 0xE0, 0x3E, 0x1D, 0xEC, 0x6F, + 0x2A, 0x33, 0x72, 0x15, 0xCD, 0xE5, 0x55, 0xD6, + 0x6F, 0x84, 0xE3, 0xD6, 0x75, 0x5D, 0xDC, 0x1C, + 0x07, 0x3D, 0x0C, 0xDC, 0xDE, 0xF8, 0x8A, 0x44, + 0x40, 0xB1, 0x76, 0x84, 0xB8, 0xE0, 0xAF, 0x9D, + 0xA2, 0xB2, 0x84, 0xAA, 0xBF, 0x61, 0x08, 0x21, + 0xE5, 0xC2, 0xC9, 0x11, 0x94, 0x2D, 0x0B, 0xD1, + 0xC6, 0x59, 0xC1, 0xEE, 0xBA, 0x8E, 0x21, 0xAF, + 0xDE, 0x32, 0x77, 0xD5, 0x07, 0x3B, 0x98, 0x39, + 0x95, 0x77, 0x03, 0x80, 0x2F, 0xA2, 0x76, 0xC8, + 0x2C, 0xC6, 0x6A, 0x00, 0xA8, 0x69, 0x77, 0xB8, + 0x87, 0x7D, 0xC0, 0x51, 0x19, 0x45, 0x14, 0xA6, + 0x33, 0xB3, 0x4D, 0x36, 0x29, 0x34, 0xE8, 0x50, + 0xC2, 0x71, 0x7A, 0x0B, 0xE5, 0x92, 0x4E, 0x86, + 0xAA, 0xDA, 0x33, 0xCF, 0x34, 0x54, 0x63, 0x2C, + 0x68, 0xA1, 0x0A, 0xEF, 0x8B, 0x5B, 0xAA, 0x10, + 0x83, 0xE9, 0x13, 0x7D, 0x29, 0x20, 0xA2, 0x5F, + 0x96, 0x9F, 0x54, 0x0B, 0x95, 0xDF, 0x59, 0x91, + 0x6C, 0x4C, 0xAC, 0xC4, 0x55, 0x98, 0x8F, 0x46, + 0x31, 0x77, 0x56, 0xCC, 0x93, 0x7E, 0xF0, 0x17, + 0x7C, 0x0F, 0xEB, 0x3F, 0x23, 0xBB, 0xD3, 0x56, + 0x9E, 0x89, 0x67, 0xC4, 0x9B, 0x95, 0xA3, 0xBF, + 0x6D, 0x9D, 0x6D, 0x7C, 0x72, 0x27, 0x20, 0x6E, + 0x28, 0x37, 0x39, 0xFC, 0x77, 0x41, 0xE9, 0xFE, + 0x64, 0xEF, 0xA0, 0x38, 0x9F, 0xC7, 0x2F, 0xDA, + 0xC8, 0x1F, 0xEB, 0x75, 0x07, 0xB8, 0x7E, 0x6B, + 0x73, 0xCE, 0x0E, 0x7C, 0x7C, 0x54, 0x06, 0x1D, + 0x48, 0x8A, 0x06, 0x53, 0x95, 0x9B, 0x75, 0x8A, + 0xFF, 0x6F, 0x7D, 0x19, 0x00, 0x17, 0x8D, 0x7C, + 0x1A, 0xEA, 0xD0, 0x79, 0x45, 0x68, 0xF9, 0x2F, + 0x8A, 0xCE, 0x98, 0xED, 0xCC, 0xE8, 0x6D, 0xE1, + 0x08, 0xA0, 0x50, 0x2C, 0x43, 0x49, 0xC4, 0x99, + 0x98, 0x31, 0xDE, 0x00, 0xE8, 0x08, 0x39, 0x0B, + 0xBB, 0xDB, 0x65, 0xEA, 0x36, 0x0F, 0xBE, 0x98, + 0xB7, 0x4A, 0x9C, 0x59, 0x34, 0x0E, 0xBB, 0xDD, + 0x6F, 0x65, 0x21, 0x39, 0x23, 0x48, 0x57, 0x7F, + 0xD4, 0x07, 0x89, 0x03, 0x01, 0xB0, 0x79, 0x27, + 0x28, 0xCC, 0xFB, 0x88, 0xC5, 0xDD, 0x47, 0x2A, + 0xDA, 0x73, 0x75, 0x9B, 0xC9, 0x99, 0xA0, 0x21, + 0x34, 0xDF, 0xB1, 0x62, 0x2F, 0x61, 0xD8, 0xB7, + 0x63, 0x2A, 0xC7, 0x7E, 0x3A, 0x98, 0x0B, 0x2C, + 0xE5, 0x66, 0xF3, 0xD5, 0x30, 0xF0, 0xBC, 0x21, + 0xC7, 0x51, 0x9B, 0xFB, 0x00, 0xBB, 0xAA, 0x9C, + 0x85, 0xC3, 0x9B, 0x0C, 0xDC, 0x5F, 0x8D, 0x1B, + 0xA1, 0x2B, 0x78, 0x82, 0xFE, 0x0F, 0x7C, 0x75, + 0x6E, 0x75, 0x56, 0x74, 0x35, 0x25, 0xE5, 0xD0, + 0xEC, 0x8E, 0xC1, 0xBD, 0x7D, 0x7A, 0xE3, 0xDC, + 0xAD, 0xC6, 0x8D, 0xB6, 0x0D, 0x7A, 0xA1, 0x3C, + 0xDB, 0x29, 0xFA, 0x15, 0xC0, 0xA9, 0xAF, 0x89, + 0x0F, 0x18, 0x75, 0xE3, 0x97, 0x58, 0x62, 0x12, + 0x79, 0xA9, 0x87, 0x7D, 0x9C, 0x69, 0x44, 0x9C, + 0x41, 0x39, 0x2C, 0xAD, 0x98, 0x8B, 0x8D, 0xE4, + 0x58, 0xEE, 0xCD, 0x98, 0x38, 0x5F, 0x79, 0x73, + 0x0B, 0x5E, 0x26, 0xC1, 0x16, 0x24, 0x15, 0xD9, + 0x73, 0x26, 0x41, 0x9B, 0x5F, 0xF9, 0x2A, 0xA8, + 0xC1, 0x33, 0x74, 0x39, 0x1D, 0xBB, 0xE7, 0x36, + 0xD9, 0x8C, 0x07, 0xAD, 0x32, 0xD6, 0x38, 0xBB, + 0x44, 0xE6, 0x77, 0xC7, 0x11, 0x05, 0xCF, 0xB5, + 0x72, 0x49, 0x68, 0x80, 0xC1, 0x67, 0x71, 0x5F, + 0x9B, 0xFF, 0x6E, 0x71, 0x1A, 0xBE, 0x5A, 0x83, + 0x25, 0x38, 0xC7, 0xE6, 0xDA, 0x88, 0x22, 0xDC, + 0xA6, 0x03, 0x02, 0xD1, 0x59, 0xC6, 0xA8, 0x2F, + 0xA4, 0x8F, 0xF8, 0x77, 0x3E, 0x0C, 0x6F, 0xA1, + 0x73, 0xE1, 0x35, 0x55, 0xB2, 0xDF, 0xBF, 0x47, + 0xB7, 0xD0, 0x8D, 0xBA, 0x35, 0x74, 0x44, 0x6B, + 0xC0, 0xA7, 0x8D, 0x30, 0x08, 0xE4, 0x41, 0xD1, + 0x55, 0x21, 0x50, 0xD9, 0x06, 0x12, 0x54, 0xB2, + 0xF3, 0xFC, 0x5A, 0x1E, 0xF3, 0xE3, 0x84, 0x33, + 0x34, 0x0B, 0xB5, 0x9A, 0x97, 0xFD, 0x51, 0xF4, + 0x68, 0xFE, 0x8A, 0x92, 0xBF, 0x62, 0x9D, 0xCD, + 0x00, 0x29, 0x39, 0x37, 0x12, 0xF3, 0x53, 0x6D, + 0x6B, 0x24, 0xB8, 0x86, 0x68, 0xAD, 0x6A, 0x4B, + 0x3A, 0x4C, 0x93, 0xA6, 0xB1, 0x41, 0xFA, 0x8E, + 0x58, 0x63, 0xCD, 0x59, 0x80, 0xBF, 0xD7, 0xAB, + 0x83, 0xC3, 0xCC, 0x5D, 0x2F, 0xBE, 0x80, 0xC7, + 0xB1, 0x67, 0xDC, 0x92, 0x8C, 0xA9, 0x57, 0x36, + 0x58, 0x0A, 0x52, 0x96, 0x0E, 0x20, 0x90, 0xCD, + 0x87, 0x68, 0xF5, 0x93, 0xBB, 0x04, 0xD4, 0x48, + 0xB6, 0x45, 0x30, 0xC0, 0xE3, 0xC2, 0x56, 0x8C, + 0xE3, 0xA2, 0xC6, 0x42, 0x0F, 0x81, 0xF7, 0x4D, + 0xF6, 0x88, 0x5D, 0x55, 0x07, 0x8E, 0xF1, 0xB3, + 0x83, 0xB0, 0x20, 0x85, 0x4A, 0x63, 0x6A, 0x78, + 0xA9, 0xEC, 0x13, 0x84, 0xF7, 0x4E, 0xBE, 0xB6, + 0x5F, 0x5A, 0x25, 0xFF, 0xD4, 0x14, 0x7D, 0xA7, + 0xEE, 0x40, 0xF6, 0x25, 0x7C, 0x7E, 0x34, 0xCA, + 0xC9, 0x27, 0x0E, 0xA2, 0x78, 0xB6, 0xE6, 0x08, + 0xA1, 0x9B, 0x56, 0x8D, 0x29, 0xE5, 0x8D, 0xEC, + 0xAD, 0xDA, 0xD3, 0x3C, 0x59, 0xBA, 0xDB, 0x92, + 0x52, 0x99, 0x3B, 0x31, 0x6B, 0x0B, 0x13, 0x00, + 0x79, 0x3D, 0x69, 0x85, 0x3A, 0x6B, 0x90, 0x33, + 0x96 + }; + static const byte rnd_44[] = { + 0x08, 0x34, 0x57, 0xD4, 0x0E, 0x25, 0x04, 0x88, + 0xA6, 0x0E, 0x76, 0x34, 0xA0, 0x1D, 0x43, 0x0A, + 0x60, 0xE8, 0x57, 0x2B, 0xA8, 0x8A, 0xED, 0xC5, + 0x54, 0x49, 0x18, 0x81, 0x37, 0x13, 0xA0, 0xB1 + }; + static const byte sig_44[] = { + 0x63, 0xA8, 0x23, 0x20, 0xD4, 0xCE, 0x09, 0xC4, + 0x7A, 0xD1, 0x27, 0xC5, 0xBB, 0x7F, 0x6C, 0x2D, + 0xFF, 0x15, 0x29, 0xCD, 0xAF, 0x9F, 0x74, 0x56, + 0xFF, 0xC2, 0xC6, 0xED, 0x90, 0x51, 0x17, 0xDC, + 0xAD, 0x8C, 0x08, 0x7A, 0xC0, 0xD8, 0x9E, 0x0C, + 0xE9, 0x61, 0xC0, 0x94, 0xFA, 0x9C, 0x2E, 0xDE, + 0x27, 0x9C, 0x65, 0xE6, 0x99, 0xD1, 0xD1, 0x7E, + 0xA6, 0x95, 0x98, 0x8F, 0xA1, 0xC4, 0x98, 0x3F, + 0x7E, 0x1F, 0x18, 0x86, 0x2A, 0xFE, 0xB2, 0xEC, + 0x9D, 0x0F, 0x5B, 0x0C, 0x11, 0xB2, 0xAA, 0x0B, + 0xDE, 0x95, 0x7C, 0x40, 0xA1, 0x5B, 0xFF, 0x97, + 0xD7, 0xCB, 0xCF, 0x4E, 0x59, 0xDA, 0xE9, 0xD5, + 0xA3, 0xC9, 0xF8, 0x7D, 0xDD, 0xA5, 0xB9, 0x06, + 0x9D, 0x82, 0xCC, 0x18, 0x10, 0x20, 0x80, 0x92, + 0xBC, 0xBA, 0x1C, 0x43, 0x73, 0xF2, 0xA8, 0x3E, + 0x19, 0x15, 0x80, 0x9E, 0x81, 0xD8, 0xD2, 0x06, + 0xEA, 0x78, 0x10, 0x3F, 0x68, 0x66, 0x3D, 0xBE, + 0xB1, 0x79, 0xB0, 0x28, 0x83, 0xCD, 0xD3, 0x33, + 0xEE, 0xFE, 0x6D, 0x02, 0x39, 0x17, 0xC6, 0xF2, + 0xA4, 0x6E, 0x5A, 0x5C, 0x45, 0x14, 0xF5, 0x7D, + 0xCA, 0x7B, 0x62, 0x4A, 0xF4, 0xE7, 0x71, 0x7B, + 0xD7, 0x1B, 0x51, 0x26, 0xE6, 0xDE, 0x2D, 0xC9, + 0x65, 0x24, 0x30, 0x2C, 0x08, 0x04, 0xD7, 0xBE, + 0x3A, 0xDA, 0x64, 0xAF, 0x11, 0x6F, 0xC6, 0xE7, + 0x38, 0xEF, 0xA6, 0xE6, 0x5E, 0x87, 0x90, 0xB4, + 0x0E, 0xB1, 0xB4, 0x83, 0x64, 0xD2, 0x15, 0xEF, + 0xD6, 0x1F, 0x7A, 0x44, 0x75, 0x3A, 0x95, 0x50, + 0x6E, 0x52, 0xC9, 0x9C, 0xE9, 0xB4, 0x56, 0xDC, + 0x93, 0x85, 0x92, 0xF1, 0x35, 0xEC, 0x50, 0x1B, + 0x3B, 0xCF, 0x82, 0xDA, 0x69, 0xA1, 0xDD, 0x44, + 0xE8, 0xB3, 0xC1, 0xCB, 0x8D, 0xD5, 0x13, 0xD0, + 0xF3, 0x14, 0x2C, 0x80, 0x82, 0x2C, 0x31, 0xBF, + 0x75, 0x20, 0x14, 0x39, 0x9F, 0x81, 0x79, 0x76, + 0x0F, 0xB6, 0x7D, 0xB6, 0x58, 0x1C, 0xF3, 0xE6, + 0x93, 0x5A, 0x9B, 0xE1, 0x8B, 0x92, 0xC2, 0xDB, + 0xF1, 0x89, 0xAA, 0x46, 0x67, 0xFA, 0x80, 0x45, + 0x72, 0xAA, 0xB4, 0xE2, 0x5E, 0xE9, 0xD1, 0xA7, + 0xA0, 0xD7, 0x05, 0x5C, 0xC6, 0xC7, 0x6D, 0x1D, + 0x66, 0x3D, 0x35, 0x0C, 0xB7, 0x1A, 0xFA, 0xB1, + 0xDB, 0xD0, 0xCB, 0x3A, 0x8B, 0xB7, 0x1B, 0x03, + 0x60, 0xA0, 0xA4, 0xDA, 0xD0, 0xE2, 0x3A, 0x1E, + 0xB5, 0xE4, 0x59, 0x68, 0x6A, 0x02, 0x94, 0x66, + 0x05, 0x60, 0x08, 0x64, 0xB4, 0xEE, 0x0F, 0x3A, + 0xCE, 0xFD, 0x40, 0x7B, 0x6F, 0xF5, 0x8D, 0x1E, + 0xFF, 0x0C, 0x75, 0xAF, 0xC1, 0x41, 0xC6, 0x24, + 0x1D, 0xF3, 0x76, 0x02, 0x48, 0x6B, 0xBA, 0x58, + 0xBC, 0xBB, 0xFE, 0xD3, 0x51, 0xC2, 0x68, 0x21, + 0x4B, 0x20, 0x4E, 0xAF, 0x8A, 0x0C, 0x74, 0x7F, + 0x5F, 0xB7, 0xAA, 0x43, 0xFC, 0x5A, 0x77, 0xA1, + 0x81, 0xCD, 0xBA, 0xE1, 0x31, 0x87, 0x1F, 0xA8, + 0x1F, 0x76, 0x30, 0x6C, 0xE0, 0x84, 0xCD, 0x14, + 0x4A, 0xDB, 0x67, 0xFD, 0x65, 0x8C, 0x35, 0xC0, + 0x91, 0x6C, 0x2B, 0xCF, 0x5B, 0x89, 0x29, 0x58, + 0x42, 0x9B, 0x65, 0xDB, 0x34, 0x7D, 0xD8, 0x31, + 0xC9, 0xB8, 0x0D, 0x07, 0xD1, 0x94, 0x60, 0x63, + 0x65, 0xDC, 0xB3, 0x70, 0x48, 0x46, 0x37, 0x18, + 0x4D, 0x5D, 0xE0, 0xAC, 0x77, 0xD0, 0x9E, 0xE1, + 0xD9, 0xB2, 0x2D, 0x09, 0xD6, 0xF8, 0x94, 0x96, + 0x7B, 0x43, 0xD9, 0x76, 0x36, 0xE6, 0x24, 0xA4, + 0x4A, 0xFF, 0x12, 0xFE, 0x30, 0x95, 0xD7, 0xCB, + 0xA9, 0xA0, 0x3A, 0xCA, 0xFC, 0x52, 0x57, 0xB8, + 0x20, 0x80, 0xF2, 0xD8, 0xAE, 0x3E, 0x18, 0xFC, + 0x0D, 0xE0, 0x9D, 0x01, 0x7B, 0x03, 0xAD, 0x6B, + 0xEE, 0xA4, 0xEC, 0x38, 0x40, 0xAC, 0x85, 0x42, + 0xF8, 0xCF, 0x93, 0x10, 0x8F, 0x8C, 0xFE, 0xF8, + 0x22, 0x64, 0xFC, 0xDD, 0x2C, 0xDD, 0x86, 0x97, + 0x5B, 0x3F, 0x8F, 0xDF, 0x1F, 0x58, 0x22, 0x08, + 0x26, 0x8A, 0x76, 0xE6, 0xC9, 0xFE, 0xDF, 0x42, + 0x90, 0x8D, 0x52, 0x78, 0xA2, 0xBF, 0xBD, 0x3F, + 0xD5, 0xD5, 0xDB, 0xAF, 0xDD, 0x5E, 0x2C, 0x2B, + 0x9F, 0x2E, 0xDC, 0xC1, 0xC4, 0x52, 0x96, 0x38, + 0x49, 0xCB, 0x34, 0xEC, 0x51, 0x00, 0x8D, 0x1B, + 0xF6, 0xDA, 0x50, 0xA0, 0xD1, 0x9D, 0x82, 0x34, + 0x5B, 0x78, 0x8C, 0x05, 0x40, 0xE1, 0x7B, 0x25, + 0xFF, 0xDC, 0xE8, 0xD4, 0x45, 0x3B, 0xBE, 0x75, + 0x1E, 0xDA, 0x96, 0xA4, 0x4C, 0x75, 0xFD, 0xD9, + 0x00, 0x81, 0x85, 0x7D, 0xC0, 0xF8, 0x26, 0x2A, + 0x30, 0x7B, 0x34, 0xCB, 0xEC, 0xD1, 0x56, 0x58, + 0x69, 0xA3, 0x14, 0xD6, 0x4C, 0x09, 0xDC, 0x9D, + 0x4A, 0x80, 0x26, 0x52, 0x2F, 0xDF, 0xE4, 0xCB, + 0x5B, 0x8B, 0x11, 0x05, 0xDA, 0xE0, 0xDB, 0x66, + 0xC8, 0x5B, 0xB4, 0x32, 0x1D, 0xBE, 0x76, 0x84, + 0xEB, 0x6B, 0x6F, 0x85, 0x87, 0xD8, 0x32, 0x0C, + 0x6D, 0xB3, 0x8D, 0xED, 0xD6, 0x18, 0x96, 0xED, + 0x51, 0xAB, 0x0C, 0x7F, 0x42, 0x8F, 0x19, 0xD2, + 0x55, 0xC6, 0xB0, 0xFD, 0xF5, 0x89, 0x51, 0xE5, + 0xCD, 0xB1, 0x96, 0x9C, 0xD9, 0xA7, 0x93, 0x4E, + 0xFD, 0xB9, 0xC8, 0x2E, 0x1E, 0x8D, 0x2A, 0x59, + 0xC9, 0xF7, 0x9D, 0xF1, 0xAA, 0x93, 0xE5, 0x07, + 0x1E, 0x3F, 0xAC, 0x73, 0x19, 0xFF, 0x68, 0x87, + 0x8C, 0xF2, 0x49, 0xDC, 0xBD, 0xCD, 0x10, 0x46, + 0x16, 0xCC, 0xC1, 0xC1, 0xFB, 0xD7, 0x85, 0x56, + 0x9F, 0x55, 0x87, 0x10, 0x44, 0x1B, 0x31, 0xCA, + 0xE3, 0x16, 0x7A, 0x4C, 0xD7, 0xDD, 0xD1, 0x86, + 0x26, 0xC5, 0x43, 0x62, 0x96, 0x20, 0x32, 0xE6, + 0xB7, 0xA2, 0x76, 0x05, 0x61, 0x96, 0xFC, 0x22, + 0x96, 0x7E, 0x90, 0x7C, 0x32, 0x0A, 0x7A, 0xF5, + 0x8C, 0xE3, 0xF5, 0x01, 0xC4, 0xCD, 0x31, 0x8A, + 0x70, 0x75, 0x04, 0xF1, 0xC2, 0x59, 0xE5, 0x07, + 0xA0, 0xD4, 0x7D, 0x25, 0x8E, 0x2F, 0x38, 0xE2, + 0x6A, 0x53, 0x41, 0x34, 0x7A, 0x06, 0xB5, 0x8B, + 0xB0, 0xBF, 0x21, 0xDE, 0xE6, 0x5F, 0x55, 0x6A, + 0xD4, 0x88, 0xA7, 0x36, 0xD4, 0xC6, 0x5C, 0x82, + 0xC6, 0x73, 0xC0, 0x60, 0xD7, 0xA6, 0xA0, 0x77, + 0x5C, 0xF8, 0xC3, 0x9A, 0xA1, 0x31, 0xFD, 0x64, + 0xDB, 0xB1, 0x7B, 0x72, 0x70, 0x4B, 0x7D, 0x1D, + 0x24, 0xBC, 0x5F, 0x84, 0x08, 0x3B, 0xF8, 0xA6, + 0x47, 0xEB, 0xED, 0xCF, 0xDD, 0xA0, 0x91, 0x14, + 0x26, 0x7D, 0x77, 0xCF, 0xBF, 0x39, 0x9B, 0xD9, + 0x2F, 0x3B, 0x2A, 0xA7, 0x2B, 0xBC, 0xF7, 0xDE, + 0x9D, 0x69, 0xBF, 0x90, 0xA4, 0xDE, 0x2C, 0xF8, + 0x24, 0x92, 0x7D, 0xE2, 0xB8, 0xBD, 0xF4, 0x6B, + 0x10, 0x9E, 0xD6, 0x08, 0x51, 0xC5, 0x9C, 0x44, + 0x8E, 0xCB, 0x44, 0x3F, 0x00, 0x26, 0x3C, 0x9C, + 0x25, 0xF4, 0x62, 0x74, 0xD1, 0x7C, 0x29, 0x4C, + 0xEB, 0xF2, 0x53, 0x7D, 0x8F, 0xEA, 0xBD, 0x78, + 0xEE, 0xBC, 0xBA, 0x72, 0x64, 0xA5, 0xB9, 0x45, + 0x08, 0xE0, 0xBF, 0x62, 0xEF, 0xC2, 0x1E, 0x06, + 0xE1, 0xE2, 0xFB, 0x14, 0x44, 0xC5, 0xAB, 0x6F, + 0x84, 0x7F, 0x52, 0x2F, 0x8A, 0xBE, 0xED, 0x04, + 0x6D, 0x6D, 0xDC, 0xFF, 0xBC, 0xB8, 0xC8, 0x1F, + 0xD0, 0x5D, 0x4D, 0x7F, 0x2E, 0x1B, 0xC9, 0x9B, + 0xEA, 0xF8, 0xC1, 0xAF, 0xE3, 0xE0, 0x5B, 0x36, + 0x90, 0xFE, 0xE4, 0xAA, 0x37, 0x5A, 0x3D, 0xCB, + 0x77, 0x57, 0x7C, 0xCC, 0x6E, 0x3E, 0xBE, 0x8A, + 0x98, 0x7C, 0x6D, 0x7E, 0x89, 0x60, 0x73, 0xC0, + 0xCC, 0x0C, 0x48, 0x25, 0x46, 0xB5, 0x39, 0xB4, + 0xFD, 0xF0, 0x4E, 0xED, 0x8E, 0x87, 0xF8, 0x5B, + 0x00, 0xBE, 0x43, 0xA6, 0x0B, 0x21, 0x7E, 0x96, + 0x88, 0x3B, 0x91, 0xD7, 0x88, 0x1A, 0xA0, 0xDD, + 0x3E, 0xBF, 0x5B, 0x0D, 0x08, 0xD0, 0x85, 0x4E, + 0xD4, 0x27, 0x8F, 0xC9, 0x02, 0xE0, 0x60, 0xEA, + 0x16, 0xFB, 0xC2, 0x54, 0xA5, 0x08, 0xC8, 0x6F, + 0x7A, 0xE7, 0x54, 0x93, 0xB8, 0xDD, 0xA0, 0x86, + 0xE9, 0xC1, 0xB2, 0x17, 0xF5, 0xC9, 0x11, 0x97, + 0x83, 0x66, 0x88, 0xCD, 0x2D, 0x0B, 0xB8, 0xE5, + 0x52, 0xD1, 0x13, 0x7A, 0xA7, 0xEB, 0xD5, 0xD5, + 0x60, 0x53, 0x8E, 0x9B, 0xB6, 0xB4, 0x1D, 0x06, + 0x90, 0xB0, 0x6C, 0x66, 0xD1, 0x57, 0x5B, 0x86, + 0x1C, 0x8A, 0x7D, 0x3A, 0x88, 0x4C, 0xC9, 0x88, + 0x1A, 0xC3, 0x00, 0x1F, 0x30, 0x0D, 0xF3, 0x47, + 0x62, 0x79, 0x85, 0x89, 0xF9, 0xEE, 0x5C, 0x92, + 0x43, 0x61, 0x53, 0xD8, 0xC7, 0x32, 0x55, 0x9B, + 0x33, 0x3D, 0x69, 0x8F, 0x3E, 0xC5, 0x82, 0x0E, + 0x8A, 0xA5, 0xF2, 0xE5, 0xA7, 0x69, 0xC2, 0xB4, + 0x7A, 0xFA, 0x27, 0x5F, 0xE4, 0x74, 0xAF, 0x81, + 0x37, 0xC7, 0x01, 0x9A, 0xF2, 0xE6, 0x0C, 0xA7, + 0x5E, 0xDB, 0xE4, 0x8F, 0x81, 0xA6, 0x51, 0xCE, + 0x6B, 0xAB, 0xD3, 0x37, 0x4C, 0x07, 0x72, 0xA8, + 0xAC, 0x36, 0x77, 0xB1, 0x0F, 0x54, 0x77, 0x17, + 0xC9, 0x67, 0x50, 0xDA, 0x44, 0x8B, 0xD9, 0xC7, + 0x93, 0x8C, 0x66, 0xCD, 0x6F, 0xB7, 0x5D, 0x73, + 0x2D, 0xAC, 0x83, 0x1A, 0xDC, 0xE9, 0x17, 0x6D, + 0x94, 0x85, 0x6E, 0x1B, 0xF6, 0x08, 0x38, 0xD0, + 0x9E, 0x63, 0x23, 0xA2, 0x7B, 0x16, 0x09, 0xF9, + 0xC1, 0x21, 0xF4, 0x98, 0xD2, 0xBB, 0x68, 0x58, + 0x18, 0xA0, 0x0D, 0xE7, 0xBA, 0x6B, 0x28, 0x47, + 0xC5, 0x16, 0x14, 0x9F, 0x35, 0x6E, 0xCE, 0xF0, + 0x4F, 0x34, 0xEA, 0x48, 0x35, 0x46, 0xFE, 0xEB, + 0x12, 0xEA, 0x40, 0x77, 0x62, 0x04, 0x30, 0xC3, + 0x9D, 0xBF, 0x47, 0xC0, 0x5E, 0xED, 0x5E, 0xD5, + 0x87, 0xFF, 0xF5, 0x92, 0x21, 0x7C, 0xA9, 0x5A, + 0x2C, 0x3D, 0x1E, 0x6F, 0x6F, 0xF9, 0xFF, 0x20, + 0x9F, 0x8B, 0x30, 0xA9, 0x9D, 0x56, 0xA3, 0x97, + 0x7A, 0x33, 0x17, 0x49, 0x0B, 0x2B, 0x00, 0x1F, + 0x43, 0xCD, 0x8D, 0xDD, 0x1D, 0x8F, 0xC1, 0x6A, + 0x3F, 0xA9, 0xB4, 0x31, 0x54, 0x62, 0x84, 0x5B, + 0x99, 0x5D, 0x2A, 0xB7, 0x6E, 0xA5, 0x39, 0xC7, + 0xF0, 0x4C, 0x31, 0x6C, 0x71, 0xD6, 0x00, 0xE1, + 0xAC, 0x4F, 0xD5, 0xC8, 0xC6, 0x34, 0x3B, 0xC8, + 0x05, 0x5F, 0x17, 0x00, 0xB4, 0x0E, 0xA2, 0xF1, + 0xAB, 0xE9, 0x4B, 0xE0, 0x06, 0x01, 0x3A, 0xA2, + 0x61, 0xF0, 0x72, 0x0A, 0xB7, 0x99, 0xD0, 0xFC, + 0x6D, 0xB5, 0xE9, 0xA4, 0xC3, 0xC5, 0xA7, 0xF8, + 0x2D, 0x70, 0xD2, 0x8E, 0x41, 0x0D, 0xD1, 0x64, + 0xE3, 0xE4, 0x61, 0xA4, 0x6E, 0x81, 0xFB, 0xDC, + 0xB8, 0x10, 0x84, 0x8B, 0xCE, 0xE0, 0x6F, 0x88, + 0x33, 0x25, 0x64, 0x6E, 0x1E, 0x2A, 0x69, 0x3F, + 0xA5, 0xDA, 0x7C, 0x25, 0xEB, 0x21, 0xC4, 0xEA, + 0xB8, 0x7D, 0xC7, 0x87, 0xA2, 0x67, 0x7C, 0xEB, + 0x6A, 0x26, 0xE1, 0x06, 0xFE, 0x78, 0xE1, 0x18, + 0xFF, 0x54, 0x71, 0x3E, 0x00, 0x59, 0x7B, 0xFA, + 0x52, 0x8C, 0x2A, 0xED, 0x06, 0x9A, 0x12, 0x6D, + 0xE3, 0x74, 0x6F, 0x06, 0x65, 0xE1, 0x75, 0x80, + 0x63, 0x0F, 0x70, 0x2F, 0xAB, 0xC0, 0xF1, 0xCD, + 0x7F, 0x57, 0xAA, 0x71, 0xF6, 0x38, 0xD8, 0xAF, + 0x37, 0xD3, 0xD9, 0xE0, 0xA7, 0xE9, 0x05, 0x5D, + 0xA3, 0xDF, 0x86, 0x48, 0x3F, 0x25, 0xDE, 0xBA, + 0x18, 0xCE, 0xF6, 0x99, 0xEB, 0x87, 0x70, 0xC7, + 0x85, 0x84, 0x79, 0x8A, 0xD8, 0x02, 0x8B, 0xAD, + 0xC5, 0x9D, 0x2A, 0xF9, 0xAE, 0xAE, 0x37, 0xEC, + 0x93, 0x91, 0x16, 0x10, 0x5F, 0x9F, 0x64, 0xEF, + 0x82, 0x78, 0xC6, 0x4D, 0xED, 0x3F, 0xD4, 0x33, + 0xA7, 0xB8, 0x82, 0x09, 0x16, 0xBE, 0xDC, 0x6B, + 0x7A, 0x75, 0x69, 0x8A, 0xDE, 0xD3, 0xFD, 0xE8, + 0x86, 0x75, 0x42, 0x83, 0x03, 0x57, 0x30, 0x70, + 0xA5, 0xA3, 0x85, 0x1F, 0x9F, 0x21, 0xEA, 0xC7, + 0x80, 0xFA, 0x8A, 0xA4, 0x02, 0x3E, 0x39, 0x11, + 0x48, 0x7D, 0x85, 0x2A, 0x53, 0x77, 0x43, 0x5A, + 0x5F, 0xFF, 0x9C, 0x60, 0x4B, 0x5D, 0x95, 0xB0, + 0x96, 0x8A, 0xE0, 0xEC, 0xF4, 0x43, 0x1B, 0x10, + 0x3F, 0xA6, 0xBA, 0x71, 0xC4, 0xDC, 0x81, 0x73, + 0xA2, 0xDE, 0x1F, 0x79, 0xDD, 0xB6, 0x0D, 0x2D, + 0x0C, 0x8E, 0x56, 0x55, 0xD0, 0x94, 0x44, 0x29, + 0x16, 0x92, 0x99, 0x2D, 0x99, 0xFC, 0x48, 0xF2, + 0x16, 0x0E, 0xC0, 0xAC, 0xE4, 0xC4, 0x92, 0x07, + 0xBB, 0xB7, 0x6D, 0x7F, 0x2A, 0x85, 0xE1, 0x81, + 0x02, 0xB9, 0x5A, 0x51, 0x45, 0x88, 0xF5, 0x9F, + 0x16, 0x2D, 0x33, 0xCE, 0xD6, 0x18, 0x07, 0x03, + 0xED, 0xC3, 0x6C, 0x8B, 0x33, 0x94, 0x88, 0x81, + 0x0D, 0x2E, 0xAE, 0x96, 0x25, 0xCE, 0xE3, 0x83, + 0x27, 0x1C, 0x71, 0x72, 0xEE, 0xD6, 0xB5, 0x48, + 0x69, 0x60, 0xE8, 0x99, 0x18, 0x74, 0xB0, 0x13, + 0x53, 0x59, 0x3D, 0x70, 0x70, 0xBD, 0xEB, 0x7A, + 0x9F, 0x92, 0x29, 0xAB, 0x77, 0x0E, 0xEB, 0x46, + 0x37, 0x8D, 0x57, 0xD9, 0x56, 0xDF, 0x7A, 0x86, + 0x40, 0x04, 0x02, 0x98, 0xF7, 0x00, 0xF4, 0x41, + 0x5B, 0xDD, 0x3A, 0x96, 0x15, 0xA4, 0x65, 0xDB, + 0x01, 0x28, 0x22, 0x12, 0xCF, 0x1A, 0xEC, 0x4B, + 0x0B, 0x8C, 0xB3, 0xB1, 0x7E, 0x5E, 0xFA, 0x28, + 0x6C, 0x6C, 0x04, 0x5B, 0x43, 0x9C, 0x74, 0x9F, + 0xE1, 0xD4, 0x50, 0x75, 0xD8, 0xE7, 0xA0, 0x0F, + 0xBE, 0x84, 0x48, 0xFC, 0xAC, 0xAA, 0x15, 0x3D, + 0x69, 0x70, 0x9D, 0x9F, 0xF2, 0xB9, 0x7C, 0xDB, + 0x26, 0xC0, 0xC3, 0x79, 0x28, 0x7C, 0xE6, 0x48, + 0x61, 0xAD, 0xD7, 0x89, 0xD0, 0xC8, 0x93, 0x9A, + 0x14, 0x21, 0xB0, 0x85, 0xD6, 0x23, 0x4C, 0xE1, + 0xA7, 0x49, 0xDE, 0x3D, 0xCB, 0xE8, 0xE0, 0x61, + 0x5C, 0xB3, 0xBC, 0xDC, 0x6A, 0x81, 0xA5, 0xC4, + 0x9D, 0x92, 0x85, 0x74, 0x5F, 0x1C, 0xA8, 0xA0, + 0x64, 0x1E, 0x32, 0x68, 0x83, 0x41, 0x93, 0x34, + 0x82, 0x18, 0x3E, 0x24, 0x5C, 0x1F, 0x9C, 0xD2, + 0x80, 0x28, 0xC3, 0x8A, 0x23, 0x18, 0x1A, 0x44, + 0x5A, 0xA6, 0xEA, 0xCC, 0xE2, 0x06, 0x06, 0xE6, + 0xF7, 0xF1, 0xDF, 0x70, 0x68, 0x83, 0xCD, 0xA5, + 0x2F, 0x3F, 0x2B, 0x68, 0xDE, 0x26, 0xDD, 0x37, + 0x71, 0xE9, 0x50, 0x03, 0x2C, 0xC7, 0x20, 0x0C, + 0x20, 0x23, 0xC8, 0x24, 0x96, 0x50, 0x82, 0x82, + 0xCD, 0x3B, 0xC4, 0x7F, 0xEC, 0xE5, 0xD9, 0x7C, + 0xA1, 0xCE, 0x35, 0x74, 0x4D, 0x03, 0xD7, 0xA4, + 0x28, 0xB7, 0xAF, 0x12, 0xB0, 0xCB, 0x8E, 0x65, + 0x7C, 0x01, 0x30, 0xF8, 0xA3, 0xA2, 0x54, 0x97, + 0x6E, 0xC8, 0xF7, 0xDC, 0xCF, 0x3A, 0xBF, 0x31, + 0xF4, 0xB0, 0xB3, 0xF7, 0x12, 0x6F, 0xFC, 0x48, + 0x77, 0xF3, 0xD1, 0xA0, 0x66, 0xD2, 0x6A, 0x23, + 0x2F, 0xA9, 0x99, 0x21, 0x61, 0x22, 0x54, 0x11, + 0xED, 0x7D, 0xDB, 0x93, 0xC3, 0x5C, 0x6A, 0x37, + 0x7F, 0x30, 0xCF, 0x22, 0xAA, 0x39, 0x2D, 0x5C, + 0x4F, 0xEE, 0x4F, 0x73, 0xC9, 0xEF, 0x6E, 0xD3, + 0xA0, 0x27, 0x97, 0x14, 0x52, 0x3B, 0x19, 0x18, + 0x65, 0x1E, 0x9B, 0x0F, 0xFA, 0x55, 0x0F, 0x16, + 0x10, 0x53, 0xEE, 0x78, 0x01, 0x39, 0x7B, 0x4C, + 0x18, 0x49, 0x98, 0x7C, 0x17, 0x9E, 0x76, 0x3E, + 0xCC, 0x60, 0xA4, 0xE4, 0xC5, 0x36, 0xB7, 0xE2, + 0x66, 0x3E, 0x4C, 0x72, 0x67, 0x14, 0xB0, 0x2E, + 0xC3, 0x16, 0x9E, 0x84, 0x07, 0xBA, 0x59, 0x2B, + 0x0E, 0xB8, 0x46, 0xF3, 0x69, 0x2D, 0xD4, 0x46, + 0x51, 0xEE, 0x08, 0x47, 0x21, 0xCA, 0xC0, 0xFE, + 0x1C, 0xCC, 0x30, 0x27, 0x07, 0xEF, 0xE2, 0x46, + 0x64, 0xE0, 0x5B, 0xDC, 0x69, 0xC8, 0x39, 0x04, + 0xAC, 0xB8, 0xCF, 0x97, 0x12, 0x1C, 0x7E, 0x5C, + 0x6D, 0xB2, 0x7E, 0xA2, 0x8E, 0x77, 0xBC, 0xDA, + 0x55, 0xD2, 0xBC, 0xC1, 0xC5, 0xFC, 0xC5, 0x52, + 0xAB, 0x83, 0xBC, 0xE4, 0x23, 0x8C, 0xA1, 0x80, + 0x62, 0xC2, 0xD2, 0x3A, 0x8B, 0x80, 0x0C, 0x82, + 0x09, 0xC3, 0xA4, 0xCD, 0xDA, 0xF1, 0x16, 0x16, + 0x57, 0x8A, 0x84, 0x55, 0x66, 0xFC, 0x28, 0x9A, + 0x8E, 0x3C, 0x88, 0xF5, 0x54, 0xC4, 0x92, 0x60, + 0x71, 0xDA, 0x89, 0x32, 0x6B, 0xEB, 0x25, 0x9A, + 0x0E, 0x1F, 0x6D, 0x84, 0x4E, 0xBF, 0x7B, 0x28, + 0x1F, 0x9F, 0xC3, 0x74, 0x3A, 0x65, 0x49, 0x9E, + 0x73, 0x94, 0x63, 0x48, 0x18, 0xE1, 0x33, 0xFA, + 0xC6, 0x64, 0xFA, 0x0C, 0x88, 0xF1, 0x01, 0xCE, + 0xC3, 0xFE, 0xD8, 0x79, 0x29, 0x50, 0xBF, 0x6E, + 0x49, 0x74, 0x84, 0x9E, 0x1E, 0xBD, 0x27, 0x69, + 0x1B, 0xF5, 0x51, 0x9B, 0x70, 0x2E, 0x1A, 0xA4, + 0xB3, 0xDB, 0xAD, 0xAB, 0x5D, 0xFA, 0x34, 0xFB, + 0x0E, 0xD9, 0xD4, 0xA9, 0xDF, 0x4B, 0x6B, 0x63, + 0xCA, 0x71, 0x65, 0xE2, 0xA9, 0x08, 0x27, 0x40, + 0x8C, 0x48, 0x2D, 0x9D, 0xBC, 0x97, 0x24, 0x68, + 0x58, 0x4F, 0x42, 0x37, 0x60, 0x04, 0xE7, 0x8B, + 0xE0, 0x67, 0x00, 0x9E, 0x43, 0x30, 0x4B, 0xED, + 0xC1, 0x07, 0xA4, 0xE2, 0xA8, 0x9C, 0xAF, 0x18, + 0x5C, 0x9B, 0xB7, 0xE9, 0xFD, 0x2C, 0xB9, 0x2A, + 0xEF, 0x36, 0x3B, 0xD7, 0x96, 0xF3, 0x60, 0x4E, + 0xDC, 0x08, 0xA7, 0xC5, 0x45, 0xB8, 0x37, 0x02, + 0xD3, 0xCF, 0x80, 0x88, 0x52, 0x10, 0x3E, 0x01, + 0x3B, 0xFE, 0xA1, 0x61, 0xAF, 0x25, 0x0B, 0xCC, + 0x72, 0x77, 0x1D, 0x0C, 0x48, 0x4D, 0xD5, 0x55, + 0x41, 0x72, 0x3A, 0x21, 0x0D, 0x68, 0x3B, 0x99, + 0x8C, 0xDB, 0xAF, 0x3D, 0x9A, 0x5E, 0x71, 0x78, + 0x6F, 0x1C, 0xF4, 0x7B, 0x86, 0x22, 0x51, 0xB5, + 0x16, 0x33, 0x60, 0x87, 0x9A, 0xC0, 0x20, 0x2D, + 0x33, 0x49, 0x51, 0x54, 0x5C, 0x5F, 0x71, 0x76, + 0x7C, 0x8F, 0x96, 0xA9, 0xD6, 0xE4, 0xF2, 0x1F, + 0x28, 0x43, 0x4D, 0x7E, 0x96, 0xBB, 0xC5, 0xE3, + 0xEF, 0xF3, 0xFD, 0x02, 0x0C, 0x17, 0x23, 0x3E, + 0x7F, 0x99, 0xB0, 0xE3, 0xE8, 0xF5, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x17, 0x23, 0x2E + }; +#endif +#ifndef WOLFSSL_NO_ML_DSA_65 + static const byte sk_65[] = { + 0xF2, 0x6B, 0xFE, 0x12, 0x68, 0x86, 0xF4, 0x82, + 0x22, 0x94, 0x4D, 0x02, 0x18, 0xFA, 0xC1, 0x7C, + 0xD8, 0xA9, 0xCC, 0x6D, 0x67, 0xA0, 0x23, 0xFD, + 0xC0, 0x7A, 0xFF, 0xC2, 0xD0, 0x25, 0xF7, 0x70, + 0x63, 0x85, 0x0D, 0x88, 0x0E, 0x98, 0xFE, 0xE5, + 0x02, 0xE0, 0x17, 0x32, 0x70, 0x00, 0xCC, 0xAF, + 0x61, 0x45, 0x73, 0xB3, 0x5A, 0xDE, 0xFE, 0xBC, + 0xAC, 0xEE, 0xA4, 0xB2, 0xC4, 0xD0, 0x45, 0xE5, + 0xBB, 0xFD, 0x3E, 0x5A, 0x72, 0xE3, 0x71, 0xAD, + 0x83, 0xB9, 0x94, 0x98, 0x77, 0xD8, 0xE6, 0x56, + 0xD4, 0x6B, 0x47, 0x75, 0x0F, 0x73, 0x0F, 0x96, + 0xDB, 0x43, 0x0B, 0x18, 0x60, 0x88, 0x67, 0x5D, + 0x9A, 0x9B, 0xD7, 0x8E, 0x47, 0xB8, 0x9D, 0x04, + 0xA8, 0x51, 0x7E, 0xD2, 0x22, 0x06, 0x95, 0x33, + 0x9F, 0x99, 0xA9, 0x7F, 0x35, 0x3C, 0xE4, 0x20, + 0x47, 0x77, 0x20, 0x9F, 0x5F, 0x3C, 0x9E, 0x9A, + 0x36, 0x14, 0x54, 0x01, 0x57, 0x48, 0x60, 0x50, + 0x75, 0x28, 0x64, 0x61, 0x72, 0x60, 0x54, 0x20, + 0x75, 0x48, 0x60, 0x32, 0x73, 0x85, 0x34, 0x24, + 0x68, 0x63, 0x71, 0x73, 0x81, 0x26, 0x71, 0x68, + 0x32, 0x61, 0x24, 0x71, 0x14, 0x18, 0x26, 0x15, + 0x05, 0x77, 0x36, 0x27, 0x50, 0x35, 0x21, 0x82, + 0x50, 0x15, 0x31, 0x47, 0x48, 0x24, 0x43, 0x76, + 0x18, 0x85, 0x66, 0x18, 0x05, 0x64, 0x27, 0x01, + 0x06, 0x06, 0x01, 0x45, 0x42, 0x60, 0x80, 0x68, + 0x25, 0x08, 0x08, 0x36, 0x13, 0x05, 0x04, 0x32, + 0x34, 0x87, 0x00, 0x70, 0x71, 0x70, 0x02, 0x51, + 0x37, 0x15, 0x08, 0x28, 0x25, 0x72, 0x61, 0x67, + 0x08, 0x52, 0x63, 0x44, 0x07, 0x88, 0x60, 0x42, + 0x03, 0x17, 0x24, 0x64, 0x80, 0x08, 0x70, 0x23, + 0x56, 0x41, 0x46, 0x17, 0x46, 0x01, 0x57, 0x74, + 0x02, 0x76, 0x31, 0x64, 0x73, 0x83, 0x50, 0x62, + 0x72, 0x61, 0x62, 0x75, 0x45, 0x73, 0x46, 0x33, + 0x65, 0x14, 0x36, 0x46, 0x12, 0x26, 0x04, 0x34, + 0x02, 0x81, 0x20, 0x34, 0x41, 0x88, 0x26, 0x77, + 0x33, 0x40, 0x18, 0x58, 0x03, 0x41, 0x16, 0x58, + 0x88, 0x04, 0x88, 0x32, 0x71, 0x05, 0x85, 0x83, + 0x42, 0x55, 0x34, 0x20, 0x18, 0x46, 0x12, 0x54, + 0x28, 0x03, 0x67, 0x10, 0x84, 0x31, 0x76, 0x00, + 0x40, 0x85, 0x46, 0x71, 0x71, 0x56, 0x00, 0x50, + 0x15, 0x33, 0x43, 0x13, 0x37, 0x57, 0x13, 0x86, + 0x43, 0x77, 0x85, 0x57, 0x54, 0x81, 0x75, 0x60, + 0x37, 0x31, 0x28, 0x52, 0x20, 0x78, 0x65, 0x53, + 0x76, 0x10, 0x84, 0x87, 0x57, 0x13, 0x66, 0x03, + 0x56, 0x81, 0x36, 0x66, 0x68, 0x41, 0x55, 0x64, + 0x63, 0x70, 0x26, 0x21, 0x02, 0x30, 0x28, 0x35, + 0x02, 0x45, 0x88, 0x80, 0x02, 0x06, 0x44, 0x58, + 0x24, 0x13, 0x88, 0x83, 0x22, 0x34, 0x22, 0x50, + 0x47, 0x11, 0x01, 0x86, 0x45, 0x60, 0x67, 0x36, + 0x82, 0x22, 0x18, 0x74, 0x11, 0x60, 0x58, 0x60, + 0x87, 0x26, 0x31, 0x85, 0x12, 0x70, 0x84, 0x83, + 0x88, 0x68, 0x88, 0x51, 0x00, 0x55, 0x02, 0x57, + 0x77, 0x42, 0x13, 0x23, 0x14, 0x04, 0x76, 0x80, + 0x72, 0x25, 0x51, 0x56, 0x10, 0x63, 0x12, 0x21, + 0x03, 0x86, 0x27, 0x30, 0x28, 0x12, 0x01, 0x37, + 0x48, 0x32, 0x53, 0x86, 0x15, 0x46, 0x50, 0x05, + 0x34, 0x87, 0x61, 0x04, 0x88, 0x18, 0x35, 0x85, + 0x44, 0x46, 0x24, 0x67, 0x43, 0x83, 0x02, 0x26, + 0x56, 0x41, 0x41, 0x77, 0x86, 0x56, 0x41, 0x75, + 0x25, 0x61, 0x36, 0x05, 0x47, 0x65, 0x00, 0x14, + 0x32, 0x38, 0x16, 0x81, 0x06, 0x30, 0x61, 0x25, + 0x16, 0x30, 0x50, 0x44, 0x13, 0x08, 0x75, 0x00, + 0x50, 0x20, 0x68, 0x21, 0x55, 0x74, 0x61, 0x18, + 0x62, 0x05, 0x15, 0x51, 0x08, 0x24, 0x01, 0x13, + 0x81, 0x33, 0x64, 0x83, 0x23, 0x00, 0x55, 0x73, + 0x62, 0x40, 0x61, 0x75, 0x15, 0x78, 0x21, 0x14, + 0x13, 0x64, 0x21, 0x47, 0x07, 0x76, 0x80, 0x76, + 0x76, 0x17, 0x75, 0x50, 0x61, 0x14, 0x40, 0x82, + 0x87, 0x83, 0x50, 0x87, 0x30, 0x86, 0x35, 0x30, + 0x28, 0x20, 0x10, 0x01, 0x48, 0x18, 0x34, 0x65, + 0x23, 0x10, 0x25, 0x42, 0x40, 0x22, 0x54, 0x34, + 0x35, 0x33, 0x71, 0x70, 0x20, 0x61, 0x55, 0x74, + 0x33, 0x01, 0x02, 0x60, 0x58, 0x24, 0x80, 0x12, + 0x46, 0x41, 0x38, 0x10, 0x76, 0x67, 0x34, 0x63, + 0x48, 0x85, 0x06, 0x48, 0x04, 0x23, 0x22, 0x66, + 0x57, 0x71, 0x68, 0x18, 0x04, 0x32, 0x01, 0x31, + 0x01, 0x55, 0x22, 0x27, 0x55, 0x72, 0x10, 0x00, + 0x43, 0x88, 0x76, 0x62, 0x84, 0x77, 0x07, 0x77, + 0x14, 0x07, 0x20, 0x53, 0x74, 0x17, 0x51, 0x17, + 0x66, 0x84, 0x47, 0x83, 0x61, 0x03, 0x52, 0x10, + 0x05, 0x40, 0x46, 0x55, 0x61, 0x47, 0x26, 0x70, + 0x40, 0x22, 0x10, 0x34, 0x41, 0x01, 0x03, 0x48, + 0x33, 0x05, 0x72, 0x32, 0x75, 0x82, 0x45, 0x85, + 0x20, 0x70, 0x80, 0x82, 0x20, 0x23, 0x62, 0x81, + 0x15, 0x47, 0x80, 0x23, 0x67, 0x23, 0x73, 0x34, + 0x44, 0x33, 0x85, 0x10, 0x05, 0x50, 0x30, 0x03, + 0x48, 0x13, 0x01, 0x36, 0x45, 0x11, 0x06, 0x33, + 0x82, 0x22, 0x78, 0x75, 0x42, 0x02, 0x40, 0x45, + 0x04, 0x47, 0x43, 0x05, 0x30, 0x44, 0x42, 0x02, + 0x28, 0x26, 0x64, 0x24, 0x74, 0x75, 0x86, 0x11, + 0x85, 0x43, 0x25, 0x46, 0x10, 0x62, 0x82, 0x71, + 0x08, 0x27, 0x45, 0x13, 0x73, 0x18, 0x84, 0x73, + 0x51, 0x51, 0x67, 0x14, 0x70, 0x11, 0x07, 0x08, + 0x62, 0x16, 0x25, 0x27, 0x36, 0x68, 0x44, 0x01, + 0x18, 0x63, 0x74, 0x50, 0x31, 0x13, 0x43, 0x65, + 0x80, 0x11, 0x16, 0x52, 0x86, 0x42, 0x51, 0x81, + 0x51, 0x17, 0x05, 0x68, 0x05, 0x73, 0x60, 0x37, + 0x63, 0x85, 0x86, 0x11, 0x23, 0x23, 0x38, 0x13, + 0x87, 0x48, 0x82, 0x74, 0x71, 0x81, 0x87, 0x65, + 0x58, 0x26, 0x60, 0x34, 0x76, 0x16, 0x15, 0x24, + 0x06, 0x78, 0x16, 0x40, 0x03, 0x45, 0x72, 0x31, + 0x63, 0x73, 0x31, 0x85, 0x02, 0x66, 0x44, 0x36, + 0x24, 0x82, 0x56, 0x38, 0x86, 0x10, 0x40, 0x54, + 0x72, 0x70, 0x24, 0x22, 0x72, 0x78, 0x47, 0x07, + 0x86, 0x30, 0x48, 0x72, 0x84, 0x57, 0x06, 0x34, + 0x78, 0x37, 0x63, 0x25, 0x56, 0x64, 0x81, 0x30, + 0x62, 0x77, 0x22, 0x84, 0x20, 0x10, 0x74, 0x25, + 0x04, 0x21, 0x76, 0x47, 0x72, 0x35, 0x05, 0x06, + 0x22, 0x50, 0x34, 0x11, 0x26, 0x67, 0x03, 0x05, + 0x42, 0x04, 0x16, 0x01, 0x27, 0x17, 0x86, 0x67, + 0x70, 0x51, 0x53, 0x13, 0x12, 0x62, 0x03, 0x25, + 0x05, 0x38, 0x37, 0x44, 0x02, 0x66, 0x84, 0x74, + 0x14, 0x40, 0x35, 0x20, 0x40, 0x30, 0x44, 0x64, + 0x27, 0x50, 0x77, 0x47, 0x06, 0x15, 0x84, 0x48, + 0x13, 0x14, 0x32, 0x48, 0x11, 0x74, 0x80, 0x68, + 0x85, 0x81, 0x17, 0x67, 0x38, 0x22, 0x76, 0x16, + 0x18, 0x44, 0x55, 0x47, 0x85, 0x36, 0x44, 0x11, + 0x52, 0x01, 0x81, 0x50, 0x41, 0x00, 0x00, 0x25, + 0x83, 0x41, 0x62, 0x22, 0x12, 0x54, 0x88, 0x77, + 0x70, 0x48, 0x84, 0x25, 0x77, 0x75, 0x40, 0x16, + 0x46, 0x24, 0x88, 0x81, 0x65, 0x70, 0x02, 0x66, + 0x28, 0x64, 0x12, 0x40, 0x30, 0x60, 0x53, 0x06, + 0x44, 0x02, 0x48, 0x78, 0x75, 0x68, 0x21, 0x23, + 0x30, 0x05, 0x81, 0x17, 0x72, 0x66, 0x88, 0x71, + 0x50, 0x25, 0x03, 0x51, 0x42, 0x27, 0x20, 0x81, + 0x03, 0x52, 0x73, 0x53, 0x63, 0x57, 0x13, 0x60, + 0x41, 0x20, 0x47, 0x12, 0x55, 0x57, 0x58, 0x16, + 0x38, 0x63, 0x21, 0x34, 0x51, 0x76, 0x33, 0x26, + 0x70, 0x41, 0x18, 0x11, 0x07, 0x37, 0x16, 0x12, + 0x01, 0x14, 0x28, 0x56, 0x78, 0x10, 0x86, 0x24, + 0x24, 0x32, 0x01, 0x13, 0x57, 0x53, 0x46, 0x46, + 0x24, 0x05, 0x20, 0x16, 0x56, 0x83, 0x30, 0x30, + 0x61, 0x20, 0x75, 0x07, 0x05, 0x74, 0x14, 0x17, + 0x43, 0x72, 0x23, 0x04, 0x18, 0x61, 0x50, 0x13, + 0x67, 0x31, 0x75, 0x36, 0x71, 0x02, 0x38, 0x74, + 0x21, 0x80, 0x20, 0x48, 0x66, 0x23, 0x52, 0x54, + 0x77, 0x27, 0x45, 0x73, 0x23, 0x88, 0x60, 0x50, + 0x88, 0x82, 0x70, 0x23, 0x72, 0x08, 0x44, 0x66, + 0x44, 0x36, 0x12, 0x57, 0x66, 0x14, 0x25, 0x12, + 0x17, 0x34, 0x64, 0x82, 0x01, 0x54, 0x61, 0x57, + 0x50, 0x31, 0x65, 0x64, 0x75, 0x44, 0x76, 0x48, + 0x16, 0x44, 0x46, 0x55, 0x80, 0x64, 0x26, 0x53, + 0x27, 0x22, 0x10, 0x87, 0x84, 0x03, 0x15, 0x35, + 0x15, 0x20, 0x86, 0x14, 0x04, 0x03, 0x26, 0x43, + 0x31, 0x43, 0x31, 0x45, 0x46, 0x34, 0x36, 0x87, + 0x44, 0x41, 0x21, 0x77, 0x61, 0x20, 0x85, 0x06, + 0x28, 0x51, 0x15, 0x62, 0x77, 0x20, 0x38, 0x58, + 0x78, 0x27, 0x12, 0x22, 0x46, 0x71, 0x51, 0x38, + 0x11, 0x15, 0x40, 0x03, 0x78, 0x36, 0x15, 0x57, + 0x34, 0x28, 0x53, 0x21, 0x37, 0x35, 0x04, 0x76, + 0x00, 0x56, 0x72, 0x48, 0x46, 0x01, 0x56, 0x67, + 0x62, 0x36, 0x14, 0x51, 0x23, 0x54, 0x32, 0x35, + 0x82, 0x83, 0x21, 0x60, 0x38, 0x62, 0x21, 0x03, + 0x62, 0x76, 0x40, 0x34, 0x66, 0x88, 0x50, 0x73, + 0x00, 0x53, 0x87, 0x31, 0x37, 0x50, 0x11, 0x32, + 0x86, 0x52, 0x18, 0x64, 0x16, 0x63, 0x48, 0x71, + 0x70, 0x47, 0x24, 0x85, 0x31, 0x86, 0x60, 0x86, + 0x33, 0x52, 0x85, 0x82, 0x68, 0x17, 0x70, 0x88, + 0x84, 0x56, 0x52, 0x77, 0x04, 0x48, 0x22, 0x22, + 0x54, 0x57, 0x20, 0x31, 0x76, 0x47, 0x26, 0x25, + 0x04, 0x35, 0x38, 0x44, 0x55, 0x21, 0x14, 0x02, + 0x13, 0x64, 0x74, 0x87, 0x68, 0x68, 0x73, 0x05, + 0x22, 0x45, 0x54, 0x45, 0x83, 0x46, 0x64, 0x54, + 0x80, 0x07, 0x32, 0x87, 0x52, 0x43, 0x54, 0x54, + 0x14, 0x73, 0x24, 0x87, 0x36, 0x41, 0x74, 0x84, + 0x06, 0x35, 0x13, 0x40, 0x61, 0x54, 0x21, 0x31, + 0x48, 0x63, 0x05, 0x74, 0x24, 0x84, 0x74, 0x76, + 0x11, 0x10, 0x16, 0x63, 0x77, 0x12, 0x26, 0x61, + 0x31, 0x28, 0x70, 0x34, 0x25, 0x01, 0x30, 0x76, + 0x76, 0x06, 0x21, 0x58, 0x42, 0x87, 0x31, 0x72, + 0x76, 0x03, 0x76, 0x26, 0x78, 0x05, 0x88, 0x25, + 0x25, 0x86, 0x17, 0x02, 0x85, 0x88, 0x76, 0x20, + 0x36, 0x57, 0x30, 0x81, 0x83, 0x61, 0x05, 0x80, + 0x21, 0x45, 0x74, 0x01, 0x12, 0x74, 0x51, 0x28, + 0x77, 0x26, 0x30, 0x14, 0x54, 0x84, 0x13, 0x78, + 0x06, 0x00, 0x12, 0x64, 0x00, 0x37, 0x44, 0x68, + 0x40, 0x57, 0x05, 0x27, 0x07, 0x41, 0x56, 0x22, + 0x31, 0x40, 0x23, 0x26, 0x55, 0x42, 0x55, 0x16, + 0x02, 0x65, 0x32, 0x16, 0x33, 0x44, 0x46, 0x48, + 0x04, 0x52, 0x06, 0x53, 0x44, 0x40, 0x11, 0x28, + 0x46, 0x67, 0x56, 0x81, 0x72, 0x75, 0x51, 0x38, + 0x21, 0x86, 0x46, 0x03, 0x22, 0x87, 0x21, 0x70, + 0x68, 0x50, 0x75, 0x13, 0x11, 0x44, 0x35, 0x12, + 0x60, 0x02, 0x13, 0x47, 0x18, 0x38, 0x78, 0x86, + 0x38, 0x58, 0x45, 0x57, 0x23, 0x03, 0x88, 0x66, + 0x56, 0x82, 0x18, 0x31, 0x20, 0x08, 0x61, 0x47, + 0x78, 0x08, 0x68, 0x37, 0x21, 0x04, 0x65, 0x47, + 0x58, 0x70, 0x34, 0x58, 0x73, 0x24, 0x22, 0x30, + 0x66, 0x05, 0x01, 0x28, 0x87, 0x85, 0x77, 0x74, + 0x23, 0x86, 0x65, 0x84, 0x85, 0x57, 0x85, 0x63, + 0x06, 0x55, 0x61, 0x75, 0x46, 0x22, 0x87, 0x00, + 0x18, 0x53, 0x08, 0x03, 0x07, 0x50, 0x42, 0x70, + 0xFC, 0xB8, 0x7B, 0x22, 0x3D, 0x24, 0xAE, 0x5D, + 0xB1, 0x89, 0x04, 0x21, 0xC3, 0xFF, 0x1D, 0x59, + 0xB8, 0x4B, 0x19, 0xE2, 0x4D, 0x14, 0x36, 0x99, + 0x19, 0x1C, 0x7E, 0x9A, 0x46, 0x48, 0x42, 0x20, + 0x6B, 0xBA, 0x24, 0x7E, 0x8C, 0x6B, 0x27, 0xBA, + 0x26, 0xE6, 0x8A, 0xD5, 0xA7, 0x1D, 0x03, 0x61, + 0xCD, 0x5C, 0x74, 0xCE, 0x50, 0xC2, 0xCE, 0xF1, + 0x91, 0x31, 0xEF, 0x54, 0x66, 0x23, 0x7F, 0xFE, + 0xF7, 0xFE, 0x6B, 0x5F, 0xD1, 0x98, 0x23, 0x8E, + 0x1C, 0xA0, 0xB1, 0x01, 0x30, 0xC6, 0x29, 0xCC, + 0x91, 0x91, 0xF5, 0x78, 0x6F, 0x5C, 0xD6, 0x28, + 0xA4, 0x22, 0x56, 0xCB, 0x6F, 0xC7, 0xD7, 0x09, + 0x56, 0x88, 0xAF, 0x1B, 0xC8, 0x43, 0x51, 0xA4, + 0x7B, 0x4B, 0x38, 0x2E, 0xF6, 0x1F, 0xD6, 0x5C, + 0x9E, 0xC2, 0x26, 0xF4, 0x2B, 0x0A, 0x19, 0x7C, + 0x6A, 0xD8, 0xF0, 0xB0, 0x15, 0xD0, 0xB1, 0xC7, + 0xE0, 0x14, 0x28, 0x95, 0x6A, 0x9B, 0xB2, 0xDE, + 0x9A, 0x97, 0xE5, 0x75, 0x66, 0xF8, 0xF5, 0x66, + 0x86, 0xA1, 0xF4, 0x68, 0x0C, 0xEC, 0xEA, 0x87, + 0x3B, 0x69, 0x1C, 0xF8, 0xBD, 0x63, 0xAB, 0x73, + 0x73, 0xBA, 0xE8, 0x09, 0x5B, 0xA7, 0x76, 0x3E, + 0x50, 0xD6, 0x83, 0x9D, 0x00, 0x35, 0xBB, 0xFB, + 0x91, 0xBA, 0x60, 0x72, 0x17, 0x98, 0xFB, 0x2C, + 0x80, 0x2C, 0x60, 0x3A, 0x08, 0xA1, 0x24, 0x05, + 0xE0, 0xB5, 0x20, 0xEA, 0x41, 0x43, 0x8F, 0xEA, + 0xEF, 0xA5, 0x62, 0xDC, 0x78, 0x92, 0xF4, 0x58, + 0x9F, 0x8D, 0x2B, 0x96, 0x5E, 0xE5, 0x49, 0x73, + 0xA7, 0x2C, 0x8D, 0x33, 0x5C, 0x62, 0x61, 0x98, + 0x80, 0x64, 0x13, 0x31, 0x03, 0x10, 0xE3, 0x2E, + 0xFE, 0x6B, 0x39, 0xB5, 0xCF, 0xB1, 0xD1, 0x33, + 0xAD, 0xE0, 0x1B, 0xCE, 0x94, 0x21, 0x6C, 0xF4, + 0xCD, 0x8F, 0x86, 0x43, 0x03, 0x1D, 0xB8, 0xC2, + 0x47, 0xB5, 0x73, 0x21, 0xCA, 0x1E, 0xFB, 0xB8, + 0x53, 0x63, 0x7D, 0x0C, 0x57, 0x52, 0x14, 0xFC, + 0x77, 0xA5, 0xA6, 0x84, 0xD5, 0x0A, 0xBF, 0xE4, + 0xE9, 0x71, 0x99, 0x8E, 0x06, 0x6E, 0x50, 0x24, + 0xDA, 0x02, 0x76, 0x8A, 0xED, 0xE1, 0x3E, 0x83, + 0xF0, 0x51, 0x54, 0xA9, 0x99, 0x29, 0x48, 0x42, + 0x7A, 0xA9, 0x8C, 0x87, 0x42, 0x51, 0xAF, 0x56, + 0x94, 0x23, 0x53, 0x89, 0x44, 0xFA, 0xD8, 0x93, + 0xFC, 0x65, 0x6E, 0x9C, 0xED, 0x80, 0x6A, 0x85, + 0xD9, 0xC3, 0x36, 0x71, 0x02, 0x25, 0x29, 0x36, + 0x8E, 0x7E, 0xC7, 0x0C, 0x9E, 0xE9, 0x74, 0x30, + 0x1C, 0x08, 0xCB, 0xE6, 0xAC, 0x5E, 0x88, 0xE6, + 0x37, 0x79, 0x5C, 0xB2, 0xA2, 0x15, 0xFF, 0xAA, + 0x08, 0xED, 0xDE, 0x40, 0xAC, 0xFA, 0xEE, 0x2A, + 0x40, 0xD5, 0x05, 0xCF, 0x58, 0xA6, 0x69, 0x66, + 0x31, 0x5A, 0x68, 0x98, 0x24, 0x03, 0xD8, 0x1B, + 0xFA, 0x89, 0xE3, 0x7C, 0x9E, 0x42, 0x1D, 0xA5, + 0x88, 0xBA, 0x7E, 0x42, 0x2A, 0xC7, 0x44, 0x6A, + 0x1E, 0x61, 0xC8, 0x22, 0x29, 0x9D, 0xFC, 0x34, + 0xEC, 0xFA, 0xBE, 0x5C, 0xB6, 0x26, 0xB9, 0x6C, + 0x8E, 0xA6, 0xC9, 0x3B, 0xDB, 0xD2, 0xD5, 0xBD, + 0x70, 0xC5, 0xF8, 0x26, 0x7A, 0x84, 0xE0, 0x07, + 0xA7, 0x11, 0x5E, 0x5B, 0xE5, 0xF1, 0x20, 0x32, + 0xA3, 0x7C, 0xAB, 0x05, 0xD5, 0x41, 0xE3, 0xDE, + 0xA5, 0x1A, 0x83, 0x2E, 0xDE, 0x8D, 0x34, 0x9A, + 0xFD, 0xD5, 0xE6, 0xFC, 0xFC, 0x83, 0x46, 0xE3, + 0xD4, 0x7C, 0xF1, 0x7F, 0xEA, 0x87, 0x5E, 0x38, + 0x5D, 0xB9, 0x8A, 0xC2, 0xDB, 0xE8, 0xB4, 0xF8, + 0x05, 0x37, 0x31, 0x0D, 0xD9, 0x4C, 0xD0, 0xB6, + 0x25, 0xE9, 0x97, 0x85, 0xDB, 0x04, 0x9A, 0x01, + 0xF5, 0x4B, 0xA1, 0xF4, 0x2A, 0xDF, 0xEC, 0xAE, + 0x24, 0x11, 0xD3, 0x2B, 0x2F, 0x84, 0x6C, 0x88, + 0xA3, 0x0C, 0x76, 0xEA, 0x0A, 0x38, 0xB2, 0x71, + 0xB6, 0xAC, 0xA8, 0x23, 0x6E, 0x61, 0xEB, 0xB8, + 0x4A, 0x9D, 0xC4, 0x9E, 0x5C, 0x5B, 0xEE, 0x7E, + 0x7D, 0x8D, 0xA2, 0xC1, 0xA1, 0xA0, 0xA3, 0x14, + 0x50, 0xE0, 0x8F, 0xAB, 0xBB, 0x1B, 0x1F, 0x05, + 0xAA, 0xE3, 0x00, 0xD8, 0xCD, 0xE7, 0x35, 0xB4, + 0x7B, 0xBD, 0xB0, 0x5C, 0xCC, 0x0C, 0x05, 0x33, + 0x6B, 0xE4, 0x51, 0x73, 0x1B, 0x6B, 0x77, 0x7B, + 0xE5, 0xCB, 0xAF, 0x98, 0x53, 0x5F, 0x7E, 0x08, + 0xFF, 0xCD, 0x8A, 0x44, 0x9E, 0x1D, 0x43, 0x6A, + 0x4F, 0x05, 0x99, 0x01, 0xF5, 0x6F, 0x01, 0x30, + 0xBD, 0x15, 0xD7, 0x51, 0x16, 0x45, 0x40, 0x6B, + 0xF3, 0x13, 0xCA, 0x1F, 0x22, 0x02, 0xA4, 0xA8, + 0x6A, 0x1D, 0x04, 0x7F, 0xD5, 0x8A, 0x3E, 0x87, + 0x7F, 0x1D, 0x5A, 0x79, 0x75, 0xD1, 0x6D, 0x67, + 0xB3, 0x23, 0xC6, 0x28, 0x7B, 0x9C, 0xCE, 0xEE, + 0x98, 0x9E, 0xE8, 0x44, 0xA9, 0x3E, 0x7E, 0xFD, + 0x3B, 0xD9, 0xD8, 0x31, 0x6D, 0xA3, 0x77, 0xDF, + 0x0B, 0xB9, 0xE2, 0x61, 0xA2, 0x71, 0xD5, 0x0C, + 0xB7, 0x01, 0x67, 0xC3, 0x0D, 0x19, 0x2D, 0xAA, + 0xDE, 0x96, 0x0E, 0xEA, 0x33, 0x5E, 0xEC, 0x52, + 0xE5, 0x2D, 0x95, 0x39, 0xE1, 0xF9, 0x5D, 0x9E, + 0xB6, 0x5E, 0x54, 0x8F, 0x16, 0x60, 0x99, 0xED, + 0x88, 0x2C, 0x30, 0x72, 0x53, 0x6A, 0x6C, 0xAA, + 0x05, 0x21, 0xA5, 0xAA, 0x7C, 0x64, 0x72, 0xA0, + 0xC0, 0x4F, 0x80, 0xDA, 0x20, 0x5D, 0x52, 0x18, + 0x77, 0x07, 0xDF, 0x5C, 0x2F, 0x2E, 0xA2, 0x5F, + 0xEF, 0x00, 0xCA, 0x7B, 0xF0, 0xD3, 0xB7, 0xF8, + 0x1E, 0x31, 0x9E, 0x61, 0xCA, 0x2C, 0xC5, 0xA5, + 0x25, 0xA2, 0x7B, 0x56, 0xAA, 0xBA, 0xE4, 0xD5, + 0x35, 0xE5, 0xEC, 0x24, 0x2D, 0x81, 0x1A, 0x24, + 0xD7, 0x45, 0x76, 0xBF, 0x4B, 0x8A, 0x72, 0xFA, + 0x5F, 0xAE, 0xC1, 0xA2, 0x83, 0xB6, 0x1D, 0x60, + 0x28, 0x7E, 0x1E, 0x2E, 0xC8, 0xC6, 0xAB, 0x04, + 0x56, 0x5F, 0xD5, 0xCD, 0x64, 0x26, 0x34, 0x94, + 0xE8, 0x03, 0x41, 0x63, 0x35, 0x5B, 0x45, 0x84, + 0xCE, 0xFA, 0x0B, 0x66, 0x40, 0x85, 0x1A, 0xE1, + 0x23, 0xE9, 0x8F, 0xBD, 0xA9, 0x23, 0xFC, 0xA3, + 0x8E, 0x38, 0xB3, 0x84, 0xE2, 0xB9, 0x54, 0x41, + 0x4B, 0x36, 0x4F, 0xB8, 0xB0, 0x87, 0x56, 0x04, + 0x8B, 0x75, 0xC7, 0x85, 0x31, 0xD4, 0xA5, 0x12, + 0x99, 0xC4, 0x9D, 0xEA, 0x4B, 0x36, 0x8C, 0x19, + 0x82, 0xFE, 0xAD, 0x4A, 0xB1, 0xAA, 0x52, 0x35, + 0xA4, 0xA1, 0x7F, 0xB0, 0x64, 0x6F, 0x04, 0x04, + 0x7B, 0xF0, 0x80, 0x48, 0xA1, 0x1C, 0xF8, 0x95, + 0x8B, 0x68, 0x34, 0xB7, 0xFD, 0x00, 0x31, 0x30, + 0x6A, 0x39, 0xC8, 0xAE, 0x68, 0xC3, 0x53, 0x65, + 0x19, 0x7C, 0x1E, 0x57, 0x97, 0xFC, 0x47, 0x3E, + 0xB1, 0x94, 0x54, 0x48, 0x6F, 0xEB, 0xAA, 0xEC, + 0x5C, 0x2E, 0xE9, 0x2C, 0xCC, 0x3A, 0xF3, 0xC7, + 0x43, 0x08, 0x7D, 0x2D, 0x56, 0x4B, 0x7D, 0xE9, + 0xE5, 0x96, 0xF3, 0x12, 0x4B, 0xE9, 0x08, 0xF3, + 0x04, 0x5A, 0x75, 0x1A, 0x7D, 0x7E, 0x37, 0xE6, + 0xC8, 0xC1, 0xFE, 0xF3, 0x32, 0x63, 0x2D, 0x0B, + 0xBE, 0x05, 0x13, 0x6A, 0x44, 0x58, 0x7F, 0x54, + 0x5F, 0x5F, 0xF5, 0x2F, 0xB8, 0x0B, 0xF2, 0xBF, + 0x0B, 0xF4, 0x30, 0x2F, 0xCF, 0xEC, 0xFE, 0x08, + 0xEC, 0x51, 0xF2, 0x29, 0xD7, 0xAC, 0x28, 0xE1, + 0x75, 0x42, 0x61, 0xBC, 0xE7, 0xB1, 0x53, 0x4F, + 0x7D, 0x3B, 0xB0, 0x8D, 0x01, 0x15, 0x1E, 0xBE, + 0xEC, 0xD9, 0x54, 0xC2, 0x4E, 0x70, 0x3E, 0xEA, + 0x39, 0x14, 0x26, 0xB7, 0x01, 0x79, 0x5D, 0x06, + 0x93, 0x85, 0x99, 0xAA, 0x7D, 0xDC, 0xF9, 0x2E, + 0x44, 0x56, 0x9B, 0xFA, 0x9D, 0x91, 0x2A, 0x8E, + 0x89, 0x48, 0x51, 0xE3, 0xD0, 0x53, 0xB3, 0xAD, + 0x43, 0x29, 0xB7, 0x6A, 0x50, 0xC0, 0x78, 0x4D, + 0x42, 0xF3, 0x7C, 0x5F, 0x90, 0x06, 0xAC, 0x2A, + 0x9D, 0x5D, 0xE5, 0x18, 0x3F, 0xA3, 0xC6, 0x5E, + 0xCD, 0xB6, 0xCF, 0x31, 0x67, 0xA4, 0x7A, 0x8F, + 0x5C, 0x59, 0xBD, 0xD7, 0x9B, 0x7C, 0x24, 0x06, + 0x97, 0xE1, 0x59, 0x72, 0x85, 0x02, 0x74, 0xFE, + 0x41, 0xAD, 0x84, 0xD9, 0x0D, 0xCB, 0x34, 0x16, + 0x11, 0xE7, 0x66, 0xD2, 0x12, 0xDC, 0x76, 0x3C, + 0xF9, 0x4C, 0x8C, 0x41, 0x94, 0xCC, 0xA9, 0x1B, + 0x21, 0x03, 0x28, 0xE4, 0xA3, 0x37, 0x4E, 0x29, + 0xD2, 0x48, 0x11, 0x2B, 0xB6, 0x68, 0xA3, 0x92, + 0xC2, 0x0D, 0x87, 0x91, 0x03, 0x76, 0xB5, 0x00, + 0x1F, 0x3F, 0xFB, 0xBE, 0xC3, 0xE0, 0x08, 0xBF, + 0x2F, 0x46, 0xF7, 0x40, 0x73, 0x83, 0xA8, 0x0D, + 0xDA, 0x08, 0x2B, 0xDB, 0x8F, 0xE9, 0x25, 0xE4, + 0xF1, 0x2B, 0x37, 0x92, 0x27, 0x0E, 0x5A, 0x46, + 0xB8, 0xC5, 0x7B, 0x6E, 0x5A, 0x4B, 0x95, 0x58, + 0x4E, 0xF3, 0x80, 0xED, 0x49, 0x93, 0xEC, 0x52, + 0x9F, 0xF2, 0xAA, 0x39, 0xDD, 0x6D, 0xFE, 0x88, + 0xFD, 0xEB, 0x6E, 0xDA, 0x0E, 0x8D, 0xA7, 0x95, + 0x66, 0xB0, 0x7D, 0x37, 0xAE, 0xCC, 0x64, 0x37, + 0x25, 0x95, 0x18, 0xF9, 0x7E, 0x6C, 0x86, 0x12, + 0xB3, 0xC3, 0x57, 0x03, 0xBF, 0xF9, 0x92, 0x15, + 0x3E, 0x66, 0x0E, 0x2E, 0x20, 0x77, 0xA0, 0x5F, + 0x26, 0x5F, 0xB5, 0x12, 0x1D, 0xD7, 0x9F, 0x0A, + 0x33, 0xBC, 0x38, 0xEC, 0x83, 0x08, 0xE2, 0xA9, + 0x84, 0xCD, 0x3D, 0x8A, 0xC6, 0x09, 0x30, 0x6F, + 0x77, 0x93, 0xD7, 0xDE, 0x08, 0xD8, 0x45, 0xA4, + 0x21, 0x28, 0x26, 0x4E, 0x5C, 0x17, 0x77, 0x74, + 0xE3, 0x5D, 0x58, 0x7C, 0x96, 0xB2, 0x47, 0x05, + 0x42, 0x21, 0x78, 0x5D, 0xB3, 0x8D, 0xDC, 0x6F, + 0xDB, 0xF7, 0xBF, 0x6F, 0x66, 0x4B, 0xD6, 0x30, + 0x14, 0xC0, 0xBF, 0x94, 0x2A, 0x83, 0x91, 0x6C, + 0xBF, 0x2C, 0x42, 0x85, 0x41, 0xED, 0xA2, 0xBB, + 0xCB, 0xFC, 0xF9, 0x35, 0xDE, 0xFC, 0xB3, 0x63, + 0xE1, 0x64, 0xAA, 0x51, 0x2D, 0xD5, 0xFA, 0x79, + 0x53, 0x31, 0x40, 0x0B, 0x9B, 0xD0, 0x3C, 0xE3, + 0xD7, 0x2D, 0x91, 0x05, 0x62, 0xC3, 0x81, 0xFE, + 0x93, 0x1E, 0x8C, 0x37, 0x9E, 0x30, 0x23, 0x73, + 0x3A, 0xB9, 0x18, 0x6E, 0x5D, 0xEF, 0x31, 0xE9, + 0xF6, 0x25, 0x7F, 0xB8, 0x47, 0x74, 0xCE, 0x28, + 0x23, 0xD4, 0x4F, 0xC1, 0x42, 0xCB, 0xEB, 0x59, + 0x8A, 0x68, 0xFD, 0x39, 0x48, 0x37, 0x1A, 0x5D, + 0x0C, 0x09, 0x64, 0xC6, 0xE1, 0x21, 0x5D, 0x89, + 0xF6, 0x58, 0xE5, 0x50, 0x4A, 0xD0, 0x93, 0xBC, + 0x86, 0x02, 0xBA, 0xD2, 0x36, 0x24, 0x9D, 0x7E, + 0xAF, 0xB6, 0xA1, 0xA0, 0x7C, 0xA7, 0xC7, 0x4D, + 0xAC, 0x30, 0x7A, 0x70, 0x0F, 0x2F, 0x81, 0x40, + 0xC1, 0x08, 0x6B, 0x21, 0xF2, 0xE1, 0x51, 0x9C, + 0x1D, 0x46, 0x94, 0x93, 0x2A, 0x1C, 0x18, 0xCB, + 0xED, 0x0D, 0x0E, 0x29, 0xDE, 0xFC, 0x52, 0x52, + 0x97, 0x93, 0x70, 0x85, 0xE2, 0x63, 0x0D, 0xC6, + 0x2C, 0x0C, 0x05, 0x0C, 0x4F, 0xF2, 0x70, 0x87, + 0x2B, 0xE7, 0xBB, 0x52, 0x2D, 0xD6, 0x99, 0x1B, + 0x59, 0x6F, 0xC2, 0x92, 0x11, 0x72, 0x5D, 0x99, + 0x60, 0xB1, 0x6A, 0x52, 0xEA, 0x91, 0x78, 0x19, + 0x23, 0xC0, 0x3B, 0x71, 0x9D, 0x09, 0xD6, 0xE7, + 0x10, 0x6D, 0xC5, 0x70, 0x55, 0xC1, 0x9E, 0xF8, + 0x76, 0xE5, 0xEC, 0x23, 0x17, 0xE7, 0xE4, 0x23, + 0xC9, 0x71, 0x45, 0x40, 0x72, 0x01, 0x9E, 0x28, + 0xE6, 0x5C, 0x81, 0xED, 0x52, 0x7A, 0xF1, 0x89, + 0xBD, 0xFC, 0xF5, 0x21, 0xC9, 0x23, 0x40, 0x75, + 0x54, 0xAC, 0xBF, 0x69, 0x45, 0xD1, 0x85, 0x44, + 0x3D, 0xAC, 0x1A, 0x1A, 0x08, 0x8A, 0x68, 0xB5, + 0x17, 0xD5, 0xD9, 0x90, 0xE1, 0x10, 0x30, 0xDE, + 0x4F, 0x75, 0x09, 0xE8, 0x7A, 0x77, 0xB3, 0x7C, + 0xF2, 0x0A, 0x78, 0xE2, 0xCD, 0x48, 0x94, 0x17, + 0x3C, 0x32, 0xA3, 0x27, 0x35, 0x51, 0x16, 0xB7, + 0x18, 0x51, 0x44, 0x42, 0x65, 0x60, 0x6A, 0x0A, + 0x9A, 0x6D, 0x94, 0x61, 0xCC, 0x5D, 0xD8, 0x3B, + 0x52, 0x7E, 0x4D, 0xBD, 0x6A, 0xEE, 0x03, 0x3D, + 0x66, 0x1C, 0x3D, 0xE8, 0xC1, 0x82, 0x97, 0xE5, + 0xD1, 0x31, 0xDB, 0xC8, 0xF6, 0x96, 0xE9, 0x47, + 0xC9, 0x5C, 0x71, 0x77, 0x2B, 0x62, 0x44, 0x74, + 0x4D, 0x06, 0x1E, 0x14, 0x45, 0x3B, 0x9F, 0xB1, + 0x17, 0x34, 0x80, 0x2D, 0xBA, 0x6F, 0x81, 0x79, + 0xB8, 0x0D, 0xAC, 0xFE, 0xB6, 0xBA, 0xDF, 0xD1, + 0x4E, 0x05, 0x76, 0x73, 0x6F, 0x80, 0x10, 0xC5, + 0x32, 0x87, 0xA3, 0xD3, 0x93, 0x18, 0x79, 0xEF, + 0x27, 0x3B, 0xBF, 0xCD, 0xB5, 0xDE, 0x5B, 0x88, + 0xAF, 0x51, 0xFD, 0x8A, 0x8C, 0x8F, 0x0A, 0x58, + 0x94, 0xE2, 0x25, 0xDF, 0xE8, 0x73, 0xFC, 0xC0, + 0x3C, 0xB1, 0xC9, 0xB5, 0x78, 0x25, 0xF1, 0x11, + 0x75, 0xC8, 0x7D, 0x08, 0x78, 0xB9, 0xE6, 0x15, + 0x6B, 0x40, 0x1B, 0x2F, 0xBE, 0x30, 0x03, 0x6B, + 0xFC, 0x7D, 0xB1, 0x00, 0x02, 0x71, 0xB7, 0xFF, + 0x5D, 0x63, 0xA8, 0x09, 0x50, 0x75, 0xEF, 0xBD, + 0x34, 0xEE, 0x73, 0xDE, 0x60, 0x14, 0x95, 0x2D, + 0x15, 0xBC, 0x30, 0x23, 0x07, 0x02, 0xD8, 0x7C, + 0x9A, 0x96, 0xD5, 0xE9, 0xF1, 0xF0, 0xF9, 0x26, + 0x25, 0x96, 0xAA, 0x58, 0xB7, 0xE4, 0x1A, 0xD9, + 0xA0, 0x9E, 0xAD, 0xB9, 0x44, 0xB6, 0x3F, 0xD9, + 0x8B, 0x34, 0x7D, 0x11, 0xBD, 0x52, 0x97, 0xC3, + 0xBE, 0x28, 0x23, 0x85, 0x9F, 0x2F, 0x35, 0xA4, + 0xE5, 0x4E, 0x13, 0x68, 0x89, 0x09, 0xC3, 0x1A, + 0x83, 0xE7, 0xDE, 0xCE, 0x4B, 0xDF, 0x31, 0x03, + 0x9C, 0x72, 0xBA, 0x54, 0xA1, 0x20, 0x2D, 0x17, + 0x2A, 0x6B, 0x8A, 0x2C, 0xE9, 0x6D, 0xED, 0xCA, + 0x5B, 0x24, 0xF7, 0xB9, 0x42, 0xC1, 0x4E, 0x13, + 0x3D, 0xAA, 0x8A, 0xB8, 0xCB, 0xD2, 0x4C, 0x1F, + 0x0B, 0xBE, 0xB1, 0x27, 0x97, 0x67, 0x26, 0x72, + 0xE2, 0x2C, 0xE6, 0xC2, 0x12, 0x37, 0xB2, 0x79, + 0x7D, 0x8E, 0x54, 0xCC, 0x8F, 0xC7, 0x6C, 0x43, + 0xB4, 0x75, 0x29, 0x66, 0xA3, 0xA4, 0x09, 0x44, + 0xE7, 0x2D, 0x37, 0x3F, 0x0D, 0x3E, 0x84, 0xF9, + 0xA3, 0x30, 0x1E, 0xAE, 0x9E, 0xDA, 0x35, 0x44, + 0x4B, 0x1E, 0x49, 0xE6, 0x61, 0x18, 0x20, 0x6A, + 0x56, 0xEB, 0x46, 0xD4, 0x8D, 0x20, 0x95, 0x4A, + 0x77, 0x9A, 0x1E, 0x74, 0xE3, 0xE3, 0xB2, 0xBD, + 0x40, 0x3D, 0x46, 0xB3, 0x35, 0x10, 0x11, 0xCB, + 0x6F, 0x8A, 0x86, 0x72, 0xB2, 0xF3, 0xD9, 0x90, + 0x31, 0x47, 0x55, 0x77, 0x6C, 0xE3, 0x23, 0x7F, + 0x0A, 0x50, 0xE7, 0x71, 0x20, 0x53, 0x09, 0xC0, + 0x5D, 0x9A, 0x78, 0xD3, 0x68, 0x88, 0xA8, 0x3B, + 0xAD, 0x78, 0xE8, 0x6E, 0xDF, 0x36, 0xA8, 0x8D, + 0xC7, 0x1C, 0x5F, 0x11, 0x56, 0x83, 0x90, 0xD0, + 0xB5, 0x92, 0x02, 0xE2, 0x9E, 0xE1, 0x1E, 0xCB, + 0x9F, 0x56, 0x89, 0x63, 0xE8, 0x17, 0x70, 0x83, + 0x9F, 0xF2, 0x39, 0xAD, 0x03, 0x15, 0x6C, 0xC0, + 0x71, 0xE8, 0xB7, 0x40, 0x15, 0x95, 0xEC, 0xEE, + 0x62, 0x34, 0xAC, 0x34, 0xB7, 0x11, 0x70, 0x3D, + 0x68, 0xC6, 0x7A, 0x28, 0x83, 0xBE, 0x9C, 0x18, + 0xAB, 0x7F, 0x1A, 0x1B, 0x2E, 0x5C, 0x90, 0xA2, + 0x32, 0x3C, 0xDF, 0x1E, 0xD4, 0x98, 0x50, 0xB8, + 0x39, 0x38, 0x19, 0x2F, 0x62, 0x8C, 0x9E, 0xF6, + 0x5B, 0x77, 0x93, 0x95, 0xEE, 0x37, 0x34, 0xC7, + 0xA9, 0x01, 0xF7, 0x47, 0x38, 0x86, 0xD7, 0x12, + 0xD2, 0x15, 0x41, 0x68, 0x16, 0xC3, 0x01, 0x6C, + 0xC2, 0x83, 0x83, 0xD4, 0x78, 0x7B, 0x46, 0xF6, + 0x89, 0xDC, 0xE1, 0x11, 0xDA, 0x4D, 0xB8, 0xAC, + 0x10, 0xE8, 0x4F, 0x66, 0xA5, 0xC2, 0xBD, 0xA1, + 0xB3, 0xFC, 0x97, 0x7F, 0x6A, 0x0F, 0x73, 0x2E, + 0xDA, 0x4F, 0x69, 0xB9, 0x75, 0x51, 0xA4, 0xB8, + 0xB2, 0x61, 0xD6, 0x88, 0x71, 0x94, 0xD3, 0xAF, + 0xE7, 0xF4, 0xB8, 0x7F, 0xB3, 0xD4, 0x1A, 0xC6, + 0xDC, 0xDB, 0x8F, 0xD3, 0x9B, 0xE5, 0x0F, 0x2F, + 0x38, 0x2B, 0xAA, 0x4D, 0x19, 0xC7, 0x45, 0x0A, + 0xB3, 0xA1, 0xAC, 0x4C, 0x63, 0xCF, 0x93, 0x0A, + 0xAA, 0x51, 0x7A, 0x15, 0xD5, 0xC0, 0xD5, 0x49, + 0xFE, 0x03, 0x22, 0x00, 0x71, 0xD3, 0x69, 0x22, + 0x3E, 0x51, 0x29, 0x6E, 0xCB, 0xF8, 0x0D, 0xCD, + 0x79, 0xFB, 0xDF, 0xB8, 0xDF, 0x62, 0x90, 0x4D, + 0x5A, 0x36, 0x20, 0x0F, 0x29, 0xCC, 0x47, 0xE8, + 0x0C, 0x86, 0x15, 0xEF, 0x1B, 0x78, 0xDB, 0xB2, + 0x6A, 0x1A, 0xA7, 0xA6, 0x6E, 0x4D, 0x9A, 0x51, + 0xC9, 0x72, 0xAC, 0x9C, 0x94, 0xEA, 0xB9, 0x95, + 0x14, 0xB5, 0xAD, 0xAE, 0x62, 0x51, 0xE8, 0xAA, + 0x30, 0xA5, 0xE5, 0x87, 0x42, 0x4E, 0x3B, 0x7B, + 0xCC, 0x42, 0xEB, 0xE7, 0x33, 0x3D, 0x92, 0x10, + 0x97, 0x26, 0x53, 0xF8, 0x11, 0x8B, 0x83, 0xAB, + 0xE1, 0xBF, 0x7E, 0x9E, 0xE9, 0xCD, 0xAC, 0x28, + 0x99, 0x7D, 0x14, 0x4C, 0x34, 0xDE, 0xA6, 0x5B, + 0x59, 0x51, 0x2C, 0x73, 0x29, 0x27, 0xDB, 0xA8, + 0x20, 0x7D, 0x56, 0x91, 0x98, 0x47, 0x21, 0xB7, + 0x27, 0x9A, 0xFC, 0xDD, 0xE0, 0x6A, 0x6B, 0xD2, + 0x68, 0x0E, 0xBB, 0x9B, 0x2E, 0x3C, 0xFE, 0xE9, + 0xA6, 0x6D, 0x73, 0xD0, 0xC0, 0xDE, 0xD6, 0x53, + 0x70, 0x8B, 0x09, 0x0B, 0x82, 0x30, 0x65, 0xF9, + 0x70, 0x78, 0x49, 0xE3, 0xB3, 0x7D, 0x41, 0x25, + 0xCA, 0x69, 0x3E, 0x74, 0x2E, 0x02, 0x3F, 0x05, + 0x8A, 0xDC, 0x95, 0x07, 0x9B, 0xB0, 0x0C, 0x56, + 0xBE, 0x0D, 0x2F, 0x07, 0x81, 0x82, 0xEF, 0xAB, + 0x30, 0x72, 0xB0, 0xFD, 0x09, 0x76, 0x7B, 0x8A, + 0x13, 0xC2, 0x80, 0x5A, 0x75, 0x91, 0xB5, 0xB2, + 0xE1, 0x24, 0x75, 0xB5, 0xC8, 0x24, 0xDB, 0xEB, + 0x15, 0x79, 0x30, 0xAB, 0x38, 0x9F, 0x91, 0x5F, + 0xCC, 0xEC, 0x8F, 0x48, 0x64, 0x7E, 0xE4, 0xB6, + 0x6A, 0xB6, 0xB5, 0x36, 0xC2, 0x2D, 0xE3, 0xE5, + 0xEE, 0x4A, 0xBB, 0x42, 0xF8, 0xE0, 0x00, 0x9A, + 0xF0, 0x45, 0x54, 0xF1, 0x28, 0xAC, 0xA3, 0xCC, + 0xE4, 0x03, 0xBB, 0x01, 0xFD, 0xB7, 0xB5, 0xE2, + 0xA7, 0x2B, 0x82, 0x91, 0x1C, 0x1F, 0xD0, 0x65, + 0x23, 0xFF, 0x90, 0x19, 0x21, 0x41, 0xC6, 0x89, + 0xEC, 0xCB, 0x0B, 0xE6, 0x1B, 0x4C, 0x6D, 0x77, + 0x06, 0x29, 0x59, 0x02, 0x18, 0xA4, 0x01, 0x1A, + 0x68, 0xB8, 0x6F, 0xF5, 0x0D, 0x23, 0x03, 0x9C, + 0x9B, 0xCD, 0x43, 0x61, 0xF6, 0x98, 0x0A, 0x60, + 0xEF, 0x88, 0xD1, 0x44, 0x0D, 0x30, 0x4C, 0x5B, + 0x4B, 0x52, 0xD6, 0xED, 0xC2, 0x91, 0x12, 0xDC, + 0x3A, 0x8A, 0xF2, 0x85, 0x89, 0xE8, 0xF6, 0x29, + 0x48, 0xED, 0xB6, 0xBE, 0x76, 0x64, 0x6D, 0x59, + 0x66, 0x06, 0xB9, 0xE7, 0x05, 0xFE, 0xE3, 0xF1, + 0x44, 0xA0, 0x7B, 0xC9, 0xED, 0x1D, 0x40, 0x0C + }; + static const byte msg_65[] = { + 0x88, 0x5A, 0x0B, 0xDD, 0x8D, 0xE7, 0x4B, 0xC7, + 0x11, 0x69, 0x0A, 0xA6, 0x14, 0xDD, 0xA5, 0x32, + 0xF4, 0xD8, 0xC7, 0xEA, 0x2C, 0x27, 0x85, 0x5A, + 0x57, 0x8E, 0x63, 0x61, 0xCA, 0xAE, 0x2C, 0x0B, + 0xF7, 0xE7, 0x73, 0xB4, 0x90, 0x0A, 0x32, 0x93, + 0x12, 0x1A, 0x6E, 0x0D, 0xD6, 0x10, 0x10, 0x7A, + 0x7A, 0x65, 0xBD, 0x6E, 0x11, 0xF6, 0x19, 0xFC, + 0x0E, 0x9C, 0xE7, 0xBF, 0x7B, 0x5D, 0xE1, 0x80, + 0x76, 0xE1, 0xB7, 0x25, 0x57, 0x20, 0x97, 0xB2, + 0x47, 0xD8, 0xE0, 0x46, 0x24, 0x94, 0xF6, 0x3F, + 0x4E, 0xDF, 0xBE, 0xAC, 0x2F, 0xA2, 0xEC, 0xAE, + 0x0C, 0xCA, 0xD4, 0x28, 0xBD, 0x79, 0x6C, 0xF2, + 0x60, 0x92, 0xA1, 0xCD, 0x50, 0x5F, 0x59, 0x39, + 0x11, 0xED, 0x10, 0xFD, 0xA4, 0x26, 0xC7, 0xE3, + 0xC5, 0xA4, 0x39, 0xE8, 0x50, 0x42, 0x13, 0x18, + 0xAE, 0x07, 0x85, 0xB0, 0x5A, 0xA9, 0x9F, 0x58, + 0xD6, 0x85, 0x6D, 0xEB, 0x78, 0xBB, 0xE4, 0x88, + 0xC7, 0x0E, 0xEE, 0x42, 0xBB, 0x9A, 0xB5, 0x92, + 0x7B, 0x2E, 0xD2, 0x5C, 0xD1, 0x43, 0x77, 0xCD, + 0x7E, 0x1A, 0x88, 0x34, 0xE8, 0x21, 0x48, 0x00, + 0x2F, 0xCB, 0x98, 0x5A, 0xB9, 0x43, 0x12, 0x97, + 0x01, 0x0B, 0x2B, 0xC7, 0x0F, 0x91, 0x32, 0x37, + 0x3C, 0x6D, 0xD2, 0xA2, 0xA9, 0xCF, 0x24, 0x6F, + 0xE0, 0x26, 0x2E, 0x8B, 0x53, 0xE6, 0x93, 0xF3, + 0xD6, 0xFE, 0xD3, 0xED, 0xD1, 0xF2, 0x00, 0x4E, + 0xD1, 0x7C, 0x2C, 0xF5, 0xB2, 0x57, 0xF4, 0xAD, + 0xA5, 0xDC, 0x1A, 0x7C, 0x15, 0x1F, 0xFE, 0x03, + 0xB9, 0x6A, 0x4D, 0xB9, 0x91, 0xE4, 0x13, 0x2D, + 0x01, 0xDE, 0x1F, 0x03, 0x3E, 0xD8, 0x13, 0x57, + 0xEA, 0xE7, 0xC1, 0xA8, 0xD2, 0xDD, 0xD9, 0x2D, + 0xDF, 0xC0, 0x6F, 0x67, 0x13, 0x94, 0xD2, 0xF6, + 0x02, 0x12, 0xC6, 0xE4, 0x49, 0xEA, 0x35, 0x93, + 0x24, 0xFE, 0xD3, 0x8C, 0x84, 0xD3, 0x6D, 0x15, + 0x43, 0x2E, 0x11, 0xE7, 0x15, 0x00, 0x15, 0x80, + 0x4F, 0x97, 0xA3, 0xC6, 0x77, 0x38, 0x2C, 0xD4, + 0x6A, 0xA4, 0xD7, 0xAC, 0xEE, 0x56, 0x86, 0xFB, + 0xCE, 0xD7, 0xA9, 0xE8, 0x5D, 0x29, 0xC4, 0x83, + 0x86, 0xE6, 0x9F, 0x40, 0x69, 0x3D, 0x9A, 0xDA, + 0xBE, 0xB4, 0x3B, 0xD0, 0xE5, 0x03, 0x6A, 0xCD, + 0xE6, 0x31, 0xB5, 0x49, 0x57, 0xF4, 0xFC, 0xE2, + 0x6F, 0x7A, 0x24, 0xB0, 0xDA, 0xD4, 0x34, 0x8A, + 0x67, 0x89, 0xCA, 0xE1, 0x06, 0x13, 0x06, 0x20, + 0xED, 0x2F, 0xA0, 0xEA, 0x38, 0xF5, 0x75, 0xF2, + 0x87, 0x83, 0xBC, 0x92, 0xB3, 0x2B, 0x0C, 0x51, + 0xC8, 0xA6, 0x54, 0x6F, 0x5D, 0x88, 0x09, 0x5F, + 0x9F, 0x73, 0xC6, 0x5B, 0xF6, 0xF2, 0x51, 0xA2, + 0xC4, 0x69, 0x74, 0x64, 0x45, 0xC5, 0x88, 0xC3, + 0xEA, 0x81, 0x39, 0xE4, 0x33, 0xD4, 0xFE, 0x2D, + 0xE4, 0xC0, 0xD3, 0x58, 0xB6, 0xCA, 0x8A, 0x62, + 0x94, 0xE6, 0xAF, 0xC1, 0xB9, 0x60, 0x74, 0xC0, + 0x68, 0xEF, 0x67, 0xB1, 0x58, 0xF1, 0x12, 0x9C, + 0xFE, 0x0A, 0x3A, 0xE7, 0xEB, 0x9D, 0x45, 0x4F, + 0x35, 0x7F, 0xBB, 0x6A, 0xB3, 0xB9, 0x92, 0x2B, + 0x1B, 0xCD, 0x55, 0x58, 0x61, 0x87, 0xCD, 0x24, + 0x69, 0x24, 0x82, 0x78, 0x23, 0x34, 0xAC, 0x9F, + 0x2B, 0x86, 0x12, 0x48, 0xF6, 0xA5, 0x30, 0xE9, + 0x3E, 0x11, 0x48, 0x87, 0x84, 0xDD, 0xE5, 0xEA, + 0x67, 0x8A, 0xE5, 0x05, 0x90, 0x3E, 0x23, 0x10, + 0x53, 0x30, 0x8C, 0x1B, 0x87, 0x84, 0x60, 0x7E, + 0x06, 0x3F, 0x48, 0x98, 0xA4, 0xFA, 0xB6, 0x01, + 0xD3, 0xE6, 0x96, 0x85, 0x97, 0x21, 0x55, 0xF6, + 0x3F, 0x09, 0xFD, 0x84, 0xB2, 0xB3, 0xDF, 0x74, + 0x1F, 0xB6, 0x42, 0xAC, 0xA6, 0x03, 0xD0, 0xD5, + 0x96, 0xE0, 0xA8, 0xDA, 0xD4, 0x24, 0xF4, 0x64, + 0x0F, 0x98, 0xB9, 0x6F, 0xB2, 0x42, 0xC6, 0x95, + 0xDC, 0x33, 0x1F, 0x57, 0x59, 0xF7, 0x5E, 0xAF, + 0x19, 0x1C, 0xBD, 0x98, 0x5E, 0xC5, 0x99, 0x8D, + 0x56, 0x48, 0xC8, 0x5E, 0xB6, 0x31, 0x29, 0x5F, + 0x61, 0x56, 0x7C, 0x11, 0x63, 0xF9, 0x90, 0xDC, + 0x4F, 0xA1, 0x71, 0x40, 0x91, 0x26, 0x1E, 0x5F, + 0x3E, 0x5F, 0x0B, 0xFE, 0x84, 0x55, 0xBB, 0x8B, + 0xAA, 0x1D, 0x69, 0x42, 0x1F, 0x15, 0x37, 0x4E, + 0x73, 0xB0, 0x7E, 0x78, 0x57, 0x9D, 0x0E, 0x25, + 0x1A, 0x41, 0xEE, 0x1A, 0x50, 0x43, 0xAA, 0xBF, + 0x8B, 0xE7, 0x73, 0xEE, 0x7F, 0x9D, 0x0F, 0xDF, + 0xCF, 0xD3, 0xAE, 0x71, 0x1F, 0xAB, 0x1D, 0x3D, + 0xBC, 0xC2, 0x84, 0x3B, 0xE5, 0xA9, 0x46, 0xB2, + 0x4D, 0x8B, 0x9B, 0x94, 0x35, 0x8B, 0x5F, 0x59, + 0x8E, 0x88, 0xED, 0x3D, 0x53, 0xF3, 0x10, 0xF8, + 0xEC, 0x63, 0x22, 0x9D, 0x4F, 0x5B, 0xB1, 0xB6, + 0xD5, 0x24, 0xA5, 0xAF, 0x9C, 0x39, 0x47, 0x79, + 0x25, 0xC7, 0xE2, 0x90, 0x95, 0xFC, 0x43, 0xF1, + 0x71, 0xFE, 0xCD, 0xD0, 0x61, 0xF3, 0x62, 0x62, + 0x71, 0x21, 0x75, 0x2C, 0x23, 0x6B, 0x79, 0x2F, + 0x1B, 0x31, 0x90, 0x79, 0x7C, 0xD0, 0x57, 0x5C, + 0x58, 0x4F, 0x30, 0xB5, 0x56, 0x81, 0x19, 0x61, + 0x90, 0x45, 0x09, 0xC9, 0x8B, 0xCD, 0xE8, 0x65, + 0x9D, 0x22, 0x80, 0xF4, 0x95, 0xA0, 0xC9, 0x55, + 0x7D, 0x38, 0x11, 0xAF, 0x5E, 0xD4, 0x37, 0x7B, + 0xC7, 0x59, 0x9E, 0x49, 0x59, 0xFF, 0x85, 0xF2, + 0x15, 0x0A, 0xCD, 0xEC, 0xC1, 0xF7, 0x67, 0x2D, + 0xE1, 0xEE, 0x4D, 0xB4, 0x4C, 0x1F, 0xB5, 0xF7, + 0x99, 0x8A, 0xB5, 0xDB, 0x74, 0x2F, 0x6C, 0x5D, + 0x32, 0xCB, 0xC0, 0xF2, 0xFB, 0xC9, 0x54, 0xEA, + 0xD6, 0xCC, 0x13, 0x4B, 0x97, 0x62, 0xDF, 0x33, + 0x13, 0x86, 0xDE, 0xCA, 0x31, 0x69, 0x47, 0x88, + 0x4B, 0x9A, 0x13, 0xAD, 0xEA, 0x5C, 0xBE, 0x29, + 0x56, 0x64, 0x4F, 0xA1, 0x2A, 0x7B, 0xB3, 0xBF, + 0xB9, 0x7E, 0x1D, 0x93, 0xA7, 0x01, 0x91, 0xAC, + 0x38, 0xA0, 0x37, 0x32, 0x58, 0xC2, 0xC2, 0x81, + 0x6D, 0xEA, 0x6E, 0xAF, 0x88, 0x0D, 0x69, 0xF4, + 0x5F, 0xBA, 0x4C, 0x29, 0x0F, 0x18, 0xD3, 0x4B, + 0xB8, 0x36, 0x8C, 0xF4, 0xEB, 0xB4, 0x72, 0xBA, + 0x49, 0x9C, 0xBB, 0x54, 0x50, 0x1E, 0xE3, 0xA2, + 0x8E, 0x5F, 0xB9, 0xFD, 0xC6, 0x6C, 0xF6, 0x45, + 0x72, 0x09, 0x47, 0x19, 0xBB, 0xDB, 0x48, 0xF3, + 0xF4, 0x88, 0x51, 0x3B, 0x65, 0x50, 0xE1, 0x27, + 0xE8, 0x34, 0x1C, 0x7E, 0x53, 0xDC, 0xFD, 0xA7, + 0xD4, 0x08, 0x05, 0x58, 0x0B, 0xC7, 0xD3, 0x0A, + 0x72, 0xF2, 0x44, 0xCC, 0xDB, 0x5A, 0xEF, 0x66, + 0x1B, 0x0F, 0x30, 0x4E, 0xC5, 0xB7, 0xAB, 0x93, + 0xB8, 0xC5, 0xC4, 0x9A, 0x77, 0x68, 0x38, 0xB7, + 0xD5, 0x23, 0x74, 0xAA, 0x41, 0x63, 0x02, 0x24, + 0xD6, 0x16, 0xF3, 0x10, 0xE4, 0x99, 0xEC, 0xAD, + 0xCE, 0x93, 0xE7, 0x8B, 0x94, 0xD3, 0xCA, 0x48, + 0xB3, 0x47, 0xBC, 0x0E, 0xEC, 0xAA, 0x20, 0x66, + 0x02, 0x29, 0x65, 0xC8, 0x07, 0xBE, 0xF9, 0x02, + 0x9B, 0xC5, 0x22, 0x8F, 0x00, 0x5E, 0xDB, 0x74, + 0xD4, 0xB1, 0x44, 0x98, 0xCE, 0x3A, 0xE1, 0x3B, + 0xEB, 0x7C, 0x69, 0x3B, 0x66, 0x9E, 0xE9, 0xF9, + 0xA6, 0xF4, 0x6F, 0xC0, 0x0E, 0xC0, 0x5E, 0x13, + 0x2B, 0xB6, 0xC6, 0x76, 0x0F, 0xB5, 0xC5, 0x1C, + 0x83, 0x23, 0xAC, 0xD6, 0xA3, 0xC7, 0x5A, 0x72, + 0xE9, 0x73, 0x89, 0x66, 0xD1, 0x25, 0xB9, 0x61, + 0x3B, 0x31, 0x45, 0xC6, 0x7B, 0x5E, 0x98, 0x81, + 0x87, 0xE8, 0x5F, 0x29, 0xAD, 0xCB, 0xAF, 0x74, + 0xE3, 0x3A, 0x61, 0x1F, 0xFF, 0x25, 0x2A, 0xEB, + 0xBA, 0xEB, 0x1E, 0xA6, 0x41, 0xE6, 0xFC, 0x8B, + 0xDF, 0x73, 0x41, 0xBE, 0x2A, 0xA8, 0x57, 0xE4, + 0x43, 0xAC, 0xFB, 0xCE, 0xB2, 0x15, 0x5D, 0x08, + 0x1A, 0xCB, 0x4C, 0xCD, 0xB0, 0x98, 0xD5, 0x7C, + 0xEF, 0x6F, 0x6F, 0xD3, 0x42, 0xDB, 0x2D, 0x83, + 0xB6, 0x12, 0x3E, 0x0A, 0xD3, 0xC9, 0x3F, 0x30, + 0x08, 0x11, 0xB8, 0xD5, 0xA1, 0x1A, 0x5A, 0x29, + 0xBE, 0x60, 0x81, 0x6F, 0x69, 0xB2, 0x9D, 0x1D, + 0x7E, 0x15, 0x88, 0x69, 0xD8, 0x60, 0xF6, 0xFB, + 0x82, 0x9D, 0xE8, 0x0D, 0x3E, 0x1B, 0x69, 0x9C, + 0x3A, 0xB6, 0x80, 0x4E, 0xB6, 0x54, 0x91, 0x78, + 0xD9, 0x47, 0x33, 0x38, 0xD6, 0xAF, 0x20, 0x9E, + 0x1F, 0x7D, 0x26, 0x3C, 0x66, 0x7A, 0xE6, 0x89, + 0x5F, 0x6E, 0x29, 0x33, 0x92, 0x34, 0x71, 0xF1, + 0x99, 0x58, 0x1F, 0x8A, 0x51, 0xBD, 0x9A, 0xA4, + 0x52, 0xEE, 0xE4, 0xBF, 0xE9, 0x56, 0x69, 0xAC, + 0xD0, 0x7B, 0x41, 0xB0, 0x0C, 0x03, 0xF5, 0x5A, + 0x40, 0xD1, 0x0B, 0x50, 0xF8, 0xE4, 0x67, 0xBD, + 0x07, 0x1C, 0x8F, 0x40, 0x5C, 0xF1, 0x19, 0x61, + 0x2D, 0x32, 0x40, 0x5B, 0xD5, 0x27, 0x5A, 0x6B, + 0xBF, 0x22, 0x17, 0xF9, 0xF1, 0x79, 0x0D, 0x29, + 0x99, 0x7B, 0x7B, 0x6B, 0x1E, 0xC8, 0xD7, 0x92, + 0x4A, 0xB9, 0xE6, 0x44, 0xC1, 0x29, 0xCE, 0xE8, + 0x74, 0x33, 0x29, 0x1A, 0x2C, 0x8E, 0xD6, 0xBC, + 0x3C, 0x2A, 0x19, 0xD0, 0x76, 0xB1, 0x77, 0xEE, + 0x60, 0x50, 0x69, 0x2A, 0xDA, 0x8E, 0x95, 0x57, + 0x4D, 0x6C, 0xE9, 0xAB, 0xE4, 0x97, 0x95, 0xD8, + 0xF2, 0x8E, 0xAB, 0x69, 0x67, 0x6E, 0x79, 0x03, + 0xA6, 0x56, 0xFA, 0xB3, 0x20, 0x25, 0xFE, 0x34, + 0x65, 0xCB, 0xDB, 0x57, 0x01, 0xC1, 0x77, 0x20, + 0x9D, 0x91, 0x89, 0xA5, 0x91, 0x7C, 0x13, 0x37, + 0xDE, 0x39, 0xF5, 0x75, 0xE5, 0xDD, 0xB9, 0x3C, + 0xA7, 0x6B, 0xEB, 0x52, 0xAF, 0x32, 0xE8, 0xD7, + 0x12, 0x7B, 0x28, 0xF7, 0xCE, 0x73, 0x12, 0xE8, + 0x03, 0x90, 0x47, 0x21, 0xAB, 0x21, 0x6E, 0x92, + 0xA8, 0xA9, 0xE6, 0x09, 0xFC, 0x10, 0xAF, 0x8D, + 0xC2, 0xAA, 0xCA, 0x14, 0xA9, 0x7B, 0xB0, 0xE4, + 0xB2, 0x34, 0xC7, 0x00, 0x0E, 0xBB, 0xE0, 0xC4, + 0x42, 0xF1, 0x85, 0x94, 0x6B, 0x7C, 0xE7, 0x72, + 0x80, 0x95, 0xCD, 0x60, 0x16, 0x9B, 0x0B, 0xD9, + 0x7B, 0x36, 0xB3, 0xAE, 0x38, 0x55, 0xD9, 0x89, + 0x25, 0xB2, 0x9D, 0x92, 0x94, 0xEF, 0x27, 0x75, + 0x09, 0xFC, 0xA4, 0x07, 0xEA, 0x2B, 0xC4, 0x76, + 0x59, 0x02, 0x6A, 0x82, 0x04, 0xD6, 0x96, 0x4F, + 0xC6, 0x5B, 0xEF, 0x35, 0x31, 0xE9, 0xC1, 0xE6, + 0xF9, 0x70, 0xBF, 0x2F, 0xF2, 0x40, 0x75, 0xEA, + 0x17, 0xD1, 0x36, 0xAD, 0xEA, 0xD2, 0x35, 0x6B, + 0x6C, 0xE4, 0x98, 0xF9, 0x3C, 0xD2, 0xF9, 0xE5, + 0xE1, 0x90, 0xD2, 0x09, 0xD9, 0x3E, 0x47, 0x3F, + 0xAA, 0x8E, 0xD9, 0x20, 0x96, 0x31, 0x5B, 0xF1, + 0xFC, 0xA6, 0x55, 0xFE, 0xBC, 0x78, 0xE0, 0x99, + 0x65, 0xC9, 0x74, 0x78, 0x29, 0x6B, 0x75, 0xD3, + 0x90, 0x56, 0x60, 0x4D, 0x32, 0x71, 0x91, 0x6D, + 0xCF, 0xF2, 0x25, 0xCB, 0x6B, 0x9A, 0x34, 0xE1, + 0x5D, 0xC1, 0x64, 0xB2, 0xA6, 0x8A, 0x3B, 0x42, + 0xDE, 0x05, 0x7A, 0x6B, 0xAC, 0x17, 0x32, 0xCF, + 0x59, 0x45, 0xBB, 0xCA, 0x12, 0xB8, 0xB3, 0x61, + 0x59, 0xFB, 0x89, 0xF7, 0xBB, 0xBE, 0x9F, 0xE0, + 0x34, 0x21, 0x8F, 0x5B, 0x3B, 0xCF, 0x18, 0x4C, + 0x20, 0x73, 0x06, 0xE6, 0xD2, 0xEA, 0x69, 0x59, + 0xEA, 0xE0, 0x89, 0x0A, 0x7B, 0x68, 0x02, 0xEC, + 0x1D, 0xA0, 0x82, 0xBE, 0xD6, 0x5B, 0xB6, 0xE4, + 0xEB, 0x4D, 0x56, 0x15, 0x70, 0x1C, 0xB0, 0xE3, + 0x50, 0x36, 0x33, 0x14, 0xA4, 0xD1, 0x01, 0xDB, + 0xBA, 0x60, 0x53, 0x71, 0xA3, 0x8B, 0x2D, 0x8A, + 0x37, 0xFF, 0x78, 0xEB, 0xB3, 0x69, 0x82, 0x53, + 0x88, 0xAA, 0xB7, 0xD3, 0xC6, 0x23, 0xB9, 0x3E, + 0x51, 0x2D, 0x96, 0xA9, 0xF3, 0x39, 0xEC, 0x96, + 0x8B, 0x35, 0x27, 0x59, 0xAF, 0x3E, 0x8F, 0xA3, + 0x21, 0x1C, 0x39, 0x29, 0x5B, 0x01, 0x10, 0xE6, + 0xDF, 0x26, 0x4E, 0x90, 0x67, 0x8C, 0x11, 0xE2, + 0xB9, 0x03, 0xAF, 0x32, 0x2E, 0x4F, 0xA7, 0x70, + 0x28, 0xD3, 0xEC, 0xC4, 0x4F, 0x62, 0x79, 0xD6, + 0x3B, 0x1E, 0x60, 0xD8, 0x06, 0x72, 0x41, 0x01, + 0x5F, 0xC4, 0xF8, 0x9B, 0xAA, 0x15, 0x6A, 0x78, + 0xFA, 0x77, 0xBB, 0x29, 0x14, 0xCA, 0xC2, 0x81, + 0xF4, 0x40, 0x9C, 0x9C, 0x03, 0x70, 0xAB, 0xD7, + 0xC1, 0xF8, 0xA5, 0xD1, 0x04, 0x0B, 0x59, 0x75, + 0x2C, 0xC4, 0xFD, 0xF0, 0xD1, 0x9C, 0xB0, 0xC5, + 0x6F, 0xEF, 0x34, 0xFA, 0x3A, 0x3B, 0xCE, 0xE1, + 0xF0, 0x64, 0xE3, 0x60, 0xE8, 0x6D, 0xC5, 0x5D, + 0xB5, 0xC9, 0x37, 0x5B, 0xDA, 0xDA, 0x67, 0x2E, + 0x72, 0xF6, 0x64, 0xE3, 0xAC, 0xB2, 0xE6, 0xD8, + 0xA0, 0x84, 0x09, 0xC8, 0xCD, 0x60, 0xA1, 0xF9, + 0x53, 0x80, 0xAB, 0x6C, 0x3A, 0xCB, 0x6B, 0x91, + 0xA8, 0xA9, 0xA3, 0xB7, 0x75, 0x50, 0x49, 0x79, + 0xB8, 0x02, 0x5A, 0xDB, 0x34, 0x22, 0x61, 0x9B, + 0xD1, 0x1E, 0x2B, 0x54, 0xFE, 0x6D, 0x07, 0x58, + 0x81, 0xAC, 0xAC, 0x24, 0x53, 0x20, 0x31, 0xCC, + 0xD2, 0x99, 0x06, 0x0E, 0x4E, 0xB7, 0xF7, 0xCB, + 0xD8, 0x08, 0x36, 0xD4, 0xB8, 0x23, 0xA5, 0xFF, + 0xA4, 0xFE, 0x8C, 0x6B, 0x98, 0x3D, 0x2A, 0xAE, + 0xB8, 0xF1, 0x6F, 0x6C, 0x1C, 0x22, 0x81, 0xEF, + 0xD7, 0x13, 0xFF, 0xDA, 0x22, 0x06, 0x9A, 0x5D, + 0x8A, 0xC4, 0x91, 0x29, 0x1C, 0xBF, 0x49, 0xF1, + 0x18, 0xC9, 0x46, 0xD5, 0x0F, 0x08, 0xE0, 0xD1, + 0x73, 0x28, 0x14, 0xE8, 0x15, 0x81, 0x90, 0x6A, + 0x31, 0x53, 0x94, 0x01, 0x14, 0xBE, 0xC8, 0xEB, + 0xD4, 0x9C, 0x73, 0x79, 0x0F, 0x9E, 0xD7, 0xCC, + 0xD9, 0x85, 0xED, 0xAD, 0x8D, 0xB3, 0x42, 0x6B, + 0x15, 0x13, 0x98, 0xEB, 0xF1, 0x6E, 0xFA, 0xFE, + 0x3D, 0xA0, 0xC7, 0xF3, 0x8B, 0x22, 0x76, 0x05, + 0x76, 0xD4, 0x88, 0x52, 0x73, 0xF5, 0xE4, 0x0B, + 0x14, 0x05, 0x57, 0x10, 0x7F, 0xCE, 0x0B, 0xF8, + 0x46, 0x1F, 0x24, 0x8B, 0xC4, 0x3F, 0xBF, 0x5C, + 0xEE, 0xE7, 0x6E, 0xF3, 0xA9, 0xEB, 0xD2, 0x30, + 0x95, 0x6C, 0x7B, 0x98, 0xAC, 0x89, 0x8A, 0x39, + 0x9E, 0x5C, 0x2A, 0xB0, 0xCB, 0xE9, 0xE5, 0xAB, + 0x94, 0x71, 0xDF, 0x5E, 0x53, 0x0C, 0x72, 0xF2, + 0x6C, 0x34, 0xDB, 0xFE, 0x2F, 0x83, 0x68, 0x3E, + 0xB6, 0x22, 0xF9, 0x64, 0x7A, 0xA0, 0x6A, 0x26, + 0x7D, 0x78, 0x97, 0x36, 0x31, 0x2C, 0x90, 0xC9, + 0xE5, 0x9D, 0x77, 0x12, 0x2A, 0x88, 0x53, 0x8F, + 0xD0, 0xF5, 0x39, 0x16, 0xAF, 0x08, 0xB2, 0x36, + 0x93, 0x5C, 0xDC, 0x5B, 0xB3, 0xCB, 0x49, 0x0C, + 0x83, 0x09, 0xE6, 0xA7, 0x9B, 0x43, 0xE7, 0xA5, + 0x4A, 0x8A, 0x07, 0xE1, 0xBA, 0xFB, 0x9B, 0x93, + 0x7E, 0xAC, 0x2F, 0xC3, 0xAC, 0xED, 0x30, 0x64, + 0x1F, 0x33, 0x79, 0x19, 0xD2, 0xDB, 0x54, 0xEC, + 0x7F, 0x32, 0x0E, 0xC5, 0x1C, 0xD1, 0x3C, 0x00, + 0xB9, 0xE6, 0x03, 0xDF, 0x6D, 0xD2, 0x69, 0x0C, + 0x75, 0xAF, 0x37, 0x07, 0xB7, 0xC9, 0x3E, 0x91, + 0xCF, 0x02, 0x78, 0xD7, 0x43, 0xA1, 0x8B, 0x4E, + 0x69, 0x74, 0xB4, 0x24, 0x08, 0x10, 0x42, 0xB5, + 0xB4, 0xE7, 0x8C, 0xEB, 0x7F, 0xFF, 0x67, 0x98, + 0x0B, 0xBC, 0xBA, 0x5E, 0x29, 0xBE, 0x61, 0x33, + 0x56, 0x16, 0xD6, 0x5E, 0x86, 0xF0, 0xE7, 0x46, + 0xD1, 0x83, 0xDF, 0xD4, 0x6B, 0x75, 0xC9, 0x30, + 0x0D, 0x60, 0xC5, 0x19, 0xFD, 0x95, 0xA8, 0xA6, + 0x61, 0xFF, 0xC8, 0x2A, 0xE7, 0x5D, 0xD1, 0x49, + 0x49, 0x1F, 0x99, 0xD1, 0x41, 0x4F, 0x15, 0x79, + 0x00, 0x8A, 0x80, 0x27, 0xA6, 0xC9, 0x98, 0xD3, + 0xE7, 0xA2, 0xBB, 0xFA, 0x07, 0xAB, 0x53, 0xEF, + 0xE8, 0x17, 0xAE, 0x9C, 0x6A, 0xE8, 0xD0, 0x52, + 0xAA, 0x85, 0x9D, 0x03, 0x48, 0xB0, 0xD2, 0xC8, + 0x5B, 0xCC, 0xC4, 0x50, 0x84, 0x90, 0xBE, 0x0F, + 0x9B, 0x32, 0x13, 0xB8, 0xAF, 0x7C, 0xCE, 0xE7, + 0x22, 0xE2, 0x82, 0x13, 0x18, 0x71, 0x46, 0xC5, + 0xDA, 0x05, 0xB7, 0x65, 0xD8, 0x33, 0x06, 0xFA, + 0x5A, 0x6B, 0x76, 0xD6, 0x92, 0x76, 0xD1, 0x6A, + 0x2B, 0xC6, 0x0D, 0xB1, 0xAD, 0xAB, 0x57, 0x62, + 0xEA, 0x76, 0x37, 0x4E, 0xAB, 0x2D, 0x34, 0xD2, + 0xA3, 0x57, 0xC7, 0x56, 0xFB, 0xEA, 0xD6, 0xA9, + 0xE3, 0xC1, 0x63, 0x07, 0xDE, 0xB9, 0x5E, 0x5A, + 0x30, 0x2E, 0x41, 0x4D, 0x43, 0xE9, 0x1C, 0xA1, + 0x5B, 0xB2, 0x4F, 0xAF, 0xDC, 0xE9, 0xBB, 0xBE, + 0x73, 0x55, 0x90, 0xF0, 0xD0, 0x02, 0x98, 0x6D, + 0x13, 0x50, 0x9A, 0xCA, 0x4C, 0xB3, 0x15, 0x3A, + 0x26, 0x14, 0x38, 0x67, 0xEB, 0xA7, 0x27, 0x33, + 0x48, 0x97, 0x58, 0x94, 0x57, 0xEA, 0xF9, 0x7E, + 0x8B, 0xB0, 0xBB, 0xF3, 0xF4, 0x84, 0x6E, 0x69, + 0x95, 0x2C, 0xF4, 0x6B, 0x1C, 0x65, 0x39, 0xB4, + 0x46, 0xA7, 0x99, 0xD6, 0x68, 0x47, 0x6E, 0x2E, + 0x49, 0x84, 0x75, 0x3E, 0x6C, 0x2E, 0x9A, 0x08, + 0xBC, 0xB7, 0x2F, 0x86, 0x68, 0x5C, 0xE1, 0xBF, + 0xEA, 0xA1, 0xAF, 0x59, 0xD6, 0x71, 0xB7, 0xBD, + 0xD6, 0xC5, 0xC2, 0xF2, 0xF3, 0xB5, 0x36, 0xBB, + 0x36, 0x23, 0x4F, 0xD6, 0x44, 0x59, 0x0A, 0x44, + 0x86, 0xCA, 0xDC, 0xD4, 0x22, 0x0F, 0x79, 0x09, + 0x99, 0x8C, 0x8C, 0x9E, 0x03, 0xA4, 0x51, 0x99, + 0x5A, 0xB9, 0x97, 0x76, 0x73, 0x20, 0xD3, 0x98, + 0x8C, 0x52, 0x96, 0xE1, 0x65, 0x7B, 0x4C, 0x77, + 0x40, 0xB2, 0xFE, 0x27, 0x0A, 0x11, 0x76, 0x6E, + 0x3B, 0x35, 0x12, 0xC6, 0x4E, 0xC2, 0x0E, 0xCC, + 0x04, 0xB5, 0x51, 0x91, 0xD0, 0x4A, 0xF7, 0x84, + 0xF2, 0xE7, 0xE5, 0x99, 0x7E, 0xB5, 0x3E, 0xAC, + 0x53, 0xDB, 0x61, 0x11, 0x71, 0x56, 0x4E, 0xAB, + 0x4A, 0x68, 0xC1, 0x6A, 0xA5, 0xC5, 0x7F, 0x72, + 0xEB, 0x14, 0x97, 0xA4, 0x27, 0xA0, 0x53, 0xA1, + 0xC4, 0x70, 0x7D, 0x58, 0xBD, 0xC1, 0xD7, 0xFD, + 0x9F, 0xB8, 0x8C, 0xCE, 0x34, 0xF9, 0xE1, 0x9C, + 0x59, 0x79, 0x31, 0x24, 0xEC, 0xBB, 0xF5, 0x6F, + 0x3F, 0xA3, 0x5A, 0x55, 0xB3, 0xDE, 0x64, 0xDF, + 0xA9, 0x95, 0x0B, 0x53, 0xF2, 0xA7, 0x25, 0x7B, + 0x8C, 0xAD, 0x25, 0x9A, 0x35, 0xBF, 0x15, 0x46, + 0x69, 0x4A, 0x83, 0x8C, 0x80, 0xFC, 0x37, 0xD0, + 0xC3, 0x6F, 0x00, 0xE2, 0x3C, 0x63, 0xAB, 0xC5, + 0x53, 0xC1, 0x8D, 0x4A, 0x40, 0x4B, 0xE6, 0xDC, + 0x05, 0xB1, 0x20, 0x23, 0x8B, 0xB8, 0xDF, 0x40, + 0x86, 0x97, 0xB9, 0x5E, 0xA4, 0xB7, 0xA1, 0x37, + 0xE0, 0x4B, 0x9E, 0xD9, 0x84, 0x2B, 0x2D, 0xAD, + 0xD1, 0xB1, 0x52, 0x15, 0x00, 0x9B, 0xDD, 0x23, + 0xA9, 0x27, 0x44, 0x21, 0x33, 0x17, 0x1C, 0x61, + 0x49, 0x84, 0x0D, 0x6A, 0x11, 0x7C, 0x77, 0xA5, + 0xD6, 0x8E, 0xE6, 0x1D, 0x6E, 0x90, 0x04, 0x4A, + 0xD3, 0x54, 0x3A, 0xA7, 0x1A, 0x28, 0xC5, 0x94, + 0x01, 0xCA, 0xDB, 0x1B, 0x5D, 0x78, 0xC5, 0xC6, + 0x69, 0x0D, 0x69, 0x88, 0x75, 0x00, 0x02, 0x0B, + 0x59, 0x6C, 0x3E, 0xC5, 0x30, 0xDF, 0xEE, 0x85, + 0x43, 0xA2, 0x9A, 0xF9, 0xDD, 0x85, 0x6E, 0xB3, + 0x0D, 0x83, 0x6A, 0x13, 0x88, 0xD0, 0x12, 0x15, + 0x53, 0x16, 0xFC, 0x5C, 0x15, 0x47, 0xEC, 0x6D, + 0x4D, 0x18, 0x2D, 0x88, 0xDB, 0xD2, 0x17, 0x6C, + 0xDE, 0x64, 0xEC, 0x70, 0x8D, 0x19, 0xDC, 0x66, + 0x69, 0x7F, 0xCF, 0x61, 0x6E, 0x4F, 0x23, 0x86, + 0xF5, 0x1A, 0x98, 0x47, 0x4B, 0xCC, 0xE9, 0x2F, + 0x12, 0x28, 0x12, 0xB9, 0xEB, 0xD8, 0x32, 0xDC, + 0xE4, 0xD8, 0x63, 0xAC, 0x56, 0x08, 0x2F, 0xEC, + 0x5E, 0x47, 0x29, 0xFF, 0x76, 0xFE, 0x95, 0x60, + 0xD2, 0x19, 0x61, 0x0E, 0xAF, 0xFC, 0x44, 0x42, + 0x11, 0x42, 0x79, 0xBC, 0x06, 0x3A, 0xAD, 0x93, + 0x7E, 0x46, 0x60, 0x03, 0xB0, 0xF5, 0x9F, 0x57, + 0x28, 0x48, 0x44, 0x8F, 0x0E, 0xFA, 0x72, 0x8C, + 0xE4, 0x18, 0xF4, 0x99, 0x6B, 0xB1, 0x23, 0x45, + 0xDC, 0x13, 0xA2, 0xF6, 0x5F, 0x57, 0x35, 0xA2, + 0xD7, 0x38, 0xF9, 0xE9, 0x8A, 0x7A, 0x79, 0xC6, + 0xB2, 0xCD, 0xBF, 0xD3, 0x41, 0x21, 0x56, 0xB3, + 0x39, 0xD9, 0x14, 0x3B, 0xDD, 0x85, 0xCB, 0x78, + 0x2F, 0xEB, 0x7E, 0x29, 0xBC, 0x52, 0x24, 0xE7, + 0x1B, 0x85, 0xB1, 0x65, 0xAE, 0xAB, 0x65, 0xF9, + 0x54, 0xD2, 0x1F, 0x37, 0x29, 0x52, 0x30, 0x5B, + 0x3D, 0x5F, 0x48, 0x84, 0x3F, 0x51, 0x27, 0x88, + 0x9D, 0xA7, 0x94, 0xF0, 0x73, 0xCD, 0x98, 0xD2, + 0x05, 0xE8, 0x25, 0x71, 0x7C, 0x93, 0x13, 0x82, + 0x5D, 0x53, 0x8D, 0x05, 0x0E, 0x69, 0x20, 0xC4, + 0xDB, 0xF2, 0xF6, 0x55, 0x24, 0x29, 0xD0, 0x41, + 0xF6, 0x2D, 0xF8, 0xC1, 0x2E, 0xC2, 0x4D, 0xE1, + 0xD7, 0x2D, 0xA0, 0x49, 0x16, 0x0B, 0x4D, 0x34, + 0xB5, 0x6D, 0xAE, 0x10, 0x93, 0x1E, 0xB6, 0x95, + 0x69, 0xC2, 0xB3, 0xC0, 0xAF, 0x6F, 0xFF, 0xA5, + 0x32, 0x3C, 0x7D, 0xC9, 0xC7, 0xC8, 0xEF, 0x0C, + 0x64, 0x20, 0x23, 0xC4, 0xFE, 0x89, 0x87, 0x8E, + 0xB3, 0xA6, 0xC5, 0x24, 0xCF, 0x03, 0x7E, 0x74, + 0xF7, 0xBF, 0x89, 0x1E, 0xCF, 0xB1, 0x02, 0xFA, + 0xF2, 0x9F, 0xD3, 0x9D, 0x99, 0x00, 0xDA, 0x7A, + 0x92, 0x7D, 0x13, 0x11, 0x92, 0xAD, 0x55, 0xF2, + 0xE1, 0x82, 0x72, 0xB1, 0x6A, 0xF1, 0x45, 0x05, + 0xDA, 0x17, 0xC9, 0xA1, 0x42, 0x82, 0x89, 0x77, + 0x31, 0xB6, 0x72, 0x54, 0x7C, 0x68, 0x10, 0x25, + 0x57, 0x30, 0x16, 0x15, 0x08, 0x58, 0x8B, 0xC1, + 0x61, 0xCB, 0xA0, 0x58, 0x29, 0x33, 0xB1, 0x64, + 0xF4, 0x4F, 0x06, 0xAA, 0x25, 0x31, 0xAA, 0xA8, + 0x92, 0x1C, 0x69, 0x1E, 0x6E, 0xB6, 0xBE, 0x81, + 0xDA, 0x9B, 0xE5, 0x1C, 0x56, 0x39, 0x55, 0xE0, + 0xC1, 0xEF, 0xD3, 0xED, 0x2A, 0x1C, 0x94, 0x9B, + 0xD4, 0xE0, 0x0B, 0x3A, 0xE9, 0xEB, 0xC1, 0x3C, + 0x4C, 0x6C, 0x4E, 0x5E, 0x39, 0x4C, 0xB0, 0x34, + 0xB9, 0xCB, 0x75, 0xBE, 0xCE, 0x86, 0x44, 0xFF, + 0x89, 0xEF, 0x95, 0xE7, 0x6E, 0xF7, 0x15, 0xE1, + 0x7A, 0xA2, 0x6B, 0x1F, 0xEB, 0x77, 0x4C, 0x50, + 0x59, 0xB3, 0xA3, 0x9A, 0x38, 0xDF, 0xD0, 0x57, + 0xD6, 0x41, 0xE4, 0x3F, 0xFE, 0x0F, 0x3E, 0x40, + 0xFF, 0xF6, 0xB2, 0x36, 0x3C, 0x1B, 0xF0, 0xEF, + 0x07, 0x87, 0x3D, 0x09, 0xA4, 0x87, 0x76, 0x9D, + 0x0A, 0x73, 0xCD, 0x0C, 0xC6, 0x44, 0xF5, 0x3C, + 0x25, 0xD2, 0x02, 0x5E, 0xE7, 0x1C, 0x69, 0xB7, + 0xAC, 0x0F, 0xA6, 0x61, 0x15, 0x57, 0xC4, 0x27, + 0xC0, 0x69, 0xDF, 0x2E, 0x1B, 0xF6, 0x29, 0xD9, + 0xA0, 0xCB, 0x5C, 0x67, 0xC7, 0xEA, 0x4F, 0xA6, + 0x58, 0xC7, 0x8D, 0x00, 0x42, 0xB0, 0x59, 0xE6, + 0xB6, 0x58, 0xFF, 0xCE, 0x60, 0x16, 0x69, 0x67, + 0xDB, 0x94, 0xF7, 0x16, 0xEB, 0x4D, 0x04, 0xB3, + 0xD2, 0x45, 0x0F, 0x40, 0x03, 0x1F, 0x10, 0xAC, + 0xDD, 0x07, 0x77, 0x7F, 0xBE, 0x9F, 0xBB, 0xB7, + 0x7F, 0xCB, 0x7C, 0x1F, 0xA9, 0xFC, 0x1E, 0xAF, + 0x0C, 0x5F, 0x86, 0xD7, 0x96, 0x2D, 0xAE, 0xD0, + 0x47, 0x4B, 0xA0, 0xFE, 0x68, 0xD9, 0xB2, 0x32, + 0x77, 0xA9, 0xCA, 0x7F, 0xC6, 0x76, 0xC6, 0x61, + 0x6B, 0x8E, 0x43, 0x9A, 0x1D, 0x4B, 0xFF, 0x72, + 0x43, 0x78, 0x19, 0xB5, 0x51, 0x87, 0x56, 0xA7, + 0x87, 0x3E, 0xF5, 0x84, 0x01, 0x26, 0x46, 0xC3, + 0x65, 0x9A, 0x6B, 0xA8, 0x6E, 0x62, 0x27, 0x26, + 0x14, 0xD8, 0x5E, 0xEC, 0xD5, 0x35, 0x0E, 0x3C, + 0xD0, 0xA1, 0x25, 0xAE, 0x9C, 0x17, 0xCC, 0xE2, + 0x52, 0x39, 0xE1, 0xEE, 0x9C, 0xDB, 0x39, 0xCA, + 0x7B, 0x18, 0xCF, 0x2C, 0x88, 0xCF, 0x14, 0x68, + 0x26, 0xB6, 0xCC, 0x1E, 0x6A, 0xA8, 0xE1, 0x69, + 0x2C, 0x91, 0x5F, 0x3B, 0xF1, 0xC1, 0xDB, 0x34, + 0xC6, 0xF3, 0x78, 0x83, 0xCB, 0x4E, 0xDC, 0xE0, + 0xF7, 0xC9, 0x95, 0xB6, 0x9E, 0x3A, 0xCE, 0x30, + 0xDC, 0x16, 0x6F, 0x78, 0x4C, 0x93, 0xD6, 0xCB, + 0xBC, 0xAC, 0x3C, 0x79, 0xBC, 0x31, 0x93, 0x10, + 0xCE, 0x6E, 0x66, 0x57, 0x00, 0xF1, 0x7F, 0x96, + 0x2F, 0x18, 0xB2, 0x40, 0x73, 0x9D, 0x15, 0x69, + 0x0B, 0x1B, 0x6C, 0x85, 0xD1, 0xAA, 0xA3, 0x2D, + 0x4A, 0x79, 0x74, 0x4A, 0xE5, 0x0C, 0xF9, 0xA9, + 0x0A, 0x09, 0x54, 0xB4, 0xA4, 0xD9, 0x4C, 0x49, + 0x9B, 0x41, 0x23, 0xEF, 0xC0, 0x20, 0x44, 0x31, + 0xF7, 0x22, 0x85, 0xB5, 0xDA, 0x9E, 0x19, 0x22, + 0x23, 0x0A, 0x30, 0x4D, 0x3A, 0x1B, 0xD8, 0x52, + 0x08, 0x72, 0x61, 0xB7, 0xCF, 0x0D, 0x8B, 0x90, + 0xD1, 0x46, 0x23, 0xEB, 0xCD, 0xC6, 0x38, 0x7B, + 0xC6, 0xAF, 0x65, 0xBE, 0x5F, 0x01, 0x1B, 0x6B, + 0xC1, 0x23, 0xC1, 0x30, 0x6A, 0x1E, 0x8F, 0xBF, + 0x2D, 0xF0, 0xB6, 0xF8, 0x9B, 0x0A, 0xE0, 0x5D, + 0xE0, 0xE4, 0xB7, 0xF5, 0x0A, 0xDA, 0x46, 0xE5, + 0x3A, 0x9B, 0x6B, 0xCA, 0xDA, 0x06, 0x43, 0xBE, + 0x6B, 0xFD, 0xC2, 0xB0, 0x6A, 0x6C, 0x75, 0x88, + 0x3C, 0x2D, 0xC6, 0x13, 0xAC, 0x72, 0x16, 0x31, + 0x7A, 0x40, 0xC4, 0xA2, 0xC0, 0x86, 0x69, 0x83, + 0xD3, 0x2C, 0x9C, 0xE0, 0xA6, 0xCC, 0xED, 0xF4, + 0x03, 0x62, 0x6B, 0xB2, 0x3B, 0x5B, 0x9D, 0xA5, + 0x86, 0x77, 0x7C, 0x73, 0x5E, 0x19, 0x11, 0xD7, + 0x7B, 0x11, 0x96, 0xC8, 0xFA, 0x47, 0x21, 0xD6, + 0xB0, 0xFE, 0x0B, 0x08, 0x11, 0xFC, 0x00, 0xB9, + 0xA1, 0x24, 0x2C, 0xBD, 0x4A, 0x92, 0x43, 0x10, + 0x08, 0xBE, 0xE9, 0xE1, 0x5D, 0x19, 0x82, 0xDE, + 0x34, 0xAE, 0xDC, 0xA6, 0x85, 0x8F, 0x19, 0x30, + 0x20, 0xB6, 0x44, 0x7F, 0x6B, 0xA6, 0x63, 0x70, + 0x59, 0xDA, 0x8D, 0xE0, 0xF8, 0x46, 0x86, 0x57, + 0xB8, 0x1C, 0x57, 0x13, 0x78, 0x41, 0x8C, 0xF5, + 0x7D, 0x77, 0xAE, 0x75, 0x6C, 0x59, 0x93, 0x2E, + 0x05, 0x25, 0x03, 0xD1, 0xEA, 0xFB, 0x2D, 0x60, + 0xD2, 0x61, 0x23, 0xEA, 0x0E, 0xFF, 0x55, 0xE3, + 0x24, 0x49, 0x00, 0x19, 0xBD, 0x1E, 0x56, 0x24, + 0x87, 0x2F, 0x7B, 0x98, 0x07, 0x36, 0xD2, 0x7C, + 0xC5, 0x9B, 0xE0, 0x4E, 0x29, 0xAB, 0xA1, 0xB8, + 0x35, 0x15, 0x31, 0xCE, 0x65, 0x14, 0x24, 0xF8, + 0x10, 0xB5, 0xAB, 0x3E, 0xD5, 0x58, 0xCA, 0xE5, + 0x73, 0x2D, 0x7C, 0x8B, 0xB4, 0x62, 0x75, 0x03, + 0x30, 0x89, 0xFE, 0x32, 0xF8, 0x65, 0x99, 0xD0, + 0x88, 0xD5, 0x72, 0x88, 0x03, 0xC9, 0x51, 0x03, + 0xBA, 0x2F, 0xFB, 0x7C, 0x39, 0x02, 0x05, 0xC4, + 0xCE, 0xD8, 0xB3, 0xC2, 0x7B, 0x29, 0x8E, 0xA7, + 0x9D, 0x35, 0x97, 0xB7, 0x17, 0xDE, 0x28, 0x0B, + 0x32, 0xE5, 0x41, 0xDA, 0x1D, 0x98, 0xBD, 0x27, + 0xEF, 0xF7, 0xB4, 0x43, 0x09, 0x13, 0x39, 0xC7, + 0x40, 0x16, 0x11, 0x20, 0x71, 0xCB, 0xB6, 0xC9, + 0xB0, 0x8F, 0x20, 0xC1, 0xF0, 0x40, 0xFB, 0x6E, + 0x73, 0x04, 0x8F, 0x73, 0xCA, 0x45, 0xDB, 0xE0, + 0xF9, 0x25, 0x8D, 0x32, 0xF2, 0x3E, 0x36, 0xBE, + 0xF7, 0x88, 0xF8, 0x13, 0x4D, 0x9B, 0x10, 0xC2, + 0x58, 0x0B, 0x20, 0xF8, 0x78, 0xB6, 0x4C, 0x7D, + 0x2A, 0xA6, 0x81, 0x40, 0xD1, 0x30, 0x50, 0x38, + 0x2A, 0x5F, 0xBC, 0x81, 0x8E, 0x0F, 0xD4, 0xD0, + 0x87, 0x99, 0x78, 0x3D, 0xBE, 0x25, 0x15, 0xF4, + 0x45, 0x61, 0xA3, 0x1A, 0x7D, 0x05, 0x3F, 0xB5, + 0xA6, 0x1C, 0x41, 0xC6, 0x0E, 0xBE, 0x57, 0x6F, + 0xC5, 0xB6, 0x38, 0x63, 0x90, 0x55, 0x23, 0xFC, + 0x26, 0x9E, 0xFD, 0xB8, 0x6C, 0xF2, 0x99, 0x6B, + 0x6D, 0x90, 0xFE, 0x28, 0xA0, 0x16, 0xEE, 0x63, + 0xC2, 0x4C, 0xD6, 0xB2, 0x0C, 0xFA, 0x6E, 0x85, + 0x51, 0xE4, 0x2F, 0x57, 0x91, 0x82, 0x84, 0x43, + 0x8A, 0x44, 0x31, 0x6C, 0x68, 0x02, 0x01, 0x7C, + 0xCE, 0x4D, 0xC0, 0x7C, 0x43, 0xA9, 0x54, 0xF5, + 0x0E, 0xCA, 0xE6, 0x15, 0x98, 0xAE, 0x41, 0x57, + 0x0A, 0x66, 0xBA, 0x6D, 0x6E, 0x68, 0xB9, 0x2E, + 0x0D, 0x42, 0xD2, 0xF5, 0x0B, 0xFC, 0x2D, 0xA8, + 0x61, 0x6E, 0x60, 0x4E, 0x51, 0x78, 0xEB, 0x0C, + 0x52, 0x9E, 0xC0, 0x4A, 0xB0, 0x92, 0x85, 0x5C, + 0x3A, 0x3D, 0x69, 0x95, 0xAB, 0x62, 0xEB, 0x2F, + 0x9B, 0x12, 0xF5, 0x2E, 0xB5, 0xA6, 0x93, 0xCE, + 0x14, 0x97, 0xA7, 0x1E, 0x0A, 0x7B, 0x94, 0x74, + 0xFB, 0x65, 0xD0, 0x5A, 0x97, 0x55, 0x40, 0x02, + 0x71, 0x87, 0x9C, 0x9F, 0xCB, 0x41, 0x3F, 0x08, + 0x8D, 0x6A, 0xCA, 0xE6, 0xEC, 0xE6, 0x71, 0x22, + 0xF8, 0x58, 0x9F, 0xF1, 0x94, 0xF6, 0xE4, 0xD6, + 0xDC, 0x35, 0xD7, 0xEB, 0x6B, 0x78, 0x99, 0x66, + 0xF9, 0xE2, 0x15, 0x27, 0xC9, 0x8C, 0x27, 0xB4, + 0x89, 0x3C, 0x15, 0xEE, 0x52, 0x71, 0xA9, 0xD2, + 0x50, 0x3C, 0xD2, 0x31, 0xBB, 0x3A, 0xE5, 0x87, + 0xAF, 0x65, 0x2B, 0xF2, 0xF5, 0xC9, 0x44, 0xA2, + 0x59, 0x1C, 0x57, 0x96, 0xB9, 0xC2, 0x5E, 0xCB, + 0x8A, 0x5B, 0x2B, 0x7A, 0x7E, 0x93, 0x3C, 0x08, + 0x27, 0xCD, 0xB4, 0xB0, 0x1B, 0xF3, 0x82, 0x50, + 0x78, 0xCF, 0xEA, 0x28, 0x57, 0xB1, 0x0F, 0xB4, + 0xB6, 0x93, 0x82, 0x8E, 0x7A, 0xD1, 0x9F, 0x04, + 0xEC, 0xEE, 0x24, 0x3D, 0x8A, 0x5E, 0x56, 0x99, + 0x8D, 0x83, 0xA4, 0x05, 0x7D, 0xFB, 0x36, 0xDB, + 0xAB, 0xD1, 0x67, 0x59, 0xC7, 0x4A, 0xB9, 0xAF, + 0x99, 0xB6, 0xD8, 0xD4, 0x2C, 0xCA, 0x8C, 0xCC, + 0xD2, 0x32, 0xAB, 0x51, 0xCE, 0x2D, 0x22, 0xE0, + 0x29, 0xB1, 0x73, 0x10, 0x60, 0xA8, 0x6B, 0x8F, + 0x68, 0xAF, 0x58, 0x06, 0x9D, 0x72, 0x36, 0x98, + 0x3F, 0xF3, 0x6B, 0xAD, 0x3E, 0x7F, 0x4A, 0x00, + 0x94, 0x04, 0xAE, 0xE9, 0x8A, 0x9E, 0x8A, 0x03, + 0xD8, 0x04, 0xCC, 0xFE, 0xE3, 0xF8, 0xA2, 0x04, + 0x64, 0x17, 0x54, 0x77, 0xCA, 0x20, 0xD0, 0x80, + 0x1B, 0x36, 0xEF, 0x59, 0x31, 0xFA, 0xE4, 0xF5, + 0xAF, 0x56, 0x09, 0x02, 0xAD, 0xCF, 0xA6, 0xBC, + 0x26, 0x23, 0x27, 0x6D, 0xF3, 0x52, 0xCE, 0x2F, + 0x4C, 0x9C, 0xA8, 0x23, 0x75, 0xFA, 0x56, 0x9E, + 0x07, 0x5B, 0xB9, 0x30, 0x5A, 0xB1, 0x27, 0xFF, + 0x72, 0xBF, 0x50, 0xB1, 0x27, 0xEF, 0xA1, 0x0C, + 0x3A, 0xC9, 0x72, 0x21, 0xBE, 0xD8, 0xDC, 0xD5, + 0x66, 0x4A, 0x0A, 0x58, 0xFA, 0x57, 0xB4, 0x00, + 0x07, 0x31, 0xF2, 0x4E, 0xDC, 0xE0, 0x86, 0x99, + 0x45, 0xE5, 0x45, 0xCF, 0x27, 0x35, 0x79, 0x57, + 0xF5, 0xA2, 0x7A, 0x29, 0xFA, 0x5E, 0xCF, 0xF9, + 0xA9, 0x96, 0x11, 0xE1, 0x4A, 0x6C, 0xE5, 0xB8, + 0x8E, 0x78, 0xE6, 0xA1, 0x46, 0x97, 0xAE, 0xB4, + 0xF3, 0x6D, 0x7F, 0x8E, 0xD1, 0x86, 0x6B, 0x78, + 0x2B, 0x55, 0xC5, 0xDF, 0x0F, 0x43, 0x78, 0xED, + 0xD2, 0x38, 0xE5, 0x8B, 0x94, 0x7A, 0x06, 0xC5, + 0x73, 0x17, 0x55, 0x93, 0xAD, 0xA5, 0xAC, 0xBA, + 0x81, 0x8A, 0x6D, 0x73, 0x4B, 0xA1, 0x32, 0x8F, + 0x21, 0xA6, 0x5B, 0x51, 0x31, 0x58, 0xD0, 0xE4, + 0x0B, 0x93, 0x46, 0xF2, 0x51, 0x30, 0x3E, 0x60, + 0xE1, 0xCB, 0x30, 0x04, 0x15, 0x8D, 0x1E, 0x87, + 0xA6, 0xF6, 0x38, 0xE0, 0x27, 0x84, 0x81, 0x18, + 0x2B, 0x37, 0xBB, 0xD3, 0xDB, 0xE7, 0x91, 0xA3, + 0x1B, 0x6B, 0x20, 0xCB, 0x2C, 0x52, 0xB1, 0xB9, + 0x6A, 0x94, 0xF8, 0xCD, 0xBA, 0x5D, 0xC7, 0xDD, + 0x79, 0x36, 0x38, 0xC2, 0xFC, 0xEC, 0x4F, 0x2B, + 0x5F, 0x73, 0x44, 0x03, 0xE9, 0xA9, 0xF5, 0xD9, + 0x99, 0xEA, 0x61, 0xDC, 0x6A, 0x98, 0xBE, 0xDE, + 0xB9, 0x34, 0xCC, 0x76, 0xB0, 0xE1, 0x8C, 0x70, + 0x3A, 0xA5, 0x7C, 0xD1, 0xC0, 0x2A, 0x8E, 0x7D, + 0x47, 0x8A, 0x63, 0xEA, 0x30, 0x6B, 0xEE, 0x36, + 0x0B, 0xA8, 0xAE, 0x46, 0xCD, 0x01, 0x83, 0xF6, + 0x07, 0xF9, 0xED, 0x8B, 0x69, 0x97, 0xB6, 0xC3, + 0x5D, 0x75, 0x6E, 0xD8, 0xDF, 0x01, 0x82, 0x48, + 0x31, 0x2F, 0xDE, 0xED, 0x8E, 0xC5, 0xD8, 0xA6, + 0xC0, 0x36, 0x0E, 0x66, 0xA4, 0xE9, 0xE5, 0xA9, + 0x7D, 0x5C, 0xD2, 0x43, 0x72, 0xC0, 0xAD, 0x26, + 0x78, 0xF2, 0xB0, 0x08, 0x12, 0xAE, 0x6C, 0x1A, + 0x0F, 0x53, 0x30, 0xB3, 0xAB, 0x01, 0x53, 0xDA, + 0x3C, 0x5F, 0x4C, 0x17, 0xBD, 0x2F, 0xB6, 0x0E, + 0x7E, 0x80, 0x87, 0x4C, 0x1B, 0x92, 0x9B, 0x62, + 0xE3, 0x89, 0xEE, 0xE2, 0xA0, 0x14, 0x06, 0x0D, + 0x4D, 0xCC, 0x96, 0x5A, 0xF8, 0x64, 0x2A, 0x05, + 0xA9, 0xEE, 0xD5, 0x0D, 0x23, 0x90, 0xB0, 0x67, + 0xD5, 0x51, 0x1D, 0x18, 0xBC, 0xBA, 0xE6, 0xA5, + 0xAD, 0x29, 0x18, 0xD5, 0x06, 0xFC, 0xC9, 0x12, + 0x6D, 0x70, 0xA8, 0x6E, 0x96, 0x8B, 0x5F, 0x9C, + 0x99, 0x43, 0x07, 0x02, 0x37, 0x48, 0x8C, 0xFB, + 0x5F, 0xF5, 0xDE, 0x69, 0x26, 0x73, 0x7D, 0xF6, + 0x3A, 0x2C, 0xE5, 0x58, 0x01, 0xC3, 0x48, 0xB0, + 0xF0, 0x0D, 0x56, 0xAF, 0x8C, 0x0F, 0x5C, 0xB3, + 0xBA, 0x44, 0x8C, 0x39, 0xB0, 0x20, 0xD2, 0x93, + 0x81, 0x19, 0x99, 0x4E, 0xAC, 0xB9, 0x1F, 0xC3, + 0x1F, 0x34, 0x7D, 0xF3, 0x3E, 0x1A, 0xE1, 0x26, + 0x7C, 0xB7, 0x22, 0x0A, 0xDC, 0x0D, 0x14, 0xF8, + 0x43, 0x8A, 0x23, 0x46, 0x37, 0x9C, 0x2A, 0xB8, + 0x1F, 0x24, 0x72, 0xE2, 0xEA, 0xC4, 0x67, 0x13, + 0x17, 0x33, 0xBD, 0xA0, 0x07, 0xA0, 0x3E, 0xDE, + 0x8B, 0xC4, 0xD6, 0xDB, 0xD9, 0xF1, 0xB8, 0xF4, + 0xFB, 0x83, 0x13, 0x14, 0xCD, 0x36, 0xF6, 0xDC, + 0xD5, 0x85, 0x93, 0x7C, 0xF9, 0x6C, 0xEA, 0x52, + 0x92, 0xFB, 0xFC, 0x95, 0x02, 0x10, 0x7B, 0x57, + 0x9F, 0xF0, 0x7C, 0x2E, 0x79, 0x00, 0x3D, 0xB2, + 0xA1, 0x6C, 0x4E, 0xD4, 0x17, 0xFA, 0x0F, 0x13, + 0xC8, 0xBF, 0xB1, 0x82, 0xF7, 0xDD, 0xCF, 0x08, + 0xF2, 0x50, 0xDB, 0x16, 0xA4, 0x5A, 0x60, 0x4A, + 0x57, 0x2B, 0x0E, 0xDC, 0x4A, 0xBF, 0x9C, 0x86, + 0x08, 0x8A, 0x5A, 0xC8, 0x74, 0xDD, 0xA2, 0x6E, + 0x12, 0xA0, 0xEF, 0x63, 0x5A, 0xD2, 0x82, 0xAD, + 0xCD, 0xC7, 0xED, 0x16, 0x86, 0x45, 0x3D, 0xFB, + 0x35, 0xC3, 0xB1, 0xBA, 0x68, 0x21, 0xB4, 0xB7, + 0x22, 0x0B, 0x55, 0x79, 0x8B, 0x9C, 0xCF, 0xE0, + 0x66, 0x61, 0x5C, 0xE2, 0x55, 0x96, 0x0D, 0x09, + 0xE6, 0x77, 0xFE, 0xFE, 0x76, 0xBE, 0x91, 0x5E, + 0x04, 0xE5, 0x65, 0x44, 0xBD, 0x09, 0xD0, 0x6F, + 0x83, 0x44, 0xF9, 0x68, 0xDC, 0x68, 0x25, 0xCB, + 0xC6, 0x64, 0xD5, 0x18, 0xA4, 0x41, 0xE1, 0x9B, + 0x07, 0x6F, 0xC3, 0x38, 0x91, 0x37, 0xFC, 0x1B, + 0x73, 0x32, 0xE2, 0xB0, 0x68, 0x95, 0x44, 0x3B, + 0x7A, 0x00, 0x23, 0x36, 0x31, 0x15, 0x79, 0xA9, + 0xB0, 0x8F, 0x36, 0x73, 0xDA, 0x05, 0x90, 0xE6, + 0x96, 0xCE, 0xD9, 0x01, 0x44, 0x4A, 0x70, 0xA6, + 0x7B, 0x2A, 0x7D, 0x55, 0x12, 0xD6, 0x5B, 0xFC, + 0xD7, 0xAF, 0x1E, 0x34, 0x27, 0x77, 0x69, 0xE1, + 0x71, 0x08, 0x83, 0x01, 0xDE, 0x78, 0x46, 0xF0, + 0x88, 0xF4, 0x87, 0xC4, 0x92, 0x1B, 0xEB, 0x98, + 0x35, 0x4B, 0xAE, 0x9A, 0xF6, 0xEA, 0xB2, 0x34, + 0x91, 0x14, 0xEB, 0x21, 0xF6, 0x18, 0xDB, 0x1D, + 0x92, 0x6C, 0x1D, 0x2F, 0xE3, 0xA5, 0xF2, 0x29, + 0xC5, 0x73, 0x40, 0xC4, 0x0A, 0xEC, 0x11, 0xC2, + 0xD0, 0x14, 0x4D, 0x03, 0x94, 0xFC, 0x4D, 0x8E, + 0x38, 0x66, 0xA7, 0xD0, 0xA1, 0x0B, 0x64, 0xC8, + 0xB9, 0x92, 0xB0, 0xA4, 0xDD, 0xBC, 0xAD, 0x82, + 0x4E, 0x43, 0x97, 0x43, 0x78, 0xEA, 0x9A, 0x38, + 0xE5, 0x8C, 0x2C, 0x5A, 0xE1, 0x94, 0xAF, 0x43, + 0x10, 0xFB, 0xEC, 0x90, 0x28, 0x41, 0x6C, 0x5C, + 0xB7, 0xB8, 0xAF, 0xA5, 0x24, 0xF7, 0x4F, 0xFD, + 0x6F, 0x2E, 0x98, 0x44, 0x3F, 0x5E, 0x89, 0x24, + 0xF6, 0xCF, 0x11, 0x0E, 0x67, 0x1B, 0x81, 0x68, + 0x37, 0xD5, 0x9B, 0x2D, 0xB9, 0x1C, 0xB1, 0xE6, + 0x87, 0xD6, 0xA2, 0x02, 0x0F, 0x91, 0x08, 0xF6, + 0x9B, 0x94, 0x76, 0x62, 0xFD, 0xE7, 0x18, 0xAC, + 0x28, 0xA6, 0xAC, 0xDA, 0x27, 0xF4, 0x33, 0x59, + 0xBB, 0xBE, 0x36, 0x2C, 0xEE, 0xEA, 0x91, 0xE6, + 0x91, 0x95, 0x2C, 0x58, 0x0A, 0xB2, 0xCA, 0xA3, + 0xAA, 0x39, 0x03, 0x9A, 0x75, 0x3C, 0x27, 0x6E, + 0x02, 0x89, 0x17, 0x4B, 0x02, 0x42, 0x7C, 0xB4, + 0x2E, 0xAD, 0xB4, 0xD9, 0x35, 0xB2, 0x30, 0x9E, + 0x2F, 0xEC, 0x9F, 0x25, 0x56, 0x1A, 0x35, 0x40, + 0xF1, 0xAF, 0x1D, 0xA4, 0xA8, 0x62, 0x07, 0x70, + 0x98, 0x6C, 0xDE, 0x1E, 0x89, 0xC1, 0xD3, 0x30, + 0xBB, 0x82, 0x72, 0x40, 0xF2, 0xBC, 0x53, 0xC7, + 0xDE, 0xAB, 0xFC, 0x7D, 0xAD, 0xBF, 0xDA, 0xE0, + 0xA7, 0xA1, 0x0C, 0xD6, 0x73, 0x37, 0x36, 0xA1, + 0xEE, 0xA6, 0x96, 0x88, 0x79, 0x0E, 0x4A, 0x2C, + 0x69, 0x4C, 0xE5, 0x30, 0xFB, 0xDD, 0xE1, 0xFE, + 0x86, 0x90, 0xDC, 0xDF, 0x03, 0xF5, 0x17, 0x2F, + 0xF4, 0x58, 0x2D, 0xD3, 0xED, 0x3D, 0x7D, 0xA0, + 0xB3, 0x6E, 0x1E, 0xD3, 0xBB, 0xD9, 0x57, 0xBA, + 0x8B, 0x00, 0x72, 0xC4, 0xEE, 0xCF, 0x39, 0xD5, + 0x74, 0xFA, 0x13, 0xF0, 0xD7, 0xE9, 0x10, 0x0C, + 0x7A, 0x52, 0x62, 0xD0, 0xC9, 0xD5, 0x2D, 0xDC, + 0x11, 0xD4, 0xFF, 0x34, 0xB2, 0x55, 0xF9, 0x99, + 0x81, 0xB4, 0xC9, 0x14, 0x02, 0x91, 0x81, 0x56, + 0x29, 0xF6, 0xA9, 0x1A, 0x19, 0x8E, 0x74, 0xB3, + 0xA3, 0xD1, 0x28, 0xB5, 0x72, 0xD8, 0x6F, 0x54, + 0x15, 0x74, 0x55, 0x70, 0x26, 0x62, 0xCB, 0x1D, + 0x15, 0x2C, 0x7F, 0x4C, 0x9C, 0xB4, 0xDE, 0xA2, + 0x07, 0xD5, 0xA9, 0x38, 0x29, 0x42, 0x51, 0x67, + 0x44, 0x26, 0x97, 0x7E, 0x73, 0x0E, 0xC6, 0x01, + 0x00, 0x65, 0xC8, 0xE0, 0x34, 0x88, 0x2B, 0xD3, + 0x2F, 0xD3, 0x5C, 0x6A, 0xF6, 0xB8, 0xD9, 0x3A, + 0x50, 0x9C, 0xC3, 0x39, 0xD9, 0x6F, 0xB9, 0xDD, + 0x55, 0x8A, 0xF9, 0x52, 0x35, 0xFB, 0xF1, 0x71, + 0x97, 0x76, 0x04, 0x75, 0xEE, 0x2E, 0x3F, 0xCA, + 0x0E, 0x83, 0xA8, 0xE3, 0x1F, 0xA7, 0xF1, 0x3D, + 0x78, 0xCC, 0x79, 0x64, 0x80, 0x5E, 0x77, 0x05, + 0xDB, 0xB7, 0x0F, 0x73, 0x53, 0x3A, 0x56, 0xD8, + 0xB7, 0x7C, 0x12, 0xE8, 0xF6, 0x51, 0x07, 0xC9, + 0x01, 0x43, 0x97, 0x51, 0x75, 0x95, 0x94, 0x65, + 0xFD, 0x4D, 0x8C, 0x8C, 0xD3, 0xA8, 0xEE, 0xA9, + 0x5E, 0xFB, 0xC7, 0xF6, 0xF8, 0x40, 0x0E, 0xA5, + 0xD5, 0x1E, 0x79, 0xB4, 0x0C, 0xEF, 0x8B, 0x04, + 0x59, 0x4D, 0x0C, 0x6F, 0x08, 0xD5, 0x00, 0xA2, + 0xAD, 0x08, 0xB4, 0x62, 0xE0, 0x2C, 0xF6, 0x30, + 0x31, 0x1E, 0xD7, 0x81, 0x56, 0x61, 0x17, 0x0D, + 0xB3, 0x9F, 0x27, 0x75, 0x38, 0x42, 0x6E, 0xB2, + 0xB0, 0x6C, 0xB8, 0xC9, 0xD8, 0x20, 0xC8, 0x36, + 0x7D, 0x1D, 0x57, 0x10, 0x4E, 0xC1, 0x45, 0xFC, + 0x93, 0xB1, 0xF7, 0x7B, 0xA1, 0x3B, 0x71, 0x12, + 0x16, 0xE5, 0x8F, 0xD0, 0x0C, 0x7D, 0xC0, 0x05, + 0x18, 0x02, 0x24, 0x25, 0x28, 0x8A, 0xE1, 0x29, + 0x9A, 0x79, 0xBD, 0xC7, 0x73, 0x2D, 0xF3, 0x42, + 0x70, 0x33, 0xF3, 0xF8, 0x48, 0x87, 0xB4, 0xD4, + 0x91, 0xE1, 0x53, 0xBA, 0x4A, 0x63, 0xAF, 0x3A, + 0xE5, 0xCB, 0x3D, 0x41, 0x04, 0xB5, 0x30, 0x87, + 0xAA, 0x40, 0x03, 0x56, 0x10, 0x02, 0xF3, 0x6A, + 0x9F, 0xDA, 0x33, 0xBC, 0xB8, 0xA5, 0xD0, 0x56, + 0x43, 0x29, 0xDA, 0x58, 0x12, 0x8B, 0x6A, 0x9D, + 0xCF, 0xCD, 0xCA, 0x66, 0x98, 0x92, 0x1D, 0xA4, + 0xEF, 0xAC, 0x9E, 0x19, 0xDE, 0xF7, 0xFE, 0x6C, + 0x3A, 0x66, 0x46, 0xB4, 0x00, 0x7F, 0x08, 0xAF, + 0x31, 0xD6, 0xD3, 0x22, 0x59, 0x1F, 0x34, 0x48, + 0x5A, 0xE1, 0x4E, 0x0F, 0x6F, 0x2D, 0xD0, 0xE5, + 0x8E, 0x34, 0x3B, 0xC0, 0x55, 0x02, 0x2D, 0x17, + 0x4B, 0x34, 0x78, 0x46, 0xD4, 0xC4, 0x7F, 0x1D, + 0xDC, 0x39, 0x94, 0x69, 0x78, 0xAB, 0xD8, 0x2B, + 0x6D, 0xF3, 0x1C, 0x0B, 0x0F, 0x4A, 0xA0, 0xB2, + 0xAC, 0x1A, 0x79, 0x7F, 0x9D, 0xE5, 0xE8, 0xC6, + 0x40, 0x4B, 0xCE, 0x32, 0x4B, 0xA1, 0x3C, 0x77, + 0xED, 0x5D, 0x59, 0x0F, 0xE0, 0x7D, 0x00, 0x07, + 0xB4, 0xD8, 0xA6, 0x3E, 0xC9, 0x6D, 0x62, 0x19, + 0x66, 0xC3, 0xE7, 0x10, 0x3B, 0x6C, 0x7A, 0x36, + 0x49, 0x75, 0xE6, 0x78, 0xB3, 0x8D, 0x04, 0x13, + 0x31, 0xE6, 0x79, 0x72, 0x64, 0x07, 0x76, 0x94, + 0x2B, 0xB4, 0xEC, 0x18, 0x1C, 0x32, 0x3C, 0x26, + 0xC4, 0x81, 0xBF, 0x4F, 0xB5, 0x6E, 0x5D, 0x67, + 0xCF, 0xBE, 0x17, 0x57, 0x11, 0x2B, 0xBC, 0xA0, + 0xF0, 0xC2, 0x70, 0x06, 0x94, 0x26, 0x9B, 0x26, + 0x12, 0x9C, 0x7F, 0x99, 0xD4, 0x4A, 0xF5, 0x60, + 0xCD, 0xF7, 0xA4, 0x70, 0x2E, 0xF5, 0xD6, 0xA2, + 0xEC, 0x0E, 0x99, 0x00, 0x2E, 0x89, 0x30, 0xAA, + 0x4E, 0xC0, 0x62, 0x11, 0x93, 0x0A, 0x1E, 0x68, + 0xF2, 0xED, 0x44, 0x8B, 0x10, 0x4A, 0x75, 0x68, + 0xBF, 0x46, 0xE1, 0x41, 0xD6, 0x0B, 0x61, 0x53, + 0xD4, 0x03, 0x10, 0xB3, 0x8F, 0x8E, 0x14, 0x57, + 0x27, 0x8F, 0xE3, 0x49, 0xB2, 0xB4, 0xA7, 0xAE, + 0x39, 0x7A, 0x7B, 0x8F, 0x48, 0xAA, 0xA5, 0xFD, + 0xC1, 0x28, 0x8E, 0x43, 0xE0, 0x58, 0x39, 0x32, + 0x0A, 0x14, 0xC6, 0x3A, 0xB8, 0x58, 0xE2, 0x6E, + 0x7D, 0x8C, 0x35, 0xB6, 0x47, 0x37, 0x90, 0x4D, + 0x89, 0xC1, 0x9A, 0x10, 0x3D, 0x6B, 0x68, 0x9A, + 0x3D, 0xC9, 0x0C, 0x72, 0xFC, 0x92, 0xE3, 0x5D, + 0x45, 0x2B, 0x81, 0x43, 0x02, 0x30, 0x70, 0xD4, + 0x8B, 0xB9, 0xFB, 0xB0, 0x45, 0xE3, 0xC6, 0xCE, + 0x9A, 0x8B, 0xD5, 0xC4, 0xB6, 0x7F, 0x5D, 0x8B, + 0x58, 0xC9, 0x6A, 0x28, 0x2D, 0x6E, 0x27, 0x78, + 0x3D, 0x7B, 0x99, 0x0E, 0x05, 0x2B, 0xD9, 0x5E, + 0x86, 0x50, 0x8F, 0x9B, 0xF7, 0xC0, 0x64, 0xA8, + 0xF2, 0x39, 0xE0, 0x24, 0x0A, 0x20, 0xD8, 0xDF, + 0x3A, 0x87, 0x6E, 0xDC, 0x8F, 0xF6, 0x24, 0x1B, + 0x54, 0xF2, 0x70, 0xA9, 0x8C, 0xB8, 0x07, 0x7A, + 0xAF, 0xE0, 0xE5, 0x8E, 0x5E, 0x98, 0x13, 0xC6, + 0xA5, 0xF9, 0x1F, 0x52, 0x89, 0x7B, 0x6A, 0xAD, + 0x24, 0x26, 0xC6, 0x0D, 0xA5, 0x88, 0x3E, 0x6B, + 0xDF, 0xEE, 0x33, 0x0A, 0x86, 0x09, 0xA2, 0x11, + 0x8B, 0x69, 0x9F, 0x75, 0xCE, 0xFD, 0x05, 0x01, + 0x95, 0x14, 0x64, 0xCD, 0x62, 0x04, 0x09, 0x87, + 0xFC, 0xF6, 0xB2, 0x2E, 0xCA, 0x92, 0xE4, 0x4F, + 0x55, 0xB3, 0x8C, 0x64, 0x99, 0xA8, 0xDA, 0x0A, + 0xC7, 0x82, 0x56, 0x93, 0x03, 0x67, 0xA4, 0xD7, + 0x54, 0x91, 0xA0, 0x89, 0xD8, 0x94, 0x1F, 0x6C, + 0x53, 0xCC, 0xB2, 0x60, 0x13, 0x6A, 0x93, 0xE1, + 0xFC, 0xA3, 0xDD, 0x72, 0xD5, 0x5A, 0x92, 0x35, + 0x9E, 0x3D, 0x62, 0x82, 0x70, 0x5D, 0x54, 0xAF, + 0x57, 0xC6, 0x98, 0x5E, 0x74, 0xE0, 0xF2, 0x33, + 0x26, 0x61, 0xBF, 0x2B, 0xDD, 0x78, 0x47, 0x29, + 0x04, 0xC7, 0xF0, 0x58, 0x17, 0xFC, 0x9D, 0xED, + 0xEF, 0x15, 0x6A, 0xCA, 0xC7, 0x46, 0xCE, 0x12, + 0xF8, 0x90, 0xD8, 0x5A, 0x93, 0x98, 0xA9, 0xED, + 0xFB, 0xF4, 0x6E, 0x73, 0x48, 0x81, 0x4A, 0x08, + 0x07, 0x29, 0xC8, 0x3E, 0x70, 0x4C, 0x40, 0x30, + 0x20, 0x2C, 0xF6, 0x1E, 0xCD, 0xEE, 0x27, 0x95, + 0xD5, 0x07, 0xAC, 0x28, 0x81, 0x4F, 0x53, 0xCD, + 0x06, 0x60, 0xA5, 0x57, 0x2C, 0xBE, 0x1A, 0xE5, + 0x33, 0x38, 0xB8, 0xEF, 0xDC, 0xA3, 0x1A, 0xA5, + 0xB9, 0x5A, 0xA9, 0xE7, 0x65, 0xAF, 0x4D, 0xA0, + 0x4C, 0x9B, 0x31, 0x62, 0x67, 0x7E, 0x41, 0xC0, + 0x18, 0xA5, 0xE1, 0x8A, 0xF2, 0xF9, 0x8A, 0xCA, + 0x14, 0x5C, 0xCD, 0x1B, 0x8F, 0x74, 0x31, 0x07, + 0x6A, 0x14, 0xA7, 0xC2, 0x0F, 0x6C, 0x72, 0xE8, + 0xEB, 0x97, 0x51, 0xB7, 0x89, 0x2E, 0x41, 0x01, + 0x54, 0x47, 0x63, 0x0E, 0xAA, 0x84, 0xB9, 0x60, + 0x1C, 0xB9, 0x54, 0xD8, 0x97, 0x39, 0x38, 0x9D, + 0x52, 0xBB, 0x91, 0xA9, 0x7F, 0x96, 0x08, 0x7C, + 0xB3, 0x8B, 0x0E, 0xAB, 0x59, 0xA7, 0x84, 0x68, + 0x34, 0x65, 0x55, 0xC7, 0x12, 0x84, 0xC2, 0xFB, + 0xBD, 0x27, 0x58, 0x18, 0xE9, 0x26, 0x73, 0xFA, + 0x42, 0xAB, 0x5E, 0x0D, 0x97, 0x76, 0x67, 0xA9, + 0x0F, 0x75, 0x92, 0x6C, 0x80, 0x76, 0x87, 0x75, + 0xD2, 0x3D, 0xFE, 0x0B, 0x33, 0x7B, 0x48, 0xB0, + 0xC8, 0x28, 0x1F, 0xE6, 0x3F, 0x18, 0xF2, 0x45, + 0xF8, 0x8F, 0x21, 0xE1, 0x1C, 0x56, 0xA5, 0x33, + 0x71, 0x88, 0x42, 0x5A, 0x34, 0x8B, 0x24, 0xDD, + 0x0E, 0x98, 0x30, 0xDB, 0x6B, 0x6C, 0x89, 0x64, + 0x8C, 0x7A, 0x63, 0x3C, 0xA9, 0xD8, 0x32, 0x51, + 0xD0, 0xC6, 0xF7, 0xA4, 0x53, 0x95, 0x0D, 0x02, + 0x19, 0x6A, 0x77, 0xBC, 0xDF, 0xD5, 0x2B, 0x2C, + 0x65, 0xC9, 0xBF, 0x72, 0x69, 0xC3, 0x0C, 0xEF, + 0x34, 0x75, 0x76, 0x29, 0x59, 0xBE, 0x9D, 0xE9, + 0x44, 0x21, 0x2F, 0x5F, 0xB7, 0x89, 0xA6, 0xCD, + 0x0A, 0x9A, 0x9E, 0x77, 0x5B, 0xBD, 0xDA, 0x03, + 0xA4, 0xBC, 0xFB, 0x47, 0xC1, 0x77, 0x73, 0x00, + 0x26, 0xAE, 0x2E, 0xFA, 0x62, 0x18, 0x9D, 0xB8, + 0xE2, 0xD3, 0x7A, 0xB9, 0xD8, 0xCF, 0xE9, 0x61, + 0x11, 0x80, 0xE9, 0xDC, 0xC3, 0x32, 0x9E, 0x63, + 0x6F, 0xD9, 0x42, 0xF6, 0x76, 0x7F, 0xBC, 0xBF, + 0xDB, 0x08, 0x2F, 0xA0, 0xEB, 0xB8, 0x4D, 0xF3, + 0x76, 0x62, 0xAA, 0xFA, 0x20, 0x4A, 0xDD, 0xE6, + 0xB3, 0x72, 0xC7, 0x7D, 0x36, 0x4F, 0x08, 0x56, + 0x4F, 0x19, 0xB2, 0xB0, 0x0C, 0x13, 0x1A, 0x8C, + 0xCE, 0x9A, 0x04, 0xB5, 0xB6, 0x9C, 0xD3, 0xD8, + 0xFE, 0x1F, 0x2C, 0xCC, 0x89, 0xEE, 0x7D, 0x22, + 0x8A, 0x4E, 0x0A, 0x91, 0x0C, 0x8B, 0x5A, 0xE0, + 0xBD, 0xE5, 0x3D, 0xBE, 0x90, 0x4B, 0x13, 0xA3, + 0x2F, 0x33, 0xE9, 0x9D, 0x6C, 0x67, 0x35, 0xBD, + 0x03, 0xD4, 0x09, 0x90, 0x2F, 0xC6, 0x3C, 0x8D, + 0xD8, 0x43, 0xFC, 0x1F, 0xB7, 0x49, 0xC0, 0xB7, + 0x38, 0x70, 0x1D, 0xEB, 0x5A, 0xD7, 0xAC, 0x07, + 0xAF, 0x5B, 0x93, 0xC5, 0x7B, 0x55, 0x65, 0x86, + 0x6E, 0xC1, 0xDB, 0xCD, 0x42, 0x92, 0x50, 0xDB, + 0xD1, 0x97, 0x95, 0x3D, 0x53, 0xC3, 0xFE, 0xC2, + 0xF9, 0x65, 0xF3, 0xD2, 0xEE, 0xA4, 0x7E, 0xDE, + 0xA1, 0x4B, 0x23, 0x7F, 0xA1, 0x0D, 0x25, 0x6E, + 0x80, 0x4F, 0xE3, 0xB5, 0x0C, 0xBA, 0x1C, 0x2B, + 0x42, 0x0B, 0x8F, 0xD9, 0xB6, 0x4E, 0x52, 0xD2, + 0xDB, 0x35, 0xD2, 0xA1, 0xC4, 0xE6, 0xD6, 0x51, + 0x76, 0xE7, 0x87, 0x5E, 0xBE, 0x93, 0xE6, 0x61, + 0x71, 0x4C, 0x8B, 0xA6, 0x96, 0xDA, 0xF7, 0xCB, + 0x06, 0xB7, 0xB8, 0xC4, 0xF6, 0xF5, 0xC6, 0x29, + 0xAA, 0xE1, 0x13, 0x87, 0x6F, 0x96, 0xBA, 0x0C, + 0xF6, 0x79, 0x8F, 0x03, 0x86, 0x22, 0xE3, 0xFB, + 0xCF, 0x86, 0xCF, 0x7C, 0x77, 0xFD, 0xB4, 0xEE, + 0xBD, 0x42, 0x38, 0x7F, 0xF2, 0xCC, 0xCB, 0x06, + 0xEA, 0x0D, 0x81, 0xA1, 0x8E, 0xB5, 0xE7, 0x40, + 0xC8, 0x03, 0xA3, 0x4B, 0xC8, 0xB4, 0x0E, 0x3E, + 0x36, 0xAB, 0x90, 0xC1, 0xFC, 0xB0, 0x37, 0x2B, + 0x83, 0xA1, 0x3D, 0x56, 0xD6, 0x83, 0x0F, 0x99, + 0xC4, 0x58, 0xB8, 0x94, 0x61, 0x19, 0xA6, 0x60, + 0x47, 0xCB, 0x2D, 0xAF, 0x29, 0x38, 0x90, 0xFA, + 0x99, 0x0F, 0x02, 0x02, 0x65, 0x90, 0x5F, 0xA2, + 0xA2, 0xE3, 0xBB, 0x34, 0x15, 0x2F, 0x0B, 0xF5, + 0xB2, 0xCC, 0x83, 0x59, 0xAF, 0xA7, 0x4D, 0x38, + 0xAD, 0xF6, 0x52, 0x5C, 0x53, 0xD9, 0x0E, 0x3F, + 0xD6, 0x53, 0x86, 0xE2, 0x79, 0xC2, 0x65, 0x48, + 0xB2, 0x67, 0x3B, 0xAF, 0x52, 0x53, 0x57, 0x9A, + 0x27, 0x80, 0x88, 0x37, 0x77, 0x67, 0x4E, 0x1F, + 0xF1, 0x7B, 0xC5, 0xCB, 0xD8, 0x11, 0x0A, 0xDD, + 0x92, 0x0E, 0x88, 0x6C, 0xCA, 0x33, 0x76, 0x3B, + 0x04, 0xFA, 0xC0, 0xFD, 0xC6, 0x3F, 0xB4, 0x72, + 0xC2, 0x2B, 0x6D, 0x5E, 0xB6, 0xA1, 0x4E, 0x5F, + 0xC0, 0x50, 0x16, 0xEF, 0xFE, 0x6A, 0x42, 0x72, + 0x65, 0x02, 0xEE, 0x07, 0xC6, 0x19, 0xC6, 0x95, + 0xDE, 0x3F, 0xD9, 0xC5, 0xC6, 0x0E, 0x70, 0x07, + 0x6A, 0xC3, 0x36, 0x1B, 0x84, 0x6F, 0xDF, 0x80, + 0x16, 0x4E, 0x86, 0x90, 0xC8, 0x55, 0x7B, 0xDD, + 0xC0, 0x86, 0x0C, 0x37, 0x47, 0x1F, 0x35, 0xF8, + 0x47, 0xF2, 0xCD, 0x96, 0x21, 0x64, 0xAD, 0x46, + 0xE1, 0xDF, 0x44, 0x79, 0x48, 0x02, 0xF9, 0x71, + 0x39, 0x35, 0x26, 0xFC, 0x12, 0x0D, 0x88, 0xAC, + 0xD6, 0xFA, 0x29, 0x74, 0x55, 0x51, 0xE7, 0xAF, + 0x3D, 0x7E, 0x1E, 0x7E, 0xE0, 0x18, 0xB6, 0x3C, + 0x4B, 0x99, 0x9D, 0x51, 0x02, 0x51, 0xD8, 0xE9, + 0xFA, 0x61, 0x88, 0x2E, 0xCF, 0x73, 0x77, 0x65, + 0x71, 0xAE, 0xAE, 0xD7, 0xA1, 0xF9, 0xE0, 0x7F, + 0x30, 0x46, 0xCB, 0x20, 0xEC, 0xF4, 0xD2, 0xC1, + 0x63, 0xF5, 0x6F, 0x8A, 0x72, 0xF9, 0x5B, 0x85, + 0xD2, 0xCA, 0x6D, 0x35, 0xD1, 0x17, 0xF6, 0x08, + 0x9E, 0x0A, 0x73, 0xB3, 0xDA, 0x1A, 0x32, 0xBA, + 0x23, 0x10, 0x4A, 0x5D, 0xD7, 0xAA, 0xB4, 0x68, + 0x97, 0x59, 0x45, 0xC5, 0x7C, 0x16, 0x6F, 0xE4, + 0x62, 0x89, 0xF1, 0xD3, 0xB4, 0x03, 0x90, 0x7B, + 0xA4, 0xA2, 0xCA, 0xA0, 0x5D, 0x69, 0x1B, 0xA9, + 0xBB, 0xEB, 0xA0, 0xE2, 0xDE, 0xBE, 0x0E, 0xC4, + 0x9E, 0x21, 0x38, 0x61, 0x92, 0x9B, 0xAB, 0x69, + 0xAA, 0xD0, 0x1D, 0xF6, 0xC3, 0xEE, 0xA6, 0xC3, + 0xF3, 0x29, 0x1B, 0xE5, 0x6E, 0x52, 0x89, 0xD0, + 0xBA, 0xD8, 0x60, 0x27, 0x80, 0x1A, 0xB5, 0x7F, + 0x7F, 0xB5, 0xC2, 0x5A, 0xC6, 0x83, 0xA4, 0xC0, + 0x88, 0x39, 0xF3, 0xE7, 0x39, 0xD6, 0x81, 0x1C, + 0x13, 0x20, 0xFD, 0x93, 0x3D, 0x8E, 0x79, 0x60, + 0x7C, 0xFF, 0xE4, 0x37, 0x5B, 0x33, 0xA3, 0x9D, + 0xB7, 0x57, 0xCD, 0x45, 0x0A, 0xB9, 0xE4, 0xF1, + 0xBC, 0x59, 0x74, 0xE8, 0xB3, 0x06, 0xD0, 0x9F, + 0x0F, 0xBC, 0x5B, 0x23, 0xB8, 0x6C, 0xD6, 0x4D, + 0xFA, 0xCC, 0x14, 0xAB, 0x74, 0x61, 0x1A, 0xFC, + 0x22, 0xA6, 0xED, 0x09, 0x76, 0x91, 0xD8, 0x6E, + 0x44, 0xB6, 0x00, 0x14, 0xDC, 0x74, 0x2D, 0x90, + 0xAA, 0x59, 0x98, 0x76, 0x30, 0xC5, 0x44, 0xA4, + 0x61, 0x43, 0xD6, 0xE2, 0x28, 0x28, 0xA7, 0xBD, + 0x6E, 0x50, 0x5C, 0xE1, 0x96, 0x7A, 0xF8, 0xA8, + 0x32, 0x8C, 0xE9, 0xFD, 0x11, 0x37, 0x91, 0xD1, + 0xAF, 0x3C, 0xD3, 0x1C, 0x1E, 0x88, 0x4D, 0x7E, + 0x87, 0x84, 0x84, 0x6F, 0x39, 0x0B, 0xFB, 0x2D, + 0xB3, 0x12, 0x4C, 0x6D, 0x45, 0xDD, 0xCD, 0x7D, + 0x75, 0xB7, 0xFE, 0x7E, 0x44, 0xCC, 0x29, 0xE5, + 0xB3, 0x10, 0xEE, 0x23, 0x55, 0x5B, 0xCF, 0xBA, + 0xBD, 0xA1, 0xBE, 0x64, 0xF8, 0x6E, 0x60, 0x31, + 0x0A, 0x2D, 0xC9, 0x3B, 0x1D, 0x44, 0xE1, 0x9D, + 0x60, 0x28, 0x77, 0xEE + }; + static const byte rnd_65[] = { + 0x4E, 0x7A, 0x01, 0x7C, 0x15, 0x03, 0x9D, 0xC2, + 0x00, 0x51, 0xD2, 0x96, 0x0E, 0x5E, 0x15, 0x59, + 0xCC, 0x27, 0xED, 0x46, 0x87, 0x7C, 0xB9, 0x81, + 0x16, 0x19, 0x9A, 0x0F, 0x41, 0x05, 0xFE, 0x32 + }; + static const byte sig_65[] = { + 0xB8, 0x65, 0xB0, 0x0B, 0x21, 0x18, 0xDB, 0xB0, + 0x0B, 0x70, 0x1C, 0x66, 0x45, 0x65, 0x5E, 0x8A, + 0xCF, 0xA8, 0x4E, 0xA7, 0x92, 0xB4, 0x48, 0x64, + 0x2E, 0x18, 0x32, 0xC3, 0x70, 0x7C, 0x87, 0xCF, + 0x09, 0xFB, 0xE7, 0x72, 0xF1, 0xD4, 0x38, 0x5B, + 0xFB, 0xE5, 0xE6, 0xCF, 0xBB, 0xE2, 0x6C, 0x10, + 0xED, 0x6E, 0xB8, 0x65, 0xC8, 0x87, 0xF8, 0x69, + 0x39, 0x43, 0x9A, 0x9B, 0xF7, 0x68, 0xBF, 0x03, + 0x9D, 0x73, 0xE3, 0xEA, 0x83, 0xBD, 0xF1, 0x85, + 0x03, 0xB5, 0xD1, 0xB3, 0x91, 0x79, 0xA8, 0x27, + 0xB0, 0xD7, 0x80, 0x5F, 0x98, 0x42, 0x8B, 0xD8, + 0x7C, 0xEA, 0x6B, 0x06, 0x96, 0x0C, 0x78, 0xB4, + 0xB5, 0x86, 0xFB, 0x0D, 0x5E, 0xDA, 0x9F, 0xAA, + 0xC0, 0x25, 0x6E, 0x38, 0x82, 0x35, 0x62, 0xA3, + 0x07, 0x96, 0x61, 0x17, 0x00, 0x5A, 0xA4, 0x2F, + 0x1B, 0x65, 0x54, 0xA0, 0x48, 0x75, 0xF8, 0x5C, + 0x2E, 0x3F, 0xAF, 0xA6, 0x52, 0x47, 0x1D, 0x4E, + 0x98, 0x06, 0x54, 0x82, 0xFC, 0x7D, 0xF4, 0x9B, + 0x2C, 0x40, 0xD0, 0xE7, 0xB9, 0x82, 0x38, 0xDF, + 0xBE, 0x85, 0x3D, 0x16, 0xBF, 0x99, 0x92, 0xBB, + 0x08, 0xC1, 0x92, 0x59, 0xF9, 0xB5, 0x75, 0xEA, + 0x7A, 0x4A, 0x80, 0x09, 0x3A, 0x64, 0xA9, 0x26, + 0x71, 0x85, 0x7A, 0x50, 0x89, 0x20, 0xD6, 0x0F, + 0xF6, 0xFB, 0xF3, 0x83, 0x41, 0xC5, 0x59, 0x01, + 0x05, 0x63, 0x3A, 0x42, 0x6D, 0x60, 0x2D, 0xAC, + 0x06, 0x4D, 0xD7, 0xA7, 0xF1, 0x1A, 0x60, 0x21, + 0x5C, 0x35, 0xB7, 0xB9, 0xC0, 0x0E, 0x9D, 0x84, + 0x63, 0x98, 0x8C, 0xF4, 0x72, 0xCD, 0x6A, 0xCF, + 0xB7, 0xF7, 0x22, 0xB8, 0xC4, 0xC6, 0x27, 0x02, + 0x60, 0x7A, 0x67, 0x48, 0x80, 0xAC, 0xB3, 0xD6, + 0xC6, 0x25, 0x3E, 0x71, 0x17, 0x5A, 0x05, 0xB3, + 0x92, 0xCA, 0xB4, 0xBB, 0x14, 0xCE, 0x86, 0xA5, + 0x98, 0xAB, 0xC7, 0x88, 0xD0, 0xFF, 0x4D, 0x82, + 0x77, 0x5E, 0x4E, 0xA0, 0xFC, 0x36, 0x36, 0x3C, + 0xD0, 0xE9, 0x7B, 0x78, 0xA6, 0xAE, 0x4D, 0xA8, + 0xE9, 0x8C, 0xA6, 0x12, 0x77, 0x2D, 0x56, 0xB5, + 0x82, 0xF8, 0x2C, 0x07, 0x09, 0xBE, 0xAE, 0x46, + 0x67, 0x3B, 0xDD, 0x80, 0x42, 0x86, 0x5C, 0xFA, + 0x95, 0xBF, 0x53, 0x38, 0xCF, 0xEA, 0x60, 0x6A, + 0x6E, 0xF3, 0x16, 0x38, 0x46, 0xAE, 0x83, 0xB2, + 0x5E, 0x5F, 0x5B, 0xD3, 0x1C, 0x83, 0xF1, 0x36, + 0x72, 0x9A, 0x8E, 0xA6, 0x27, 0x4F, 0x99, 0x4F, + 0xA9, 0x04, 0x5F, 0xA8, 0xA9, 0x0F, 0xF8, 0x54, + 0xB8, 0x71, 0xCF, 0x82, 0xE2, 0xB7, 0x01, 0xE8, + 0xF4, 0xAC, 0x04, 0xFE, 0x9E, 0x28, 0x49, 0x1B, + 0x9A, 0x25, 0xFF, 0x26, 0x3E, 0x2C, 0xF7, 0x54, + 0x99, 0xE0, 0x09, 0xFD, 0x02, 0x29, 0xFB, 0xF7, + 0xE5, 0xE4, 0x60, 0x44, 0x34, 0x4B, 0x07, 0xD7, + 0x22, 0x14, 0xA9, 0xAC, 0xB4, 0xFF, 0x61, 0x02, + 0xAB, 0xC1, 0x26, 0x2B, 0xC2, 0xE1, 0xCD, 0x24, + 0x91, 0x60, 0x7A, 0xE7, 0xAA, 0xEC, 0xF4, 0xC3, + 0x51, 0x75, 0xCF, 0xA4, 0x38, 0x3A, 0xA8, 0x6A, + 0xF1, 0xE6, 0x2E, 0xD0, 0x63, 0x87, 0xCC, 0x59, + 0x48, 0x36, 0x46, 0x7F, 0x41, 0xDF, 0xCA, 0x8F, + 0xA0, 0xCA, 0x71, 0x28, 0x0B, 0xFB, 0x1C, 0x25, + 0x60, 0xC8, 0x99, 0x55, 0x36, 0xF8, 0x42, 0x74, + 0x70, 0x45, 0x59, 0x14, 0x53, 0x74, 0x5F, 0x26, + 0x03, 0x82, 0xE3, 0xDA, 0x50, 0x79, 0x3F, 0xD7, + 0xCA, 0x76, 0x27, 0x18, 0x5D, 0xBD, 0xCE, 0xDD, + 0xF6, 0x9B, 0x2D, 0x3E, 0x15, 0x1C, 0x7F, 0x97, + 0x28, 0x8A, 0x38, 0x2A, 0x92, 0xB0, 0x50, 0xF7, + 0x91, 0xF9, 0x58, 0x7D, 0x77, 0xC6, 0x4D, 0x8B, + 0x5D, 0x40, 0xAA, 0x19, 0x9D, 0x49, 0x66, 0xBE, + 0x2D, 0x52, 0x4F, 0x96, 0x10, 0xF2, 0xFA, 0x02, + 0xED, 0x23, 0x17, 0x63, 0x69, 0xDB, 0x93, 0x93, + 0x50, 0xDA, 0x60, 0x1E, 0xA6, 0x67, 0x70, 0x95, + 0x2E, 0x0F, 0x23, 0xED, 0xA6, 0x8A, 0x73, 0x75, + 0x6E, 0xFF, 0x61, 0x0E, 0x8D, 0x6A, 0x9F, 0x49, + 0x34, 0x56, 0x58, 0x54, 0x42, 0x82, 0x45, 0x3B, + 0x5E, 0x73, 0xA3, 0x22, 0xA0, 0x32, 0x67, 0xC9, + 0x69, 0xB5, 0x07, 0x34, 0xF2, 0xEC, 0xD4, 0xEC, + 0x90, 0x55, 0x76, 0x0D, 0x92, 0x86, 0x10, 0xE9, + 0x4E, 0x0B, 0x16, 0x28, 0xD6, 0xAF, 0x1B, 0x27, + 0xAB, 0x13, 0x82, 0x9F, 0x7F, 0x8E, 0xF5, 0x0D, + 0x9E, 0x29, 0x96, 0xFC, 0x64, 0xB0, 0x6A, 0xC8, + 0x94, 0x61, 0x14, 0x76, 0x6D, 0xAD, 0x8D, 0xFF, + 0xE6, 0x34, 0xF4, 0x7E, 0x9D, 0x85, 0x69, 0x96, + 0x6C, 0x6F, 0x69, 0x68, 0x21, 0x8C, 0x5B, 0x86, + 0x33, 0x61, 0x1B, 0xF4, 0x2B, 0x4F, 0xC0, 0xE7, + 0x8D, 0x0C, 0x02, 0x9E, 0xAB, 0x85, 0xF2, 0x2F, + 0x16, 0x17, 0x19, 0x80, 0xCC, 0x65, 0xF2, 0x84, + 0x45, 0xA1, 0x1A, 0x08, 0x3A, 0xA0, 0x29, 0x77, + 0xC2, 0xE8, 0x88, 0x6E, 0xD2, 0x70, 0x67, 0x2E, + 0x51, 0x2A, 0xE8, 0x9C, 0x6A, 0x26, 0xFC, 0xAD, + 0x1E, 0xC7, 0x2B, 0x9E, 0xCF, 0xA5, 0xA5, 0xEF, + 0xC7, 0x0F, 0xF0, 0xBA, 0xB2, 0x8F, 0x11, 0x4F, + 0x4D, 0xA8, 0x17, 0x0F, 0xE8, 0xB6, 0x3C, 0x2E, + 0x11, 0xBE, 0x7A, 0x35, 0x46, 0x6E, 0x97, 0x9A, + 0x12, 0x7E, 0xC0, 0xD2, 0x03, 0x23, 0xD5, 0x02, + 0x73, 0x0A, 0xBC, 0xE6, 0x40, 0xA2, 0x44, 0x1C, + 0xDD, 0xAB, 0xA3, 0x26, 0xD6, 0x78, 0x3D, 0x01, + 0x92, 0xDB, 0xA9, 0xE9, 0x3F, 0xE5, 0x07, 0xC6, + 0xA7, 0x37, 0x67, 0xBE, 0x56, 0xE2, 0x77, 0x65, + 0x76, 0xEF, 0xEF, 0xF1, 0xCA, 0x17, 0x9D, 0x83, + 0x34, 0x3E, 0x38, 0xC6, 0xA9, 0xC2, 0xFE, 0x72, + 0x5D, 0xDE, 0x80, 0x7D, 0x21, 0x72, 0x5E, 0x73, + 0x08, 0x72, 0xE2, 0xAB, 0x3D, 0x90, 0x11, 0x61, + 0xF4, 0x55, 0xBC, 0xAD, 0x23, 0xA8, 0x43, 0x3A, + 0x41, 0x31, 0x51, 0xFD, 0x22, 0x17, 0x14, 0x31, + 0x0E, 0x4D, 0x0B, 0x6A, 0x1E, 0x1B, 0x2C, 0xAC, + 0xA4, 0x99, 0xEE, 0xE8, 0x05, 0xA1, 0x64, 0xF2, + 0x91, 0xD5, 0x07, 0x5E, 0x6B, 0x65, 0xA7, 0x9C, + 0x2B, 0xCA, 0xD9, 0x17, 0xB1, 0x22, 0xFE, 0x1A, + 0xC4, 0xFB, 0xB4, 0x10, 0x21, 0x1B, 0xA0, 0xA1, + 0x99, 0x7A, 0x31, 0x30, 0x7C, 0x01, 0xF0, 0xFE, + 0xD3, 0xB3, 0x14, 0x3D, 0x28, 0x34, 0x0F, 0xAC, + 0xF0, 0x93, 0x37, 0xC4, 0xEF, 0x04, 0x74, 0x80, + 0xA2, 0x90, 0xAE, 0x02, 0xB2, 0xF7, 0xD8, 0x7B, + 0x8C, 0x29, 0xA0, 0xAE, 0xAE, 0x2E, 0x92, 0xC9, + 0xC5, 0x44, 0x7D, 0x66, 0xC5, 0x5C, 0x1D, 0x1E, + 0x25, 0x88, 0x5D, 0x10, 0x37, 0xFB, 0x5F, 0xCC, + 0x80, 0x15, 0x4F, 0x1D, 0x23, 0xB4, 0xF2, 0x7B, + 0x5B, 0xAC, 0x89, 0xBE, 0x1C, 0x36, 0x3C, 0xFF, + 0x8E, 0xA7, 0x58, 0x73, 0xAC, 0x3F, 0x63, 0x33, + 0xE8, 0x6C, 0x53, 0xEC, 0xA5, 0x5D, 0xBE, 0xD5, + 0xE1, 0xF1, 0x12, 0x6B, 0x12, 0x78, 0xC7, 0x29, + 0xC9, 0xA8, 0x4C, 0x4A, 0x1B, 0x7F, 0x15, 0x11, + 0x93, 0x01, 0xC8, 0x0B, 0xE2, 0x2F, 0xE9, 0xBE, + 0xBA, 0x17, 0x59, 0x45, 0xB2, 0x61, 0x2B, 0x66, + 0xDD, 0xCE, 0xDF, 0x9A, 0x2A, 0x4D, 0x5F, 0x24, + 0xF9, 0x02, 0xBB, 0xA6, 0x8D, 0xA7, 0x5D, 0x95, + 0x97, 0x2E, 0x28, 0xD6, 0xCB, 0x70, 0x17, 0xCA, + 0x51, 0xED, 0x58, 0x73, 0xAB, 0x03, 0xDD, 0x2E, + 0x92, 0x6C, 0x15, 0x64, 0x2C, 0x9D, 0x6E, 0x64, + 0x27, 0xFC, 0xE8, 0x0F, 0xC3, 0x8B, 0x34, 0xFE, + 0xB3, 0xC1, 0x55, 0x13, 0xA6, 0x87, 0xC3, 0x5B, + 0x94, 0xEB, 0x83, 0xE4, 0xAB, 0x3E, 0x18, 0x76, + 0x67, 0x92, 0x70, 0xF5, 0xA9, 0x8F, 0x18, 0xA6, + 0x5F, 0x57, 0x41, 0x76, 0x55, 0xFD, 0xA9, 0x99, + 0x4E, 0x8F, 0xCC, 0x61, 0x6C, 0x6C, 0x60, 0x06, + 0x10, 0x40, 0x26, 0xD6, 0xCD, 0x7A, 0xA0, 0x56, + 0x3D, 0x51, 0x07, 0x25, 0x76, 0x00, 0x05, 0xF5, + 0xFD, 0x39, 0xE7, 0x59, 0x24, 0x90, 0x29, 0xF0, + 0x3D, 0x9F, 0x00, 0x67, 0x10, 0x3F, 0xA0, 0x45, + 0x21, 0x14, 0xDF, 0x24, 0x40, 0xE8, 0xC6, 0xDB, + 0x65, 0xE2, 0x39, 0x56, 0xEB, 0x1B, 0xEE, 0xB2, + 0xC3, 0x4E, 0x5B, 0x20, 0xAC, 0x31, 0x6A, 0x03, + 0xA9, 0x54, 0x36, 0x66, 0x62, 0x68, 0xC3, 0xD8, + 0x22, 0x8F, 0x62, 0xEB, 0x56, 0x67, 0xB3, 0xB6, + 0xBB, 0x85, 0x7D, 0xD0, 0x73, 0x7B, 0x69, 0x05, + 0x1E, 0x9F, 0x26, 0xEE, 0x02, 0x36, 0x71, 0xCE, + 0xAD, 0xFA, 0xCA, 0xF9, 0x49, 0x7F, 0x1A, 0xDE, + 0x58, 0x7A, 0x69, 0x3E, 0xEF, 0xFB, 0xFC, 0xD5, + 0x50, 0xEC, 0x20, 0x8C, 0x23, 0x56, 0x91, 0xE8, + 0xE3, 0x66, 0xD9, 0x65, 0xB6, 0x2B, 0xEC, 0x16, + 0xA6, 0x61, 0xCD, 0x5D, 0xE2, 0x87, 0x93, 0x22, + 0x0D, 0x66, 0xF2, 0x64, 0x55, 0x05, 0xB8, 0x52, + 0x41, 0x2F, 0xAE, 0x7B, 0x9D, 0x98, 0x29, 0xBF, + 0x61, 0x5F, 0x7C, 0xBD, 0x59, 0xA7, 0xBC, 0x1D, + 0x03, 0x4E, 0x6A, 0x25, 0x52, 0x9C, 0xFB, 0x48, + 0x6A, 0xF2, 0x01, 0xDE, 0xB7, 0xEA, 0x95, 0xBA, + 0x70, 0x8A, 0x31, 0x59, 0x17, 0x16, 0x74, 0x34, + 0x53, 0x09, 0xDB, 0x81, 0x50, 0xE6, 0x7E, 0xBB, + 0x30, 0xA7, 0xFF, 0x80, 0xCA, 0xC9, 0xAB, 0x13, + 0x92, 0x50, 0x0A, 0x83, 0xE6, 0x3B, 0xBF, 0x7C, + 0x42, 0xEB, 0x94, 0x53, 0xC2, 0xC9, 0xAC, 0xDA, + 0x02, 0xBE, 0x53, 0x82, 0x34, 0xAA, 0xA7, 0xDB, + 0x5A, 0x7F, 0x58, 0x8F, 0xC9, 0x1B, 0x90, 0xEE, + 0x24, 0x77, 0xF2, 0xB6, 0x1C, 0xD1, 0x06, 0x2A, + 0x7E, 0xF1, 0xE6, 0xE4, 0xDC, 0x54, 0xB3, 0x6D, + 0x0E, 0x19, 0x93, 0x3E, 0x98, 0x1C, 0xB7, 0x63, + 0xA9, 0xE1, 0x07, 0xE0, 0x1D, 0xA9, 0x42, 0x0F, + 0x82, 0xCA, 0x79, 0x35, 0x92, 0xA4, 0x7C, 0x4B, + 0x97, 0x7F, 0xF2, 0xC8, 0x84, 0x98, 0xDA, 0x95, + 0xC4, 0x3D, 0x23, 0x2F, 0x42, 0xAF, 0x99, 0x48, + 0x0B, 0xF0, 0xA4, 0xF8, 0xB7, 0xC4, 0x94, 0x9D, + 0x1A, 0xE1, 0xD4, 0xFA, 0x8E, 0x1D, 0x1A, 0x8C, + 0xD0, 0xF9, 0xED, 0x00, 0xDA, 0x59, 0x5E, 0xFD, + 0x2B, 0x76, 0x6F, 0x0B, 0x79, 0xD4, 0x49, 0x0D, + 0xB9, 0x28, 0xEC, 0x44, 0xB5, 0x03, 0x0A, 0x74, + 0xCA, 0x42, 0x81, 0x1A, 0x5B, 0x5A, 0xE5, 0x22, + 0xC7, 0x76, 0x4D, 0xDF, 0xD9, 0xFD, 0x92, 0xF0, + 0x06, 0xE9, 0x4B, 0x35, 0xA7, 0xEF, 0x01, 0x42, + 0xDA, 0x71, 0x78, 0xC2, 0xF5, 0x30, 0x74, 0xD0, + 0x74, 0x51, 0xB1, 0x55, 0x65, 0xA9, 0xE0, 0xC5, + 0x7E, 0xA1, 0xB9, 0x4C, 0x88, 0xEA, 0xE7, 0x41, + 0xB1, 0xF5, 0x01, 0xC4, 0xD3, 0x70, 0x72, 0x7D, + 0xAD, 0x27, 0x65, 0xF7, 0x95, 0xAD, 0x41, 0x46, + 0x35, 0x80, 0x0E, 0xC1, 0x94, 0x9D, 0x03, 0x71, + 0x39, 0xDE, 0x26, 0xAF, 0xCF, 0x93, 0x3D, 0x9A, + 0x09, 0xC1, 0x27, 0xFC, 0x6B, 0x36, 0xE5, 0x18, + 0xC6, 0xDE, 0x94, 0x92, 0xBA, 0x70, 0x82, 0x7B, + 0x68, 0x1C, 0x2D, 0x18, 0xA4, 0x01, 0x23, 0xB6, + 0xC5, 0xF6, 0x17, 0x37, 0xCB, 0x9D, 0xC6, 0xAA, + 0x9C, 0xE1, 0x7D, 0x16, 0x8E, 0xBB, 0xDD, 0xD6, + 0x3C, 0x07, 0x60, 0x19, 0x3C, 0x97, 0x49, 0x33, + 0xDB, 0x47, 0x4A, 0xA8, 0x9A, 0xF3, 0x0E, 0x16, + 0x29, 0x38, 0xF6, 0xDB, 0x78, 0x65, 0xDE, 0x23, + 0x1F, 0x86, 0x16, 0x9C, 0x9E, 0x2A, 0x30, 0x2F, + 0xC4, 0x1F, 0x1B, 0xE5, 0xF3, 0x6C, 0x55, 0x83, + 0xFC, 0xD9, 0x1E, 0x21, 0xCB, 0x8A, 0x67, 0x57, + 0xD3, 0x0A, 0x4B, 0xAC, 0xDB, 0x67, 0xE7, 0xA6, + 0x1B, 0x0C, 0x8E, 0x21, 0x7E, 0x0C, 0xCB, 0xF5, + 0x0E, 0xA6, 0x42, 0xCD, 0xE3, 0xFC, 0x74, 0xC7, + 0xF9, 0xFF, 0xBD, 0xA9, 0xA1, 0xE6, 0x84, 0xBB, + 0xC9, 0xA8, 0xF7, 0xCD, 0x3F, 0x1B, 0xD0, 0xDB, + 0x63, 0xDD, 0xDF, 0x4E, 0xA4, 0x79, 0xC2, 0x35, + 0x65, 0x2C, 0x5D, 0xCB, 0xCA, 0x7B, 0xDD, 0x4E, + 0x2F, 0x33, 0xE8, 0x71, 0x72, 0xC1, 0x8B, 0x5F, + 0xF3, 0x90, 0x99, 0x40, 0x8D, 0x27, 0x2F, 0xD0, + 0xFB, 0x0D, 0x6A, 0x23, 0xB1, 0x43, 0x00, 0xDF, + 0xC6, 0x4C, 0x02, 0x74, 0x3E, 0x52, 0x36, 0x08, + 0xE9, 0x73, 0x61, 0x3D, 0xCA, 0xAC, 0x9D, 0x1D, + 0x14, 0xB3, 0xA6, 0x24, 0x0E, 0xC2, 0xF2, 0x29, + 0x39, 0x91, 0xF6, 0x90, 0x6A, 0xE3, 0x6C, 0x04, + 0x69, 0xF3, 0x09, 0x11, 0x34, 0x8E, 0xC1, 0x2D, + 0xDB, 0xA6, 0xC3, 0xCA, 0x19, 0xBC, 0x69, 0x5F, + 0xCD, 0x16, 0xE5, 0xAE, 0xF2, 0xAD, 0x7C, 0x73, + 0x25, 0x15, 0x70, 0xB5, 0xD0, 0x49, 0xA6, 0xC3, + 0xA5, 0x2F, 0xA3, 0xFC, 0x9E, 0xD5, 0x4E, 0x54, + 0x97, 0x3A, 0xE7, 0x89, 0xB0, 0xBF, 0xD6, 0xF8, + 0xCC, 0x26, 0x44, 0xA9, 0xF8, 0x5A, 0xCE, 0x06, + 0x78, 0xD8, 0x9E, 0xFC, 0x12, 0xB6, 0x11, 0xC3, + 0xDF, 0xAE, 0x3F, 0x94, 0x50, 0x34, 0xB8, 0x99, + 0xBE, 0x99, 0xA7, 0x32, 0x88, 0x9F, 0x17, 0xD2, + 0x08, 0xDC, 0xD7, 0xEE, 0x95, 0x9D, 0x1A, 0xC7, + 0x61, 0xDB, 0xA4, 0x86, 0x4C, 0x14, 0xB0, 0xA3, + 0x5E, 0x4C, 0x7B, 0xBD, 0xA0, 0x96, 0xFB, 0x8A, + 0xB3, 0x22, 0x69, 0x26, 0xC8, 0x9E, 0x7C, 0xDA, + 0x92, 0x9E, 0xF1, 0x30, 0xC6, 0x92, 0xC9, 0x26, + 0x59, 0xE6, 0xF4, 0x65, 0x2B, 0xF2, 0x15, 0x63, + 0x61, 0xC7, 0x7D, 0xBE, 0xEF, 0x5A, 0x06, 0x23, + 0xA0, 0x67, 0x04, 0x99, 0x0E, 0x19, 0x8A, 0x13, + 0x67, 0x30, 0x54, 0x32, 0x4B, 0xBB, 0xAA, 0x64, + 0x36, 0x92, 0xF2, 0x43, 0xD6, 0x7C, 0x1B, 0x4F, + 0x95, 0xB9, 0x28, 0xAC, 0xF1, 0x68, 0x6F, 0x60, + 0xC1, 0x44, 0x87, 0xD6, 0xDD, 0x7F, 0x88, 0x01, + 0xEF, 0x20, 0x93, 0x9E, 0x03, 0xA1, 0xCA, 0x7D, + 0x74, 0x32, 0xDC, 0xF5, 0x95, 0xF1, 0xE9, 0xED, + 0xF2, 0xB2, 0x93, 0x57, 0xA1, 0xD4, 0xC7, 0xDA, + 0x33, 0x51, 0x2C, 0x45, 0x1A, 0x7C, 0x66, 0x04, + 0x38, 0x2D, 0x90, 0xC3, 0x30, 0x79, 0xD9, 0x57, + 0x38, 0xE4, 0x71, 0x89, 0xD8, 0x54, 0x9E, 0x43, + 0xD2, 0x94, 0xE7, 0x3D, 0x1C, 0xA7, 0x48, 0x7B, + 0x50, 0xD0, 0xED, 0x7C, 0xC6, 0xF9, 0x6B, 0xEE, + 0xA7, 0x6C, 0xCE, 0xB9, 0x6D, 0x37, 0x92, 0x00, + 0x4E, 0xB3, 0xE5, 0x49, 0x16, 0x35, 0xA6, 0x7F, + 0x6F, 0xFA, 0x1F, 0x1D, 0xF6, 0xA1, 0xF2, 0xFD, + 0xEE, 0x77, 0x84, 0x17, 0x80, 0xAE, 0x08, 0x09, + 0xD2, 0x92, 0xED, 0x7B, 0x00, 0xF4, 0x2D, 0x80, + 0x91, 0x19, 0x09, 0xB5, 0x1C, 0x9A, 0x3A, 0xE5, + 0x4B, 0x7A, 0x6D, 0x7D, 0x29, 0xD2, 0x00, 0x05, + 0x22, 0xD4, 0xF8, 0x76, 0xE2, 0x5C, 0x0D, 0x6A, + 0x15, 0x77, 0x22, 0x18, 0x85, 0xFD, 0x30, 0x74, + 0xF3, 0x3B, 0xDC, 0xD9, 0x6C, 0xDE, 0x80, 0x40, + 0x4A, 0x37, 0xE1, 0x60, 0x9F, 0x26, 0xCF, 0xBE, + 0x24, 0xA1, 0xFB, 0xF9, 0x76, 0x2A, 0x1A, 0x23, + 0x32, 0xE7, 0xA2, 0xD8, 0x2D, 0xF9, 0xD2, 0x0F, + 0x08, 0x3A, 0xDB, 0x35, 0x35, 0x33, 0x59, 0x0B, + 0xB1, 0xF9, 0x54, 0x33, 0x49, 0x36, 0x9E, 0x21, + 0xEC, 0xF5, 0x94, 0xE2, 0x78, 0x07, 0xA5, 0x63, + 0x50, 0xD6, 0x23, 0x84, 0xDE, 0xAD, 0xA7, 0x89, + 0xBE, 0x92, 0xF0, 0x12, 0xC1, 0xF8, 0xA7, 0x2D, + 0x8B, 0xE0, 0x79, 0xF8, 0xD7, 0xBD, 0x04, 0x0B, + 0xC5, 0xF2, 0x23, 0x36, 0x11, 0x6D, 0x6F, 0x37, + 0xDB, 0xFB, 0xD2, 0xC7, 0x44, 0xC3, 0xAE, 0x78, + 0xEC, 0xB4, 0xE0, 0x5A, 0x55, 0xB3, 0xFC, 0xC3, + 0x1B, 0x8C, 0xA6, 0xDB, 0xE8, 0x95, 0x72, 0x44, + 0x90, 0x8F, 0x4E, 0xD1, 0xD3, 0x46, 0x6C, 0x9E, + 0x00, 0xC6, 0xCC, 0xAE, 0xFC, 0x95, 0x4D, 0x85, + 0x7C, 0x65, 0x5F, 0x74, 0x71, 0xE3, 0x80, 0x88, + 0xCF, 0x1E, 0xB8, 0xBE, 0xED, 0x8D, 0xC4, 0xFB, + 0x3E, 0x36, 0xF3, 0xB8, 0x42, 0x1F, 0x37, 0x31, + 0x8D, 0xA2, 0x35, 0x36, 0x9E, 0x92, 0x3D, 0xD8, + 0xEA, 0xA7, 0xA2, 0x29, 0x0E, 0x14, 0xBF, 0x59, + 0x1E, 0x1D, 0x98, 0x27, 0x30, 0x3B, 0xF3, 0x57, + 0x69, 0x75, 0xCC, 0x3A, 0xB3, 0x49, 0x99, 0x70, + 0x19, 0x50, 0xAB, 0xF6, 0x7F, 0xF6, 0x55, 0x1A, + 0xCA, 0x2D, 0xA0, 0x73, 0x50, 0xE0, 0x9C, 0xEE, + 0x07, 0xEC, 0x37, 0x26, 0x6B, 0xAA, 0xA5, 0x34, + 0xFD, 0x7B, 0x1A, 0x92, 0x4E, 0xE7, 0x36, 0x1A, + 0xEB, 0x35, 0xCC, 0x5A, 0x5C, 0x06, 0x7F, 0x77, + 0xCE, 0x52, 0x33, 0x57, 0x73, 0x9D, 0xEC, 0x2D, + 0x28, 0x0C, 0xC9, 0xBF, 0x06, 0x9E, 0xA7, 0x7C, + 0x36, 0xF9, 0x0B, 0xC6, 0x7F, 0x0F, 0x66, 0x24, + 0x65, 0x2D, 0x30, 0x2B, 0xD7, 0x7F, 0x07, 0xD3, + 0x57, 0xC8, 0x4B, 0xC3, 0x0C, 0xA3, 0x5B, 0xAA, + 0xAF, 0xEA, 0xF3, 0xA3, 0x9E, 0x9E, 0xD4, 0x63, + 0xCD, 0x82, 0x8B, 0xBC, 0x5D, 0xEF, 0xE6, 0x2A, + 0x4D, 0x5B, 0x95, 0x13, 0x17, 0x98, 0xD3, 0x67, + 0x66, 0x04, 0x9E, 0x71, 0x71, 0xE6, 0xBD, 0x44, + 0x15, 0x6B, 0x29, 0x76, 0xE4, 0x62, 0x01, 0x99, + 0xEB, 0xF4, 0x2E, 0x14, 0x29, 0x0D, 0xBF, 0x8A, + 0x02, 0x30, 0x4A, 0xE7, 0x0D, 0x25, 0x42, 0x9E, + 0xD7, 0x0C, 0xAD, 0x30, 0xC6, 0xA3, 0x49, 0xF9, + 0x90, 0x0C, 0x46, 0x5B, 0x77, 0x67, 0x5F, 0x0B, + 0xE9, 0xA9, 0xFE, 0xFA, 0xC8, 0x5F, 0x19, 0xF7, + 0x35, 0x09, 0xF7, 0xB5, 0x6D, 0x51, 0x32, 0x17, + 0xBE, 0xE6, 0xC3, 0xBE, 0x4A, 0x9A, 0x33, 0xDA, + 0xC6, 0x90, 0xB7, 0xA7, 0x6F, 0x97, 0x9E, 0xD5, + 0x80, 0xE5, 0x02, 0x9E, 0x58, 0xD6, 0x45, 0x34, + 0x4D, 0x61, 0x71, 0x19, 0x07, 0x69, 0x1F, 0xAF, + 0xFF, 0x9F, 0xDE, 0x97, 0x13, 0xA1, 0xDF, 0x47, + 0x0E, 0x8B, 0xD6, 0xD0, 0x75, 0x40, 0x08, 0x59, + 0x7D, 0xFB, 0x74, 0x74, 0xF2, 0x48, 0xF4, 0x23, + 0x1B, 0x5E, 0x18, 0x4E, 0x2D, 0x2D, 0xC5, 0x40, + 0xD0, 0x90, 0x4F, 0x95, 0x69, 0xC4, 0xDA, 0xFB, + 0x39, 0x4B, 0x12, 0x7D, 0x22, 0x1E, 0x9A, 0x68, + 0x5B, 0x68, 0x2E, 0x47, 0x23, 0xB9, 0x6A, 0xBF, + 0xF7, 0xE2, 0x56, 0x79, 0xDD, 0x7A, 0x72, 0xF9, + 0x5F, 0x20, 0x6B, 0x29, 0x56, 0xEE, 0x04, 0x11, + 0x4C, 0x16, 0x34, 0x04, 0x14, 0x54, 0xB5, 0x21, + 0xAA, 0x6A, 0x46, 0x40, 0xE4, 0xF1, 0x78, 0x7C, + 0x50, 0xF3, 0x4D, 0xBC, 0x57, 0x34, 0x7C, 0x6A, + 0xBD, 0x9B, 0xEF, 0x03, 0x80, 0x7D, 0xAB, 0x20, + 0x0F, 0x77, 0x87, 0x6F, 0x93, 0xFB, 0x24, 0x20, + 0x82, 0xC7, 0x7E, 0xFB, 0x43, 0x2D, 0xC6, 0xD4, + 0xE9, 0x27, 0x8C, 0x66, 0xA8, 0x5A, 0x58, 0xC8, + 0xD8, 0x9A, 0xA8, 0x50, 0x5F, 0x3A, 0x3D, 0x0B, + 0xC3, 0x4F, 0xCE, 0x94, 0xE0, 0x0D, 0x16, 0xCB, + 0x20, 0xE0, 0xF5, 0x1A, 0x13, 0x6E, 0x28, 0xA6, + 0x42, 0xB2, 0xB1, 0x30, 0x1D, 0x56, 0x28, 0xCD, + 0xF3, 0x4E, 0xA7, 0x3E, 0x74, 0x04, 0x7D, 0xA5, + 0x86, 0xD9, 0x1A, 0xDF, 0x07, 0xBC, 0x2C, 0x59, + 0xB1, 0x91, 0x6D, 0x9B, 0xA2, 0xD0, 0x72, 0xE7, + 0xA5, 0x56, 0x4A, 0x27, 0x56, 0x1F, 0x65, 0xCD, + 0x90, 0x7B, 0xB7, 0x5A, 0x51, 0x25, 0x75, 0x1B, + 0xD9, 0xD4, 0xC7, 0x19, 0x8A, 0xB0, 0x3D, 0x38, + 0x22, 0x61, 0xCF, 0xD9, 0x66, 0xED, 0xF5, 0xB8, + 0xF5, 0x86, 0xFF, 0x98, 0x1A, 0xB7, 0xFB, 0x67, + 0xED, 0x25, 0x52, 0xD9, 0x2F, 0x84, 0xDC, 0x96, + 0x89, 0x2C, 0x52, 0xCF, 0x5F, 0xA0, 0xEA, 0xD0, + 0xB3, 0x38, 0x98, 0xFC, 0xD7, 0x50, 0x84, 0xCF, + 0xA5, 0xE9, 0x53, 0x8B, 0x44, 0x38, 0xB5, 0x7D, + 0xD8, 0xAD, 0x0A, 0xE5, 0x35, 0x78, 0x29, 0xBF, + 0x9F, 0x6B, 0x2C, 0xBB, 0x97, 0x9D, 0xD3, 0x64, + 0x23, 0x2B, 0xA8, 0xA4, 0x71, 0xE3, 0xF1, 0x2F, + 0x61, 0xC9, 0x68, 0xD2, 0x06, 0xD0, 0x4E, 0x87, + 0x03, 0x99, 0xCC, 0xB1, 0x83, 0xB6, 0x94, 0x61, + 0x3C, 0xE9, 0xE0, 0x7D, 0x13, 0xAF, 0xCF, 0xE4, + 0xA6, 0x42, 0x7F, 0x62, 0x8F, 0xFC, 0x10, 0xF1, + 0x08, 0x4D, 0x1D, 0xFC, 0x0F, 0x37, 0x11, 0xBE, + 0xD7, 0xF1, 0x80, 0x46, 0xAF, 0xFA, 0x13, 0x65, + 0x99, 0xAE, 0xF9, 0xD0, 0x13, 0xA7, 0xC7, 0x3A, + 0xD2, 0xC1, 0x9B, 0x5A, 0xB8, 0xC3, 0x08, 0x13, + 0x49, 0x40, 0x33, 0x0D, 0x1F, 0x93, 0x5D, 0x10, + 0x49, 0x3E, 0x4F, 0x90, 0x34, 0xC5, 0xEA, 0xF7, + 0x24, 0xFF, 0xF3, 0xC5, 0x95, 0xF7, 0x1F, 0x13, + 0x9A, 0xE0, 0x0C, 0xCD, 0x61, 0x93, 0x39, 0xE6, + 0xAF, 0xD5, 0x3E, 0xA9, 0xD8, 0xC4, 0x8F, 0x64, + 0x05, 0x09, 0x45, 0x2A, 0xEB, 0x12, 0xC5, 0x51, + 0x58, 0x1C, 0x55, 0x20, 0xE9, 0x29, 0x74, 0xC7, + 0x10, 0x01, 0xF3, 0xA4, 0x56, 0xB4, 0x14, 0xFE, + 0x9C, 0x10, 0x2F, 0xF8, 0xBF, 0xB5, 0x9C, 0x6E, + 0xBB, 0xE6, 0x52, 0xE7, 0xAC, 0xA7, 0xCE, 0x41, + 0x6E, 0x00, 0x66, 0x0A, 0x2F, 0x46, 0x71, 0xB8, + 0x8F, 0x45, 0x89, 0x26, 0x68, 0xCD, 0x49, 0xDF, + 0xCB, 0xCD, 0xD6, 0x66, 0xC6, 0xA7, 0x8E, 0xB3, + 0xE4, 0x72, 0xEF, 0xBA, 0xA6, 0x6D, 0x7A, 0xB7, + 0xE9, 0xD9, 0xB2, 0x60, 0xB5, 0x82, 0x77, 0x20, + 0x2A, 0xFA, 0xE3, 0xCB, 0xF5, 0x30, 0x50, 0x30, + 0xC6, 0x19, 0x67, 0xA8, 0xB8, 0xFA, 0xFE, 0xB6, + 0xDA, 0xB6, 0xB6, 0xBF, 0x07, 0x90, 0x40, 0xD8, + 0x5B, 0x15, 0x48, 0x39, 0xCD, 0x99, 0x0F, 0x3A, + 0x28, 0xD2, 0x2E, 0xBA, 0xAC, 0x6D, 0xA3, 0xF8, + 0x53, 0x88, 0xF0, 0x86, 0x87, 0x70, 0xF5, 0x07, + 0xD2, 0x99, 0xC4, 0xCA, 0xDD, 0xD8, 0x8C, 0xEB, + 0x00, 0x96, 0xB4, 0x62, 0xA3, 0x7B, 0x79, 0x31, + 0xB2, 0x85, 0xB0, 0x61, 0x39, 0xF2, 0xBC, 0x1D, + 0x31, 0xC3, 0x0C, 0x7F, 0x70, 0x9A, 0x63, 0x74, + 0xC6, 0xCB, 0xD3, 0x93, 0x0D, 0x43, 0x7F, 0x80, + 0x85, 0x87, 0x72, 0x98, 0xE1, 0x6E, 0x9A, 0x59, + 0x2E, 0x6C, 0xA8, 0x9E, 0xC2, 0xC0, 0x72, 0xFE, + 0x26, 0xE8, 0xAF, 0x89, 0x61, 0xCA, 0x0D, 0x15, + 0xCC, 0xB0, 0xBA, 0x10, 0xB8, 0x9D, 0x77, 0x2C, + 0x6C, 0x28, 0xCC, 0x70, 0x5B, 0x1F, 0x5D, 0x68, + 0xD4, 0xC8, 0x1F, 0x0F, 0x67, 0xF5, 0x3E, 0x5C, + 0x70, 0x50, 0x4B, 0x32, 0x12, 0xE6, 0x1A, 0xCE, + 0xB8, 0x32, 0x5F, 0x1D, 0xC5, 0xFB, 0x07, 0x77, + 0xAD, 0x85, 0x45, 0x95, 0x04, 0x0D, 0x94, 0x7A, + 0x1F, 0xDD, 0x05, 0x74, 0x14, 0xA5, 0x9A, 0x66, + 0xF4, 0x93, 0xBE, 0xF2, 0xA9, 0x5B, 0xCD, 0xAB, + 0xC7, 0x82, 0xF7, 0xE7, 0x4A, 0x1C, 0x90, 0x6B, + 0x9A, 0xBD, 0x93, 0xDD, 0x41, 0x56, 0xDA, 0xA5, + 0x0F, 0x5D, 0x57, 0x2C, 0xBA, 0x07, 0x07, 0x4B, + 0x91, 0x33, 0xE6, 0x1B, 0x0E, 0x25, 0x9E, 0x36, + 0xBF, 0xCA, 0x21, 0xCE, 0xC6, 0x82, 0x33, 0x4D, + 0x42, 0x4F, 0x2E, 0x71, 0xC2, 0xE7, 0x6F, 0x16, + 0xF6, 0xB7, 0x30, 0x1C, 0xA1, 0xA8, 0xE3, 0xE7, + 0xB1, 0x71, 0xDD, 0x9F, 0x90, 0x1F, 0x01, 0x1D, + 0x0A, 0xBD, 0x2C, 0x4A, 0x22, 0x84, 0x5C, 0xBF, + 0x61, 0x07, 0x24, 0xC4, 0x0D, 0x23, 0xDB, 0xC6, + 0x28, 0xB1, 0x27, 0xCB, 0x7E, 0x06, 0xF8, 0x3C, + 0x42, 0xF9, 0x51, 0x2F, 0x21, 0xC5, 0x80, 0x98, + 0x08, 0x2F, 0x56, 0x58, 0xD7, 0xE0, 0xDA, 0xC4, + 0x24, 0x0C, 0xE8, 0xFA, 0x94, 0x23, 0x57, 0xA6, + 0xD8, 0xE2, 0xC5, 0xCC, 0x16, 0x70, 0x55, 0x57, + 0xC4, 0x52, 0x2D, 0x94, 0xCE, 0x5B, 0x22, 0x8E, + 0x6C, 0x3D, 0x8E, 0x74, 0x9D, 0xFD, 0x47, 0xC7, + 0x42, 0x11, 0x41, 0x9F, 0x6A, 0x0A, 0xF6, 0x16, + 0x97, 0xB1, 0x24, 0xC4, 0x6C, 0x98, 0xF8, 0x62, + 0x51, 0xE9, 0x67, 0x6D, 0x39, 0x2B, 0x76, 0x19, + 0x5F, 0x41, 0xF4, 0x82, 0x51, 0x87, 0xFF, 0xAA, + 0x87, 0xE3, 0x46, 0x87, 0xC0, 0xC9, 0xBB, 0xB5, + 0xAC, 0xA0, 0xD1, 0x56, 0x54, 0xC2, 0x2C, 0x59, + 0x9E, 0x78, 0xF9, 0xA6, 0xBA, 0xCB, 0xE2, 0x45, + 0x8A, 0xC1, 0xE5, 0xDF, 0xC3, 0x81, 0x91, 0xDB, + 0xDB, 0x9E, 0xE2, 0x9C, 0xB9, 0x44, 0x5F, 0x5D, + 0x6D, 0x83, 0x8D, 0x2D, 0x3E, 0x72, 0x2F, 0x98, + 0xFC, 0xFA, 0x5F, 0xC0, 0xF0, 0x03, 0x4A, 0x42, + 0x19, 0x67, 0x48, 0x24, 0x70, 0x35, 0xAE, 0x37, + 0x34, 0x27, 0xAB, 0xD6, 0x92, 0xB8, 0xB4, 0x52, + 0xC9, 0xD1, 0xF0, 0x5C, 0xAC, 0xFA, 0xB9, 0x2D, + 0xCE, 0xF2, 0x24, 0xE3, 0x53, 0xF4, 0x2D, 0x65, + 0x8D, 0xBF, 0x27, 0x3F, 0xAF, 0x62, 0xE0, 0x27, + 0xBE, 0x12, 0xCB, 0x40, 0xA4, 0x99, 0xAF, 0x47, + 0x19, 0x5F, 0x68, 0x69, 0x7F, 0x8C, 0xD2, 0x1E, + 0x4A, 0xA1, 0xA4, 0x3D, 0x5A, 0x62, 0x6F, 0x78, + 0x87, 0x8E, 0xA0, 0xC0, 0xF3, 0x2C, 0x60, 0xC3, + 0xCE, 0xDD, 0xED, 0x7C, 0xAF, 0xE0, 0x0B, 0x72, + 0x9D, 0xBA, 0xC6, 0xEE, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x0B, 0x15, 0x1B, 0x1E, 0x24 + }; +#endif +#ifndef WOLFSSL_NO_ML_DSA_87 + static const byte sk_87[] = { + 0xF1, 0x79, 0x16, 0xD9, 0x5C, 0x51, 0x2F, 0xEC, + 0x0C, 0xEF, 0xA6, 0xA1, 0x5C, 0x9F, 0xB3, 0xBF, + 0x84, 0xFF, 0x8D, 0x7F, 0xA3, 0x55, 0x22, 0xEB, + 0x1C, 0x91, 0x5C, 0x4D, 0x25, 0x4E, 0x89, 0x35, + 0x24, 0x8E, 0x3C, 0x08, 0x58, 0x2B, 0x74, 0x5E, + 0xB2, 0xFD, 0x13, 0x15, 0x2B, 0x5D, 0xAE, 0xEA, + 0xB0, 0x72, 0x80, 0x42, 0xB0, 0x08, 0x85, 0xBB, + 0x92, 0xF8, 0x44, 0xA8, 0x6B, 0x42, 0x62, 0x03, + 0x5C, 0x9F, 0x44, 0x8A, 0x2B, 0x78, 0xEF, 0x5D, + 0xB3, 0x47, 0xE0, 0x25, 0x04, 0x15, 0xE1, 0x01, + 0x5F, 0xBB, 0x34, 0x31, 0x91, 0x24, 0x07, 0xC8, + 0x5A, 0x2F, 0x36, 0x2A, 0x85, 0xA9, 0xAE, 0x42, + 0x77, 0x23, 0xBF, 0x62, 0x69, 0x7B, 0x77, 0x99, + 0x1B, 0x3E, 0x93, 0xA3, 0x81, 0x13, 0x3F, 0x95, + 0x0D, 0x40, 0xE7, 0xC1, 0xAC, 0xBC, 0x17, 0xE4, + 0xF1, 0xD1, 0x0C, 0xD1, 0x27, 0x4C, 0x8D, 0x3C, + 0x84, 0x02, 0x02, 0x0A, 0xC5, 0x10, 0x1C, 0xC3, + 0x4D, 0xD0, 0x94, 0x70, 0x24, 0xC0, 0x89, 0x94, + 0x08, 0x4D, 0xC2, 0x30, 0x20, 0x63, 0xC0, 0x24, + 0xE1, 0x80, 0x40, 0xD0, 0x26, 0x68, 0x10, 0x97, + 0x01, 0x83, 0xC2, 0x91, 0x5A, 0x90, 0x2D, 0x44, + 0x94, 0x6D, 0x10, 0x09, 0x50, 0x11, 0xA7, 0x0D, + 0xE4, 0x04, 0x89, 0x9B, 0x80, 0x8D, 0x40, 0xB8, + 0x45, 0x4B, 0x86, 0x0D, 0xC8, 0xB6, 0x05, 0xC0, + 0xC0, 0x71, 0x02, 0x09, 0x06, 0xA2, 0x00, 0x2D, + 0x0B, 0x24, 0x86, 0xA0, 0x90, 0x11, 0x20, 0x16, + 0x82, 0x1B, 0x24, 0x42, 0xCB, 0xB6, 0x70, 0x43, + 0x36, 0x05, 0xDA, 0x16, 0x25, 0x9A, 0x34, 0x6C, + 0xCB, 0xB4, 0x08, 0xC4, 0x16, 0x90, 0x24, 0x29, + 0x6C, 0x42, 0x90, 0x04, 0x24, 0x06, 0x46, 0x84, + 0x12, 0x6D, 0xC2, 0x26, 0x00, 0x88, 0x40, 0x02, + 0x51, 0xC8, 0x40, 0x9C, 0x16, 0x24, 0x82, 0x18, + 0x26, 0x21, 0x06, 0x0C, 0x12, 0xC2, 0x71, 0x50, + 0x98, 0x91, 0x4A, 0x40, 0x28, 0x48, 0x48, 0x21, + 0x5A, 0x18, 0x49, 0x1B, 0xB7, 0x01, 0x5A, 0xC6, + 0x48, 0xA1, 0x90, 0x2C, 0x14, 0x18, 0x2D, 0xD2, + 0x20, 0x62, 0xDC, 0xB6, 0x49, 0x00, 0x09, 0x6D, + 0x40, 0xA8, 0x4D, 0x24, 0xC8, 0x24, 0x4C, 0x06, + 0x08, 0x80, 0x40, 0x4E, 0xD3, 0x18, 0x88, 0x12, + 0x09, 0x91, 0x8B, 0x12, 0x31, 0xC9, 0x16, 0x04, + 0x64, 0x10, 0x72, 0xDA, 0x84, 0x91, 0x92, 0xC6, + 0x65, 0x22, 0x10, 0x48, 0x18, 0xC9, 0x00, 0x14, + 0x44, 0x62, 0x24, 0xC1, 0x60, 0x40, 0xC6, 0x10, + 0x4A, 0x48, 0x28, 0x9B, 0x44, 0x66, 0x91, 0x10, + 0x52, 0xD3, 0x26, 0x52, 0xD8, 0xA6, 0x0C, 0x0A, + 0xA8, 0x44, 0xD8, 0x26, 0x0C, 0x64, 0x86, 0x45, + 0x44, 0x20, 0x00, 0xD2, 0x48, 0x85, 0xDC, 0x46, + 0x32, 0xC8, 0x22, 0x45, 0x5B, 0x00, 0x8D, 0x20, + 0xA5, 0x45, 0x01, 0xC1, 0x91, 0xA2, 0x12, 0x84, + 0x20, 0x47, 0x0E, 0x98, 0xA8, 0x25, 0xD9, 0xA0, + 0x4D, 0xA4, 0x06, 0x2D, 0x5B, 0xB0, 0x08, 0x21, + 0xB0, 0x80, 0x4C, 0x10, 0x2C, 0xC4, 0x98, 0x71, + 0x99, 0x24, 0x24, 0xA4, 0x36, 0x71, 0x4B, 0xB6, + 0x49, 0xE1, 0x92, 0x00, 0x09, 0x92, 0x4C, 0x89, + 0x12, 0x49, 0x1A, 0x39, 0x2A, 0xE0, 0x22, 0x69, + 0x61, 0xB2, 0x50, 0x40, 0x26, 0x8E, 0xC9, 0xA2, + 0x08, 0x0A, 0x90, 0x24, 0x13, 0x35, 0x06, 0x21, + 0x24, 0x62, 0x60, 0xB0, 0x01, 0xE3, 0xC6, 0x29, + 0x5B, 0x28, 0x89, 0x20, 0x90, 0x70, 0xC4, 0xA4, + 0x31, 0x08, 0x42, 0x11, 0x10, 0xC0, 0x71, 0x98, + 0x98, 0x20, 0xC4, 0xA8, 0x29, 0x1A, 0x15, 0x32, + 0xC4, 0x86, 0x6C, 0x18, 0x14, 0x6A, 0x02, 0x46, + 0x46, 0xDC, 0xC2, 0x4C, 0x81, 0x02, 0x6D, 0x49, + 0x16, 0x48, 0x10, 0x94, 0x6C, 0x0A, 0x85, 0x90, + 0x9C, 0x34, 0x84, 0x54, 0x24, 0x25, 0x49, 0xA8, + 0x21, 0x04, 0xA6, 0x2C, 0x61, 0x00, 0x01, 0x61, + 0x46, 0x92, 0xE0, 0xA6, 0x44, 0xE2, 0x00, 0x90, + 0xC8, 0x06, 0x06, 0x90, 0xB8, 0x2D, 0x0B, 0x85, + 0x85, 0x20, 0x23, 0x0D, 0x83, 0x94, 0x04, 0x54, + 0x26, 0x50, 0x41, 0x92, 0x29, 0x09, 0x16, 0x20, + 0x54, 0xC6, 0x2D, 0x81, 0xC8, 0x8C, 0x09, 0x44, + 0x44, 0xE2, 0x06, 0x30, 0x13, 0x92, 0x49, 0x0B, + 0x17, 0x48, 0x93, 0x28, 0x86, 0xD8, 0xA4, 0x50, + 0xD1, 0x32, 0x91, 0x08, 0xB8, 0x05, 0xA4, 0x02, + 0x62, 0x01, 0x15, 0x82, 0xE3, 0x18, 0x42, 0x83, + 0xC6, 0x44, 0x43, 0x02, 0x81, 0x53, 0x88, 0x04, + 0x04, 0x98, 0x31, 0x19, 0x18, 0x46, 0xDB, 0x02, + 0x89, 0x10, 0x23, 0x81, 0x03, 0x90, 0x71, 0x83, + 0x26, 0x89, 0x1A, 0x01, 0x05, 0xCA, 0xB0, 0x01, + 0x4C, 0x84, 0x09, 0x10, 0x11, 0x84, 0x13, 0xB1, + 0x20, 0x61, 0xB8, 0x41, 0x1B, 0x02, 0x8C, 0x09, + 0x98, 0x61, 0x83, 0x18, 0x61, 0x08, 0xC1, 0x6D, + 0x44, 0x86, 0x09, 0xCB, 0x88, 0x8D, 0x93, 0xB4, + 0x41, 0x58, 0x90, 0x81, 0x04, 0x31, 0x08, 0xD1, + 0xC4, 0x04, 0x19, 0xB4, 0x4C, 0x1C, 0x88, 0x20, + 0xCA, 0x30, 0x72, 0x1C, 0xB5, 0x85, 0x13, 0x27, + 0x32, 0x84, 0xB4, 0x44, 0x04, 0x42, 0x20, 0x61, + 0x18, 0x52, 0x50, 0x96, 0x44, 0x03, 0x38, 0x86, + 0xE3, 0x48, 0x31, 0x02, 0x82, 0x68, 0x98, 0x06, + 0x90, 0x23, 0x28, 0x04, 0x10, 0x18, 0x0D, 0x10, + 0x28, 0x45, 0x4C, 0x84, 0x6C, 0x09, 0x36, 0x71, + 0x82, 0x26, 0x64, 0x18, 0xC6, 0x21, 0x90, 0x18, + 0x22, 0x0A, 0x37, 0x08, 0xC4, 0x94, 0x28, 0xE2, + 0x30, 0x2C, 0x92, 0xB4, 0x24, 0x63, 0x46, 0x70, + 0x52, 0x96, 0x0C, 0x8B, 0xA4, 0x05, 0xD3, 0x02, + 0x85, 0x09, 0x32, 0x92, 0x49, 0x12, 0x21, 0x18, + 0x43, 0x28, 0x01, 0x32, 0x45, 0x0B, 0xA5, 0x50, + 0x14, 0x16, 0x65, 0x91, 0x80, 0x65, 0x0A, 0x44, + 0x66, 0x13, 0xB6, 0x4C, 0x01, 0x38, 0x71, 0x11, + 0x49, 0x28, 0x22, 0x43, 0x02, 0x0B, 0x34, 0x04, + 0x01, 0x16, 0x91, 0x80, 0x14, 0x0E, 0x12, 0x93, + 0x01, 0x00, 0x11, 0x80, 0xDC, 0x28, 0x51, 0x11, + 0x87, 0x85, 0xC1, 0x34, 0x28, 0x02, 0xA2, 0x11, + 0x02, 0x38, 0x44, 0x52, 0x14, 0x64, 0xC2, 0xA0, + 0x01, 0x1B, 0x42, 0x8C, 0xC2, 0xB2, 0x71, 0xCB, + 0x16, 0x00, 0xCC, 0x10, 0x21, 0x04, 0x12, 0x52, + 0x84, 0x24, 0x2A, 0xD3, 0x48, 0x12, 0x08, 0x44, + 0x08, 0x81, 0x88, 0x44, 0x01, 0x23, 0x50, 0xC0, + 0xA2, 0x09, 0x81, 0x94, 0x50, 0x02, 0x89, 0x61, + 0x01, 0x31, 0x88, 0x1B, 0xA2, 0x61, 0x90, 0x94, + 0x84, 0x91, 0x24, 0x09, 0x03, 0x18, 0x22, 0xA3, + 0x46, 0x60, 0x10, 0x16, 0x4D, 0x48, 0x84, 0x89, + 0x11, 0x00, 0x2E, 0xCC, 0xC0, 0x40, 0x8C, 0xC0, + 0x51, 0xE4, 0x42, 0x62, 0xDA, 0x24, 0x11, 0x13, + 0x19, 0x46, 0x93, 0x34, 0x4C, 0x42, 0x42, 0x24, + 0xC4, 0x48, 0x90, 0x00, 0x35, 0x80, 0x1B, 0x98, + 0x51, 0x0B, 0x41, 0x60, 0x0C, 0x25, 0x46, 0x9A, + 0xA8, 0x89, 0x12, 0x86, 0x4C, 0xE3, 0x16, 0x09, + 0x14, 0x27, 0x24, 0x51, 0x26, 0x4D, 0x1B, 0x02, + 0x10, 0x00, 0x17, 0x28, 0xD4, 0xA8, 0x45, 0x48, + 0x88, 0x48, 0x01, 0xC7, 0x0D, 0x93, 0xC8, 0x40, + 0x5B, 0x02, 0x49, 0x51, 0x02, 0x4A, 0x01, 0x42, + 0x10, 0xE1, 0x08, 0x90, 0x03, 0x85, 0x48, 0x11, + 0xA8, 0x68, 0x8B, 0x90, 0x08, 0x5A, 0x02, 0x0C, + 0x5A, 0x18, 0x50, 0x11, 0x87, 0x51, 0x9C, 0x38, + 0x92, 0xD0, 0x44, 0x82, 0x10, 0x33, 0x21, 0x88, + 0x44, 0x2D, 0x24, 0x28, 0x0D, 0x22, 0xA3, 0x30, + 0x49, 0x88, 0x25, 0xA1, 0xB2, 0x01, 0x5C, 0x40, + 0x20, 0x1C, 0x03, 0x72, 0xCC, 0x96, 0x8C, 0x51, + 0xA6, 0x88, 0xE3, 0x92, 0x08, 0x13, 0xB0, 0x08, + 0x5C, 0x38, 0x44, 0x03, 0x47, 0x8E, 0x93, 0x12, + 0x4A, 0x88, 0x20, 0x48, 0xE0, 0x42, 0x20, 0x81, + 0x90, 0x09, 0x4B, 0x06, 0x6D, 0xD2, 0x90, 0x10, + 0x01, 0x82, 0x49, 0x19, 0x28, 0x91, 0xDA, 0x20, + 0x2A, 0x20, 0x85, 0x40, 0x0A, 0x16, 0x8A, 0x1C, + 0x83, 0x60, 0xCA, 0x48, 0x4A, 0xA2, 0xC8, 0x50, + 0xE4, 0x02, 0x31, 0x88, 0x86, 0x88, 0x53, 0x00, + 0x89, 0x60, 0x08, 0x8A, 0xA2, 0x02, 0x0A, 0x0A, + 0x34, 0x45, 0x03, 0x04, 0x42, 0x1B, 0x40, 0x09, + 0x89, 0xA0, 0x69, 0x42, 0x18, 0x49, 0x4A, 0xA8, + 0x8C, 0x99, 0x90, 0x30, 0xCA, 0x38, 0x91, 0x09, + 0x31, 0x72, 0x8B, 0x44, 0x29, 0x52, 0xA2, 0x8D, + 0x08, 0x14, 0x6E, 0xA1, 0x84, 0x50, 0x1C, 0x31, + 0x46, 0x19, 0xB7, 0x01, 0xCC, 0x06, 0x29, 0x11, + 0x09, 0x20, 0x4B, 0x40, 0x66, 0x40, 0xC4, 0x49, + 0x00, 0x13, 0x24, 0xD0, 0xA2, 0x84, 0xCA, 0x16, + 0x29, 0xD0, 0xC0, 0x84, 0xC8, 0x88, 0x44, 0xE1, + 0x20, 0x29, 0x1A, 0x97, 0x05, 0x90, 0x42, 0x90, + 0x04, 0x40, 0x71, 0x9C, 0x32, 0x4E, 0x64, 0x26, + 0x22, 0x93, 0x36, 0x66, 0xD3, 0x06, 0x49, 0xA3, + 0x26, 0x51, 0x4C, 0xA6, 0x89, 0x84, 0x36, 0x84, + 0x93, 0x46, 0x6D, 0x14, 0x07, 0x8D, 0x18, 0x29, + 0x42, 0x52, 0x34, 0x72, 0x44, 0x10, 0x90, 0x12, + 0x37, 0x81, 0xD4, 0x10, 0x64, 0x04, 0xA5, 0x08, + 0x84, 0x24, 0x09, 0x1C, 0x08, 0x8D, 0x02, 0x99, + 0x6C, 0x1B, 0x30, 0x50, 0x09, 0x89, 0x81, 0x19, + 0x30, 0x48, 0x5B, 0x14, 0x4D, 0xD9, 0x20, 0x20, + 0x0C, 0x01, 0x2A, 0x00, 0x90, 0x4D, 0xA1, 0x02, + 0x64, 0x1C, 0x03, 0x01, 0xC2, 0x26, 0x8C, 0x14, + 0x08, 0x45, 0xE3, 0x12, 0x48, 0x09, 0x20, 0x09, + 0x41, 0x40, 0x61, 0x90, 0x44, 0x21, 0x49, 0x06, + 0x91, 0x4B, 0xC0, 0x84, 0x22, 0x95, 0x51, 0x23, + 0x38, 0x0E, 0x5C, 0x28, 0x70, 0xC2, 0x40, 0x2C, + 0x94, 0x18, 0x62, 0x9A, 0x30, 0x4A, 0xE2, 0x86, + 0x4C, 0x5C, 0x10, 0x8D, 0xC2, 0x12, 0x21, 0x9C, + 0xC4, 0x4D, 0xD9, 0x96, 0x88, 0x0C, 0x29, 0x45, + 0x1B, 0x45, 0x6A, 0x1A, 0x00, 0x60, 0x91, 0x30, + 0x0C, 0x12, 0x00, 0x69, 0xA2, 0xA0, 0x04, 0x81, + 0x00, 0x65, 0x5C, 0x38, 0x8A, 0x18, 0x05, 0x89, + 0x48, 0x32, 0x24, 0x81, 0xC6, 0x4D, 0x60, 0x90, + 0x31, 0x83, 0x22, 0x12, 0xE1, 0xC2, 0x6C, 0x89, + 0x00, 0x90, 0x14, 0xB4, 0x40, 0xD3, 0xB8, 0x45, + 0x89, 0x24, 0x70, 0x09, 0x26, 0x6C, 0xD9, 0x32, + 0x8A, 0x83, 0x44, 0x0E, 0x21, 0x44, 0x61, 0x99, + 0xA4, 0x20, 0x44, 0x16, 0x2E, 0x1A, 0xC2, 0x08, + 0x09, 0x98, 0x6C, 0x8C, 0x18, 0x8C, 0x0C, 0x30, + 0x62, 0x8B, 0x46, 0x45, 0x80, 0x10, 0x21, 0x20, + 0x33, 0x32, 0x5A, 0x38, 0x4C, 0x98, 0x06, 0x45, + 0x1A, 0x33, 0x09, 0x82, 0x34, 0x44, 0x02, 0x20, + 0x09, 0x59, 0x00, 0x41, 0x08, 0x13, 0x08, 0xDC, + 0x18, 0x68, 0x12, 0x47, 0x86, 0x43, 0xB8, 0x21, + 0x62, 0x02, 0x8D, 0x5C, 0x10, 0x0D, 0x60, 0x96, + 0x65, 0xA2, 0x22, 0x4C, 0x83, 0x18, 0x09, 0x41, + 0x08, 0x41, 0x63, 0xC2, 0x80, 0x13, 0x81, 0x65, + 0x22, 0x03, 0x92, 0x04, 0xA9, 0x4D, 0x1C, 0xB0, + 0x44, 0x80, 0xC6, 0x24, 0x00, 0x01, 0x44, 0x22, + 0x11, 0x80, 0x21, 0x95, 0x64, 0x09, 0x99, 0x8C, + 0xD3, 0x14, 0x4A, 0xD1, 0x98, 0x2D, 0x19, 0x31, + 0x4C, 0x0A, 0x92, 0x40, 0x13, 0x98, 0x48, 0x14, + 0x89, 0x20, 0x23, 0xB3, 0x0D, 0x14, 0x98, 0x6D, + 0x12, 0x98, 0x05, 0x9B, 0x14, 0x06, 0x5B, 0x26, + 0x91, 0x0A, 0x38, 0x09, 0x08, 0x98, 0x2C, 0x19, + 0xA0, 0x45, 0x44, 0x26, 0x00, 0x0A, 0x05, 0x21, + 0xDB, 0xA0, 0x69, 0x51, 0x42, 0x92, 0x0B, 0x43, + 0x00, 0xD1, 0x42, 0x0D, 0x81, 0x30, 0x28, 0x13, + 0xC2, 0x20, 0x03, 0x27, 0x60, 0x10, 0x83, 0x91, + 0x0A, 0x53, 0x7E, 0xA1, 0x4F, 0x11, 0x54, 0x5E, + 0x25, 0x4F, 0xCF, 0x28, 0x03, 0x95, 0x2A, 0x58, + 0x0A, 0x4B, 0x6C, 0x9B, 0x29, 0x10, 0x3D, 0x97, + 0x43, 0x6C, 0x00, 0x3E, 0x2E, 0xCE, 0xAE, 0x20, + 0x28, 0x01, 0x7F, 0xF1, 0xD5, 0x18, 0xB0, 0xB5, + 0xD5, 0xE6, 0x24, 0x26, 0x64, 0xED, 0x33, 0x7C, + 0xCA, 0x45, 0x26, 0xED, 0x5D, 0xB5, 0xEA, 0xD8, + 0xBB, 0x31, 0x16, 0x94, 0x1C, 0xD0, 0xC8, 0xF0, + 0xA7, 0xED, 0x5A, 0x1A, 0x5A, 0x00, 0xB9, 0x8C, + 0x33, 0x6A, 0x9B, 0xC8, 0xEB, 0x6B, 0x3A, 0x30, + 0x83, 0x16, 0xF1, 0x17, 0xEA, 0xA8, 0x0D, 0x4B, + 0x77, 0x56, 0xDD, 0x4A, 0x91, 0xDA, 0xA5, 0x8E, + 0x80, 0xD7, 0xB5, 0x77, 0x55, 0x83, 0x97, 0xAF, + 0x90, 0x5B, 0x67, 0xC5, 0x9F, 0x14, 0xE1, 0x2C, + 0x15, 0x8D, 0x29, 0x2C, 0xA6, 0xB6, 0x41, 0xED, + 0x0C, 0x75, 0xE3, 0x9A, 0x91, 0x4F, 0xFA, 0x1A, + 0x9F, 0x24, 0xCA, 0x28, 0xF2, 0x00, 0xC7, 0x48, + 0xDE, 0x70, 0x9D, 0x15, 0xD7, 0x22, 0xE7, 0xED, + 0x2C, 0x91, 0x8D, 0xEF, 0x08, 0xCF, 0xAF, 0x9B, + 0x7E, 0x24, 0xDE, 0xF2, 0xD5, 0x1A, 0x4D, 0x42, + 0x0E, 0x7E, 0x89, 0x06, 0xFA, 0xCD, 0x9A, 0x5A, + 0x98, 0xB0, 0xD1, 0xD5, 0x34, 0x5C, 0x8B, 0x9A, + 0xC0, 0xBB, 0xF4, 0xB1, 0x5E, 0xF0, 0xB4, 0x6A, + 0x8E, 0x3B, 0x6B, 0xAE, 0x0C, 0x6E, 0x9F, 0x09, + 0x2E, 0xB3, 0xEF, 0x1D, 0x49, 0x62, 0x0B, 0x65, + 0xE7, 0xDE, 0xDB, 0xEF, 0x68, 0x7E, 0xBD, 0x0E, + 0xA0, 0x95, 0x97, 0x2A, 0x56, 0xA0, 0xEA, 0xFB, + 0x2D, 0x75, 0xF4, 0x32, 0x1B, 0x80, 0xAC, 0xBC, + 0xA3, 0x2B, 0x1B, 0x11, 0xAA, 0x57, 0x6F, 0xE4, + 0xE0, 0xCC, 0xCC, 0x20, 0x52, 0x12, 0x65, 0x42, + 0x96, 0xF0, 0x60, 0x8F, 0xF3, 0x83, 0x69, 0xAF, + 0x19, 0x80, 0x75, 0x68, 0xDB, 0xE1, 0x71, 0xDB, + 0x79, 0xEB, 0x8C, 0x1C, 0xB7, 0x6A, 0x8E, 0xB9, + 0x5B, 0x28, 0x8C, 0x9D, 0xCC, 0x62, 0x0B, 0xEF, + 0xCE, 0x96, 0x06, 0x0F, 0x45, 0xA6, 0xA2, 0xDA, + 0xC2, 0x2F, 0x55, 0xE4, 0x7D, 0xC7, 0xBA, 0xB4, + 0xA7, 0x93, 0xD9, 0x65, 0x8F, 0xE2, 0x7C, 0x66, + 0x2C, 0xA6, 0x37, 0x00, 0x81, 0x30, 0xF1, 0x00, + 0xD9, 0x65, 0xB4, 0x78, 0x17, 0x7A, 0xC6, 0xDC, + 0x35, 0x93, 0x1A, 0x5E, 0xCC, 0x5F, 0x93, 0x31, + 0x22, 0x40, 0x2C, 0x17, 0x0E, 0xB8, 0xE0, 0xA4, + 0x1C, 0xB6, 0x3F, 0xE5, 0x60, 0x2F, 0x7B, 0x18, + 0xE1, 0xDB, 0xB6, 0xDB, 0x30, 0xA7, 0x61, 0x55, + 0xC6, 0xCF, 0x03, 0x0F, 0x73, 0x8D, 0xC0, 0x91, + 0x6D, 0xB1, 0x80, 0xF8, 0x3F, 0x02, 0x90, 0x93, + 0x11, 0xCB, 0x6B, 0x3B, 0x9E, 0x55, 0x3F, 0xAC, + 0xA0, 0x52, 0x23, 0xB3, 0x3C, 0x69, 0x60, 0x2D, + 0x0F, 0x05, 0xA0, 0x8B, 0xEB, 0x84, 0x80, 0x96, + 0x51, 0x99, 0x9A, 0x55, 0x26, 0xE7, 0x76, 0xF3, + 0xDE, 0x39, 0x30, 0x4A, 0x5F, 0xEF, 0x00, 0x95, + 0x0A, 0x9A, 0x81, 0x0D, 0x12, 0xE0, 0x1D, 0x15, + 0xD8, 0x86, 0xDB, 0x26, 0x75, 0xF6, 0x54, 0xCA, + 0x17, 0xFA, 0xAE, 0xEB, 0xD1, 0xF5, 0x61, 0xF9, + 0xD1, 0xA9, 0x5E, 0x0B, 0xAD, 0xF7, 0xC3, 0x31, + 0x5A, 0xFA, 0xBA, 0x8D, 0x4B, 0xEC, 0x1F, 0x05, + 0x42, 0xA8, 0xF1, 0x0A, 0xC6, 0x66, 0xFD, 0x8D, + 0x0C, 0x5A, 0xF1, 0xD6, 0x86, 0x7A, 0x9D, 0x82, + 0x6B, 0xFB, 0x6B, 0x03, 0x0B, 0x58, 0xEC, 0xEF, + 0x67, 0x78, 0xD2, 0xC5, 0x2B, 0xF6, 0x2C, 0xB3, + 0x4B, 0x81, 0xFF, 0x93, 0x6D, 0xA3, 0x3E, 0xDA, + 0xB3, 0x1D, 0xB3, 0x9A, 0xB7, 0x63, 0x66, 0xD0, + 0x94, 0x36, 0x2F, 0x04, 0x6D, 0x50, 0x78, 0xB4, + 0x22, 0x35, 0x04, 0xA1, 0x2B, 0xA0, 0xC7, 0xB8, + 0xE8, 0x83, 0x72, 0x77, 0x18, 0x50, 0x9B, 0xD4, + 0x7A, 0x69, 0x6E, 0xE9, 0x88, 0x0C, 0xAF, 0xF6, + 0x63, 0x61, 0x2B, 0x95, 0x86, 0x30, 0x3D, 0x6D, + 0xE0, 0xD2, 0x1F, 0x9A, 0x21, 0x96, 0x22, 0x78, + 0xEB, 0xCE, 0x60, 0xA6, 0xD4, 0x68, 0x44, 0x09, + 0x5C, 0x5F, 0x89, 0x2D, 0xAC, 0xA4, 0x8D, 0x78, + 0x28, 0x22, 0x45, 0x38, 0x34, 0xB4, 0xE4, 0x2C, + 0xD3, 0xA1, 0xFE, 0x39, 0x87, 0x35, 0x6E, 0xAB, + 0x11, 0xEF, 0xB8, 0xEE, 0xCD, 0x8E, 0x9C, 0xC8, + 0xF3, 0x9A, 0x0F, 0xF1, 0xFF, 0xB8, 0x06, 0x9A, + 0x44, 0x1F, 0x85, 0x1E, 0xB4, 0x38, 0xE9, 0xC0, + 0xB5, 0x7E, 0x88, 0x18, 0xA3, 0x22, 0x65, 0x1E, + 0x60, 0xF4, 0xB6, 0x78, 0x90, 0xE5, 0xED, 0x7A, + 0x0F, 0xBF, 0x75, 0x36, 0xC3, 0xFD, 0x50, 0xD0, + 0xB0, 0x65, 0x8D, 0x7C, 0xCF, 0x27, 0x5E, 0x8A, + 0x9E, 0x9F, 0xBB, 0x99, 0xBE, 0x2E, 0x5F, 0x5E, + 0x16, 0x7B, 0xE2, 0x90, 0xB7, 0xE9, 0x67, 0x32, + 0xF8, 0x9E, 0x40, 0xD7, 0x85, 0xAF, 0x25, 0xC1, + 0xBA, 0x61, 0xA7, 0x78, 0x6D, 0x3E, 0xF2, 0xD0, + 0xC1, 0x14, 0xD1, 0x04, 0x8E, 0x76, 0x46, 0xDF, + 0xA3, 0x03, 0x2B, 0xFB, 0x7A, 0x51, 0xA6, 0x36, + 0x05, 0xDC, 0xE3, 0xE1, 0xD8, 0x98, 0x95, 0x00, + 0xD6, 0xE5, 0x8E, 0x96, 0x05, 0x19, 0x93, 0x1D, + 0xAC, 0x9F, 0x14, 0xDD, 0xA4, 0x28, 0xF5, 0xA2, + 0xC9, 0xC7, 0x4D, 0x91, 0x6D, 0x90, 0x77, 0x07, + 0xB5, 0x3E, 0xB5, 0x2C, 0x44, 0xAD, 0x71, 0xD7, + 0x27, 0x82, 0x6E, 0xB2, 0xCA, 0x68, 0x07, 0x0A, + 0x6F, 0x0E, 0x47, 0xFA, 0x16, 0xE5, 0x2E, 0x96, + 0x29, 0xB7, 0xAA, 0x82, 0x41, 0xDA, 0xAB, 0xB1, + 0x94, 0x97, 0xA5, 0x82, 0x4E, 0x58, 0xD7, 0x26, + 0x75, 0xC3, 0xA6, 0x7E, 0x10, 0xA1, 0x19, 0xB2, + 0x74, 0xB8, 0x4D, 0x9B, 0xEE, 0x28, 0x71, 0x72, + 0x8E, 0xD2, 0xF9, 0x4F, 0x85, 0x59, 0xB9, 0x7F, + 0x97, 0x9A, 0xE8, 0x82, 0xEA, 0x54, 0x99, 0x28, + 0xD6, 0xB1, 0xA9, 0xA4, 0xE4, 0xA2, 0x29, 0xF6, + 0xEB, 0x3F, 0xB1, 0xA4, 0x34, 0xA0, 0xFA, 0xED, + 0xAD, 0x62, 0xB7, 0x03, 0x30, 0xCF, 0xCB, 0x24, + 0xCB, 0x34, 0x98, 0x80, 0x2A, 0x67, 0x9F, 0x8F, + 0x54, 0xBF, 0x83, 0xEF, 0x34, 0x47, 0x22, 0x96, + 0x91, 0x98, 0x31, 0xCA, 0xAD, 0x59, 0xEB, 0xE8, + 0x30, 0x82, 0xEA, 0xB6, 0x7D, 0x4A, 0xBD, 0x90, + 0x22, 0x9A, 0x5E, 0x93, 0xA0, 0xB5, 0x80, 0x97, + 0x7F, 0x08, 0x13, 0xCC, 0xB1, 0x5E, 0xCD, 0x74, + 0xFF, 0x71, 0x5F, 0xE8, 0xDB, 0x5B, 0x05, 0xCE, + 0xF3, 0x7D, 0x34, 0x93, 0xBE, 0xDA, 0x27, 0x05, + 0x84, 0x94, 0x4C, 0x02, 0x09, 0x86, 0x34, 0x51, + 0x4D, 0xAA, 0xCE, 0x70, 0x47, 0xE4, 0x74, 0x32, + 0xF9, 0x2A, 0xDC, 0xA4, 0x91, 0xA3, 0xE0, 0x96, + 0x1A, 0x5D, 0x9F, 0x01, 0x44, 0x85, 0x2E, 0x46, + 0x32, 0x63, 0x35, 0xE2, 0x15, 0x24, 0x3D, 0xAA, + 0xE8, 0x37, 0x92, 0x7F, 0xBF, 0xDC, 0xE6, 0x91, + 0xF4, 0x98, 0x59, 0x26, 0x6E, 0x90, 0x08, 0x16, + 0x8C, 0x6A, 0x5E, 0x2F, 0x60, 0x9C, 0x80, 0xC6, + 0x8E, 0x08, 0x20, 0xE7, 0x27, 0x19, 0xE9, 0xB5, + 0x87, 0x3F, 0xA1, 0x99, 0xE1, 0x97, 0xF9, 0xC4, + 0x94, 0xAA, 0x8A, 0x3A, 0x65, 0x26, 0x9E, 0x95, + 0xB7, 0x61, 0xB6, 0x7B, 0xEC, 0x61, 0x13, 0xC1, + 0x44, 0xA5, 0x69, 0x89, 0xC5, 0x75, 0x0D, 0x45, + 0x05, 0x42, 0xCC, 0xF8, 0x1B, 0x24, 0x62, 0x09, + 0x2F, 0x70, 0x71, 0x5D, 0x49, 0x14, 0xEB, 0x2C, + 0xAA, 0x31, 0x74, 0xBC, 0x9E, 0xEB, 0x20, 0xAA, + 0xB6, 0xC6, 0x40, 0xF8, 0xB5, 0xD9, 0xC6, 0xA0, + 0xDC, 0xC6, 0xF0, 0xAE, 0xC9, 0x7B, 0x3A, 0xF6, + 0x47, 0xEB, 0xF8, 0x00, 0x34, 0xA4, 0x3B, 0xF3, + 0x19, 0xBF, 0x40, 0xAD, 0xF7, 0x9A, 0xFE, 0xAB, + 0x58, 0x90, 0xD2, 0x02, 0x3B, 0xAE, 0x02, 0xC9, + 0xFD, 0x02, 0xC5, 0xBB, 0x65, 0x87, 0x9C, 0x1B, + 0x5E, 0xA4, 0x06, 0x02, 0x9A, 0xE7, 0x78, 0x45, + 0xCB, 0x99, 0x4D, 0xB8, 0xC3, 0x52, 0x11, 0xCA, + 0x1D, 0xC8, 0x81, 0xF7, 0xF2, 0x0A, 0x47, 0x06, + 0x50, 0x5F, 0x29, 0xD9, 0xCD, 0x19, 0x89, 0xAD, + 0x42, 0xB0, 0x7E, 0xF5, 0x2D, 0x96, 0x54, 0xE2, + 0x8E, 0x3D, 0xCB, 0x83, 0x00, 0x08, 0xA1, 0xBE, + 0x31, 0x99, 0x38, 0x7E, 0x06, 0x6B, 0x28, 0xB3, + 0x15, 0xCA, 0x19, 0x02, 0xF4, 0xBB, 0x0E, 0xE6, + 0x3F, 0xDC, 0x4C, 0x93, 0xE1, 0xAB, 0x88, 0x6F, + 0xD7, 0x42, 0x52, 0x61, 0xC3, 0x7A, 0xC5, 0x87, + 0x62, 0xD0, 0x3D, 0xB6, 0x07, 0x06, 0x88, 0x7E, + 0x72, 0xCF, 0x74, 0x5A, 0x44, 0x6D, 0xF6, 0xC6, + 0x66, 0x2F, 0x53, 0xDD, 0x61, 0x24, 0x71, 0xA4, + 0x34, 0xAC, 0x56, 0xC4, 0xBE, 0xDB, 0x3C, 0x9F, + 0x36, 0x47, 0xE6, 0x03, 0x2B, 0x3C, 0xC0, 0x99, + 0x0A, 0x3A, 0x2E, 0x87, 0x05, 0x2B, 0x36, 0xD4, + 0xA1, 0x62, 0x42, 0x4E, 0x2D, 0x39, 0x9E, 0x1B, + 0xC2, 0x37, 0x92, 0x8D, 0x0B, 0xD7, 0x71, 0x58, + 0x07, 0x9C, 0xCB, 0x20, 0x8B, 0x71, 0x95, 0x07, + 0x96, 0x55, 0xBD, 0xB7, 0x6C, 0xBA, 0xFF, 0x44, + 0x7C, 0x34, 0xC5, 0x82, 0x9F, 0xAC, 0x19, 0x9B, + 0xB0, 0x27, 0xA0, 0x80, 0x06, 0x50, 0x8D, 0x56, + 0xC8, 0x1D, 0x18, 0x70, 0x90, 0xE7, 0x10, 0x24, + 0xDB, 0x7F, 0xBF, 0x3A, 0x7D, 0x64, 0xD8, 0xFA, + 0x48, 0x74, 0xA8, 0xF4, 0x70, 0x37, 0x7B, 0x15, + 0x38, 0x00, 0x96, 0x82, 0x2F, 0xFE, 0x46, 0x55, + 0x71, 0xB5, 0x0C, 0x54, 0x05, 0x58, 0xBA, 0x50, + 0xE9, 0x0E, 0xB8, 0x14, 0x52, 0xF4, 0x12, 0x75, + 0xC2, 0x51, 0x5B, 0xAE, 0x05, 0x92, 0xD5, 0x3F, + 0x6A, 0x6A, 0x34, 0xD2, 0xA3, 0x4D, 0x8E, 0xAC, + 0x6E, 0x7A, 0x03, 0xFB, 0xDB, 0x52, 0x49, 0x4F, + 0x4B, 0x98, 0x1B, 0x56, 0xC0, 0x96, 0x26, 0x08, + 0x48, 0x50, 0xC7, 0xCF, 0x96, 0x2F, 0x93, 0x10, + 0x72, 0x25, 0x15, 0xA6, 0x2A, 0xC0, 0x85, 0xA6, + 0x18, 0x9A, 0xDD, 0xEA, 0x38, 0x12, 0x91, 0x13, + 0x57, 0x31, 0xB2, 0xEE, 0x83, 0xA4, 0xF1, 0xEB, + 0xFA, 0x09, 0xAF, 0x80, 0xA9, 0x12, 0x68, 0xA8, + 0x76, 0x23, 0xCB, 0x55, 0x7C, 0x9F, 0x66, 0xDE, + 0xB4, 0x54, 0xFB, 0x2F, 0x4F, 0xC2, 0x64, 0x8F, + 0x44, 0x41, 0x5A, 0x7B, 0xEF, 0x29, 0x96, 0x2D, + 0x5F, 0x7C, 0x16, 0xE7, 0x85, 0x79, 0xF5, 0x26, + 0xDD, 0x20, 0xE9, 0x20, 0x9B, 0x6C, 0xA6, 0xDF, + 0xD1, 0x30, 0xF9, 0x2E, 0xF7, 0x24, 0x64, 0x5B, + 0x5B, 0x84, 0xD8, 0x72, 0x4F, 0x3C, 0xF6, 0xF3, + 0xA3, 0xB2, 0xA9, 0xCF, 0x61, 0x24, 0x7A, 0x54, + 0xBA, 0x92, 0x8F, 0x53, 0xEA, 0xCB, 0xA7, 0xE6, + 0xD6, 0xB8, 0x12, 0xC4, 0xCE, 0x21, 0xA1, 0x8B, + 0xA8, 0xD1, 0x14, 0x50, 0xE7, 0x04, 0x89, 0xBA, + 0x57, 0x2E, 0x5E, 0xB9, 0xA7, 0x72, 0x2D, 0x9D, + 0xC6, 0xAA, 0xE4, 0xF9, 0x57, 0x93, 0x60, 0x09, + 0xE2, 0x6E, 0xB3, 0xE7, 0x4D, 0x9F, 0x99, 0x33, + 0xF3, 0xDB, 0x4D, 0xA0, 0xA1, 0xF5, 0x44, 0x93, + 0x99, 0xB5, 0xE1, 0x01, 0x03, 0x11, 0xF8, 0x7D, + 0x92, 0xC1, 0x87, 0xAD, 0x2E, 0xFA, 0xBB, 0x0A, + 0x2C, 0x86, 0xB7, 0xD7, 0xF9, 0xA0, 0x72, 0xAB, + 0xC0, 0xC6, 0x60, 0x6D, 0xBC, 0xD9, 0x20, 0x17, + 0x7A, 0x22, 0x57, 0x20, 0xA7, 0x05, 0x76, 0xB8, + 0xE8, 0x2D, 0x7D, 0x53, 0xC1, 0xDF, 0xA4, 0x8E, + 0xA7, 0x31, 0x81, 0xAF, 0x0A, 0xF0, 0x86, 0xB6, + 0xAA, 0xF8, 0x0A, 0xB2, 0x49, 0x81, 0xF2, 0x75, + 0xD6, 0x6D, 0x4F, 0xBD, 0xE2, 0xC5, 0x1A, 0xE8, + 0xE8, 0xD4, 0x58, 0x33, 0x72, 0x9F, 0x45, 0x03, + 0x01, 0x30, 0xBC, 0x85, 0xB2, 0xBD, 0x9A, 0x14, + 0xC8, 0x13, 0xA3, 0x7F, 0x1F, 0xA1, 0x47, 0xF8, + 0x15, 0x48, 0x8D, 0x7A, 0x17, 0xC0, 0xC0, 0x39, + 0xEA, 0xF8, 0x66, 0xCE, 0xA7, 0x5F, 0x5B, 0x2E, + 0xBE, 0x05, 0xEF, 0x31, 0x09, 0x47, 0x2B, 0xA5, + 0xF7, 0xCF, 0xCE, 0x4C, 0x35, 0x8B, 0x60, 0x80, + 0x40, 0x0C, 0x5C, 0xC0, 0x85, 0x15, 0x14, 0x92, + 0xD1, 0x3A, 0x5B, 0x00, 0x96, 0xA0, 0x63, 0x1F, + 0xAA, 0x30, 0xCB, 0x48, 0xF2, 0xDA, 0x87, 0x3B, + 0x85, 0x7D, 0xFD, 0xB3, 0x86, 0xD9, 0x33, 0x98, + 0x18, 0x07, 0x34, 0x92, 0x55, 0x9A, 0x0E, 0xC2, + 0xDA, 0xF3, 0x73, 0x8E, 0x15, 0x88, 0xB0, 0x98, + 0x75, 0x1F, 0xF0, 0xFA, 0x1C, 0x87, 0x1B, 0x22, + 0x23, 0x7E, 0x5C, 0xD1, 0x5B, 0x0E, 0x17, 0x28, + 0xEA, 0x26, 0x71, 0x66, 0xC3, 0x8A, 0x71, 0x97, + 0xB6, 0xCC, 0x7D, 0xAD, 0x39, 0x11, 0x6B, 0xE6, + 0x1D, 0xF4, 0x33, 0x3C, 0xD7, 0xC2, 0xA4, 0x13, + 0xDB, 0x30, 0x63, 0xD7, 0xF0, 0x22, 0x8C, 0x61, + 0xFA, 0xDA, 0xC3, 0xF8, 0xC3, 0x31, 0xF4, 0x45, + 0x09, 0xB4, 0xD6, 0x08, 0x53, 0x1F, 0x99, 0x5D, + 0x15, 0xFA, 0xB1, 0x19, 0xD8, 0x47, 0xE6, 0xD8, + 0x54, 0x95, 0x75, 0xB7, 0xD8, 0x50, 0xB2, 0x60, + 0x0E, 0x4D, 0x13, 0x64, 0x6C, 0xF9, 0x6B, 0x6B, + 0x9D, 0xA6, 0xC6, 0x2F, 0x2A, 0x80, 0xAE, 0x02, + 0x58, 0xA8, 0xCD, 0x6E, 0xF4, 0xC5, 0x5E, 0xEA, + 0x7E, 0x78, 0xD2, 0x0A, 0x46, 0x4A, 0x19, 0x4C, + 0xEC, 0xBB, 0x01, 0xE7, 0x3F, 0x32, 0x76, 0xD6, + 0x6E, 0x12, 0xAD, 0x37, 0x74, 0x51, 0xBB, 0xB9, + 0x4E, 0x5C, 0x94, 0x88, 0x32, 0x59, 0x5F, 0x6B, + 0x6E, 0x38, 0x2A, 0xD1, 0x42, 0xD9, 0xF1, 0xB8, + 0x68, 0x97, 0x95, 0xE9, 0xEB, 0xC3, 0x2A, 0x5A, + 0x10, 0x1E, 0x69, 0x6C, 0xA3, 0x4A, 0xBA, 0x00, + 0x5B, 0x4C, 0xED, 0xA2, 0x7D, 0x12, 0x00, 0xFE, + 0x48, 0xFD, 0x82, 0xC1, 0x72, 0x17, 0xE5, 0x08, + 0xA8, 0x48, 0x4F, 0x03, 0x88, 0x34, 0x5C, 0x9D, + 0xED, 0xE2, 0xA1, 0x39, 0x28, 0xFA, 0xC3, 0x29, + 0x21, 0x84, 0x2F, 0x6E, 0x6A, 0xA5, 0xCF, 0xBF, + 0x57, 0xFA, 0xA2, 0x8F, 0x43, 0xE0, 0x5E, 0x9A, + 0x45, 0x23, 0x12, 0x50, 0x29, 0x11, 0xEF, 0x9C, + 0x33, 0xC8, 0x11, 0xEB, 0xE7, 0xCA, 0xD7, 0x30, + 0x62, 0x3D, 0xB7, 0x04, 0x8E, 0xC2, 0x18, 0xC7, + 0xEA, 0x9D, 0xFC, 0x6E, 0x19, 0x65, 0xA9, 0x85, + 0x7E, 0x92, 0x94, 0xC4, 0xE4, 0x7F, 0x4D, 0x96, + 0x23, 0xCB, 0x74, 0xB6, 0x5F, 0x7B, 0xB5, 0x86, + 0x22, 0x83, 0x8D, 0xC4, 0x4E, 0x16, 0xD9, 0x15, + 0xD9, 0x59, 0x65, 0x55, 0xCA, 0x3D, 0x26, 0x1C, + 0x9C, 0x2A, 0xFC, 0xCB, 0xAF, 0x5A, 0xC0, 0x3D, + 0xE0, 0x91, 0xF0, 0xDB, 0xEA, 0xE1, 0xB4, 0xA7, + 0xE3, 0xDE, 0xC4, 0x39, 0x09, 0x89, 0x67, 0x65, + 0x77, 0xA0, 0x53, 0x68, 0x4F, 0x57, 0x86, 0x8D, + 0x91, 0xFE, 0x6A, 0x5B, 0x7D, 0x3D, 0x7C, 0x79, + 0x50, 0x78, 0x9E, 0x89, 0xD8, 0x38, 0x83, 0xBC, + 0x3D, 0xAE, 0x55, 0xCA, 0x30, 0x78, 0xB0, 0x8D, + 0x99, 0x18, 0x31, 0xBA, 0x91, 0x50, 0x2A, 0x5A, + 0x33, 0x54, 0xB8, 0x8E, 0x15, 0x9B, 0x0A, 0xFF, + 0xD2, 0x5B, 0x0D, 0xBB, 0x72, 0xBC, 0xD6, 0xF4, + 0x04, 0x65, 0xDD, 0xFC, 0x00, 0xFF, 0x8B, 0x63, + 0x39, 0xC0, 0x67, 0x09, 0x5D, 0x6C, 0x7C, 0xB0, + 0x6F, 0x3B, 0xE7, 0x59, 0xC5, 0x27, 0x40, 0x39, + 0x5D, 0xD1, 0x08, 0x29, 0x6F, 0x2B, 0xBC, 0x2E, + 0x7A, 0x5D, 0xDD, 0xE3, 0xD1, 0xC3, 0x5D, 0x18, + 0xBF, 0xBE, 0x39, 0x68, 0xEC, 0x59, 0xAB, 0xF8, + 0x5C, 0x1B, 0xD2, 0x92, 0x8A, 0xB2, 0xAA, 0x67, + 0x8A, 0x78, 0x91, 0x74, 0x6E, 0x88, 0xF4, 0x39, + 0xF8, 0xB4, 0x38, 0x40, 0x31, 0xC3, 0xED, 0xB7, + 0x31, 0x97, 0xE5, 0x2A, 0x4E, 0x77, 0x3D, 0x2D, + 0x8B, 0x7B, 0xAD, 0xDC, 0x5D, 0xD0, 0xA7, 0xE4, + 0x4C, 0x80, 0x8D, 0x73, 0xB8, 0x18, 0x1D, 0x19, + 0x1C, 0x3C, 0x89, 0xFE, 0x15, 0xEA, 0x90, 0xD7, + 0x56, 0x7E, 0x89, 0x16, 0xA3, 0x37, 0x83, 0x03, + 0x05, 0x04, 0x1B, 0x1E, 0x94, 0xB3, 0xB4, 0x06, + 0xDA, 0x4C, 0x36, 0xBE, 0xF0, 0x5D, 0x91, 0x00, + 0xAB, 0x99, 0x2A, 0x4D, 0x56, 0x25, 0x33, 0x73, + 0x0E, 0x0D, 0x8C, 0x05, 0x2B, 0x3A, 0x62, 0xD3, + 0xF6, 0x9A, 0x83, 0xA0, 0xC9, 0xB2, 0x12, 0x4F, + 0x12, 0xAE, 0x7D, 0xAC, 0xC9, 0x78, 0xC4, 0xA0, + 0xAD, 0xCC, 0x2E, 0xBA, 0x2D, 0x80, 0xF4, 0x94, + 0xAA, 0x16, 0xEC, 0x1E, 0x8E, 0x71, 0xC7, 0x9B, + 0x02, 0xF3, 0x26, 0x1B, 0x6F, 0x98, 0x68, 0xB8, + 0xD5, 0x7E, 0x9D, 0x16, 0xF4, 0x2B, 0x7C, 0xC6, + 0x64, 0x06, 0x54, 0x9A, 0x27, 0x6D, 0x37, 0x14, + 0x37, 0xDE, 0x88, 0xB7, 0xF3, 0x9E, 0x74, 0x08, + 0x7C, 0xBB, 0xC5, 0x61, 0x16, 0x80, 0x31, 0x2D, + 0xE8, 0xF0, 0xC3, 0x68, 0x14, 0xE1, 0x74, 0xF9, + 0x1E, 0xB6, 0x00, 0xCC, 0x96, 0xE3, 0xCF, 0x51, + 0xBB, 0x20, 0x25, 0x88, 0x77, 0xA2, 0xAA, 0xEB, + 0x82, 0x7F, 0x7F, 0x5A, 0xDA, 0x80, 0x78, 0x6B, + 0x50, 0x84, 0xC8, 0x02, 0xE6, 0x06, 0xDE, 0xF3, + 0x88, 0xA3, 0x9C, 0xE4, 0xF0, 0xD5, 0xBC, 0x19, + 0x39, 0x4C, 0xE8, 0x41, 0xE2, 0xD2, 0xAA, 0x74, + 0x25, 0x23, 0x05, 0x80, 0xFA, 0x66, 0x75, 0xC5, + 0x17, 0x41, 0xD1, 0x75, 0x87, 0x9B, 0x4D, 0x03, + 0xC3, 0x90, 0xF6, 0x52, 0xA5, 0x03, 0xA7, 0x51, + 0x6A, 0x1F, 0x07, 0x5E, 0x30, 0x82, 0xD5, 0x2C, + 0x60, 0xB8, 0x64, 0x2A, 0x82, 0x40, 0xEE, 0x94, + 0x4D, 0x5F, 0xB4, 0x27, 0x37, 0x6B, 0x40, 0xB0, + 0xB2, 0x82, 0xE1, 0x9A, 0xB9, 0x08, 0xCC, 0xF2, + 0x0C, 0xA9, 0x26, 0x11, 0x64, 0x90, 0xAF, 0xED, + 0x57, 0xEA, 0xD0, 0xDC, 0x0C, 0x8E, 0x29, 0x6C, + 0x79, 0xA4, 0x8D, 0x08, 0x8E, 0x83, 0x7A, 0xF0, + 0x67, 0xDC, 0x02, 0x9E, 0xC6, 0x31, 0xF9, 0x93, + 0x3E, 0xE4, 0xD2, 0x07, 0x46, 0xE6, 0x4E, 0x5F, + 0x21, 0x67, 0x55, 0xA1, 0x38, 0x97, 0x4D, 0x30, + 0x82, 0x93, 0x73, 0x6D, 0xC1, 0x86, 0x04, 0x27, + 0x6C, 0xC4, 0x18, 0xBA, 0x69, 0xF8, 0x72, 0xB5, + 0x8E, 0x7F, 0x6E, 0x3A, 0x8B, 0x84, 0x6E, 0xBA, + 0xAE, 0xB3, 0x83, 0xE7, 0xF8, 0x90, 0xF5, 0x4E, + 0x77, 0xF5, 0xD7, 0xF5, 0xD4, 0xA5, 0x8D, 0xB7, + 0x83, 0xEC, 0xA0, 0x49, 0xF1, 0x86, 0x17, 0x12, + 0x82, 0xBA, 0xC2, 0x60, 0x7D, 0x51, 0xB2, 0x98, + 0xB1, 0x49, 0x38, 0xEF, 0xB1, 0x92, 0x8F, 0xC8, + 0xD0, 0x78, 0x06, 0xE8, 0xC3, 0xE7, 0x3B, 0x46, + 0x46, 0xBC, 0xF1, 0x68, 0x90, 0xCC, 0x13, 0x80, + 0xE7, 0xB6, 0x33, 0x50, 0x2B, 0x3E, 0xAD, 0xA4, + 0x47, 0x75, 0x02, 0xE2, 0x46, 0x7C, 0xFD, 0xB9, + 0xAC, 0xBD, 0x1C, 0x72, 0xBC, 0x6A, 0xEB, 0x4F, + 0x41, 0xE1, 0xC2, 0x3C, 0x63, 0x68, 0x39, 0xE3, + 0x57, 0x13, 0x5F, 0x76, 0xBC, 0x39, 0xC4, 0xF9, + 0xAC, 0x1C, 0xE8, 0xF1, 0xBE, 0xEF, 0xEB, 0xFF, + 0x87, 0x59, 0xE8, 0xF7, 0x19, 0x65, 0xD4, 0x85, + 0x4B, 0xEA, 0xAD, 0x0A, 0xFE, 0xDC, 0xA9, 0xD4, + 0xD6, 0xBD, 0x1E, 0x63, 0xD3, 0x48, 0xA4, 0x2C, + 0xEE, 0xFF, 0xC1, 0x70, 0xD0, 0xEE, 0x9F, 0x13, + 0x6F, 0x5B, 0xE9, 0x90, 0x14, 0x66, 0x92, 0x61, + 0x22, 0xF9, 0x48, 0xBD, 0xDE, 0x2A, 0x91, 0x07, + 0xD2, 0xA9, 0x8B, 0xA2, 0xDE, 0xA6, 0xD6, 0xF2, + 0xDA, 0x17, 0x72, 0x47, 0x02, 0xEC, 0x51, 0x8C, + 0x03, 0x75, 0x3D, 0x51, 0xEA, 0x83, 0x1E, 0x95, + 0xCB, 0x87, 0x08, 0xD5, 0xDE, 0xC8, 0x22, 0xDB, + 0x73, 0x7E, 0x44, 0x14, 0x3C, 0x86, 0xF4, 0x71, + 0x77, 0xD8, 0x5C, 0xD0, 0x98, 0xC2, 0x1B, 0x9B, + 0xC8, 0x00, 0xDF, 0xA9, 0xDC, 0x26, 0xFD, 0xC2, + 0x61, 0xE9, 0x21, 0xDE, 0x00, 0x2D, 0x81, 0xC1, + 0x59, 0xF8, 0xEB, 0x1F, 0xEE, 0x67, 0x67, 0x9D, + 0x62, 0x1E, 0xCE, 0x6B, 0x36, 0xD0, 0x1C, 0x77, + 0x5A, 0x16, 0x45, 0xD5, 0x22, 0x92, 0xB4, 0xB2, + 0xB8, 0x22, 0x73, 0x18, 0x77, 0x2A, 0x80, 0x91, + 0xE9, 0xEC, 0x01, 0x70, 0x13, 0xB1, 0x95, 0xEB, + 0xF4, 0xEF, 0x20, 0x1F, 0x4E, 0x88, 0x1C, 0x49, + 0x36, 0x33, 0xC0, 0x7F, 0x27, 0xC9, 0x79, 0x0D, + 0xD8, 0xAE, 0xCC, 0x94, 0x49, 0xCF, 0x63, 0xBC, + 0xB1, 0x19, 0x46, 0x16, 0x9A, 0xCF, 0xF3, 0x95, + 0x42, 0x26, 0x6B, 0x0C, 0x66, 0x85, 0xBB, 0xB0, + 0x80, 0xB5, 0x9F, 0x11, 0x7E, 0xEB, 0x2A, 0x73, + 0x38, 0x2B, 0x3D, 0x18, 0x7C, 0x06, 0x80, 0xC5, + 0xAE, 0x70, 0x90, 0x70, 0xDF, 0x03, 0xA0, 0x08, + 0xA7, 0xAD, 0x13, 0x22, 0x6F, 0x3C, 0x37, 0x15, + 0x39, 0x20, 0x52, 0xF2, 0x44, 0x1B, 0x4A, 0x17, + 0x8D, 0x7C, 0xF7, 0x05, 0x18, 0x33, 0x9C, 0xFF, + 0xBB, 0x54, 0xA6, 0xD9, 0xB9, 0xCD, 0xE3, 0xB0, + 0xB5, 0x7D, 0xBC, 0x79, 0xF4, 0xE4, 0x7A, 0xD6, + 0x27, 0x4C, 0xE2, 0x18, 0x0C, 0x92, 0xAC, 0x64, + 0x10, 0xE5, 0x0D, 0x05, 0xF6, 0x66, 0x5A, 0x57, + 0xD4, 0xD4, 0x47, 0x6C, 0x2C, 0x0E, 0x6E, 0xE0, + 0x75, 0x7A, 0x3A, 0xFE, 0xA2, 0xB1, 0xBF, 0x86, + 0xA5, 0x51, 0xEF, 0x98, 0xAA, 0x1D, 0xFC, 0xBA, + 0x96, 0x31, 0x59, 0x59, 0x45, 0x2B, 0x2B, 0x3A, + 0x2F, 0xCB, 0xBB, 0x95, 0x5C, 0xB3, 0xFA, 0x1E, + 0xEB, 0xBB, 0x83, 0xBD, 0x17, 0x87, 0x67, 0xC0, + 0x2E, 0xFB, 0xBE, 0xFF, 0x6C, 0x7E, 0xEF, 0x94, + 0xB5, 0x5D, 0xF8, 0x83, 0x1D, 0xDF, 0xB7, 0xB2, + 0x02, 0xCE, 0x7D, 0xE0, 0x55, 0xEA, 0xF9, 0x92, + 0x8A, 0xDA, 0xF6, 0xED, 0x0E, 0x31, 0x59, 0xCA, + 0x56, 0xC4, 0x83, 0xFA, 0x3B, 0xA3, 0xD2, 0x47, + 0x8C, 0xA3, 0x94, 0x82, 0x4C, 0xEE, 0x6A, 0xBD, + 0x59, 0x67, 0x09, 0x53, 0xEE, 0x80, 0xD3, 0x83, + 0xAA, 0xA6, 0x08, 0xE1, 0x58, 0x51, 0x13, 0x5C, + 0x1C, 0xDE, 0xEE, 0xB5, 0xF6, 0xA8, 0x89, 0x7C, + 0x3C, 0x9E, 0x06, 0x6A, 0xB4, 0x73, 0x4F, 0xDD, + 0xFA, 0xBC, 0x3B, 0xC3, 0xBA, 0x12, 0x06, 0xBA, + 0x54, 0x34, 0xDC, 0xDE, 0xDB, 0x9D, 0x8B, 0x3A, + 0x81, 0xA2, 0xE6, 0x38, 0x14, 0x6D, 0x83, 0xF1, + 0x4F, 0x06, 0xE5, 0x60, 0x99, 0xC0, 0xC8, 0xA0, + 0xFC, 0xCD, 0xB9, 0xEC, 0xF0, 0xF3, 0xD8, 0x8D, + 0xE3, 0x79, 0x2F, 0x2D, 0x0B, 0x65, 0x1B, 0x61, + 0x9C, 0x57, 0x1B, 0x69, 0xF4, 0xBF, 0x8E, 0x7C, + 0xD1, 0x91, 0x0F, 0x26, 0x6A, 0x4D, 0xAD, 0xF8, + 0xC2, 0xAB, 0xB4, 0xAC, 0x05, 0xBD, 0x1F, 0xBA, + 0x05, 0x8C, 0x03, 0x94, 0xC0, 0x16, 0xDE, 0xE6, + 0x0C, 0x66, 0x40, 0x1A, 0x17, 0xD1, 0x34, 0x59, + 0x54, 0x79, 0x33, 0x38, 0x9A, 0x35, 0x65, 0x69, + 0xAD, 0xA5, 0x32, 0xC9, 0xF4, 0x87, 0x69, 0x88, + 0x55, 0xA4, 0xD7, 0xBC, 0xCD, 0x0E, 0xF6, 0x95, + 0x31, 0x09, 0x4D, 0xA4, 0x08, 0x6F, 0x52, 0xBF, + 0x98, 0xCD, 0xC9, 0xA4, 0xB0, 0xBC, 0x88, 0x8D, + 0xC3, 0x89, 0x1A, 0x76, 0x09, 0x6C, 0x7C, 0x48, + 0x34, 0x90, 0xE9, 0x52, 0x32, 0x6A, 0xE4, 0x02, + 0xD8, 0xDF, 0xD2, 0xF3, 0xDC, 0xCF, 0x1A, 0xA5, + 0xD7, 0xBD, 0x69, 0x8E, 0x2A, 0xA8, 0x8D, 0x29, + 0x48, 0x13, 0xA8, 0x8F, 0xD3, 0x18, 0x66, 0xBC, + 0xA1, 0x1B, 0x3B, 0x91, 0xC0, 0x09, 0xEE, 0xB6, + 0x67, 0x60, 0x1C, 0xEE, 0xAF, 0xAF, 0xE9, 0x7C, + 0x56, 0xFA, 0x33, 0xF9, 0x38, 0x1F, 0x3E, 0x43, + 0x29, 0x90, 0x1A, 0xC3, 0xB7, 0xEA, 0x70, 0x32, + 0xC0, 0x19, 0xE5, 0xC8, 0xA8, 0xEF, 0xD7, 0x04, + 0x4C, 0x97, 0x36, 0x44, 0xAF, 0x2B, 0xE4, 0x20, + 0xA0, 0x33, 0xC6, 0xC2, 0xC7, 0xCE, 0x0C, 0xEA, + 0x39, 0x34, 0xDC, 0x18, 0xB4, 0x2A, 0xDF, 0xD7, + 0xA8, 0x46, 0xF4, 0x2D, 0xD4, 0x06, 0x86, 0x6A, + 0x39, 0x09, 0x29, 0x02, 0x6A, 0xDE, 0x5C, 0x79, + 0x1B, 0x5F, 0x61, 0xF9, 0x42, 0xB1, 0x55, 0x07, + 0x7D, 0x82, 0xF2, 0xAF, 0xCC, 0xFF, 0xF8, 0x5B, + 0x04, 0x06, 0x64, 0x7A, 0x96, 0x27, 0xE3, 0x69, + 0x5D, 0x4B, 0xEA, 0x3D, 0x58, 0xA6, 0x3E, 0x17, + 0x18, 0xD1, 0x84, 0xE4, 0x6B, 0x5F, 0x4B, 0xC8, + 0x41, 0x03, 0x34, 0xA4, 0x09, 0x5D, 0x0F, 0xAF, + 0x30, 0x6F, 0xB9, 0xDC, 0x10, 0x94, 0x25, 0xC3, + 0x16, 0x52, 0xD0, 0x6F, 0xF0, 0x51, 0xA1, 0x62, + 0xEE, 0x2B, 0x7B, 0x1C, 0x54, 0xD6, 0xC7, 0xDE, + 0xD6, 0xE3, 0x95, 0xAA, 0xD1, 0xA8, 0x6D, 0x03, + 0xB1, 0xB6, 0xC8, 0x00, 0x76, 0x7E, 0xC1, 0x44, + 0x12, 0xEE, 0xCE, 0x13, 0x46, 0x20, 0xA6, 0x1D, + 0x36, 0x9A, 0xF4, 0x9E, 0x21, 0xB0, 0xD1, 0x4B, + 0xC4, 0x23, 0x06, 0x49, 0xCD, 0xD3, 0xE9, 0xFD, + 0x84, 0x7A, 0xE5, 0x0B, 0xE9, 0x62, 0xEF, 0xC8, + 0xCB, 0x0F, 0x33, 0x9F, 0x9E, 0x6D, 0x32, 0x47, + 0x53, 0x3B, 0xDE, 0xD8, 0x71, 0x1D, 0x46, 0x1D, + 0x4A, 0xF2, 0xAE, 0x3F, 0xDD, 0x1D, 0x7D, 0x2A, + 0x28, 0x9C, 0x78, 0xCB, 0x19, 0xF3, 0xCD, 0xC2, + 0x14, 0x2B, 0xF5, 0x2B, 0x23, 0xE6, 0xA2, 0x7B, + 0x39, 0xD6, 0x99, 0x54, 0x3C, 0x3D, 0x63, 0x9B, + 0x9C, 0x72, 0xCA, 0x80, 0xB3, 0x7E, 0xA2, 0x77, + 0x5B, 0x5E, 0x26, 0x81, 0xF0, 0xDD, 0x01, 0xDF, + 0xF0, 0xC0, 0x55, 0x13, 0x36, 0x90, 0x62, 0xFE + }; + static const byte msg_87[] = { + 0x9E, 0xFF, 0x34, 0x15, 0x06, 0xD1, 0x8B, 0xCB, + 0x27, 0xA7, 0xFC, 0x4E, 0xAA, 0xBF, 0x5A, 0x7C, + 0x4A, 0x59, 0x37, 0x77, 0x19, 0x6F, 0x66, 0x4B, + 0xCE, 0x31, 0x6C, 0x95, 0x5B, 0x83, 0x5A, 0xD4, + 0xC9, 0xF5, 0xDE, 0x9A, 0x2B, 0xF8, 0x96, 0x15, + 0xDA, 0xCB, 0x9C, 0x1E, 0x61, 0x8C, 0x78, 0xE7, + 0x11, 0x44, 0xCD, 0x4B, 0x70, 0x46, 0xF4, 0x7D, + 0x9A, 0x60, 0x0E, 0x9C, 0xE6, 0x65, 0x96, 0xC4, + 0xC5, 0x5E, 0xDA, 0x23, 0xA6, 0x6C, 0xC1, 0x18, + 0xA4, 0xA7, 0xBD, 0x0D, 0xED, 0x00, 0xAB, 0xDD, + 0xCE, 0x53, 0xFB, 0xF2, 0x48, 0x20, 0x33, 0xA4, + 0x18, 0x85, 0x06, 0xEC, 0x11, 0x3B, 0xBD, 0x98, + 0xD9, 0x89, 0x1F, 0x0D, 0x69, 0x46, 0x3A, 0x0D, + 0x36, 0x15, 0x6B, 0xA3, 0xEA, 0x0D, 0x02, 0xA1, + 0x4C, 0x1F, 0xD7, 0xA3, 0xFE, 0x70, 0x4E, 0xE5, + 0x6B, 0x44, 0x6A, 0xE1, 0x79, 0xF7, 0x2E, 0x10, + 0x4A, 0xA8, 0x1A, 0xF0, 0xA2, 0xF8, 0xFC, 0xA6, + 0xF6, 0xF9, 0x62, 0x96, 0x05, 0x9E, 0xE8, 0x82, + 0x66, 0x80, 0xE4, 0x3F, 0x4B, 0x07, 0x40, 0xF4, + 0x7A, 0xC1, 0x05, 0x66, 0xED, 0x31, 0x07, 0x99, + 0xAC, 0x71, 0x41, 0xD3, 0x8F, 0x69, 0x21, 0x31, + 0x5F, 0x23, 0xAB, 0x3E, 0x64, 0xC8, 0xA7, 0x70, + 0xAA, 0x57, 0x12, 0x80, 0x90, 0xDB, 0x82, 0x8C, + 0x7B, 0xAA, 0x59, 0xC3, 0x29, 0x5C, 0xCA, 0xA2, + 0x38, 0xC7, 0x5F, 0xAC, 0x0F, 0x93, 0xDA, 0x79, + 0x00, 0x74, 0x1B, 0xCD, 0x94, 0xBB, 0x9F, 0xD3, + 0x85, 0x2E, 0xC2, 0xB7, 0xD3, 0x3F, 0x60, 0x0B, + 0x1D, 0x51, 0x66, 0x6A, 0xE2, 0x22, 0xA5, 0x7A, + 0xF1, 0x40, 0xFA, 0x04, 0x9C, 0x2C, 0x9F, 0x6D, + 0x0F, 0xE6, 0xC0, 0xF1, 0xE7, 0xA0, 0xDD, 0xE1, + 0x14, 0x3B, 0xE5, 0xCE, 0xD7, 0xBB, 0xE2, 0x32, + 0xCB, 0xFB, 0xD8, 0xAE, 0x00, 0xEA, 0x5F, 0xC1, + 0x65, 0x02, 0x6D, 0x72, 0x9D, 0xB3, 0x0F, 0x6A, + 0xFD, 0x99, 0x73, 0xB6, 0x72, 0x2C, 0x07, 0xF6, + 0x00, 0x66, 0x54, 0x41, 0xE3, 0x0B, 0x7C, 0x5F, + 0xB2, 0x97, 0xB8, 0xAB, 0x96, 0x9C, 0x06, 0x83, + 0x9D, 0x33, 0x1D, 0xEE, 0x96, 0xDE, 0x48, 0x68, + 0x7D, 0xC9, 0xDA, 0x53, 0x1A, 0x95, 0xCA, 0x83, + 0xA7, 0x6F, 0x4B, 0x07, 0x6D, 0xFC, 0xF4, 0x83, + 0xF0, 0x04, 0x50, 0xE5, 0x1C, 0x8D, 0x34, 0xD8, + 0xED, 0x8E, 0x4B, 0x3D, 0xAF, 0xAE, 0x66, 0x4B, + 0x6D, 0xC1, 0x3E, 0xD8, 0x8E, 0x6D, 0x63, 0x02, + 0x7D, 0xD4, 0x38, 0xCB, 0x74, 0xF4, 0x12, 0xE8, + 0x70, 0xCC, 0x9D, 0xFD, 0x29, 0xB5, 0x2A, 0xBC, + 0xA1, 0x69, 0xC1, 0x7E, 0x97, 0x47, 0x58, 0xE0, + 0x3A, 0xC0, 0xFB, 0x7F, 0xE5, 0x64, 0x50, 0x8E, + 0x01, 0x7A, 0x9B, 0x47, 0x49, 0xD6, 0x41, 0xAF, + 0x0D, 0xE3, 0x84, 0x08, 0x8F, 0xA0, 0x0C, 0x69, + 0x40, 0x23, 0x3D, 0xDE, 0xFB, 0x65, 0x7C, 0x18, + 0x1C, 0x82, 0xA1, 0xB6, 0xA3, 0x1F, 0xCC, 0xF4, + 0xD5, 0x2C, 0x9D, 0x35, 0x1E, 0x6B, 0xDF, 0xDF, + 0x48, 0xBC, 0xE4, 0x14, 0x60, 0x74, 0x62, 0xDB, + 0x76, 0x9F, 0x9E, 0xB1, 0x59, 0x25, 0xBA, 0x9F, + 0xAF, 0xBA, 0xB2, 0x29, 0xB5, 0x89, 0x6B, 0xF1, + 0xF8, 0xE4, 0x7D, 0xF1, 0x7C, 0x82, 0x08, 0xDF, + 0xD5, 0x96, 0x04, 0xB6, 0x05, 0x2C, 0xD2, 0xCE, + 0xAB, 0x56, 0x40, 0x0F, 0x11, 0xC4, 0xD9, 0x52, + 0x1E, 0x1A, 0xB8, 0x27, 0x4A, 0xB5, 0x76, 0x4C, + 0x73, 0xE9, 0x41, 0x32, 0x42, 0x0E, 0x32, 0xB6, + 0xAE, 0xB0, 0x76, 0x33, 0x78, 0xD9, 0xBA, 0x68, + 0xE1, 0xFC, 0xDE, 0x2B, 0xD6, 0xDE, 0xDA, 0x39, + 0x17, 0xC0, 0x00, 0xAF, 0x39, 0xB7, 0x8F, 0x4C, + 0xCA, 0x7C, 0x8F, 0xBF, 0x94, 0xB4, 0xCB, 0x8A, + 0x81, 0x16, 0xEE, 0xEC, 0xFE, 0xF0, 0x13, 0x1E, + 0xC9, 0xF2, 0xDE, 0xDA, 0x01, 0x40, 0xC9, 0x02, + 0xA8, 0xD6, 0xE6, 0x0E, 0x98, 0xB3, 0xCD, 0x9D, + 0x9C, 0x75, 0x24, 0x8B, 0xF8, 0x84, 0x5A, 0xC0, + 0xD7, 0xE0, 0x6B, 0xA0, 0xE1, 0x83, 0x10, 0xFE, + 0xCE, 0x98, 0x62, 0x07, 0x54, 0x2C, 0xC1, 0xEE, + 0x08, 0x88, 0x43, 0xEF, 0x74, 0xA2, 0x6A, 0xEC, + 0xB6, 0xD0, 0x6F, 0x0F, 0xEF, 0xE1, 0xB7, 0x2C, + 0xF9, 0x33, 0x06, 0xC3, 0x2E, 0xD2, 0x8A, 0xEC, + 0xC5, 0x5B, 0xB1, 0x03, 0xA0, 0x84, 0x6D, 0x0C, + 0x84, 0x13, 0x6D, 0xB0, 0xB0, 0x54, 0xF3, 0xDE, + 0xA3, 0x9A, 0x72, 0x6C, 0x6F, 0xD6, 0x59, 0x7F, + 0x9B, 0x03, 0x8C, 0xC2, 0x38, 0x46, 0x01, 0x76, + 0x38, 0xF4, 0x43, 0x68, 0x81, 0x0D, 0x86, 0x29, + 0x3D, 0xDF, 0xE5, 0x48, 0x61, 0x53, 0x2F, 0x85, + 0xF5, 0x3F, 0x09, 0x30, 0x48, 0xC3, 0xE0, 0x09, + 0xC4, 0x32, 0x11, 0x27, 0xAD, 0xAA, 0xEC, 0x6A, + 0x5C, 0xCE, 0x03, 0xE0, 0xD9, 0xE9, 0x1D, 0xAC, + 0xCA, 0xBB, 0x2F, 0x50, 0xE0, 0x1E, 0xB2, 0xAC, + 0x2B, 0x39, 0x6D, 0x24, 0xB0, 0x5D, 0x45, 0x3B, + 0xD5, 0x1D, 0x52, 0x9F, 0xBA, 0x51, 0xE4, 0x6D, + 0x30, 0xC5, 0x66, 0x13, 0x00, 0x5A, 0xBF, 0x62, + 0x63, 0xB9, 0x8D, 0x8D, 0xFE, 0xB5, 0x26, 0x16, + 0xD1, 0xCB, 0x78, 0x92, 0x18, 0x1C, 0x2F, 0xC2, + 0xE2, 0x04, 0x3B, 0x99, 0x4C, 0x81, 0x66, 0x58, + 0x48, 0x2E, 0x06, 0x06, 0x34, 0x83, 0x78, 0xA3, + 0xCC, 0x85, 0x40, 0xE0, 0x20, 0x27, 0x3F, 0x10, + 0xB6, 0x9E, 0x20, 0x21, 0xA9, 0x2D, 0x9C, 0x36, + 0xCC, 0x9B, 0x97, 0x79, 0xFE, 0x8C, 0xE7, 0xA4, + 0x99, 0xAE, 0xB5, 0x3E, 0xC6, 0xDD, 0xB4, 0xF2, + 0xEC, 0x22, 0xBF, 0xB4, 0x52, 0xFC, 0x5E, 0x79, + 0x7D, 0x3A, 0x25, 0x33, 0x26, 0x00, 0x06, 0xFE, + 0x6D, 0xCC, 0xE4, 0xE9, 0x76, 0x65, 0xC6, 0x8C, + 0x39, 0x93, 0xDC, 0x7E, 0xA0, 0xBD, 0x4B, 0xDC, + 0xD2, 0x47, 0x21, 0xB0, 0x2B, 0x09, 0x02, 0xB1, + 0x84, 0x0D, 0xDE, 0xC5, 0x18, 0x20, 0x38, 0x76, + 0x2D, 0x55, 0xFC, 0x11, 0xB9, 0x87, 0x3A, 0x0D, + 0xD2, 0xEB, 0xBD, 0x55, 0xAD, 0xE3, 0x86, 0x5C, + 0xFF, 0x3D, 0x54, 0x5F, 0x76, 0x33, 0x53, 0x69, + 0xDD, 0x9E, 0x70, 0xB0, 0x73, 0x99, 0x77, 0xF6, + 0xE9, 0x8A, 0x61, 0x27, 0x19, 0x4A, 0x19, 0x26, + 0xA6, 0x97, 0xE4, 0x7F, 0x73, 0xE0, 0x4F, 0xF5, + 0xBD, 0x52, 0x5E, 0x8F, 0x17, 0x22, 0x00, 0x8F, + 0x7C, 0x15, 0x5C, 0xD3, 0xAD, 0xE0, 0xA5, 0xB6, + 0x6A, 0x31, 0x36, 0xFD, 0xD8, 0x44, 0xAE, 0x5E, + 0xCD, 0x6C, 0x82, 0x77, 0xC3, 0xD0, 0x7F, 0x39, + 0x72, 0x1E, 0x91, 0x19, 0x50, 0xE1, 0x28, 0x20, + 0x88, 0x3A, 0x6B, 0xC8, 0xA9, 0xE7, 0x93, 0x28, + 0x0F, 0xA7, 0x4F, 0xF2, 0x1A, 0xC2, 0x13, 0x4E, + 0x6B, 0xAE, 0x71, 0x3F, 0x43, 0x89, 0xC9, 0xE7, + 0xDD, 0x05, 0xBB, 0x41, 0x09, 0xB5, 0x5E, 0xB9, + 0x23, 0x51, 0xC0, 0xEB, 0x92, 0x1A, 0x0C, 0x3F, + 0xAC, 0xC5, 0x00, 0x8C, 0xB8, 0x5C, 0x3F, 0x2D, + 0x5F, 0x9A, 0xCE, 0xAE, 0x9B, 0x4B, 0x71, 0x48, + 0x25, 0xFD, 0xE2, 0xB6, 0x26, 0x3F, 0xEE, 0x10, + 0x33, 0x07, 0x4F, 0x59, 0xF0, 0x73, 0xE9, 0x39, + 0x5C, 0x0D, 0x8B, 0xB5, 0xD1, 0xEF, 0xE5, 0xBF, + 0xBB, 0xE1, 0x80, 0xF7, 0xC5, 0x91, 0xC1, 0x72, + 0xAA, 0xB0, 0x5E, 0x7C, 0x53, 0x69, 0x4C, 0x37, + 0x7A, 0xD2, 0x7B, 0x9D, 0x1C, 0xFA, 0x0F, 0xE0, + 0x92, 0x93, 0x40, 0x5D, 0xBE, 0x1C, 0xF8, 0x84, + 0x7A, 0x35, 0x1F, 0x72, 0x77, 0x68, 0xE2, 0xAF, + 0xA5, 0x6B, 0x54, 0xFF, 0x53, 0x7C, 0xCD, 0x9D, + 0x6A, 0x49, 0xD1, 0xCA, 0x74, 0x5F, 0xF5, 0xDB, + 0x54, 0xF8, 0x60, 0xA7, 0x41, 0x66, 0xDE, 0xFF, + 0xB0, 0xB2, 0xF9, 0x21, 0x06, 0xB7, 0x81, 0x4C, + 0x9C, 0xEF, 0xFD, 0x11, 0xD5, 0x63, 0xD8, 0xF3, + 0x3A, 0x81, 0xC4, 0x9D, 0x1B, 0xA8, 0x37, 0x73, + 0x57, 0x26, 0x29, 0xF8, 0xB4, 0x7F, 0x9F, 0xA2, + 0x7D, 0x2A, 0x63, 0x2C, 0x70, 0x08, 0x1E, 0x2E, + 0xE7, 0xED, 0x73, 0xAB, 0xD2, 0x4C, 0x02, 0x7E, + 0xF1, 0x15, 0x26, 0xE1, 0x09, 0x5C, 0x29, 0x13, + 0xDF, 0x69, 0x29, 0x25, 0xE5, 0x68, 0x39, 0x10, + 0x9B, 0xD0, 0x5E, 0xD8, 0xE2, 0xC9, 0x08, 0x61, + 0x63, 0xCD, 0xF9, 0x45, 0xBC, 0x16, 0xDC, 0x80, + 0x4C, 0x0F, 0x61, 0xEE, 0x8F, 0x3B, 0x72, 0xDB, + 0x02, 0x45, 0xF6, 0x78, 0x69, 0x81, 0xFC, 0xE0, + 0x32, 0x2F, 0xC2, 0xAF, 0xCD, 0x4E, 0x8E, 0x52, + 0x03, 0xB5, 0x1C, 0x7C, 0x37, 0x2C, 0x58, 0xD5, + 0xE2, 0x92, 0xA7, 0xE2, 0x49, 0x6C, 0x3F, 0x5D, + 0x7F, 0x2B, 0x26, 0x70, 0x1C, 0x0C, 0x16, 0x7F, + 0x49, 0x30, 0x71, 0x14, 0xEB, 0xBE, 0x13, 0xF4, + 0xF1, 0xAA, 0x5A, 0xCF, 0x98, 0xF2, 0x07, 0x29, + 0xB5, 0x12, 0x84, 0x80, 0x01, 0x46, 0x11, 0xA4, + 0x44, 0xAE, 0x6D, 0xE0, 0x43, 0x7F, 0xFD, 0x5D, + 0x84, 0xB5, 0x6E, 0x3E, 0x55, 0x0D, 0xE8, 0x66, + 0x13, 0xA9, 0x28, 0x5A, 0x10, 0x84, 0x0B, 0xED, + 0x0B, 0x69, 0xF0, 0x19, 0x69, 0x9B, 0x34, 0xB8, + 0x6F, 0xC6, 0x22, 0xD3, 0x25, 0x26, 0x9D, 0x1A, + 0x04, 0x6B, 0x53, 0xA4, 0xDF, 0x12, 0x93, 0xA5, + 0x2C, 0xEE, 0x1C, 0x35, 0xFE, 0x81, 0x6B, 0x67, + 0x81, 0x92, 0x07, 0xE0, 0x9A, 0x02, 0xC9, 0xD8, + 0x59, 0x4D, 0x51, 0xE8, 0xB3, 0x14, 0x55, 0x2F, + 0xDE, 0x26, 0xDB, 0x7C, 0xEB, 0x8D, 0x80, 0x12, + 0x4A, 0x8A, 0x1C, 0x33, 0x74, 0x8E, 0x05, 0xC1, + 0xAF, 0xD6, 0xE8, 0x7B, 0x56, 0x7C, 0x41, 0xE0, + 0xE7, 0x3F, 0x32, 0x5F, 0x25, 0xDD, 0x2F, 0x48, + 0x21, 0x90, 0xC4, 0x04, 0x42, 0x1A, 0x3D, 0x6A, + 0x0E, 0x5D, 0x5C, 0xDB, 0xE2, 0xB0, 0x18, 0x8B, + 0xAC, 0x77, 0xC6, 0xE3, 0x5D, 0x77, 0xC0, 0xA3, + 0x2B, 0x1D, 0x96, 0x29, 0xF8, 0x8E, 0x70, 0xA7, + 0x65, 0xFE, 0xE3, 0x8C, 0x1A, 0xB2, 0x39, 0x75, + 0xB9, 0x45, 0xF2, 0x16, 0x1F, 0x6C, 0xFE, 0x7E, + 0x68, 0x2A, 0xED, 0x96, 0x84, 0x95, 0x47, 0x05, + 0x1D, 0xDE, 0xB7, 0x7B, 0x90, 0xF6, 0xAF, 0x00, + 0x74, 0x7C, 0x47, 0xE0, 0x2E, 0x80, 0xB6, 0x9A, + 0x0D, 0x4B, 0x78, 0xA4, 0x7D, 0xDD, 0x81, 0xE2, + 0x99, 0x27, 0x1F, 0xA7, 0x8F, 0xE4, 0x23, 0xAD, + 0xDF, 0x12, 0x0D, 0xD0, 0x4D, 0x46, 0xC1, 0x32, + 0xE9, 0x70, 0xF4, 0xA0, 0x4E, 0x97, 0xA5, 0x88, + 0xD2, 0x7C, 0x7B, 0xA8, 0x43, 0x26, 0x18, 0x2A, + 0xAE, 0x04, 0xC2, 0x51, 0x28, 0x99, 0x71, 0x69, + 0x1D, 0x96, 0x78, 0xD4, 0x09, 0x88, 0x16, 0x88, + 0xF3, 0xBC, 0xCB, 0x95, 0x08, 0x30, 0xE6, 0x5B, + 0x78, 0x48, 0x41, 0x00, 0x4E, 0x40, 0x44, 0x58, + 0xE6, 0x16, 0x59, 0x63, 0xCF, 0xB4, 0xEE, 0xB5, + 0x05, 0xFD, 0xD1, 0x35, 0xF3, 0x1E, 0xD0, 0x14, + 0x7C, 0xC9, 0xE9, 0x87, 0x7F, 0xFF, 0x41, 0x07, + 0x68, 0x91, 0x06, 0x17, 0x4E, 0x76, 0x66, 0xEE, + 0xCB, 0x6C, 0xF2, 0xDA, 0x9C, 0x93, 0x51, 0xDC, + 0x43, 0x4A, 0x94, 0x49, 0x38, 0x4E, 0xED, 0x7F, + 0x5F, 0x90, 0x77, 0xB4, 0x2F, 0x0F, 0xC5, 0xD9, + 0xF0, 0xF5, 0xF7, 0x21, 0x91, 0x32, 0xFF, 0x9A, + 0x47, 0x09, 0x83, 0xE1, 0x9D, 0x30, 0xA4, 0xF3, + 0x7D, 0x18, 0x97, 0x44, 0xD8, 0x32, 0xFD, 0x5F, + 0xB3, 0x97, 0x49, 0x4E, 0x11, 0xAD, 0xF7, 0x4F, + 0x4E, 0x90, 0x0A, 0x41, 0x87, 0xCF, 0xF5, 0xDA, + 0x8F, 0x6D, 0x7B, 0x35, 0xAE, 0xA0, 0x16, 0xA8, + 0xDE, 0x88, 0x62, 0x26, 0x5F, 0x13, 0x69, 0xFB, + 0x36, 0x7E, 0xF1, 0x86, 0x0C, 0x8E, 0x07, 0xC3, + 0x3F, 0x32, 0x82, 0xB4, 0xD9, 0x83, 0x7C, 0xDF, + 0x3E, 0xF6, 0x58, 0x42, 0x2D, 0x34, 0xDE, 0xA4, + 0x1E, 0x56, 0xDD, 0x18, 0x70, 0x36, 0x81, 0xD0, + 0x44, 0xE3, 0xC4, 0x03, 0xAF, 0x33, 0xD1, 0xE7, + 0xAF, 0xA9, 0x6A, 0x8C, 0x44, 0x35, 0xFE, 0xBB, + 0xA0, 0xD2, 0x5D, 0xE0, 0xE4, 0xAE, 0xDF, 0xFB, + 0x82, 0xA0, 0xBA, 0xDE, 0x76, 0xB6, 0x6C, 0xA9, + 0xBE, 0xC7, 0xE9, 0xD7, 0x3F, 0x1C, 0xB2, 0x9C, + 0xD7, 0x3C, 0xF0, 0x0C, 0x2F, 0x60, 0x44, 0xD8, + 0x34, 0x53, 0xCE, 0xDD, 0xE0, 0x3F, 0x97, 0x2E, + 0xBB, 0x03, 0x20, 0x62, 0xD0, 0xA8, 0x23, 0x9F, + 0xB6, 0x99, 0xEC, 0x89, 0x0D, 0x32, 0x0F, 0x6F, + 0xAF, 0x3D, 0x20, 0x7B, 0xDC, 0x9A, 0xFE, 0xA2, + 0x02, 0x8B, 0x86, 0x99, 0x56, 0x23, 0x43, 0xAA, + 0x50, 0xF7, 0x0A, 0x4E, 0x8C, 0x62, 0xDA, 0xF8, + 0xB8, 0xCC, 0xA7, 0x2D, 0x02, 0x47, 0x63, 0xBA, + 0xEC, 0x25, 0x00, 0x23, 0xEA, 0xE8, 0x25, 0xC6, + 0x51, 0xAC, 0xC4, 0xAA, 0xA0, 0xDB, 0x6C, 0x5E, + 0xC7, 0xEF, 0xD0, 0x71, 0xED, 0xFB, 0x95, 0xAF, + 0x61, 0x0B, 0x64, 0x01, 0x61, 0x4F, 0x4F, 0xC6, + 0x36, 0x27, 0x75, 0xC3, 0x81, 0x0A, 0x9A, 0x21, + 0x69, 0xF8, 0x4A, 0x21, 0x12, 0x3B, 0x03, 0x1C, + 0xCE, 0x08, 0x7D, 0x52, 0x0E, 0x99, 0xE2, 0x62, + 0xE8, 0x81, 0x2E, 0x84, 0x09, 0x8E, 0xBE, 0x9B, + 0xCE, 0xD6, 0xE6, 0xA4, 0xF7, 0x3B, 0x67, 0x45, + 0x41, 0xDE, 0x0B, 0xCF, 0x5E, 0x7E, 0x31, 0x8F, + 0x90, 0x6D, 0x90, 0x1F, 0xEB, 0x1D, 0x9D, 0x1C, + 0xCB, 0x6C, 0xFF, 0xE8, 0x50, 0xDB, 0xFF, 0x75, + 0xC8, 0xA8, 0x9F, 0x43, 0xCB, 0x94, 0x89, 0x5F, + 0x28, 0x69, 0x6F, 0xAB, 0xB6, 0xAD, 0xCE, 0xE7, + 0x69, 0x7E, 0x60, 0x09, 0x03, 0x87, 0x43, 0x6E, + 0x19, 0xB1, 0x38, 0x81, 0x9B, 0x90, 0xAE, 0xB1, + 0x8A, 0xC2, 0x7D, 0x2C, 0x65, 0x9B, 0x0D, 0xF1, + 0x77, 0x94, 0xA7, 0x2F, 0x8B, 0xB7, 0xCE, 0x03, + 0xEE, 0x9A, 0x78, 0xFE, 0x8C, 0x8A, 0x37, 0x45, + 0xD5, 0x05, 0xDE, 0xD8, 0x85, 0x00, 0xF4, 0xCF, + 0x98, 0xFB, 0x62, 0x85, 0xB0, 0xBD, 0x82, 0xE2, + 0x7D, 0xED, 0x93, 0x3B, 0xCC, 0x18, 0x73, 0xF8, + 0x8A, 0xBD, 0x82, 0x8F, 0x60, 0x47, 0xAC, 0xEC, + 0x47, 0x2D, 0xEA, 0xE8, 0x7D, 0x8A, 0xDE, 0x0A, + 0xD0, 0x73, 0x48, 0xFF, 0xAF, 0x59, 0xC1, 0x70, + 0x29, 0xD8, 0x45, 0x38, 0x77, 0x7F, 0x73, 0xBF, + 0xED, 0x5C, 0x63, 0x63, 0x0B, 0xC4, 0x43, 0xE0, + 0xFA, 0x12, 0xDE, 0x72, 0x2D, 0xAB, 0xBB, 0xC2, + 0x25, 0x0A, 0xBA, 0x3F, 0xD8, 0x61, 0x54, 0xEE, + 0x20, 0x8D, 0x53, 0xA3, 0x27, 0xA7, 0xFF, 0x26, + 0xA0, 0x17, 0x93, 0x39, 0x4D, 0x04, 0x15, 0x8B, + 0xB3, 0x20, 0x60, 0x04, 0x47, 0xE2, 0xFD, 0x7D, + 0x7C, 0x6D, 0xE0, 0x76, 0xA5, 0x13, 0xD6, 0x81, + 0x95, 0xB0, 0x67, 0x20, 0x4F, 0xF6, 0x00, 0x5B, + 0x16, 0x25, 0x54, 0x2B, 0x28, 0x37, 0x2F, 0x06, + 0x80, 0x60, 0x53, 0xAE, 0xE2, 0xEA, 0x9F, 0x88, + 0xAE, 0xA2, 0x9A, 0x27, 0x02, 0x15, 0x4B, 0xF4, + 0x43, 0xBC, 0x70, 0x7D, 0x0A, 0x96, 0xEB, 0x06, + 0xCE, 0x43, 0xEF, 0xE6, 0x6A, 0xAC, 0x1F, 0x16, + 0x95, 0xE2, 0x8C, 0xF1, 0x07, 0x19, 0x3D, 0x06, + 0x2E, 0x71, 0xB6, 0x3A, 0xFD, 0xCF, 0x9E, 0x05, + 0x0B, 0xBE, 0xD7, 0x48, 0x4E, 0xC5, 0xE8, 0x0C, + 0x51, 0x5A, 0xC8, 0x20, 0xF0, 0xCD, 0xF9, 0x65, + 0xDD, 0x97, 0xF7, 0xA1, 0x1B, 0x57, 0xB2, 0x1A, + 0x04, 0xBF, 0x42, 0xF2, 0xA3, 0x3D, 0x61, 0x97, + 0x64, 0xDF, 0xB3, 0x63, 0x11, 0xFD, 0xAD, 0x8C, + 0x83, 0xA7, 0x48, 0xBA, 0x34, 0x42, 0xC5, 0x70, + 0x64, 0x5A, 0x78, 0x5E, 0x67, 0x03, 0xE5, 0xBF, + 0x22, 0xE8, 0x46, 0xFC, 0x51, 0x6C, 0xB4, 0x99, + 0x15, 0xFD, 0x63, 0xB6, 0x3E, 0x5D, 0xBF, 0x56, + 0xF5, 0x5E, 0xA4, 0x01, 0x16, 0xD5, 0x03, 0x4B, + 0xBB, 0x94, 0x5F, 0x58, 0xD6, 0x76, 0x95, 0xC7, + 0x96, 0xF1, 0xC1, 0xD0, 0x53, 0xA3, 0xEB, 0x28, + 0xA9, 0x5E, 0x8F, 0x38, 0x8E, 0x80, 0x04, 0xC3, + 0xB2, 0x4F, 0xD5, 0xFC, 0xCA, 0x7B, 0xB1, 0xE3, + 0xB9, 0x9A, 0x9F, 0x3C, 0x94, 0x5E, 0xF8, 0xA5, + 0x35, 0xF1, 0x37, 0x43, 0x20, 0x71, 0xA5, 0xCA, + 0x5B, 0x6F, 0x7D, 0xC7, 0xB8, 0xBC, 0xE5, 0x5A, + 0xD0, 0xF3, 0xB6, 0xCF, 0x1B, 0xCB, 0xB9, 0xCD, + 0x35, 0xE2, 0x41, 0xF8, 0x6E, 0x46, 0x97, 0x27, + 0x26, 0x48, 0xF4, 0x73, 0xDB, 0xD5, 0xB7, 0x68, + 0x1E, 0xF0, 0xC7, 0x84, 0x49, 0xE6, 0xC5, 0xFA, + 0x93, 0x0D, 0x83, 0x2C, 0x85, 0x1E, 0xED, 0x2A, + 0x65, 0x12, 0x19, 0xD7, 0xD9, 0xC3, 0xBB, 0x23, + 0xF3, 0xC6, 0xAD, 0x7E, 0xB7, 0x78, 0x68, 0x54, + 0x1F, 0x3C, 0xEE, 0x09, 0xF5, 0x1E, 0xE0, 0x4E, + 0xBA, 0x1B, 0xBC, 0x29, 0x69, 0x8A, 0xED, 0xD3, + 0xC7, 0xAC, 0xEC, 0x44, 0x29, 0xD7, 0xA4, 0x0C, + 0xFA, 0xBD, 0xA2, 0x29, 0x34, 0x80, 0x16, 0x4F, + 0x37, 0xEC, 0xB6, 0x73, 0xF2, 0xB5, 0xD7, 0x51, + 0x57, 0x43, 0xAF, 0x7E, 0xD0, 0xB6, 0xE0, 0x96, + 0xF0, 0xE2, 0xFE, 0xCE, 0xC8, 0x9F, 0x40, 0xD6, + 0xAF, 0xE0, 0xBF, 0xCD, 0x70, 0x37, 0x91, 0x69, + 0x99, 0x8C, 0xDF, 0x4A, 0x20, 0xDE, 0xB6, 0xC6, + 0x7A, 0xB4, 0xE3, 0x6A, 0xAD, 0x53, 0xED, 0xB9, + 0x8A, 0x13, 0x61, 0xC5, 0xE9, 0xB0, 0xDC, 0x16, + 0x36, 0xD7, 0x51, 0xA8, 0x7B, 0x52, 0x05, 0x3B, + 0xAD, 0x5C, 0xD2, 0xBD, 0x6F, 0x6B, 0xA9, 0x51, + 0xA7, 0xE8, 0x7E, 0xA4, 0xB6, 0x77, 0xAE, 0x00, + 0x89, 0x3A, 0x1F, 0x76, 0x72, 0x3F, 0xC5, 0x6C, + 0x49, 0x4F, 0xB5, 0xCA, 0x2F, 0x5D, 0xAE, 0xF8, + 0x58, 0x9A, 0xE2, 0x5B, 0x54, 0x76, 0xF4, 0xAA, + 0x89, 0xD4, 0x04, 0xAF, 0x1C, 0x26, 0x65, 0xEC, + 0xA1, 0x81, 0x06, 0x2A, 0x4B, 0x5E, 0xD5, 0x90, + 0xB8, 0x26, 0x33, 0x64, 0x15, 0x33, 0x25, 0xAC, + 0x97, 0x9A, 0xCA, 0x1B, 0x64, 0x50, 0x82, 0x8F, + 0x65, 0x6A, 0xD4, 0x47, 0xCF, 0x7E, 0x93, 0x7D, + 0xB3, 0xCB, 0xFE, 0x55, 0x0A, 0x46, 0x93, 0x22, + 0xB5, 0x46, 0xAB, 0xD6, 0x05, 0x59, 0x14, 0x5E, + 0x1B, 0xD4, 0x2D, 0xAF, 0xA3, 0x18, 0xB7, 0xA0, + 0xD7, 0x11, 0x70, 0xDE, 0x81, 0x8B, 0xD6, 0x64, + 0xFD, 0x38, 0xBD, 0x29, 0x92, 0x41, 0x80, 0xC4, + 0x4A, 0x6D, 0x34, 0x1B, 0xF0, 0x59, 0xA0, 0xD6, + 0x48, 0x55, 0xD2, 0xA5, 0xE2, 0x91, 0xB6, 0x71, + 0xF4, 0x90, 0x97, 0x8B, 0x0A, 0xDD, 0x90, 0xEA, + 0x61, 0x9B, 0x30, 0xA6, 0x2F, 0x5D, 0xB4, 0xEE, + 0x7A, 0x10, 0x40, 0x59, 0x89, 0xAC, 0x30, 0x6E, + 0x9C, 0x7B, 0xBC, 0x11, 0x75, 0x38, 0x00, 0x2E, + 0xDF, 0xED, 0x87, 0x47, 0x30, 0xFB, 0xD4, 0x8A, + 0xC6, 0xBE, 0xC7, 0x20, 0xC8, 0x3D, 0x51, 0x05, + 0x67, 0x48, 0xDE, 0xE2, 0xBF, 0x95, 0x5E, 0x7B, + 0xD7, 0xC7, 0x86, 0xDF, 0x68, 0x57, 0xA9, 0x29, + 0xBC, 0xF8, 0xE3, 0x81, 0x62, 0x1B, 0x37, 0x58, + 0xF2, 0xFF, 0xEE, 0xE8, 0x28, 0x08, 0x36, 0x23, + 0x5B, 0x24, 0x68, 0x1E, 0x62, 0xBD, 0x27, 0xC2, + 0x6F, 0xE9, 0x63, 0x67, 0x53, 0xC7, 0x8A, 0xB5, + 0xA7, 0xEF, 0x29, 0xFE, 0x60, 0xAC, 0x29, 0xCF, + 0x67, 0x40, 0x9F, 0xE6, 0x57, 0xCE, 0x65, 0x3A, + 0x2F, 0xDA, 0xA7, 0xF2, 0x0C, 0x50, 0x19, 0xE6, + 0xF7, 0x43, 0x2E, 0x8C, 0xEB, 0x9E, 0x99, 0x92, + 0xE6, 0x46, 0xB7, 0x8D, 0x43, 0x65, 0xFD, 0x02, + 0x17, 0x74, 0x6F, 0x7B, 0xA3, 0x1E, 0x06, 0x9D, + 0x75, 0x4E, 0x05, 0xED, 0x5A, 0x71, 0xFC, 0x5E, + 0x7D, 0x6D, 0x64, 0x5E, 0xAF, 0x41, 0x44, 0xD6, + 0xBC, 0x43, 0x05, 0x5E, 0x6C, 0xDB, 0x89, 0x34, + 0xC7, 0x02, 0x64, 0x08, 0xAE, 0x96, 0x53, 0x5B, + 0xA2, 0xDE, 0xCD, 0x2F, 0x74, 0x56, 0xD6, 0xEC, + 0xA4, 0x23, 0x68, 0xCD, 0x9A, 0xC5, 0x05, 0x7B, + 0x7D, 0x1E, 0x12, 0xF7, 0x7A, 0xA8, 0x7C, 0x43, + 0x7E, 0x7A, 0x43, 0x31, 0x5D, 0xA0, 0x81, 0xE5, + 0x3A, 0xFE, 0x23, 0xB5, 0xBC, 0xC2, 0xF4, 0xCE, + 0x3A, 0x80, 0x06, 0xE8, 0x1E, 0x08, 0xAF, 0x0A, + 0x33, 0xC1, 0xA9, 0x30, 0x7C, 0x8D, 0x5A, 0xC5, + 0x93, 0x89, 0xF2, 0x69, 0x24, 0x11, 0x6C, 0xAB, + 0x0B, 0x87, 0xD5, 0x49, 0xD0, 0x38, 0x3C, 0x27, + 0x4E, 0x8E, 0x85, 0xD4, 0x6E, 0x0F, 0xCD, 0x70, + 0xE3, 0x68, 0x42, 0xCA, 0x4C, 0x8D, 0x6D, 0x0F, + 0x48, 0xF3, 0xED, 0xF9, 0xE9, 0x43, 0x5D, 0xBF, + 0x55, 0x75, 0xF8, 0xEB, 0x78, 0x93, 0x72, 0x75, + 0x8B, 0xF5, 0xBD, 0xE9, 0x9D, 0xA2, 0xB9, 0x81, + 0x83, 0xDB, 0xAC, 0x82, 0xD1, 0xC1, 0x20, 0x03, + 0x72, 0x4D, 0xDC, 0x42, 0xAE, 0xC8, 0x1C, 0x0C, + 0x78, 0x22, 0x77, 0x27, 0x91, 0x50, 0x4C, 0x90, + 0xEA, 0x13, 0x8B, 0x6C, 0x91, 0xDF, 0x5D, 0x25, + 0x36, 0x9C, 0xC2, 0x06, 0x4F, 0xD5, 0xE2, 0xCC, + 0x9D, 0x89, 0x3B, 0xC4, 0x23, 0x5D, 0x88, 0x17, + 0x62, 0x4E, 0xC9, 0xFA, 0xC8, 0xEF, 0x1D, 0x45, + 0xE1, 0xFB, 0x58, 0xB3, 0x8E, 0xBD, 0x8D, 0xAE, + 0x12, 0xFF, 0xA0, 0x37, 0xE0, 0x7F, 0x5B, 0x41, + 0x1D, 0x40, 0x17, 0xAF, 0x95, 0x2D, 0x8C, 0x42, + 0xC6, 0x1A, 0x2A, 0x1E, 0x8E, 0x70, 0x25, 0xD6, + 0xD3, 0xA2, 0x85, 0xAA, 0x17, 0xFF, 0x0D, 0xB4, + 0x39, 0xD0, 0xF2, 0xAF, 0xA0, 0x4F, 0x31, 0x8D, + 0x6D, 0x57, 0x6A, 0xED, 0xC6, 0xF1, 0xE7, 0x67, + 0xA6, 0x6F, 0xB3, 0x9B, 0x72, 0xC6, 0x7F, 0x05, + 0xAF, 0x40, 0x87, 0x12, 0x0D, 0xC8, 0x98, 0x88, + 0x2D, 0xDE, 0xA1, 0x7C, 0x95, 0x32, 0xB2, 0x7A, + 0xB5, 0x9D, 0xE4, 0x0D, 0x75, 0xD4, 0x17, 0x5B, + 0xB4, 0x92, 0x73, 0xAF, 0x87, 0x3A, 0x92, 0xDA, + 0x4D, 0x87, 0xE2, 0x53, 0xCA, 0xE7, 0x2A, 0x52, + 0x64, 0xE0, 0xC1, 0xDE, 0x4C, 0x9C, 0xF9, 0x1A, + 0x1F, 0x3A, 0xD6, 0x05, 0xA0, 0xCC, 0x8D, 0x91, + 0x93, 0x51, 0xF9, 0x37, 0x1A, 0xFC, 0x68, 0xEF, + 0xBC, 0xED, 0x19, 0x8E, 0x4C, 0xD1, 0xB5, 0x8C, + 0xA2, 0x85, 0xDA, 0x02, 0x65, 0xAB, 0xAC, 0xAE, + 0xCA, 0x8E, 0xAC, 0xF0, 0x2A, 0x4F, 0xC7, 0x67, + 0x16, 0x2E, 0x24, 0x7F, 0x73, 0xCD, 0xD7, 0x3E, + 0xE3, 0x27, 0x8A, 0xF9, 0x4A, 0xC4, 0xA8, 0xCB, + 0x2B, 0x01, 0x55, 0x68, 0x34, 0xA3, 0xC0, 0xB8, + 0xD0, 0x6D, 0x05, 0xF2, 0x3B, 0x4C, 0x17, 0x47, + 0xE7, 0x64, 0x53, 0xF4, 0x9D, 0xE0, 0x8D, 0xF8, + 0xEE, 0x0E, 0xA6, 0x25, 0x64, 0x7D, 0x1B, 0xD0, + 0x80, 0xE7, 0x3C, 0x41, 0x97, 0xAE, 0xCB, 0x6A, + 0x23, 0xC2, 0x5F, 0x00, 0xC6, 0xC5, 0x4C, 0x8A, + 0x4C, 0xEF, 0x76, 0x65, 0x95, 0x28, 0xB3, 0x67, + 0x42, 0xEC, 0x17, 0xFF, 0x0E, 0xE3, 0x7B, 0x30, + 0x6D, 0xCC, 0xB8, 0x87, 0xD6, 0x63, 0x36, 0x5D, + 0xC9, 0xE8, 0x1D, 0x51, 0x47, 0xCF, 0xE5, 0x05, + 0x0D, 0xB4, 0x09, 0xDF, 0xAD, 0x88, 0x9C, 0x38, + 0x6F, 0x12, 0xA5, 0xCD, 0x0C, 0x95, 0x53, 0x41, + 0x13, 0xA6, 0xD0, 0xAB, 0xCB, 0x5A, 0x3F, 0x56, + 0xCE, 0x23, 0xEE, 0x32, 0x61, 0x22, 0x79, 0xE8, + 0xBA, 0x23, 0x94, 0x61, 0x25, 0x8E, 0xD6, 0x3E, + 0x78, 0x83, 0xE1, 0x15, 0xBA, 0x05, 0x81, 0xB8, + 0x1A, 0x7F, 0x73, 0xC1, 0xB7, 0x9F, 0x29, 0xA1, + 0x16, 0x2E, 0x6E, 0x84, 0xC7, 0x15, 0xBC, 0x50, + 0x28, 0x5F, 0xD3, 0x8D, 0x4D, 0x6D, 0xC0, 0x87, + 0x68, 0x88, 0x4B, 0xF4, 0xFB, 0x55, 0x85, 0x3D, + 0xA7, 0xB5, 0x47, 0x1E, 0x73, 0xA1, 0x47, 0x8D, + 0xB1, 0xE1, 0xCF, 0xE6, 0x15, 0x3E, 0xC6, 0xC3, + 0x78, 0xDD, 0x6A, 0x3F, 0x42, 0x29, 0x6E, 0x61, + 0x9D, 0xE7, 0x63, 0xFF, 0x2D, 0xDB, 0x83, 0xE5, + 0x15, 0x84, 0xC2, 0x8D, 0xD8, 0x34, 0x2E, 0x92, + 0x9E, 0x15, 0xB7, 0xBB, 0xCF, 0x5D, 0x6E, 0xCB, + 0x87, 0x79, 0xCF, 0x7F, 0x3A, 0x9A, 0xC1, 0x6A, + 0x43, 0x1F, 0x52, 0xA2, 0x34, 0xE6, 0xA3, 0x69, + 0x9D, 0x9E, 0x44, 0x84, 0x0A, 0x4D, 0x3D, 0x48, + 0x5D, 0xA5, 0xD9, 0x03, 0x94, 0xB1, 0x81, 0xEF, + 0x89, 0x98, 0xE6, 0xD1, 0x44, 0x21, 0x83, 0x59, + 0x09, 0xCD, 0xDB, 0x16, 0x7C, 0x8C, 0x38, 0x78, + 0x19, 0x4B, 0x6D, 0x51, 0x4D, 0xF8, 0x63, 0x6D, + 0x4A, 0x14, 0xA1, 0xBE, 0xF3, 0xCA, 0x38, 0x1E, + 0x36, 0xCF, 0x2E, 0x6D, 0x5F, 0xBC, 0xB4, 0x0A, + 0xF0, 0x91, 0x7D, 0x6D, 0xBB, 0x87, 0x5C, 0xFF, + 0x64, 0xCD, 0xCE, 0xCC, 0xCF, 0xB8, 0xBF, 0xB8, + 0x05, 0x45, 0x8D, 0xF8, 0x2C, 0x74, 0xEB, 0x86, + 0x3A, 0x96, 0x9E, 0xD9, 0x8B, 0x9C, 0x46, 0xE7, + 0x17, 0x3C, 0x09, 0x0D, 0xB0, 0x68, 0xB2, 0xD8, + 0x0C, 0xCE, 0x32, 0xDE, 0x51, 0x72, 0xB5, 0xD4, + 0xA8, 0xB9, 0x09, 0xA5, 0xA4, 0xCC, 0x47, 0xFA, + 0x9F, 0x2E, 0xD6, 0x6E, 0x60, 0x69, 0xCD, 0x96, + 0xAB, 0x1F, 0x3E, 0x84, 0x8C, 0x68, 0x72, 0x0F, + 0xEA, 0x32, 0xC5, 0x73, 0x6E, 0x8A, 0xB5, 0x10, + 0x05, 0xFE, 0x42, 0x58, 0x33, 0xF2, 0x07, 0x56, + 0xC1, 0x96, 0x76, 0x23, 0x77, 0x9D, 0x0A, 0xD2, + 0x42, 0xA1, 0x69, 0x06, 0x83, 0xBA, 0xD2, 0xEB, + 0x12, 0x3D, 0x97, 0xAB, 0x23, 0x08, 0x90, 0x15, + 0x51, 0x4D, 0x0C, 0x6A, 0x3B, 0x0F, 0x37, 0x15, + 0x25, 0xC2, 0x3E, 0x5F, 0x53, 0x84, 0x4C, 0x81, + 0xDD, 0xE8, 0x7C, 0xFE, 0x9F, 0x06, 0x5E, 0x11, + 0x68, 0x7D, 0x68, 0x6B, 0x07, 0x2C, 0x19, 0x00, + 0xF5, 0xC9, 0xA7, 0xC3, 0x1F, 0xE8, 0xBA, 0xBE, + 0x9F, 0x09, 0x0C, 0xE2, 0xCB, 0x3B, 0x68, 0x7B, + 0xA8, 0x9E, 0xD8, 0x3C, 0x08, 0x85, 0xDF, 0xF9, + 0x11, 0x2B, 0x52, 0xF6, 0xCE, 0xD7, 0x1E, 0x32, + 0xA4, 0x0A, 0x9A, 0xBC, 0xFF, 0xF4, 0x20, 0xB6, + 0x24, 0x85, 0x84, 0x7F, 0xFF, 0x70, 0x3C, 0xBB, + 0x74, 0x36, 0x42, 0x25, 0x5F, 0xBD, 0x0A, 0x90, + 0x86, 0xA7, 0xB8, 0x3F, 0x9E, 0xDF, 0x43, 0x24, + 0x88, 0x0C, 0x52, 0x08, 0xF7, 0xDC, 0xB1, 0xEA, + 0xC3, 0x38, 0xF9, 0x13, 0x16, 0x65, 0xA0, 0xCA, + 0x6B, 0xF0, 0xD6, 0x12, 0xFB, 0xA6, 0x3F, 0xF7, + 0x13, 0x91, 0x99, 0xB1, 0xDE, 0xE4, 0xEE, 0x1E, + 0x98, 0x9B, 0xE4, 0xA0, 0x3A, 0xA8, 0xAC, 0x4A, + 0x48, 0x3E, 0xCB, 0x9E, 0xB4, 0x1D, 0x22, 0x1F, + 0x59, 0x97, 0x24, 0x8C, 0xFE, 0xDC, 0xBF, 0x6C, + 0xAD, 0x8D, 0xB0, 0xA3, 0x27, 0xFA, 0x28, 0x8F, + 0xD6, 0xAE, 0x31, 0x39, 0x84, 0xFA, 0x61, 0x8F, + 0x7D, 0xD4, 0xEE, 0xBB, 0x13, 0xED, 0x85, 0xC4, + 0x35, 0xC0, 0xAB, 0x07, 0x73, 0xC5, 0xCD, 0xCA, + 0xD4, 0x69, 0x9B, 0x9C, 0x38, 0x2A, 0x1F, 0x37, + 0xF9, 0xDF, 0x8C, 0x3A, 0xE1, 0x57, 0xDF, 0x05, + 0x9F, 0x97, 0x51, 0xCC, 0xA6, 0x93, 0xD5, 0x49, + 0x2A, 0xE9, 0xCD, 0x46, 0x31, 0x22, 0x6E, 0x62, + 0xE8, 0x13, 0x90, 0x64, 0xFF, 0x00, 0x27, 0xCF, + 0xA1, 0x95, 0x4E, 0xE9, 0x36, 0xAF, 0xAD, 0x02, + 0x06, 0xDD, 0x2A, 0xE2, 0x28, 0xB6, 0xDD, 0x65, + 0xCD, 0x9A, 0x9D, 0x5F, 0xF9, 0xC0, 0xCC, 0x48, + 0xC8, 0xC2, 0xE9, 0x8F, 0x5A, 0xE6, 0xE2, 0xC9, + 0x79, 0x7A, 0x83, 0x84, 0xF8, 0xA3, 0xE3, 0xC7, + 0x48, 0xC7, 0x06, 0xFE, 0x6A, 0x36, 0x25, 0xD2, + 0xA2, 0xEB, 0x4A, 0xE2, 0xCA, 0xA0, 0x49, 0x24, + 0x1A, 0x47, 0x8C, 0x1A, 0x77, 0xF5, 0xC9, 0x0D, + 0xDC, 0x94, 0x18, 0x4D, 0x89, 0x80, 0x50, 0x18, + 0x7D, 0x67, 0x00, 0x43, 0xE4, 0xE7, 0x8F, 0x54, + 0xDC, 0x60, 0x84, 0x24, 0xF3, 0xBF, 0x5E, 0x92, + 0xC7, 0x0C, 0x05, 0x49, 0xBB, 0x61, 0x2F, 0x48, + 0x0A, 0xEB, 0xE5, 0xFA, 0x8B, 0x01, 0x33, 0x27, + 0x10, 0x3E, 0xA1, 0x28, 0x33, 0x11, 0x30, 0x1F, + 0x91, 0x47, 0x7B, 0xA6, 0x3E, 0xD4, 0xF9, 0xC2, + 0x8F, 0xA3, 0x4E, 0xBC, 0xA7, 0x61, 0x56, 0x1F, + 0x90, 0x33, 0x54, 0x15, 0x06, 0x21, 0x9C, 0x57, + 0x07, 0xC2, 0xF8, 0xED, 0x81, 0xED, 0x36, 0x15, + 0xC8, 0xAC, 0xAB, 0x12, 0x80, 0xBF, 0x7C, 0x5E, + 0x00, 0xEC, 0x1B, 0x27, 0x58, 0x3A, 0xE9, 0x09, + 0x2B, 0x23, 0x16, 0x69, 0x26, 0xF9, 0xCC, 0x3C, + 0x5A, 0xFB, 0x66, 0xBA, 0x32, 0xF9, 0xAF, 0xAB, + 0xCB, 0xA7, 0xF7, 0x91, 0x6A, 0x82, 0x42, 0xA7, + 0x9D, 0x7B, 0x0E, 0xD3, 0x5D, 0xF6, 0x52, 0x6D, + 0x7D, 0x2B, 0xE6, 0x30, 0x99, 0x01, 0xBD, 0xC0, + 0x3D, 0x15, 0x95, 0xC2, 0x67, 0x19, 0xD9, 0x0F, + 0xC0, 0x79, 0x1E, 0xAB, 0xA7, 0x67, 0x35, 0x12, + 0x53, 0xB0, 0x6A, 0xE4, 0xB9, 0x0A, 0x52, 0xEF, + 0xBD, 0xCD, 0xD4, 0x0C, 0x09, 0x6F, 0x24, 0xE9, + 0x52, 0x9F, 0xF8, 0x9F, 0x95, 0x95, 0x57, 0x07, + 0x5F, 0xC8, 0xDD, 0xAF, 0xE6, 0x10, 0x3A, 0x51, + 0x38, 0xF0, 0x9F, 0xBD, 0xEB, 0x0F, 0x5F, 0x36, + 0xB5, 0x2A, 0x57, 0xBE, 0x21, 0x39, 0xD8, 0x9D, + 0x29, 0x04, 0xBC, 0xE2, 0xB8, 0x6D, 0x03, 0xF2, + 0x6D, 0x56, 0xF4, 0x18, 0x40, 0x07, 0x1A, 0x15, + 0x8B, 0xF5, 0x46, 0xE1, 0x0C, 0x4D, 0xED, 0x0E, + 0x81, 0xB0, 0x0D, 0x98, 0x88, 0xC5, 0x5D, 0x53, + 0xE1, 0x1D, 0xB7, 0x00, 0x26, 0xC6, 0x46, 0x7E, + 0xD2, 0xAB, 0x0B, 0xD9, 0x1E, 0xE0, 0xE7, 0xC3, + 0xC3, 0xE0, 0x83, 0x7F, 0x8C, 0xB9, 0xBA, 0xE0, + 0x04, 0xE2, 0xA8, 0xFF, 0xEC, 0xD5, 0x9E, 0x79, + 0x2F, 0x13, 0xF9, 0x27, 0xCA, 0xDD, 0xF5, 0x0F, + 0x74, 0xD2, 0x9B, 0xC6, 0x2E, 0xF2, 0xF0, 0x2A, + 0xB0, 0xF9, 0x6E, 0x27, 0x3E, 0x8D, 0x66, 0xDB, + 0x44, 0x82, 0xDD, 0x1B, 0xD5, 0xBB, 0x51, 0x6E, + 0x72, 0x3A, 0xCB, 0x0F, 0x0B, 0x97, 0xBC, 0x32, + 0x07, 0xC1, 0x0C, 0xF3, 0x94, 0xFF, 0x62, 0xE2, + 0xFD, 0x7D, 0xBB, 0x3D, 0x43, 0x11, 0xB3, 0xFA, + 0x22, 0x05, 0xBF, 0x87, 0x0F, 0xFD, 0xD1, 0x81, + 0xC6, 0x30, 0xC6, 0x91, 0xD4, 0xEE, 0xA8, 0x6B, + 0x37, 0xB2, 0x38, 0xF1, 0x87, 0x89, 0xE0, 0x04, + 0x09, 0xED, 0x18, 0xA6, 0x3C, 0x18, 0x9E, 0x38, + 0xCB, 0x9F, 0xFE, 0xB3, 0x03, 0xF4, 0xE4, 0x3F, + 0xB3, 0x94, 0x7C, 0x74, 0x03, 0x6C, 0xCF, 0x16, + 0x24, 0xF8, 0x56, 0xE2, 0x4A, 0x7E, 0x9A, 0x21, + 0xB8, 0xC2, 0x7C, 0xF4, 0x3D, 0x85, 0x15, 0x43, + 0xA5, 0xCA, 0xFD, 0xA3, 0x05, 0xCC, 0x63, 0x8D, + 0x94, 0x82, 0x70 + }; + static const byte rnd_87[] = { + 0x16, 0xB8, 0x2B, 0x9B, 0x0A, 0x90, 0x5B, 0xB3, + 0xD8, 0x7B, 0x4A, 0x1E, 0x40, 0xAE, 0xAD, 0x3C, + 0xDE, 0x63, 0xB2, 0x2C, 0xB7, 0x16, 0xBD, 0x46, + 0x7A, 0x7B, 0xE8, 0x4A, 0xF1, 0x9B, 0x7C, 0xFE + }; + static const byte sig_87[] = { + 0xE5, 0x5D, 0x62, 0x56, 0x92, 0x73, 0x72, 0x13, + 0xDD, 0x3D, 0x7F, 0x51, 0x42, 0xF3, 0xAA, 0x33, + 0x87, 0x12, 0x2F, 0x20, 0xC9, 0x50, 0x93, 0x0A, + 0x7E, 0x7C, 0xCC, 0x0C, 0x6D, 0x21, 0xB9, 0x5D, + 0x62, 0x47, 0xD5, 0xFB, 0x3A, 0xCC, 0xBC, 0xB8, + 0xA1, 0x5A, 0xDF, 0x97, 0x58, 0xBA, 0x7E, 0x40, + 0x9A, 0x76, 0xD0, 0x1C, 0xBF, 0x0F, 0x14, 0xC3, + 0x23, 0x3B, 0x21, 0xB0, 0x5D, 0x11, 0x3B, 0x1F, + 0x70, 0xCB, 0x21, 0x78, 0x51, 0x68, 0xE2, 0x3A, + 0x29, 0x4A, 0x0D, 0xD0, 0x32, 0x50, 0xDC, 0xBB, + 0xD1, 0xCF, 0x80, 0x19, 0x7A, 0xC7, 0xFC, 0x37, + 0x2D, 0x5A, 0x5A, 0xDF, 0x3E, 0x7E, 0x89, 0x2D, + 0xC6, 0x0E, 0x75, 0x9A, 0xBB, 0xDF, 0x69, 0x82, + 0x28, 0xB6, 0xD0, 0xF3, 0xF4, 0xCB, 0x4F, 0xD5, + 0xDC, 0x5D, 0xFE, 0x8D, 0x01, 0xB4, 0x93, 0x9F, + 0x89, 0x53, 0x18, 0x74, 0x29, 0x20, 0x36, 0xBF, + 0x34, 0xCA, 0x71, 0x2B, 0x01, 0x14, 0xFB, 0x66, + 0x94, 0x28, 0x81, 0xF1, 0xF1, 0x7E, 0x80, 0xB6, + 0x4E, 0x0E, 0x9E, 0x9E, 0x60, 0xD7, 0x6A, 0xFB, + 0x59, 0xC7, 0x96, 0x9F, 0xB4, 0x9C, 0x98, 0x72, + 0x06, 0xC1, 0x6C, 0xAA, 0x8E, 0xC7, 0x48, 0xE6, + 0xC3, 0xAD, 0x8B, 0x4E, 0xF7, 0x81, 0x92, 0x74, + 0xC0, 0x5A, 0x2B, 0x54, 0x8D, 0x47, 0x15, 0xAC, + 0xED, 0x45, 0x69, 0xD0, 0x7C, 0x28, 0x80, 0x18, + 0xA3, 0x9F, 0xB7, 0x14, 0xC6, 0x51, 0xF9, 0x02, + 0x70, 0x98, 0xD9, 0xC1, 0x09, 0xC0, 0xD7, 0xCE, + 0x8B, 0x81, 0x7B, 0x30, 0x99, 0x4C, 0x85, 0x1C, + 0xFA, 0xAE, 0xBF, 0x05, 0x95, 0xBB, 0x6E, 0x01, + 0xE4, 0xFC, 0xE7, 0x11, 0x16, 0x90, 0x28, 0xC3, + 0xC4, 0x36, 0x9F, 0x11, 0xCD, 0xEB, 0xEB, 0x71, + 0x15, 0x08, 0x1D, 0x43, 0x2B, 0x12, 0xA6, 0x4E, + 0xB6, 0xF9, 0x35, 0xE4, 0x37, 0x0D, 0xF7, 0x49, + 0xDF, 0x73, 0x4D, 0xE3, 0x57, 0x33, 0x96, 0x7B, + 0x72, 0x45, 0x2F, 0x92, 0x70, 0xBB, 0x6F, 0xCD, + 0x90, 0x82, 0x67, 0xBB, 0x31, 0x9D, 0x9E, 0x38, + 0x75, 0xCD, 0x5B, 0x55, 0x10, 0x6B, 0xFC, 0x00, + 0x15, 0xC8, 0xCB, 0xFC, 0xE1, 0x18, 0x41, 0xE8, + 0x6E, 0x92, 0xEC, 0x1A, 0x26, 0x88, 0x6C, 0xF6, + 0x2A, 0x5C, 0x05, 0x94, 0xD7, 0xB8, 0xD0, 0x78, + 0x52, 0x68, 0x8D, 0xC5, 0xBD, 0xD6, 0x29, 0xF8, + 0x21, 0xDF, 0xB3, 0x28, 0x43, 0x74, 0xC7, 0x0E, + 0x99, 0xD3, 0x0C, 0xDE, 0xE9, 0x06, 0x44, 0xCD, + 0x77, 0x13, 0x34, 0x82, 0xBA, 0x36, 0x20, 0x71, + 0x02, 0xB1, 0x6E, 0xBA, 0xCF, 0x9F, 0x15, 0x36, + 0xC8, 0xF1, 0x4E, 0x36, 0x30, 0x34, 0x2D, 0x23, + 0x6C, 0x77, 0xEC, 0xCA, 0xBA, 0x7C, 0x17, 0x4F, + 0x3F, 0x22, 0x4A, 0x34, 0xA1, 0x5C, 0xB3, 0x8F, + 0xD8, 0x48, 0xD5, 0x8A, 0x2C, 0x8B, 0x1B, 0xFB, + 0x87, 0xDA, 0xBC, 0xB6, 0xD9, 0x59, 0xD6, 0x9B, + 0xF0, 0x6E, 0x8D, 0xB1, 0x52, 0xE1, 0x8A, 0x36, + 0x31, 0xA7, 0x83, 0xCE, 0xDF, 0x36, 0xEB, 0xBE, + 0xEA, 0xC3, 0xC6, 0xA6, 0x52, 0x2D, 0x89, 0x0B, + 0xF9, 0x5B, 0x1D, 0x14, 0xA9, 0xBF, 0x37, 0x31, + 0xE0, 0x1C, 0xF5, 0x29, 0x95, 0xF0, 0xC0, 0x08, + 0xE8, 0x97, 0xEE, 0x53, 0x27, 0x85, 0x81, 0x7D, + 0x47, 0xE5, 0xAC, 0xC5, 0x1B, 0x48, 0xA5, 0x36, + 0x1E, 0x8A, 0xD7, 0xF5, 0xC9, 0x93, 0x74, 0xCE, + 0x06, 0xEA, 0xC3, 0x26, 0x45, 0xFF, 0xED, 0x39, + 0xC1, 0x0B, 0x7A, 0x59, 0x3C, 0x0F, 0xEE, 0x89, + 0xEF, 0xA4, 0xEC, 0xD0, 0x72, 0x34, 0x95, 0xC9, + 0xC4, 0x78, 0x47, 0xB6, 0xB7, 0xCE, 0xA4, 0xD9, + 0xA1, 0xB6, 0x37, 0xC1, 0xF1, 0xFB, 0x4E, 0x4C, + 0x38, 0xB0, 0x4A, 0xE5, 0x13, 0x63, 0xDC, 0x44, + 0xC4, 0x7E, 0x86, 0x9C, 0xAD, 0x69, 0x29, 0xFD, + 0xA1, 0xFE, 0xAD, 0x3B, 0x59, 0x24, 0x2F, 0x70, + 0xAE, 0x5F, 0x2C, 0x00, 0xFE, 0x01, 0x09, 0xA3, + 0x10, 0x87, 0xF0, 0xAD, 0xFA, 0x9B, 0x83, 0x8F, + 0x48, 0x96, 0x8B, 0x9A, 0x35, 0xE7, 0x4D, 0xAA, + 0xEC, 0xA4, 0xCD, 0x26, 0x7C, 0x3E, 0xAC, 0x93, + 0x26, 0x9D, 0x6B, 0x83, 0x34, 0xC4, 0x71, 0xE1, + 0xC8, 0x93, 0x88, 0x09, 0xAF, 0x00, 0xB5, 0x7F, + 0xD9, 0x5A, 0x8E, 0x36, 0xC1, 0x2E, 0x7E, 0xF1, + 0x0C, 0xC5, 0x2A, 0xB3, 0xE4, 0x48, 0xDF, 0xFB, + 0xFF, 0x99, 0xC9, 0x66, 0xD2, 0x28, 0x46, 0x7C, + 0x43, 0x39, 0x96, 0x69, 0x95, 0x42, 0xAC, 0xE0, + 0xC2, 0x0C, 0x65, 0x99, 0xC8, 0xB0, 0xAE, 0x76, + 0xE8, 0x18, 0x3E, 0xA9, 0x1D, 0x44, 0x81, 0x14, + 0x65, 0xF7, 0xDF, 0xD1, 0xD1, 0x7B, 0x7C, 0x28, + 0xE0, 0x77, 0x9D, 0x79, 0x9C, 0xE4, 0x1A, 0xF1, + 0xD0, 0xFF, 0x8E, 0xEA, 0x58, 0x84, 0xB3, 0x47, + 0xBC, 0xA1, 0x47, 0x48, 0xB7, 0xC3, 0xD5, 0xD1, + 0xF3, 0xDD, 0xA6, 0x3B, 0x15, 0x4C, 0xB3, 0xB5, + 0xFD, 0x52, 0x9D, 0x7E, 0xF0, 0xC7, 0x40, 0x2C, + 0x34, 0xBC, 0xCF, 0x1C, 0x67, 0x30, 0xC0, 0x4D, + 0xA1, 0xC7, 0x5E, 0xAD, 0xAF, 0xCD, 0xFA, 0x21, + 0xE4, 0xB5, 0x33, 0x8B, 0x37, 0x2D, 0xCF, 0x4D, + 0x07, 0x48, 0x61, 0xB0, 0xB6, 0x8B, 0x27, 0x05, + 0xA0, 0x8C, 0x71, 0x95, 0x84, 0x02, 0xB2, 0x1E, + 0x59, 0xBC, 0xB6, 0xE2, 0x2C, 0x3C, 0x20, 0x4C, + 0xDE, 0x1E, 0x35, 0x24, 0xC1, 0x5B, 0x3C, 0xB4, + 0x2A, 0x8C, 0xA7, 0x2D, 0xE3, 0xDC, 0x45, 0x26, + 0x6E, 0x29, 0x52, 0x5D, 0x24, 0x8A, 0xC2, 0x16, + 0x73, 0xDB, 0x80, 0xF2, 0x91, 0xEC, 0x05, 0x3E, + 0x2E, 0x9E, 0x39, 0x12, 0x5E, 0x11, 0x80, 0x24, + 0xF5, 0xFC, 0x86, 0x4C, 0xD9, 0xF9, 0x70, 0x59, + 0xC8, 0xC8, 0x57, 0x5D, 0x0F, 0x68, 0x75, 0x3C, + 0x7A, 0x3D, 0x1B, 0xF7, 0xD0, 0xDF, 0xE2, 0xF9, + 0xBD, 0x44, 0xFD, 0x21, 0x75, 0x86, 0x77, 0x25, + 0xAF, 0xD3, 0x28, 0x55, 0x2A, 0x60, 0x7D, 0x79, + 0x9C, 0x72, 0x2F, 0x6E, 0xAB, 0x2F, 0x26, 0x44, + 0x0C, 0xFF, 0x52, 0xBD, 0xA1, 0xA9, 0x07, 0xBD, + 0x9D, 0x2A, 0x64, 0x2E, 0x0B, 0xA1, 0xB8, 0x78, + 0xD3, 0xC4, 0x84, 0x9A, 0xE1, 0xDB, 0xB4, 0x4A, + 0x4C, 0x45, 0x7A, 0x8E, 0xD5, 0xA3, 0x6B, 0x09, + 0x8D, 0x72, 0x8E, 0x6D, 0x17, 0x34, 0xFF, 0xD6, + 0xED, 0x24, 0x19, 0x7D, 0xC6, 0x2D, 0x5B, 0x82, + 0x68, 0xAE, 0x25, 0x33, 0xBB, 0xCB, 0x7D, 0xFD, + 0x00, 0x15, 0x83, 0xEA, 0xBB, 0xE7, 0x40, 0x3D, + 0x80, 0xD5, 0x9E, 0x6C, 0xE0, 0x3C, 0x7E, 0x3E, + 0x12, 0xC7, 0x36, 0x7E, 0x41, 0x84, 0xE8, 0xB4, + 0x16, 0xCA, 0x4A, 0xB7, 0xEB, 0x16, 0xEC, 0xAB, + 0x5A, 0x69, 0x24, 0x7F, 0x5E, 0x81, 0x86, 0x7D, + 0x30, 0x61, 0x4E, 0x0F, 0x75, 0x39, 0xEE, 0xF2, + 0xF4, 0xDC, 0x5E, 0x23, 0x40, 0xE8, 0x3C, 0xC0, + 0x10, 0xAD, 0x5E, 0xE6, 0x06, 0x8E, 0x5F, 0x55, + 0xC5, 0x69, 0x65, 0x5F, 0xA3, 0x6E, 0x73, 0x86, + 0x82, 0x32, 0x5F, 0x36, 0xA7, 0x6B, 0x2C, 0x26, + 0xCD, 0x64, 0xC8, 0x57, 0x1F, 0x06, 0x7A, 0xAB, + 0x8B, 0xA7, 0xDB, 0x53, 0x48, 0x1A, 0x06, 0x8D, + 0x36, 0xF1, 0x77, 0x74, 0xE6, 0xF5, 0x18, 0x62, + 0x8E, 0x8A, 0xBF, 0xB7, 0x7F, 0x72, 0x44, 0xAC, + 0xC8, 0x9A, 0x0E, 0x60, 0x4B, 0xAB, 0xB2, 0x9E, + 0x95, 0xDF, 0x95, 0x28, 0x98, 0x78, 0xBB, 0xA9, + 0x5D, 0x8E, 0xEE, 0xB4, 0x84, 0xF5, 0x81, 0x7E, + 0xA1, 0x53, 0x3E, 0xBB, 0x43, 0xF6, 0xD4, 0xB7, + 0x60, 0xFD, 0xF4, 0xF8, 0x68, 0xB6, 0x1D, 0x9A, + 0xF7, 0xDA, 0x77, 0xFA, 0xBB, 0x74, 0x44, 0xDE, + 0x7C, 0x32, 0x2D, 0x5C, 0x24, 0xD8, 0x4D, 0xBF, + 0xE0, 0x5C, 0x70, 0x12, 0x3C, 0x43, 0xCC, 0x5F, + 0x00, 0xD5, 0x1F, 0xEA, 0x5D, 0xC9, 0x3A, 0x5C, + 0x32, 0xED, 0xE0, 0xF1, 0x59, 0xA0, 0xB7, 0x71, + 0xDC, 0x65, 0xD2, 0x88, 0x20, 0x20, 0xD8, 0x59, + 0x53, 0x2D, 0x30, 0x2D, 0xFC, 0xA9, 0xEA, 0x45, + 0xB0, 0xF3, 0x1E, 0x66, 0x9F, 0xF6, 0xF1, 0x5E, + 0x9B, 0x67, 0x1D, 0xBF, 0x5E, 0x19, 0xB3, 0x2A, + 0xE8, 0xCE, 0xE5, 0x90, 0xFE, 0x82, 0x5C, 0x19, + 0x7B, 0x84, 0x3E, 0x45, 0xFF, 0x5D, 0xC2, 0x2E, + 0x49, 0x6A, 0xB1, 0x2D, 0x50, 0x2D, 0x21, 0xF7, + 0x2A, 0xA2, 0x39, 0x47, 0x8D, 0xB5, 0x17, 0x64, + 0x3E, 0x96, 0x13, 0x90, 0x53, 0xEA, 0x57, 0x4C, + 0xDB, 0x3D, 0x43, 0xC3, 0xE7, 0xD6, 0x5C, 0x54, + 0x89, 0xDF, 0x6E, 0xF9, 0xE4, 0xC6, 0x64, 0xF0, + 0x88, 0x1C, 0xD0, 0xF6, 0x9D, 0x9E, 0xD7, 0xCD, + 0x2C, 0xFB, 0xCC, 0x54, 0x0E, 0x96, 0xD7, 0x4E, + 0x05, 0xD2, 0xB3, 0x88, 0x85, 0xD8, 0x60, 0xA4, + 0xF2, 0xE4, 0xD7, 0xFF, 0xAF, 0x12, 0x2E, 0xBA, + 0xC4, 0x5A, 0x3A, 0x3E, 0xC5, 0xD7, 0xF3, 0x60, + 0x4F, 0x27, 0xEF, 0xE0, 0x35, 0xAC, 0x4A, 0x8B, + 0x14, 0x7D, 0xC4, 0xEF, 0x61, 0x9A, 0x69, 0x2E, + 0x49, 0x80, 0x04, 0x0C, 0x18, 0xB9, 0x42, 0xC6, + 0x8C, 0x8A, 0x99, 0x43, 0xA6, 0x5A, 0xCD, 0x72, + 0x20, 0xAD, 0xFD, 0x9C, 0xC4, 0xAA, 0xDF, 0x6C, + 0x6C, 0x03, 0xEF, 0x48, 0x3E, 0xFB, 0x4A, 0xBC, + 0xAA, 0x44, 0xEE, 0xC4, 0x25, 0x8F, 0xF9, 0x8A, + 0xC2, 0x24, 0x73, 0x15, 0xFA, 0x0E, 0xCB, 0x00, + 0xEE, 0x9B, 0x39, 0x3F, 0x60, 0x1F, 0x00, 0x95, + 0xCA, 0xFE, 0xC2, 0x2C, 0x35, 0x5F, 0xD9, 0xD1, + 0x29, 0xB5, 0x4D, 0xC1, 0x66, 0x51, 0x8F, 0x17, + 0x3B, 0xF4, 0xF1, 0x49, 0x42, 0x36, 0x0C, 0x5B, + 0x58, 0xF2, 0x9B, 0x59, 0x01, 0xFB, 0x15, 0x7F, + 0x21, 0x90, 0x1F, 0x56, 0x69, 0x8B, 0xE2, 0xA5, + 0x44, 0xCB, 0x84, 0x98, 0x4B, 0x75, 0xA8, 0xCB, + 0x83, 0x0D, 0xE8, 0x1C, 0x91, 0x7F, 0xE4, 0x57, + 0x81, 0x16, 0x34, 0x2F, 0xCE, 0x01, 0xAA, 0x62, + 0x54, 0x44, 0xB7, 0xD6, 0xC7, 0xF1, 0x68, 0x9A, + 0x00, 0x3B, 0x71, 0x16, 0xF9, 0x96, 0x6A, 0x90, + 0x6C, 0x2C, 0x4E, 0x58, 0xBC, 0xDD, 0xE9, 0x3B, + 0x60, 0xB7, 0xA0, 0x97, 0xEE, 0xD6, 0x34, 0xDD, + 0x49, 0x4A, 0xD9, 0x85, 0xD1, 0xB7, 0x95, 0x14, + 0xEC, 0x6A, 0x40, 0xE8, 0x31, 0x80, 0xF1, 0xD8, + 0x5F, 0x75, 0xF6, 0x92, 0x3A, 0x4F, 0xCD, 0x0A, + 0x6E, 0xBF, 0xA1, 0x27, 0x48, 0x79, 0x27, 0x04, + 0x76, 0x2C, 0xAB, 0x25, 0x06, 0xEB, 0x43, 0xDD, + 0x1B, 0x4B, 0x24, 0xFC, 0x93, 0x51, 0x1C, 0x45, + 0xF6, 0xAE, 0x77, 0xCF, 0xC9, 0xE6, 0x20, 0xE4, + 0xA5, 0x2B, 0x3D, 0x7D, 0xF0, 0xEB, 0x51, 0x7C, + 0xCA, 0xFE, 0x58, 0xBA, 0xC4, 0x07, 0x95, 0x75, + 0x62, 0x0C, 0x50, 0x68, 0x88, 0x1A, 0x8A, 0x0D, + 0x1B, 0x5C, 0x53, 0x1A, 0x9C, 0xA8, 0x4E, 0xFE, + 0x63, 0x9B, 0xDB, 0x05, 0x70, 0x01, 0x75, 0xA1, + 0x3A, 0x08, 0xFA, 0x51, 0xD5, 0xF6, 0x81, 0xDE, + 0x69, 0xE5, 0x40, 0xB3, 0xF8, 0x7C, 0x46, 0x97, + 0xA6, 0x4E, 0xA8, 0x51, 0x47, 0x9C, 0xB9, 0x25, + 0xCD, 0x4E, 0xED, 0xFC, 0xEE, 0x03, 0x6A, 0xCD, + 0x93, 0x65, 0xB3, 0x68, 0x09, 0x6F, 0xE8, 0x00, + 0x6A, 0x3F, 0xBF, 0xE8, 0x6F, 0x09, 0xE9, 0xF2, + 0x6F, 0x44, 0x2E, 0xB1, 0x81, 0x76, 0x04, 0xDD, + 0x6E, 0xF4, 0x93, 0x61, 0xE5, 0x78, 0xD4, 0xDA, + 0xBF, 0x05, 0xA1, 0xF4, 0x9D, 0xFD, 0x57, 0x06, + 0x9C, 0x13, 0x45, 0x97, 0xF2, 0x48, 0xE6, 0x1A, + 0xB5, 0xAD, 0x09, 0x11, 0x04, 0xBB, 0xA0, 0xA8, + 0xA3, 0xA3, 0x33, 0xCD, 0x42, 0x2C, 0x66, 0xC2, + 0x94, 0x80, 0x15, 0x9D, 0x56, 0x74, 0x02, 0xEE, + 0xA7, 0xE4, 0x90, 0xDD, 0xFB, 0x0B, 0x3B, 0xF0, + 0x7A, 0x02, 0x44, 0xE8, 0x11, 0xC4, 0x3A, 0xFE, + 0x73, 0x2A, 0x4C, 0x92, 0x3C, 0x23, 0x37, 0x8B, + 0x4F, 0x28, 0x8E, 0x1C, 0x4E, 0x7D, 0x0D, 0x6B, + 0xFD, 0x20, 0xB5, 0x93, 0xB3, 0x75, 0x30, 0x28, + 0xC7, 0x7E, 0x67, 0xC4, 0xDE, 0xDA, 0x27, 0xA9, + 0xE3, 0xF2, 0xF5, 0x25, 0x98, 0x5F, 0x6B, 0xBE, + 0x11, 0x80, 0x23, 0x49, 0x30, 0xC8, 0x8A, 0x63, + 0xF9, 0xC4, 0x14, 0x77, 0x2A, 0xE2, 0x21, 0x42, + 0x28, 0x1C, 0xEB, 0x9F, 0x7B, 0x70, 0xA8, 0x2B, + 0xFB, 0x25, 0x36, 0xA6, 0xAC, 0xFE, 0x8E, 0xFF, + 0xB6, 0x86, 0x09, 0x15, 0x7E, 0xD9, 0x26, 0x8F, + 0xDB, 0xF2, 0x2D, 0xC2, 0xFA, 0xAE, 0xDA, 0x50, + 0xF6, 0x24, 0x53, 0xDB, 0xBF, 0x92, 0x9D, 0x7E, + 0x48, 0xCC, 0x75, 0xAC, 0xD0, 0xD3, 0x45, 0x09, + 0x2F, 0x01, 0x60, 0xBB, 0xAE, 0xCB, 0xE6, 0xB3, + 0x30, 0xDA, 0xD9, 0xB6, 0x12, 0xCD, 0xF5, 0x11, + 0xCF, 0x2B, 0x2A, 0xC6, 0x61, 0x9A, 0x05, 0x59, + 0x08, 0x58, 0x64, 0xEC, 0xDB, 0x77, 0xCF, 0x64, + 0xE2, 0x4B, 0x6E, 0xF4, 0x07, 0x68, 0x5E, 0xE9, + 0x31, 0xB1, 0x38, 0x67, 0xF9, 0x29, 0x2E, 0x7A, + 0xD2, 0x03, 0xA6, 0x29, 0x3F, 0x22, 0x58, 0x66, + 0x6A, 0x07, 0xD8, 0xFD, 0xC5, 0x03, 0xEE, 0x66, + 0xD4, 0x66, 0x70, 0x6D, 0xA4, 0xC4, 0xA1, 0xEE, + 0xCD, 0x4D, 0xFA, 0x3C, 0x34, 0x36, 0xC2, 0xC5, + 0x1E, 0x86, 0xB8, 0x7B, 0x7C, 0xBC, 0x67, 0x16, + 0xF3, 0x6E, 0xF2, 0xB7, 0xEA, 0x96, 0x1B, 0x0D, + 0xA2, 0xC8, 0x42, 0xBF, 0x30, 0x09, 0x2A, 0x6D, + 0x9D, 0x35, 0xB3, 0x92, 0xBA, 0x3E, 0xE2, 0xE9, + 0xE2, 0xAA, 0x90, 0x70, 0xCE, 0x0F, 0x07, 0xFA, + 0x7C, 0x3B, 0xF7, 0x66, 0x7F, 0x5C, 0xFE, 0xD9, + 0x72, 0x1C, 0x4E, 0xFE, 0x7E, 0x86, 0x8E, 0x7F, + 0x62, 0x8D, 0x41, 0x46, 0x7B, 0x43, 0x17, 0xB9, + 0x44, 0xED, 0x39, 0x1B, 0x3E, 0xF9, 0x2D, 0xC7, + 0x5C, 0x9D, 0xAC, 0x05, 0x00, 0xC6, 0x85, 0x4E, + 0xB8, 0xBC, 0x29, 0xDF, 0x6D, 0x6A, 0xCC, 0xEB, + 0xD6, 0x44, 0x86, 0xAA, 0xC9, 0x55, 0x49, 0xA1, + 0x3F, 0x59, 0x5E, 0xAF, 0xD5, 0xC9, 0x96, 0x19, + 0x84, 0xC0, 0x4D, 0x1B, 0xE5, 0x2C, 0x42, 0x8D, + 0x2C, 0xC8, 0x83, 0x00, 0x26, 0xBF, 0x46, 0x9F, + 0x20, 0x97, 0xEC, 0x2C, 0xA9, 0x2C, 0xF0, 0xA7, + 0x11, 0xED, 0xE2, 0xA2, 0x57, 0x83, 0x40, 0x92, + 0xF3, 0x58, 0xB7, 0x4E, 0xD6, 0x3A, 0x9D, 0xF0, + 0xDD, 0xD4, 0x5F, 0x82, 0x58, 0xD3, 0x72, 0x05, + 0x69, 0xFF, 0x1E, 0xBC, 0x74, 0x90, 0x87, 0xB5, + 0x7A, 0xEE, 0xF8, 0xCE, 0x3F, 0x59, 0xE1, 0xC0, + 0x46, 0x24, 0xF8, 0x9D, 0x93, 0x51, 0x4A, 0x44, + 0xFB, 0xEA, 0x58, 0xA6, 0xAC, 0x9A, 0x7C, 0xA3, + 0x11, 0xA3, 0x47, 0x44, 0x24, 0x11, 0xF5, 0x56, + 0x1A, 0x3B, 0xCF, 0xEC, 0xD9, 0x2B, 0x6C, 0xBA, + 0xA6, 0xA2, 0x67, 0xB9, 0xE0, 0xCB, 0x3F, 0x8D, + 0xA8, 0xC4, 0x8A, 0x45, 0xAB, 0xE2, 0x10, 0x19, + 0x10, 0xC9, 0xDB, 0x01, 0x64, 0xC0, 0x0B, 0x6F, + 0x3B, 0xA1, 0xE9, 0xEB, 0x74, 0x9A, 0x63, 0x93, + 0xE5, 0x74, 0x3F, 0xD3, 0x7B, 0xEA, 0x8C, 0xD6, + 0x7D, 0x66, 0xDD, 0x90, 0x6C, 0x69, 0x67, 0x05, + 0xAD, 0x70, 0xF1, 0xFA, 0x52, 0xBB, 0xD5, 0x3D, + 0x0E, 0x7E, 0x87, 0xE0, 0x98, 0xAF, 0xA6, 0xE6, + 0x0E, 0x25, 0x91, 0x70, 0xCA, 0x36, 0xE4, 0xF8, + 0xF7, 0x95, 0x1C, 0x48, 0xF6, 0x62, 0x9A, 0x4D, + 0xE4, 0xE7, 0x3A, 0x92, 0xC6, 0x2E, 0xAB, 0x8A, + 0x75, 0x7C, 0x45, 0xDA, 0x54, 0xB1, 0x6D, 0x2E, + 0xCC, 0x13, 0x46, 0x67, 0x8F, 0xFF, 0xDA, 0x18, + 0xE1, 0x4C, 0xE4, 0x6A, 0xB6, 0xAC, 0x65, 0x32, + 0x0C, 0x63, 0xD5, 0x43, 0xB5, 0x8B, 0xB1, 0x52, + 0xEE, 0x0C, 0xBB, 0x62, 0x34, 0x30, 0xDB, 0xF7, + 0x08, 0xC6, 0xE8, 0x5B, 0x07, 0x66, 0x6D, 0x4B, + 0x39, 0xC6, 0x94, 0x2B, 0x22, 0x9E, 0x3E, 0x45, + 0x62, 0x3D, 0x05, 0x03, 0x2B, 0x16, 0x71, 0xBB, + 0x85, 0x1B, 0x6E, 0x84, 0xD3, 0x48, 0x4D, 0x63, + 0x26, 0x60, 0x97, 0x45, 0xB8, 0xEA, 0x43, 0x96, + 0x00, 0xFE, 0x0B, 0x85, 0xBD, 0x22, 0x40, 0xA4, + 0xA7, 0x2F, 0xC1, 0xEB, 0xFD, 0xB5, 0x22, 0xD5, + 0x1F, 0xB3, 0xEA, 0x7C, 0x6D, 0x20, 0xFB, 0x98, + 0xA5, 0xF2, 0x84, 0x70, 0xF7, 0xB9, 0x2A, 0x12, + 0x63, 0x0C, 0x2D, 0x97, 0x6C, 0xC2, 0x76, 0xAC, + 0x32, 0xE2, 0xB1, 0x3A, 0xB3, 0xAB, 0x9E, 0xBB, + 0x61, 0xB4, 0x6A, 0x5F, 0x2D, 0x4D, 0xCE, 0x0D, + 0xFB, 0x97, 0x80, 0x89, 0x4A, 0x81, 0xFB, 0xB2, + 0x72, 0x37, 0x66, 0xB9, 0x08, 0xBF, 0xCD, 0x9F, + 0x63, 0xB2, 0xBA, 0x54, 0xF1, 0x9E, 0xEC, 0x11, + 0x67, 0x26, 0xC7, 0x98, 0xDD, 0xA3, 0xC5, 0x50, + 0x86, 0x17, 0xD5, 0xCF, 0x51, 0x97, 0x22, 0x65, + 0x2B, 0x71, 0xF7, 0x34, 0x84, 0x55, 0xC9, 0xD1, + 0xFE, 0x75, 0x42, 0x0A, 0x5A, 0x31, 0x59, 0xE8, + 0x8A, 0x0D, 0xE5, 0x77, 0x1C, 0xF5, 0xFD, 0x27, + 0x05, 0x05, 0xF7, 0x28, 0xDA, 0x54, 0xAB, 0xBD, + 0xDC, 0x50, 0xB8, 0xDB, 0x2E, 0xB4, 0x28, 0x41, + 0x30, 0x04, 0x40, 0xD5, 0xF0, 0x12, 0xD7, 0x16, + 0x3D, 0x8F, 0x41, 0xE7, 0x70, 0x76, 0x82, 0xB9, + 0xC4, 0xB2, 0x1F, 0x57, 0x10, 0xB6, 0xC4, 0x84, + 0x0D, 0xB1, 0xB8, 0x21, 0xB2, 0x77, 0x09, 0xF6, + 0xD5, 0x9C, 0xE4, 0xA2, 0xFA, 0x83, 0x13, 0x56, + 0x94, 0x3F, 0x37, 0x6D, 0x0D, 0x7C, 0x7E, 0xA0, + 0xE5, 0xC8, 0xD9, 0x42, 0x0F, 0x35, 0xB1, 0xDC, + 0xB9, 0x49, 0xD5, 0xED, 0xA8, 0x90, 0x09, 0x14, + 0xAE, 0x63, 0xB5, 0xEA, 0x62, 0x0D, 0x9E, 0x6D, + 0x93, 0xBD, 0x3A, 0xEA, 0x24, 0xB5, 0xAC, 0xC9, + 0xD1, 0x7B, 0xBC, 0xC6, 0xC4, 0xBA, 0x68, 0xB1, + 0x65, 0xFE, 0xAB, 0x30, 0xD4, 0x92, 0xD9, 0xC1, + 0x94, 0x84, 0xE1, 0x20, 0x4E, 0x28, 0x7C, 0x3A, + 0x3E, 0x8B, 0x44, 0x79, 0xC7, 0xB5, 0xA5, 0x95, + 0xC2, 0xC9, 0xA8, 0x3F, 0x92, 0x67, 0x06, 0x9A, + 0x12, 0xD3, 0xAE, 0x78, 0x87, 0x0E, 0x31, 0x54, + 0x26, 0xDF, 0x97, 0xEB, 0x6C, 0xF3, 0xC9, 0x53, + 0x39, 0xED, 0x50, 0x5A, 0xF9, 0x6A, 0x03, 0x27, + 0x8E, 0xC6, 0x79, 0x5B, 0xD4, 0xD3, 0x57, 0x97, + 0xFD, 0xF5, 0xCB, 0x14, 0xDB, 0xBE, 0x39, 0xB9, + 0x64, 0x8A, 0x75, 0xAA, 0xE3, 0x4A, 0x19, 0x59, + 0x69, 0x7D, 0xF8, 0x7D, 0x8C, 0xB8, 0x2F, 0x32, + 0x57, 0xBF, 0x84, 0x9E, 0x45, 0x4E, 0xC4, 0xA0, + 0x65, 0xA4, 0x0B, 0x73, 0x36, 0xC5, 0xD1, 0x07, + 0xF8, 0x1C, 0x91, 0x07, 0xB8, 0x0B, 0x4B, 0xE5, + 0x4F, 0xE6, 0xA1, 0xDF, 0x29, 0x03, 0xE7, 0x68, + 0xA4, 0x32, 0x8E, 0x21, 0x8F, 0x15, 0x51, 0x57, + 0x65, 0x16, 0xF0, 0x55, 0x71, 0x8C, 0x28, 0xD8, + 0x82, 0xDC, 0x8A, 0xC1, 0xE7, 0x5C, 0xF2, 0xD5, + 0xB8, 0x18, 0x16, 0x9F, 0x63, 0x89, 0x21, 0xF1, + 0xA6, 0xED, 0x21, 0xDA, 0xC8, 0x0A, 0x10, 0x21, + 0x18, 0x98, 0xD0, 0xF2, 0x9E, 0xDE, 0x5A, 0xA1, + 0x51, 0xC9, 0x18, 0x3B, 0x68, 0x79, 0x75, 0xE7, + 0xF4, 0xF9, 0xBF, 0x5F, 0xBE, 0x61, 0x35, 0xA9, + 0x02, 0x56, 0x2D, 0x99, 0xD8, 0x95, 0xFA, 0x78, + 0x8A, 0x67, 0x24, 0x1D, 0xDF, 0x13, 0x14, 0xD0, + 0xB4, 0xB6, 0x21, 0x11, 0xB7, 0xA4, 0x06, 0x8D, + 0x1D, 0xF6, 0xD5, 0x50, 0x2A, 0x0A, 0x42, 0x3C, + 0x7C, 0xF1, 0x1F, 0x15, 0x1C, 0x81, 0x69, 0xDA, + 0xCC, 0xAC, 0x8F, 0xB9, 0x08, 0x4E, 0xF8, 0x4E, + 0x3E, 0x77, 0x26, 0x4A, 0x1F, 0x72, 0x89, 0xCA, + 0x91, 0x77, 0x99, 0xBF, 0x28, 0xD2, 0x31, 0x65, + 0x30, 0x37, 0x84, 0x66, 0x8A, 0x1C, 0xC6, 0x59, + 0x7D, 0x48, 0x9B, 0x4D, 0xDC, 0x87, 0x4F, 0xD2, + 0x04, 0xA0, 0x8B, 0x8B, 0x37, 0x3B, 0x1A, 0xDB, + 0xCF, 0x63, 0x39, 0x07, 0xF3, 0x37, 0xCF, 0x0E, + 0x2F, 0xEB, 0xE6, 0x2A, 0xA1, 0x4C, 0xE0, 0x75, + 0x3F, 0xAB, 0xF7, 0xDE, 0x48, 0x83, 0x79, 0x89, + 0x30, 0xA7, 0x1B, 0xE8, 0x73, 0x8E, 0x9D, 0x1D, + 0xF6, 0x5C, 0x91, 0x4F, 0x44, 0x7C, 0x04, 0xA7, + 0x07, 0xC8, 0xCC, 0x4A, 0x5C, 0x81, 0xAD, 0x48, + 0x7C, 0xE5, 0x19, 0x5A, 0xC4, 0x29, 0x80, 0x14, + 0xFA, 0xC2, 0x26, 0x1C, 0x50, 0x28, 0xB9, 0xF6, + 0x7F, 0x8D, 0x51, 0x9A, 0xDA, 0xBB, 0x8E, 0x90, + 0xBA, 0x3B, 0xD9, 0x4D, 0x61, 0xBE, 0xFD, 0x33, + 0xC0, 0xCA, 0x7B, 0x09, 0xFF, 0x36, 0x84, 0x70, + 0x11, 0xB4, 0xBE, 0x81, 0xFE, 0x71, 0xEE, 0x81, + 0xD7, 0x61, 0xBB, 0x83, 0xA6, 0xA0, 0xDC, 0x20, + 0x04, 0x02, 0x4C, 0x1B, 0x4D, 0xED, 0x8A, 0xC1, + 0x38, 0x70, 0xC3, 0x69, 0xC9, 0x50, 0xC2, 0x17, + 0x64, 0xAD, 0x9D, 0x44, 0x63, 0x44, 0xE5, 0x32, + 0x7B, 0x90, 0xE3, 0xEF, 0x45, 0x28, 0xA6, 0x23, + 0x92, 0xCB, 0xA1, 0xFC, 0xA8, 0xB4, 0x39, 0xF1, + 0xB1, 0x00, 0x1F, 0x06, 0xD4, 0x91, 0x5D, 0xDB, + 0xAC, 0x7D, 0x87, 0xD4, 0xEE, 0xCD, 0x4A, 0x06, + 0x3E, 0xB4, 0x84, 0x65, 0xAA, 0x47, 0x05, 0x41, + 0x7C, 0x95, 0x47, 0x3A, 0x49, 0x80, 0xC5, 0xAC, + 0x32, 0x41, 0x6A, 0x3A, 0x2B, 0xB9, 0xD9, 0x21, + 0x80, 0xC7, 0xC1, 0xD0, 0xC9, 0x95, 0x4B, 0xC3, + 0xEA, 0x0D, 0x3F, 0x0E, 0xE4, 0x5A, 0xD8, 0xBD, + 0x11, 0xD0, 0x76, 0x6D, 0x3C, 0xA7, 0x64, 0xD8, + 0xCA, 0x4C, 0x8F, 0x58, 0x2C, 0xDD, 0x95, 0x1F, + 0xBB, 0x76, 0x8D, 0x10, 0xFD, 0xAD, 0x45, 0xCE, + 0x71, 0x6E, 0x27, 0x92, 0xC4, 0xA6, 0x17, 0x46, + 0x95, 0xDB, 0xD8, 0xEA, 0x9A, 0x5F, 0x0E, 0xE0, + 0x0A, 0xA2, 0xF5, 0x79, 0xC3, 0x74, 0xA7, 0x70, + 0x99, 0x3B, 0x23, 0xD7, 0x3E, 0xA4, 0x96, 0xB5, + 0x54, 0x77, 0x71, 0x8D, 0x78, 0x2E, 0xCC, 0x0A, + 0x4E, 0xF8, 0xA9, 0x96, 0xEE, 0xB4, 0x4B, 0x5B, + 0xDC, 0x52, 0x6D, 0xE1, 0x61, 0x36, 0xE1, 0x32, + 0xD6, 0xA2, 0x7B, 0x2E, 0xCC, 0x78, 0x92, 0xA1, + 0x81, 0x59, 0xB8, 0xC7, 0x04, 0x11, 0x3D, 0xF0, + 0xF9, 0xF9, 0x3E, 0x47, 0x3C, 0xEA, 0xD5, 0x30, + 0x2D, 0xAE, 0xC0, 0x47, 0xC8, 0x61, 0xCC, 0x9C, + 0x2E, 0xC0, 0x40, 0x16, 0x11, 0x73, 0x13, 0xF3, + 0x19, 0xAE, 0x72, 0x44, 0x72, 0xC5, 0x59, 0x51, + 0x2E, 0x9F, 0xE3, 0x07, 0xB0, 0xCA, 0x6B, 0xB0, + 0x15, 0x20, 0xB4, 0x25, 0x00, 0xED, 0xFD, 0xAC, + 0xD6, 0x34, 0x8B, 0xCA, 0xE8, 0xC6, 0x3B, 0xFD, + 0x02, 0x22, 0xE6, 0x91, 0x2B, 0x4B, 0x61, 0xDF, + 0x63, 0x5C, 0x2B, 0x5F, 0x82, 0x07, 0x23, 0x59, + 0x82, 0x5E, 0x0E, 0x21, 0xF7, 0x9C, 0x37, 0x1C, + 0x7E, 0x6F, 0xD4, 0xFA, 0x91, 0x40, 0x8B, 0x98, + 0x68, 0xBD, 0x60, 0x2F, 0x0A, 0xC8, 0xC8, 0x99, + 0xA1, 0xC6, 0x10, 0xF1, 0x27, 0x53, 0xD3, 0xFB, + 0x23, 0x02, 0xE7, 0x8E, 0x95, 0xB1, 0xF0, 0x21, + 0xCB, 0x90, 0xEE, 0x8D, 0xE0, 0x27, 0x57, 0xDE, + 0x40, 0xA3, 0xE7, 0x8F, 0x61, 0xC1, 0x8F, 0xC5, + 0x0C, 0x0F, 0xBA, 0x05, 0xA0, 0x58, 0x8E, 0x86, + 0x8A, 0xF5, 0x72, 0xE1, 0x34, 0xB4, 0xF6, 0x8E, + 0x6E, 0xA4, 0x21, 0x75, 0x43, 0x73, 0xE7, 0x32, + 0x72, 0x80, 0x9B, 0xE7, 0x1D, 0x78, 0x8F, 0x0D, + 0x06, 0x47, 0x9E, 0x4D, 0xB4, 0xAC, 0x3E, 0x0D, + 0xB8, 0x11, 0x23, 0xFF, 0xAD, 0xB9, 0x23, 0xE0, + 0xA4, 0x37, 0xA6, 0x3D, 0xC2, 0x15, 0xF4, 0x64, + 0x03, 0x1F, 0x0A, 0x68, 0xED, 0x37, 0x37, 0xE8, + 0x3E, 0x5B, 0x49, 0x78, 0xFC, 0xFC, 0x12, 0x06, + 0xE8, 0xC7, 0xCD, 0x3A, 0xAF, 0xD4, 0x54, 0xA7, + 0x04, 0x7B, 0xFC, 0x66, 0xA6, 0xA8, 0x1C, 0x38, + 0x0C, 0x26, 0x08, 0xE6, 0xEE, 0x47, 0x25, 0x80, + 0x59, 0xA5, 0x39, 0x81, 0x20, 0xEE, 0x5F, 0x49, + 0x9A, 0x01, 0x37, 0xE9, 0x96, 0x18, 0xD0, 0x05, + 0x2D, 0xE3, 0x73, 0xD5, 0x08, 0x3B, 0x18, 0x46, + 0xFE, 0x9E, 0x67, 0x5B, 0x9E, 0xF8, 0x53, 0x05, + 0x2F, 0x96, 0x18, 0x9C, 0x09, 0x0D, 0xA6, 0x05, + 0xB3, 0x9E, 0x2F, 0x0B, 0x5A, 0xF3, 0x93, 0xFF, + 0x29, 0xF3, 0x4F, 0x62, 0xD5, 0x9A, 0xCE, 0x74, + 0x64, 0xD0, 0xBC, 0xB3, 0x08, 0xF1, 0xD3, 0x22, + 0xA5, 0xBE, 0x64, 0x0A, 0xEB, 0xA5, 0xF5, 0x1B, + 0x7E, 0x0A, 0x44, 0x3B, 0x1D, 0xA9, 0x48, 0x9A, + 0x2F, 0xED, 0x05, 0x0F, 0x44, 0xB3, 0x6D, 0xAD, + 0x39, 0x2C, 0xBA, 0x8E, 0x2B, 0xDE, 0x17, 0x38, + 0xD1, 0x69, 0xEA, 0xAE, 0x4E, 0x97, 0xCD, 0x61, + 0xBA, 0x75, 0x39, 0xF2, 0x81, 0xBB, 0xA9, 0x0F, + 0x6F, 0x82, 0xD4, 0xCB, 0xE4, 0x93, 0x82, 0x11, + 0x72, 0x9A, 0xE9, 0x87, 0xEC, 0xCC, 0x6D, 0xA1, + 0x7D, 0x47, 0x60, 0x20, 0xB6, 0xEE, 0xC6, 0xAA, + 0xC0, 0x3C, 0x95, 0x08, 0xA0, 0x8B, 0xFA, 0x04, + 0xF6, 0x6F, 0x65, 0x48, 0xCA, 0xA7, 0xA3, 0xA8, + 0xBB, 0x3B, 0x80, 0x91, 0xB6, 0x6D, 0x2F, 0x9D, + 0x97, 0xBB, 0x52, 0xE6, 0xC4, 0x24, 0x99, 0x97, + 0x63, 0xAD, 0xD2, 0xFD, 0xB3, 0x94, 0x6D, 0xC1, + 0xFB, 0xFA, 0x89, 0x45, 0x78, 0x80, 0x3C, 0xAA, + 0x3F, 0xC0, 0x7E, 0x8D, 0x37, 0x00, 0xA7, 0x70, + 0xD6, 0x57, 0x2A, 0xD3, 0x17, 0xB1, 0x9E, 0xDF, + 0x96, 0x98, 0x40, 0xB8, 0x1C, 0xCC, 0xC6, 0xCD, + 0xCD, 0xB0, 0xF3, 0x23, 0x53, 0xB6, 0x45, 0x78, + 0xA6, 0xA0, 0x88, 0x61, 0x06, 0x04, 0x8E, 0x1B, + 0xCD, 0x12, 0x29, 0x50, 0x0F, 0xD2, 0x8C, 0x89, + 0x51, 0xD1, 0x74, 0x0B, 0xE3, 0xA7, 0x75, 0x8A, + 0x60, 0x95, 0xEF, 0x6A, 0x98, 0xC7, 0x35, 0xA5, + 0xC0, 0xFB, 0x4C, 0x88, 0xA1, 0xDA, 0xCE, 0x79, + 0x3D, 0x4E, 0x4F, 0x91, 0x75, 0x88, 0xE0, 0x5F, + 0x17, 0xF5, 0xEF, 0xF8, 0x49, 0xFE, 0xB1, 0xDB, + 0x0D, 0xE8, 0xB2, 0xF7, 0xD4, 0x90, 0xBD, 0xB0, + 0x6B, 0x3A, 0x1B, 0xB5, 0xC6, 0xFB, 0x93, 0xEF, + 0xF3, 0xDD, 0x60, 0xEA, 0x67, 0x11, 0xFE, 0x6A, + 0xCC, 0x2C, 0x64, 0x2A, 0x85, 0x2E, 0x24, 0x39, + 0x34, 0x6B, 0xBC, 0xF8, 0x89, 0xB3, 0x49, 0x82, + 0x9C, 0xC0, 0x04, 0x29, 0x6D, 0x25, 0xCB, 0x19, + 0xE1, 0x53, 0xC6, 0x10, 0x7D, 0x62, 0x07, 0xD2, + 0x83, 0x8B, 0x89, 0x04, 0x70, 0x06, 0x60, 0x4F, + 0xB6, 0x10, 0x2B, 0xA0, 0x92, 0xF4, 0x1A, 0x7A, + 0xD6, 0x4F, 0xDC, 0x6C, 0x6C, 0x27, 0xE5, 0xEC, + 0x68, 0x1B, 0x95, 0x7C, 0x1C, 0x95, 0x2C, 0xB7, + 0x0A, 0x8D, 0xC7, 0x57, 0x92, 0x00, 0x4D, 0xC0, + 0x5F, 0xD4, 0xF4, 0x88, 0x3F, 0x8D, 0x43, 0x12, + 0x05, 0xE2, 0x14, 0x0E, 0xDD, 0x2C, 0xEC, 0xD5, + 0x2F, 0x1A, 0xE6, 0x97, 0xDC, 0xFE, 0x96, 0x80, + 0x67, 0x3B, 0xD4, 0x63, 0x73, 0xFA, 0xC8, 0x4F, + 0x4C, 0x4F, 0x2D, 0x68, 0x76, 0x44, 0x8E, 0xC2, + 0x19, 0x99, 0x44, 0xEA, 0xF2, 0x33, 0x23, 0x83, + 0xC8, 0xB1, 0x7C, 0x27, 0x43, 0x9B, 0x67, 0xF9, + 0xDE, 0xE1, 0xAE, 0x03, 0xA5, 0xA5, 0x2B, 0x96, + 0xB2, 0xEC, 0x4A, 0x43, 0xA7, 0x6D, 0xF4, 0xDB, + 0x32, 0x5B, 0x54, 0xD6, 0x63, 0xEA, 0x65, 0xC2, + 0xA8, 0x4B, 0x80, 0xCC, 0x65, 0x2D, 0xCE, 0x6F, + 0x61, 0x2F, 0x58, 0xD1, 0xE5, 0x64, 0x8A, 0x42, + 0x8D, 0xBA, 0xFA, 0x35, 0x5C, 0x9E, 0xD5, 0x80, + 0x2D, 0x5C, 0xC3, 0x47, 0xFB, 0x0D, 0x43, 0x20, + 0x7A, 0xA4, 0x37, 0xB2, 0x2F, 0x0B, 0x43, 0xB9, + 0x94, 0xD3, 0xD9, 0xC2, 0xD7, 0x02, 0x5D, 0x6A, + 0x12, 0x99, 0xE7, 0x32, 0x6C, 0xF0, 0x0C, 0x73, + 0x51, 0x33, 0x84, 0xA9, 0x0C, 0x66, 0xC9, 0x19, + 0x88, 0x9A, 0xF1, 0xB6, 0xF8, 0x41, 0xB1, 0xDC, + 0x60, 0xA4, 0x80, 0x73, 0x0B, 0x21, 0xF9, 0xB8, + 0x01, 0x7E, 0x66, 0x0D, 0xB4, 0x2B, 0x53, 0x8D, + 0x7D, 0x0B, 0xE1, 0xA3, 0x0C, 0x27, 0xF6, 0x2F, + 0x27, 0x34, 0x53, 0x75, 0x54, 0xF7, 0x5E, 0x05, + 0x1C, 0x5A, 0x94, 0x08, 0x14, 0xDE, 0xAA, 0x98, + 0xD9, 0xA5, 0xA0, 0xBE, 0x80, 0xC1, 0xEB, 0x3C, + 0xCF, 0x78, 0x88, 0xA4, 0xA2, 0x03, 0xF8, 0x79, + 0x1F, 0x84, 0x84, 0xA7, 0x0E, 0x95, 0x1A, 0x85, + 0xEF, 0x4C, 0xBE, 0xA2, 0x99, 0xAB, 0x10, 0xDD, + 0x85, 0x3F, 0x10, 0x6A, 0x9C, 0xD5, 0xDD, 0x7A, + 0xFB, 0xF5, 0xD9, 0xD9, 0xAA, 0xDF, 0x03, 0x78, + 0xAF, 0x1D, 0xEC, 0x18, 0xEB, 0x00, 0xB6, 0x64, + 0xB5, 0x75, 0xA5, 0x00, 0xDC, 0x36, 0x45, 0xBD, + 0x0C, 0x66, 0xCE, 0xA9, 0xBB, 0xD1, 0xF7, 0xE4, + 0x6A, 0xDA, 0x0E, 0x81, 0x0F, 0x6A, 0x71, 0x60, + 0x5C, 0x41, 0xD2, 0x12, 0x45, 0x14, 0xEF, 0x6F, + 0xEC, 0x22, 0x73, 0x4C, 0xA7, 0x94, 0xDD, 0x1A, + 0x42, 0x22, 0x58, 0x14, 0x0C, 0x4E, 0x6D, 0x77, + 0x7F, 0xF5, 0xC9, 0x69, 0x81, 0xA3, 0xB8, 0x6D, + 0x1C, 0x39, 0x47, 0xA5, 0xC4, 0x61, 0x1C, 0x91, + 0x2F, 0x67, 0xC3, 0x5E, 0x87, 0x1A, 0x85, 0x81, + 0x7D, 0x76, 0xF2, 0xE0, 0xB9, 0xD0, 0x43, 0x33, + 0xF1, 0xC1, 0xBA, 0x48, 0x6F, 0x48, 0xD5, 0xAE, + 0xB6, 0xDC, 0xAA, 0xCA, 0xEB, 0x0B, 0x6B, 0xFE, + 0xF4, 0xF1, 0x6E, 0x5D, 0xE4, 0x90, 0x53, 0xCF, + 0x9E, 0x13, 0x80, 0xCE, 0xE5, 0xDD, 0xA4, 0x01, + 0xBC, 0x16, 0x50, 0xD0, 0x78, 0x96, 0x3F, 0x2B, + 0x7A, 0x71, 0x8E, 0x86, 0xFD, 0x14, 0x21, 0xDF, + 0x4D, 0xD7, 0xDD, 0x42, 0x59, 0xB3, 0xED, 0x81, + 0xE3, 0xAF, 0x71, 0x57, 0xE7, 0x04, 0xD2, 0x26, + 0xA8, 0x83, 0xFC, 0x03, 0x90, 0x8C, 0x88, 0xC4, + 0xBF, 0x74, 0x54, 0x59, 0xD8, 0x66, 0x9F, 0xE2, + 0x7A, 0xCE, 0x5B, 0x9C, 0xC4, 0x37, 0xFA, 0xDB, + 0x40, 0x9A, 0xDD, 0x73, 0x9C, 0x06, 0x5A, 0x21, + 0x43, 0xFB, 0xFA, 0x1B, 0x41, 0x31, 0x9F, 0xF4, + 0x24, 0x09, 0x05, 0xFE, 0x56, 0x17, 0x52, 0x9C, + 0xC7, 0xE2, 0xCA, 0xC9, 0x1F, 0xBE, 0xE2, 0xEB, + 0x92, 0xEE, 0xD4, 0x76, 0x44, 0x9A, 0xFA, 0xFB, + 0x07, 0x62, 0x98, 0xEC, 0xA0, 0xCF, 0xBF, 0xFA, + 0x5E, 0x1B, 0x8B, 0xCD, 0x33, 0xFB, 0x1A, 0x97, + 0xFE, 0x50, 0x65, 0x22, 0x08, 0x9E, 0xC3, 0x87, + 0x88, 0xCA, 0xDD, 0x11, 0x5E, 0xA7, 0xCF, 0xF3, + 0x07, 0x0A, 0x34, 0x0E, 0x30, 0x1B, 0xC5, 0xCE, + 0xF7, 0xA6, 0xA4, 0x31, 0xB5, 0x40, 0xB8, 0x81, + 0xAC, 0xAA, 0x07, 0xE0, 0x7D, 0x5E, 0x6A, 0x25, + 0x85, 0x8D, 0x1D, 0x82, 0x45, 0x82, 0x76, 0xB2, + 0x65, 0x69, 0x3E, 0x88, 0xFE, 0x21, 0xFE, 0x6A, + 0x6B, 0x97, 0xD6, 0x70, 0x70, 0x00, 0x83, 0x18, + 0x39, 0xA6, 0x91, 0x3F, 0xB1, 0xB7, 0xED, 0x11, + 0xD3, 0xF9, 0x74, 0x31, 0xEC, 0x21, 0xA2, 0xEE, + 0x69, 0x04, 0xC0, 0xEA, 0x4A, 0x17, 0x1A, 0xF8, + 0xDA, 0xF1, 0x52, 0xB2, 0x78, 0x69, 0x4F, 0xDF, + 0xE6, 0xB9, 0xF3, 0xE7, 0x48, 0x8B, 0x09, 0x5F, + 0x4A, 0x7A, 0x05, 0x8E, 0xA8, 0xF6, 0x69, 0x3D, + 0x91, 0x7A, 0x6F, 0x6C, 0xAD, 0x03, 0x16, 0xEA, + 0xE0, 0x04, 0xFE, 0x54, 0x71, 0x50, 0x6D, 0x31, + 0xE4, 0x37, 0x76, 0xD6, 0x1B, 0xA9, 0xEE, 0x56, + 0x7A, 0x39, 0x34, 0x24, 0x00, 0x58, 0xE3, 0x2F, + 0xD4, 0x97, 0x57, 0x6F, 0xD8, 0x0E, 0x8B, 0xD3, + 0x88, 0x7F, 0xE8, 0x74, 0x72, 0xF7, 0xBA, 0x26, + 0x25, 0xE4, 0xD5, 0x86, 0xCD, 0xA8, 0x1E, 0x8D, + 0x49, 0xCF, 0x04, 0x92, 0x5B, 0x50, 0xD0, 0x73, + 0x3C, 0xC9, 0x17, 0xC3, 0x0E, 0x67, 0x02, 0xC5, + 0xDE, 0x48, 0x88, 0x0D, 0x2C, 0x0D, 0x68, 0x04, + 0xD5, 0x51, 0xDF, 0x4F, 0x23, 0x89, 0x7A, 0x29, + 0x41, 0xB2, 0x7A, 0xCA, 0x86, 0xA5, 0xCC, 0xC4, + 0xF5, 0xD3, 0xE1, 0xEF, 0xB8, 0xCD, 0x84, 0xB5, + 0x6D, 0xB6, 0x51, 0x1B, 0x81, 0x26, 0x97, 0xAC, + 0x00, 0xFC, 0x76, 0x8D, 0x99, 0xD9, 0x35, 0x8E, + 0x4D, 0x3E, 0xC0, 0xC1, 0x0E, 0x8D, 0x9B, 0xE5, + 0x79, 0xF3, 0xC7, 0xA0, 0xA4, 0xA6, 0xA2, 0xE9, + 0x8B, 0xCD, 0x36, 0x79, 0x76, 0xF1, 0x6A, 0xEE, + 0xCF, 0x91, 0x8D, 0x91, 0xB1, 0xAF, 0xF2, 0xF5, + 0x43, 0xF6, 0xB2, 0x3A, 0x39, 0x9F, 0xBF, 0xDE, + 0x16, 0x03, 0x52, 0x18, 0x62, 0x93, 0xB5, 0x09, + 0xC4, 0xEE, 0x27, 0x9C, 0x56, 0x6F, 0x0C, 0x1C, + 0x12, 0x42, 0xF0, 0x34, 0xBD, 0x44, 0x52, 0x4C, + 0x32, 0x7E, 0x64, 0xDF, 0x78, 0x16, 0xD9, 0x9E, + 0xD7, 0x8A, 0x11, 0x33, 0x65, 0x42, 0xEC, 0x36, + 0x07, 0xEE, 0x3F, 0x19, 0x97, 0x9B, 0x92, 0x9D, + 0x3A, 0xE4, 0x98, 0x83, 0xDB, 0x0C, 0x85, 0x39, + 0xFA, 0x8D, 0x73, 0xF5, 0xBF, 0xE0, 0x75, 0x40, + 0x50, 0x9B, 0xF2, 0xE6, 0xB6, 0xA5, 0x33, 0xD0, + 0xC4, 0xD6, 0xAB, 0xFF, 0x16, 0xDE, 0x30, 0x9C, + 0x68, 0x90, 0xE0, 0x5E, 0xD3, 0xD5, 0xA9, 0xB0, + 0xD9, 0x6B, 0x0A, 0x43, 0x45, 0x9A, 0x3D, 0xE8, + 0xB6, 0x66, 0xE4, 0x57, 0x05, 0x8E, 0x5B, 0x72, + 0xFE, 0x50, 0x44, 0x8C, 0xE4, 0x68, 0x43, 0x51, + 0x0D, 0x9A, 0xD3, 0x36, 0xA9, 0xC7, 0xF6, 0xCF, + 0x6D, 0x2C, 0x95, 0x46, 0x98, 0x6D, 0x9E, 0x78, + 0x90, 0x87, 0x19, 0x64, 0xD5, 0xDE, 0x1D, 0x9B, + 0x37, 0x4E, 0x52, 0xF5, 0x14, 0xAA, 0xEE, 0x31, + 0x83, 0x55, 0x7C, 0x38, 0x0F, 0xB3, 0xF6, 0xF2, + 0x1C, 0x60, 0x71, 0x68, 0x1F, 0x06, 0xBD, 0x99, + 0xFD, 0x42, 0x12, 0x54, 0x3E, 0xBA, 0x4B, 0x60, + 0xFB, 0xFB, 0x51, 0x4D, 0x02, 0xCE, 0xE5, 0x9E, + 0x59, 0xB2, 0xE6, 0x98, 0x67, 0xBB, 0xAB, 0xC8, + 0x08, 0xE4, 0x08, 0x0D, 0xF5, 0x3B, 0x47, 0x78, + 0x39, 0x24, 0x56, 0x80, 0xF0, 0x6A, 0x1D, 0x33, + 0x05, 0x5F, 0xF2, 0xA2, 0x38, 0xAD, 0xDF, 0x5C, + 0xC5, 0xEA, 0x9C, 0xC7, 0x0A, 0x1B, 0x5B, 0x43, + 0xE9, 0x59, 0x3D, 0x68, 0x00, 0x23, 0x32, 0x5D, + 0x25, 0xFD, 0xA7, 0xCA, 0xDA, 0xA1, 0xFD, 0x22, + 0x4E, 0x34, 0x96, 0xE7, 0x0D, 0xFF, 0x89, 0x3B, + 0xA6, 0x56, 0x0D, 0x11, 0x13, 0xA6, 0x9D, 0x3B, + 0xBC, 0x12, 0x97, 0x9A, 0x2B, 0xAA, 0xE9, 0xE2, + 0xCF, 0xD2, 0xD3, 0xEF, 0x95, 0xFC, 0x40, 0x80, + 0x94, 0x48, 0x80, 0x5A, 0x3F, 0x4A, 0xD2, 0xB5, + 0x7D, 0x61, 0xA2, 0x26, 0x7B, 0xDC, 0x32, 0xCB, + 0x84, 0x2E, 0x9B, 0x29, 0x63, 0x45, 0x74, 0x0D, + 0x85, 0x54, 0xB2, 0x16, 0x77, 0x9B, 0x47, 0x51, + 0x63, 0x33, 0xE9, 0x1A, 0x52, 0x9D, 0xEB, 0x26, + 0x06, 0x7F, 0x97, 0xA0, 0xA1, 0xAA, 0x07, 0x0F, + 0x1E, 0x23, 0xAB, 0xCC, 0xD5, 0x0F, 0x3E, 0x88, + 0xAA, 0xC3, 0xED, 0x06, 0x25, 0x3A, 0x4A, 0x62, + 0x85, 0x9F, 0xA7, 0xD3, 0xF5, 0x1C, 0x9A, 0xCC, + 0x52, 0x87, 0x9F, 0xB8, 0xC7, 0xDD, 0xF1, 0x50, + 0x66, 0x70, 0xAC, 0xC6, 0x2C, 0x2E, 0x8C, 0xC9, + 0xD9, 0xF6, 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, 0x06, 0x0D, 0x13, 0x1D, 0x20, + 0x27, 0x2C, 0x32 + }; +#endif + byte sig[DILITHIUM_MAX_SIG_SIZE]; + word32 sigLen; + + key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); + ExpectNotNull(key); + + if (key != NULL) { + XMEMSET(key, 0, sizeof(*key)); + } + + ExpectIntEQ(wc_dilithium_init_ex(key, NULL, INVALID_DEVID), 0); +#ifndef WOLFSSL_NO_ML_DSA_44 + ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_44), 0); + ExpectIntEQ(wc_dilithium_import_private(sk_44, (word32)sizeof(sk_44), key), + 0); + sigLen = PARAMS_ML_DSA_44_SIG_SIZE; + ExpectIntEQ(wc_dilithium_sign_msg_with_seed(msg_44, (word32)sizeof(msg_44), + sig, &sigLen, key, rnd_44), 0); + ExpectIntEQ(sigLen, PARAMS_ML_DSA_44_SIG_SIZE); + ExpectIntEQ(XMEMCMP(sig, sig_44, sizeof(sig_44)), 0); +#endif +#ifndef WOLFSSL_NO_ML_DSA_65 + ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_65), 0); + ExpectIntEQ(wc_dilithium_import_private(sk_65, (word32)sizeof(sk_65), key), + 0); + sigLen = PARAMS_ML_DSA_65_SIG_SIZE; + ExpectIntEQ(wc_dilithium_sign_msg_with_seed(msg_65, (word32)sizeof(msg_65), + sig, &sigLen, key, rnd_65), 0); + ExpectIntEQ(sigLen, PARAMS_ML_DSA_65_SIG_SIZE); + ExpectIntEQ(XMEMCMP(sig, sig_65, sizeof(sig_65)), 0); +#endif +#ifndef WOLFSSL_NO_ML_DSA_87 + ExpectIntEQ(wc_dilithium_set_level(key, WC_ML_DSA_87), 0); + ExpectIntEQ(wc_dilithium_import_private(sk_87, (word32)sizeof(sk_87), key), + 0); + sigLen = PARAMS_ML_DSA_87_SIG_SIZE; + ExpectIntEQ(wc_dilithium_sign_msg_with_seed(msg_87, (word32)sizeof(msg_87), + sig, &sigLen, key, rnd_87), 0); + ExpectIntEQ(sigLen, PARAMS_ML_DSA_87_SIG_SIZE); + ExpectIntEQ(XMEMCMP(sig, sig_87, sizeof(sig_87)), 0); +#endif + + wc_dilithium_free(key); + XFREE(key, NULL, DYNAMIC_TYPE_TMP_BUFFER); +#endif + return EXPECT_RESULT(); +} + static int test_wc_dilithium_verify_kats(void) { EXPECT_DECLS; -#if defined(HAVE_DILITHIUM) && !defined(WOLFSSL_DILITHIUM_NO_VERIFY) +#if defined(HAVE_DILITHIUM) && defined(WOLFSSL_WC_DILITHIUM) && \ + !defined(WOLFSSL_DILITHIUM_NO_VERIFY) dilithium_key* key; int res; #ifndef WOLFSSL_NO_ML_DSA_44 static const byte pk_44[] = { - 0x35, 0x07, 0x31, 0x3A, 0xE3, 0x7A, 0xF6, 0x96, - 0x6C, 0x11, 0xA9, 0xE4, 0x0B, 0xEB, 0xEC, 0xE9, - 0x2B, 0x67, 0x3F, 0xD2, 0x67, 0x3C, 0x1C, 0x4C, - 0x08, 0xF0, 0x45, 0xA9, 0xDD, 0x5A, 0xB8, 0x8C, - 0x0A, 0x51, 0xA9, 0xBA, 0x89, 0x0F, 0x4C, 0xCB, - 0x9D, 0x0A, 0x41, 0x3F, 0x9C, 0xF4, 0x13, 0x36, - 0x79, 0x49, 0x00, 0x90, 0xBB, 0x57, 0x3B, 0xBD, - 0x2E, 0x18, 0xB3, 0xD0, 0xA5, 0x0E, 0x6B, 0x67, - 0xFF, 0x98, 0x8C, 0xDD, 0x07, 0xE8, 0xA7, 0xA1, - 0x3F, 0xAE, 0xFB, 0xD6, 0xC0, 0xF8, 0xF3, 0x34, - 0xA5, 0x17, 0xC2, 0x34, 0x88, 0x92, 0x65, 0xA6, - 0xE8, 0x66, 0x57, 0xFE, 0x86, 0x08, 0xF7, 0xDF, - 0xA0, 0x5B, 0x70, 0x3E, 0x91, 0x6C, 0x63, 0xA0, - 0xA3, 0x75, 0x55, 0xF8, 0xB6, 0xAA, 0xD4, 0x1B, - 0x78, 0x5E, 0x42, 0x9F, 0x96, 0xE4, 0xA0, 0x50, - 0xB6, 0x94, 0x2D, 0xC3, 0xE3, 0x36, 0x2B, 0x9D, - 0x6B, 0x7A, 0xEF, 0xF5, 0x68, 0xF2, 0x11, 0xDF, - 0x87, 0xA0, 0x9A, 0xC4, 0x61, 0xFB, 0xA4, 0x1C, - 0x98, 0x3F, 0xC9, 0x52, 0x59, 0x3B, 0x47, 0x4D, - 0xF5, 0x24, 0xA3, 0xD8, 0x63, 0xE1, 0xED, 0xDC, - 0xFD, 0xEB, 0x96, 0xFB, 0xF3, 0xE7, 0x50, 0x9C, - 0x72, 0x61, 0xC7, 0x3C, 0xCE, 0xF2, 0xEB, 0x22, - 0x55, 0x6B, 0x9F, 0x25, 0xE4, 0x45, 0xE1, 0xFB, - 0x3E, 0x2E, 0x4E, 0x92, 0x4F, 0x8A, 0x85, 0xEB, - 0x63, 0x2C, 0x05, 0x0F, 0x9A, 0xEC, 0x0E, 0x9D, - 0x05, 0x81, 0x46, 0x82, 0xEA, 0x74, 0x91, 0xD5, - 0x2A, 0xBC, 0xCC, 0xBB, 0xD6, 0x7F, 0x5F, 0x9A, - 0xD3, 0xBD, 0xEB, 0x14, 0xBA, 0x84, 0x27, 0x13, - 0x32, 0xB5, 0xF3, 0x71, 0xAC, 0x47, 0x19, 0x6B, - 0x5E, 0x43, 0x50, 0xC2, 0xA8, 0x82, 0xF5, 0x97, - 0x9B, 0x27, 0x62, 0xFB, 0xB7, 0xFF, 0x6B, 0xC8, - 0x52, 0x1E, 0xFB, 0x97, 0x39, 0x1E, 0x7F, 0x01, - 0xF8, 0x34, 0x47, 0xAA, 0xB2, 0x64, 0xB5, 0x9E, - 0x28, 0x18, 0xCB, 0x4A, 0x94, 0xBE, 0x6A, 0x43, - 0x5B, 0xAE, 0x21, 0xA4, 0x63, 0x64, 0x46, 0x0C, - 0x6B, 0x36, 0x1C, 0x2A, 0x3B, 0x64, 0xFA, 0xA0, - 0xAB, 0xE3, 0x3B, 0x7D, 0xB0, 0x23, 0x99, 0x21, - 0x55, 0x59, 0xBF, 0xD6, 0xDB, 0xB8, 0xDB, 0x09, - 0x5E, 0xBC, 0x32, 0x3C, 0xAC, 0xAB, 0x1A, 0x63, - 0x32, 0x21, 0x10, 0xD5, 0x8D, 0x7A, 0x5F, 0xCE, - 0x72, 0x8D, 0x2A, 0xED, 0x1D, 0x30, 0x38, 0x5D, - 0x3E, 0x62, 0xC2, 0x8E, 0xC9, 0x9F, 0x8C, 0x50, - 0x3F, 0xC6, 0xCE, 0x86, 0x4D, 0x67, 0x3D, 0x09, - 0xB6, 0x27, 0x14, 0x57, 0x14, 0xED, 0xC9, 0x8F, - 0xAC, 0x9E, 0xAC, 0x6F, 0xB5, 0xB2, 0xE6, 0x8D, - 0x9D, 0x5E, 0xE6, 0x78, 0x77, 0x09, 0x94, 0x35, - 0x5E, 0x3B, 0x64, 0x04, 0x38, 0xD4, 0x5B, 0x04, - 0xB8, 0x6C, 0x33, 0x97, 0xE1, 0x58, 0x54, 0x32, - 0xB3, 0x0F, 0x37, 0x69, 0x39, 0xCE, 0x57, 0x31, - 0x5C, 0x75, 0xA8, 0x94, 0xD0, 0x39, 0x2D, 0xB4, - 0x73, 0xA7, 0xA4, 0x7C, 0xBE, 0x34, 0x03, 0x2D, - 0x99, 0x1D, 0xDF, 0x32, 0x26, 0xB7, 0x45, 0x1B, - 0x03, 0xCD, 0xEE, 0x9D, 0x58, 0xA8, 0xA7, 0x76, - 0x1B, 0x17, 0x42, 0xD9, 0x69, 0x0F, 0x26, 0x3A, - 0x9D, 0x70, 0x9B, 0x4E, 0x81, 0xEB, 0x96, 0x02, - 0xB5, 0xB3, 0x92, 0x31, 0xFE, 0xBC, 0x38, 0x11, - 0x5A, 0x47, 0xED, 0x0A, 0x2A, 0xE2, 0xB8, 0x47, - 0x13, 0x5E, 0x43, 0x97, 0xD5, 0xFA, 0x31, 0x02, - 0x58, 0xE9, 0x9E, 0xB5, 0x3F, 0x85, 0x92, 0x0E, - 0xB9, 0xDB, 0xE0, 0xEE, 0x56, 0x76, 0x64, 0x8F, - 0xF2, 0xE2, 0x47, 0x81, 0xD4, 0xA4, 0x82, 0x43, - 0x69, 0xAE, 0x8E, 0x48, 0x50, 0x84, 0x93, 0x3B, - 0x9C, 0x65, 0xD3, 0x6F, 0xCD, 0x90, 0xA0, 0xD8, - 0xA0, 0xE1, 0x79, 0xCC, 0xD5, 0x1F, 0x71, 0x73, - 0x93, 0xE7, 0xB2, 0xB0, 0x78, 0x17, 0xD7, 0x79, - 0xDE, 0xCC, 0x83, 0x7D, 0x5A, 0xF2, 0x0E, 0xA6, - 0xB1, 0x76, 0x61, 0x15, 0x88, 0x8E, 0xD7, 0xA6, - 0x51, 0xBF, 0x9C, 0xD1, 0x0A, 0xFC, 0xDA, 0x65, - 0xA5, 0x65, 0xFE, 0xB2, 0xED, 0x07, 0x74, 0x42, - 0x4C, 0xF5, 0x42, 0x3D, 0xAF, 0x5F, 0x4D, 0x72, - 0x51, 0xE6, 0x3F, 0x68, 0xCC, 0xC5, 0x2D, 0x89, - 0x01, 0xD8, 0x80, 0xB4, 0xFC, 0xEB, 0x3B, 0xBE, - 0x7C, 0xFA, 0x24, 0x27, 0xE1, 0x05, 0x94, 0x67, - 0xAD, 0xB3, 0x47, 0x7D, 0x28, 0x18, 0xC1, 0xC9, - 0xB8, 0xA1, 0x2A, 0x95, 0xBB, 0x5D, 0xC9, 0x42, - 0x4F, 0x64, 0x94, 0x07, 0x5F, 0x65, 0xD3, 0xA5, - 0x65, 0xEE, 0x67, 0x2C, 0x10, 0x65, 0x81, 0x4D, - 0x7F, 0xAF, 0x2E, 0x97, 0x9E, 0x11, 0xA3, 0xF5, - 0x3E, 0xDE, 0xB1, 0x1D, 0x44, 0x72, 0x90, 0x74, - 0xFD, 0x47, 0x82, 0xA6, 0x04, 0x3E, 0x28, 0x3C, - 0x15, 0xDF, 0xC4, 0x7A, 0x7C, 0xF5, 0x5A, 0xC6, - 0xFB, 0xE4, 0xC2, 0xE0, 0x6E, 0x4C, 0x09, 0x2E, - 0xE3, 0xE6, 0x3A, 0xEF, 0xF6, 0x54, 0xDC, 0x92, - 0xBE, 0x8F, 0x24, 0x8E, 0x70, 0x53, 0x90, 0x3D, - 0x06, 0xA5, 0x0A, 0x72, 0xA0, 0x7B, 0x22, 0x14, - 0x80, 0x43, 0xAD, 0xDC, 0x11, 0xFC, 0xFF, 0xCF, - 0x5E, 0xA4, 0x69, 0x1C, 0x09, 0x09, 0xC3, 0x3D, - 0xF5, 0xE7, 0x05, 0x6F, 0x16, 0x33, 0x75, 0xB4, - 0x9B, 0x7B, 0x26, 0xDB, 0xE7, 0x27, 0x56, 0xD3, - 0x91, 0x82, 0x9D, 0xEB, 0x96, 0x3E, 0xE8, 0x40, - 0xAB, 0x5D, 0x6C, 0xB7, 0xA6, 0x36, 0x07, 0xD4, - 0xE7, 0x7C, 0xD4, 0x5C, 0x36, 0xE4, 0xFC, 0x7C, - 0x8A, 0x36, 0x8D, 0x53, 0x43, 0xD4, 0xAC, 0x0B, - 0x1B, 0xBA, 0x32, 0x88, 0xFA, 0xCE, 0xC1, 0xB9, - 0x34, 0x3C, 0xAC, 0xA0, 0xF4, 0xF2, 0x83, 0xA8, - 0xBB, 0x6F, 0x12, 0xC6, 0xB5, 0x3C, 0xDE, 0xA8, - 0x49, 0x66, 0x97, 0xD7, 0x7E, 0x37, 0xF7, 0xCE, - 0x7C, 0xF8, 0xC8, 0xBB, 0x8C, 0xB5, 0x3B, 0x3F, - 0xB9, 0x51, 0x68, 0x00, 0xD7, 0x2E, 0x1C, 0x10, - 0xAF, 0x9F, 0x3C, 0xD2, 0xAC, 0xE5, 0xBE, 0x94, - 0xB9, 0x60, 0xF5, 0xB2, 0x70, 0x24, 0xE8, 0x8A, - 0x2C, 0xD8, 0x95, 0xAF, 0xAA, 0xA9, 0xA5, 0x2B, - 0xCA, 0xE0, 0x58, 0x44, 0x02, 0x3F, 0xF8, 0x21, - 0x0C, 0x29, 0xB7, 0xD5, 0x08, 0x9E, 0x69, 0x81, - 0xD4, 0x6C, 0xC5, 0x0B, 0xF6, 0xEF, 0xAB, 0x01, - 0xEA, 0xDF, 0x36, 0x2C, 0x5C, 0xFB, 0xEB, 0xC8, - 0x4F, 0x71, 0x80, 0xD7, 0x00, 0xC9, 0x32, 0x5D, - 0x02, 0x4F, 0x96, 0x94, 0x71, 0xCD, 0x98, 0xC4, - 0x25, 0x7A, 0x92, 0xF1, 0x9B, 0xA0, 0x34, 0x30, - 0x6C, 0x41, 0x59, 0xD5, 0x01, 0x5D, 0xD6, 0x56, - 0xEA, 0x05, 0xF2, 0xFC, 0xF8, 0x58, 0xFA, 0x12, - 0x9C, 0x5A, 0x5C, 0xD5, 0x3D, 0xC7, 0x5D, 0x1B, - 0x99, 0x2A, 0x6A, 0x4C, 0xF9, 0xEA, 0x9D, 0x70, - 0x53, 0xBC, 0xBE, 0xAD, 0x61, 0xC7, 0x2D, 0x77, - 0xEF, 0x61, 0xC7, 0xBE, 0x9C, 0x73, 0xC1, 0xD5, - 0xD4, 0x5C, 0x5F, 0x21, 0x6A, 0x5C, 0xEE, 0x78, - 0xAA, 0xC6, 0x6C, 0x56, 0xDB, 0x38, 0x5A, 0x94, - 0x12, 0xB8, 0x73, 0x7C, 0xDF, 0x9A, 0x27, 0xCD, - 0xC5, 0xD1, 0xD3, 0xCA, 0x0E, 0x37, 0x0A, 0xC1, - 0x6F, 0xAD, 0xE3, 0x32, 0x94, 0x6C, 0x20, 0xB5, - 0xED, 0xE6, 0x2D, 0x34, 0x39, 0x58, 0xD2, 0x1E, - 0x63, 0x8D, 0xFA, 0xFF, 0xB5, 0xE8, 0x40, 0xC8, - 0x42, 0x38, 0x7A, 0x01, 0x80, 0xFF, 0x52, 0x3F, - 0xE9, 0x89, 0x63, 0xAD, 0x91, 0x5F, 0xCE, 0x0A, - 0x47, 0x87, 0xF9, 0x6D, 0xD7, 0x79, 0xEF, 0xCE, - 0x10, 0x7B, 0x73, 0x43, 0xBE, 0x51, 0xA0, 0xDF, - 0xE5, 0xEC, 0xA9, 0x63, 0xF6, 0x5E, 0x72, 0x36, - 0x22, 0x86, 0xEE, 0x4E, 0x4A, 0x76, 0xFD, 0x86, - 0xBA, 0xE6, 0xD6, 0xC4, 0xD2, 0xE6, 0xFF, 0xB2, - 0x5B, 0x39, 0xF9, 0xC3, 0x29, 0xA8, 0x61, 0x3A, - 0x33, 0x34, 0x89, 0xC9, 0x83, 0xF9, 0xB2, 0x70, - 0x21, 0x54, 0x44, 0x94, 0x70, 0xAD, 0x70, 0x18, - 0x84, 0x38, 0x91, 0xFB, 0xDE, 0x5E, 0x3D, 0xE3, - 0xB2, 0xA7, 0x3C, 0x1D, 0x49, 0xA6, 0x66, 0x7C, - 0x4B, 0xEB, 0xB0, 0xA7, 0x7C, 0xC5, 0xAE, 0x45, - 0x1F, 0xBE, 0x0E, 0x2F, 0x11, 0xDC, 0x92, 0x08, - 0xAA, 0x18, 0x38, 0xFE, 0x61, 0xBE, 0x9D, 0xC3, - 0x3A, 0x1F, 0x2F, 0xB6, 0x6E, 0xB6, 0x54, 0x97, - 0x74, 0x06, 0xBC, 0x12, 0x2D, 0x64, 0x18, 0x14, - 0x25, 0x5A, 0xCB, 0x7B, 0xD7, 0x9D, 0xC3, 0x2C, - 0xC2, 0x0B, 0x19, 0x10, 0xD2, 0x57, 0xF0, 0xDF, - 0xA4, 0x95, 0xA4, 0x5A, 0xA0, 0x2D, 0x0F, 0xA0, - 0xBC, 0xF7, 0x60, 0x7F, 0x38, 0xE1, 0x17, 0x0D, - 0x36, 0x08, 0xF5, 0xF9, 0x75, 0x28, 0x75, 0xAC, - 0xA9, 0x2B, 0x75, 0xC4, 0x41, 0xE0, 0x0D, 0x5C, - 0xBC, 0x5F, 0x49, 0x16, 0x25, 0x38, 0x16, 0xE1, - 0x0C, 0x2C, 0x9C, 0x63, 0xA8, 0x5F, 0x70, 0xF4, - 0x64, 0xC7, 0x10, 0x19, 0x52, 0x19, 0x6E, 0x9B, - 0x5C, 0x09, 0x4F, 0xEE, 0xB6, 0x7C, 0x85, 0xC9, - 0x6E, 0xCB, 0x33, 0x32, 0x42, 0x9D, 0x57, 0x18, - 0xE6, 0x55, 0x94, 0x74, 0x02, 0xEE, 0xEB, 0xAA, - 0xF7, 0xD3, 0x45, 0x7A, 0x49, 0x6F, 0x83, 0x89, - 0x00, 0xE4, 0xAA, 0x20, 0x87, 0x10, 0xAD, 0xC0, - 0x0E, 0xF5, 0x93, 0x57, 0xE5, 0x45, 0x7A, 0xBD, - 0x82, 0x87, 0x50, 0x0F, 0xE1, 0x2C, 0x0C, 0x6D, - 0xEE, 0xC8, 0x94, 0xB8, 0x39, 0xF3, 0x3C, 0xFE, - 0x7E, 0xC1, 0x0F, 0xB4, 0x67, 0xA2, 0xDF, 0xC6, - 0x9D, 0xB5, 0x9D, 0xB8, 0x72, 0x50, 0xBD, 0xB3, - 0xDB, 0xF6, 0x87, 0x5E, 0x26, 0x93, 0xF0, 0xD4, - 0x0D, 0x68, 0xA4, 0x8B, 0xBD, 0x2C, 0x6E, 0xD8, - 0x4F, 0x81, 0x5D, 0x0D, 0xAC, 0x72, 0x65, 0xEC, - 0x4E, 0xF2, 0x4E, 0x5F, 0x67, 0x04, 0xF3, 0x08, - 0x29, 0x4D, 0xB2, 0xE2, 0xD5, 0x9F, 0xD4, 0xB9, - 0x13, 0xB4, 0x33, 0x80, 0x27, 0x84, 0x7E, 0xF4 + 0x09, 0xB4, 0x88, 0x7D, 0x97, 0xBC, 0xF6, 0x37, + 0x9C, 0xC5, 0x9B, 0x61, 0x62, 0xC1, 0xE8, 0xBF, + 0x05, 0x60, 0xBF, 0x44, 0xD6, 0x18, 0x09, 0x17, + 0x0E, 0x6E, 0x28, 0xF7, 0x06, 0x69, 0xA3, 0xE9, + 0x49, 0x64, 0x38, 0xE8, 0x91, 0x57, 0x35, 0xAD, + 0xAE, 0xB4, 0x45, 0xCF, 0xDB, 0x7D, 0x89, 0xB3, + 0x8C, 0x04, 0x8F, 0x4C, 0x3E, 0x00, 0x58, 0x15, + 0x14, 0xC5, 0xFD, 0x19, 0x8B, 0x2D, 0x17, 0x39, + 0xE8, 0x83, 0xB8, 0x78, 0xD5, 0x6B, 0xB4, 0x12, + 0x64, 0xBE, 0x41, 0xD3, 0xD5, 0x15, 0x65, 0xE2, + 0xE9, 0xCA, 0xE3, 0x31, 0x84, 0xA8, 0x99, 0xF6, + 0x2D, 0xD5, 0x7D, 0x07, 0x40, 0x0E, 0x98, 0xE5, + 0x86, 0x87, 0xA9, 0xB2, 0x2F, 0xA3, 0x17, 0xEE, + 0xD1, 0x34, 0xCA, 0x72, 0x14, 0xBF, 0xF0, 0x21, + 0xDD, 0x21, 0x62, 0xB1, 0x83, 0x09, 0x1D, 0x15, + 0xF2, 0x63, 0xB7, 0x29, 0x82, 0x14, 0x42, 0x3C, + 0x6B, 0xB6, 0x96, 0xD7, 0x5C, 0x20, 0xD9, 0xEA, + 0xCD, 0x0A, 0x03, 0xE4, 0x26, 0x2C, 0x4B, 0x08, + 0xBE, 0x39, 0xFA, 0x21, 0x54, 0xBD, 0x6E, 0x50, + 0x25, 0xFF, 0x79, 0x1E, 0x88, 0x5F, 0x22, 0x26, + 0xE3, 0xCF, 0x48, 0xF7, 0xB5, 0xEB, 0x04, 0xFB, + 0xE9, 0xEC, 0xF7, 0x5B, 0x19, 0xE1, 0xD1, 0x5C, + 0x30, 0x5E, 0x92, 0x26, 0x0A, 0xB0, 0xD6, 0xAE, + 0x7D, 0xBA, 0x7B, 0xBE, 0x73, 0xB6, 0xBC, 0x18, + 0x1C, 0xF9, 0x33, 0x84, 0x0C, 0xC1, 0x0A, 0x00, + 0x05, 0x02, 0x28, 0xFA, 0x46, 0xA2, 0x63, 0x6D, + 0xD9, 0xA9, 0x09, 0x47, 0xE9, 0xF1, 0x3A, 0x93, + 0xEF, 0x4C, 0x62, 0xBE, 0x37, 0x4D, 0x76, 0xD1, + 0xFD, 0xBB, 0xC5, 0xD8, 0xB5, 0x5E, 0x72, 0x9F, + 0xA5, 0x86, 0x65, 0xAA, 0x07, 0xB9, 0x0C, 0x8C, + 0xDD, 0xD6, 0x1C, 0x56, 0x6B, 0x0D, 0x7E, 0xD6, + 0x57, 0x70, 0x49, 0x2E, 0xA0, 0x71, 0x3E, 0x1E, + 0xD4, 0x6A, 0xC7, 0xAD, 0x15, 0x03, 0xC5, 0x6D, + 0x90, 0x52, 0xD2, 0xC9, 0x4D, 0x49, 0xE4, 0x41, + 0x6A, 0xC9, 0x2B, 0x70, 0x39, 0x6F, 0x76, 0xF6, + 0xFB, 0x48, 0x10, 0x45, 0x68, 0x17, 0x25, 0xA6, + 0x8C, 0xB3, 0x56, 0x37, 0x7F, 0xB2, 0x31, 0xAB, + 0x8F, 0x3E, 0xB9, 0xA4, 0x98, 0x2F, 0xFF, 0x18, + 0x36, 0x47, 0x3B, 0xCB, 0xDA, 0xB6, 0x87, 0x2D, + 0x22, 0x94, 0x67, 0xEF, 0xB9, 0x36, 0x62, 0x61, + 0xFE, 0xB1, 0x48, 0xBA, 0x9B, 0x7D, 0xB9, 0xC4, + 0xFE, 0x0B, 0xB8, 0x86, 0x12, 0xAB, 0xB8, 0xFD, + 0x61, 0x09, 0x6F, 0x18, 0x19, 0x60, 0x4D, 0x55, + 0xDF, 0x60, 0x20, 0x46, 0x4D, 0x3F, 0x09, 0x2C, + 0xFC, 0xA5, 0x98, 0x12, 0x08, 0x22, 0x18, 0x56, + 0x68, 0x99, 0xA5, 0x6A, 0x3C, 0x63, 0x3C, 0xC8, + 0x1F, 0x88, 0xAD, 0xB2, 0xE1, 0x41, 0x4E, 0xF3, + 0x85, 0x0D, 0x10, 0xBF, 0x5A, 0x77, 0xAC, 0xE7, + 0x24, 0xD6, 0xC1, 0xF3, 0x88, 0x92, 0x87, 0x44, + 0xB3, 0xE5, 0x42, 0xAE, 0x49, 0x1C, 0xD5, 0x6A, + 0x64, 0x21, 0x3F, 0x1D, 0x3C, 0xC9, 0x0B, 0x29, + 0x10, 0x5F, 0x43, 0xD2, 0x37, 0xC8, 0x3D, 0x5F, + 0xB8, 0x29, 0x32, 0x5C, 0x83, 0xE6, 0x54, 0x57, + 0x77, 0x76, 0x39, 0x2F, 0x85, 0x36, 0xAA, 0x9D, + 0xAE, 0x87, 0x24, 0x07, 0xAB, 0xAA, 0xA9, 0xAC, + 0xC2, 0x2A, 0x68, 0x12, 0xCE, 0xA7, 0x4C, 0x0B, + 0xA6, 0x7E, 0xAF, 0x4A, 0x41, 0x01, 0x52, 0x97, + 0x5E, 0x9A, 0x83, 0xEE, 0x44, 0x69, 0x29, 0x53, + 0x17, 0xBE, 0xD1, 0x05, 0x51, 0xBA, 0x32, 0xE6, + 0x5A, 0xFC, 0x8C, 0x8E, 0x68, 0xDD, 0x55, 0x42, + 0x0C, 0x50, 0x2D, 0x93, 0x7D, 0xAD, 0xD2, 0xEF, + 0xA2, 0xCB, 0xFD, 0x1F, 0x73, 0x9F, 0xC0, 0xAB, + 0x2B, 0x26, 0x54, 0xFA, 0xE0, 0x8C, 0x0C, 0x7F, + 0x8E, 0xDD, 0x43, 0xCF, 0x9F, 0xF0, 0xB0, 0x1D, + 0x98, 0x4D, 0x49, 0x18, 0x52, 0xA3, 0x72, 0xE9, + 0xFE, 0xFD, 0xCC, 0x1B, 0xC1, 0x6C, 0xDB, 0x52, + 0x39, 0xAE, 0x10, 0x01, 0x15, 0x5F, 0x89, 0x56, + 0x30, 0x51, 0xCE, 0x47, 0x99, 0x6C, 0x5A, 0xEE, + 0xB2, 0x19, 0x0E, 0xA1, 0x8F, 0x7F, 0x73, 0x40, + 0x42, 0xDE, 0x68, 0xE9, 0x88, 0x36, 0x7D, 0x89, + 0x35, 0x5D, 0x9D, 0x83, 0x77, 0xBA, 0xF9, 0x64, + 0x79, 0x78, 0xEB, 0x2E, 0x49, 0x2A, 0xD0, 0x21, + 0xC5, 0x69, 0xAE, 0x8B, 0xA6, 0x9B, 0x15, 0xF1, + 0xFC, 0xF7, 0x03, 0x9A, 0x7E, 0x64, 0xAF, 0x10, + 0xAB, 0xF3, 0xEA, 0x45, 0xB7, 0x22, 0x2F, 0x96, + 0x59, 0xE3, 0x33, 0x73, 0x37, 0x2E, 0x1D, 0xB1, + 0x86, 0xD2, 0xC2, 0xA0, 0xD7, 0x54, 0x51, 0xC4, + 0x78, 0xAE, 0xF3, 0x3E, 0x59, 0x49, 0xF2, 0x40, + 0x04, 0x0C, 0x2A, 0xFC, 0x44, 0xB1, 0xD3, 0xA0, + 0x2A, 0x6D, 0x2F, 0x87, 0x90, 0x2A, 0x28, 0x0E, + 0x27, 0xA2, 0x0D, 0x4E, 0x57, 0xF8, 0x89, 0x66, + 0x27, 0x00, 0xDB, 0x8A, 0x9D, 0x24, 0x99, 0x57, + 0xA7, 0xDB, 0x43, 0x7C, 0xD4, 0x80, 0xDD, 0xC0, + 0x58, 0x84, 0xFB, 0x23, 0xF8, 0x68, 0x26, 0x8E, + 0xAC, 0xE3, 0x4E, 0xED, 0x27, 0x4A, 0x92, 0x7D, + 0x9D, 0x84, 0xF1, 0xEA, 0x57, 0xEA, 0xB1, 0xA8, + 0x13, 0xB5, 0xE6, 0xAA, 0xBE, 0x9E, 0xD2, 0x61, + 0x0B, 0xC6, 0xF7, 0x2E, 0x32, 0x0C, 0xDE, 0xC4, + 0xF9, 0x95, 0x23, 0xF9, 0x3F, 0xA4, 0x48, 0xDC, + 0x1F, 0xBB, 0xDD, 0x25, 0x9B, 0x10, 0x2F, 0x5D, + 0xC9, 0x95, 0x5A, 0xFA, 0x0C, 0x41, 0x60, 0x4D, + 0x83, 0xDD, 0x1C, 0x2D, 0x22, 0x95, 0xEF, 0x44, + 0x61, 0x45, 0x6B, 0xAE, 0x86, 0x90, 0x5C, 0x4C, + 0x30, 0xD8, 0xA9, 0xFA, 0x48, 0xC9, 0x0F, 0x37, + 0xA1, 0x9C, 0x41, 0xA2, 0xD5, 0x98, 0x8F, 0x13, + 0xD5, 0x13, 0x44, 0xEC, 0x30, 0xA4, 0xA4, 0x62, + 0x19, 0xFE, 0x84, 0x11, 0x37, 0xD5, 0xAA, 0x1F, + 0x51, 0xE6, 0xC4, 0x44, 0x16, 0x8A, 0xF3, 0x98, + 0x90, 0xB6, 0xFA, 0x40, 0x0D, 0x67, 0xF4, 0x80, + 0x6F, 0x5B, 0xBD, 0x44, 0x47, 0x03, 0x07, 0x4A, + 0x7A, 0x11, 0x39, 0xC7, 0x17, 0x46, 0xD7, 0xC4, + 0xCE, 0xB3, 0xC9, 0x11, 0xF5, 0x25, 0x7E, 0x3E, + 0x53, 0xEB, 0xFA, 0x5A, 0xA8, 0xF2, 0x27, 0x80, + 0x9D, 0x44, 0xEE, 0x7D, 0xE1, 0x3C, 0x02, 0x79, + 0x24, 0xDD, 0x60, 0x15, 0x3B, 0x30, 0xAA, 0x76, + 0xDD, 0x96, 0xA7, 0xC5, 0xAC, 0xC5, 0x9B, 0x62, + 0x79, 0x19, 0x50, 0x7B, 0xF1, 0x42, 0x57, 0xAE, + 0x7A, 0x26, 0x24, 0x3C, 0x16, 0x83, 0xB2, 0x8D, + 0x1B, 0x14, 0xB5, 0x01, 0xAD, 0x05, 0x9B, 0x4D, + 0x52, 0x2A, 0x57, 0x99, 0x1E, 0x55, 0x39, 0xCE, + 0xF1, 0x8C, 0xEB, 0x5C, 0x26, 0xD6, 0x60, 0xB8, + 0x82, 0x24, 0x54, 0xC9, 0xC4, 0x2A, 0x95, 0xE6, + 0xF7, 0x2B, 0x84, 0xF7, 0x8A, 0xB9, 0x9F, 0x51, + 0xEC, 0x49, 0x78, 0x9F, 0x9D, 0xB4, 0xC1, 0x28, + 0xB0, 0x31, 0x8F, 0xFF, 0xC8, 0x2D, 0x95, 0xCA, + 0xD2, 0x77, 0xF1, 0x1E, 0x14, 0xF1, 0xEF, 0x87, + 0x14, 0x14, 0x88, 0x11, 0x22, 0xA9, 0xB1, 0x1B, + 0xDF, 0xAE, 0x4A, 0x7A, 0xBC, 0x8E, 0x75, 0x75, + 0x5A, 0xB1, 0x37, 0x41, 0xDF, 0xAC, 0xD6, 0x64, + 0x29, 0x3D, 0x1A, 0x32, 0x6B, 0xF5, 0xED, 0x5A, + 0xBB, 0xB1, 0x53, 0xEB, 0xE6, 0x99, 0x6D, 0xD6, + 0x22, 0xF0, 0xA8, 0xCB, 0x47, 0x39, 0x69, 0xA5, + 0x03, 0x66, 0xBD, 0x0B, 0x01, 0xC5, 0xC7, 0x3A, + 0x89, 0x2B, 0x8E, 0x26, 0xCE, 0x08, 0xF7, 0x5F, + 0xF8, 0x01, 0xB6, 0xDE, 0xF0, 0x41, 0xE1, 0x71, + 0x3B, 0xE6, 0xDF, 0x0E, 0xFB, 0x51, 0x58, 0x7B, + 0xE5, 0xFB, 0xEA, 0x72, 0x7E, 0x00, 0xD7, 0x17, + 0x64, 0x7D, 0xD5, 0x39, 0x07, 0x9D, 0xE1, 0x8A, + 0xE7, 0xBE, 0xD1, 0x2B, 0x91, 0xAF, 0x8D, 0xBB, + 0x1B, 0x8B, 0x32, 0xD2, 0x86, 0x0B, 0xAF, 0x40, + 0xAF, 0x8A, 0x0B, 0xBF, 0xE0, 0x28, 0x87, 0xEB, + 0x5D, 0xBE, 0x7A, 0xB1, 0xAF, 0xC4, 0x1D, 0xA7, + 0x9B, 0x01, 0x6A, 0xA1, 0x6E, 0xDA, 0x28, 0x13, + 0x21, 0xCA, 0xA5, 0xDA, 0x64, 0x4F, 0xD8, 0x65, + 0x8A, 0x7B, 0x70, 0x21, 0x81, 0x00, 0x14, 0x31, + 0x56, 0x0D, 0xD6, 0x3C, 0xB2, 0x1E, 0x5F, 0xF7, + 0x5C, 0x3F, 0x72, 0x50, 0x45, 0x6B, 0xE0, 0x8C, + 0x0D, 0x5E, 0x34, 0xC3, 0xBD, 0xE2, 0xF6, 0x06, + 0xA2, 0xBF, 0x34, 0x17, 0x76, 0x8D, 0x24, 0xB2, + 0x37, 0x39, 0xEA, 0x86, 0xCB, 0xEF, 0xDD, 0xA3, + 0x43, 0x88, 0xBC, 0x1F, 0x91, 0x8F, 0x95, 0x1E, + 0x15, 0xE4, 0x3B, 0x13, 0x85, 0xA7, 0xBC, 0xC5, + 0x59, 0xF9, 0x49, 0x2C, 0x72, 0x13, 0xA1, 0x42, + 0x27, 0xE0, 0x93, 0xE9, 0x29, 0xF3, 0x2D, 0x1E, + 0xFB, 0xE7, 0xF1, 0xEE, 0x57, 0xC4, 0x9C, 0x90, + 0x55, 0x62, 0x3E, 0xA4, 0x2E, 0xC6, 0xC7, 0x9D, + 0x7F, 0xCE, 0x71, 0xFA, 0x74, 0x76, 0x07, 0x56, + 0x6D, 0xDA, 0x69, 0xF6, 0x9D, 0xAF, 0x68, 0x11, + 0x59, 0x19, 0xC6, 0x32, 0x2E, 0xBB, 0x42, 0xC8, + 0xC0, 0x89, 0x33, 0x8C, 0x9E, 0x0C, 0x53, 0x56, + 0x5B, 0xCB, 0xE7, 0x2F, 0xBE, 0x47, 0x26, 0x68, + 0x7B, 0x07, 0x87, 0x07, 0x18, 0x06, 0xC5, 0xA6, + 0xC1, 0x49, 0xC8, 0x2B, 0x66, 0x8A, 0xA6, 0x4A, + 0x7B, 0xA0, 0xCC, 0xC1, 0xCC, 0x49, 0xA1, 0xEE, + 0xE9, 0x45, 0x3D, 0x04, 0x33, 0x6E, 0x5D, 0xC8, + 0x11, 0xE0, 0x38, 0x92, 0xF7, 0xF4, 0x66, 0x88, + 0xEC, 0xEF, 0xD0, 0x4F, 0x18, 0x76, 0xF7, 0x11, + 0x17, 0x12, 0xB5, 0x95, 0xED, 0x62, 0xDA, 0x00, + 0x67, 0x8F, 0x9E, 0x37, 0x86, 0xB5, 0xC1, 0xA5, + 0x09, 0x5B, 0xE8, 0x71, 0x0D, 0xCF, 0xA4, 0x16, + 0x52, 0x56, 0x50, 0x9E, 0x00, 0x14, 0x3A, 0x6F, + 0x11, 0x72, 0xFA, 0xBE, 0x8B, 0xF2, 0x1E, 0x5F, + 0xCE, 0x7C, 0x79, 0xC1, 0xA4, 0x4B, 0x4B, 0x15, + 0x25, 0xA0, 0x76, 0xFF, 0xB8, 0xDD, 0x90, 0x66 }; static const byte msg_44[] = { - 0x5C, 0x70, 0x7F, 0xBF, 0xF4, 0xFF, 0xE5, 0x9B, - 0x09, 0xAA, 0xF8, 0xDB, 0x21, 0xAD, 0xBE, 0xBA, - 0xC6, 0xB2, 0x65, 0x37, 0x9A, 0x9A, 0x43, 0x3A, - 0xA8, 0x23, 0x2B, 0x13, 0x9B, 0xBD, 0x46, 0x37, - 0x30, 0x60, 0xA7, 0x5B, 0xC4, 0x48, 0x63, 0x5F, - 0x41, 0x35, 0x38, 0x69, 0xF9, 0x6F, 0xB5, 0x65, - 0x26, 0xDB, 0xAE, 0xB7, 0x5C, 0xFE, 0x2C, 0x03, - 0xCB, 0x43, 0x08, 0x58, 0x5E, 0x27, 0xD1, 0x42, - 0x14, 0xF2, 0x4B, 0xD7, 0x13, 0xE4, 0x96, 0x74, - 0x6A, 0xC1, 0x36, 0xC7, 0x9D, 0x0F, 0x7D, 0xB0, - 0x7B, 0x8A, 0x3A, 0x6D, 0x00, 0x5B, 0x29, 0x7B, - 0x37, 0xBA, 0x3F, 0x5B, 0xBD, 0xCE, 0x21, 0x77, - 0xFD, 0xD6, 0x78, 0x77, 0x20, 0x31, 0xF0, 0x60, - 0x49, 0xAE, 0x12, 0x86, 0x7A, 0x64, 0xBD, 0x0B, - 0x9E, 0xC6, 0x26, 0x80, 0x9E, 0xCE, 0x19, 0x8D, - 0x6A, 0x6B, 0x09, 0x03, 0x45, 0xDF, 0x22, 0x7D + 0x3A, 0xFD, 0x7F, 0xF8, 0xCA, 0xD3, 0xAC, 0xBD, + 0xF9, 0x77, 0x31, 0x26, 0x1C, 0x7A, 0x1C, 0x96, + 0x9D, 0x50, 0x16, 0xF1, 0x7D, 0x3E, 0x7F, 0x83, + 0xD2, 0x44, 0x1A, 0xF9, 0x01, 0x4B, 0x63, 0x47, + 0x7B, 0x14, 0xA6, 0x41, 0x31, 0x50, 0xFA, 0xD7, + 0xC8, 0x44, 0x39, 0xBC, 0x88, 0x66, 0x2C, 0x5E, + 0x93, 0x1F, 0x06, 0xB9, 0x51, 0x41, 0x90, 0xE1, + 0x3F, 0xB0, 0x49, 0xC4, 0xAB, 0x74, 0x01, 0x32, + 0x33, 0xB9, 0x8D, 0x48, 0xD9, 0xAF, 0xB6, 0xA3, + 0x0A, 0x67, 0x33, 0x0E, 0x1F, 0xBE, 0x33, 0x1B, + 0x09, 0xC5, 0x6D, 0x03, 0x7E, 0x97, 0x01, 0x08, + 0x5D, 0x80, 0xF1, 0xE7, 0xF4, 0x04, 0x3E, 0xFB, + 0x53, 0x58, 0x7A, 0xBB, 0x82, 0x36, 0x24, 0x01, + 0x23, 0x84, 0x51, 0x52, 0x49, 0xEE, 0x61, 0x30, + 0x97, 0x3D, 0xC9, 0xEA, 0x6F, 0x55, 0x8B, 0xAE, + 0x75, 0x10, 0x7E, 0xFD, 0xB1, 0xD9, 0x28, 0x5B }; static const byte sig_44[] = { - 0x08, 0xF0, 0x10, 0xFA, 0x63, 0x3F, 0x2B, 0xA1, - 0x46, 0x81, 0x34, 0xC4, 0xBC, 0xAB, 0x62, 0x17, - 0x0B, 0x64, 0xEA, 0x00, 0x2D, 0xD6, 0x8A, 0xE5, - 0xC2, 0x45, 0x29, 0xB9, 0xEC, 0x6F, 0x3B, 0xF2, - 0xDC, 0x2F, 0xC7, 0x34, 0x5A, 0x1E, 0xFE, 0x0C, - 0xCA, 0xB9, 0x6A, 0xD8, 0xDA, 0xBA, 0xAA, 0x80, - 0x90, 0xDC, 0x8C, 0x6C, 0x22, 0xFF, 0xC4, 0x90, - 0x9E, 0xE9, 0xA5, 0x45, 0xFC, 0xE8, 0x64, 0x53, - 0x9E, 0xC4, 0x17, 0xE1, 0xB2, 0x1A, 0x31, 0x40, - 0x26, 0x9D, 0x5E, 0x03, 0x6A, 0xC6, 0x09, 0x19, - 0xDD, 0xB3, 0x63, 0xE0, 0x35, 0xCD, 0xB4, 0x2E, - 0x25, 0x38, 0x6E, 0x6C, 0x76, 0xA9, 0x19, 0x75, - 0x68, 0x6E, 0xB7, 0xAB, 0xAD, 0x8F, 0x63, 0x64, - 0x97, 0x4E, 0x56, 0x82, 0x30, 0x45, 0x86, 0x22, - 0x64, 0xDA, 0xD2, 0xAE, 0x54, 0x70, 0x5C, 0xF1, - 0xEB, 0xD1, 0x84, 0x8D, 0xFF, 0x86, 0x15, 0xE6, - 0x20, 0xCE, 0x14, 0x89, 0xEF, 0xFA, 0x2E, 0xF8, - 0x60, 0xCA, 0x53, 0x52, 0xE4, 0xD5, 0xC8, 0x2E, - 0x50, 0xD5, 0x9D, 0x90, 0xA6, 0x12, 0xC7, 0xF1, - 0x70, 0x0D, 0xE2, 0x89, 0x5B, 0x31, 0x6A, 0x21, - 0x79, 0x9C, 0xBE, 0x77, 0x6E, 0xA6, 0xBF, 0x51, - 0x05, 0x2A, 0x83, 0x50, 0x7E, 0x86, 0x14, 0xD1, - 0x50, 0x53, 0x1F, 0x1C, 0x5E, 0x50, 0x24, 0x69, - 0x6C, 0x91, 0x55, 0x35, 0x19, 0x6F, 0xE0, 0xDC, - 0xB5, 0xD6, 0x48, 0x7E, 0x78, 0x61, 0x59, 0x2C, - 0xD0, 0x1B, 0x42, 0x58, 0xAF, 0x7A, 0x39, 0xCA, - 0x02, 0x1C, 0x50, 0xEF, 0xE9, 0xE1, 0xDE, 0x31, - 0x8D, 0x09, 0x51, 0xC9, 0xDB, 0x16, 0xF9, 0xB9, - 0x45, 0x54, 0x81, 0x16, 0xD7, 0x14, 0xD8, 0xBE, - 0x9C, 0xCA, 0x53, 0xFE, 0x8F, 0x24, 0x99, 0x0D, - 0xBA, 0x7F, 0x99, 0x42, 0x11, 0x9B, 0x32, 0xDD, - 0x93, 0x5C, 0xBA, 0x2D, 0xD3, 0xB3, 0xF2, 0x48, - 0x13, 0x9C, 0x80, 0xBB, 0x8D, 0xF4, 0xC7, 0xAA, - 0xEB, 0xC6, 0xFD, 0xB8, 0x35, 0x95, 0x87, 0x2B, - 0x9E, 0xCF, 0x48, 0xF3, 0x2D, 0xFF, 0x70, 0xF4, - 0xCE, 0x35, 0x68, 0x7E, 0x9D, 0xDF, 0xD5, 0x0C, - 0xCD, 0xE3, 0x51, 0xB0, 0x90, 0x86, 0xE5, 0xD1, - 0xF1, 0x3B, 0x72, 0x42, 0x73, 0x07, 0x03, 0xE2, - 0xFB, 0x40, 0x3F, 0xD4, 0xC8, 0x30, 0xB6, 0x86, - 0x49, 0x8A, 0x17, 0xDB, 0x8F, 0x46, 0x6C, 0x3A, - 0xC3, 0x49, 0xCD, 0x59, 0x68, 0x81, 0x66, 0x03, - 0xD7, 0x24, 0xAF, 0x1F, 0x77, 0xC7, 0xFB, 0xF7, - 0x83, 0xCD, 0xA2, 0x6D, 0x35, 0x0C, 0x8B, 0xBC, - 0x29, 0x3A, 0x7F, 0xAC, 0xB9, 0xF9, 0x78, 0x50, - 0x6A, 0x67, 0xFC, 0xDC, 0x6F, 0x01, 0x65, 0x06, - 0x82, 0x81, 0xB0, 0x7D, 0x25, 0x5D, 0x74, 0x0B, - 0x68, 0x5F, 0x51, 0x2C, 0x82, 0xF3, 0x1D, 0x92, - 0xF6, 0xA9, 0xA9, 0x6A, 0x77, 0x57, 0x58, 0xAA, - 0x7C, 0xBE, 0x35, 0xF4, 0x56, 0xDE, 0x42, 0x01, - 0x2D, 0xB8, 0x28, 0x83, 0x7B, 0xA0, 0xA9, 0x7D, - 0xC3, 0x30, 0x13, 0x52, 0xD0, 0xA1, 0xC8, 0xA1, - 0x2C, 0x51, 0x49, 0xAE, 0xA8, 0x04, 0xCB, 0xA8, - 0x66, 0x01, 0x26, 0xDF, 0x2D, 0x1C, 0x21, 0xA2, - 0x4E, 0xBD, 0xA5, 0x48, 0x2A, 0x2D, 0x56, 0x60, - 0x20, 0x98, 0x4D, 0x15, 0x7D, 0x02, 0xB6, 0x3A, - 0xE4, 0x11, 0xAE, 0xF7, 0x3E, 0x5D, 0x56, 0x4F, - 0x6A, 0xA3, 0x0A, 0xEA, 0xCC, 0x35, 0x8A, 0xB7, - 0xC4, 0x8F, 0x25, 0x3E, 0x42, 0x41, 0x2B, 0xA5, - 0x1F, 0xA7, 0x3B, 0x87, 0x22, 0x86, 0x79, 0xD5, - 0xE5, 0x2A, 0xA2, 0xCD, 0x68, 0xCE, 0xB8, 0x18, - 0x6D, 0xEF, 0x1C, 0x36, 0x7F, 0x75, 0x50, 0x36, - 0x1B, 0x58, 0xEB, 0x32, 0xA1, 0xC8, 0xAF, 0x47, - 0xE1, 0x26, 0x73, 0x1F, 0x5D, 0x73, 0x30, 0x13, - 0x2F, 0xC7, 0x8B, 0xA3, 0x03, 0xB4, 0xA8, 0x86, - 0x25, 0x29, 0xD1, 0x75, 0x10, 0xEE, 0x7F, 0x56, - 0xBC, 0x0D, 0x59, 0xB4, 0xAE, 0xC9, 0x44, 0x0A, - 0xF7, 0x0D, 0xBF, 0x17, 0x6A, 0x22, 0x9C, 0x75, - 0x2B, 0x3E, 0x22, 0xB8, 0x2F, 0x4B, 0x68, 0xF1, - 0x07, 0xE3, 0x47, 0x47, 0x21, 0x9C, 0xA3, 0x5B, - 0x31, 0x0A, 0x14, 0xD9, 0x7C, 0xA8, 0xC0, 0xC6, - 0x5C, 0xAD, 0x05, 0xD6, 0x15, 0xD3, 0xEC, 0xEC, - 0x32, 0xC2, 0xFF, 0xF4, 0x96, 0x9C, 0xC8, 0x65, - 0xA0, 0xB2, 0xD6, 0xF4, 0x98, 0xBB, 0xB1, 0x4E, - 0xA5, 0x11, 0x3B, 0x4E, 0xA8, 0xEB, 0x90, 0xAB, - 0xD8, 0x25, 0x10, 0xE3, 0x66, 0xB5, 0xA5, 0x11, - 0x60, 0xA0, 0xCB, 0xDF, 0x77, 0x8A, 0x80, 0x4C, - 0x07, 0x9B, 0x1B, 0x45, 0x95, 0x29, 0x1D, 0x88, - 0x85, 0xAC, 0x32, 0x94, 0x26, 0x87, 0x12, 0x0A, - 0x2F, 0x9E, 0xAE, 0x69, 0x79, 0x25, 0x5A, 0x50, - 0xF4, 0xDB, 0x15, 0x20, 0x9F, 0x7A, 0x7A, 0xF2, - 0xE5, 0x8A, 0x63, 0x6A, 0xDD, 0xBD, 0x06, 0xCB, - 0x42, 0xF0, 0x20, 0xA9, 0x3B, 0x52, 0xD8, 0x68, - 0x37, 0x71, 0x07, 0xB8, 0x5B, 0xFE, 0xA0, 0xEC, - 0xBD, 0x75, 0xFF, 0x9C, 0x89, 0xDF, 0x01, 0xE7, - 0x17, 0x7D, 0xA7, 0xE8, 0x27, 0x9E, 0xA2, 0x41, - 0x66, 0xE6, 0xDB, 0x8B, 0x5A, 0x3F, 0x6C, 0xC9, - 0xE3, 0x4F, 0x0D, 0xD0, 0x92, 0x1E, 0x27, 0x41, - 0xF2, 0xB3, 0x08, 0x32, 0x03, 0x6D, 0x2C, 0x4F, - 0x78, 0xEC, 0x99, 0xB3, 0x94, 0x6C, 0xC1, 0x89, - 0xD9, 0x34, 0x0F, 0xEF, 0x10, 0xF0, 0xDA, 0xCE, - 0x09, 0x69, 0x7A, 0x93, 0xC6, 0xFF, 0x19, 0x4F, - 0xBD, 0xDE, 0xA6, 0x54, 0x8A, 0xE5, 0x81, 0x3F, - 0x96, 0xD3, 0xA0, 0x77, 0x7C, 0xF2, 0x4B, 0xF1, - 0x68, 0xA2, 0x23, 0x3D, 0xD4, 0x16, 0xC1, 0x66, - 0xDA, 0x13, 0x53, 0xE1, 0x9F, 0x9A, 0x36, 0x09, - 0x4D, 0x72, 0x08, 0x09, 0xEB, 0x87, 0x74, 0x9A, - 0xB2, 0x8C, 0x60, 0x7F, 0xFB, 0x70, 0x17, 0x51, - 0xB1, 0xAC, 0x18, 0xDF, 0xCB, 0x43, 0x2A, 0xD3, - 0x89, 0xDA, 0x78, 0xAE, 0xDC, 0xEA, 0xB2, 0x22, - 0xCA, 0x2F, 0xF1, 0xE4, 0xA7, 0xCC, 0xAF, 0xB1, - 0x63, 0x1B, 0x5D, 0xDD, 0xD1, 0x49, 0xB8, 0x90, - 0x2E, 0xC9, 0xC0, 0x83, 0x0D, 0xAB, 0x88, 0x88, - 0x4C, 0x74, 0x72, 0x00, 0x7D, 0xFE, 0xF2, 0x46, - 0x73, 0xFD, 0x99, 0xEC, 0x89, 0x8B, 0x3B, 0x0F, - 0xCE, 0x35, 0x5A, 0xEA, 0x13, 0x4F, 0x67, 0x67, - 0xFD, 0x0D, 0x87, 0xFC, 0xB1, 0x36, 0x48, 0x07, - 0x33, 0x0B, 0xCA, 0xD4, 0xD7, 0xD0, 0xCC, 0xA1, - 0x8F, 0xF0, 0x3F, 0x01, 0x8B, 0x6B, 0x74, 0x44, - 0x2F, 0x1B, 0xE0, 0x65, 0x31, 0x1B, 0x4E, 0xDB, - 0x67, 0x65, 0xA9, 0x34, 0xE8, 0x4D, 0x0C, 0xF3, - 0x29, 0xED, 0x53, 0xAB, 0x8A, 0x98, 0x07, 0x2B, - 0xE0, 0xCD, 0xC0, 0x08, 0x82, 0x4A, 0x72, 0x28, - 0x72, 0xA2, 0xAC, 0xFE, 0xF7, 0xBF, 0x6E, 0x8E, - 0xF8, 0x3E, 0x04, 0x58, 0xA4, 0x36, 0x46, 0x33, - 0xAB, 0xDD, 0x0E, 0xBF, 0x01, 0xD2, 0xEF, 0x19, - 0x5B, 0x78, 0x2B, 0x30, 0x51, 0x25, 0x50, 0xD0, - 0xB5, 0x82, 0xC7, 0x20, 0x0D, 0xA1, 0x2C, 0x38, - 0xAF, 0x44, 0xFC, 0xBD, 0x49, 0xB8, 0x7F, 0x89, - 0xEF, 0xBE, 0x37, 0x5C, 0xCB, 0xA2, 0x11, 0x75, - 0x7D, 0xDA, 0xA8, 0x7B, 0x3A, 0x3C, 0x10, 0x11, - 0x4D, 0x9F, 0x99, 0xAB, 0x4B, 0xA2, 0x20, 0x7A, - 0x5F, 0x96, 0xEF, 0x1C, 0x00, 0xD7, 0x27, 0x17, - 0x77, 0x7C, 0x51, 0x58, 0x4B, 0x13, 0x97, 0x53, - 0x2A, 0xC6, 0x86, 0x4D, 0x3B, 0x8E, 0xBB, 0x4F, - 0xB8, 0xA0, 0x84, 0x87, 0xF6, 0xEF, 0x55, 0x12, - 0x2B, 0xCF, 0x9E, 0x5C, 0xD0, 0x0E, 0xBC, 0x1E, - 0x79, 0x53, 0xE7, 0x8C, 0x4D, 0x8B, 0xCB, 0x20, - 0xF6, 0xEA, 0x72, 0x0A, 0x63, 0x2F, 0x0C, 0xCF, - 0x57, 0x27, 0x26, 0xF4, 0x3A, 0x95, 0xCA, 0xBE, - 0xB5, 0x7C, 0x47, 0x60, 0x10, 0xCD, 0x28, 0x9E, - 0x02, 0x64, 0xC9, 0x8D, 0x82, 0x49, 0xD0, 0xD6, - 0x60, 0xF8, 0xDC, 0xC8, 0x4B, 0x7D, 0xB5, 0xEF, - 0x11, 0x17, 0xC7, 0x94, 0x5F, 0x0D, 0x99, 0xBE, - 0x75, 0x48, 0x49, 0xC6, 0x58, 0x43, 0x64, 0x99, - 0x1A, 0x5A, 0x41, 0xBA, 0xC2, 0x31, 0xB3, 0xE0, - 0x45, 0x1B, 0x81, 0xD2, 0x12, 0xBE, 0x90, 0xDB, - 0xFF, 0xBC, 0xCB, 0x99, 0xA3, 0xF0, 0x74, 0xE8, - 0x2C, 0x48, 0x58, 0xB3, 0x17, 0xA4, 0x9A, 0xD2, - 0x22, 0x46, 0xFB, 0xF5, 0x85, 0x8D, 0x07, 0xDF, - 0xDB, 0x78, 0x07, 0xF4, 0x99, 0xA8, 0x6C, 0xEE, - 0x6E, 0x96, 0x20, 0xB8, 0xC2, 0xA9, 0xFA, 0x8B, - 0x6E, 0xA6, 0x79, 0x6D, 0xF9, 0xC3, 0x0C, 0x77, - 0x74, 0xAE, 0xB0, 0x40, 0xA9, 0xE5, 0xA7, 0x0B, - 0x30, 0x40, 0x4B, 0x4F, 0xB1, 0x0A, 0x0B, 0x7B, - 0xEE, 0x1F, 0x69, 0xFA, 0xD0, 0xF0, 0x2D, 0x5D, - 0x00, 0xB5, 0x4D, 0xEB, 0x32, 0x84, 0xB2, 0xB7, - 0x60, 0xAA, 0x6C, 0xF9, 0x98, 0x18, 0xB3, 0xD9, - 0xC1, 0x54, 0x8D, 0xAC, 0x12, 0xB0, 0x3A, 0x26, - 0xB2, 0x23, 0x2D, 0x9B, 0xF8, 0x20, 0xEE, 0x90, - 0xE0, 0x6D, 0x31, 0xDE, 0xF5, 0xCA, 0xBA, 0x6A, - 0x53, 0x40, 0x29, 0x6C, 0x18, 0x62, 0xA5, 0x8A, - 0xB8, 0x17, 0xA0, 0xAB, 0xCB, 0xDC, 0xE1, 0x3B, - 0xD6, 0xC6, 0x29, 0xA3, 0x1C, 0x5F, 0x8D, 0x6E, - 0x73, 0xF6, 0x98, 0x10, 0x0F, 0x9F, 0x7E, 0xCA, - 0x4C, 0xD8, 0xEB, 0xE4, 0xB8, 0xDF, 0x72, 0x78, - 0x65, 0xAF, 0x4A, 0x20, 0xFE, 0x7C, 0xB4, 0xCA, - 0x07, 0x81, 0xFD, 0xC5, 0xC5, 0xFD, 0x33, 0x4D, - 0xB8, 0x37, 0x37, 0xC4, 0x21, 0x81, 0x66, 0x45, - 0xAE, 0x81, 0x34, 0x13, 0xA6, 0x40, 0x81, 0x39, - 0x55, 0x90, 0xE6, 0xF1, 0x42, 0x56, 0x74, 0xFF, - 0x06, 0x9B, 0x50, 0x1F, 0x0F, 0xDA, 0x6B, 0x31, - 0xC6, 0x4B, 0xC5, 0xC2, 0x14, 0xE7, 0x01, 0x5E, - 0xA9, 0xDA, 0x12, 0x2D, 0x6C, 0xE0, 0x8C, 0xEB, - 0x2D, 0xF6, 0x2C, 0x45, 0xBC, 0x01, 0x73, 0x34, - 0x6D, 0xAB, 0xBC, 0x15, 0x4C, 0x16, 0x03, 0x35, - 0x9D, 0xD4, 0xF0, 0xAC, 0x49, 0x84, 0x4A, 0xEE, - 0x46, 0x47, 0x64, 0x93, 0xF2, 0x49, 0x59, 0x86, - 0x26, 0xFB, 0x24, 0x6B, 0x99, 0xB3, 0x9A, 0xCB, - 0xB4, 0x2B, 0x28, 0x4E, 0x0C, 0x2D, 0x3F, 0x9E, - 0xCE, 0x32, 0x71, 0xC4, 0xD5, 0xE0, 0x6C, 0x48, - 0x25, 0xEA, 0x1A, 0x8F, 0x08, 0x57, 0x23, 0x85, - 0x89, 0xCD, 0xC5, 0x48, 0x37, 0x19, 0x8E, 0xD4, - 0x23, 0x4D, 0xD0, 0x31, 0x73, 0xA8, 0x8E, 0x43, - 0xEE, 0x95, 0x67, 0xF5, 0x7A, 0x93, 0x27, 0xD3, - 0x90, 0x36, 0x30, 0x4C, 0xA1, 0xCD, 0xB5, 0xF8, - 0x65, 0xC5, 0x89, 0x54, 0x57, 0x2C, 0xAE, 0xF8, - 0x75, 0xF1, 0x2E, 0x14, 0x14, 0x14, 0x0D, 0x97, - 0x5B, 0x24, 0x52, 0x46, 0x7A, 0x57, 0x6D, 0x9C, - 0x4C, 0x79, 0xDB, 0x0A, 0xE0, 0x23, 0x69, 0x52, - 0x9B, 0xF8, 0x1B, 0x54, 0x40, 0x18, 0xDF, 0xE0, - 0x1E, 0xF0, 0x61, 0xE4, 0x79, 0x81, 0xF9, 0x98, - 0x9A, 0x8C, 0x48, 0xFF, 0x86, 0x93, 0x0B, 0x68, - 0x96, 0x78, 0x2F, 0xF1, 0x2D, 0xDC, 0x60, 0x1F, - 0x8B, 0x1C, 0x04, 0x43, 0x4E, 0x60, 0x96, 0x5B, - 0x8A, 0xF6, 0x89, 0xCC, 0xC8, 0xB2, 0x9B, 0xBF, - 0x87, 0x16, 0x2E, 0xA8, 0x6F, 0x9B, 0x4B, 0xFD, - 0x74, 0x4E, 0x8F, 0x36, 0x33, 0x23, 0xDE, 0x94, - 0xD2, 0xA1, 0x72, 0x4F, 0xB2, 0xE6, 0x75, 0x3D, - 0x6E, 0x47, 0x9B, 0xDB, 0x58, 0xE5, 0x4A, 0x0C, - 0x09, 0x8F, 0x9C, 0x83, 0x63, 0x98, 0x8B, 0xA4, - 0xF7, 0x3D, 0x01, 0xA6, 0x8B, 0x93, 0x97, 0x48, - 0x84, 0x75, 0x32, 0xC7, 0xD7, 0x03, 0xDF, 0x7E, - 0x94, 0x8C, 0x8A, 0xA6, 0x78, 0x1A, 0xAE, 0xDE, - 0x36, 0x8A, 0xAD, 0x13, 0x7E, 0xF0, 0x16, 0xC2, - 0x3B, 0xAF, 0xF9, 0xD8, 0x66, 0x12, 0x30, 0x72, - 0x76, 0x6D, 0x21, 0x4C, 0xF3, 0xEF, 0x0D, 0x8C, - 0x11, 0xA4, 0x12, 0xBE, 0xF5, 0x7E, 0x8E, 0x6A, - 0x11, 0x13, 0x48, 0x8D, 0xC2, 0x62, 0xCF, 0x45, - 0x7C, 0xE3, 0x91, 0x88, 0x59, 0xFF, 0xB0, 0xF1, - 0xC3, 0xBC, 0x1D, 0x2A, 0x3E, 0x9B, 0x78, 0xF3, - 0xB1, 0x2E, 0xB0, 0x27, 0xD8, 0x16, 0xF8, 0x9B, - 0x2A, 0xAF, 0xF1, 0xAB, 0xB0, 0xF1, 0x8C, 0x7F, - 0x94, 0x31, 0x97, 0x85, 0xDA, 0xF0, 0xF4, 0x27, - 0x51, 0x3E, 0x5A, 0xE1, 0xDD, 0x6D, 0x9E, 0x98, - 0x39, 0xBB, 0xDF, 0xA2, 0xBA, 0x2C, 0x08, 0xAD, - 0x1D, 0x3F, 0x86, 0xF6, 0xC2, 0x1A, 0x8C, 0xAD, - 0xE0, 0xDC, 0xDD, 0x02, 0x47, 0x4C, 0x7E, 0x2D, - 0xDA, 0x1D, 0x70, 0x92, 0x39, 0xAA, 0x4E, 0xBA, - 0x14, 0xC7, 0xEC, 0x26, 0xBD, 0x9D, 0x1F, 0x6D, - 0x91, 0x58, 0x3C, 0xB5, 0xEF, 0x37, 0xB9, 0x66, - 0x4E, 0x04, 0x7C, 0x29, 0xCF, 0xD7, 0x8E, 0x47, - 0x84, 0xF3, 0xD2, 0x21, 0x84, 0xC5, 0xF8, 0xDC, - 0xC9, 0xF2, 0x52, 0xD5, 0x6A, 0xBF, 0xF1, 0xF1, - 0xDE, 0x9E, 0x7A, 0xF1, 0xD5, 0x5A, 0xF6, 0xEF, - 0x94, 0x66, 0xF9, 0x25, 0x44, 0x7F, 0x8D, 0x92, - 0xA2, 0x25, 0x1C, 0x72, 0x92, 0x30, 0x2A, 0xB7, - 0xEF, 0x18, 0xF3, 0x8C, 0xEF, 0x69, 0xA5, 0x5C, - 0x19, 0x3E, 0xC5, 0xBD, 0xEE, 0x2C, 0x2D, 0x71, - 0xDB, 0x89, 0xD4, 0x11, 0xA6, 0x27, 0x80, 0x8F, - 0x5A, 0x39, 0x9A, 0x04, 0x28, 0x4F, 0x9F, 0x00, - 0xBE, 0xF9, 0xF7, 0x9B, 0x46, 0x69, 0xD6, 0xAC, - 0x12, 0xE9, 0xA7, 0xC2, 0xD1, 0xC8, 0xAD, 0x5D, - 0xF7, 0xCB, 0x0C, 0x98, 0x78, 0x2D, 0x04, 0x4D, - 0x2D, 0x41, 0xAB, 0xC6, 0x3F, 0x81, 0x1D, 0xB9, - 0x2C, 0x1F, 0x3F, 0x59, 0x11, 0xF4, 0x80, 0x4F, - 0x0B, 0xCA, 0x9F, 0x81, 0x6E, 0x9C, 0xD1, 0xB4, - 0x74, 0x06, 0x48, 0x0A, 0x87, 0x2C, 0xFD, 0x4D, - 0x85, 0xD4, 0x21, 0x65, 0x7C, 0x96, 0x69, 0x53, - 0x51, 0xC0, 0xC4, 0xB0, 0xEB, 0x20, 0xDB, 0xE0, - 0x41, 0x09, 0xA7, 0x62, 0xB2, 0xF3, 0xC7, 0x6A, - 0x1D, 0x53, 0xA0, 0x39, 0xBA, 0xCF, 0x78, 0x9E, - 0xBF, 0x1D, 0xA5, 0x98, 0x09, 0x8E, 0xA7, 0x1A, - 0xE7, 0x95, 0xFF, 0x10, 0x38, 0xCC, 0x8F, 0x44, - 0xCB, 0xE7, 0xF6, 0xD6, 0x2C, 0xFF, 0xA8, 0x1C, - 0xFF, 0xA3, 0x65, 0xE8, 0x4E, 0xAE, 0xC7, 0xEF, - 0x61, 0xE1, 0x16, 0x4B, 0x8C, 0xA8, 0xC8, 0xFB, - 0xA5, 0x2C, 0xD1, 0x0A, 0x39, 0xAB, 0x4A, 0xF9, - 0xEE, 0x0B, 0x9B, 0xB4, 0x33, 0x5E, 0x25, 0x15, - 0xD0, 0xAA, 0x93, 0xC4, 0x53, 0x42, 0x91, 0xC5, - 0x98, 0x15, 0x34, 0x9A, 0x22, 0x1D, 0x9A, 0xE7, - 0x0E, 0x81, 0xF6, 0x99, 0x55, 0xB3, 0xD6, 0x49, - 0x1B, 0xB8, 0xA8, 0xBE, 0xDF, 0x54, 0xF0, 0x78, - 0xF7, 0x02, 0x97, 0x74, 0x84, 0x67, 0x6B, 0xAE, - 0x2F, 0xEC, 0x6E, 0x59, 0x20, 0x68, 0xD8, 0xE3, - 0x5A, 0x07, 0x48, 0xE1, 0x99, 0x90, 0xEE, 0xCD, - 0x17, 0x2B, 0xB6, 0xD6, 0xAA, 0x1A, 0xF8, 0x97, - 0x4E, 0xE0, 0x67, 0x9E, 0x4C, 0x35, 0xFE, 0x68, - 0x71, 0x54, 0x43, 0x5D, 0x43, 0x59, 0x19, 0xEB, - 0x58, 0x8E, 0x9A, 0xF6, 0xBD, 0x88, 0x71, 0xEE, - 0x89, 0xC6, 0xF2, 0x10, 0x04, 0x33, 0x13, 0x88, - 0xCD, 0x08, 0xB5, 0xE3, 0x5D, 0xA8, 0xBC, 0x43, - 0xB3, 0x84, 0x5F, 0x70, 0x94, 0xD9, 0xAC, 0xAE, - 0x74, 0x70, 0x13, 0x1E, 0x21, 0xFB, 0xD5, 0x7F, - 0xEC, 0x66, 0x2F, 0xA0, 0xB1, 0x1D, 0xE3, 0xF8, - 0xB9, 0x36, 0x48, 0x25, 0x3D, 0xBA, 0x7D, 0x44, - 0x08, 0xC5, 0x71, 0x74, 0xDA, 0xD3, 0x4F, 0x97, - 0x86, 0xF1, 0x16, 0x38, 0xD8, 0xC9, 0xE3, 0x3A, - 0xA7, 0x2E, 0x06, 0x4D, 0x9D, 0xE8, 0xFC, 0x38, - 0x58, 0x2A, 0x8D, 0x2D, 0x07, 0x99, 0xEA, 0xDF, - 0xF3, 0x00, 0x3B, 0xBC, 0x5F, 0x67, 0x1E, 0x4B, - 0x6C, 0xF1, 0x4A, 0x47, 0xB0, 0x71, 0x90, 0x5A, - 0x3B, 0x75, 0x93, 0x75, 0x56, 0x50, 0x4C, 0x70, - 0xF3, 0xC7, 0x95, 0xD5, 0xEA, 0xCB, 0x4C, 0x92, - 0x4F, 0x22, 0x4F, 0xD9, 0x34, 0x46, 0x76, 0xFB, - 0x79, 0xD6, 0xBD, 0x4E, 0x84, 0xEE, 0xE7, 0x78, - 0x7C, 0xB8, 0x92, 0x9F, 0xAD, 0xF2, 0x17, 0x5D, - 0x38, 0xB1, 0x88, 0x2E, 0xE9, 0x65, 0xAC, 0x4C, - 0x24, 0x27, 0x1D, 0x7B, 0xA3, 0x69, 0x96, 0x55, - 0x5C, 0x26, 0x40, 0xAF, 0x04, 0xB1, 0xCE, 0xA8, - 0x5D, 0x1E, 0x1F, 0xE5, 0x5A, 0xC3, 0xAE, 0xF9, - 0x14, 0x03, 0x58, 0x10, 0x1C, 0x8B, 0x1F, 0xDB, - 0x6C, 0x71, 0x68, 0x60, 0x13, 0x32, 0xF1, 0xA9, - 0x69, 0x45, 0x28, 0x69, 0x7C, 0xE3, 0xC9, 0x56, - 0xAF, 0xF3, 0xBD, 0x4B, 0x9E, 0x0A, 0x06, 0x6A, - 0x62, 0x20, 0x40, 0x65, 0xBD, 0xBC, 0xBF, 0xC7, - 0x0A, 0x2A, 0xCF, 0x56, 0x7C, 0x0E, 0x64, 0xBB, - 0x64, 0x71, 0x2D, 0x90, 0xBB, 0x32, 0x00, 0x0A, - 0x4A, 0x45, 0x44, 0x08, 0x75, 0x2C, 0x86, 0x13, - 0x86, 0x52, 0x8D, 0x3D, 0xFC, 0xF3, 0x5E, 0x5B, - 0x3F, 0x7A, 0xAA, 0x98, 0x84, 0xCF, 0x92, 0xF9, - 0x0B, 0x40, 0x8F, 0xC0, 0xA3, 0x71, 0x84, 0xAD, - 0xEE, 0xDF, 0xC4, 0x91, 0x7E, 0x87, 0x7D, 0x06, - 0xCA, 0x65, 0x8C, 0xE4, 0x8E, 0x03, 0xF0, 0x59, - 0x3E, 0xB4, 0x90, 0x4C, 0xEE, 0x88, 0x29, 0xE4, - 0x26, 0x7D, 0xA6, 0x54, 0x82, 0x49, 0xC1, 0x9D, - 0x80, 0xAB, 0x6B, 0xD7, 0xBE, 0x7D, 0x09, 0x80, - 0x5E, 0xB6, 0xD1, 0x1E, 0xD1, 0x1B, 0xE9, 0x8D, - 0xFC, 0x6E, 0x9C, 0x14, 0x0C, 0x15, 0x02, 0x87, - 0xF3, 0x9D, 0x21, 0xF8, 0xCB, 0xC8, 0xB9, 0xBD, - 0xE1, 0x70, 0xEA, 0xE4, 0x86, 0x4C, 0x97, 0xC1, - 0xEE, 0x4C, 0x18, 0x95, 0xEC, 0xD2, 0x4D, 0x35, - 0x9F, 0xC6, 0x56, 0x10, 0x3E, 0xC0, 0xB9, 0x7B, - 0x13, 0x1A, 0x37, 0x3D, 0x40, 0x4C, 0x88, 0x8B, - 0x9A, 0xA5, 0xB2, 0xB8, 0xB9, 0xC3, 0xEC, 0xF1, - 0x14, 0x33, 0x63, 0x67, 0x84, 0x98, 0xC8, 0xF4, - 0x06, 0x0C, 0x0E, 0x0F, 0x10, 0x12, 0x15, 0x16, - 0x45, 0x4E, 0x55, 0x5A, 0x5F, 0x8A, 0x94, 0x97, - 0xA8, 0xAF, 0xB2, 0xCC, 0xD4, 0xDC, 0xE7, 0xF1, - 0xFE, 0xFF, 0x11, 0x24, 0x53, 0x62, 0x94, 0xB7, - 0xB9, 0xD3, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4A, 0x2B, 0x16, 0xCD, 0xB5, 0x52, 0xF9, 0x29, + 0x7F, 0x8E, 0x39, 0x1A, 0xD8, 0xF5, 0xAD, 0xC8, + 0xCC, 0x5D, 0x2C, 0x56, 0xC4, 0x6B, 0x80, 0x0F, + 0x9B, 0x3E, 0xE4, 0xBB, 0xD2, 0xF2, 0xE8, 0xA8, + 0x9D, 0x59, 0x9D, 0x7B, 0x5C, 0xC2, 0xD8, 0x8C, + 0x80, 0xF2, 0x71, 0x85, 0x9B, 0xBC, 0x83, 0x04, + 0x3E, 0xC4, 0xE5, 0x48, 0x12, 0xF5, 0x93, 0x6B, + 0x44, 0x6C, 0x95, 0x13, 0xC8, 0x55, 0x28, 0x9C, + 0x94, 0xB1, 0x15, 0x51, 0xA0, 0xC7, 0x65, 0x3E, + 0x7B, 0xA7, 0x4F, 0xFB, 0x6F, 0x72, 0xD4, 0x65, + 0x2C, 0x91, 0xD3, 0x8D, 0xD1, 0xF9, 0x0D, 0xFE, + 0x44, 0x39, 0xBC, 0x21, 0xCA, 0x53, 0xE0, 0xCC, + 0x7A, 0x7A, 0xA5, 0xB8, 0x75, 0xA5, 0xB9, 0xBA, + 0x42, 0x36, 0x6E, 0xB8, 0xEC, 0xBA, 0x24, 0x36, + 0xDA, 0xF0, 0x8A, 0x91, 0x97, 0x8D, 0xD0, 0x93, + 0xF2, 0x0F, 0x1E, 0xFB, 0x6B, 0x0B, 0xCB, 0x90, + 0xDA, 0x99, 0xCC, 0xA0, 0x5E, 0x8F, 0x6F, 0x82, + 0xB8, 0x6D, 0x3C, 0x6E, 0xE2, 0x4B, 0xA5, 0xD5, + 0x0A, 0xEA, 0x10, 0xB2, 0x30, 0x7F, 0x57, 0xF8, + 0x9E, 0xD7, 0x8D, 0xB4, 0xA7, 0x4F, 0xBB, 0xF6, + 0xEB, 0x33, 0x2A, 0xFB, 0x08, 0xD0, 0x74, 0xAC, + 0xF0, 0xDE, 0x5C, 0xD7, 0xFE, 0xC1, 0x2F, 0x76, + 0xF3, 0xAB, 0x61, 0x9C, 0x81, 0x5B, 0x9E, 0xDD, + 0x28, 0x7E, 0xAD, 0x67, 0xF0, 0x4F, 0x14, 0x79, + 0x7F, 0x8D, 0xCF, 0x2C, 0xDE, 0x9A, 0x87, 0x53, + 0xB5, 0xAD, 0x0A, 0xFA, 0x12, 0x87, 0x41, 0x97, + 0xD1, 0x74, 0x40, 0x92, 0x87, 0x25, 0x21, 0xE8, + 0x68, 0xAF, 0x9E, 0x64, 0x45, 0x23, 0x73, 0xFE, + 0xB6, 0xFE, 0x25, 0xD5, 0x27, 0x3D, 0x63, 0xC0, + 0xEB, 0xD6, 0xD3, 0xB1, 0x02, 0x8C, 0x1C, 0xD0, + 0x6A, 0xF3, 0x2C, 0xEC, 0xA2, 0x62, 0x13, 0x10, + 0x83, 0x7C, 0x72, 0x78, 0x8C, 0x8A, 0xDA, 0xB5, + 0xA0, 0xF0, 0x38, 0x17, 0x12, 0x8E, 0xB7, 0xB7, + 0x66, 0xFA, 0x81, 0x2C, 0x69, 0x6C, 0xF8, 0x86, + 0xF0, 0x0A, 0x10, 0x44, 0xCD, 0xD0, 0x6B, 0xB2, + 0x8C, 0xB2, 0xE5, 0x78, 0x0C, 0x8D, 0x8C, 0xC7, + 0xE6, 0x0A, 0xB6, 0x99, 0xDD, 0x78, 0x66, 0x8B, + 0xE4, 0xFF, 0x9F, 0x46, 0x90, 0xC6, 0xFC, 0x98, + 0xAA, 0xC9, 0xC0, 0x2B, 0x66, 0xB9, 0xB9, 0x82, + 0x6A, 0x30, 0x61, 0xFD, 0x32, 0x22, 0xDA, 0x84, + 0x82, 0x66, 0x79, 0x60, 0xA3, 0x16, 0x52, 0xEE, + 0x88, 0xEB, 0x32, 0xB0, 0x46, 0x9A, 0xB7, 0x1C, + 0xAA, 0x25, 0x19, 0xF2, 0x3D, 0x1A, 0x24, 0x42, + 0xD5, 0xB1, 0x31, 0x62, 0x62, 0x13, 0x1D, 0xCE, + 0xC5, 0xF2, 0x87, 0xE3, 0x2F, 0xD3, 0x43, 0xFE, + 0xB4, 0x42, 0x9E, 0x54, 0x25, 0x8D, 0x69, 0x0D, + 0x9D, 0x20, 0xA1, 0x0A, 0xBD, 0x75, 0xA5, 0x36, + 0xDF, 0xF8, 0xCF, 0x1D, 0x6D, 0xDF, 0x19, 0x29, + 0x1E, 0x27, 0x49, 0xA7, 0xD1, 0x6E, 0xB9, 0x0A, + 0xB5, 0x09, 0x3B, 0xAD, 0x38, 0xE1, 0x16, 0xA8, + 0x6B, 0x73, 0x0E, 0x65, 0x57, 0x4C, 0x06, 0x8C, + 0x38, 0xBA, 0x94, 0x57, 0xC9, 0xD6, 0xD9, 0x13, + 0xEA, 0xFF, 0x57, 0xFE, 0x23, 0xBF, 0x3D, 0xD2, + 0x4D, 0x8C, 0xA5, 0x11, 0xEF, 0xA3, 0x76, 0xA5, + 0xDF, 0x08, 0x46, 0x70, 0x25, 0xFF, 0x51, 0xBE, + 0xAD, 0x3E, 0xDE, 0x0A, 0x84, 0xED, 0xC5, 0x32, + 0x16, 0x20, 0x99, 0x80, 0x61, 0xE8, 0xA1, 0xA7, + 0x3D, 0x67, 0xB7, 0x02, 0x1B, 0x81, 0x0C, 0x78, + 0x67, 0xFF, 0x39, 0x18, 0x7B, 0x59, 0xD4, 0x03, + 0xBF, 0x7C, 0x75, 0x06, 0x30, 0x0C, 0x73, 0x45, + 0xB1, 0xFE, 0x07, 0xC1, 0x12, 0x78, 0xB0, 0xAB, + 0xA6, 0x1D, 0xBB, 0x4F, 0x2B, 0x8C, 0x43, 0xE7, + 0x4F, 0xEF, 0xA5, 0x5E, 0xD5, 0x2C, 0x10, 0xA8, + 0xC4, 0x90, 0x88, 0x2B, 0xBF, 0xE3, 0xE3, 0xB3, + 0xCE, 0x57, 0x9E, 0x81, 0x16, 0xA9, 0xB6, 0x68, + 0x6C, 0x1A, 0x10, 0x0A, 0xA1, 0xF6, 0x59, 0x1F, + 0x19, 0x1F, 0x77, 0x2B, 0x5A, 0x5A, 0x50, 0xDD, + 0x6C, 0xC1, 0x55, 0xCB, 0x5A, 0x1B, 0xE5, 0xBA, + 0x12, 0x2E, 0x91, 0xF0, 0x44, 0x42, 0x01, 0x56, + 0xCD, 0x63, 0x08, 0x0F, 0x0A, 0x45, 0xD6, 0x62, + 0xE7, 0x6D, 0xD5, 0x7B, 0xD0, 0xF6, 0x89, 0xD0, + 0xB2, 0x99, 0x04, 0x2B, 0xFF, 0x48, 0x5E, 0x8A, + 0x38, 0x2D, 0x86, 0x5C, 0x26, 0xCD, 0x46, 0xB4, + 0xA5, 0x47, 0x28, 0xBD, 0x48, 0x45, 0x83, 0x62, + 0xD7, 0x9A, 0xC3, 0xEB, 0x75, 0x6F, 0xC6, 0xC5, + 0x18, 0xC9, 0xE2, 0xF0, 0xE7, 0xD5, 0xA3, 0x03, + 0xAF, 0x11, 0x59, 0xEE, 0x6D, 0xBE, 0x7D, 0xD5, + 0x6B, 0xA0, 0x71, 0x28, 0x57, 0xA6, 0x88, 0x36, + 0xC3, 0xC7, 0x8C, 0x6C, 0x9F, 0x74, 0x88, 0x57, + 0x28, 0x13, 0xC0, 0xF6, 0xA8, 0x14, 0x70, 0x9D, + 0x2B, 0xC1, 0x42, 0xFE, 0xF0, 0x25, 0x27, 0xCA, + 0xE7, 0x71, 0x23, 0x58, 0x37, 0x1C, 0x54, 0x26, + 0x52, 0x2C, 0xCC, 0x64, 0x30, 0x0C, 0x2C, 0xD9, + 0xFB, 0xE2, 0x0C, 0x65, 0x62, 0xE3, 0x48, 0x35, + 0x20, 0x5F, 0xCD, 0xD5, 0xA8, 0x98, 0x2C, 0x92, + 0x0B, 0xB4, 0x77, 0xFB, 0x88, 0x17, 0x02, 0x82, + 0x7B, 0x49, 0x11, 0x87, 0x13, 0x94, 0xC0, 0x6B, + 0x5F, 0xEC, 0xD0, 0xC7, 0x40, 0xAF, 0x7B, 0x27, + 0x63, 0x7B, 0xAC, 0x1A, 0x0C, 0xBC, 0xA5, 0x37, + 0xE4, 0x43, 0x3E, 0xA8, 0x47, 0x45, 0x4C, 0x69, + 0x38, 0x97, 0xA3, 0x2E, 0x4D, 0x18, 0x44, 0x19, + 0x54, 0x26, 0xA0, 0xC6, 0xAE, 0xD6, 0x74, 0x72, + 0xBD, 0x2C, 0x4E, 0xEE, 0x17, 0x9F, 0x3F, 0x60, + 0x84, 0xA3, 0x6A, 0x76, 0x89, 0xF4, 0xCB, 0x1F, + 0x8E, 0x5D, 0xB2, 0xDD, 0xE5, 0x4A, 0xCC, 0x06, + 0x66, 0xBA, 0x98, 0x41, 0x54, 0x31, 0xA4, 0xB2, + 0x02, 0xF4, 0x02, 0xFB, 0x1F, 0x1B, 0xCC, 0xDC, + 0x23, 0xBF, 0xF1, 0x31, 0x48, 0xC7, 0xB8, 0xF6, + 0x1F, 0xBF, 0x62, 0x43, 0xB2, 0x96, 0xA7, 0x8E, + 0xB6, 0x98, 0x18, 0x9D, 0xA9, 0x5B, 0xDA, 0x85, + 0xDB, 0xC1, 0x1D, 0x15, 0xFF, 0xDC, 0x6B, 0xF4, + 0x6C, 0x53, 0xF6, 0xE4, 0x72, 0xA8, 0x71, 0x40, + 0x1E, 0x9A, 0x9A, 0xB7, 0xF9, 0xFB, 0x46, 0x7E, + 0xB4, 0xEC, 0xB1, 0xF0, 0xDA, 0x7E, 0x63, 0xEE, + 0x86, 0x19, 0xCB, 0xC4, 0x86, 0xEB, 0xB0, 0xF2, + 0x12, 0x0A, 0x78, 0x11, 0xBF, 0xB0, 0x55, 0x7D, + 0x13, 0x93, 0x05, 0x74, 0x29, 0x7C, 0x94, 0x64, + 0xFC, 0x59, 0x5B, 0x27, 0x56, 0x9A, 0xDF, 0x5F, + 0x4A, 0x8D, 0xF6, 0x69, 0xC9, 0xEE, 0xA0, 0xA2, + 0x50, 0xF4, 0xD2, 0x2C, 0x2E, 0x8C, 0x64, 0x1B, + 0xA3, 0x90, 0x2B, 0xA8, 0x08, 0x00, 0x48, 0x99, + 0x65, 0xF1, 0x1A, 0xF1, 0xE1, 0xA8, 0x57, 0x17, + 0xC6, 0x24, 0xE7, 0x42, 0xF1, 0x61, 0x55, 0x08, + 0x19, 0xD1, 0xF0, 0x37, 0x2C, 0x5C, 0xAE, 0x8B, + 0xC6, 0x2B, 0x54, 0x9E, 0xFE, 0x87, 0x44, 0x61, + 0x08, 0x0D, 0x06, 0x34, 0x6E, 0x1F, 0xA6, 0xF0, + 0x15, 0x14, 0xFB, 0xEC, 0xCB, 0x06, 0xE3, 0x4E, + 0xE2, 0x71, 0xA0, 0xF0, 0x03, 0x17, 0x90, 0xBD, + 0xAB, 0xE0, 0xF0, 0x2B, 0xBA, 0x4A, 0xEA, 0x4B, + 0x73, 0x97, 0xFE, 0x33, 0x33, 0xEB, 0x81, 0x21, + 0x82, 0x07, 0x57, 0x28, 0x1F, 0x96, 0xA5, 0x83, + 0x1F, 0x9E, 0x49, 0x03, 0x66, 0x54, 0x9D, 0x16, + 0x76, 0x3F, 0xF1, 0x9F, 0xF7, 0x73, 0x58, 0x0E, + 0xD5, 0xE3, 0xE1, 0xE2, 0xAA, 0x3E, 0x38, 0xF8, + 0x84, 0x74, 0xDE, 0x6D, 0x9B, 0xA6, 0x99, 0x4F, + 0x8E, 0x62, 0x91, 0x60, 0x48, 0x8C, 0xB4, 0xCD, + 0x5B, 0x87, 0x8C, 0xDA, 0x37, 0xAA, 0xEC, 0x9B, + 0x56, 0x36, 0x9A, 0x7E, 0x73, 0xF7, 0x3B, 0x42, + 0x86, 0x39, 0xA0, 0x5C, 0x13, 0x78, 0x44, 0x8A, + 0xDB, 0x7F, 0x07, 0x4D, 0xC8, 0x15, 0x4D, 0x92, + 0xE1, 0x3C, 0x63, 0x56, 0xB5, 0xF4, 0x66, 0xD6, + 0x64, 0x77, 0x15, 0x9B, 0x2A, 0x94, 0x37, 0x99, + 0xAD, 0x61, 0x9A, 0x02, 0x9F, 0x30, 0x10, 0xD0, + 0x37, 0x67, 0x2D, 0xBB, 0x68, 0x20, 0xE5, 0x13, + 0x23, 0xAD, 0xA9, 0x88, 0x81, 0xC6, 0xDE, 0x85, + 0x9D, 0xF8, 0x75, 0xAB, 0xAF, 0x11, 0xDA, 0x5D, + 0xDC, 0xA5, 0xA7, 0x77, 0x62, 0x2B, 0xDA, 0xE8, + 0xFA, 0xCE, 0x2E, 0x0C, 0xED, 0x3B, 0x6A, 0x77, + 0xB8, 0x8A, 0x87, 0x29, 0xFB, 0x7C, 0x50, 0x93, + 0x3D, 0xA6, 0xC5, 0x2E, 0x3F, 0x4D, 0x94, 0x8F, + 0x9D, 0xC1, 0x53, 0xB5, 0xB1, 0x29, 0x9C, 0xD8, + 0x62, 0x1D, 0xDF, 0xBA, 0x48, 0xAF, 0x44, 0xE4, + 0xB6, 0xF6, 0x10, 0x6E, 0xE7, 0x77, 0x95, 0x01, + 0xDD, 0x5F, 0xB3, 0xC5, 0x78, 0xEA, 0x4D, 0x32, + 0xC5, 0xC2, 0xF0, 0x36, 0xA7, 0x35, 0x27, 0x03, + 0xAD, 0xD1, 0x35, 0xAB, 0x84, 0x46, 0x01, 0x62, + 0x41, 0x7E, 0x50, 0xBF, 0x91, 0xE6, 0x07, 0x97, + 0xD5, 0x9B, 0x9E, 0x18, 0xD3, 0x24, 0xDA, 0x97, + 0x1F, 0x4F, 0xF4, 0x28, 0xAE, 0xAF, 0x23, 0xAC, + 0x0B, 0xA4, 0xE2, 0xE2, 0xFC, 0x7A, 0xBA, 0xA6, + 0xC8, 0x98, 0x4F, 0xE9, 0xE2, 0xD8, 0x5B, 0x8A, + 0xDA, 0x40, 0x86, 0xB3, 0xC1, 0x3A, 0xBD, 0x43, + 0xCF, 0xD1, 0xC7, 0x11, 0xD8, 0x32, 0x6B, 0x18, + 0xAD, 0xC3, 0x4C, 0xC1, 0x4C, 0xF8, 0x95, 0x7E, + 0xC3, 0x95, 0x94, 0x98, 0xFC, 0x2A, 0x7B, 0xE0, + 0x6B, 0xD1, 0x84, 0x0D, 0xE1, 0x70, 0x36, 0x65, + 0x66, 0xE5, 0x07, 0x41, 0x95, 0x77, 0x63, 0xC2, + 0xDD, 0x27, 0xAC, 0xF8, 0xC3, 0xF1, 0x02, 0x6F, + 0xAE, 0xE1, 0xD2, 0x56, 0x2F, 0xA1, 0x05, 0x2E, + 0x69, 0xAF, 0xDD, 0x42, 0xF4, 0x46, 0xF0, 0x59, + 0x88, 0x66, 0xD5, 0xD3, 0x06, 0xBF, 0x1B, 0x77, + 0x50, 0x42, 0xB0, 0x35, 0x92, 0x73, 0x72, 0x82, + 0x7F, 0x43, 0x86, 0x31, 0x65, 0x34, 0xFA, 0x1B, + 0x7E, 0xE6, 0x33, 0xBA, 0x95, 0x8C, 0xED, 0x8F, + 0x0D, 0x24, 0x1D, 0x46, 0x88, 0xE3, 0xC7, 0x91, + 0x8E, 0x2A, 0x75, 0x62, 0x63, 0x77, 0xC3, 0x42, + 0xA5, 0x90, 0x69, 0x2B, 0xBF, 0xB8, 0x27, 0xBF, + 0x90, 0x51, 0x41, 0x82, 0xD4, 0x09, 0x0D, 0xF8, + 0xD7, 0x32, 0x35, 0x19, 0xA1, 0xAB, 0x6C, 0xD0, + 0x22, 0x73, 0x67, 0x41, 0x0D, 0xD1, 0x4D, 0x37, + 0x86, 0xA2, 0x6D, 0xDF, 0x91, 0x72, 0x4F, 0xC8, + 0x2D, 0x06, 0xA2, 0x5D, 0x5F, 0x56, 0x68, 0x39, + 0x53, 0xE8, 0xE0, 0xF2, 0x0E, 0x3C, 0x17, 0x71, + 0xDA, 0xF4, 0x2E, 0x52, 0x02, 0x4C, 0x11, 0x6E, + 0xD8, 0xA4, 0xC0, 0xA6, 0x11, 0x68, 0x0F, 0x5F, + 0xE0, 0x0E, 0xD9, 0xB1, 0x48, 0xD1, 0x5F, 0x12, + 0xAA, 0x95, 0xB9, 0xBD, 0x5A, 0x9F, 0xD8, 0x10, + 0x16, 0x42, 0xB3, 0x69, 0x11, 0xF3, 0x10, 0xB0, + 0xDE, 0x18, 0x17, 0x1D, 0x62, 0x37, 0xD9, 0xBE, + 0x17, 0x25, 0xDC, 0x29, 0x9A, 0x1A, 0x3A, 0xAA, + 0xE9, 0x85, 0x40, 0xCE, 0xED, 0x26, 0x95, 0x3D, + 0x10, 0xCE, 0x85, 0x47, 0xF1, 0xC3, 0xE4, 0x6A, + 0x86, 0x2B, 0xED, 0x42, 0x8D, 0x1E, 0x10, 0x60, + 0x1B, 0xF3, 0x28, 0xC7, 0x27, 0xFD, 0x95, 0x34, + 0x3E, 0x2D, 0xB4, 0xD9, 0xAC, 0xD5, 0xD1, 0xCB, + 0x47, 0x15, 0xF6, 0x00, 0x40, 0x96, 0xED, 0xA0, + 0x93, 0xD1, 0xB0, 0xA3, 0x3B, 0x1E, 0x56, 0xF1, + 0x6D, 0x73, 0xAD, 0xB8, 0x73, 0x2C, 0xB4, 0xA3, + 0x11, 0x60, 0xA4, 0x49, 0x1F, 0xAA, 0x0C, 0x86, + 0xE6, 0x80, 0xE3, 0xD7, 0xC0, 0x2C, 0xCE, 0xA8, + 0xFE, 0x92, 0xF1, 0xE0, 0x01, 0x01, 0x6D, 0x22, + 0x02, 0x21, 0xDD, 0x10, 0xED, 0x62, 0x60, 0x17, + 0x96, 0x6C, 0x34, 0x50, 0xAD, 0x12, 0x13, 0x65, + 0x91, 0x8C, 0x93, 0x09, 0x1F, 0x14, 0x71, 0x2B, + 0xA4, 0x77, 0xCF, 0x2E, 0x26, 0x32, 0x96, 0xC7, + 0x78, 0xA2, 0xBA, 0xEE, 0xF5, 0x84, 0x94, 0x55, + 0xFA, 0x35, 0xCB, 0x61, 0x72, 0x51, 0xE0, 0x2A, + 0x22, 0xDA, 0xF5, 0xC3, 0x3E, 0x5A, 0xAA, 0x9F, + 0x00, 0xE8, 0xAC, 0xDC, 0x50, 0xEC, 0xF4, 0x7C, + 0x52, 0x15, 0x03, 0xC5, 0x2F, 0x27, 0xD6, 0xB5, + 0x7C, 0x8F, 0x2B, 0x3D, 0x8F, 0x12, 0x22, 0x41, + 0x3E, 0x7F, 0xA4, 0xEC, 0x59, 0x29, 0x63, 0x38, + 0x09, 0x8C, 0x9A, 0xB5, 0xA1, 0xD8, 0xA5, 0x78, + 0x84, 0xBD, 0x86, 0x00, 0x41, 0x40, 0x6D, 0x96, + 0x55, 0xD1, 0x73, 0x82, 0x94, 0x9A, 0x03, 0xD5, + 0x0F, 0x11, 0x08, 0xD0, 0x5B, 0xDB, 0x31, 0xCA, + 0x08, 0xE6, 0x6F, 0x2D, 0x8D, 0xE4, 0x80, 0xC6, + 0x79, 0x35, 0x18, 0xD4, 0x9A, 0x60, 0xD4, 0x76, + 0x2A, 0x9E, 0xDD, 0xC0, 0x24, 0x9B, 0x42, 0x2E, + 0x84, 0x02, 0x0E, 0xD5, 0x39, 0xA1, 0x4E, 0x24, + 0x78, 0xF6, 0x8B, 0xAB, 0x1F, 0x2B, 0x00, 0xE2, + 0x2A, 0x5C, 0xBB, 0x62, 0x97, 0x9A, 0xC7, 0x44, + 0xE0, 0x8B, 0x57, 0xD5, 0xB5, 0x78, 0xC4, 0x01, + 0xA8, 0xD2, 0x6D, 0x9A, 0xDD, 0x15, 0x05, 0x23, + 0x60, 0x82, 0x86, 0x36, 0x72, 0xD9, 0x11, 0xCF, + 0x3A, 0x09, 0x66, 0xD3, 0x03, 0xF8, 0x91, 0x70, + 0x93, 0xBF, 0x97, 0xAF, 0x90, 0xA7, 0xE1, 0xF9, + 0xD5, 0x9B, 0x09, 0x20, 0x6B, 0x9C, 0xAC, 0x35, + 0x11, 0x0F, 0xA3, 0x8D, 0x58, 0x90, 0xED, 0x21, + 0x16, 0x83, 0x5C, 0xE3, 0x73, 0x84, 0xF5, 0x63, + 0x0F, 0x1C, 0x42, 0x8E, 0x21, 0x36, 0x05, 0x87, + 0x2E, 0xCF, 0x91, 0x1B, 0x01, 0x4B, 0x91, 0xC2, + 0xC6, 0x00, 0xE8, 0xA4, 0x07, 0x29, 0xD0, 0x7B, + 0xF9, 0x18, 0x79, 0x07, 0x42, 0xC9, 0x27, 0x9F, + 0x31, 0x14, 0xF6, 0x8C, 0xDF, 0x65, 0x94, 0xCD, + 0xA3, 0xCA, 0x66, 0x94, 0x22, 0x3A, 0x82, 0xF6, + 0x6C, 0x2B, 0x4B, 0xDF, 0x3E, 0x51, 0xC6, 0xFF, + 0xDC, 0x55, 0xE0, 0xFF, 0x51, 0xEF, 0xD6, 0xC9, + 0x34, 0x36, 0x2B, 0xE7, 0xD6, 0xFA, 0xBC, 0x11, + 0xB8, 0xB0, 0xDA, 0xDD, 0xD5, 0x21, 0x08, 0xFA, + 0x5F, 0xB5, 0xCA, 0x75, 0x8A, 0x64, 0x37, 0x7D, + 0x38, 0x6D, 0x45, 0xCE, 0x70, 0x60, 0x5B, 0x46, + 0x0E, 0x81, 0x57, 0x03, 0x7B, 0x5B, 0x1B, 0x2E, + 0x0A, 0xED, 0xD1, 0x2A, 0x63, 0x31, 0x15, 0xD6, + 0xC4, 0x3B, 0xC6, 0xC7, 0xC8, 0x36, 0xFF, 0xF3, + 0x3E, 0x7D, 0x03, 0x3F, 0x2E, 0x58, 0x00, 0x52, + 0x71, 0x64, 0xC0, 0xC4, 0x78, 0x1C, 0x37, 0xDF, + 0x50, 0xB6, 0x6B, 0xBA, 0x5C, 0x81, 0x94, 0x73, + 0xA1, 0xC5, 0x30, 0x20, 0x83, 0xA1, 0x6F, 0x01, + 0x43, 0x72, 0x79, 0xD2, 0xF2, 0xDF, 0x14, 0xC8, + 0x78, 0x26, 0x9A, 0x2F, 0x3F, 0xA4, 0x0C, 0x1C, + 0x76, 0x1E, 0xD6, 0x15, 0x01, 0xAC, 0x9E, 0xF1, + 0x41, 0x02, 0x90, 0x38, 0xC8, 0x19, 0x95, 0x40, + 0x89, 0xB7, 0x38, 0x09, 0x87, 0x08, 0x17, 0x43, + 0x93, 0xFE, 0xAE, 0xA7, 0xB0, 0x2A, 0xE5, 0xCE, + 0xF6, 0x7B, 0x3C, 0x8C, 0xE6, 0xA9, 0x70, 0x67, + 0x5C, 0xA1, 0xB8, 0xC8, 0x56, 0xDC, 0xF5, 0x97, + 0x25, 0x08, 0xC7, 0xC6, 0xB2, 0x5E, 0xE4, 0xD1, + 0x2D, 0x82, 0x12, 0xB9, 0x89, 0x40, 0xB4, 0x88, + 0xEC, 0x40, 0x2A, 0xC7, 0xAE, 0x3C, 0x70, 0xDF, + 0x93, 0x8D, 0x12, 0x88, 0xCD, 0xA7, 0xA3, 0x19, + 0xE0, 0x85, 0xBC, 0x73, 0xA4, 0x69, 0xB2, 0xD2, + 0xA3, 0x30, 0x3B, 0x11, 0xA6, 0x83, 0x10, 0x0A, + 0xF6, 0xDB, 0x86, 0x93, 0x7B, 0xA1, 0x18, 0x29, + 0x03, 0x61, 0x6E, 0x3F, 0x03, 0x47, 0xBD, 0x68, + 0x59, 0x1B, 0x47, 0xBA, 0x65, 0x15, 0x6B, 0x93, + 0xF2, 0x60, 0xDE, 0x59, 0xB3, 0xAE, 0xB2, 0x89, + 0xE2, 0xA7, 0x3A, 0x3B, 0xFF, 0x38, 0xC2, 0xF3, + 0xAD, 0xED, 0xA2, 0x9C, 0x7E, 0x90, 0x28, 0x3A, + 0xC7, 0xB8, 0x6D, 0x03, 0x6B, 0x47, 0xD5, 0xBA, + 0x1A, 0x03, 0xEC, 0x78, 0x3D, 0x25, 0x0B, 0xAC, + 0xAE, 0x58, 0x47, 0xE4, 0x1F, 0x82, 0x9C, 0xB3, + 0x3D, 0xE0, 0x8D, 0xF8, 0xF7, 0xD6, 0x9C, 0x9A, + 0xA4, 0xED, 0xE8, 0xD7, 0xAB, 0x96, 0x84, 0x07, + 0xEE, 0xD3, 0x1A, 0x05, 0x6B, 0xA0, 0xEF, 0x88, + 0x16, 0xE1, 0x27, 0xAA, 0x90, 0x06, 0x5A, 0x67, + 0x9E, 0x1C, 0xA9, 0x55, 0x0D, 0xEE, 0xF2, 0x5A, + 0xC5, 0xB7, 0xA3, 0x4F, 0x70, 0xDC, 0xF2, 0xB1, + 0x16, 0xCF, 0x35, 0x1F, 0x3B, 0xAD, 0xA9, 0x9F, + 0x83, 0x6C, 0x73, 0x0D, 0xCC, 0x1A, 0xE0, 0x3F, + 0x49, 0x6C, 0xF3, 0xF0, 0x38, 0x7A, 0x0C, 0x2C, + 0x70, 0x2E, 0x2C, 0x13, 0xBD, 0xD9, 0xCF, 0x45, + 0xA1, 0xCD, 0x53, 0xAB, 0x58, 0x73, 0x11, 0x88, + 0xB1, 0x8E, 0xA8, 0xBE, 0x48, 0xD5, 0x10, 0xC5, + 0x81, 0x2E, 0x90, 0xBC, 0xEC, 0xBC, 0x6E, 0x19, + 0x8E, 0x70, 0x8B, 0x1C, 0x08, 0xC8, 0xF8, 0x64, + 0xB1, 0x24, 0xBB, 0x4C, 0xC0, 0xBD, 0xBB, 0xDF, + 0x2C, 0x2F, 0x4E, 0x38, 0x8F, 0xC1, 0x96, 0x60, + 0xD6, 0x9C, 0xC2, 0xC0, 0xEB, 0xF9, 0x10, 0x08, + 0xC8, 0x24, 0x3D, 0xB4, 0x2D, 0xDA, 0xF5, 0x7C, + 0x02, 0x42, 0x51, 0xC4, 0x23, 0x1D, 0xF5, 0x37, + 0x90, 0xCE, 0x57, 0x56, 0x13, 0xEE, 0x8E, 0x1C, + 0x7A, 0x33, 0xC1, 0x56, 0x1F, 0x35, 0x04, 0xDE, + 0xAA, 0xED, 0x1E, 0x84, 0x08, 0x50, 0x06, 0x23, + 0xEC, 0xA5, 0xAE, 0x5A, 0x28, 0x45, 0x41, 0x17, + 0x49, 0x93, 0x0D, 0x8E, 0x42, 0x07, 0x8C, 0x03, + 0x23, 0x49, 0x95, 0x7F, 0xC3, 0x9A, 0x1D, 0xA0, + 0xEA, 0xF9, 0xE8, 0x7C, 0x31, 0xFF, 0xBF, 0x6A, + 0xC0, 0xC1, 0x81, 0x1E, 0xB2, 0x8A, 0x41, 0xB1, + 0xD8, 0x6B, 0xD7, 0xD4, 0x9A, 0xD1, 0xC4, 0x68, + 0xA4, 0x95, 0x94, 0x95, 0x65, 0x25, 0xA2, 0x0A, + 0x31, 0x70, 0x0F, 0x12, 0x2F, 0x4C, 0x4B, 0xB2, + 0x25, 0x2A, 0x2F, 0x3D, 0x5C, 0x5D, 0x68, 0x73, + 0x83, 0x8C, 0x90, 0x95, 0x97, 0xBB, 0xCA, 0xD8, + 0xE1, 0x33, 0x3D, 0x5D, 0x61, 0x7C, 0x87, 0xC8, + 0xEE, 0x0F, 0x1B, 0x22, 0x38, 0x3B, 0x42, 0x4B, + 0x4C, 0x5C, 0x62, 0x72, 0x98, 0xA3, 0xBE, 0xCC, + 0x1B, 0x32, 0x47, 0x5C, 0x9D, 0xB6, 0xB9, 0xBD, + 0xC6, 0xD6, 0xDC, 0xF5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x10, 0x18, 0x32, 0x3B + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x11, 0x19, 0x28, 0x34 }; #endif #ifndef WOLFSSL_NO_ML_DSA_65 static const byte pk_65[] = { - 0x6C, 0x84, 0x14, 0x38, 0x08, 0x56, 0xCB, 0x52, - 0xD7, 0x9C, 0x4B, 0x29, 0x13, 0x9F, 0xB1, 0x83, - 0x9B, 0x86, 0x06, 0xF5, 0x94, 0x8B, 0x9D, 0x72, - 0xA9, 0x56, 0xDC, 0xF1, 0x01, 0x16, 0xDA, 0x9E, - 0x2D, 0x79, 0x77, 0x01, 0x86, 0xFC, 0x74, 0xD9, - 0x42, 0xC0, 0xF4, 0xA3, 0xB5, 0x95, 0xFF, 0x6C, - 0x19, 0x80, 0x4B, 0x49, 0x90, 0x1C, 0x6A, 0xD5, - 0xFA, 0xF7, 0x16, 0x01, 0xC2, 0xB6, 0x00, 0x31, - 0x5E, 0x1F, 0x40, 0xC2, 0x05, 0x47, 0x67, 0xB0, - 0x09, 0x25, 0xDF, 0x3A, 0xA4, 0x90, 0xE8, 0xC7, - 0x6F, 0x05, 0xFB, 0xFB, 0x74, 0x91, 0x10, 0x75, - 0xE6, 0x51, 0x8C, 0x5F, 0x1D, 0x91, 0xB8, 0xA0, - 0xE5, 0xB5, 0x98, 0x30, 0xD3, 0xDF, 0x39, 0x94, - 0x76, 0x04, 0x11, 0xEB, 0xB9, 0x11, 0xED, 0x4C, - 0xC2, 0xC1, 0x60, 0xE3, 0x84, 0x9A, 0x93, 0x76, - 0x2D, 0xFC, 0xA7, 0xB9, 0x81, 0x2B, 0xC7, 0xAE, - 0xB2, 0xDD, 0xB2, 0x76, 0x7B, 0xEF, 0x36, 0x50, - 0x56, 0x05, 0xAE, 0x06, 0x92, 0x60, 0xBC, 0xC8, - 0xDC, 0x47, 0x87, 0xC4, 0x28, 0xCB, 0x3C, 0x07, - 0x6E, 0xF2, 0xA6, 0xB9, 0x35, 0x61, 0xD8, 0x94, - 0x3F, 0x45, 0xCA, 0xBE, 0x8F, 0x05, 0x53, 0xFF, - 0x2E, 0xA1, 0xAC, 0x95, 0xC1, 0xCE, 0x21, 0x59, - 0x3A, 0x17, 0x54, 0x59, 0xD7, 0xDF, 0x12, 0xC4, - 0x07, 0x0A, 0xDB, 0x0E, 0xEE, 0x55, 0xB4, 0xAB, - 0xAE, 0x59, 0xBE, 0x69, 0xC3, 0xFF, 0x0D, 0xE5, - 0xA9, 0xB0, 0x27, 0xFC, 0x7D, 0x8E, 0x6E, 0x05, - 0x7B, 0x71, 0x52, 0xEE, 0x6A, 0xB4, 0x80, 0xD1, - 0x05, 0xD3, 0x0B, 0x0F, 0x50, 0x51, 0xB6, 0x0C, - 0x79, 0x01, 0xC5, 0x25, 0xC4, 0x63, 0x5F, 0xE6, - 0x68, 0xCC, 0x00, 0xE9, 0xD3, 0x09, 0x7D, 0xB9, - 0x9D, 0x66, 0x32, 0x37, 0x15, 0xCE, 0x4F, 0x0B, - 0x79, 0xB4, 0x26, 0xB4, 0x54, 0x5E, 0x09, 0xF4, - 0xDE, 0x39, 0x32, 0x3D, 0xD1, 0x4C, 0xCB, 0x0D, - 0x17, 0x10, 0x8C, 0xD4, 0x6D, 0xEC, 0x61, 0x38, - 0xCD, 0xFA, 0x28, 0x72, 0xC1, 0xC4, 0xC8, 0xAE, - 0xAD, 0x5C, 0x8C, 0xE0, 0x41, 0x57, 0xE5, 0x53, - 0xA3, 0x75, 0x58, 0xC2, 0x34, 0x6A, 0x06, 0x19, - 0x4C, 0xB5, 0x0B, 0x49, 0x81, 0xBF, 0x4D, 0x09, - 0x0C, 0xE4, 0xE8, 0x60, 0x12, 0x6A, 0x82, 0x54, - 0xA4, 0xD4, 0xC0, 0x84, 0xC3, 0xE2, 0x02, 0x0B, - 0xC0, 0x75, 0x35, 0x21, 0x04, 0x9B, 0x0F, 0xD8, - 0x89, 0x97, 0xE0, 0x27, 0xAC, 0x51, 0xE7, 0x5C, - 0xF1, 0x35, 0x0C, 0x3F, 0x30, 0x3A, 0x0E, 0xCE, - 0x42, 0x64, 0x87, 0x15, 0x3D, 0xAF, 0x1F, 0xAA, - 0xD6, 0x80, 0x8B, 0x9D, 0x99, 0x07, 0xDA, 0x9F, - 0x35, 0x18, 0x5B, 0xD3, 0xBE, 0x8D, 0x9C, 0xEB, - 0xE9, 0x16, 0xCE, 0xD1, 0xFA, 0x29, 0x28, 0xD8, - 0x85, 0xA9, 0xCB, 0xA8, 0x81, 0x49, 0x70, 0x3F, - 0x5E, 0x47, 0x72, 0xE4, 0x85, 0x23, 0x12, 0x5D, - 0xDD, 0x02, 0x6E, 0x71, 0x4C, 0x49, 0xF4, 0xFB, - 0x4E, 0x54, 0x4B, 0xBF, 0x61, 0x7A, 0x40, 0xB0, - 0x0B, 0x68, 0xDF, 0x8F, 0x15, 0x5F, 0x58, 0x80, - 0xD4, 0x11, 0x87, 0x7E, 0x25, 0xB4, 0x2B, 0x24, - 0x48, 0xB3, 0x6B, 0xEC, 0x2F, 0x1F, 0x8F, 0x9A, - 0x77, 0x0C, 0x54, 0x51, 0x50, 0xA0, 0x27, 0x8E, - 0x9B, 0x72, 0x45, 0x00, 0xAE, 0xAA, 0xEA, 0x47, - 0x1C, 0x11, 0xCF, 0xF0, 0x4E, 0x30, 0xEA, 0xB2, - 0xF4, 0x73, 0xBC, 0x04, 0x8E, 0x32, 0xCD, 0x31, - 0xAE, 0xF2, 0x15, 0x79, 0xB6, 0x99, 0x22, 0x5B, - 0xF9, 0xE1, 0xB6, 0x70, 0x0C, 0x57, 0xE5, 0x09, - 0xFC, 0xA1, 0xF2, 0x36, 0x29, 0x4A, 0x59, 0x74, - 0xDA, 0xA1, 0x5F, 0xBC, 0xAD, 0x62, 0xD4, 0xBD, - 0xDC, 0x45, 0x32, 0xB2, 0x61, 0x41, 0x44, 0xDB, - 0xE2, 0x88, 0x07, 0x36, 0x8C, 0x28, 0x1A, 0x77, - 0x0E, 0xA2, 0x2B, 0x1E, 0x5A, 0x3F, 0xA5, 0xBA, - 0x14, 0x92, 0x6D, 0xC5, 0x5A, 0x54, 0xF8, 0x4A, - 0x2A, 0x77, 0xC5, 0xA7, 0x08, 0x41, 0xF0, 0x7B, - 0xC1, 0xDE, 0xEF, 0x74, 0x03, 0xB2, 0x47, 0xAB, - 0x42, 0xB8, 0x4A, 0xDF, 0x14, 0x1E, 0x03, 0x0C, - 0x98, 0x46, 0x84, 0x24, 0xDA, 0xAE, 0xB9, 0x9D, - 0x25, 0x77, 0xF9, 0x50, 0xC2, 0x37, 0x3C, 0xCA, - 0x1E, 0x2D, 0xC2, 0x76, 0x1B, 0x8E, 0xDD, 0x6D, - 0x08, 0xFF, 0x79, 0xE5, 0x28, 0x88, 0x0F, 0xFB, - 0x51, 0xC3, 0x6E, 0xD4, 0x20, 0xAC, 0x5D, 0x50, - 0xF2, 0x58, 0x2A, 0xA6, 0x64, 0xE5, 0x4E, 0xA5, - 0xF4, 0x18, 0x9E, 0xA0, 0x17, 0x6D, 0xAA, 0x61, - 0x22, 0xF6, 0x23, 0x5A, 0x70, 0xB1, 0x5C, 0xEB, - 0x4D, 0xDD, 0x65, 0xD3, 0xBE, 0x6E, 0xBF, 0x3D, - 0xC4, 0x31, 0x89, 0xEE, 0x0A, 0x2E, 0x31, 0x05, - 0x63, 0x8F, 0x23, 0x87, 0x36, 0x95, 0x28, 0x0F, - 0x1B, 0x74, 0x27, 0x43, 0x52, 0xD6, 0x0A, 0x48, - 0xE5, 0xD3, 0xDD, 0x02, 0xFB, 0x7A, 0x5E, 0xD8, - 0x3F, 0xE2, 0x7A, 0x69, 0x82, 0x51, 0x42, 0x1C, - 0x8E, 0x9C, 0x98, 0x80, 0x61, 0x02, 0x39, 0x6E, - 0x53, 0x73, 0x90, 0xAC, 0xFD, 0x8C, 0x1D, 0x0B, - 0x4F, 0x99, 0xB7, 0x02, 0xA9, 0xEA, 0x65, 0x98, - 0x78, 0x58, 0x3D, 0x92, 0x75, 0x89, 0x41, 0xB3, - 0x0E, 0xCE, 0x50, 0x7C, 0x10, 0x4B, 0x2C, 0xE4, - 0x87, 0x67, 0x9E, 0xCF, 0x68, 0xB4, 0xD8, 0xB9, - 0x80, 0x69, 0x8A, 0xCF, 0x6A, 0xA6, 0xA5, 0x7E, - 0x8E, 0xD6, 0xAF, 0x3F, 0xF1, 0x8D, 0x26, 0x68, - 0x95, 0x04, 0x28, 0xB5, 0x7D, 0x18, 0x2F, 0x73, - 0xBB, 0x49, 0xB9, 0xB0, 0x38, 0xCC, 0xC8, 0x2D, - 0x56, 0x12, 0x78, 0xA3, 0x86, 0xD5, 0x66, 0x45, - 0xEC, 0x3F, 0xAF, 0xFB, 0x41, 0x25, 0xE0, 0xE7, - 0xF3, 0x6B, 0x48, 0xB1, 0x4B, 0x45, 0x25, 0x47, - 0xA0, 0xB4, 0x81, 0xAA, 0x6B, 0x33, 0x42, 0x29, - 0x24, 0x91, 0x53, 0xE4, 0x2E, 0xDF, 0x7E, 0x49, - 0xDD, 0x6E, 0x76, 0x36, 0xBF, 0xC6, 0x15, 0xA2, - 0x3A, 0x40, 0x1E, 0xFD, 0x40, 0x34, 0xC8, 0x1B, - 0x4D, 0xCE, 0xF0, 0x27, 0xD3, 0x44, 0xDD, 0xCC, - 0xE0, 0xA7, 0x16, 0x18, 0xEB, 0x59, 0x10, 0xCE, - 0xC6, 0x22, 0x28, 0x81, 0x93, 0x85, 0x03, 0x3E, - 0x8D, 0x0A, 0xBD, 0x49, 0x3D, 0x98, 0x3E, 0x4F, - 0xC0, 0x87, 0xD7, 0x2B, 0x45, 0x5E, 0x4D, 0xB6, - 0x3A, 0x2F, 0x82, 0xCE, 0xFF, 0x65, 0xC1, 0xE6, - 0x28, 0xEA, 0xE6, 0x30, 0x59, 0x6D, 0xEC, 0x27, - 0xFB, 0x98, 0xB8, 0x4D, 0xBF, 0xDC, 0xDF, 0xAB, - 0x40, 0xE4, 0x72, 0x24, 0x49, 0x14, 0xAF, 0xF1, - 0x79, 0x32, 0x6D, 0x54, 0x2D, 0x40, 0x1A, 0x3C, - 0xBB, 0x86, 0xE5, 0xFF, 0x83, 0x51, 0xEF, 0xE5, - 0x3A, 0x73, 0xC5, 0x1A, 0xBB, 0x63, 0xFF, 0x55, - 0x3E, 0x7D, 0x79, 0x57, 0xEF, 0x89, 0x13, 0x5E, - 0x0F, 0x5B, 0xB1, 0xBD, 0x0C, 0x24, 0xF9, 0xE4, - 0x5E, 0x32, 0x36, 0x41, 0x3C, 0x60, 0xE1, 0x39, - 0x6A, 0x47, 0x56, 0x7C, 0x94, 0x39, 0x51, 0x0F, - 0x00, 0xD4, 0xA4, 0x3C, 0x14, 0x9A, 0x5C, 0xCC, - 0x04, 0xF3, 0xD4, 0x7E, 0x67, 0xA8, 0xE2, 0x94, - 0xA4, 0x61, 0xA5, 0xF6, 0x93, 0xDB, 0x0C, 0xAE, - 0x22, 0xCF, 0xAC, 0x61, 0xE8, 0x53, 0x47, 0x7D, - 0x33, 0x9A, 0x4E, 0x45, 0xF7, 0xB1, 0x7C, 0x3C, - 0x11, 0x6D, 0x56, 0xF3, 0xA0, 0x68, 0xFC, 0x5A, - 0xDF, 0xEF, 0x38, 0xFF, 0x85, 0x33, 0x2B, 0xD5, - 0x15, 0x3C, 0x4D, 0x8F, 0xB8, 0xF1, 0x48, 0xF1, - 0x17, 0x65, 0x9C, 0x2E, 0xA9, 0x4D, 0xB4, 0x2A, - 0xA0, 0xB0, 0xBE, 0xBB, 0x47, 0x5A, 0x11, 0x04, - 0x12, 0xF3, 0xCD, 0x33, 0x49, 0xFC, 0x1A, 0xD0, - 0x41, 0xB7, 0xD5, 0x30, 0x4A, 0x85, 0x93, 0x14, - 0x4E, 0xFA, 0x3A, 0x36, 0x1D, 0x1B, 0x0C, 0x76, - 0x13, 0xB8, 0x2C, 0x08, 0x6E, 0xA7, 0x12, 0x6E, - 0x43, 0xC6, 0x16, 0xCE, 0xE8, 0xF1, 0x44, 0x4E, - 0x99, 0x56, 0xE8, 0x7F, 0x5C, 0xAB, 0x95, 0xC7, - 0xC7, 0xFB, 0x17, 0x58, 0xEC, 0x7D, 0x97, 0x01, - 0x9E, 0x5B, 0xA9, 0x35, 0x43, 0xEF, 0x3B, 0xAC, - 0x1A, 0x17, 0x42, 0x99, 0xCA, 0x48, 0xBF, 0x78, - 0x59, 0xDB, 0xFB, 0xDF, 0xF2, 0x43, 0xB1, 0x14, - 0xF6, 0xBF, 0x42, 0x3C, 0xE9, 0x8B, 0x4D, 0x4D, - 0x09, 0x1D, 0xA4, 0x4F, 0x32, 0x74, 0xD5, 0x73, - 0xFD, 0xC9, 0x04, 0xBD, 0x88, 0x5E, 0x35, 0xC9, - 0x15, 0x2A, 0x65, 0x35, 0x48, 0x88, 0xF1, 0x1E, - 0xD4, 0xF3, 0xD6, 0x3F, 0x26, 0xA7, 0xBE, 0x2F, - 0x57, 0x26, 0xEA, 0xDA, 0xF4, 0x85, 0x86, 0x59, - 0x2B, 0xBD, 0xF6, 0xCE, 0xE2, 0x46, 0x76, 0x9E, - 0x0E, 0xDA, 0x2A, 0x80, 0x77, 0x1F, 0xED, 0x34, - 0x7D, 0x67, 0xAF, 0xEE, 0xC6, 0x8B, 0x89, 0x46, - 0x3F, 0xA0, 0x49, 0x6D, 0xBC, 0x15, 0xC8, 0x9E, - 0x8D, 0x56, 0x99, 0x83, 0xD1, 0xD6, 0x74, 0x73, - 0x3F, 0x2B, 0xF9, 0xDF, 0x4A, 0x98, 0x0E, 0xA8, - 0xC5, 0xE3, 0xAF, 0x15, 0x56, 0x0A, 0x0E, 0x28, - 0xD6, 0x72, 0xB5, 0x80, 0xAB, 0x65, 0x52, 0xED, - 0x76, 0xAA, 0xCB, 0x5F, 0x80, 0x26, 0x0B, 0x97, - 0x03, 0x76, 0x9D, 0x33, 0xF4, 0x13, 0x8A, 0xBC, - 0x10, 0xBF, 0x5B, 0x05, 0x82, 0xDC, 0xC6, 0x2D, - 0xBE, 0x58, 0xC8, 0x90, 0xF5, 0x1B, 0x41, 0x00, - 0x12, 0x77, 0x34, 0xFB, 0x7D, 0xB7, 0x44, 0x7A, - 0x72, 0x0A, 0xAE, 0x00, 0x9D, 0x00, 0xBE, 0x8C, - 0x61, 0x07, 0x92, 0xC6, 0x4F, 0x13, 0x1F, 0x2D, - 0x72, 0x11, 0x5C, 0x7E, 0x05, 0x8E, 0x48, 0xB9, - 0xDE, 0x64, 0xF5, 0x5B, 0x4D, 0x61, 0x0C, 0x36, - 0xD1, 0x12, 0x71, 0x6A, 0x31, 0xA3, 0xDF, 0xE2, - 0x66, 0x99, 0xE9, 0xC2, 0xAB, 0xA0, 0x56, 0x58, - 0xCE, 0xF1, 0xB2, 0xB0, 0x86, 0x7C, 0xF8, 0xD5, - 0x23, 0x3D, 0xB7, 0x4F, 0xA8, 0xDC, 0x3A, 0xD1, - 0x45, 0xF5, 0xD2, 0x85, 0x74, 0x36, 0x0A, 0x85, - 0xE3, 0xB0, 0xB1, 0x0A, 0xC0, 0xA6, 0x46, 0x7A, - 0x7B, 0x05, 0x98, 0x46, 0x28, 0xEC, 0xA1, 0x04, - 0x63, 0xF3, 0x48, 0xA3, 0x11, 0x1E, 0x00, 0x57, - 0x8D, 0x3C, 0xE5, 0x48, 0x0F, 0x53, 0x75, 0xA1, - 0xEE, 0x23, 0xEE, 0x82, 0x08, 0x7B, 0xAC, 0x41, - 0x23, 0x3A, 0x14, 0xAA, 0xA7, 0x24, 0x73, 0x4B, - 0x18, 0x74, 0xA4, 0xAC, 0xE1, 0x13, 0x37, 0x06, - 0x25, 0x8F, 0x5F, 0xEA, 0x3A, 0x0C, 0x16, 0x09, - 0xE3, 0x0C, 0x7F, 0xD2, 0x10, 0xDA, 0x0C, 0x4F, - 0xDE, 0x91, 0x62, 0xDF, 0x66, 0xFB, 0xAF, 0x79, - 0x2F, 0xA2, 0xAE, 0xAA, 0x51, 0x2F, 0x0F, 0xF7, - 0x83, 0x7B, 0x9C, 0xC0, 0x2E, 0xE9, 0xBD, 0x95, - 0x53, 0x9F, 0x00, 0x1B, 0xBD, 0x60, 0xDD, 0x8B, - 0x42, 0xD6, 0x16, 0xB2, 0xCA, 0x95, 0xF3, 0x83, - 0x5F, 0x5E, 0x47, 0xD4, 0x3B, 0x14, 0x34, 0xC4, - 0x56, 0x3F, 0xD8, 0x1C, 0x15, 0xBE, 0xFA, 0x20, - 0x2C, 0xF3, 0xD9, 0x54, 0x08, 0x73, 0xF6, 0x84, - 0xAF, 0xE1, 0x9A, 0xB5, 0xC0, 0x1F, 0xA9, 0x2E, - 0x95, 0xA8, 0xCD, 0x6F, 0x36, 0x07, 0x30, 0x85, - 0x6E, 0x59, 0xC9, 0xC6, 0xAB, 0x77, 0x0D, 0x65, - 0x75, 0x96, 0x2A, 0xF7, 0x58, 0x78, 0x57, 0x2A, - 0x2A, 0x26, 0x41, 0x3D, 0x01, 0xAB, 0x31, 0x8C, - 0x10, 0x0D, 0xFC, 0x34, 0xDC, 0x1D, 0xEF, 0xA5, - 0x92, 0x7C, 0x4B, 0x45, 0x99, 0x25, 0xD7, 0x3E, - 0x1E, 0xB9, 0x14, 0x70, 0xE3, 0x7A, 0x58, 0x45, - 0x5C, 0x22, 0xA9, 0x61, 0xFD, 0x53, 0xF7, 0xD9, - 0x90, 0x26, 0xFF, 0x88, 0x4B, 0xF4, 0xA2, 0x57, - 0x9F, 0x70, 0x63, 0x35, 0xEF, 0xB6, 0xFB, 0x22, - 0x50, 0xD5, 0x2A, 0xE5, 0x61, 0x89, 0x8B, 0xA1, - 0x60, 0x6E, 0x51, 0xE9, 0x6D, 0x37, 0xC9, 0xED, - 0x3E, 0xC6, 0xCF, 0xCB, 0x33, 0xBF, 0xBE, 0x9C, - 0x31, 0x43, 0xFD, 0x3B, 0x6B, 0x33, 0x4D, 0x5F, - 0x61, 0x92, 0x2B, 0x36, 0x9A, 0xFB, 0xB3, 0x1C, - 0x3E, 0x6E, 0x9B, 0x5F, 0x3A, 0xEB, 0xF9, 0x5C, - 0xB7, 0x08, 0x34, 0x6F, 0xEC, 0xF7, 0x15, 0x9C, - 0xAD, 0x94, 0xA9, 0x3D, 0x8C, 0xD4, 0xB8, 0xC4, - 0x89, 0x41, 0x92, 0xDF, 0xE5, 0x3E, 0xA4, 0x36, - 0xFB, 0xF3, 0xAF, 0x4E, 0x86, 0x4E, 0x8C, 0x39, - 0x91, 0xEA, 0x02, 0x0A, 0x81, 0x1F, 0x0A, 0xF5, - 0x0B, 0x42, 0x57, 0x43, 0x6A, 0x3F, 0xF5, 0x22, - 0xBE, 0x73, 0x67, 0x39, 0x1D, 0x0F, 0x95, 0x0B, - 0xA6, 0x45, 0x2F, 0xBF, 0xD8, 0xFD, 0x87, 0x28, - 0xF4, 0x0B, 0xD2, 0xFC, 0xB8, 0x94, 0x52, 0x99, - 0x85, 0xB4, 0x32, 0xDF, 0xEF, 0x62, 0x30, 0xEB, - 0x4D, 0xEE, 0x73, 0x7A, 0x8D, 0x10, 0xA3, 0xBC, - 0xDF, 0xB7, 0x63, 0xE0, 0x86, 0x9B, 0x22, 0x5C, - 0x1A, 0x8D, 0x0E, 0x1F, 0xBF, 0x2D, 0x16, 0x1C, - 0x2C, 0x65, 0xD6, 0xDF, 0xB9, 0x58, 0xE9, 0x82, - 0xD1, 0x17, 0x77, 0xAC, 0xBE, 0xAD, 0x8D, 0xFB, - 0x6B, 0x1F, 0x5E, 0xB2, 0x1E, 0xA9, 0x42, 0xF7, - 0xC4, 0x0D, 0xC2, 0x0D, 0x2E, 0x4E, 0xB3, 0xE7, - 0x29, 0xB4, 0xE2, 0x9F, 0x75, 0x01, 0xDA, 0x34, - 0x23, 0x45, 0x61, 0xF6, 0x28, 0x88, 0x12, 0xD6, - 0x12, 0xD4, 0x1D, 0xFA, 0x83, 0xC5, 0xB8, 0xD9, - 0x0F, 0xF3, 0x8B, 0xA5, 0x48, 0x20, 0x1B, 0x57, - 0x5B, 0x52, 0x93, 0xAD, 0x78, 0x12, 0x0D, 0x91, - 0xCE, 0xC0, 0x59, 0xCA, 0xE2, 0xE7, 0x6A, 0x9A, - 0xB4, 0x3E, 0xF1, 0x28, 0x1E, 0x2B, 0xEF, 0x3E, - 0x34, 0x8D, 0x28, 0xF2, 0x19, 0x47, 0xC8, 0x88, - 0x48, 0x96, 0x04, 0x59, 0x48, 0x97, 0x75, 0x17, - 0x6F, 0x8E, 0x40, 0xEE, 0x06, 0x42, 0x79, 0x53, - 0x68, 0x7F, 0xB6, 0x3E, 0x47, 0x0F, 0x7D, 0x59, - 0xFB, 0x60, 0xDF, 0x56, 0x9F, 0x8A, 0x11, 0xE2, - 0x8E, 0x09, 0x37, 0x16, 0x2C, 0x46, 0xAF, 0xC7, - 0xD2, 0x21, 0x0A, 0x88, 0x5F, 0xFA, 0x21, 0xB3, - 0xDB, 0xF5, 0x35, 0x4B, 0x29, 0x41, 0xF4, 0xED, - 0x5D, 0x50, 0x79, 0x08, 0x90, 0x84, 0x0C, 0xC3, - 0xB9, 0x73, 0xD2, 0xC3, 0xD0, 0x26, 0x02, 0xB2, - 0x9B, 0xAC, 0xCB, 0x6C, 0xE1, 0x7C, 0xED, 0xB9, - 0x7B, 0x08, 0x5A, 0x2A, 0xB3, 0x10, 0x57, 0x2B, - 0xA7, 0x37, 0x1D, 0x1F, 0x81, 0x20, 0xFF, 0xE3, - 0x7D, 0x0B, 0x0F, 0xCA, 0x35, 0xAF, 0xC5, 0xB5, - 0x62, 0xAA, 0x84, 0x99, 0x71, 0x5A, 0x29, 0x9C, - 0xE0, 0x59, 0xCC, 0xE3, 0xB0, 0xD1, 0x1C, 0xEF, - 0x0D, 0x92, 0x38, 0x96, 0x1A, 0xD4, 0xBE, 0x11, - 0xE9, 0xA6, 0xD1, 0xA4, 0x69, 0x21, 0x77, 0xC8, - 0xB0, 0xC5, 0x3F, 0x11, 0xA8, 0xED, 0x26, 0x50, - 0x21, 0x2E, 0x7A, 0x2F, 0x80, 0xEB, 0xFF, 0x6D, - 0xCF, 0xE4, 0x67, 0x21, 0x03, 0x65, 0x84, 0x34, - 0xD0, 0x32, 0x7A, 0xDD, 0xCD, 0x66, 0xBC, 0xB6 + 0x6C, 0x9E, 0x7A, 0x1E, 0xE3, 0x66, 0x25, 0x76, + 0x0E, 0x5D, 0x2F, 0x33, 0xDF, 0x29, 0x29, 0xDA, + 0x56, 0x20, 0x32, 0x34, 0x06, 0x91, 0x60, 0xE5, + 0xF2, 0xBF, 0x03, 0x9C, 0x11, 0x06, 0x22, 0x73, + 0x07, 0x3C, 0x23, 0x75, 0x66, 0xCE, 0x05, 0x5D, + 0x87, 0x1F, 0x38, 0xAC, 0xD1, 0xA9, 0x85, 0x9A, + 0x82, 0x44, 0x67, 0xF1, 0x9B, 0xE6, 0x8E, 0x4F, + 0x00, 0x64, 0x5D, 0x22, 0x5C, 0x42, 0xC8, 0x5A, + 0x55, 0x7D, 0x2C, 0x5E, 0xCB, 0x44, 0x2B, 0x0F, + 0x02, 0x8A, 0x65, 0x28, 0x89, 0x8E, 0xE2, 0xB6, + 0x73, 0xD8, 0x63, 0xF3, 0x2E, 0xB9, 0xEC, 0x81, + 0x64, 0x12, 0x75, 0x41, 0xF3, 0x25, 0x19, 0xBB, + 0x88, 0xE0, 0x34, 0xA0, 0x3F, 0x46, 0xF7, 0xD1, + 0x93, 0xCD, 0x3D, 0xFB, 0xAD, 0xF6, 0x35, 0x57, + 0x92, 0x6C, 0x5C, 0x8F, 0x5B, 0x76, 0x6A, 0x7F, + 0xC5, 0xEC, 0x8B, 0x3F, 0x94, 0x8B, 0xF7, 0xA8, + 0x21, 0xB5, 0x4C, 0x94, 0x41, 0xAB, 0x0B, 0xD8, + 0x33, 0xFD, 0x63, 0x54, 0xCE, 0xC7, 0x06, 0xFA, + 0xA5, 0x00, 0xAB, 0xB5, 0x28, 0x9B, 0x90, 0xB1, + 0xBF, 0x91, 0x76, 0x77, 0xA2, 0x9D, 0x11, 0x5F, + 0x00, 0x94, 0xBD, 0xB4, 0x8D, 0xC7, 0x2E, 0x26, + 0x1D, 0xBA, 0x12, 0x0B, 0xA6, 0xFF, 0x5E, 0x52, + 0xA0, 0x1B, 0x17, 0x89, 0x81, 0xDD, 0x82, 0x96, + 0x44, 0x46, 0x56, 0xD9, 0x44, 0x2D, 0xF9, 0xCB, + 0xB6, 0xBF, 0xDA, 0xE5, 0x6A, 0x23, 0x0F, 0x6F, + 0x29, 0xF9, 0x4C, 0xDC, 0xC2, 0x65, 0x57, 0x6A, + 0xA8, 0x75, 0x2A, 0xCE, 0xD0, 0x7E, 0x99, 0x89, + 0x5C, 0xAE, 0xF0, 0x16, 0x8B, 0xF8, 0x3D, 0x23, + 0xFD, 0xAD, 0xFB, 0xB9, 0x28, 0xCB, 0xCD, 0xAB, + 0xA2, 0x5F, 0xE2, 0xCD, 0x26, 0xAD, 0xDF, 0xB0, + 0xDA, 0xCD, 0x74, 0x94, 0x0F, 0x35, 0x14, 0x26, + 0x94, 0x2F, 0x17, 0x6F, 0xFB, 0xC5, 0xF3, 0x45, + 0x6D, 0xB7, 0xC9, 0x12, 0xAA, 0x16, 0xB8, 0x6D, + 0x07, 0x45, 0xF8, 0x7C, 0x9F, 0x45, 0x37, 0x0A, + 0x84, 0x56, 0xA1, 0xAD, 0xB5, 0x1D, 0xB4, 0x05, + 0x2B, 0x5C, 0x9E, 0xAF, 0x60, 0xAD, 0x7B, 0x80, + 0xA4, 0x2E, 0xA4, 0xBF, 0x92, 0xC8, 0x41, 0x27, + 0x3A, 0xD7, 0x61, 0xDE, 0xDB, 0x0D, 0x34, 0xBF, + 0x57, 0x96, 0x00, 0xB1, 0x49, 0xFC, 0xCD, 0x42, + 0xAB, 0x15, 0x49, 0xBA, 0x0A, 0xBE, 0xDA, 0x57, + 0xEF, 0x71, 0xD1, 0xFC, 0xA5, 0x70, 0x2A, 0xAD, + 0x08, 0x32, 0x99, 0xBB, 0x98, 0x30, 0x01, 0x89, + 0xC2, 0x5F, 0x3B, 0x27, 0x0A, 0x87, 0x65, 0x8D, + 0x0B, 0x2E, 0xA5, 0x65, 0x24, 0x14, 0x7F, 0x73, + 0x9E, 0xB6, 0xC6, 0x76, 0xD7, 0xBE, 0x73, 0xDD, + 0x3B, 0x95, 0xB1, 0x0C, 0x55, 0xAB, 0x46, 0xFD, + 0x01, 0x54, 0x9C, 0x51, 0x68, 0xBF, 0x7D, 0xA1, + 0x3A, 0x49, 0x97, 0x85, 0xF3, 0x5A, 0x1E, 0x3B, + 0x56, 0xF4, 0xC5, 0x67, 0xF5, 0x4E, 0xA9, 0xAA, + 0x28, 0x17, 0xA3, 0x36, 0x38, 0x36, 0x43, 0xFA, + 0x2E, 0xA3, 0x1F, 0xB1, 0xB7, 0x3E, 0x10, 0x24, + 0x8D, 0xFC, 0xA0, 0x5C, 0x04, 0x13, 0x12, 0x66, + 0x49, 0x8E, 0x1C, 0x94, 0x91, 0x13, 0x5A, 0x50, + 0xE6, 0x3D, 0x02, 0xFA, 0xDF, 0x41, 0x65, 0xFC, + 0x9E, 0x15, 0xE3, 0xE1, 0xB3, 0x2F, 0xAB, 0x83, + 0x37, 0x68, 0x4C, 0x49, 0x19, 0x3E, 0x1B, 0xC4, + 0xED, 0xEA, 0xE3, 0x73, 0xA2, 0x67, 0xA7, 0x14, + 0xAC, 0x1F, 0x90, 0x9C, 0xC6, 0x57, 0xCD, 0x80, + 0x66, 0x64, 0x63, 0x27, 0xE0, 0xEE, 0xA0, 0x41, + 0xAC, 0x9F, 0x2A, 0xEF, 0xFC, 0x80, 0x69, 0x1B, + 0xF6, 0x0D, 0x3C, 0x94, 0xC6, 0x42, 0x55, 0x7E, + 0x42, 0x99, 0xD3, 0x95, 0x92, 0x22, 0x16, 0xC6, + 0x5E, 0x75, 0xB7, 0xE1, 0xA5, 0x02, 0x89, 0x60, + 0x38, 0x4B, 0xF8, 0x16, 0xC9, 0xF7, 0x05, 0x48, + 0x29, 0xE7, 0x98, 0x5B, 0x58, 0x41, 0xA7, 0x33, + 0xF3, 0x3F, 0xCE, 0x24, 0x55, 0xEF, 0xC8, 0x9B, + 0xAE, 0x84, 0xB4, 0x79, 0x90, 0xE8, 0xD0, 0xAF, + 0xC6, 0x19, 0x3E, 0x4A, 0xF9, 0xBC, 0x68, 0x0A, + 0xE2, 0x4F, 0xE5, 0x91, 0xE8, 0x8B, 0xA6, 0xA2, + 0xAE, 0x12, 0xDA, 0x38, 0x58, 0xD2, 0x1F, 0x49, + 0x2D, 0x24, 0xAB, 0xC4, 0xFE, 0x4F, 0xD5, 0x2D, + 0x5A, 0xBF, 0x24, 0xBD, 0x25, 0x46, 0x87, 0xB9, + 0x18, 0x79, 0x2F, 0x0A, 0x00, 0x3A, 0x52, 0x22, + 0xDF, 0x45, 0x03, 0x86, 0x85, 0xC7, 0x25, 0xCE, + 0x75, 0x79, 0xE0, 0x2C, 0xB1, 0x68, 0xBB, 0xC6, + 0x66, 0xAB, 0xF6, 0x69, 0x85, 0x6E, 0x10, 0x53, + 0x7C, 0x92, 0x91, 0x69, 0x2C, 0x0C, 0xB0, 0xCF, + 0xA9, 0x06, 0x27, 0x0A, 0xC2, 0xC7, 0xB7, 0xDC, + 0x31, 0xD4, 0xF9, 0x28, 0x3C, 0xB2, 0xDB, 0x8A, + 0x46, 0x2A, 0xEC, 0x0B, 0x98, 0x07, 0xBB, 0xF4, + 0xAB, 0x45, 0x76, 0xFE, 0xC6, 0x22, 0x6B, 0x41, + 0x79, 0x32, 0x2B, 0x67, 0xAE, 0xA5, 0x3B, 0xDD, + 0xF9, 0xC9, 0xBE, 0x5E, 0x0D, 0xBC, 0x43, 0xF7, + 0x87, 0x43, 0x06, 0x8A, 0xB5, 0xBE, 0x49, 0xF0, + 0xE6, 0x2F, 0x8E, 0x2E, 0xB1, 0xB6, 0xC6, 0x73, + 0x6C, 0x05, 0xC9, 0x41, 0x3D, 0x06, 0x5C, 0xE0, + 0xCC, 0xB7, 0x90, 0x54, 0x80, 0x41, 0xD7, 0xE8, + 0x32, 0x88, 0x1A, 0x83, 0x9B, 0x57, 0x29, 0xAF, + 0x94, 0xAB, 0x79, 0xFD, 0x8A, 0x16, 0xDF, 0xFF, + 0x78, 0xCA, 0xAA, 0x14, 0x1D, 0x97, 0xCC, 0x06, + 0x50, 0xF8, 0x62, 0x62, 0xF2, 0x61, 0x59, 0xBE, + 0x8B, 0x36, 0x1A, 0x4A, 0x04, 0x1E, 0x9A, 0x0B, + 0x65, 0x11, 0xBB, 0xE3, 0x35, 0x5A, 0x4B, 0xF5, + 0x7A, 0xC0, 0x98, 0x48, 0x84, 0x7E, 0xE0, 0x24, + 0x3C, 0x3B, 0xA7, 0x74, 0x77, 0x6F, 0x7E, 0x9A, + 0x22, 0x72, 0x75, 0xD7, 0x4E, 0x6E, 0x31, 0x01, + 0xD3, 0x82, 0x81, 0x87, 0x63, 0xED, 0x1E, 0x13, + 0x53, 0xAB, 0x9E, 0xEC, 0xCD, 0x92, 0x0C, 0xD2, + 0x89, 0x22, 0xD5, 0x59, 0xA4, 0x04, 0x8F, 0x40, + 0xF0, 0x62, 0x16, 0x4C, 0xB6, 0x61, 0xC4, 0xF4, + 0xAF, 0xA8, 0x1A, 0x3D, 0x55, 0x93, 0x3C, 0x47, + 0x91, 0xED, 0xDA, 0xA3, 0x93, 0x9E, 0x5A, 0xC3, + 0x42, 0xB0, 0xAD, 0x1F, 0x43, 0x8A, 0x53, 0x2C, + 0x6C, 0xE7, 0x86, 0x68, 0x1A, 0x87, 0x0D, 0x94, + 0xEC, 0x88, 0xA3, 0x34, 0xCC, 0xEF, 0xC6, 0xAC, + 0xE7, 0xD9, 0x88, 0xA1, 0xA8, 0x2B, 0xC0, 0xAC, + 0xCE, 0x78, 0x5F, 0x12, 0x3B, 0xE2, 0x3A, 0x7C, + 0x92, 0xAF, 0x10, 0x8E, 0x5E, 0xD4, 0xF0, 0x86, + 0x9E, 0x22, 0xDA, 0xE2, 0x73, 0x55, 0x6D, 0x1D, + 0xE3, 0x86, 0x62, 0x3A, 0x6C, 0x3F, 0x11, 0x5B, + 0xBD, 0x11, 0x92, 0x71, 0xD3, 0xFB, 0xA7, 0x96, + 0xF6, 0x18, 0xB5, 0x39, 0x59, 0xFB, 0x98, 0x01, + 0x2E, 0x7D, 0x5B, 0x9A, 0xC6, 0x88, 0x94, 0x0B, + 0x87, 0xE2, 0xC9, 0xC0, 0x65, 0x52, 0x4A, 0x00, + 0xD3, 0xA4, 0xF4, 0xDB, 0xF5, 0x2F, 0x4B, 0x1A, + 0x63, 0xEF, 0x5C, 0x46, 0x19, 0x3B, 0xAD, 0xF7, + 0xAD, 0x7F, 0x98, 0x8D, 0x44, 0x64, 0x34, 0x5B, + 0x2C, 0x3E, 0x54, 0x96, 0x84, 0xF2, 0xF9, 0x05, + 0xF6, 0xF8, 0x9D, 0xD6, 0x41, 0x47, 0x3E, 0xC0, + 0x51, 0x08, 0xA5, 0x2D, 0x8D, 0xBB, 0x91, 0x76, + 0x8C, 0x54, 0x1D, 0xE5, 0x20, 0xB1, 0x76, 0x66, + 0x97, 0x0A, 0xAE, 0xB5, 0x06, 0xE7, 0x5D, 0x8E, + 0xE9, 0xF4, 0xB4, 0x45, 0x5B, 0x71, 0xE0, 0x08, + 0x8A, 0xB2, 0x56, 0x55, 0x21, 0x3B, 0x75, 0x85, + 0x9D, 0x25, 0xF5, 0x59, 0xD3, 0xC3, 0x24, 0xD2, + 0x83, 0xD3, 0x97, 0xAB, 0xE6, 0xF0, 0xAA, 0xA3, + 0x86, 0x81, 0x57, 0x68, 0xD0, 0x33, 0x57, 0xD7, + 0x75, 0x96, 0x49, 0x02, 0x41, 0x31, 0x53, 0xE3, + 0x56, 0x0C, 0xCE, 0xF1, 0xFD, 0x44, 0xB6, 0x5F, + 0xF1, 0xB2, 0x87, 0xA9, 0x2A, 0x96, 0x93, 0xF0, + 0x34, 0xB7, 0xEE, 0x66, 0x89, 0x34, 0x70, 0x2D, + 0x75, 0x01, 0xCA, 0xF6, 0xDA, 0x4E, 0xE9, 0x8A, + 0xF4, 0xE8, 0xE6, 0x4B, 0x03, 0x40, 0xE0, 0xBB, + 0x8B, 0xDC, 0x53, 0x3B, 0x0E, 0xFE, 0xE1, 0x91, + 0x5A, 0x4B, 0x68, 0xB9, 0x3C, 0x5E, 0x95, 0x32, + 0x1E, 0xED, 0xC2, 0x34, 0xAE, 0xFE, 0x71, 0xAE, + 0x2E, 0x5D, 0xAC, 0xEC, 0x2F, 0x52, 0xF8, 0x37, + 0x23, 0xA2, 0x39, 0x2A, 0x7F, 0x8E, 0x13, 0xBC, + 0x03, 0x01, 0xCD, 0x10, 0x4D, 0x85, 0x2E, 0x62, + 0xA7, 0xF8, 0x28, 0xAD, 0x32, 0x9B, 0x3D, 0x95, + 0x96, 0xC5, 0x8E, 0x13, 0xFC, 0xC0, 0xED, 0x96, + 0xC1, 0xC4, 0x8D, 0x82, 0xA2, 0xC0, 0xF4, 0xD9, + 0xD2, 0x4D, 0xD8, 0x42, 0x1F, 0xDC, 0xCE, 0xFD, + 0x49, 0x7A, 0x9B, 0x05, 0xFF, 0xC5, 0x09, 0x04, + 0x77, 0x04, 0x01, 0x37, 0x3F, 0xEE, 0x7D, 0xC7, + 0x37, 0x73, 0x41, 0x8A, 0xEB, 0x4A, 0x1F, 0x59, + 0x9A, 0x4B, 0xB3, 0x8E, 0xDE, 0x8D, 0x10, 0xA3, + 0xCC, 0x83, 0xA1, 0xC7, 0x2D, 0xE9, 0x21, 0x96, + 0x9E, 0x3C, 0xE3, 0xE8, 0xEF, 0x2F, 0x7D, 0xA8, + 0x9D, 0x34, 0x4C, 0x80, 0xD6, 0x1C, 0xF9, 0xC5, + 0xA4, 0x23, 0xB1, 0xA4, 0xF3, 0x56, 0x7D, 0x96, + 0xDB, 0x2D, 0xA3, 0xDB, 0x9B, 0x5B, 0x5F, 0xA6, + 0x81, 0x56, 0xBE, 0x74, 0x52, 0xC8, 0xA0, 0x18, + 0x1B, 0xB9, 0xF0, 0xDC, 0x75, 0xCD, 0x97, 0x50, + 0x88, 0x3D, 0x0D, 0xDA, 0xE5, 0x3F, 0xC1, 0x56, + 0xD6, 0x7A, 0x74, 0x20, 0x08, 0x69, 0x04, 0x6B, + 0x41, 0xDF, 0x4B, 0xC4, 0x39, 0x69, 0x93, 0xC0, + 0x8A, 0xA4, 0x89, 0x7A, 0x0B, 0xDD, 0xEF, 0xB5, + 0x5F, 0x69, 0xCC, 0x1C, 0x4D, 0x7B, 0x5F, 0xB1, + 0x50, 0x40, 0x84, 0x27, 0xB4, 0x16, 0xF7, 0x31, + 0x83, 0xF2, 0xB3, 0xCC, 0x16, 0xE3, 0xB7, 0xDA, + 0x63, 0xCE, 0xE1, 0x14, 0x3A, 0xDA, 0x1A, 0x05, + 0x66, 0x26, 0xA0, 0x77, 0xB6, 0xD2, 0x1C, 0x3D, + 0xD9, 0x74, 0xED, 0x90, 0x7C, 0x5A, 0x09, 0x40, + 0x19, 0x22, 0x57, 0x37, 0xEF, 0xB9, 0x33, 0x19, + 0xAD, 0x3B, 0x40, 0xA4, 0xF4, 0x34, 0xAE, 0x49, + 0xD2, 0x83, 0x91, 0xC1, 0x7A, 0x99, 0x9C, 0x74, + 0x4A, 0x68, 0xC5, 0x5A, 0x91, 0xB8, 0x62, 0x72, + 0x95, 0x83, 0xD3, 0xDA, 0x46, 0xEE, 0x70, 0xC5, + 0xCC, 0x46, 0x16, 0x94, 0x16, 0x7D, 0x32, 0xD2, + 0x1D, 0xE7, 0x53, 0x27, 0x73, 0x2C, 0x63, 0xBB, + 0xFB, 0xD7, 0xB3, 0x0D, 0xBF, 0x20, 0x57, 0xA0, + 0xD6, 0x81, 0x51, 0x9F, 0x6E, 0x4A, 0xF6, 0x08, + 0xD4, 0xBC, 0xD0, 0xB4, 0x75, 0x07, 0x26, 0x77, + 0x0E, 0x15, 0x6A, 0xED, 0xE8, 0x54, 0x17, 0xBD, + 0x75, 0x9D, 0x5F, 0xFE, 0x40, 0x1C, 0xB2, 0x99, + 0x6F, 0x34, 0x43, 0x4D, 0xB4, 0x28, 0xD9, 0xA4, + 0x17, 0x03, 0x72, 0x01, 0xFC, 0xD2, 0x60, 0xFA, + 0xA9, 0x80, 0x84, 0x50, 0x2E, 0xED, 0x5C, 0x27, + 0xA8, 0x91, 0x6E, 0x44, 0xF5, 0x92, 0x98, 0x19, + 0xD2, 0x1A, 0x69, 0xCE, 0x16, 0xBC, 0xDC, 0x3C, + 0xC8, 0x14, 0x1E, 0x28, 0x5E, 0xF8, 0x97, 0xB1, + 0x40, 0x2C, 0x15, 0xC9, 0x52, 0x59, 0x01, 0x19, + 0x05, 0x1E, 0x36, 0x9A, 0x1B, 0x7B, 0xE4, 0x43, + 0xFE, 0xAE, 0x6E, 0x32, 0xBC, 0x8F, 0x3D, 0x64, + 0x7F, 0xC5, 0x31, 0x5A, 0x52, 0x00, 0xCD, 0x52, + 0x38, 0xDC, 0x66, 0x77, 0x46, 0x6E, 0xA8, 0x6E, + 0xF8, 0xD1, 0x8E, 0x5A, 0x79, 0xF2, 0x62, 0x48, + 0x3E, 0x89, 0x6B, 0x82, 0x77, 0xC7, 0x41, 0xF5, + 0x16, 0xFC, 0x04, 0x0C, 0x10, 0x90, 0xF2, 0x49, + 0x5B, 0xF1, 0x65, 0x0B, 0x02, 0xAF, 0x30, 0x45, + 0x67, 0x33, 0xA0, 0x71, 0xAF, 0x47, 0xD7, 0xA1, + 0x5B, 0xD8, 0xE3, 0x2A, 0x49, 0x80, 0x64, 0x55, + 0xD3, 0xBE, 0xA7, 0x4A, 0xEF, 0x5D, 0x00, 0x90, + 0x6A, 0xD2, 0xF0, 0xC0, 0x45, 0x35, 0x4E, 0xFD, + 0xE7, 0xC9, 0xA2, 0x76, 0xE7, 0x3D, 0x9E, 0xDD, + 0x11, 0xD1, 0xCA, 0x5C, 0x29, 0x7B, 0x9A, 0x68, + 0x51, 0xE7, 0xF6, 0x7E, 0x21, 0xEB, 0x06, 0x1B, + 0xB5, 0x5D, 0x9E, 0x67, 0x3C, 0x4A, 0x75, 0xFE, + 0xB8, 0x4D, 0x52, 0x62, 0x9E, 0xEC, 0xC5, 0x3C, + 0x24, 0xBE, 0xA9, 0x51, 0x53, 0x05, 0x1A, 0xC2, + 0x06, 0xC8, 0x7D, 0xF5, 0x54, 0x10, 0xCA, 0x1F, + 0xE6, 0xCF, 0xC3, 0xF4, 0x03, 0xA6, 0xD9, 0xD4, + 0x3E, 0xA8, 0x4C, 0x60, 0xC9, 0x45, 0xE6, 0x42, + 0xB2, 0x83, 0x63, 0x38, 0xB5, 0xAF, 0x9F, 0x69, + 0xE5, 0x27, 0x08, 0xB2, 0xE2, 0x25, 0x93, 0x3D, + 0xB3, 0x20, 0xBB, 0x3F, 0x79, 0x0D, 0x39, 0x7F, + 0x22, 0xD7, 0xB6, 0xF8, 0xA4, 0x33, 0xCD, 0xAC, + 0xE9, 0x81, 0x0A, 0xA0, 0xE2, 0x7C, 0x69, 0x95, + 0x55, 0x53, 0x0C, 0x56, 0x2D, 0xBF, 0x75, 0x17, + 0xA4, 0x16, 0x26, 0x28, 0xBF, 0x10, 0xD1, 0xB6, + 0xDB, 0xAC, 0xEF, 0x5C, 0x9E, 0xD5, 0x1E, 0x55, + 0xD9, 0xA8, 0x9D, 0x60, 0xE0, 0xFC, 0x37, 0x8C, + 0x47, 0xA2, 0x1D, 0x5E, 0x0F, 0x2D, 0xC3, 0xBC, + 0xEF, 0x5E, 0x05, 0xC6, 0xE0, 0x26, 0x15, 0x30, + 0xFB, 0x02, 0x7E, 0x50, 0x32, 0x55, 0x8C, 0xA2, + 0xB4, 0x70, 0x05, 0xBD, 0xDE, 0x99, 0x90, 0x99, + 0x30, 0x39, 0x1E, 0xAD, 0x7F, 0x3F, 0x0A, 0x96, + 0xB3, 0xDE, 0xDA, 0x54, 0xA1, 0x11, 0x45, 0xF5, + 0x30, 0xE5, 0x1D, 0xEF, 0x89, 0x2E, 0x5A, 0xB0, + 0x20, 0x4D, 0x61, 0x4E, 0x6E, 0x38, 0xAF, 0xE7, + 0x9C, 0xA9, 0x2C, 0x28, 0x15, 0x8D, 0x57, 0x01, + 0x20, 0x35, 0x3B, 0x7A, 0x4D, 0xE0, 0x88, 0x98, + 0x46, 0xD8, 0x35, 0x29, 0x49, 0x39, 0x55, 0x7E, + 0xD0, 0xAE, 0xDA, 0x27, 0x0D, 0x4D, 0x73, 0xED, + 0x84, 0xD3, 0xD4, 0x9F, 0x9F, 0x03, 0x2D, 0x43, + 0x45, 0x7B, 0xF5, 0x9B, 0xB7, 0xD6, 0x63, 0x59, + 0xDC, 0x53, 0xF9, 0xB4, 0x69, 0x63, 0xB2, 0x17, + 0x84, 0xB0, 0x6C, 0xBC, 0xF0, 0x4B, 0xEC, 0x1E, + 0x33, 0xA3, 0x33, 0x71, 0x53, 0x27, 0x16, 0xC9, + 0xED, 0xB3, 0xFB, 0xED, 0xB8, 0x19, 0x99, 0xB4, + 0x37, 0x2D, 0x09, 0x45, 0xC1, 0x0A, 0xE8, 0x26, + 0xC6, 0x0F, 0xFE, 0x93, 0x17, 0x0B, 0x6D, 0x29, + 0x4B, 0x38, 0x91, 0xB0, 0xD2, 0xA7, 0xB3, 0x5B, + 0x28, 0xA8, 0x97, 0x18, 0x45, 0xDC, 0x2F, 0xEC, + 0xE2, 0x37, 0xB8, 0x0F, 0x20, 0xB3, 0x79, 0xCC, + 0x4D, 0x13, 0x6D, 0xAB, 0x3F, 0xBB, 0x37, 0x92, + 0xC6, 0x3E, 0xC6, 0x1F, 0x5C, 0x75, 0x5B, 0xC9, + 0xDB, 0x35, 0x08, 0x6F, 0xBF, 0x46, 0xD2, 0xB7, + 0x97, 0x0D, 0xCA, 0x2A, 0x85, 0x23, 0xFD, 0xB4, + 0xC7, 0xA0, 0xB8, 0xE4, 0x2F, 0x8A, 0xF9, 0xAC, + 0xAD, 0x2A, 0x0E, 0xFC, 0x11, 0x36, 0x02, 0xA4, + 0xEA, 0x62, 0xE4, 0xEB, 0xB7, 0xD2, 0x69, 0xC3, + 0xA4, 0x0B, 0xA2, 0xC4, 0x4E, 0xDD, 0x29, 0x56 }; static const byte msg_65[] = { - 0xDB, 0x84, 0x94, 0xBA, 0x19, 0xC4, 0x11, 0x8F, - 0xB1, 0x5D, 0x0A, 0xCF, 0x42, 0x54, 0xFD, 0x37, - 0x48, 0x3F, 0xCF, 0x47, 0x48, 0xFD, 0x18, 0x44, - 0xF7, 0x17, 0xCE, 0x6F, 0x69, 0x58, 0x9E, 0x61, - 0x77, 0x2C, 0xFE, 0xFA, 0x7F, 0x97, 0x58, 0x65, - 0x34, 0x09, 0xD4, 0xEE, 0x5A, 0x26, 0x4B, 0x83, - 0x4E, 0x60, 0xD6, 0xBB, 0x96, 0x49, 0x9E, 0xBE, - 0xB2, 0xB0, 0x6B, 0x0B, 0xA8, 0x74, 0xBF, 0x31, - 0xE6, 0x41, 0x39, 0x4C, 0xFA, 0xA6, 0xA2, 0xD3, - 0x0D, 0xDB, 0x8F, 0x04, 0x58, 0x76, 0x20, 0x8D, - 0x2F, 0x51, 0xDE, 0x15, 0xE2, 0x05, 0xE8, 0xC9, - 0x1B, 0x87, 0xEC, 0xEB, 0x05, 0xFF, 0x31, 0x83, - 0x27, 0x1B, 0x26, 0x49, 0x66, 0x5D, 0xD3, 0xCC, - 0x49, 0xBF, 0xDB, 0x99, 0x8D, 0x53, 0x9D, 0xA8, - 0x09, 0x30, 0x55, 0x16, 0xBB, 0xBE, 0x9C, 0x90, - 0x60, 0x21, 0x19, 0x1C, 0x52, 0x23, 0xE5, 0x25, - 0xA8, 0xFC, 0x36, 0x16, 0xA1, 0x76, 0x5E, 0xC3, - 0xF9, 0xC5, 0xDB, 0x53, 0xCC, 0x33, 0x7E, 0x03, - 0x9F, 0x18, 0x6A, 0xCF, 0xEA, 0x91, 0x14, 0x8E, - 0xE2, 0xA7, 0x9C, 0xCA, 0x36, 0x89, 0xED, 0xB6, - 0x2A, 0xAF, 0x28, 0xB5, 0xD7, 0x52, 0xFD, 0xE2, - 0x65, 0xEE, 0x52, 0x80, 0xB5, 0x19, 0x72, 0x6C, - 0x1C, 0xA9, 0x80, 0x32, 0x95, 0xC6, 0x74, 0xB7, - 0xEF, 0xAF, 0xA4, 0xD6, 0x1B, 0x30, 0x6A, 0x79, - 0xE3, 0xF6, 0xE7, 0xA8, 0x87, 0xC2, 0xFB, 0x53, - 0x5B, 0x3B, 0x0F, 0xB3, 0xD9, 0xEB, 0xC8, 0x76, - 0x03, 0xEA, 0xFE, 0xF1, 0x70, 0xC1, 0xF1, 0xD2, - 0x8E, 0x99, 0xBB + 0xC4, 0xF5, 0x9F, 0xA2, 0xDE, 0x30, 0xC8, 0x42, + 0x0A, 0x7E, 0x7F, 0x09, 0x6B, 0xAF, 0x6A, 0xD6, + 0x9B, 0x1C, 0x15, 0xA5, 0xC6, 0xE6, 0x1C, 0x9D, + 0x82, 0xAF, 0xCF, 0xDB, 0x6E, 0xB8, 0xF2, 0x75, + 0xBF, 0x57, 0x87, 0x18, 0x6A, 0xAE, 0x78, 0x1F, + 0x48, 0x7F, 0x9F, 0x88, 0x75, 0x8C, 0x9C, 0x61, + 0xF3, 0x5D, 0x50, 0x83, 0xEE, 0x70, 0x42, 0x4B, + 0x0D, 0x0A, 0x51, 0x57, 0x50, 0x10, 0xC2, 0xA9, + 0x07, 0xF4, 0x96, 0x08, 0x11, 0x5D, 0x33, 0xEB, + 0xA0, 0x03, 0x15, 0x09, 0x32, 0x2A, 0xA7, 0xD3, + 0x06, 0x1F, 0xEC, 0x31, 0x62, 0xF9, 0x6A, 0x56, + 0x5F, 0x98, 0x76, 0x9E, 0x9A, 0x19, 0x23, 0x5D, + 0x89, 0xD1, 0xB2, 0x1D, 0x60, 0xA3, 0x81, 0xDF, + 0x8E, 0xB3, 0x7D, 0x58, 0xC6, 0xA2, 0xE4, 0x83, + 0xA8, 0xEB, 0x70, 0x73, 0x6E, 0x4B, 0x7B, 0xB9, + 0x11, 0xF7, 0xAB, 0x92, 0x3D, 0xC2, 0x9F, 0x1E }; static const byte sig_65[] = { - 0xF7, 0x78, 0x9A, 0x45, 0xA3, 0x58, 0x73, 0x30, - 0xE7, 0xFC, 0xF7, 0x06, 0x95, 0xF7, 0xF6, 0x96, - 0x88, 0xA2, 0xB8, 0xD0, 0xCE, 0x54, 0xF0, 0x90, - 0x21, 0x4F, 0x10, 0x9F, 0x56, 0x48, 0x4F, 0x98, - 0xC3, 0xAD, 0x1A, 0x53, 0xA5, 0x44, 0x1C, 0x2C, - 0xA7, 0x2A, 0x3B, 0x31, 0x91, 0xBC, 0x04, 0x6F, - 0x46, 0x37, 0x30, 0x45, 0xB9, 0xE5, 0x40, 0xC7, - 0x3D, 0xFE, 0x91, 0xB6, 0x1F, 0x05, 0x88, 0xD6, - 0x13, 0x59, 0x3F, 0xCE, 0x1B, 0x00, 0xEE, 0xF1, - 0xB2, 0x27, 0x03, 0x4C, 0x6F, 0xD3, 0xB1, 0x8B, - 0x3F, 0x22, 0x11, 0x10, 0xFB, 0x34, 0x5A, 0xA7, - 0x86, 0x31, 0xB8, 0xB5, 0x9F, 0xBD, 0xFD, 0xCC, - 0xDA, 0xE6, 0xA2, 0x4D, 0x25, 0x9D, 0x34, 0xAA, - 0xBA, 0xD2, 0x18, 0xB3, 0xAE, 0x4E, 0x77, 0x18, - 0x66, 0x53, 0xB8, 0x56, 0x3A, 0xA6, 0x12, 0x0A, - 0x0A, 0x53, 0x1A, 0x4E, 0x91, 0x37, 0x30, 0xDC, - 0x91, 0x4F, 0xE5, 0xE0, 0x08, 0xBE, 0xCE, 0x68, - 0x69, 0xB0, 0x2B, 0x07, 0xFD, 0xC1, 0x62, 0x14, - 0x54, 0x0D, 0x31, 0x6C, 0x43, 0xFA, 0x0C, 0x21, - 0x1B, 0x41, 0xAC, 0x7E, 0x52, 0x65, 0x67, 0x29, - 0xC7, 0x73, 0xE4, 0xC4, 0xB8, 0x8E, 0xD3, 0x11, - 0x88, 0x6D, 0xD4, 0xD2, 0x75, 0x41, 0x7D, 0x70, - 0x19, 0x66, 0x44, 0xEE, 0xD1, 0x5F, 0xA3, 0x15, - 0x06, 0x60, 0x03, 0xE3, 0x09, 0xF8, 0x32, 0xAF, - 0x91, 0x26, 0x2C, 0x94, 0x90, 0x11, 0xFC, 0xB0, - 0xAD, 0x2C, 0xCE, 0x65, 0xDD, 0x9E, 0xFF, 0x56, - 0x7E, 0xE2, 0x9C, 0xC4, 0x0A, 0x6F, 0xE0, 0x66, - 0x4E, 0x7D, 0x9F, 0x23, 0x65, 0x68, 0xFC, 0x94, - 0x29, 0x5D, 0xBB, 0x34, 0x28, 0x82, 0x33, 0xE8, - 0xC5, 0x11, 0xD2, 0x88, 0x15, 0xEC, 0x72, 0x10, - 0x32, 0x29, 0x6E, 0x1E, 0xDE, 0xCA, 0x7F, 0x72, - 0x6A, 0x6E, 0xB0, 0xF7, 0x6C, 0xC5, 0x82, 0x80, - 0x11, 0xC0, 0xE4, 0x01, 0x3C, 0xC7, 0xEE, 0x43, - 0x29, 0xB8, 0x1E, 0xCC, 0x0D, 0x52, 0xED, 0x1E, - 0x49, 0x1D, 0xD6, 0xD5, 0x5C, 0x52, 0x65, 0x66, - 0x5E, 0xD8, 0xAD, 0x21, 0x9B, 0x89, 0x4F, 0x31, - 0xC6, 0x8C, 0x61, 0x9A, 0xFC, 0xDB, 0x73, 0x58, - 0xE5, 0x55, 0x4C, 0x49, 0x5B, 0x8B, 0x6E, 0x33, - 0x25, 0x68, 0x8F, 0xB8, 0xC1, 0xA2, 0x53, 0x31, - 0xD5, 0x7B, 0xD3, 0x48, 0xA2, 0x7D, 0x39, 0x09, - 0x29, 0xBC, 0x46, 0xA1, 0x49, 0x6A, 0xB3, 0x5B, - 0x46, 0xBA, 0x61, 0xB6, 0xB9, 0xD2, 0x3C, 0xD0, - 0x63, 0x15, 0xFB, 0x72, 0xC2, 0x47, 0x76, 0x01, - 0x61, 0x30, 0xAD, 0xB1, 0xCF, 0x2D, 0xC7, 0x29, - 0x59, 0xEA, 0x9C, 0xAD, 0x96, 0xAF, 0x5D, 0xA9, - 0x96, 0x12, 0x6C, 0xDD, 0x85, 0xB1, 0x34, 0xCC, - 0x92, 0x7A, 0x51, 0xFD, 0x23, 0xF8, 0x47, 0x91, - 0xA3, 0xFC, 0xDA, 0x07, 0x7E, 0x15, 0x99, 0x17, - 0x48, 0xA0, 0x39, 0x4F, 0x33, 0x4E, 0xB8, 0xBC, - 0x48, 0xA9, 0x9A, 0xB9, 0xDF, 0xBB, 0x0F, 0x2A, - 0xAD, 0x6F, 0xBE, 0x48, 0x49, 0x61, 0xD3, 0xA4, - 0xE8, 0xF8, 0xB2, 0x1A, 0x6A, 0xC0, 0x92, 0xB2, - 0x26, 0xD6, 0xE1, 0x19, 0xFA, 0xD4, 0x4D, 0x8E, - 0x57, 0x6F, 0xE9, 0x6C, 0x6C, 0xDB, 0x68, 0x40, - 0xEA, 0x61, 0x4B, 0xAF, 0xC7, 0x07, 0x86, 0xC5, - 0x19, 0xE1, 0xD5, 0xDC, 0x0F, 0x98, 0x44, 0x43, - 0xC8, 0xB1, 0xE5, 0x4F, 0x8E, 0xE1, 0x76, 0xD9, - 0x8B, 0x2C, 0x70, 0x27, 0xF5, 0x7D, 0x7E, 0x3D, - 0xE9, 0xB2, 0xA0, 0xA3, 0x69, 0x11, 0xB8, 0xE4, - 0x71, 0x21, 0xDE, 0x0C, 0x07, 0xEB, 0xBA, 0x5D, - 0x7B, 0x59, 0x4E, 0xF2, 0x44, 0xC6, 0x83, 0x27, - 0xEC, 0x6C, 0x6D, 0x1D, 0xD5, 0x01, 0xF4, 0x83, - 0xFE, 0x9B, 0x95, 0x70, 0x59, 0x7E, 0x70, 0xDF, - 0x41, 0x3E, 0x7A, 0xF0, 0x38, 0x47, 0xF4, 0x09, - 0xED, 0x61, 0xE2, 0x84, 0x6E, 0x6C, 0x64, 0x1E, - 0x6A, 0x7F, 0xFA, 0x79, 0xDE, 0x6B, 0xFA, 0x37, - 0x3A, 0x06, 0x44, 0xB0, 0x0B, 0xF4, 0x1A, 0x03, - 0x49, 0x92, 0xA7, 0x94, 0xDA, 0x17, 0xC8, 0x88, - 0x85, 0x23, 0x90, 0x32, 0xC8, 0x51, 0x76, 0x4E, - 0x3E, 0x4D, 0xBD, 0xE7, 0xF1, 0x2A, 0x16, 0xC5, - 0xA2, 0x63, 0xE9, 0x64, 0xC1, 0xE7, 0xFD, 0xD3, - 0xCC, 0xE5, 0x76, 0xDD, 0x6D, 0x56, 0xB1, 0x81, - 0x82, 0x84, 0x8B, 0x75, 0x63, 0x64, 0x5D, 0x4E, - 0x42, 0xFF, 0x22, 0x74, 0x2A, 0x99, 0x67, 0x85, - 0x16, 0x9D, 0x7F, 0x50, 0x3B, 0x48, 0xA7, 0x15, - 0x8B, 0x3C, 0xBD, 0x29, 0x93, 0x5E, 0xD3, 0x20, - 0x49, 0xBE, 0xA1, 0xAD, 0x95, 0x3E, 0xF7, 0x07, - 0x32, 0x7B, 0x77, 0x8B, 0xFD, 0xDD, 0xFC, 0x60, - 0x51, 0x1D, 0xA1, 0x13, 0xA3, 0x4F, 0x65, 0x57, - 0x12, 0xE4, 0xE5, 0x9D, 0x6C, 0xCE, 0x40, 0x4E, - 0x94, 0xAB, 0xA6, 0x1E, 0x81, 0x35, 0x38, 0x8F, - 0xC2, 0x1C, 0x8E, 0x41, 0x34, 0x4F, 0x32, 0x4B, - 0x01, 0xAC, 0x8C, 0x06, 0x9F, 0x92, 0x57, 0x5D, - 0x34, 0xF8, 0x8B, 0xCA, 0x22, 0xCB, 0x30, 0x7E, - 0x37, 0x07, 0x00, 0x63, 0x32, 0x02, 0x56, 0xB8, - 0xBA, 0xD6, 0xEB, 0x7A, 0x81, 0xAF, 0xE9, 0xA2, - 0x54, 0x01, 0x6E, 0x1C, 0x8A, 0x12, 0x50, 0x89, - 0xAA, 0xA3, 0xED, 0xE8, 0x4E, 0x5B, 0x6C, 0x2E, - 0xCF, 0xAE, 0xFA, 0xA5, 0x2B, 0x9F, 0x57, 0x09, - 0x60, 0x2C, 0x06, 0xAE, 0xA4, 0xA0, 0x38, 0x4E, - 0x9B, 0x09, 0xE5, 0xB8, 0x81, 0x64, 0xB2, 0x74, - 0xEA, 0x32, 0x65, 0xFB, 0x51, 0x52, 0x39, 0x7D, - 0xFF, 0x5A, 0x3A, 0x08, 0x61, 0xE2, 0xBC, 0x12, - 0xD2, 0x10, 0x92, 0x89, 0x72, 0x97, 0x47, 0xE8, - 0x3F, 0xDF, 0x24, 0x3A, 0x1D, 0x17, 0xB9, 0x83, - 0x48, 0x37, 0x98, 0x45, 0xA9, 0xE9, 0x55, 0xE2, - 0xD6, 0xF9, 0x38, 0xDA, 0xA5, 0x91, 0x8E, 0x2A, - 0x14, 0xF9, 0x7B, 0xA2, 0xBE, 0x50, 0x1C, 0xCC, - 0xAF, 0xD6, 0x81, 0x91, 0x0F, 0x4A, 0x4F, 0x06, - 0x71, 0x5C, 0xE8, 0x40, 0x96, 0xF3, 0x7A, 0x91, - 0xDC, 0xCA, 0x2A, 0x8A, 0x4B, 0xE8, 0xDA, 0x79, - 0x21, 0xDB, 0xF8, 0xD3, 0xF4, 0xEF, 0xB9, 0x8C, - 0x6B, 0x4F, 0x94, 0x0E, 0xCE, 0xF8, 0x32, 0xB5, - 0x49, 0xD0, 0x68, 0x94, 0x7C, 0x3D, 0xFB, 0x58, - 0x09, 0xCB, 0x7B, 0x06, 0x0A, 0x3A, 0x0E, 0xF3, - 0xB2, 0x1C, 0x01, 0x64, 0x50, 0x1D, 0xDE, 0xA7, - 0xC9, 0xE5, 0xE7, 0x89, 0x7C, 0x6B, 0x1C, 0x46, - 0x34, 0x8B, 0x2C, 0x3E, 0x80, 0x5F, 0x6F, 0x22, - 0x87, 0xBA, 0x15, 0x8C, 0xF9, 0x25, 0xA7, 0xBA, - 0x7F, 0x08, 0x25, 0x49, 0x89, 0xC8, 0x7D, 0x24, - 0x97, 0x9A, 0xD9, 0x86, 0xAA, 0x97, 0xC5, 0x1B, - 0x01, 0xF4, 0x5D, 0x4A, 0x1F, 0x24, 0x75, 0x29, - 0x91, 0xF0, 0x42, 0x05, 0xEB, 0x55, 0x1F, 0xD0, - 0x2D, 0x41, 0x5F, 0x2D, 0xD1, 0xEF, 0xF1, 0x42, - 0xB0, 0xD7, 0x04, 0x16, 0xC6, 0xD8, 0x15, 0xEB, - 0x91, 0x73, 0x2B, 0x26, 0x8F, 0xB2, 0x0D, 0x08, - 0x67, 0x44, 0x2D, 0x71, 0xDE, 0xC0, 0x57, 0xB2, - 0x86, 0xCD, 0x93, 0x81, 0x1F, 0xF3, 0xF6, 0x46, - 0xEB, 0xD5, 0x65, 0xD5, 0x1D, 0x09, 0xA4, 0x2D, - 0x3A, 0xBA, 0xAC, 0x0F, 0x34, 0xCC, 0x81, 0x7B, - 0x18, 0x93, 0x8E, 0xCC, 0xBB, 0x1F, 0xEF, 0x05, - 0xBD, 0x3C, 0x2B, 0x49, 0x4F, 0xA5, 0x29, 0xED, - 0x4C, 0x63, 0x4C, 0x93, 0x25, 0xA4, 0x81, 0x73, - 0xF2, 0x0F, 0xFA, 0xC3, 0x2D, 0xC1, 0x01, 0xE6, - 0xEE, 0x03, 0xB2, 0xFC, 0xBE, 0xC2, 0x46, 0x8D, - 0xBC, 0x8F, 0x76, 0x75, 0x8C, 0x32, 0x15, 0x47, - 0x4F, 0x7E, 0xF2, 0x40, 0x65, 0xF7, 0x90, 0x60, - 0xAC, 0xA3, 0xC8, 0xD5, 0xD7, 0x4A, 0xF7, 0x0F, - 0x48, 0x30, 0x1D, 0xDB, 0x30, 0xC0, 0x5D, 0xB3, - 0xEF, 0xA7, 0x26, 0xCF, 0x88, 0x55, 0x59, 0x01, - 0x84, 0x12, 0x82, 0xAA, 0x08, 0xF6, 0x66, 0xA6, - 0x53, 0x51, 0xA6, 0xA2, 0x4E, 0xED, 0x6B, 0xE2, - 0x11, 0x77, 0x31, 0x07, 0xE1, 0x85, 0xE1, 0xB4, - 0x88, 0xA2, 0xE4, 0x91, 0xB6, 0xC1, 0x41, 0x52, - 0x84, 0x62, 0xA8, 0x64, 0x94, 0xB5, 0x4F, 0xDC, - 0xCE, 0xCC, 0xB6, 0xAA, 0x21, 0x25, 0x36, 0x86, - 0x69, 0x3A, 0xE7, 0x98, 0xC9, 0xCE, 0x9E, 0x0B, - 0xDD, 0xC6, 0xAE, 0x53, 0xD9, 0xB7, 0x06, 0xDC, - 0x4F, 0x4D, 0x81, 0xB9, 0xC7, 0x3C, 0x46, 0x1E, - 0xCD, 0x70, 0x35, 0xC5, 0x17, 0x2E, 0xFA, 0xE5, - 0x60, 0x2C, 0xAF, 0x88, 0xC6, 0x4E, 0x79, 0xE5, - 0x32, 0x40, 0x30, 0x55, 0x5D, 0xE2, 0x11, 0xF8, - 0x9F, 0xD4, 0x24, 0xC3, 0x38, 0xC3, 0x88, 0x3C, - 0x83, 0xCA, 0x94, 0x05, 0xC2, 0xB5, 0xD1, 0x44, - 0x5F, 0x7C, 0x98, 0xC4, 0x3E, 0xD3, 0xD2, 0xBE, - 0xCB, 0xE2, 0x5F, 0x5F, 0x3F, 0x54, 0x4C, 0xCC, - 0x5B, 0x5A, 0xEA, 0xE4, 0x7D, 0xDF, 0x3F, 0xB5, - 0x64, 0x9F, 0xF5, 0xD6, 0x1E, 0xAA, 0x02, 0xED, - 0xEB, 0xC7, 0x5C, 0xE4, 0x78, 0xBA, 0x00, 0x42, - 0x6C, 0xAF, 0x47, 0x4F, 0xA7, 0x9E, 0x5B, 0x08, - 0x9E, 0xB1, 0xA8, 0x82, 0xF1, 0x53, 0x54, 0x59, - 0x26, 0x95, 0x95, 0x2B, 0xA0, 0xA8, 0xEE, 0x91, - 0xE6, 0x49, 0xE3, 0xF2, 0xC3, 0x82, 0x26, 0x4D, - 0xAA, 0x30, 0xF6, 0xA6, 0xD2, 0x17, 0xF6, 0x12, - 0x9C, 0x19, 0x39, 0xB6, 0xDC, 0xAC, 0xCD, 0xA5, - 0xB6, 0x37, 0x32, 0x6E, 0x8A, 0x83, 0x61, 0xC3, - 0xB5, 0x6F, 0xCF, 0xFC, 0x48, 0x50, 0x36, 0x86, - 0x58, 0x22, 0xB9, 0xBB, 0x87, 0xB4, 0x35, 0x10, - 0xBC, 0xDD, 0x55, 0xBC, 0x35, 0x0D, 0xE7, 0xB2, - 0xAE, 0x90, 0xA2, 0x1E, 0x9E, 0x19, 0x97, 0x8E, - 0xDA, 0x10, 0xDF, 0x66, 0x76, 0x14, 0xA4, 0x4F, - 0xE2, 0xA8, 0x4D, 0x16, 0xBE, 0x04, 0x3E, 0xA8, - 0x77, 0x36, 0x33, 0xEA, 0x6B, 0xAD, 0xF6, 0x57, - 0x10, 0x05, 0x2F, 0x34, 0x1F, 0x65, 0xCB, 0xE9, - 0x28, 0xD3, 0x96, 0x2A, 0x5A, 0x2F, 0xE6, 0x4E, - 0x46, 0xD6, 0xBF, 0xB8, 0xFD, 0x0D, 0x99, 0x78, - 0xF0, 0x42, 0x3C, 0xBD, 0x19, 0x5F, 0x72, 0xF3, - 0xCB, 0x19, 0xD7, 0xEF, 0xD9, 0xEB, 0xE3, 0x3C, - 0xD2, 0xF5, 0x70, 0x9A, 0x57, 0x80, 0x7D, 0xF9, - 0x44, 0xEC, 0xE5, 0x68, 0xAA, 0xCA, 0x43, 0x36, - 0x42, 0x20, 0x83, 0xB0, 0x69, 0x7B, 0x6A, 0xA0, - 0x05, 0x86, 0xE4, 0xBF, 0x7D, 0xD6, 0x73, 0xA3, - 0xD5, 0x96, 0xB8, 0x61, 0x8A, 0xC3, 0xB4, 0x06, - 0x17, 0x50, 0xC6, 0xBE, 0x97, 0xCB, 0x53, 0x75, - 0x3D, 0x02, 0x39, 0x55, 0x56, 0x07, 0x5A, 0x26, - 0xF1, 0x40, 0xB9, 0x3F, 0x57, 0x7D, 0xAD, 0x50, - 0x5E, 0x1C, 0xF2, 0xB5, 0x51, 0xA0, 0x4C, 0x98, - 0xC7, 0xF0, 0x90, 0x18, 0x31, 0xB3, 0xCA, 0x61, - 0xD7, 0x5D, 0xA7, 0x93, 0xAC, 0x72, 0xA4, 0x4C, - 0x7A, 0x07, 0xF7, 0xDB, 0xBA, 0xD6, 0x0A, 0x55, - 0xF4, 0x9C, 0xBD, 0x79, 0xDE, 0xE4, 0x73, 0x9F, - 0xFD, 0x36, 0x77, 0x8E, 0xBD, 0x08, 0xEB, 0xDB, - 0x79, 0xEC, 0x07, 0xA1, 0x62, 0x39, 0xC5, 0xB9, - 0x21, 0x59, 0x9F, 0xEB, 0xFE, 0xA4, 0x6D, 0xDF, - 0x96, 0x6A, 0xA4, 0xA0, 0x15, 0x12, 0xE6, 0x10, - 0x94, 0x3F, 0x5D, 0xC5, 0x4B, 0x4C, 0x76, 0xB7, - 0x64, 0xB3, 0x80, 0xBF, 0x2F, 0x84, 0xED, 0xE3, - 0x21, 0x24, 0x91, 0x2F, 0x54, 0xF7, 0xB6, 0xE2, - 0x07, 0xB7, 0x38, 0x1F, 0x67, 0x0F, 0x7A, 0xA0, - 0xF3, 0xC3, 0xED, 0x10, 0x15, 0x74, 0x03, 0x84, - 0xDD, 0x61, 0xA9, 0x76, 0x5E, 0xE4, 0x69, 0x6E, - 0xAC, 0xF8, 0x2E, 0xA4, 0x10, 0x69, 0x18, 0x05, - 0xCB, 0x68, 0x89, 0x03, 0x53, 0x5D, 0x70, 0x46, - 0x10, 0x0D, 0xCC, 0x2B, 0xA7, 0xD8, 0x30, 0x2A, - 0xCB, 0x04, 0x30, 0xD5, 0x06, 0xCC, 0xC1, 0xC0, - 0xDD, 0xEA, 0x71, 0x11, 0xA7, 0x6F, 0x45, 0xB4, - 0x54, 0xE2, 0x5C, 0xDD, 0xFB, 0x63, 0x9B, 0x3D, - 0x66, 0x4C, 0x36, 0xD8, 0x84, 0x35, 0x13, 0xA3, - 0xFC, 0xAF, 0x9E, 0x60, 0x57, 0xE9, 0xBC, 0x06, - 0x82, 0x37, 0xFE, 0x24, 0x19, 0xA2, 0xD2, 0xD9, - 0x0B, 0x4A, 0x1F, 0xC2, 0xA7, 0x1A, 0x14, 0x6D, - 0x2B, 0xD0, 0x43, 0x64, 0xC7, 0x9B, 0x8E, 0xBA, - 0x8E, 0x3E, 0x88, 0xCE, 0x11, 0xE9, 0x16, 0xE4, - 0xA7, 0x52, 0x84, 0x21, 0x32, 0x8C, 0xF5, 0x4F, - 0xAA, 0xB2, 0xB1, 0x9F, 0x44, 0x46, 0x87, 0x81, - 0xF8, 0xAB, 0x84, 0xB7, 0xDD, 0x97, 0x2F, 0xF5, - 0x61, 0x50, 0x71, 0x43, 0x0A, 0x43, 0x74, 0xDA, - 0xFC, 0xAE, 0x1E, 0x60, 0x44, 0xAA, 0x98, 0xE9, - 0x85, 0x94, 0x1B, 0xA6, 0xB9, 0xDB, 0x8C, 0x02, - 0xF5, 0x89, 0x60, 0x3E, 0xEB, 0x8B, 0xE9, 0x0A, - 0x70, 0xEF, 0xC0, 0x88, 0xD7, 0x95, 0xE6, 0xDA, - 0x1F, 0x1F, 0x2E, 0x6E, 0xCE, 0xDD, 0x03, 0x1D, - 0x81, 0x99, 0xE6, 0x59, 0x12, 0xD4, 0x34, 0xD0, - 0x9B, 0xFB, 0xE5, 0x94, 0x40, 0x6D, 0xC1, 0x15, - 0x0E, 0x99, 0x35, 0x8C, 0xEA, 0x7F, 0xAD, 0x2E, - 0x7C, 0x44, 0xC3, 0x8B, 0x6E, 0x0C, 0xEE, 0xAB, - 0x9B, 0xDE, 0x0D, 0xB9, 0x7B, 0xCF, 0x5A, 0xC9, - 0x94, 0x10, 0xC9, 0x47, 0x0E, 0x26, 0x6B, 0x8B, - 0xE4, 0x5F, 0x66, 0x90, 0x83, 0x1F, 0x41, 0x45, - 0xE2, 0x63, 0x79, 0xDB, 0x80, 0x7C, 0x26, 0xDD, - 0xF9, 0x1E, 0x30, 0x9D, 0x4F, 0x4A, 0x3E, 0x7E, - 0xCA, 0xB7, 0x36, 0x2F, 0x15, 0xD2, 0x0E, 0xA4, - 0x33, 0xB7, 0xE7, 0x0A, 0x7D, 0xDE, 0x74, 0x16, - 0xCE, 0xA8, 0x71, 0x49, 0x8B, 0x2C, 0xE3, 0xF5, - 0x8D, 0x29, 0xD8, 0x62, 0x8C, 0x53, 0x18, 0x40, - 0xF0, 0x22, 0xDD, 0x3B, 0xD2, 0xF3, 0x80, 0x9B, - 0x11, 0x68, 0xD3, 0x8E, 0x63, 0xC7, 0xF6, 0x93, - 0x08, 0xA3, 0x1A, 0x2D, 0x4D, 0x5E, 0xEB, 0x97, - 0x42, 0x39, 0xB3, 0x4A, 0x62, 0xBC, 0x85, 0xE4, - 0xEC, 0xF9, 0x0C, 0x33, 0x6A, 0x0C, 0x37, 0xBD, - 0x9E, 0x0E, 0xF4, 0x26, 0x6B, 0x83, 0x5A, 0xC8, - 0x90, 0x6A, 0x83, 0xCF, 0x0B, 0x35, 0x13, 0x8A, - 0x65, 0xE5, 0xD9, 0xA6, 0x1F, 0xCC, 0x9B, 0x2D, - 0x5A, 0x33, 0x7B, 0x8A, 0xBE, 0xF8, 0x8A, 0x7F, - 0xB3, 0xC0, 0x94, 0x5D, 0x7C, 0xAF, 0x35, 0x61, - 0x1A, 0xE0, 0xE4, 0x46, 0x93, 0xA5, 0xBC, 0xE0, - 0xA6, 0xE2, 0xFE, 0xCA, 0xE9, 0xBD, 0xF4, 0xE3, - 0x56, 0xD6, 0x53, 0x6B, 0x58, 0x1A, 0x18, 0xF0, - 0x3A, 0x59, 0x16, 0x4E, 0xD5, 0x44, 0x7C, 0x7E, - 0xC8, 0xBD, 0x99, 0x7B, 0xE9, 0x53, 0xDE, 0xD9, - 0x32, 0x53, 0x5B, 0x5F, 0x43, 0x8A, 0x04, 0x31, - 0x9F, 0x5E, 0x0D, 0x8B, 0x0F, 0xEB, 0xC8, 0xDE, - 0x81, 0x46, 0x65, 0x8E, 0x52, 0xB9, 0x75, 0x9C, - 0x73, 0x93, 0x5B, 0x12, 0x0D, 0xC9, 0xB8, 0x54, - 0xF3, 0xC8, 0xF9, 0x4E, 0xC9, 0x33, 0x90, 0x57, - 0xD7, 0xD7, 0xCD, 0x91, 0xF7, 0xE0, 0xB9, 0x8D, - 0x84, 0xEC, 0x7B, 0x2F, 0x92, 0x32, 0x8D, 0x73, - 0x60, 0x18, 0xB0, 0x31, 0x65, 0xA8, 0x74, 0x5F, - 0x8E, 0x77, 0xEB, 0x80, 0x29, 0xF9, 0x78, 0x26, - 0x70, 0xCB, 0xD8, 0x6B, 0x43, 0x16, 0xC7, 0xBE, - 0x4A, 0x88, 0x03, 0x38, 0xBA, 0xCF, 0xB0, 0x15, - 0x69, 0x9B, 0xF3, 0x0D, 0x3A, 0x4B, 0x05, 0x32, - 0x54, 0x35, 0xBA, 0x5F, 0xA3, 0xB9, 0xD2, 0xB2, - 0xFE, 0x0B, 0x51, 0x9C, 0x2C, 0xB2, 0x46, 0xE5, - 0x3D, 0x1A, 0x34, 0x3D, 0x66, 0x1A, 0x66, 0x14, - 0x3C, 0x6F, 0x46, 0x8C, 0x55, 0x38, 0x64, 0x5C, - 0xC2, 0x6D, 0x4E, 0x2A, 0x87, 0x03, 0xEC, 0x9B, - 0x10, 0xFC, 0x89, 0xBE, 0x6F, 0x85, 0x99, 0x97, - 0x70, 0x8F, 0x31, 0x19, 0x4F, 0x0D, 0xFE, 0xE9, - 0x29, 0x98, 0xB2, 0x5E, 0x93, 0xB9, 0x70, 0x70, - 0xDE, 0x14, 0x40, 0x9D, 0x5B, 0xA4, 0x3D, 0xF8, - 0x8D, 0x15, 0xC2, 0xFB, 0xA9, 0x7B, 0xDD, 0xE6, - 0x18, 0xCC, 0x3F, 0xC0, 0x42, 0xF7, 0x74, 0x81, - 0x84, 0xBA, 0x9E, 0xC9, 0xCB, 0xA1, 0xB2, 0x00, - 0x68, 0x81, 0xD0, 0x51, 0x42, 0x64, 0x19, 0x8F, - 0xB6, 0x91, 0xC5, 0xC0, 0x38, 0xE0, 0x49, 0x50, - 0xCF, 0x69, 0x09, 0x93, 0x77, 0xFE, 0x66, 0xBA, - 0x64, 0xE2, 0x19, 0x52, 0xA4, 0x45, 0x81, 0x71, - 0x96, 0x64, 0xF5, 0xD9, 0x23, 0x97, 0xD2, 0x2A, - 0xA7, 0x03, 0x2B, 0xF5, 0x89, 0xAF, 0x8A, 0xCA, - 0x48, 0xDF, 0x6D, 0x14, 0xEB, 0x43, 0xCE, 0xF0, - 0xA9, 0xC8, 0xA8, 0xF9, 0xAD, 0x32, 0x95, 0x25, - 0xEF, 0x0A, 0xAA, 0x4F, 0x9E, 0x09, 0xC3, 0x51, - 0x3C, 0xF0, 0x29, 0xF3, 0xDE, 0xFC, 0xBB, 0x41, - 0x14, 0xFA, 0x0F, 0x66, 0x8D, 0xB4, 0x72, 0x2F, - 0xCC, 0xD9, 0xC2, 0x07, 0xB6, 0x6F, 0x10, 0x9E, - 0xD9, 0x5B, 0x45, 0x4B, 0xB6, 0x19, 0x5D, 0x59, - 0xC4, 0xA6, 0x78, 0xBA, 0x6F, 0x5A, 0x9B, 0x23, - 0x41, 0x21, 0xAD, 0x05, 0x16, 0xA1, 0xD4, 0x12, - 0x3D, 0x38, 0x26, 0xD9, 0x2A, 0x61, 0xB3, 0x5D, - 0xEB, 0x29, 0x5B, 0xAA, 0x2F, 0xE1, 0xB5, 0xEE, - 0x25, 0x02, 0x1D, 0xAE, 0xF8, 0x57, 0xB5, 0xDF, - 0x19, 0x2E, 0x17, 0x5E, 0x3A, 0x2A, 0x0D, 0x3F, - 0x08, 0x2F, 0x21, 0x1C, 0xB5, 0xBD, 0xC2, 0x36, - 0x27, 0x4F, 0x86, 0xC5, 0xDC, 0x74, 0xC3, 0x9B, - 0xE9, 0x7C, 0xCF, 0x5F, 0x57, 0x94, 0xEB, 0x64, - 0xEC, 0x64, 0x55, 0x45, 0x21, 0x0F, 0xC6, 0x67, - 0xD1, 0xE0, 0x74, 0x0E, 0x66, 0xCB, 0xED, 0xC2, - 0x06, 0x48, 0xCA, 0x1F, 0xA7, 0x34, 0x14, 0x59, - 0x6B, 0xA0, 0x89, 0x17, 0xA1, 0x9A, 0x46, 0x3A, - 0xD3, 0x02, 0x7C, 0x81, 0x83, 0x6B, 0x8F, 0x4F, - 0x02, 0xB9, 0x9F, 0xC5, 0x08, 0x3F, 0x06, 0xF3, - 0x4B, 0xD2, 0x30, 0x9C, 0x23, 0x42, 0xAD, 0x88, - 0xA8, 0x4F, 0xA9, 0x6E, 0x20, 0x7C, 0x01, 0x08, - 0xF6, 0x82, 0x54, 0x14, 0x94, 0x4F, 0x26, 0x4E, - 0xD6, 0xC4, 0x66, 0x7C, 0x78, 0x8D, 0x61, 0xA6, - 0xBC, 0x2C, 0x45, 0x6A, 0xF6, 0x6C, 0x2F, 0x76, - 0x9E, 0x16, 0x90, 0x17, 0x06, 0x91, 0x2C, 0xC9, - 0x0D, 0x4B, 0x6C, 0x90, 0xDC, 0xA1, 0x6C, 0xAC, - 0x8F, 0xFE, 0xD8, 0x39, 0x70, 0x20, 0xE2, 0x97, - 0x5E, 0x24, 0xFF, 0x4C, 0x80, 0x7C, 0x8A, 0xB7, - 0x31, 0xC8, 0x1D, 0x36, 0xCA, 0x84, 0xC9, 0x12, - 0x1A, 0x85, 0x13, 0xE0, 0xC9, 0xD0, 0xF4, 0x1B, - 0xC6, 0x8F, 0x88, 0xEA, 0xCA, 0xA3, 0x55, 0x99, - 0xFA, 0xE3, 0xBB, 0xA6, 0xFC, 0xC6, 0x52, 0x8D, - 0x47, 0xE4, 0x0C, 0x07, 0x64, 0xCF, 0x9C, 0x83, - 0x83, 0xB3, 0xA4, 0x45, 0x15, 0xE6, 0x1D, 0x92, - 0xCD, 0xAE, 0xC9, 0xCB, 0x90, 0x82, 0xB5, 0xA0, - 0xC0, 0x37, 0x94, 0x60, 0xD9, 0x17, 0x9A, 0x7D, - 0x9D, 0xF2, 0x9E, 0x0B, 0x4B, 0x6A, 0x41, 0x18, - 0x28, 0x52, 0x15, 0xE8, 0x7B, 0x6F, 0x11, 0x8E, - 0x97, 0x31, 0xE4, 0x66, 0xFB, 0x3F, 0xEB, 0xD1, - 0x95, 0xE1, 0x44, 0xFD, 0x20, 0x37, 0xD1, 0x16, - 0x62, 0x75, 0x79, 0xAC, 0x55, 0xFE, 0xD5, 0xE3, - 0x25, 0x85, 0xEC, 0x66, 0x38, 0xA0, 0xDF, 0xBE, - 0x6E, 0xD6, 0xC5, 0x87, 0x6C, 0xF8, 0x11, 0x4C, - 0x90, 0x2A, 0xEF, 0xA3, 0x63, 0xF4, 0xC9, 0xB7, - 0x2E, 0x7D, 0x5C, 0x85, 0x2D, 0xCC, 0x1A, 0xF2, - 0xB8, 0x85, 0x2A, 0x9D, 0x0F, 0x99, 0x59, 0x38, - 0x86, 0x50, 0x84, 0xCE, 0x52, 0x13, 0xB3, 0x08, - 0xA9, 0xCB, 0x37, 0xF6, 0x81, 0x96, 0x0D, 0x84, - 0xEF, 0xE1, 0xDF, 0x51, 0x34, 0xA5, 0x91, 0x5A, - 0xE5, 0x87, 0x8B, 0x10, 0xDA, 0x0F, 0xD4, 0xD9, - 0xAC, 0x2A, 0xEF, 0x0C, 0x7E, 0x01, 0xC2, 0xE9, - 0xE7, 0xC0, 0x17, 0xE7, 0xBA, 0x74, 0x0C, 0xEE, - 0x1A, 0x89, 0x94, 0x59, 0xBB, 0x75, 0x03, 0x3E, - 0xEA, 0xF3, 0x19, 0x0D, 0x67, 0x79, 0xED, 0x9E, - 0xDD, 0x84, 0x6A, 0x74, 0xE3, 0x21, 0x52, 0x8C, - 0x03, 0x08, 0x4A, 0x5D, 0x30, 0x87, 0x48, 0x39, - 0x71, 0x8A, 0x53, 0x54, 0x9B, 0x2E, 0xC6, 0xB2, - 0xB7, 0x30, 0xAA, 0x93, 0x5C, 0xA6, 0xE1, 0xC4, - 0xFD, 0x8B, 0xE0, 0x35, 0x7D, 0x93, 0xF6, 0x21, - 0x74, 0xEE, 0xED, 0xF8, 0xDA, 0xB7, 0x75, 0x5B, - 0x46, 0x65, 0x7E, 0x59, 0xD7, 0xAA, 0x00, 0xB9, - 0xF2, 0xF8, 0x5E, 0x4C, 0x0F, 0x77, 0xFA, 0x11, - 0xA5, 0xD6, 0x9A, 0x23, 0xB1, 0xEF, 0x3A, 0x09, - 0xF2, 0x19, 0xD8, 0x3B, 0x1F, 0x39, 0x1F, 0x84, - 0x13, 0x18, 0xEE, 0xF3, 0x5A, 0x32, 0x63, 0x67, - 0xBF, 0xA2, 0xB1, 0x5F, 0xD7, 0x14, 0x03, 0x20, - 0x92, 0xB9, 0xD0, 0x2B, 0xF6, 0x13, 0xAF, 0xF7, - 0x69, 0x6F, 0xAD, 0xF1, 0xDE, 0x2C, 0x81, 0x70, - 0x77, 0xCB, 0x7C, 0x99, 0x67, 0x76, 0xD6, 0x9E, - 0xC2, 0x41, 0xA2, 0x42, 0x54, 0xDA, 0x2D, 0x13, - 0x98, 0x76, 0x91, 0xEA, 0xC7, 0xEB, 0xA8, 0xCD, - 0x8D, 0xCF, 0xB3, 0x94, 0x7B, 0x1D, 0x99, 0xED, - 0xF9, 0x62, 0xD2, 0x15, 0xB3, 0x18, 0xBB, 0x5F, - 0x9A, 0xA0, 0x4D, 0x1C, 0x82, 0x62, 0x6A, 0x41, - 0x73, 0xD0, 0x2D, 0x41, 0x0C, 0x58, 0x6B, 0xCA, - 0x4E, 0x51, 0xCA, 0x4F, 0x3E, 0x15, 0x1B, 0x54, - 0xF1, 0x7A, 0x6B, 0xC9, 0x67, 0x76, 0x09, 0xBB, - 0xAF, 0x6C, 0x30, 0x38, 0xA6, 0x7C, 0xAD, 0xA6, - 0x6B, 0x4F, 0xDF, 0xB5, 0x10, 0x29, 0xE0, 0x78, - 0x07, 0xD7, 0x05, 0x96, 0x9D, 0x96, 0xC9, 0xAB, - 0xFB, 0x71, 0x62, 0xE4, 0x58, 0x10, 0xA1, 0xDC, - 0x4B, 0x56, 0xDA, 0x14, 0x77, 0xED, 0x90, 0x0A, - 0x89, 0xCC, 0xAC, 0x29, 0x8E, 0x17, 0x88, 0x42, - 0x69, 0xC3, 0x9E, 0x8D, 0x7A, 0xB9, 0x66, 0xF3, - 0x3D, 0xDA, 0xDB, 0xE5, 0x6A, 0x38, 0x4C, 0xA2, - 0x0A, 0x7B, 0x18, 0x99, 0xEC, 0x18, 0xE2, 0xAE, - 0x54, 0x70, 0x00, 0xB9, 0x04, 0xE3, 0x4E, 0x46, - 0x80, 0x1D, 0x85, 0x74, 0xDB, 0x00, 0x84, 0x17, - 0xBC, 0xFD, 0xD1, 0xA7, 0x4D, 0xC0, 0x18, 0xE5, - 0x07, 0xB7, 0x6B, 0x0F, 0xA0, 0x86, 0x26, 0x23, - 0x5B, 0x1C, 0xE2, 0x4B, 0xCF, 0xC3, 0x20, 0xFA, - 0xE3, 0x55, 0x1C, 0x1C, 0x92, 0x9B, 0x94, 0xC7, - 0xC4, 0x96, 0x53, 0x41, 0x82, 0x9D, 0x8A, 0x13, - 0x47, 0xD6, 0xA7, 0x38, 0x58, 0x03, 0xB0, 0x8B, - 0xCD, 0xA8, 0x4A, 0x27, 0xEA, 0x5E, 0x49, 0xCA, - 0x1E, 0x60, 0x06, 0xEA, 0x23, 0x2A, 0x53, 0xEE, - 0x41, 0x7E, 0xC8, 0x81, 0xD3, 0x32, 0x8A, 0x15, - 0x63, 0x82, 0xA6, 0xB2, 0x93, 0x89, 0x4D, 0xDF, - 0x9B, 0x36, 0x9C, 0xDE, 0x6B, 0x2F, 0xF5, 0x9C, - 0xB6, 0xA5, 0x64, 0xE2, 0x1C, 0x92, 0x79, 0xEC, - 0xA0, 0x31, 0x1F, 0x5D, 0x80, 0xCE, 0x39, 0xB9, - 0x8B, 0xF9, 0x0D, 0xB3, 0x27, 0xF7, 0x4D, 0x3F, - 0x76, 0x2D, 0x11, 0x7D, 0xF5, 0xF9, 0x13, 0x20, - 0x84, 0xFF, 0xB5, 0x55, 0xA5, 0xD1, 0x47, 0x22, - 0x1A, 0xF8, 0x63, 0xAB, 0xF7, 0x87, 0x15, 0xB7, - 0x21, 0x94, 0x52, 0x9A, 0x0E, 0x33, 0x4D, 0x4A, - 0x19, 0x1D, 0x42, 0xA9, 0x9B, 0xEA, 0x52, 0xAD, - 0xA2, 0xC7, 0xCC, 0x4A, 0x97, 0x74, 0xD5, 0xCB, - 0x28, 0xD4, 0xED, 0x82, 0xB6, 0x1F, 0x94, 0xE8, - 0x9F, 0x60, 0xF0, 0xC8, 0xEA, 0x52, 0xDC, 0x07, - 0x9D, 0x46, 0x58, 0xBF, 0x8C, 0x85, 0x6D, 0x61, - 0x52, 0xD9, 0x22, 0x51, 0x94, 0x8B, 0x3B, 0xA0, - 0x14, 0xD8, 0xBA, 0xF3, 0xDC, 0xD3, 0x6B, 0xC7, - 0x1F, 0x8E, 0x5B, 0x2C, 0xE6, 0xF5, 0x35, 0xB7, - 0xB9, 0xAE, 0x13, 0xDA, 0x4A, 0x1E, 0xAF, 0xFC, - 0x25, 0x3B, 0xE4, 0x3A, 0x9F, 0x60, 0x8E, 0xAC, - 0xE7, 0x33, 0xCF, 0xCE, 0x52, 0xEA, 0x5C, 0xDA, - 0x83, 0x59, 0xDB, 0x53, 0xFF, 0x3A, 0xF2, 0xCE, - 0xFE, 0x87, 0x79, 0xBC, 0xC5, 0x3C, 0x24, 0xA4, - 0xB1, 0x8D, 0x5E, 0x0D, 0x78, 0x1B, 0xEC, 0xF7, - 0x5B, 0x54, 0x77, 0x47, 0x3A, 0x20, 0x24, 0xAD, - 0x56, 0xC5, 0x4A, 0x7F, 0x99, 0x0E, 0xF6, 0xB1, - 0xDF, 0xAC, 0x50, 0x10, 0x88, 0x50, 0x9D, 0x3A, - 0x37, 0xF1, 0xC8, 0xD5, 0xC2, 0x64, 0x87, 0xE4, - 0x20, 0xB7, 0xF4, 0x35, 0x8E, 0x92, 0x69, 0x76, - 0x1F, 0xF1, 0xFA, 0x3A, 0xFC, 0xBE, 0xCA, 0xEB, - 0x68, 0xF5, 0xDD, 0xDE, 0x3A, 0xA8, 0xFD, 0x07, - 0x8C, 0xC4, 0x22, 0x4C, 0xEA, 0x67, 0x13, 0x2D, - 0x7E, 0xBF, 0x5D, 0x23, 0x2E, 0x43, 0xBA, 0xDD, - 0x21, 0x8C, 0x0B, 0x4D, 0xBE, 0x1E, 0x16, 0x52, - 0x98, 0x66, 0xB9, 0xAB, 0x93, 0x58, 0x85, 0xAC, - 0xB4, 0x15, 0xFB, 0xB1, 0xEE, 0xE6, 0x94, 0x08, - 0xA5, 0x21, 0xB4, 0x62, 0xEC, 0x59, 0xCD, 0x0D, - 0x3C, 0x54, 0x96, 0xD9, 0x85, 0xAE, 0xB0, 0xCE, - 0x37, 0x4F, 0x67, 0x72, 0xA4, 0xE6, 0x39, 0x3A, - 0x4E, 0xF0, 0x07, 0x43, 0x80, 0x90, 0xA8, 0xA9, - 0xE5, 0x2D, 0x2F, 0x55, 0x66, 0x6D, 0x70, 0xF0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xE8, 0x95, 0xDB, 0x64, 0xC5, 0x7B, 0xC3, 0xC2, + 0xA9, 0x7F, 0x0E, 0xC9, 0x33, 0x41, 0x0E, 0x98, + 0xF6, 0x21, 0x61, 0x03, 0xE3, 0x42, 0x3C, 0xAF, + 0x06, 0xA6, 0x71, 0x96, 0x4C, 0x51, 0x4A, 0x69, + 0x4E, 0xB6, 0xF6, 0x5C, 0xBD, 0x11, 0x37, 0xCC, + 0xCF, 0x88, 0x81, 0xFA, 0x40, 0x3C, 0x5F, 0xA0, + 0xE0, 0xB2, 0xF3, 0x6B, 0x9F, 0x40, 0x09, 0xC3, + 0x78, 0x21, 0x0D, 0x29, 0xE5, 0x4A, 0x7A, 0x5A, + 0x9B, 0x79, 0x31, 0x97, 0xCD, 0x6D, 0x2F, 0x38, + 0xD7, 0xE1, 0xF3, 0xAC, 0xA6, 0x9D, 0x48, 0x88, + 0x13, 0x89, 0x38, 0x1C, 0x89, 0xFA, 0x67, 0x6D, + 0xE4, 0x26, 0xD6, 0x34, 0xF9, 0xA1, 0x57, 0x05, + 0x5F, 0x17, 0x28, 0x3E, 0xCE, 0x82, 0x48, 0xCA, + 0xF1, 0x4D, 0xCF, 0x11, 0xE2, 0xD5, 0x63, 0x55, + 0xB0, 0x47, 0xDF, 0x63, 0x2A, 0x18, 0x48, 0x2E, + 0x79, 0xCB, 0x2D, 0x5A, 0x74, 0x39, 0x66, 0xBA, + 0xA8, 0xA7, 0x61, 0x21, 0xBB, 0x69, 0xC2, 0xE6, + 0x81, 0x55, 0xAC, 0xCB, 0x0A, 0x31, 0xDA, 0x6E, + 0xDC, 0x73, 0xCB, 0x09, 0xA9, 0xE6, 0x60, 0xFE, + 0xB2, 0x0F, 0x66, 0xC7, 0xBD, 0x96, 0x7A, 0xDE, + 0x32, 0x14, 0x9C, 0x55, 0x52, 0xEA, 0xEB, 0x2E, + 0xA1, 0x75, 0xB5, 0x62, 0x33, 0xF3, 0xB3, 0x70, + 0xED, 0xD8, 0x67, 0x92, 0x69, 0xCE, 0x0D, 0x2B, + 0x43, 0xF6, 0xB2, 0xF6, 0x5F, 0xE9, 0x57, 0xE7, + 0xAB, 0x37, 0xB9, 0x82, 0x04, 0x37, 0x54, 0xEA, + 0xC8, 0xA3, 0x0B, 0x36, 0xC1, 0x00, 0x04, 0xEF, + 0x13, 0xC6, 0x92, 0xE2, 0x19, 0xAA, 0x7A, 0xF0, + 0xA4, 0xC5, 0x28, 0x69, 0x10, 0xC7, 0x10, 0x0D, + 0xA4, 0x1E, 0x17, 0xBB, 0xEF, 0x2D, 0xA2, 0xAB, + 0x03, 0xAD, 0xF3, 0x07, 0x4B, 0xA1, 0xDA, 0x15, + 0xBC, 0xC8, 0x48, 0x05, 0xB8, 0x9B, 0x9D, 0xA8, + 0x8E, 0x9B, 0x40, 0x0A, 0xFB, 0x7E, 0x3B, 0xC8, + 0x33, 0x8D, 0x35, 0x4D, 0xA9, 0x53, 0xAC, 0x0B, + 0xAD, 0x82, 0x27, 0x56, 0xCA, 0x92, 0xE5, 0xDD, + 0x95, 0x07, 0xF4, 0x2B, 0xFE, 0xFC, 0xCB, 0x32, + 0xB4, 0xB9, 0x1A, 0x2B, 0xE5, 0xEF, 0x34, 0xC2, + 0xCF, 0x11, 0x77, 0xEA, 0xAF, 0xB2, 0x50, 0xAC, + 0x9A, 0xDE, 0xC4, 0xBE, 0x71, 0x80, 0x75, 0x89, + 0xF1, 0x00, 0x32, 0x27, 0xF9, 0xB7, 0x6B, 0x74, + 0xE0, 0x7B, 0xA6, 0x7A, 0xC6, 0x08, 0x19, 0xB2, + 0xAF, 0x76, 0x6A, 0x47, 0xFF, 0xFC, 0x7B, 0x76, + 0xD3, 0xA7, 0xC0, 0x77, 0xF5, 0xEC, 0x69, 0xAE, + 0xEA, 0x3E, 0x96, 0x38, 0x59, 0xB8, 0x2C, 0x2A, + 0xDE, 0x58, 0xBE, 0xC2, 0x15, 0x2E, 0xC8, 0x20, + 0x51, 0x10, 0x97, 0x5D, 0x37, 0xC6, 0x50, 0x5E, + 0x0D, 0xC7, 0x76, 0xFD, 0xE0, 0x71, 0x09, 0x7E, + 0x93, 0x01, 0x3D, 0x10, 0x04, 0xF4, 0xE1, 0xA2, + 0xFD, 0x79, 0xB8, 0x77, 0xED, 0x50, 0x25, 0xF5, + 0x27, 0xF3, 0xBF, 0xF1, 0x37, 0xF0, 0x41, 0xBB, + 0x9B, 0xD0, 0x01, 0xE9, 0x49, 0xF0, 0x8B, 0x4C, + 0xF8, 0x8D, 0xFD, 0x32, 0xFC, 0x7C, 0xDB, 0xCE, + 0xCC, 0xFD, 0xB0, 0xFA, 0x2D, 0xE7, 0x82, 0x3E, + 0x11, 0x0B, 0xCF, 0xF5, 0x8A, 0x41, 0x2C, 0xEA, + 0x27, 0x95, 0x75, 0x3E, 0x9C, 0x89, 0x67, 0x8C, + 0x3A, 0xE2, 0x42, 0x68, 0xF7, 0x48, 0x9F, 0x72, + 0x97, 0x4B, 0x69, 0x55, 0xED, 0xD0, 0x4E, 0x19, + 0x0D, 0x99, 0xBB, 0x0D, 0x7A, 0x25, 0x2F, 0xAD, + 0x5B, 0xBA, 0x60, 0x6C, 0x1A, 0x1F, 0x3A, 0xCA, + 0x73, 0x3B, 0xFA, 0xE3, 0x30, 0x9E, 0xA0, 0xA6, + 0xEB, 0x7D, 0x07, 0xE3, 0x6D, 0x8C, 0xA3, 0x36, + 0xD2, 0x64, 0x4F, 0xCE, 0x1A, 0x41, 0x89, 0x5D, + 0x01, 0x4D, 0x1A, 0x60, 0xCB, 0x10, 0x6F, 0x3F, + 0x80, 0x75, 0xF9, 0x37, 0x84, 0x61, 0x73, 0x8D, + 0x63, 0xD1, 0x15, 0xD0, 0x0B, 0x02, 0x4C, 0x67, + 0x78, 0x01, 0x05, 0x0A, 0x1B, 0x0B, 0x50, 0xDE, + 0x05, 0x7F, 0x85, 0xDB, 0x6A, 0xEB, 0x2C, 0x9D, + 0x6B, 0xB7, 0x40, 0x2A, 0x66, 0xE3, 0xAB, 0x4D, + 0xB0, 0x5C, 0x58, 0xBB, 0xDA, 0x12, 0xF6, 0x95, + 0x95, 0x8B, 0x8A, 0xC7, 0xB4, 0xE4, 0x5E, 0xC6, + 0xC9, 0x52, 0xF6, 0x79, 0xC1, 0xEE, 0xBD, 0xF8, + 0x60, 0xE3, 0x48, 0x98, 0x27, 0x79, 0xAA, 0x69, + 0x88, 0xEF, 0xC2, 0xAD, 0x1D, 0xC1, 0xEA, 0xE2, + 0x2A, 0x27, 0xA5, 0xB2, 0xC6, 0x1C, 0x97, 0xB3, + 0xB2, 0x49, 0x3C, 0xB6, 0xC1, 0x3C, 0x5F, 0x6E, + 0x20, 0xA6, 0x7B, 0x88, 0xD3, 0xC3, 0xAC, 0xCF, + 0xAF, 0x0A, 0x42, 0x57, 0x42, 0xDF, 0x24, 0x06, + 0x34, 0xD1, 0xEE, 0x59, 0x38, 0x28, 0xFE, 0x62, + 0x97, 0x44, 0x6C, 0x07, 0x6F, 0x97, 0x90, 0x55, + 0x98, 0x8A, 0xB8, 0x34, 0xB2, 0xBD, 0x82, 0xE1, + 0x4D, 0xC0, 0x86, 0x40, 0x0E, 0x1C, 0x95, 0x6C, + 0xC0, 0xC3, 0x0C, 0xE7, 0xBF, 0xD9, 0x62, 0x22, + 0x3D, 0x23, 0xFE, 0x94, 0x94, 0x96, 0x4A, 0x81, + 0x1B, 0x93, 0xE8, 0xD7, 0xB8, 0xF3, 0x4C, 0x89, + 0xAA, 0xD4, 0x5D, 0xD4, 0x11, 0x3F, 0x2A, 0xE7, + 0xBD, 0x94, 0xB5, 0x3F, 0xC8, 0x6E, 0x8B, 0x2A, + 0xE8, 0x2E, 0x51, 0xEC, 0x6F, 0x3E, 0xA4, 0xC3, + 0x0D, 0x60, 0xB8, 0x60, 0x72, 0x74, 0x86, 0x12, + 0xD1, 0x60, 0x70, 0x56, 0xB5, 0xFF, 0x6A, 0x45, + 0x00, 0xEE, 0xE7, 0x8A, 0x5A, 0x63, 0x9C, 0x7B, + 0x74, 0x16, 0x97, 0x77, 0x62, 0x68, 0x64, 0xDD, + 0x9E, 0xAE, 0xF0, 0xE3, 0xAD, 0x84, 0x93, 0xD8, + 0x31, 0xF7, 0x1D, 0xEA, 0x95, 0xBB, 0xFC, 0xF8, + 0x14, 0x23, 0xA2, 0x66, 0xDE, 0x56, 0xF3, 0xA8, + 0xFE, 0x8E, 0x6C, 0x3C, 0x0D, 0x61, 0x2F, 0xB6, + 0x2B, 0xD6, 0x42, 0x18, 0x8C, 0xA7, 0x1C, 0xB8, + 0x98, 0x34, 0xF3, 0x0B, 0xCC, 0x28, 0xBD, 0x17, + 0x88, 0x45, 0xF1, 0xF6, 0xF4, 0x6C, 0x03, 0xD3, + 0x06, 0xF7, 0xED, 0x4E, 0x68, 0x75, 0x94, 0x27, + 0xAE, 0xC2, 0x70, 0x11, 0x98, 0xC3, 0xC0, 0x5D, + 0x38, 0x5D, 0xFA, 0xFD, 0x52, 0x8C, 0xCE, 0x84, + 0x25, 0xBC, 0x55, 0x14, 0x69, 0xA0, 0xED, 0x68, + 0x1B, 0xEE, 0x4D, 0x12, 0xA8, 0x43, 0xE3, 0x33, + 0xB5, 0xA8, 0xE0, 0x51, 0x7F, 0xC6, 0x19, 0x06, + 0xF9, 0xC4, 0xE7, 0x80, 0x9B, 0xAE, 0xD4, 0xD3, + 0xD1, 0x6E, 0xB2, 0x2F, 0x1F, 0xA9, 0xAB, 0x40, + 0x2D, 0x98, 0x8E, 0xD5, 0x9F, 0x9F, 0xED, 0x04, + 0x55, 0xE9, 0x26, 0x0F, 0xD6, 0x27, 0xA2, 0x4A, + 0x17, 0xFE, 0x7C, 0xB6, 0x3E, 0x53, 0x0B, 0x48, + 0xF5, 0xFB, 0x66, 0x87, 0xA2, 0xE8, 0xC4, 0x9D, + 0xA7, 0x9F, 0xBD, 0x69, 0xA3, 0x40, 0x00, 0x56, + 0x66, 0x5D, 0xD1, 0x1D, 0x19, 0xA2, 0xBC, 0x4D, + 0xB1, 0xD3, 0x74, 0xAB, 0x6A, 0x6E, 0x42, 0x47, + 0x2A, 0x27, 0xAC, 0x6B, 0x98, 0xF6, 0x76, 0xE8, + 0xED, 0xAA, 0xDD, 0x51, 0x4F, 0x6D, 0x44, 0xDE, + 0xEC, 0xDA, 0xB5, 0xA6, 0xDF, 0xA0, 0xF8, 0x4F, + 0x13, 0x9A, 0x80, 0x3A, 0x25, 0x24, 0xBF, 0x33, + 0x5D, 0xC5, 0x2E, 0xA5, 0x8F, 0xA5, 0x0D, 0x98, + 0xFB, 0x5C, 0xD5, 0x5D, 0x5D, 0x50, 0xA6, 0x63, + 0xCF, 0x64, 0x7E, 0xEE, 0x56, 0xFE, 0x8E, 0x66, + 0x4B, 0x3B, 0xCA, 0xF9, 0xE3, 0x33, 0x97, 0x8A, + 0x79, 0x46, 0x97, 0x3F, 0xD1, 0x13, 0xE4, 0xFD, + 0x39, 0x24, 0xE6, 0xC0, 0x9E, 0x60, 0x38, 0x64, + 0x44, 0x21, 0x4D, 0xFA, 0x7A, 0x4D, 0x67, 0x1F, + 0xC2, 0x38, 0x90, 0x63, 0x7E, 0xB8, 0x59, 0x13, + 0x4D, 0x79, 0xE2, 0x65, 0xC5, 0x9C, 0xA3, 0xEC, + 0xCD, 0xDF, 0xA0, 0x18, 0x22, 0x3C, 0x9B, 0xAE, + 0x1C, 0xCA, 0x10, 0x39, 0x62, 0x07, 0x8B, 0xC5, + 0xF0, 0xDD, 0x02, 0x24, 0x6F, 0xA2, 0x83, 0x24, + 0xF7, 0xCB, 0x2F, 0xCF, 0xAD, 0x07, 0xC2, 0x5B, + 0x4B, 0xC2, 0xD8, 0x88, 0x06, 0x9B, 0x0C, 0xF5, + 0xF2, 0x3C, 0x76, 0x1C, 0x0E, 0x47, 0x10, 0x98, + 0x81, 0xCD, 0x31, 0x45, 0x6A, 0x64, 0xB9, 0x40, + 0xB4, 0xBB, 0x9B, 0x4C, 0x2C, 0x3B, 0x8E, 0x6B, + 0xA8, 0x34, 0xAA, 0xAE, 0x69, 0xFD, 0xFC, 0x47, + 0xD4, 0x4B, 0x3C, 0x96, 0x88, 0x7A, 0xBE, 0xD3, + 0x60, 0x15, 0xE7, 0xB6, 0x4E, 0x85, 0x42, 0x92, + 0x8F, 0x27, 0x7C, 0xBD, 0x2D, 0x3C, 0x51, 0x2C, + 0x24, 0xDE, 0xEF, 0xE5, 0x90, 0xE8, 0x1C, 0x68, + 0x4E, 0x06, 0x3E, 0x7A, 0xAD, 0xCF, 0x11, 0x7B, + 0x48, 0x94, 0x3D, 0xB7, 0x71, 0xFC, 0x22, 0x07, + 0xF5, 0x7A, 0x74, 0x53, 0x57, 0x55, 0x5D, 0x41, + 0x9C, 0x9C, 0xDC, 0xA3, 0x5C, 0xC1, 0xA7, 0x10, + 0x0A, 0x69, 0x13, 0xA3, 0xB6, 0xAA, 0xCF, 0x79, + 0x6F, 0xE3, 0xF9, 0x4D, 0xD2, 0xF8, 0x18, 0x98, + 0x27, 0x16, 0xCE, 0x03, 0x16, 0x54, 0x2A, 0x1B, + 0x95, 0x7E, 0x12, 0xDA, 0x43, 0xE2, 0x31, 0x54, + 0x2C, 0xC1, 0x4F, 0xCC, 0x66, 0xD7, 0x28, 0xA6, + 0x83, 0x26, 0xB2, 0xBC, 0x31, 0x12, 0x48, 0x33, + 0x0F, 0x3E, 0x98, 0xF8, 0x1E, 0xA3, 0x8C, 0xA9, + 0x24, 0xA8, 0xE4, 0xDA, 0x97, 0xCF, 0x67, 0x38, + 0x42, 0xC7, 0x59, 0xF9, 0x35, 0xBE, 0x88, 0x16, + 0x3C, 0xE9, 0x7F, 0xE4, 0xD9, 0x45, 0x71, 0x76, + 0xF5, 0xB8, 0x90, 0x8A, 0xF9, 0x48, 0xF7, 0x4D, + 0x5D, 0x1D, 0xDB, 0xC5, 0x21, 0x82, 0x5D, 0x93, + 0x1C, 0x63, 0xCA, 0x8A, 0x8E, 0x12, 0x24, 0x26, + 0x26, 0x30, 0x5A, 0xB6, 0xA2, 0xE0, 0x62, 0x45, + 0x64, 0xEE, 0x04, 0x19, 0x83, 0xC1, 0x8C, 0x29, + 0x52, 0xEC, 0x3D, 0x9D, 0x15, 0x9B, 0xDE, 0x39, + 0x85, 0xCF, 0x77, 0x89, 0x7E, 0xE2, 0xDC, 0x88, + 0x81, 0x12, 0x72, 0x1D, 0x48, 0x54, 0xE9, 0x14, + 0xA5, 0x39, 0x7E, 0x08, 0xB5, 0x4F, 0x4A, 0x54, + 0x32, 0x3F, 0xF8, 0x20, 0x82, 0x1B, 0xE0, 0x26, + 0xEA, 0x09, 0x1E, 0xCA, 0x6B, 0x7D, 0x80, 0xD9, + 0x1E, 0x3D, 0xCA, 0x2E, 0xF7, 0x84, 0x8B, 0x86, + 0xFC, 0xA6, 0xBB, 0x40, 0xCE, 0x48, 0x27, 0x1E, + 0x10, 0x08, 0x36, 0x8E, 0x3E, 0xBB, 0x5E, 0x39, + 0x5E, 0x1C, 0xCD, 0x0D, 0x17, 0x8F, 0x1A, 0x62, + 0x57, 0xD2, 0x6B, 0x6B, 0xA4, 0xB7, 0xCE, 0x53, + 0x2C, 0xAA, 0x1E, 0x76, 0xCE, 0x28, 0xFA, 0x4C, + 0xF9, 0xE0, 0x29, 0xE2, 0x48, 0x2B, 0x94, 0xD3, + 0xAC, 0xF9, 0x7A, 0x32, 0x6D, 0x23, 0x5D, 0x1B, + 0xDC, 0x89, 0xF7, 0x00, 0x02, 0x19, 0x84, 0x51, + 0xD9, 0xF1, 0xF1, 0x2C, 0xCD, 0x5B, 0xCA, 0xEC, + 0xDD, 0xE9, 0xE1, 0x4A, 0xC8, 0x07, 0x42, 0xEB, + 0x31, 0xE6, 0x46, 0x4C, 0x83, 0x21, 0x0A, 0x39, + 0xF3, 0x50, 0x98, 0xBE, 0x03, 0x78, 0xD0, 0x74, + 0xCE, 0x1C, 0xCD, 0x1E, 0xBC, 0x1C, 0x77, 0x70, + 0xF7, 0x78, 0xD6, 0x05, 0xF2, 0xBE, 0x59, 0xDB, + 0x7E, 0xA0, 0x7D, 0x80, 0xCC, 0xDF, 0x55, 0xF1, + 0x6E, 0x98, 0x5B, 0x14, 0x2F, 0xB7, 0xBD, 0xA0, + 0x7A, 0xA7, 0xDC, 0xA5, 0xB2, 0x01, 0xE1, 0x95, + 0x0C, 0xF9, 0xA7, 0x28, 0xF2, 0x1E, 0x9A, 0x9D, + 0x8A, 0xC4, 0xD1, 0x32, 0x7E, 0x3B, 0xC0, 0xFF, + 0x33, 0x9A, 0x25, 0x05, 0x22, 0xF6, 0x31, 0xDF, + 0x2E, 0x75, 0x95, 0x51, 0x54, 0x89, 0x3E, 0x4A, + 0x1A, 0xAF, 0x98, 0x66, 0xFE, 0xE1, 0x63, 0x7E, + 0xE1, 0xAA, 0x51, 0x06, 0xD2, 0x44, 0xE9, 0x9E, + 0x6F, 0x31, 0xFC, 0x56, 0x01, 0xBB, 0x7B, 0x79, + 0xBA, 0xD8, 0x28, 0x60, 0xB1, 0xD6, 0x05, 0x9D, + 0x9B, 0x13, 0x2E, 0x02, 0x64, 0x18, 0x02, 0x0D, + 0xB0, 0x6E, 0xB8, 0x39, 0x1F, 0xA1, 0x5B, 0x7A, + 0x0F, 0x29, 0xE3, 0x6D, 0x96, 0x6A, 0xBD, 0x3D, + 0x2A, 0x2F, 0xF3, 0xF2, 0xAA, 0xC3, 0x4C, 0x8B, + 0x45, 0xC7, 0xD2, 0x35, 0x5E, 0xDB, 0xB8, 0x0B, + 0x22, 0x4B, 0xC1, 0x06, 0xEB, 0xC6, 0x75, 0x0E, + 0x55, 0x07, 0x0F, 0x85, 0xA7, 0xCB, 0x60, 0x03, + 0x39, 0x4E, 0x51, 0x61, 0xAE, 0x26, 0xF5, 0xAB, + 0xF8, 0x3F, 0x0D, 0xCC, 0xCF, 0x69, 0xB8, 0x61, + 0x39, 0xAF, 0x86, 0x94, 0xFE, 0x1D, 0xC0, 0x07, + 0x81, 0xEA, 0xE0, 0x9C, 0xDB, 0x42, 0x18, 0x14, + 0x87, 0x80, 0x43, 0xDC, 0x9B, 0x05, 0x30, 0xE5, + 0x54, 0x5A, 0x16, 0x5E, 0x39, 0xA9, 0xB7, 0xDE, + 0x88, 0xB4, 0xAD, 0x2A, 0xEB, 0x90, 0xD3, 0xC3, + 0x29, 0x41, 0x2E, 0xD2, 0xFE, 0x1D, 0x97, 0xB7, + 0x32, 0xC8, 0x43, 0x9D, 0xF4, 0xF8, 0x3D, 0x22, + 0x88, 0x35, 0xB5, 0x38, 0xDC, 0x27, 0x8F, 0xF0, + 0xA2, 0xDC, 0x42, 0xF4, 0x1B, 0x00, 0xCE, 0x3A, + 0xCA, 0x06, 0xB0, 0x5C, 0x48, 0x39, 0xB8, 0x96, + 0x93, 0x15, 0x15, 0xD7, 0x8E, 0xA3, 0x67, 0x3A, + 0x37, 0x82, 0x79, 0xF4, 0xE8, 0x9C, 0xE0, 0x8E, + 0x34, 0x53, 0xFF, 0x2F, 0xB4, 0x53, 0xBE, 0x03, + 0x1C, 0x63, 0x18, 0x62, 0x8A, 0x73, 0x1D, 0x02, + 0x9F, 0xC7, 0xBE, 0xA2, 0xBA, 0x5E, 0xAC, 0x49, + 0x16, 0x27, 0x8B, 0x93, 0x8A, 0x6A, 0x6A, 0xCE, + 0xF5, 0xBF, 0xE2, 0x15, 0x8F, 0x2A, 0xF4, 0x3D, + 0x8E, 0x56, 0xA0, 0x64, 0x9D, 0xF2, 0x8A, 0x25, + 0x0D, 0x2F, 0x25, 0x36, 0xAB, 0xDE, 0x1E, 0x00, + 0x8E, 0xB6, 0x31, 0xF4, 0xBD, 0x0E, 0xB5, 0x55, + 0x73, 0xA4, 0x05, 0x39, 0xA6, 0x00, 0x41, 0x81, + 0xA9, 0xD2, 0xBF, 0x7A, 0x1E, 0x53, 0x50, 0x4F, + 0x11, 0xE0, 0x14, 0x84, 0x07, 0x33, 0x84, 0x41, + 0x31, 0xAC, 0x66, 0x89, 0x46, 0xE5, 0xB8, 0x27, + 0x28, 0x9A, 0xB6, 0xB2, 0x13, 0x66, 0xC5, 0xD0, + 0xE2, 0x64, 0x92, 0x19, 0xB9, 0x2C, 0x47, 0x60, + 0xDF, 0xB7, 0x05, 0xF7, 0xF6, 0x1A, 0x96, 0x56, + 0x4C, 0x9E, 0x84, 0x0D, 0x14, 0xB0, 0xBB, 0x0D, + 0xA8, 0x2D, 0xA5, 0x0F, 0x8B, 0x8E, 0x75, 0x2B, + 0xBF, 0xEA, 0x3B, 0x0A, 0x33, 0x7B, 0xE1, 0x24, + 0xF7, 0x2D, 0x8F, 0x82, 0x49, 0x19, 0x5B, 0xC1, + 0x9C, 0x3E, 0x0B, 0x62, 0xEA, 0xE4, 0x96, 0xD3, + 0x8C, 0xF7, 0x50, 0x0B, 0x4F, 0x10, 0x66, 0x5F, + 0xC2, 0xD2, 0x8B, 0x9E, 0xA9, 0x35, 0xF7, 0xE3, + 0x16, 0x47, 0x2F, 0x4F, 0xF4, 0x01, 0x26, 0x75, + 0x41, 0xBD, 0xB6, 0x23, 0x01, 0x55, 0x4B, 0x20, + 0x09, 0x92, 0x8C, 0x64, 0x45, 0xBB, 0xD0, 0xEF, + 0x21, 0xD0, 0x99, 0x72, 0xF3, 0x50, 0x81, 0xAB, + 0xA9, 0x09, 0x1A, 0x6C, 0x23, 0xFE, 0xD2, 0x9F, + 0x5C, 0xF9, 0xE0, 0x77, 0x9F, 0x7E, 0xFB, 0xAD, + 0x88, 0xE6, 0x2A, 0x45, 0x44, 0x42, 0xB3, 0x00, + 0x79, 0xBE, 0x0A, 0xC9, 0xC6, 0x48, 0x26, 0xB9, + 0x8C, 0x1E, 0x10, 0x01, 0xCB, 0x0F, 0xB0, 0xF0, + 0xA9, 0x5F, 0x79, 0x65, 0xFE, 0x93, 0x12, 0xBF, + 0xDA, 0xEC, 0x33, 0xF9, 0x50, 0x65, 0xC8, 0xE5, + 0x9D, 0x39, 0x50, 0xF8, 0x0A, 0xDC, 0x7F, 0xB3, + 0x34, 0xF2, 0x02, 0xD3, 0xE5, 0xF8, 0xDA, 0x48, + 0x1C, 0x9B, 0x54, 0xA7, 0x59, 0x83, 0x93, 0x0F, + 0xD1, 0xE5, 0xAC, 0xD1, 0x62, 0x84, 0xF0, 0x71, + 0x93, 0xFB, 0xCB, 0x50, 0xD0, 0xDC, 0x00, 0xEF, + 0xF8, 0x20, 0x31, 0x44, 0xC1, 0x1E, 0xC6, 0x14, + 0x20, 0xFC, 0x32, 0xD7, 0x98, 0x2C, 0xE8, 0x96, + 0x40, 0x6B, 0xE7, 0x69, 0xA7, 0x5D, 0xD8, 0xD3, + 0xCA, 0xC7, 0x53, 0xAB, 0xE5, 0xA2, 0x78, 0x65, + 0x5B, 0xF5, 0x4B, 0xE3, 0x3A, 0x1B, 0x83, 0x74, + 0xEB, 0xEE, 0xFF, 0x21, 0x2C, 0x39, 0xCE, 0x51, + 0x46, 0x68, 0xF1, 0xC4, 0x56, 0xEA, 0xA2, 0x53, + 0x28, 0x28, 0xC8, 0x42, 0x93, 0xF1, 0xA5, 0xBC, + 0x9E, 0xB5, 0xDE, 0xDF, 0x55, 0x8A, 0x9B, 0x4C, + 0x12, 0x39, 0xF7, 0x72, 0x72, 0xC6, 0x7E, 0x1A, + 0xB2, 0x8E, 0x1E, 0xFE, 0xC5, 0x89, 0x3E, 0x09, + 0xC1, 0x06, 0x62, 0xB5, 0x3C, 0x8B, 0x82, 0x55, + 0xB1, 0xC8, 0xDC, 0x8F, 0x8E, 0x51, 0x20, 0xA2, + 0x5C, 0x75, 0xEE, 0xFE, 0x79, 0xC4, 0x3F, 0x7A, + 0x8B, 0x37, 0xDF, 0x9D, 0x1E, 0x4F, 0x32, 0x48, + 0x69, 0x33, 0xDA, 0x1C, 0xB0, 0x66, 0x4C, 0x5D, + 0xB3, 0x9E, 0x21, 0xBC, 0x22, 0x7B, 0x0C, 0xDF, + 0xE7, 0xA5, 0x50, 0x7F, 0x07, 0xF2, 0x18, 0xA7, + 0xA4, 0x7D, 0xEB, 0xCD, 0x9D, 0xAD, 0x72, 0x47, + 0xB4, 0xD0, 0x45, 0xA1, 0x3A, 0xD4, 0xF7, 0x5E, + 0xAD, 0x2D, 0x45, 0xC3, 0x39, 0xD0, 0xDF, 0x04, + 0x57, 0x7F, 0x2E, 0x0F, 0xDC, 0x78, 0x03, 0x92, + 0x55, 0x30, 0x33, 0xC7, 0x38, 0x85, 0x2B, 0x1B, + 0xE4, 0xE6, 0x3E, 0xA3, 0x89, 0x7D, 0x6C, 0x9C, + 0x4B, 0x11, 0xAD, 0x6B, 0x58, 0xD3, 0xE2, 0xD3, + 0x42, 0xD3, 0x28, 0x40, 0xF6, 0x49, 0xDD, 0x83, + 0xE7, 0x59, 0x86, 0x6B, 0x73, 0x81, 0xA8, 0x4C, + 0x8A, 0xDD, 0xDF, 0x41, 0x3F, 0xAE, 0x18, 0xE6, + 0x43, 0x1B, 0x1E, 0xEA, 0x73, 0xA5, 0x6C, 0xD8, + 0x89, 0xB7, 0x6B, 0xC9, 0x78, 0x6B, 0xED, 0xED, + 0xCA, 0x25, 0x41, 0xE4, 0xC9, 0xB2, 0x4E, 0x28, + 0xF5, 0x8A, 0xD3, 0x74, 0xC1, 0xD9, 0x3D, 0xF2, + 0xD3, 0xF2, 0xC3, 0x7E, 0xC5, 0x94, 0xA0, 0x49, + 0x8C, 0x57, 0x45, 0x79, 0xA7, 0x33, 0x2F, 0x72, + 0xC0, 0xF9, 0x75, 0x08, 0x77, 0xFA, 0xD5, 0xB9, + 0x0B, 0x96, 0x8D, 0x88, 0xF1, 0x16, 0x82, 0xC4, + 0x07, 0x1E, 0x4E, 0xA3, 0x8B, 0x81, 0x6A, 0xEA, + 0xD6, 0xBE, 0x54, 0xD2, 0xF3, 0x71, 0x32, 0x4F, + 0x24, 0x75, 0xB8, 0x62, 0xC7, 0x54, 0x24, 0xEC, + 0xF9, 0x85, 0x8A, 0xA4, 0xE2, 0x00, 0xCF, 0xBA, + 0x41, 0x2D, 0x7E, 0x3E, 0x6C, 0x30, 0x8D, 0x8D, + 0xE1, 0x1D, 0xD1, 0x85, 0x33, 0x1A, 0xF9, 0xD4, + 0x1A, 0xFE, 0x88, 0x79, 0x96, 0x5D, 0x67, 0x46, + 0xEF, 0x21, 0xFD, 0x98, 0xD3, 0xED, 0x38, 0x06, + 0xFB, 0x5C, 0x46, 0x19, 0xC9, 0x8E, 0x34, 0x7D, + 0x76, 0xB8, 0xB8, 0x98, 0x49, 0x39, 0x55, 0x61, + 0xEE, 0x28, 0x6D, 0xFD, 0xFC, 0x6A, 0x04, 0xE1, + 0xD4, 0x7E, 0x9F, 0x5B, 0x5B, 0x49, 0x25, 0x77, + 0x84, 0xC3, 0x93, 0x64, 0xDF, 0xA8, 0x8A, 0xD6, + 0x30, 0xDF, 0xA5, 0x9C, 0xCA, 0x32, 0x37, 0xF4, + 0xA2, 0xB1, 0x41, 0xA8, 0x13, 0xD2, 0x2C, 0x6F, + 0xFE, 0x73, 0xC2, 0xD9, 0x9A, 0xDC, 0x82, 0x4D, + 0x93, 0xE0, 0x6A, 0x54, 0xB6, 0xDE, 0x62, 0xC3, + 0x12, 0x5D, 0x94, 0xB4, 0x9E, 0x95, 0x0D, 0xEC, + 0x36, 0x1F, 0x96, 0x1F, 0x56, 0xD3, 0x67, 0x1C, + 0x99, 0x25, 0x37, 0x7F, 0x6E, 0x67, 0x06, 0x65, + 0x32, 0x2B, 0x84, 0x89, 0xE8, 0x33, 0xD3, 0x83, + 0x0E, 0xCC, 0xDD, 0x0F, 0x53, 0xF4, 0xA4, 0xF9, + 0xD6, 0x8F, 0x14, 0x45, 0xF3, 0xAE, 0xD5, 0xC9, + 0xD7, 0x66, 0x40, 0x9B, 0x59, 0xBA, 0xE7, 0xA7, + 0x29, 0x12, 0xE9, 0x8B, 0x3B, 0xB5, 0x73, 0x42, + 0xD2, 0x9B, 0x6A, 0xCF, 0xD1, 0x43, 0x36, 0xB7, + 0xB8, 0xB6, 0xB7, 0x54, 0x9A, 0xF8, 0xCC, 0x88, + 0x45, 0xE1, 0x0C, 0x28, 0x11, 0x28, 0x72, 0x81, + 0x98, 0x5D, 0x5D, 0x47, 0x68, 0x5F, 0xC5, 0x89, + 0xF2, 0x67, 0x8E, 0xD8, 0x93, 0xF5, 0x7B, 0x85, + 0xAC, 0xED, 0x75, 0x63, 0x2E, 0x50, 0xDE, 0x5E, + 0x07, 0x4E, 0x6C, 0xED, 0xCF, 0x1A, 0xD4, 0x99, + 0xBC, 0xE6, 0x7A, 0x7F, 0x49, 0x85, 0x64, 0xDE, + 0xEC, 0x67, 0x7C, 0x70, 0x83, 0x88, 0xDE, 0x8F, + 0xD7, 0xB0, 0x99, 0xCF, 0xC1, 0x16, 0x09, 0x6C, + 0x45, 0xFE, 0x28, 0x89, 0x0B, 0x5E, 0xAF, 0x06, + 0x16, 0x99, 0x39, 0xFD, 0xA3, 0x5E, 0x12, 0x15, + 0xF2, 0x38, 0xE8, 0xCD, 0xED, 0xFE, 0x67, 0x00, + 0x65, 0xF5, 0xDE, 0x32, 0x72, 0xA2, 0x32, 0xFD, + 0x53, 0xC2, 0x50, 0xF5, 0xD7, 0x79, 0xB3, 0x16, + 0x94, 0xFB, 0xA9, 0x1B, 0x55, 0x48, 0x03, 0x67, + 0x6E, 0x4D, 0xEA, 0x28, 0x84, 0x63, 0xFE, 0x10, + 0x63, 0x00, 0x9E, 0x9C, 0xB7, 0x6C, 0x31, 0x7D, + 0xB4, 0x00, 0xAC, 0xF4, 0xD2, 0xD2, 0xB6, 0xD1, + 0x6E, 0xDE, 0xBA, 0x41, 0x08, 0x91, 0x3F, 0x60, + 0xAE, 0xB2, 0x52, 0xCD, 0xE4, 0x13, 0x69, 0x0C, + 0xEE, 0xFD, 0xCF, 0xA6, 0x38, 0x96, 0x3D, 0xBD, + 0x04, 0xF4, 0xCF, 0x21, 0xAD, 0x74, 0xDD, 0xE6, + 0x5F, 0x0F, 0x1E, 0x7C, 0xE7, 0x0A, 0xF1, 0x01, + 0xA6, 0xDE, 0x9A, 0x59, 0xDB, 0x21, 0xD3, 0x80, + 0x27, 0xDB, 0xBF, 0x76, 0x16, 0x78, 0x27, 0x95, + 0x0B, 0x69, 0x41, 0x82, 0x66, 0xAF, 0xA4, 0x44, + 0xC7, 0x28, 0xDE, 0x36, 0x24, 0xA1, 0xC8, 0x1E, + 0x5B, 0x16, 0x41, 0xDB, 0xE8, 0x79, 0xCD, 0x82, + 0x2F, 0xB2, 0x30, 0x3C, 0xC3, 0xA9, 0xFC, 0xEE, + 0xFE, 0x3D, 0xDF, 0x7D, 0xBD, 0x0B, 0x70, 0x57, + 0x24, 0x8A, 0x28, 0xD6, 0x06, 0x2D, 0x76, 0xEB, + 0x13, 0xB9, 0x2C, 0x9C, 0x9D, 0x00, 0x3B, 0x69, + 0xE1, 0x84, 0x2A, 0x54, 0xC0, 0x9C, 0xF6, 0xB4, + 0x84, 0x52, 0x08, 0x15, 0xE2, 0xBB, 0x23, 0x72, + 0x88, 0xC6, 0x4F, 0xC6, 0x96, 0xFD, 0x3B, 0xC4, + 0x5D, 0xB3, 0x0C, 0xB8, 0x64, 0x65, 0xDF, 0x11, + 0x88, 0xBF, 0x47, 0x95, 0x6E, 0x5B, 0x91, 0x6A, + 0x80, 0x09, 0x71, 0x5C, 0xC9, 0xA9, 0xA6, 0xDC, + 0xE4, 0x4C, 0x54, 0xF9, 0x28, 0x81, 0x6B, 0x41, + 0xD0, 0x18, 0xC5, 0xFE, 0x65, 0x2F, 0xFE, 0x4E, + 0x33, 0xF3, 0x52, 0xD3, 0x83, 0xA9, 0xC1, 0x36, + 0x5F, 0x02, 0xAB, 0xFD, 0x64, 0x7B, 0xD6, 0xB4, + 0x2A, 0xD1, 0x63, 0x73, 0x0F, 0x8B, 0xFD, 0xA1, + 0xE2, 0xBE, 0x5F, 0x61, 0x4D, 0x79, 0x59, 0x78, + 0x25, 0xBA, 0x09, 0xF4, 0x57, 0xD3, 0xCB, 0xE7, + 0x56, 0x1E, 0x7E, 0x89, 0xEA, 0xF0, 0x59, 0xE9, + 0x77, 0xD1, 0xEE, 0x88, 0x84, 0x8B, 0x78, 0x1F, + 0x21, 0xF7, 0x23, 0x89, 0x0F, 0xF1, 0xF9, 0x87, + 0x39, 0x28, 0x41, 0x2C, 0x8F, 0x11, 0xEE, 0xDD, + 0x2C, 0x0C, 0x39, 0xC9, 0x51, 0x27, 0x90, 0x98, + 0x6A, 0x19, 0xE1, 0x7B, 0x2B, 0x70, 0xA4, 0xD7, + 0xCF, 0x49, 0xD9, 0xD1, 0x8C, 0xAA, 0x0C, 0x20, + 0x23, 0x13, 0x4C, 0xAC, 0xD1, 0x69, 0x20, 0x0D, + 0x88, 0x17, 0xFA, 0x32, 0x1F, 0x04, 0xAC, 0xC9, + 0x10, 0x61, 0x3D, 0xFF, 0x25, 0x0E, 0xB3, 0x25, + 0xDB, 0xEF, 0x29, 0xEB, 0x56, 0x11, 0xB2, 0xAD, + 0x2A, 0x23, 0xED, 0xD5, 0x38, 0x04, 0x9B, 0x3F, + 0x43, 0xEF, 0xEB, 0x4D, 0x60, 0x98, 0x37, 0x92, + 0xB4, 0xBF, 0x05, 0x56, 0x79, 0x44, 0xAA, 0xDB, + 0x7A, 0xC4, 0xD3, 0xA5, 0xD8, 0x0A, 0x1B, 0x9D, + 0x84, 0x48, 0xB4, 0xC0, 0xC1, 0x15, 0xC3, 0xB5, + 0xAD, 0x38, 0x85, 0x35, 0x3F, 0x47, 0xD5, 0xFC, + 0xB9, 0xB7, 0xD6, 0x44, 0x6F, 0x1A, 0x72, 0x10, + 0xBB, 0xC6, 0x67, 0xFC, 0x41, 0x14, 0x15, 0xF2, + 0x3C, 0xD4, 0x0A, 0x2A, 0x3D, 0x64, 0x06, 0x1D, + 0x71, 0xC6, 0x71, 0x91, 0x57, 0x1A, 0x97, 0xD0, + 0x10, 0x88, 0xA2, 0x4B, 0x67, 0x11, 0x56, 0x7F, + 0xC8, 0x91, 0x06, 0x73, 0x2D, 0x88, 0x92, 0xFF, + 0x98, 0x5B, 0x8E, 0x6C, 0xF7, 0x01, 0x63, 0x82, + 0x9C, 0xC0, 0x85, 0xBE, 0x4E, 0x40, 0x83, 0x15, + 0x36, 0x1B, 0xB1, 0xB2, 0x00, 0x3D, 0x64, 0x13, + 0x22, 0x0B, 0x13, 0x45, 0x06, 0xD3, 0xC3, 0x04, + 0xC0, 0xBB, 0xBA, 0x9C, 0x9C, 0x45, 0xD3, 0x65, + 0x1E, 0x05, 0x71, 0xB6, 0xB1, 0x15, 0x17, 0x72, + 0x13, 0xD8, 0x59, 0x5E, 0x14, 0x3D, 0xB9, 0x0B, + 0xD7, 0x2F, 0x7E, 0xB9, 0x74, 0xD8, 0xD0, 0xA0, + 0x31, 0x74, 0x09, 0xD6, 0x4D, 0x58, 0x37, 0xEA, + 0xEC, 0x9B, 0x8D, 0x44, 0xDD, 0x7E, 0xCF, 0xF6, + 0xCD, 0xA9, 0xF7, 0x29, 0x38, 0x2A, 0x43, 0xB3, + 0x79, 0xCB, 0xDD, 0x43, 0xFF, 0xB1, 0x8A, 0xEA, + 0x35, 0xC1, 0xA9, 0x96, 0xCE, 0xF1, 0x48, 0x8D, + 0x3B, 0x7A, 0x81, 0xEE, 0x7C, 0xFC, 0x0B, 0x96, + 0x23, 0x41, 0x8A, 0xB3, 0x91, 0x9A, 0x6E, 0xDD, + 0xB9, 0x9F, 0x22, 0x2F, 0x0D, 0xDD, 0xB2, 0xF3, + 0x2A, 0x20, 0xC8, 0xF8, 0x4F, 0xBF, 0x4C, 0x49, + 0xB4, 0xCB, 0x3E, 0xB5, 0x0D, 0x9C, 0x4C, 0xD2, + 0x5A, 0x6F, 0x71, 0x75, 0x46, 0x70, 0x66, 0xD2, + 0x5E, 0x64, 0x37, 0xB6, 0x7F, 0x2D, 0xBC, 0x70, + 0xC2, 0xE6, 0xEB, 0x0B, 0xDE, 0x23, 0x86, 0xD0, + 0x30, 0x14, 0xA7, 0x89, 0xFB, 0x6D, 0xC0, 0x8E, + 0xE3, 0x3C, 0x0C, 0x67, 0x95, 0x1D, 0xA9, 0xD7, + 0x4B, 0x9C, 0x94, 0x84, 0x5D, 0x2A, 0x99, 0x03, + 0x7E, 0x09, 0x5F, 0xEF, 0x79, 0x19, 0x92, 0x0F, + 0xE5, 0x26, 0xEB, 0x5D, 0xD0, 0xBA, 0x1F, 0x97, + 0xDF, 0xBD, 0x2D, 0xDC, 0x31, 0x60, 0x9C, 0x1B, + 0x7B, 0x45, 0xEC, 0x3A, 0xDB, 0x58, 0x6F, 0xE3, + 0x03, 0x0A, 0x0C, 0x7A, 0x9D, 0xD0, 0x34, 0xA3, + 0xC2, 0xE6, 0xF9, 0x84, 0x90, 0x93, 0xCE, 0xE1, + 0x0A, 0x18, 0x19, 0x53, 0x54, 0x7F, 0x8B, 0xE3, + 0x28, 0x72, 0x0A, 0x4A, 0x5A, 0x82, 0x90, 0xB5, + 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, - 0x08, 0x0E, 0x12, 0x19, 0x20 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x0B, 0x10, 0x18, 0x1A, 0x21 }; #endif #ifndef WOLFSSL_NO_ML_DSA_87 static const byte pk_87[] = { - 0x2D, 0x1E, 0x6B, 0xED, 0x84, 0x52, 0xEB, 0xF1, - 0x26, 0xED, 0xE7, 0x0C, 0xA0, 0xA2, 0xB5, 0x0D, - 0x03, 0x34, 0x2D, 0x5B, 0x13, 0xB2, 0xAE, 0x21, - 0x0F, 0x45, 0x62, 0xA3, 0xBF, 0x67, 0x0C, 0xB1, - 0x5C, 0xE9, 0x25, 0xFD, 0x22, 0xF2, 0x62, 0x42, - 0xBA, 0xE3, 0x10, 0xB3, 0xAA, 0x41, 0x3B, 0x6E, - 0x78, 0xD4, 0x42, 0xD9, 0x35, 0xD1, 0x72, 0x8A, - 0x32, 0x48, 0xCC, 0x20, 0x5C, 0xCD, 0x8D, 0x3F, - 0xD8, 0x34, 0x95, 0x55, 0x20, 0xCD, 0xFB, 0x2C, - 0x73, 0xE9, 0x0E, 0x60, 0x8B, 0x2C, 0x3F, 0xA8, - 0xB7, 0xD1, 0x79, 0xFD, 0xDC, 0xC8, 0x81, 0x11, - 0xC9, 0xE8, 0x41, 0x71, 0xE9, 0x70, 0x9B, 0x53, - 0x59, 0x33, 0xE4, 0x92, 0xB6, 0x81, 0x9C, 0x6A, - 0x92, 0xED, 0xA2, 0x5A, 0xC4, 0x07, 0x77, 0x1A, - 0x8F, 0xED, 0xB4, 0xE7, 0x11, 0xFB, 0x89, 0xEB, - 0x7B, 0xDF, 0xCC, 0xEA, 0xC5, 0x3B, 0x4E, 0xF4, - 0x6B, 0x6F, 0xBE, 0xE1, 0x32, 0xA9, 0xD7, 0xAD, - 0xB4, 0x36, 0xE7, 0x4A, 0x6D, 0x67, 0x11, 0x83, - 0xAF, 0x31, 0x1A, 0x7A, 0x31, 0x42, 0x9B, 0x01, - 0x21, 0x17, 0x52, 0x75, 0x85, 0xF7, 0x92, 0x0F, - 0x34, 0x8A, 0x69, 0x11, 0x88, 0x5A, 0x02, 0x08, - 0xB6, 0x6D, 0xE3, 0x07, 0x93, 0xB1, 0x3F, 0xE1, - 0xD5, 0x7B, 0xD9, 0x51, 0xF7, 0xAA, 0xC0, 0x34, - 0x9A, 0x78, 0x5D, 0x26, 0xDB, 0xF1, 0xF0, 0xA9, - 0x1E, 0x5C, 0x9F, 0x4F, 0xA7, 0x43, 0x5C, 0x44, - 0xA9, 0x43, 0xF1, 0x38, 0x11, 0x45, 0xED, 0xEB, - 0x1C, 0x8A, 0x05, 0xEE, 0xFF, 0xAB, 0x20, 0x2C, - 0xF6, 0x2C, 0xEE, 0x77, 0x42, 0x36, 0x3E, 0xE6, - 0x9D, 0x8E, 0x45, 0x0F, 0xF6, 0x7C, 0x39, 0x62, - 0xD6, 0xFF, 0x97, 0xBC, 0x3D, 0x02, 0xD6, 0xDF, - 0x4A, 0x35, 0xDA, 0x3F, 0x89, 0xA4, 0x88, 0x33, - 0xCD, 0xF2, 0x90, 0xF0, 0xE9, 0x37, 0x2F, 0x65, - 0xA5, 0x88, 0x65, 0xFD, 0x40, 0x44, 0xAD, 0x09, - 0x09, 0x92, 0xAA, 0x15, 0x9E, 0xEE, 0xF7, 0x2B, - 0x0D, 0xA7, 0xCB, 0x3A, 0x5E, 0x0A, 0xED, 0xD6, - 0x7D, 0x82, 0x8B, 0xBA, 0xCF, 0xE5, 0x9E, 0xE4, - 0x62, 0xAB, 0x69, 0x6B, 0xBA, 0xD0, 0xE5, 0xA9, - 0xBB, 0x1F, 0x5A, 0x51, 0xE0, 0xFA, 0x5D, 0xD4, - 0x4D, 0x8E, 0xC0, 0xDC, 0x43, 0x06, 0xDF, 0x23, - 0x67, 0xB2, 0x4A, 0xA2, 0xFB, 0x75, 0x2F, 0x82, - 0xD8, 0x44, 0xE4, 0xC0, 0xCE, 0x15, 0x9E, 0x3F, - 0xD6, 0xB4, 0x70, 0x5F, 0x3B, 0xD0, 0x56, 0x3E, - 0x0A, 0x7A, 0x4B, 0x94, 0xBF, 0xBA, 0x01, 0x2B, - 0x9C, 0x8B, 0x91, 0x35, 0xF2, 0xDB, 0x4C, 0x8C, - 0x8D, 0xD6, 0xEE, 0xC8, 0x65, 0x8D, 0xF3, 0x05, - 0x59, 0xBE, 0x3A, 0x17, 0xA7, 0x72, 0x10, 0x56, - 0x14, 0xEF, 0xB8, 0xC1, 0xBE, 0x18, 0x11, 0x0B, - 0xE6, 0x70, 0xF8, 0x39, 0xA5, 0x72, 0x7D, 0xF9, - 0x47, 0xFB, 0xAC, 0xFD, 0x1F, 0xC3, 0x71, 0x33, - 0x58, 0x44, 0x15, 0xD3, 0x7C, 0x93, 0x2E, 0x70, - 0x92, 0xFA, 0xBB, 0xF2, 0xD0, 0x9D, 0x25, 0xC4, - 0xCF, 0x4A, 0xB8, 0xEC, 0xBE, 0x5D, 0x8B, 0x7F, - 0xA4, 0x7C, 0xAB, 0xAD, 0xE7, 0x1E, 0x93, 0x83, - 0x92, 0x86, 0x1E, 0x8D, 0x15, 0xA4, 0x1C, 0x5B, - 0x42, 0x25, 0xDA, 0x3D, 0x16, 0xD3, 0x93, 0xF2, - 0x85, 0x50, 0x86, 0x0A, 0x86, 0x35, 0x6B, 0x14, - 0xAB, 0x5F, 0x22, 0xD0, 0xCF, 0x03, 0x7C, 0xEB, - 0xB4, 0x0E, 0xAC, 0x87, 0xA2, 0x41, 0x42, 0xA0, - 0x21, 0x93, 0x00, 0xB6, 0x47, 0x6F, 0x96, 0xD0, - 0x41, 0xD1, 0xC3, 0x0E, 0x3C, 0x52, 0xD2, 0x45, - 0xAB, 0x6A, 0xE7, 0xA1, 0xE5, 0xFD, 0x73, 0xC5, - 0x82, 0x9D, 0x60, 0x62, 0x8B, 0x6D, 0x87, 0xFC, - 0x88, 0x9C, 0x3E, 0xEF, 0xAE, 0xAA, 0xB6, 0x1C, - 0x18, 0xEE, 0xD7, 0x51, 0x1A, 0x96, 0xC4, 0x93, - 0x25, 0x05, 0xD3, 0x83, 0x3D, 0xD8, 0x33, 0x16, - 0x14, 0x44, 0x88, 0xE2, 0xAF, 0xC4, 0xEC, 0x59, - 0x18, 0x12, 0xB9, 0x99, 0xC1, 0xC9, 0x5F, 0x31, - 0x79, 0x00, 0x03, 0xF6, 0xC9, 0x55, 0x14, 0xAA, - 0x29, 0x08, 0x78, 0x24, 0xAF, 0x1D, 0x99, 0x12, - 0x36, 0xD9, 0x4A, 0xD9, 0x50, 0xEF, 0x66, 0xFC, - 0x7F, 0xF4, 0xBC, 0x3B, 0xA0, 0xF6, 0xFD, 0xF2, - 0x62, 0xCA, 0xA5, 0x9D, 0x2B, 0x55, 0xB8, 0x33, - 0xBC, 0xA6, 0x7A, 0xA5, 0x1E, 0xE1, 0x14, 0x5F, - 0x94, 0xE2, 0xDC, 0xF0, 0x5B, 0xBD, 0x43, 0x07, - 0xD8, 0xB1, 0xE0, 0x81, 0x3F, 0x84, 0x54, 0x90, - 0xBF, 0x23, 0x59, 0x92, 0x3C, 0xA5, 0x98, 0xAB, - 0x7D, 0x99, 0xD2, 0xF0, 0xED, 0x8E, 0x0B, 0xC9, - 0x9F, 0xAF, 0xB0, 0x13, 0xED, 0xC7, 0xDD, 0xB8, - 0x61, 0x72, 0x07, 0x3D, 0xCC, 0x35, 0x73, 0xA0, - 0xCF, 0x0C, 0xD9, 0x7E, 0x93, 0xDC, 0x63, 0xB8, - 0x82, 0xEC, 0xF4, 0x30, 0xCE, 0x43, 0x92, 0xEA, - 0x5E, 0xD8, 0xC8, 0xA1, 0xEC, 0x79, 0xDC, 0xAE, - 0x64, 0xD4, 0x33, 0xEB, 0x53, 0x8C, 0xFC, 0x49, - 0x79, 0xBF, 0x7A, 0x28, 0x65, 0x1E, 0x8C, 0xD5, - 0x21, 0xB0, 0x8E, 0xCA, 0xAD, 0xF8, 0x96, 0x9A, - 0x98, 0x10, 0x00, 0x35, 0x6D, 0x58, 0x9A, 0xEF, - 0x84, 0x84, 0x86, 0x72, 0xBA, 0xCD, 0x38, 0x66, - 0x96, 0x9B, 0xC2, 0x83, 0xB0, 0x65, 0xC1, 0xAB, - 0xCF, 0x63, 0x8C, 0x2D, 0xC3, 0x42, 0xB2, 0x7D, - 0xF6, 0xB8, 0xF0, 0x3D, 0x26, 0x21, 0x8F, 0xAE, - 0x4E, 0x96, 0xF2, 0x55, 0x66, 0xBC, 0x6F, 0xED, - 0xE7, 0x19, 0xD3, 0x8D, 0xC0, 0xCD, 0x55, 0x20, - 0x5F, 0x10, 0xCA, 0xDA, 0x09, 0xED, 0x91, 0x4A, - 0x43, 0x33, 0xD3, 0x82, 0x11, 0x5C, 0x2F, 0x5D, - 0xEC, 0xCD, 0x54, 0xF9, 0x6C, 0xE4, 0xE5, 0xF2, - 0x68, 0xBC, 0xE9, 0x27, 0xB2, 0x1D, 0xCA, 0xB5, - 0xCD, 0x04, 0x01, 0x1E, 0x92, 0xF5, 0xF6, 0x01, - 0x86, 0x2B, 0x20, 0x20, 0x9B, 0xB0, 0xF9, 0x56, - 0xD9, 0x33, 0xD5, 0x0A, 0xEC, 0x1B, 0xF4, 0xCE, - 0xD2, 0xB2, 0xC2, 0xD4, 0x3F, 0x9A, 0x25, 0x76, - 0x8E, 0x29, 0x87, 0x52, 0x64, 0x86, 0x4A, 0xA5, - 0x7B, 0x5A, 0x91, 0x72, 0x6E, 0xBE, 0x6D, 0x73, - 0x0A, 0x8D, 0x89, 0x53, 0x82, 0x33, 0x70, 0x44, - 0x20, 0xBE, 0xE0, 0xB0, 0x1B, 0x76, 0x30, 0x43, - 0xA5, 0x5B, 0x8F, 0xAB, 0x7E, 0xB8, 0x61, 0x5F, - 0x43, 0x70, 0x1B, 0x1A, 0x71, 0x61, 0x56, 0xF9, - 0x13, 0x31, 0x2A, 0x64, 0x33, 0x14, 0x00, 0x98, - 0x72, 0xEC, 0x32, 0x88, 0x09, 0xFB, 0x64, 0x46, - 0x3D, 0x56, 0x02, 0xD9, 0x76, 0xD3, 0xAA, 0x90, - 0x0F, 0xBD, 0xF0, 0xF9, 0x96, 0x43, 0x7B, 0x62, - 0x19, 0x26, 0x22, 0x6A, 0x93, 0x91, 0xEC, 0x07, - 0x34, 0xF5, 0x22, 0x32, 0xB3, 0x65, 0x66, 0xE0, - 0x6B, 0x11, 0x7F, 0x97, 0x9F, 0x1A, 0x89, 0x46, - 0xCE, 0x8F, 0xBD, 0xFD, 0x2F, 0xCC, 0x3D, 0xBF, - 0xF2, 0x83, 0xA4, 0x30, 0xE1, 0x02, 0x72, 0xF8, - 0x74, 0xE6, 0x21, 0x96, 0x77, 0xE1, 0x57, 0x8A, - 0xF7, 0x9E, 0xB3, 0x31, 0xAF, 0xD8, 0xC5, 0xD7, - 0x20, 0xDC, 0xFD, 0xCF, 0x79, 0x06, 0x0F, 0x1F, - 0xE5, 0x84, 0x3D, 0x0B, 0x9C, 0xB3, 0xC7, 0xAB, - 0xB8, 0xF1, 0xC0, 0xD0, 0xB5, 0xC7, 0x01, 0xE2, - 0x0E, 0x3B, 0xAF, 0x7E, 0xAC, 0x44, 0x5A, 0x75, - 0x50, 0x0A, 0x76, 0x1C, 0x13, 0xDB, 0x25, 0xD4, - 0x0D, 0x19, 0x75, 0x4C, 0x02, 0xD9, 0xF3, 0xDF, - 0x6D, 0xBB, 0xCF, 0x47, 0xA6, 0xAE, 0xF6, 0xD1, - 0xFB, 0xF4, 0xB4, 0x55, 0xD3, 0xA5, 0x87, 0xA1, - 0x55, 0xFB, 0xBF, 0xCD, 0xF6, 0xA1, 0x64, 0x57, - 0x12, 0x75, 0x9A, 0x11, 0xA3, 0xCE, 0x42, 0x70, - 0x84, 0x54, 0x93, 0x12, 0xE1, 0x3A, 0x0F, 0xFA, - 0xCA, 0xF2, 0x25, 0x91, 0xF1, 0x4D, 0x8F, 0x84, - 0xB1, 0xB5, 0x35, 0xAC, 0xE9, 0x81, 0x77, 0x34, - 0x4D, 0x6F, 0x5D, 0x14, 0x9D, 0xB9, 0xE1, 0xF0, - 0x3F, 0x3C, 0xE7, 0xAD, 0x48, 0xE6, 0x8C, 0x51, - 0x86, 0xF4, 0x4A, 0xB4, 0xD0, 0x98, 0xEC, 0x3A, - 0x4E, 0xAB, 0x58, 0x2F, 0x08, 0x9E, 0x5A, 0x9D, - 0x45, 0x30, 0xB0, 0x85, 0xDF, 0x4A, 0xE7, 0x92, - 0xC6, 0xC8, 0x18, 0x93, 0x08, 0xCE, 0x9A, 0x8C, - 0xE2, 0x91, 0x8D, 0x91, 0x57, 0x7B, 0x37, 0xC8, - 0x80, 0xA2, 0x31, 0x10, 0x0D, 0x4E, 0xEF, 0x51, - 0x07, 0x94, 0x8E, 0xF8, 0x3C, 0x3C, 0x2E, 0xD5, - 0x03, 0x26, 0xB8, 0x72, 0x7F, 0xB9, 0xBC, 0xD7, - 0x95, 0xC4, 0x31, 0x08, 0xEC, 0x6F, 0xEE, 0x11, - 0xAF, 0xC0, 0xA2, 0xEC, 0xD7, 0xC8, 0x0B, 0xBE, - 0x15, 0xAE, 0xC9, 0x17, 0xBE, 0x37, 0xE2, 0x40, - 0x83, 0x65, 0xDE, 0xB3, 0x4E, 0xB4, 0x15, 0xB3, - 0x5C, 0x14, 0xF6, 0x5F, 0xA9, 0x1F, 0x70, 0xB5, - 0x23, 0x93, 0x78, 0xB9, 0x47, 0xF9, 0x1D, 0x2B, - 0x1E, 0x8D, 0xB1, 0x25, 0x7E, 0xE5, 0x85, 0x3C, - 0x16, 0x9F, 0xD0, 0xC2, 0x67, 0x8B, 0x0D, 0xD2, - 0x72, 0x4E, 0x74, 0x30, 0xE1, 0xAF, 0xB8, 0x66, - 0xCB, 0x53, 0xDF, 0xC4, 0xFB, 0xA5, 0x6D, 0x03, - 0xF2, 0xAE, 0xEE, 0x90, 0xFE, 0xD7, 0x30, 0xAF, - 0x33, 0x98, 0x09, 0xEB, 0x75, 0xC7, 0x3E, 0xC8, - 0x2F, 0xE7, 0x22, 0x5F, 0x2F, 0x0A, 0xBD, 0xA4, - 0x22, 0x88, 0x28, 0x19, 0x35, 0x83, 0x12, 0x86, - 0xEE, 0x72, 0xB4, 0x26, 0x89, 0x2F, 0xC7, 0x11, - 0x6E, 0xDD, 0x14, 0x98, 0x22, 0xE7, 0x73, 0x3E, - 0xFA, 0x46, 0x75, 0xF9, 0x40, 0xC1, 0x84, 0x22, - 0xBC, 0x75, 0x36, 0xC7, 0x82, 0xD3, 0xAE, 0x6E, - 0x0D, 0xBF, 0x6F, 0xC3, 0x4B, 0x67, 0x49, 0x19, - 0xF3, 0x4B, 0x12, 0xF2, 0x83, 0xFD, 0x39, 0x56, - 0x44, 0x05, 0x3A, 0x24, 0x6A, 0x35, 0x69, 0x12, - 0xCF, 0xE4, 0x93, 0xFE, 0x26, 0xCC, 0xD6, 0x01, - 0xA0, 0x4A, 0x84, 0xA8, 0x1D, 0x85, 0xE6, 0x83, - 0x0F, 0x3C, 0xE6, 0x6D, 0xD2, 0xCB, 0xB1, 0x14, - 0x8C, 0xEC, 0x10, 0xB3, 0x63, 0x4B, 0x9C, 0xF5, - 0x11, 0xE0, 0xF9, 0x86, 0x6F, 0xA7, 0xC0, 0x3B, - 0x9D, 0x25, 0xD7, 0x54, 0xCA, 0x40, 0x4D, 0x26, - 0xBA, 0x71, 0x8E, 0x25, 0xF5, 0xA7, 0xE3, 0x9B, - 0x25, 0x20, 0x7F, 0x29, 0x05, 0xB6, 0x27, 0x14, - 0x17, 0x67, 0x26, 0x10, 0xAD, 0xA3, 0x06, 0x03, - 0xFE, 0x82, 0x85, 0x5D, 0x01, 0x04, 0x4D, 0xE0, - 0x64, 0x38, 0x38, 0x5E, 0x83, 0x1E, 0x21, 0x9A, - 0x39, 0x02, 0xF8, 0xF9, 0x69, 0x85, 0x52, 0xE5, - 0xEC, 0x6A, 0xAC, 0x96, 0x86, 0xA7, 0x88, 0x69, - 0xB5, 0xB5, 0x7E, 0x03, 0x1D, 0xA9, 0x68, 0xCA, - 0x45, 0x0F, 0xF9, 0x14, 0xD6, 0x7B, 0xCF, 0x9C, - 0x03, 0x6F, 0xD1, 0xD9, 0x6F, 0x01, 0x3D, 0xF8, - 0xF3, 0x11, 0xF3, 0x29, 0x17, 0x90, 0xE8, 0x9B, - 0xED, 0x58, 0x9B, 0xF0, 0xBC, 0xC7, 0xBA, 0xF4, - 0x60, 0xC8, 0xAA, 0x30, 0xB4, 0x2F, 0x22, 0x8F, - 0xD3, 0xAC, 0x18, 0xC2, 0xB7, 0xC4, 0x7B, 0x31, - 0x9E, 0x0F, 0x7E, 0x9D, 0xBF, 0xD4, 0x63, 0xC2, - 0x8B, 0x1B, 0x58, 0x50, 0x33, 0x53, 0x6D, 0x79, - 0xBB, 0xF8, 0x0D, 0x91, 0x33, 0xD9, 0x07, 0xE7, - 0xB0, 0x81, 0xD4, 0xB4, 0x47, 0x61, 0x93, 0xF0, - 0xFB, 0x68, 0xBC, 0x1B, 0x41, 0xC2, 0xF5, 0x43, - 0x30, 0x7E, 0x76, 0xF9, 0xB1, 0xA3, 0xD6, 0xD4, - 0x26, 0xEA, 0x77, 0x75, 0x12, 0x7A, 0xC8, 0x30, - 0x9B, 0xCF, 0x45, 0xBE, 0x74, 0x7D, 0x8A, 0x8B, - 0xEC, 0xED, 0x11, 0xE6, 0xA1, 0xD1, 0xB8, 0xF1, - 0x90, 0xAD, 0x6D, 0x6A, 0xC6, 0x54, 0xE9, 0xDB, - 0xAD, 0x4C, 0x97, 0x39, 0xC8, 0xD8, 0x44, 0xA9, - 0x1A, 0x37, 0x16, 0x7E, 0x68, 0x45, 0x0C, 0xBB, - 0x10, 0xF4, 0xAE, 0x8E, 0x2B, 0x69, 0xFA, 0x95, - 0x3E, 0xA5, 0xC9, 0x91, 0xD3, 0xF1, 0xA3, 0x89, - 0x3F, 0x90, 0x86, 0x93, 0x1B, 0xF1, 0xA0, 0x89, - 0xC7, 0xF2, 0x23, 0x57, 0xD4, 0x8E, 0x2F, 0xD5, - 0x71, 0xCD, 0x36, 0xF1, 0x90, 0xB3, 0x98, 0x3E, - 0x19, 0xEA, 0xC8, 0x0F, 0x12, 0x9D, 0xBF, 0x58, - 0xED, 0xDC, 0x6B, 0x9A, 0x79, 0x84, 0xFC, 0xF0, - 0x4C, 0xC3, 0xB4, 0x0D, 0xB8, 0x7A, 0x8D, 0xAD, - 0x75, 0x40, 0xD5, 0xD5, 0xDE, 0xC8, 0xCA, 0x39, - 0x3E, 0x45, 0xE4, 0xBC, 0xF4, 0x33, 0xEA, 0x64, - 0xE1, 0x5E, 0x94, 0x42, 0x91, 0xAB, 0xBC, 0x42, - 0x2A, 0xB3, 0xD0, 0x60, 0x23, 0xCE, 0x57, 0x8E, - 0xFF, 0xAD, 0xA2, 0x2B, 0x64, 0xD9, 0x94, 0xA0, - 0x80, 0x0F, 0x8E, 0x50, 0x17, 0x08, 0x1D, 0x16, - 0xCF, 0x51, 0xD0, 0xB9, 0x28, 0xB6, 0x59, 0xEF, - 0x78, 0xCC, 0xC9, 0x96, 0xF9, 0xCA, 0x87, 0x7A, - 0xEE, 0xD9, 0x15, 0x5E, 0xDF, 0x5D, 0xBC, 0xC2, - 0x58, 0xE6, 0x04, 0xEE, 0x17, 0xDC, 0xB3, 0xF9, - 0x90, 0xF9, 0x88, 0x32, 0x9E, 0xA1, 0xDB, 0x1C, - 0x38, 0x56, 0x53, 0x90, 0x30, 0x69, 0x2E, 0x52, - 0x00, 0x2C, 0xF3, 0x0F, 0xD5, 0x80, 0x2E, 0x02, - 0x5B, 0x99, 0xBF, 0xCD, 0x11, 0x12, 0x64, 0x5B, - 0x56, 0xC6, 0x0A, 0xE6, 0x38, 0xE7, 0x4D, 0x21, - 0xE5, 0x98, 0x78, 0x9D, 0xE6, 0xCB, 0x60, 0xB4, - 0x2E, 0xE4, 0x98, 0x56, 0xCB, 0xAD, 0xE6, 0xDD, - 0x53, 0xF4, 0xC5, 0x67, 0xA2, 0x9F, 0xA0, 0x5C, - 0x7C, 0xFB, 0x24, 0x5A, 0xA7, 0x72, 0xD0, 0xE7, - 0x63, 0xF2, 0x5D, 0xBF, 0xD8, 0xE9, 0xF1, 0x6B, - 0xB4, 0x29, 0xA6, 0x28, 0xE6, 0x93, 0xD3, 0x87, - 0xB6, 0xD9, 0x3C, 0x39, 0x8D, 0xEA, 0x28, 0xC0, - 0x96, 0x3D, 0xF5, 0xC2, 0x3C, 0x29, 0xF2, 0x80, - 0x21, 0x8A, 0x03, 0x9D, 0x64, 0xF8, 0xBA, 0x81, - 0xC1, 0xDD, 0xA2, 0x88, 0x2A, 0x84, 0x2E, 0x3C, - 0xB5, 0x03, 0x95, 0xED, 0xAA, 0x6E, 0xE2, 0x6F, - 0x5E, 0x99, 0x3C, 0x63, 0xEE, 0xB8, 0x4F, 0x66, - 0x32, 0x77, 0x42, 0x23, 0x36, 0x29, 0x89, 0xB0, - 0xED, 0x5F, 0xF2, 0x5A, 0x65, 0x66, 0x3F, 0xD2, - 0x8B, 0x48, 0x68, 0x65, 0xDC, 0xE0, 0xB0, 0xC2, - 0x72, 0x73, 0xF1, 0xA4, 0xC6, 0x56, 0x2C, 0x5D, - 0xD8, 0xC6, 0x5C, 0x41, 0xCE, 0x30, 0x89, 0x59, - 0xA9, 0xD6, 0x45, 0x96, 0xD0, 0x8E, 0x7B, 0x25, - 0xE0, 0x13, 0xFB, 0xFE, 0x7C, 0xEA, 0xF3, 0x67, - 0x0D, 0xB2, 0x9A, 0x21, 0x3C, 0xCE, 0x99, 0x75, - 0xA9, 0x13, 0xCE, 0xF4, 0x23, 0x6E, 0x64, 0x00, - 0x30, 0x87, 0x70, 0x9C, 0xAD, 0x61, 0x81, 0x71, - 0x0E, 0x95, 0x19, 0x26, 0xCA, 0x55, 0x29, 0x71, - 0x99, 0xA6, 0x08, 0xAE, 0x54, 0x58, 0x75, 0xCD, - 0xC3, 0x8F, 0xE3, 0x83, 0xC1, 0x45, 0x62, 0xB4, - 0x8D, 0xCA, 0x66, 0x02, 0xEA, 0x34, 0x05, 0x5D, - 0x98, 0x3F, 0x38, 0xE6, 0x1C, 0xCE, 0x53, 0x1A, - 0xD9, 0x3F, 0x58, 0xEC, 0x16, 0x28, 0x45, 0xF5, - 0x38, 0xCE, 0x48, 0x43, 0x87, 0x1D, 0x3C, 0x4A, - 0xDF, 0x05, 0xF3, 0x5E, 0x29, 0x7E, 0xA6, 0x2E, - 0xFC, 0xDD, 0x5E, 0xF9, 0x40, 0x1B, 0xA0, 0x42, - 0xA2, 0x35, 0x15, 0x0A, 0x09, 0xD9, 0x47, 0x4A, - 0x3F, 0xB0, 0x3A, 0xAA, 0x19, 0xE7, 0xE3, 0x7A, - 0x22, 0x8D, 0x5F, 0x5B, 0x07, 0x41, 0x4C, 0x3D, - 0xA2, 0xAD, 0x2E, 0x5C, 0x75, 0xEC, 0xF0, 0x4C, - 0x11, 0x2B, 0x90, 0x76, 0x9E, 0x19, 0x96, 0x0E, - 0x97, 0x5E, 0x8D, 0x19, 0x17, 0xB3, 0xBF, 0xDA, - 0x84, 0xFD, 0xC6, 0xD2, 0x32, 0x6F, 0xB8, 0xA3, - 0xB0, 0x0F, 0x95, 0xD9, 0xC5, 0x26, 0x50, 0x11, - 0x15, 0x72, 0xBE, 0xC2, 0x1B, 0x12, 0x12, 0x7C, - 0xA5, 0x70, 0xD8, 0xA9, 0x8A, 0xB9, 0x77, 0xEB, - 0xD8, 0xD7, 0x9A, 0x59, 0x37, 0x5E, 0xE1, 0x4F, - 0x64, 0xB5, 0xB0, 0x4F, 0xD9, 0x69, 0xFE, 0xB0, - 0x3D, 0x0A, 0xF7, 0x34, 0x89, 0xE3, 0xBA, 0xEF, - 0xE7, 0xC7, 0xBC, 0x8D, 0xC7, 0xE8, 0x54, 0x83, - 0xEE, 0x62, 0xF0, 0x23, 0x98, 0x58, 0x0F, 0x83, - 0xB9, 0x6D, 0xD8, 0x44, 0x77, 0xB9, 0xC4, 0x8F, - 0x0B, 0xB3, 0x9F, 0x54, 0x06, 0xA3, 0x70, 0x36, - 0xD6, 0xF3, 0x6E, 0x2B, 0x1B, 0x6B, 0x53, 0xFE, - 0x6F, 0xF6, 0x1C, 0x32, 0x7B, 0x29, 0xD4, 0xE0, - 0x5D, 0xD2, 0xB8, 0x11, 0x74, 0xC6, 0x0B, 0x59, - 0xC7, 0x9C, 0xB1, 0x97, 0x6B, 0xC0, 0x6E, 0x7A, - 0xC3, 0x4D, 0xF3, 0xE3, 0x8F, 0x7D, 0x2C, 0x1C, - 0x0E, 0x31, 0x51, 0xB7, 0x14, 0x7A, 0xB8, 0x31, - 0x77, 0x47, 0x70, 0x14, 0x3B, 0x92, 0x7B, 0x5F, - 0xEC, 0x5D, 0xF7, 0x76, 0xC1, 0xD7, 0x2D, 0xB6, - 0xBC, 0x99, 0x81, 0xD6, 0x58, 0x67, 0x71, 0x3C, - 0xF2, 0x97, 0xC8, 0xB0, 0xF1, 0xE9, 0x8D, 0x0E, - 0x16, 0xF0, 0xCC, 0x22, 0x7A, 0x39, 0xE4, 0x7E, - 0x50, 0xBA, 0x01, 0x16, 0x15, 0x6D, 0x5B, 0x54, - 0x67, 0x53, 0x66, 0x04, 0xBE, 0x05, 0xCC, 0x2E, - 0xF4, 0x0A, 0xBC, 0xE8, 0x52, 0xF1, 0x5D, 0xFA, - 0x2C, 0xAC, 0xF8, 0x6A, 0x78, 0x9E, 0x5B, 0x7B, - 0x0E, 0x5B, 0xB4, 0xB7, 0x77, 0xCD, 0x7C, 0xC9, - 0xF6, 0x54, 0x77, 0x9B, 0x10, 0x2F, 0x78, 0xB5, - 0xAA, 0x4B, 0x94, 0xC3, 0xB4, 0xFD, 0xE5, 0x5F, - 0xA7, 0xF7, 0xBF, 0x54, 0xAC, 0x22, 0x5E, 0x1F, - 0x26, 0x16, 0x5B, 0x65, 0xF1, 0x6D, 0x03, 0x21, - 0x66, 0x9F, 0xD9, 0xF6, 0xE4, 0x7F, 0xCA, 0x1D, - 0xD3, 0x47, 0x09, 0x6D, 0xF5, 0xDD, 0xA8, 0x64, - 0x66, 0xA5, 0x7C, 0x5B, 0x06, 0x8D, 0x9C, 0x67, - 0xB7, 0x32, 0x03, 0x66, 0xEA, 0x19, 0xC8, 0x99, - 0x3F, 0xF9, 0x0B, 0xD8, 0xFB, 0x06, 0x93, 0xFB, - 0xA3, 0x70, 0xE6, 0x6D, 0x2B, 0x20, 0x3B, 0x99, - 0x70, 0x11, 0xB0, 0xD1, 0x5B, 0x94, 0xE2, 0x8B, - 0xAA, 0x2E, 0xBF, 0x01, 0x77, 0x4F, 0x7A, 0xE7, - 0x8F, 0x84, 0xED, 0xBD, 0xAD, 0x9F, 0x65, 0xA4, - 0x50, 0x42, 0x7A, 0x47, 0x74, 0xC6, 0x0C, 0xC8, - 0x9A, 0x02, 0x0B, 0x37, 0xDA, 0x21, 0xC7, 0x91, - 0xDA, 0xC8, 0xF7, 0xA7, 0x45, 0x7E, 0x30, 0xD0, - 0x8B, 0x01, 0x37, 0x51, 0x60, 0x03, 0x9C, 0x30, - 0x1B, 0x60, 0x51, 0xA9, 0x65, 0xE8, 0xA7, 0xCC, - 0xA2, 0xAE, 0xF9, 0x3B, 0xD5, 0x2F, 0x82, 0xC0, - 0x20, 0xBE, 0xCE, 0x90, 0xA1, 0x29, 0x02, 0x4E, - 0xFE, 0xA4, 0xB2, 0xFA, 0x21, 0x27, 0x0F, 0x8E, - 0xB5, 0xED, 0x6A, 0xAA, 0xE5, 0x59, 0x29, 0xAA, - 0xC5, 0x99, 0xA5, 0x77, 0x97, 0x29, 0x57, 0x66, - 0x0C, 0xC4, 0x7A, 0xC4, 0xE3, 0xCE, 0x77, 0x2B, - 0xBF, 0x10, 0x05, 0x2D, 0xE7, 0xED, 0xB1, 0xB8, - 0xA4, 0x49, 0x41, 0xF8, 0x84, 0xC9, 0xF8, 0xBE, - 0x13, 0x17, 0x46, 0x69, 0x94, 0x56, 0x29, 0xF4, - 0x6D, 0xE2, 0x46, 0x74, 0x44, 0xF3, 0x10, 0x6A, - 0x73, 0xFA, 0x27, 0x9C, 0xF0, 0x2A, 0x80, 0x0A, - 0x04, 0x7E, 0x20, 0xBD, 0x4D, 0x82, 0x0B, 0x38, - 0x9C, 0x3B, 0xB6, 0xA8, 0x68, 0xA5, 0x38, 0x4C, - 0xF5, 0x72, 0x4C, 0x20, 0x4C, 0xEF, 0xB1, 0xA6, - 0xA1, 0xBE, 0xB9, 0x72, 0x3E, 0x36, 0xDD, 0xDD, - 0xD9, 0xC7, 0x07, 0xC8, 0xF6, 0x3E, 0x8B, 0xC2, - 0x66, 0x83, 0xCC, 0x8B, 0x43, 0xC7, 0xDF, 0xDA, - 0xA4, 0x08, 0xAC, 0x4D, 0xD2, 0xBA, 0x9A, 0xEC, - 0xBC, 0x3B, 0x6D, 0xDA, 0xED, 0xCE, 0x09, 0x4A, - 0xAB, 0x58, 0xFF, 0x73, 0x2B, 0x19, 0x66, 0x38, - 0xD8, 0xB8, 0xEF, 0xC4, 0x28, 0xBB, 0xA9, 0x61, - 0x57, 0x93, 0xC4, 0xDD, 0x9F, 0x00, 0xF9, 0x0D, - 0x62, 0xC6, 0x76, 0xD1, 0x27, 0xA0, 0xE1, 0x8C, - 0x14, 0xC6, 0xEE, 0x9C, 0x99, 0x05, 0x10, 0xB0, - 0x54, 0xAD, 0xB4, 0xB4, 0x17, 0x0A, 0xC7, 0x12, - 0x7F, 0x93, 0x17, 0x5C, 0x1E, 0xB2, 0x25, 0x12 + 0x59, 0xB2, 0x37, 0x1F, 0xE7, 0xBA, 0xCC, 0x20, + 0x7F, 0xE1, 0xFE, 0xE8, 0x8A, 0x8B, 0x38, 0x05, + 0xA7, 0x05, 0x28, 0x65, 0x69, 0x17, 0x89, 0xBB, + 0x90, 0x54, 0x2F, 0xA4, 0x7F, 0x7E, 0xF2, 0xB7, + 0x5F, 0xCA, 0x13, 0xDB, 0xA5, 0x88, 0x8B, 0xEC, + 0x32, 0x05, 0x14, 0xDC, 0xB0, 0x5F, 0xD2, 0x6E, + 0xB5, 0x54, 0x1F, 0x6E, 0x57, 0x2E, 0xCE, 0xA6, + 0xC4, 0xF1, 0xD3, 0x8A, 0xA7, 0x02, 0x59, 0x09, + 0x4A, 0xA9, 0x45, 0xF1, 0x9F, 0xED, 0x0D, 0x98, + 0x0E, 0x65, 0xDB, 0xF6, 0x5D, 0xB8, 0x0F, 0x56, + 0x4F, 0xE2, 0x9D, 0x83, 0x6C, 0x54, 0x79, 0x28, + 0x8B, 0x55, 0xCF, 0x07, 0xF4, 0xE0, 0x01, 0x59, + 0xB6, 0x95, 0x5D, 0xAB, 0xDE, 0xCC, 0x8C, 0x4D, + 0x66, 0xAE, 0x68, 0x87, 0x28, 0xBA, 0x6D, 0x5C, + 0x04, 0x42, 0xF3, 0xC1, 0x23, 0x2C, 0x78, 0x2C, + 0x46, 0x5B, 0x9B, 0x7C, 0x50, 0x14, 0xB1, 0x46, + 0x40, 0x65, 0xCC, 0xD8, 0xA5, 0x6D, 0x6B, 0x1C, + 0x16, 0x51, 0x08, 0x69, 0xE0, 0x14, 0xE6, 0x93, + 0x39, 0x98, 0xEF, 0x72, 0x55, 0x20, 0xB4, 0x00, + 0x91, 0x3D, 0x93, 0xB0, 0xEC, 0x75, 0xE2, 0xFB, + 0x72, 0x5D, 0xC1, 0xAE, 0xC0, 0xC0, 0xCC, 0x73, + 0x43, 0xB9, 0xE5, 0x44, 0xBA, 0xA4, 0xD6, 0x79, + 0x86, 0x0E, 0x34, 0x7B, 0x2E, 0x94, 0x7D, 0x8D, + 0x24, 0x36, 0xF0, 0x92, 0x98, 0xA7, 0xBB, 0x83, + 0x36, 0xB9, 0xDE, 0x9C, 0xFD, 0x5C, 0xDB, 0xCD, + 0x91, 0xC7, 0x24, 0x92, 0x68, 0xCA, 0x03, 0xEF, + 0xAC, 0x27, 0x3A, 0xF5, 0x29, 0x68, 0xD5, 0x01, + 0x40, 0x6C, 0xD9, 0xC9, 0x61, 0x59, 0xD7, 0xC1, + 0x5A, 0xA2, 0x90, 0x03, 0x30, 0xC1, 0x18, 0x9C, + 0xFC, 0x2C, 0xD8, 0xB9, 0x12, 0xC4, 0x80, 0xE4, + 0x58, 0x29, 0x7E, 0xF1, 0x4D, 0xB6, 0x94, 0xA3, + 0xF1, 0xE7, 0x2C, 0x1D, 0xFA, 0x3A, 0x3D, 0x2A, + 0x8A, 0x69, 0xE0, 0x11, 0x60, 0x2B, 0x93, 0x02, + 0x0B, 0xAC, 0xD1, 0xC2, 0xF3, 0xAD, 0x06, 0xC9, + 0x5A, 0x7F, 0x36, 0xEB, 0xF5, 0x26, 0x1F, 0x6E, + 0xC1, 0x06, 0x81, 0x6B, 0xB3, 0x30, 0x3C, 0xC0, + 0x0B, 0xF4, 0xE8, 0x68, 0x8D, 0x2E, 0x85, 0x48, + 0xF1, 0x04, 0x90, 0xD9, 0xEB, 0x23, 0xC5, 0x67, + 0x93, 0xB3, 0x4B, 0x84, 0x06, 0xCB, 0xE4, 0x43, + 0xD8, 0x35, 0x6B, 0xCD, 0x0F, 0x4F, 0x61, 0xD0, + 0xD0, 0x17, 0xD5, 0x48, 0x31, 0xB9, 0xBA, 0x32, + 0x9F, 0x89, 0x48, 0xF2, 0x5C, 0x31, 0x22, 0xF9, + 0xDE, 0xDE, 0x8C, 0xEC, 0xBA, 0x51, 0x56, 0x9E, + 0xDF, 0xFF, 0x89, 0x5F, 0xA0, 0x20, 0x86, 0x2C, + 0x5D, 0xF7, 0x9F, 0x86, 0x40, 0x78, 0x48, 0x6B, + 0x5F, 0xB2, 0x28, 0xFD, 0x78, 0x9C, 0x35, 0xFD, + 0xE1, 0xC5, 0x4B, 0xFF, 0xBF, 0x4A, 0x02, 0x5A, + 0x7F, 0xE7, 0xD8, 0xC3, 0x49, 0x0A, 0x5D, 0x4E, + 0x62, 0xD0, 0x4F, 0x79, 0xF4, 0x18, 0x3C, 0xA6, + 0x83, 0x79, 0xF4, 0x64, 0x8B, 0xD5, 0xB2, 0x41, + 0x6D, 0xBE, 0x5B, 0x84, 0x5C, 0x9F, 0x4B, 0x7A, + 0x7E, 0x23, 0x39, 0xC0, 0x50, 0x6D, 0x58, 0x53, + 0x9E, 0xAE, 0xA9, 0x45, 0x1C, 0x9B, 0x2F, 0xE2, + 0xA1, 0x8C, 0x84, 0x9D, 0xCA, 0x7E, 0xED, 0x9D, + 0xAC, 0xC0, 0x58, 0xD0, 0x05, 0xFB, 0x73, 0x75, + 0xC4, 0xEF, 0x45, 0xB0, 0x01, 0x54, 0x3F, 0xC6, + 0x8E, 0x47, 0xDD, 0xB6, 0xD1, 0x4F, 0xF9, 0x37, + 0xD1, 0xAA, 0x0D, 0x4D, 0x74, 0x89, 0xDF, 0xFA, + 0x62, 0x10, 0x67, 0x9C, 0xCC, 0xEC, 0xF9, 0xB8, + 0x55, 0x1D, 0xCF, 0x68, 0x2D, 0x2A, 0xF1, 0xE5, + 0xBD, 0x86, 0x9F, 0x3E, 0x8D, 0x40, 0x0D, 0x5C, + 0x86, 0x1A, 0xE5, 0x1F, 0xE7, 0xEB, 0xBB, 0x54, + 0x57, 0xF2, 0xEA, 0xAF, 0xD0, 0x93, 0xA9, 0x59, + 0x8E, 0xC7, 0x21, 0xC6, 0x93, 0x27, 0xC5, 0x19, + 0x30, 0xF4, 0xB9, 0xFF, 0xB2, 0xAA, 0x7F, 0x1A, + 0x28, 0x43, 0x6B, 0x6D, 0x80, 0x8D, 0x75, 0x39, + 0x2B, 0xC4, 0x3C, 0x1B, 0x5B, 0x85, 0x9C, 0x66, + 0xC5, 0x4F, 0xA5, 0x15, 0xC7, 0xA6, 0x15, 0xA6, + 0x9E, 0x60, 0x92, 0x14, 0x34, 0xAA, 0x9C, 0xF9, + 0xF9, 0xE0, 0x3C, 0x3C, 0xA3, 0x5B, 0x5E, 0xBC, + 0x6A, 0x40, 0x9E, 0x82, 0x2F, 0xE7, 0x6E, 0x09, + 0x24, 0xC6, 0xC0, 0x62, 0xF1, 0x72, 0x4C, 0x38, + 0x2F, 0xF3, 0xC8, 0xAC, 0xB5, 0xC1, 0x66, 0x6C, + 0x2E, 0xC2, 0x6B, 0x76, 0x28, 0xE3, 0xD7, 0xC1, + 0x3D, 0xA8, 0xD7, 0x58, 0x89, 0x0E, 0x6C, 0xC0, + 0x17, 0xB7, 0x89, 0x25, 0x82, 0xE9, 0x5E, 0xDD, + 0x04, 0xBA, 0x93, 0x45, 0xDF, 0x70, 0xFA, 0xD5, + 0x6E, 0xA6, 0x8B, 0xF8, 0x87, 0x5B, 0x93, 0x2C, + 0x28, 0xB3, 0x28, 0x07, 0xC8, 0x63, 0x71, 0xE1, + 0x7D, 0xCC, 0x04, 0x72, 0x5C, 0xB5, 0x97, 0xB5, + 0x24, 0x46, 0x79, 0x63, 0xE1, 0xD4, 0xA6, 0x1B, + 0x5F, 0xBF, 0x9E, 0xC5, 0x04, 0xD5, 0xDD, 0xB6, + 0x17, 0x93, 0xDD, 0x4E, 0x34, 0xAE, 0x08, 0x2A, + 0x59, 0x90, 0xEF, 0xCE, 0x80, 0x1E, 0x93, 0x8C, + 0xCA, 0xE7, 0x38, 0xE0, 0x2E, 0x90, 0x59, 0x9D, + 0x97, 0x1C, 0x2D, 0x7C, 0x64, 0xE5, 0xB6, 0xF8, + 0x63, 0x9F, 0x75, 0x8E, 0xD6, 0x21, 0xC1, 0xF2, + 0x10, 0x73, 0xC0, 0x3E, 0xDB, 0x78, 0x2C, 0x7A, + 0x0F, 0x5D, 0x7C, 0x66, 0xF5, 0xCE, 0x16, 0x1D, + 0xED, 0x55, 0xB3, 0xE9, 0x2D, 0xC2, 0x71, 0x83, + 0xAB, 0x08, 0x3D, 0xBC, 0x1F, 0x39, 0x30, 0xAE, + 0x56, 0xED, 0xB8, 0xC5, 0x3E, 0x9A, 0x7E, 0x02, + 0x0F, 0xFF, 0x0C, 0x40, 0x42, 0xF5, 0x18, 0xB2, + 0x6F, 0x39, 0x0C, 0x96, 0xC8, 0x18, 0x3B, 0x79, + 0xB5, 0x3C, 0x7C, 0x7B, 0xC5, 0x15, 0x18, 0x7B, + 0x3D, 0xE8, 0xCA, 0xB0, 0x87, 0x69, 0xC5, 0xDD, + 0x6F, 0xF5, 0x49, 0x21, 0x12, 0xE8, 0xB0, 0xF2, + 0x8D, 0x09, 0xF4, 0x06, 0x7A, 0xDB, 0x04, 0x19, + 0x4F, 0x60, 0x25, 0x0E, 0x75, 0xAD, 0xE3, 0x31, + 0xA5, 0xC2, 0x55, 0x93, 0xBC, 0xD9, 0x2A, 0x6D, + 0x13, 0x50, 0x43, 0x95, 0x85, 0x86, 0x0B, 0xB6, + 0xFE, 0xED, 0xBD, 0x2F, 0x83, 0x9F, 0x31, 0x7A, + 0x01, 0x35, 0x88, 0x76, 0xC8, 0x8E, 0x89, 0x8A, + 0xC0, 0xC8, 0x53, 0x78, 0xF5, 0x72, 0xF2, 0x3C, + 0xDE, 0x93, 0x1D, 0x47, 0xDE, 0x71, 0xD3, 0x35, + 0x3D, 0xAB, 0x1F, 0x81, 0x0A, 0x61, 0xB1, 0x8D, + 0x24, 0xCD, 0x83, 0xDD, 0xAB, 0x8D, 0x53, 0xBA, + 0x9C, 0x7B, 0x82, 0x74, 0xB0, 0xFE, 0x82, 0xAF, + 0xF3, 0x0C, 0x57, 0x07, 0x2F, 0x64, 0x37, 0x87, + 0xCA, 0x1D, 0xF0, 0x3B, 0x99, 0xEB, 0x57, 0xDB, + 0xDA, 0x8C, 0x8E, 0xE8, 0xEB, 0x20, 0x1F, 0x28, + 0x47, 0xCB, 0xC9, 0xD3, 0x4F, 0xD8, 0x0C, 0xE6, + 0xBC, 0x5E, 0x1E, 0x32, 0x8E, 0xB6, 0xEF, 0xC8, + 0x3C, 0x4B, 0xD9, 0xD5, 0x2F, 0x32, 0x4E, 0x30, + 0xEE, 0x4B, 0x5E, 0x86, 0x35, 0x1E, 0x5C, 0x8C, + 0x4C, 0x54, 0x56, 0x83, 0x6D, 0x5A, 0x45, 0x22, + 0x03, 0xB3, 0xC3, 0x72, 0xC7, 0x87, 0xAE, 0x33, + 0x32, 0xC8, 0xA5, 0xE9, 0xDC, 0x21, 0x97, 0xD9, + 0xC3, 0x41, 0xB9, 0x75, 0x6B, 0xB1, 0xE6, 0x3C, + 0x75, 0xBB, 0xD5, 0xCF, 0x3E, 0x5C, 0xD4, 0xBF, + 0x47, 0xBD, 0x1F, 0xEB, 0xC3, 0xE3, 0x71, 0x09, + 0x12, 0xD6, 0x30, 0x32, 0xF6, 0xB9, 0x7D, 0xC1, + 0x9C, 0x4D, 0xE1, 0x96, 0xAC, 0xD9, 0x15, 0x77, + 0x15, 0xE2, 0xC1, 0x4E, 0x05, 0x4A, 0x93, 0x17, + 0xBF, 0x96, 0xA6, 0x84, 0xBB, 0x96, 0xCE, 0xFB, + 0x7D, 0x8F, 0xDC, 0xA8, 0xAA, 0x47, 0x7A, 0x2A, + 0xF6, 0xF7, 0x26, 0xD2, 0xCA, 0xC1, 0xA6, 0x03, + 0xCF, 0x13, 0x60, 0xEC, 0x11, 0xCA, 0x89, 0x7E, + 0x5B, 0xC7, 0x35, 0xAB, 0x69, 0xB8, 0x64, 0x7F, + 0x30, 0xCE, 0xD4, 0x94, 0x7B, 0xA9, 0xF6, 0x35, + 0xD9, 0xCB, 0x2D, 0x82, 0xA6, 0x62, 0xFF, 0x17, + 0xA0, 0xE1, 0x2D, 0x4D, 0x06, 0xD6, 0x41, 0xEE, + 0x76, 0xEB, 0x8B, 0x45, 0xC7, 0x1E, 0xDE, 0x38, + 0xC9, 0x05, 0xC5, 0x2B, 0xE7, 0x6C, 0x61, 0x09, + 0xF2, 0x61, 0x2F, 0xEE, 0x6C, 0x31, 0x94, 0x46, + 0x5C, 0x19, 0xBA, 0x5D, 0x3E, 0xBC, 0xF1, 0xF0, + 0xB5, 0xE5, 0x34, 0xE0, 0xF0, 0xF1, 0xD3, 0x1C, + 0xB1, 0xE7, 0xA3, 0x6C, 0x43, 0x03, 0xF2, 0x83, + 0xDB, 0xA8, 0x59, 0x1C, 0xC6, 0x09, 0x31, 0x1A, + 0x80, 0x9E, 0x44, 0x4E, 0x33, 0xA8, 0x93, 0x88, + 0x0C, 0xDB, 0xAE, 0x29, 0x11, 0x91, 0x46, 0xA3, + 0x68, 0xE4, 0xD2, 0xED, 0xD9, 0x1F, 0xE4, 0x71, + 0x64, 0x7F, 0xFE, 0x82, 0x1A, 0xA6, 0xD3, 0x1C, + 0x9F, 0xA4, 0x96, 0x95, 0xEB, 0x99, 0x41, 0xB0, + 0x8F, 0x7B, 0xE3, 0xF0, 0x6C, 0xDD, 0xF2, 0x73, + 0x9B, 0x8C, 0xAD, 0x2A, 0xB0, 0xDA, 0x4F, 0x5A, + 0x3C, 0x0A, 0x26, 0xDF, 0x6A, 0x17, 0xB1, 0x37, + 0xCA, 0xAB, 0x3B, 0x91, 0x9A, 0xB6, 0x36, 0xD6, + 0xC8, 0x9B, 0xED, 0xA3, 0x05, 0x88, 0x98, 0x62, + 0x87, 0x21, 0xF2, 0x77, 0x03, 0x15, 0xFE, 0xEE, + 0x88, 0x15, 0x95, 0xE2, 0x4C, 0xF4, 0x8B, 0x44, + 0x16, 0x60, 0xD0, 0xB2, 0xE9, 0xD5, 0xB9, 0x09, + 0x28, 0xC3, 0x81, 0xF2, 0xB0, 0xFA, 0x26, 0x34, + 0x2E, 0x4C, 0x9B, 0x88, 0xC0, 0x88, 0x7A, 0x46, + 0x87, 0x12, 0x4C, 0x01, 0x2D, 0x96, 0x9E, 0x1A, + 0xFD, 0x85, 0x32, 0x75, 0x4B, 0xA1, 0x21, 0x25, + 0xE9, 0x43, 0x3D, 0xCF, 0x6D, 0x7B, 0xC1, 0xA3, + 0x6A, 0x83, 0xE6, 0xA1, 0x0B, 0xA1, 0xCB, 0x76, + 0x52, 0xA8, 0x13, 0x50, 0x89, 0x9C, 0x2D, 0xFC, + 0x6E, 0x4F, 0xED, 0x38, 0xD0, 0x09, 0xE6, 0xD0, + 0xF1, 0xD4, 0x4C, 0xCC, 0xB9, 0x5E, 0x55, 0x1B, + 0x3A, 0xD5, 0x4B, 0x3A, 0xC8, 0x1E, 0x8B, 0xA4, + 0x66, 0x5E, 0xA4, 0x28, 0xB3, 0xC8, 0x61, 0xE8, + 0x67, 0x78, 0x90, 0xCF, 0x5F, 0x62, 0x5C, 0x19, + 0xA7, 0xC5, 0x94, 0x3A, 0x94, 0x01, 0xCB, 0x78, + 0xE7, 0x02, 0x6B, 0xAE, 0x92, 0xB6, 0x0A, 0x8B, + 0x68, 0x07, 0xC1, 0x77, 0x45, 0x41, 0x5C, 0xD8, + 0xE0, 0x30, 0xC6, 0x4C, 0x56, 0xE8, 0x22, 0x13, + 0x9A, 0x35, 0xDA, 0x42, 0x3F, 0x26, 0x43, 0x36, + 0xE0, 0xAF, 0xDF, 0x16, 0x74, 0x30, 0xDD, 0x36, + 0xE0, 0x06, 0x4B, 0x2F, 0x6E, 0x8D, 0x8B, 0xB6, + 0xBE, 0x99, 0xC5, 0xA9, 0xFB, 0x55, 0x1C, 0xC6, + 0x3E, 0x50, 0x8D, 0xB6, 0x36, 0x66, 0x7D, 0xDA, + 0x53, 0xF6, 0x11, 0xF0, 0x2F, 0xCD, 0x1F, 0x99, + 0x41, 0x0F, 0x1A, 0x7A, 0x82, 0x88, 0x2F, 0x96, + 0x23, 0xAD, 0xDC, 0x50, 0xEB, 0x01, 0xE1, 0xF3, + 0x99, 0x78, 0xBF, 0x68, 0x50, 0x6C, 0x71, 0xDB, + 0xBE, 0xE4, 0x2E, 0x4A, 0x80, 0x06, 0x9B, 0x0E, + 0x4C, 0x7F, 0xC4, 0xCC, 0x14, 0x71, 0xF4, 0xF1, + 0x02, 0x8D, 0xB2, 0x5C, 0x46, 0x87, 0xB6, 0x0D, + 0xF4, 0x25, 0x5D, 0xEC, 0x91, 0x48, 0x19, 0x7A, + 0x74, 0x79, 0x6E, 0xC7, 0x60, 0xA6, 0x6A, 0xFC, + 0x78, 0x84, 0x03, 0x86, 0x51, 0x92, 0x09, 0x73, + 0xA6, 0x9C, 0x20, 0x35, 0x16, 0x22, 0x26, 0x32, + 0xEC, 0x58, 0x75, 0xEA, 0x6D, 0x83, 0x80, 0x96, + 0xE7, 0xFE, 0x9B, 0x5B, 0x4F, 0xB6, 0x9C, 0x5E, + 0x94, 0x07, 0xE7, 0x0D, 0x27, 0xFA, 0x34, 0xB0, + 0xCD, 0xBD, 0x6E, 0x11, 0x9D, 0x87, 0xCE, 0x38, + 0x58, 0x1D, 0xF1, 0xD3, 0xE0, 0xDF, 0x3A, 0xE0, + 0x29, 0x04, 0x2A, 0x3B, 0x20, 0xE9, 0x23, 0xEB, + 0xCE, 0x19, 0xA4, 0x95, 0x87, 0x55, 0xEE, 0x2F, + 0x98, 0xFD, 0x23, 0x4C, 0x44, 0x13, 0xE2, 0xDB, + 0xC9, 0x35, 0x59, 0xA4, 0x28, 0xDC, 0x37, 0xF2, + 0xD1, 0x23, 0x5B, 0xD4, 0x41, 0x9B, 0x09, 0x9E, + 0x0F, 0x0D, 0xE5, 0x42, 0xC4, 0x69, 0x35, 0x99, + 0x1B, 0xE0, 0x69, 0x2A, 0x6D, 0x80, 0xB8, 0xFD, + 0x98, 0x86, 0xE0, 0xFA, 0x17, 0x69, 0xB4, 0x9E, + 0x8A, 0xE6, 0x30, 0x7C, 0xB0, 0xBC, 0x1B, 0x49, + 0x73, 0x2D, 0x26, 0xE2, 0x5C, 0xA1, 0xCD, 0x9D, + 0x40, 0x7E, 0x0D, 0x88, 0x64, 0x04, 0x09, 0x41, + 0x61, 0x1F, 0x93, 0x33, 0xB6, 0x36, 0x7E, 0x83, + 0x00, 0xFD, 0x64, 0x6A, 0xC5, 0xA7, 0x1A, 0xD9, + 0x13, 0xEE, 0xFD, 0x80, 0x8D, 0x5C, 0xAF, 0xBF, + 0x15, 0x21, 0xA3, 0x06, 0x2E, 0xC1, 0x84, 0xE5, + 0x21, 0x65, 0x50, 0x1E, 0x00, 0x55, 0x56, 0xDE, + 0x4D, 0xEE, 0x46, 0xF9, 0xE5, 0x3D, 0x7D, 0xEF, + 0x99, 0x09, 0xF3, 0xD5, 0xD9, 0x8C, 0xA8, 0x0D, + 0x87, 0x70, 0x7F, 0x7B, 0xC0, 0xFF, 0x8D, 0x87, + 0x9D, 0x65, 0xD4, 0xD7, 0x83, 0xD1, 0x96, 0xF2, + 0x46, 0x06, 0x93, 0x81, 0x1C, 0xDF, 0x33, 0x35, + 0x8E, 0x08, 0x2D, 0x81, 0xF4, 0xDB, 0x8F, 0x6C, + 0x20, 0x48, 0x61, 0x83, 0xA3, 0x6D, 0x4F, 0xBC, + 0xC8, 0xA1, 0xC6, 0xDA, 0x21, 0xAA, 0x4D, 0xD1, + 0x36, 0xE1, 0x9F, 0xEF, 0x2E, 0xA9, 0x93, 0x97, + 0x2B, 0xB9, 0x98, 0x9A, 0xC1, 0xC3, 0x8A, 0x79, + 0xF3, 0x18, 0x52, 0x17, 0x80, 0x04, 0x12, 0x3C, + 0x46, 0x27, 0x7D, 0x38, 0xA8, 0x8F, 0xC1, 0x58, + 0x9F, 0x25, 0x73, 0x32, 0x28, 0x4C, 0xD8, 0xA8, + 0x73, 0xC2, 0x5A, 0x1A, 0x6D, 0x40, 0x26, 0x5B, + 0x28, 0x5D, 0xF0, 0x93, 0x70, 0xE8, 0x8F, 0x72, + 0xFF, 0x70, 0xE4, 0x34, 0xE8, 0xF6, 0x60, 0x84, + 0xCC, 0xFE, 0xBD, 0xBB, 0xC4, 0xB9, 0x9E, 0xDF, + 0xBC, 0x75, 0x0C, 0xC5, 0xDE, 0xA6, 0x36, 0x17, + 0xF6, 0x47, 0xF5, 0xF0, 0x21, 0xD5, 0x7D, 0x64, + 0xD5, 0xEF, 0xF0, 0x48, 0x63, 0x4D, 0xB2, 0x20, + 0x9D, 0x7C, 0x8B, 0x82, 0xFB, 0x63, 0xB8, 0x82, + 0x3E, 0x4C, 0xA0, 0x57, 0x16, 0x8B, 0xAE, 0x88, + 0xD9, 0x71, 0x52, 0x91, 0x24, 0x0B, 0x37, 0x58, + 0xD7, 0x68, 0x45, 0x01, 0xF8, 0x61, 0x86, 0x7B, + 0x7A, 0x24, 0x1C, 0x06, 0x3B, 0x05, 0xD5, 0xE8, + 0xCA, 0x6B, 0x4C, 0x79, 0xCB, 0x24, 0x35, 0xD7, + 0xF9, 0x94, 0xCB, 0x76, 0x91, 0x5B, 0x4A, 0x54, + 0x87, 0x08, 0xB1, 0x1B, 0x29, 0x44, 0x96, 0x85, + 0x94, 0x1D, 0x43, 0xE6, 0x0A, 0x89, 0x76, 0xF9, + 0xA9, 0x60, 0x72, 0xF9, 0x10, 0x41, 0xF4, 0xC3, + 0xDF, 0x7C, 0x73, 0x96, 0x90, 0x12, 0xAE, 0x1B, + 0x30, 0xE4, 0xB9, 0xC4, 0xE1, 0x33, 0x55, 0x8D, + 0xAB, 0xC4, 0x6C, 0x10, 0x3C, 0x0C, 0xB1, 0xDF, + 0xB9, 0x9B, 0x58, 0x53, 0x74, 0xA5, 0x4F, 0x9B, + 0xA5, 0x6B, 0x72, 0x48, 0xB8, 0xC3, 0xF6, 0x6F, + 0x1D, 0x55, 0x76, 0x0D, 0x6A, 0xBB, 0x43, 0x03, + 0x75, 0x77, 0x4D, 0xFB, 0xA2, 0x05, 0x9C, 0x5D, + 0xDD, 0xB6, 0x59, 0xFD, 0x2E, 0x1D, 0xA9, 0xC3, + 0xF0, 0xB8, 0x08, 0x68, 0xC9, 0x2B, 0xCA, 0xC1, + 0x04, 0x03, 0xDC, 0xD1, 0x40, 0xD6, 0xA3, 0xD3, + 0xF3, 0x5F, 0x8E, 0xF1, 0xA2, 0xDD, 0x98, 0xDE, + 0x1A, 0x43, 0x34, 0x23, 0x85, 0x99, 0xED, 0xAD, + 0x92, 0x0D, 0xC0, 0xAA, 0x69, 0x8E, 0x9F, 0xE6, + 0x10, 0x6A, 0x07, 0x80, 0xC9, 0xC2, 0x45, 0xF2, + 0xC6, 0x5A, 0x0C, 0x3E, 0x5C, 0xD5, 0x36, 0x61, + 0x10, 0xB1, 0x76, 0x0F, 0xCD, 0x41, 0x4D, 0x45, + 0x0D, 0xB9, 0xD7, 0x6A, 0x22, 0xA9, 0xEA, 0xEA, + 0x0C, 0x9F, 0xB7, 0x2E, 0xD5, 0x43, 0xCE, 0x9F, + 0xA3, 0x31, 0x4B, 0xAB, 0x17, 0x68, 0x7E, 0x9D, + 0xE5, 0xAD, 0xAD, 0x75, 0x61, 0xF1, 0xA5, 0xBE, + 0xC1, 0x63, 0x39, 0x26, 0x9A, 0x87, 0xE0, 0x9A, + 0xCB, 0x29, 0xE4, 0xC4, 0x39, 0x60, 0x5E, 0x95, + 0x72, 0xAA, 0x9B, 0x7D, 0x0E, 0x83, 0x71, 0xA3, + 0x0E, 0x41, 0xA0, 0xA7, 0xBD, 0xC0, 0x2D, 0xA3, + 0xA6, 0x12, 0x1B, 0xF2, 0x61, 0xEA, 0xA0, 0x16, + 0xA2, 0x07, 0x4E, 0x44, 0x32, 0xCF, 0x63, 0xAF, + 0x96, 0xBE, 0x81, 0xCE, 0xB6, 0xE0, 0xC2, 0x67, + 0x6A, 0x85, 0x45, 0xC6, 0x6D, 0x2F, 0x30, 0xC9, + 0x8B, 0x54, 0x24, 0xF0, 0xFE, 0xF0, 0x4B, 0x3C, + 0x6C, 0x70, 0x64, 0xE2, 0xD2, 0xE1, 0x1C, 0xBE, + 0x60, 0xF8, 0x57, 0x23, 0xFF, 0xC0, 0xB7, 0x70, + 0xD6, 0x86, 0x6F, 0xFA, 0x58, 0x9E, 0x3F, 0x9B, + 0x2A, 0xBF, 0x75, 0x10, 0x40, 0x19, 0xAA, 0x69, + 0xCB, 0x58, 0x89, 0x5B, 0x47, 0x4A, 0x0A, 0xDE, + 0x2B, 0x60, 0xA4, 0xAB, 0x07, 0x7C, 0x3A, 0x6D, + 0xF6, 0x15, 0x33, 0x4E, 0xBB, 0xE7, 0x32, 0xE9, + 0x52, 0x20, 0x21, 0x39, 0x94, 0xD3, 0xBD, 0xC4, + 0x43, 0xC8, 0xEF, 0x94, 0xAD, 0x51, 0x5F, 0x45, + 0x41, 0x83, 0x55, 0x18, 0x33, 0x14, 0x48, 0x58, + 0x57, 0xAC, 0x12, 0xBA, 0x1D, 0x62, 0xCF, 0x4F, + 0xD4, 0xF4, 0xDE, 0x2A, 0x7F, 0xFF, 0x1E, 0xCF, + 0x0D, 0x29, 0x0C, 0x4C, 0xDF, 0xFA, 0x88, 0xD8, + 0xF4, 0x8C, 0x5B, 0x83, 0x7D, 0x3A, 0x94, 0xCD, + 0x17, 0xB3, 0xD1, 0x69, 0x96, 0x6E, 0xB0, 0x38, + 0xFE, 0x5A, 0x6E, 0x85, 0xDF, 0xC6, 0x0A, 0x00, + 0x23, 0x3F, 0x10, 0x73, 0x19, 0x73, 0xDC, 0x47, + 0x5D, 0x53, 0xBC, 0x7B, 0x9E, 0x60, 0x32, 0x0B, + 0xA7, 0x90, 0x5D, 0x88, 0x51, 0x9F, 0xA3, 0x25, + 0xDF, 0x5A, 0xB0, 0x2B, 0x40, 0xF2, 0xAB, 0xBD, + 0xB3, 0x7D, 0x22, 0x61, 0xCB, 0x81, 0x48, 0x27, + 0x7B, 0x87, 0xAE, 0x32, 0x97, 0x97, 0x6C, 0x80, + 0xC3, 0x51, 0x34, 0xE5, 0xF7, 0x86, 0x90, 0x45, + 0x64, 0xC1, 0x46, 0x99, 0x47, 0xF6, 0x20, 0xFE, + 0x09, 0xFD, 0xF3, 0x86, 0x2C, 0x40, 0x57, 0xA3, + 0xBC, 0xEF, 0x70, 0x75, 0x0C, 0xB7, 0x27, 0xF0, + 0x31, 0x28, 0x3A, 0x18, 0x26, 0xF1, 0x38, 0x1B, + 0x33, 0x48, 0xE3, 0xEA, 0x46, 0x88, 0x60, 0x9E, + 0xCB, 0x19, 0x3A, 0xFA, 0xAE, 0xE1, 0xCD, 0x97, + 0xE4, 0xDD, 0xAA, 0x02, 0xC0, 0xC3, 0x0E, 0x49, + 0xF1, 0x37, 0xD0, 0x82, 0x85, 0x94, 0x15, 0x28, + 0x10, 0x17, 0x59, 0xA7, 0x42, 0x2A, 0xA4, 0x99, + 0xC9, 0x00, 0xA3, 0x79, 0xDD, 0x73, 0xB3, 0x07, + 0x28, 0x4C, 0xCD, 0xDA, 0xF1, 0xFA, 0x1B, 0x0C, + 0x4B, 0x28, 0x0E, 0x3F, 0x9F, 0x1D, 0xB6, 0xD3, + 0x8E, 0xCF, 0x8A, 0x84, 0x1F, 0x9D, 0x4E, 0x40, + 0xEC, 0xA8, 0x62, 0x47, 0xD6, 0xCD, 0x9B, 0x31, + 0xEA, 0xCD, 0x6A, 0x46, 0xF0, 0xE3, 0x33, 0xB9, + 0xE8, 0x3D, 0x69, 0x0D, 0x7E, 0x13, 0x46, 0x76, + 0x19, 0xB4, 0x6A, 0xF9, 0xAF, 0xCF, 0xDC, 0x4A, + 0xA9, 0xA0, 0x49, 0xB1, 0x80, 0x26, 0x0D, 0x70, + 0xD9, 0xEE, 0xDB, 0x8A, 0x53, 0x30, 0x51, 0xAB, + 0x83, 0x51, 0x7A, 0xAD, 0xC2, 0xCD, 0x90, 0x0B, + 0x3E, 0xA5, 0x12, 0x60, 0xF4, 0x64, 0xAF, 0xC5, + 0xD2, 0xDC, 0x41, 0x10, 0x29, 0x77, 0x9B, 0x21, + 0xCE, 0x2C, 0xBD, 0x16, 0x02, 0x18, 0xDF, 0x41, + 0xF6, 0x61, 0xDA, 0x1A, 0xD9, 0x5A, 0xD4, 0x0B, + 0x8C, 0x35, 0x3C, 0x7F, 0x10, 0xFC, 0x23, 0xF8, + 0x30, 0xD1, 0x17, 0xBC, 0xAE, 0xF8, 0xCE, 0xCE, + 0xBC, 0xBF, 0xA4, 0x9D, 0x79, 0xD8, 0xD9, 0x39, + 0x1E, 0x8D, 0x08, 0x28, 0x1F, 0x00, 0x0A, 0x55, + 0xE9, 0x2D, 0xB3, 0x31, 0xBD, 0xEC, 0xD7, 0x31, + 0x83, 0xE0, 0x58, 0xFF, 0x3F, 0xE5, 0x83, 0x9A, + 0xF5, 0x0D, 0x8C, 0x55, 0xF2, 0x2F, 0x6A, 0xFF, + 0x5A, 0x33, 0xDA, 0x77, 0x4B, 0xA1, 0xB3, 0xE6, + 0x43, 0xF5, 0x87, 0x7C, 0xF5, 0x49, 0xC4, 0xF9, + 0x08, 0xEA, 0x64, 0xA3, 0x7D, 0xF3, 0xBF, 0xA4, + 0xCD, 0x5F, 0x70, 0xF8, 0xCD, 0x15, 0x44, 0x76, + 0xD3, 0x4B, 0xC8, 0x53, 0xC9, 0xE8, 0xF7, 0x97, + 0x9E, 0x5F, 0x4E, 0xBB, 0x88, 0x8A, 0xF7, 0x61 }; static const byte msg_87[] = { - 0x14, 0x42, 0x63, 0x34, 0x94, 0x09, 0x60, 0x77, - 0x3B, 0xFF, 0x65, 0xF0, 0x8D, 0x1D, 0xE4, 0x89, - 0xC4, 0xC3, 0xED, 0x36 + 0x4A, 0xC4, 0x67, 0x5C, 0x96, 0xD9, 0x11, 0x7D, + 0x1E, 0xDE, 0xB8, 0x0D, 0x7C, 0xD2, 0x84, 0xA3, + 0xE1, 0xE1, 0xFE, 0x03, 0x8E, 0x30, 0x12, 0x05, + 0xB4, 0xC4, 0x08, 0xEB, 0x96, 0x52, 0x35, 0xAD, + 0x1C, 0x85, 0xF8, 0xBE, 0x3F, 0x77, 0xCA, 0x48, + 0x6F, 0xD2, 0x07, 0xF7, 0xC7, 0x5F, 0x41, 0x21, + 0xCD, 0x3C, 0xA2, 0xB2, 0x3D, 0x6B, 0xCE, 0x43, + 0x82, 0xA6, 0xD3, 0x61, 0x21, 0x81, 0x50, 0x25, + 0xD5, 0x80, 0x6C, 0xBE, 0xF4, 0x52, 0xE0, 0x83, + 0x93, 0x3C, 0x6E, 0x5C, 0x73, 0x94, 0xAC, 0x88, + 0x26, 0x2A, 0x6D, 0xE7, 0x77, 0x0B, 0x2D, 0x88, + 0x43, 0xEC, 0x10, 0x1F, 0xFB, 0x5E, 0x84, 0xDE, + 0x2F, 0x7A, 0x8B, 0x74, 0xE7, 0x67, 0x4B, 0x3B, + 0x23, 0x19, 0xBD, 0x6B, 0xF4, 0x11, 0x2F, 0x92, + 0xC5, 0xCF, 0xC0, 0xA5, 0x5F, 0x7F, 0xA0, 0x61, + 0xF4, 0x53, 0x25, 0x40, 0x8D, 0x03, 0x9D, 0x51 }; static const byte sig_87[] = { - 0x13, 0xE8, 0x99, 0xEE, 0xDC, 0xCC, 0x0F, 0xBA, - 0x62, 0x91, 0x44, 0xE4, 0xAC, 0x06, 0x79, 0x06, - 0xB5, 0x32, 0x6B, 0x8F, 0x9A, 0x6C, 0xCB, 0xAB, - 0xE1, 0x44, 0x4A, 0xDD, 0x46, 0x45, 0x16, 0x0D, - 0x22, 0x57, 0x82, 0x87, 0x10, 0xD1, 0xEE, 0x10, - 0x60, 0x21, 0xB5, 0x64, 0x1E, 0x78, 0x81, 0x55, - 0x75, 0xD4, 0xF0, 0x95, 0xD0, 0x15, 0xD8, 0x46, - 0x5C, 0x92, 0xD2, 0xDD, 0xF4, 0xAB, 0xDF, 0xBE, - 0xB1, 0x1E, 0xE5, 0xE0, 0x70, 0xE6, 0xDA, 0x52, - 0xE5, 0x48, 0xDC, 0x04, 0xFD, 0xEF, 0x54, 0x72, - 0xE7, 0xE5, 0xF1, 0x82, 0x10, 0xAA, 0xCB, 0xA0, - 0x4F, 0x4F, 0x18, 0xAE, 0x66, 0x86, 0xB9, 0xAF, - 0x96, 0x57, 0xE3, 0x8E, 0x3B, 0x9B, 0xDD, 0xB4, - 0xAA, 0x84, 0xE6, 0x7B, 0x4D, 0x81, 0x92, 0xD0, - 0x03, 0x87, 0x3D, 0xD3, 0xEE, 0xE7, 0x47, 0x00, - 0xFB, 0xD8, 0x1E, 0x38, 0x1C, 0x21, 0x98, 0xB7, - 0xCC, 0xC1, 0x37, 0xC1, 0x71, 0xB2, 0x2F, 0x93, - 0x53, 0x41, 0x9C, 0x48, 0xC1, 0x4B, 0x8D, 0x63, - 0x0F, 0x99, 0x63, 0x40, 0x27, 0x5F, 0x6E, 0x60, - 0x4B, 0x95, 0xC4, 0x35, 0x20, 0x8A, 0xED, 0x2B, - 0xCA, 0x1B, 0x41, 0x9F, 0x83, 0x63, 0xF0, 0x95, - 0x0E, 0x24, 0x0D, 0x6F, 0x9E, 0xAB, 0x11, 0x8E, - 0x4B, 0xD3, 0xDA, 0x0E, 0xC3, 0xA2, 0xBE, 0x26, - 0xA8, 0xA0, 0x98, 0x57, 0x71, 0x3C, 0x36, 0xDD, - 0x69, 0xC3, 0x4E, 0xDD, 0x2C, 0x61, 0x9E, 0x88, - 0x26, 0x70, 0x71, 0xCF, 0x9E, 0xE5, 0xA6, 0x0C, - 0xA3, 0x14, 0x2D, 0xF1, 0x63, 0xF0, 0x1D, 0x8D, - 0x79, 0x6A, 0xC8, 0x50, 0xCF, 0xF3, 0x66, 0x60, - 0x78, 0xB3, 0x18, 0xFB, 0x5B, 0xD1, 0x73, 0x60, - 0xC8, 0x76, 0xC9, 0xC9, 0x0D, 0x8A, 0x7F, 0x41, - 0x2C, 0x8A, 0x31, 0x61, 0x6B, 0xE7, 0xA3, 0x74, - 0x58, 0x71, 0x54, 0x84, 0x86, 0x71, 0x5C, 0x94, - 0x26, 0x3A, 0x17, 0xB3, 0x6C, 0xA4, 0x99, 0x25, - 0x45, 0x0C, 0x57, 0x8A, 0xD9, 0xD4, 0xB1, 0xC2, - 0x00, 0x43, 0xF4, 0x5E, 0x84, 0x31, 0x99, 0x4F, - 0xA6, 0xD2, 0x6A, 0x14, 0x1B, 0xAD, 0x9E, 0x49, - 0x6E, 0x00, 0x9E, 0x91, 0x46, 0x16, 0xCA, 0x57, - 0x0C, 0x09, 0xF6, 0x38, 0xD0, 0x62, 0xBE, 0xC6, - 0x87, 0x33, 0x3A, 0xC7, 0x28, 0x38, 0x34, 0x53, - 0x7E, 0xFB, 0x60, 0x42, 0xF3, 0x7D, 0x83, 0xF7, - 0x29, 0x5D, 0xEA, 0x30, 0xD5, 0x00, 0x90, 0xB6, - 0x38, 0x4C, 0x17, 0x29, 0xEF, 0x17, 0xA0, 0xD5, - 0x87, 0x50, 0xC0, 0x03, 0x75, 0x14, 0xE5, 0xE1, - 0x22, 0x78, 0x53, 0xBC, 0x5A, 0xA3, 0x1E, 0x95, - 0xBE, 0xEC, 0x37, 0xB1, 0x51, 0x82, 0x69, 0x26, - 0x2E, 0xA3, 0x5A, 0xDA, 0x4F, 0xDA, 0x77, 0x62, - 0x7E, 0xED, 0xDA, 0xAF, 0x57, 0x97, 0x1B, 0xA3, - 0x6D, 0x46, 0x7B, 0x19, 0xA9, 0x0B, 0x99, 0x1C, - 0xD2, 0x55, 0xDB, 0x79, 0xB0, 0x15, 0x48, 0x86, - 0x52, 0x30, 0x31, 0xD6, 0xC5, 0xB1, 0xAE, 0x8F, - 0xCF, 0x9A, 0x43, 0x10, 0xBB, 0xC8, 0x19, 0x74, - 0x84, 0xB2, 0x92, 0x3B, 0xFE, 0x0B, 0x12, 0x15, - 0xA1, 0xC4, 0xD8, 0xC6, 0x83, 0x90, 0x89, 0x8A, - 0xD5, 0x3E, 0x33, 0x69, 0xB7, 0x05, 0x3F, 0xB1, - 0x8B, 0x0D, 0x87, 0x40, 0x70, 0x90, 0x2A, 0x5D, - 0x3B, 0x3D, 0x91, 0xD8, 0x1D, 0x4D, 0xF1, 0x08, - 0x7E, 0xF7, 0xDC, 0x05, 0x84, 0xEB, 0xDC, 0x63, - 0xD7, 0xBA, 0x3C, 0x0D, 0x31, 0xF8, 0x6D, 0xA6, - 0xC0, 0xFD, 0x08, 0x11, 0x5C, 0x53, 0xF6, 0xAE, - 0xFE, 0xC0, 0x82, 0x9A, 0x68, 0xD2, 0xA3, 0x44, - 0x2E, 0xEE, 0x47, 0x36, 0x70, 0x2D, 0x66, 0x81, - 0x0D, 0x62, 0x30, 0x8A, 0x8C, 0xC8, 0x2A, 0xA6, - 0x21, 0x82, 0xF5, 0x98, 0xF4, 0x4E, 0x25, 0x37, - 0x11, 0xB5, 0xD6, 0x07, 0x88, 0xBD, 0x0D, 0x69, - 0x0E, 0xF9, 0x8F, 0x9A, 0xD5, 0x93, 0xE0, 0x3C, - 0xEF, 0x38, 0xB9, 0xC9, 0x77, 0x98, 0x3F, 0x69, - 0x11, 0xBA, 0x1A, 0xB9, 0xF7, 0x35, 0xE9, 0x28, - 0xCD, 0xA3, 0x8C, 0x03, 0xE6, 0xAD, 0x83, 0x62, - 0xF4, 0x60, 0xAE, 0x4C, 0xD0, 0xF4, 0x6E, 0x00, - 0xEE, 0xEC, 0x74, 0xB6, 0x12, 0x34, 0x98, 0xAB, - 0x31, 0xE7, 0xA7, 0x9D, 0x33, 0x4D, 0x72, 0xA7, - 0xA7, 0xEE, 0xF3, 0xB5, 0x51, 0xE7, 0x8D, 0x31, - 0xBC, 0x2C, 0xAF, 0xFB, 0x13, 0x9C, 0xAC, 0xA4, - 0xD7, 0x9C, 0x8B, 0xBD, 0x52, 0xBD, 0x78, 0xF4, - 0x90, 0x65, 0x09, 0xBE, 0x42, 0xE7, 0x76, 0x3A, - 0xE6, 0xAC, 0xB8, 0x98, 0x28, 0x5E, 0xC9, 0x32, - 0x3E, 0x68, 0x67, 0x6A, 0x8C, 0xC7, 0x4A, 0x58, - 0xC8, 0xDA, 0x8B, 0xE9, 0x11, 0xED, 0x6F, 0x51, - 0x3B, 0x66, 0x08, 0x70, 0x73, 0x10, 0xFB, 0x45, - 0xCB, 0xD9, 0x7D, 0x5F, 0xF0, 0xD2, 0xAB, 0xA3, - 0x6F, 0xCE, 0xF7, 0x3D, 0x46, 0xCB, 0x7F, 0x01, - 0xC2, 0xCF, 0xE3, 0x8E, 0x68, 0xE8, 0x4F, 0x4A, - 0x30, 0x19, 0x16, 0xD2, 0xF5, 0x10, 0xD8, 0x2B, - 0x49, 0x69, 0xBE, 0x7A, 0x0E, 0x9C, 0xC6, 0x0E, - 0xFF, 0x5C, 0x0A, 0x87, 0x17, 0xB8, 0x22, 0x83, - 0x8C, 0x77, 0xAF, 0x42, 0x06, 0xB1, 0x25, 0x45, - 0x08, 0x9B, 0xB2, 0xDD, 0x6A, 0x3F, 0xF0, 0x12, - 0xC8, 0x64, 0x15, 0xBB, 0xA0, 0x4F, 0xD7, 0xD4, - 0xEC, 0x70, 0x7A, 0xF3, 0xB1, 0x7F, 0x25, 0x57, - 0x47, 0x66, 0xF1, 0xE9, 0x27, 0x38, 0xE0, 0x62, - 0x10, 0xF4, 0x8A, 0x5E, 0xF2, 0x55, 0x0E, 0xBD, - 0xF8, 0x5A, 0x5C, 0xA3, 0x44, 0x97, 0xCF, 0x1D, - 0x4D, 0x3A, 0x75, 0x86, 0x48, 0xEC, 0x41, 0x17, - 0x24, 0x43, 0x83, 0x5E, 0x50, 0x91, 0xBE, 0x8F, - 0x04, 0x78, 0x23, 0xD9, 0x62, 0x0C, 0x2A, 0xD5, - 0x1C, 0x96, 0x11, 0xAA, 0xEE, 0x39, 0xB2, 0x1E, - 0x6D, 0x6A, 0xEC, 0x87, 0x0C, 0x89, 0x15, 0xE2, - 0x66, 0x47, 0x6A, 0x50, 0xEE, 0xCA, 0x59, 0x96, - 0x22, 0xF7, 0x09, 0x1A, 0x34, 0xC2, 0x3F, 0x14, - 0xB4, 0x04, 0x29, 0xD9, 0x5E, 0x3E, 0xF9, 0x8F, - 0xED, 0x3E, 0x74, 0x94, 0x37, 0xF0, 0x4B, 0xB4, - 0xA3, 0x37, 0x52, 0x2E, 0x68, 0x09, 0xFC, 0x10, - 0x45, 0x03, 0xE2, 0x53, 0xB4, 0x1C, 0x4F, 0x03, - 0x01, 0xAF, 0x46, 0x7F, 0x74, 0xD3, 0x31, 0x25, - 0xFA, 0x83, 0xEF, 0x71, 0x24, 0x45, 0xA1, 0x71, - 0xFA, 0x40, 0xEB, 0xF4, 0xE6, 0x55, 0x3E, 0x45, - 0x4A, 0xFE, 0x25, 0x68, 0x02, 0x1D, 0x2B, 0x2A, - 0x19, 0x8D, 0xEC, 0x9B, 0xF7, 0x20, 0xF9, 0xD7, - 0x2F, 0x81, 0x52, 0x0B, 0xE8, 0x74, 0x66, 0xAF, - 0x70, 0xD0, 0x0E, 0x0E, 0x86, 0x0F, 0xF9, 0xAB, - 0xD0, 0x39, 0x78, 0xC3, 0xE4, 0x29, 0xB5, 0xAA, - 0x17, 0xB9, 0x7F, 0x9A, 0xE9, 0x34, 0x48, 0x85, - 0x3D, 0x6E, 0xFD, 0x16, 0x8A, 0x30, 0xC6, 0xCB, - 0xE8, 0xDE, 0x2D, 0x28, 0x8D, 0x9A, 0x24, 0xEA, - 0x5D, 0x2A, 0x58, 0x23, 0x33, 0x2B, 0x84, 0xFD, - 0x2C, 0xE7, 0x93, 0xA2, 0x2B, 0xEC, 0x43, 0x98, - 0x48, 0xD4, 0xE6, 0x0F, 0x3B, 0xB9, 0xC7, 0x5D, - 0x7E, 0xB0, 0x87, 0x1E, 0x80, 0x3D, 0x61, 0xB0, - 0x7E, 0x74, 0x9E, 0xD7, 0x60, 0x72, 0xB2, 0x7C, - 0x87, 0xB6, 0x9D, 0x6C, 0x01, 0x42, 0x61, 0xF6, - 0x47, 0xAF, 0xA8, 0x8C, 0x4F, 0x1E, 0xC5, 0x5A, - 0x75, 0xA5, 0x0F, 0xB4, 0xC7, 0x9D, 0x2C, 0x94, - 0xC0, 0x50, 0x3D, 0xB2, 0x0D, 0xFD, 0xF7, 0x1F, - 0x62, 0x88, 0x74, 0x18, 0x8C, 0xDD, 0x73, 0x85, - 0xC0, 0x33, 0x81, 0xDA, 0xBB, 0x85, 0x4D, 0x4A, - 0xA9, 0xF4, 0x7B, 0x66, 0x43, 0x8C, 0x43, 0xFF, - 0x53, 0xEF, 0x5E, 0x78, 0xAB, 0x45, 0x0B, 0x45, - 0x01, 0x91, 0x27, 0x8A, 0xF6, 0xE2, 0x6A, 0x7B, - 0x5E, 0x64, 0x61, 0xF5, 0x77, 0xF9, 0x85, 0x2F, - 0x81, 0xC9, 0x02, 0x03, 0xC7, 0x13, 0xF5, 0xB1, - 0xF6, 0xC3, 0xEF, 0x55, 0x8C, 0x90, 0x32, 0x51, - 0x6D, 0x8D, 0x62, 0xFD, 0x5E, 0x24, 0xE4, 0xF0, - 0xF5, 0x07, 0x18, 0xF5, 0x6B, 0x5A, 0x59, 0xA0, - 0x09, 0xD5, 0x93, 0x8D, 0xAD, 0x55, 0x91, 0xF6, - 0x1F, 0x4C, 0x65, 0x9A, 0x76, 0x05, 0x26, 0xEF, - 0x41, 0x20, 0x2F, 0xA7, 0xE5, 0xF6, 0xC7, 0xD5, - 0xE0, 0xB0, 0xC0, 0xC4, 0x3B, 0x52, 0x4B, 0x66, - 0x71, 0x2C, 0x5A, 0x7C, 0x53, 0xC8, 0x4C, 0x50, - 0xB8, 0x3E, 0xB9, 0xC9, 0x8D, 0x2F, 0xD0, 0x84, - 0xC9, 0xC5, 0xF2, 0x1F, 0xEE, 0x77, 0x42, 0xE6, - 0xEF, 0xC8, 0xCB, 0xBE, 0x57, 0x18, 0xB7, 0x0C, - 0x06, 0x2D, 0x82, 0xE2, 0xF9, 0x86, 0xF3, 0x8D, - 0xF1, 0xE7, 0x15, 0x89, 0xDC, 0x79, 0x87, 0x24, - 0x35, 0x62, 0xA2, 0x31, 0x9D, 0x7C, 0x00, 0xB2, - 0x6E, 0x53, 0x1E, 0x93, 0xC3, 0x84, 0x44, 0x61, - 0x8C, 0xE7, 0x58, 0x73, 0x4F, 0xDE, 0xCF, 0xD0, - 0xC6, 0x85, 0x37, 0x28, 0xC6, 0x10, 0x00, 0x78, - 0x4E, 0xDF, 0xFE, 0xD7, 0xB3, 0x30, 0x86, 0xE1, - 0x68, 0xD6, 0xCB, 0x63, 0xE3, 0xDA, 0xCA, 0xF3, - 0x55, 0x2F, 0x88, 0x5B, 0x47, 0x82, 0x62, 0xDE, - 0x5E, 0x1E, 0x63, 0xCE, 0x7A, 0x4C, 0x66, 0x95, - 0xD1, 0x19, 0x38, 0x35, 0xE4, 0x5A, 0x67, 0x91, - 0x8C, 0x42, 0xD3, 0x9B, 0xF8, 0x80, 0x38, 0x53, - 0x30, 0x31, 0x0F, 0x2C, 0x7B, 0xF9, 0x1E, 0x6C, - 0x3E, 0x29, 0xB7, 0x81, 0xD0, 0x98, 0x70, 0xC2, - 0x6D, 0x76, 0xBD, 0x8A, 0xE2, 0x09, 0xC4, 0x2B, - 0xC7, 0x43, 0x2D, 0xBB, 0x4C, 0x16, 0x52, 0x63, - 0x57, 0xA5, 0x63, 0x4E, 0xEC, 0xDE, 0x93, 0xC5, - 0x1D, 0xD4, 0xD6, 0xF0, 0x06, 0x5B, 0x2E, 0xC5, - 0x7A, 0xD3, 0xB5, 0x82, 0x66, 0x53, 0x95, 0x97, - 0xC8, 0xF4, 0x2B, 0x55, 0x27, 0x1D, 0x6F, 0x90, - 0xE9, 0x86, 0xF6, 0x82, 0x8D, 0x95, 0x9E, 0xE8, - 0x00, 0xDB, 0xEB, 0xCF, 0x48, 0x23, 0x6B, 0xA3, - 0xDE, 0x25, 0x27, 0xE0, 0xEC, 0xA4, 0xA3, 0xC2, - 0xA3, 0x4B, 0xBC, 0xDD, 0x6C, 0xBB, 0x3A, 0x9C, - 0x96, 0xDC, 0x3B, 0xE1, 0x10, 0xD3, 0x49, 0x94, - 0x66, 0xE2, 0x85, 0x7F, 0xBA, 0x98, 0x12, 0x3A, - 0x6D, 0xBA, 0x90, 0x14, 0x87, 0x7E, 0x24, 0xEA, - 0xDC, 0xCA, 0x40, 0xF8, 0xAE, 0x94, 0xB2, 0xFE, - 0xD2, 0x36, 0xCB, 0xE5, 0xBC, 0xA9, 0xDF, 0xE0, - 0xCB, 0xA9, 0xA0, 0xF8, 0x62, 0x41, 0x33, 0x18, - 0x59, 0xF9, 0xD6, 0xC0, 0x87, 0xB2, 0x76, 0xDE, - 0xC9, 0x35, 0x6F, 0x1F, 0xEF, 0x69, 0xB3, 0x59, - 0xF9, 0xFB, 0x38, 0x4A, 0x84, 0x02, 0x2D, 0xEC, - 0xB7, 0x01, 0x08, 0xDA, 0xC8, 0xE9, 0x3B, 0xB6, - 0xC3, 0x00, 0xC0, 0x34, 0x5F, 0xC6, 0x40, 0xC0, - 0x06, 0xEA, 0xEB, 0xC1, 0x51, 0x13, 0x81, 0x2F, - 0xB3, 0x7D, 0xD9, 0x6E, 0x2A, 0x06, 0xA4, 0x63, - 0xAF, 0xCE, 0x66, 0xC5, 0x9F, 0x8D, 0x71, 0x4A, - 0xA1, 0xFF, 0x49, 0x4F, 0x08, 0x6F, 0xB9, 0xEA, - 0xDA, 0x18, 0x45, 0x63, 0xCA, 0x9D, 0x88, 0x08, - 0xB1, 0x6C, 0x19, 0xA8, 0x24, 0xAD, 0x85, 0x7D, - 0xDE, 0x51, 0xE5, 0x08, 0xB7, 0x04, 0x12, 0x35, - 0xF3, 0x00, 0xED, 0x2C, 0x79, 0x9C, 0x18, 0x23, - 0x05, 0x38, 0x95, 0x76, 0xCF, 0x39, 0x3C, 0xAE, - 0xB0, 0xD3, 0xBA, 0x3E, 0x4E, 0xE4, 0xB5, 0x77, - 0xA3, 0xE3, 0x7B, 0x27, 0x5F, 0xD8, 0x05, 0x19, - 0x42, 0xAE, 0x91, 0x54, 0xE5, 0xBD, 0x7C, 0x35, - 0xE0, 0xF8, 0x95, 0x52, 0x3A, 0x29, 0xB0, 0xE6, - 0xB7, 0xAE, 0x20, 0xBE, 0x21, 0xDF, 0xF5, 0x67, - 0xEC, 0x82, 0x52, 0xFF, 0x5B, 0xD0, 0xAA, 0x14, - 0x50, 0x15, 0xE1, 0x1C, 0x6A, 0x1B, 0x94, 0x1B, - 0xCC, 0x76, 0x01, 0xBF, 0x03, 0x94, 0x42, 0xF2, - 0x00, 0x61, 0x96, 0x58, 0xD9, 0xD0, 0x40, 0x21, - 0xFA, 0xCE, 0x6B, 0xAB, 0x5D, 0x49, 0xD8, 0xD7, - 0xBC, 0x9A, 0x66, 0xC2, 0xBA, 0x3F, 0xDC, 0x49, - 0x0D, 0xA5, 0x5C, 0xB4, 0x67, 0x08, 0x38, 0xEB, - 0x2D, 0x07, 0x24, 0x5B, 0xB1, 0x22, 0x7B, 0x02, - 0x4A, 0x8A, 0x53, 0x38, 0xE9, 0x42, 0x8E, 0xA5, - 0x57, 0x41, 0xD6, 0x71, 0xA7, 0x9D, 0x6A, 0x14, - 0xD2, 0x7D, 0x13, 0xFB, 0x59, 0xD0, 0xDA, 0xE5, - 0x23, 0x9E, 0x1B, 0xC4, 0x21, 0x87, 0xBB, 0x78, - 0xE0, 0x38, 0x01, 0x1D, 0xA0, 0xD1, 0x36, 0x3F, - 0xD0, 0xA7, 0x8F, 0x86, 0x26, 0x1E, 0xB0, 0x26, - 0xDE, 0x7E, 0x17, 0x3A, 0x90, 0xFC, 0xC0, 0x17, - 0xDD, 0x78, 0xF5, 0xA3, 0x2D, 0x3E, 0x29, 0xCE, - 0x38, 0x45, 0x76, 0xA9, 0x55, 0x11, 0xB6, 0xB4, - 0xE5, 0x6E, 0xDD, 0x01, 0x4B, 0x16, 0x07, 0x99, - 0xBD, 0x19, 0x77, 0xF5, 0xD7, 0x9E, 0x39, 0x9E, - 0xAA, 0x8E, 0x2B, 0x75, 0xC5, 0xEB, 0x33, 0x56, - 0x6C, 0xD8, 0xB6, 0x3F, 0x3F, 0x4E, 0x81, 0x7E, - 0x29, 0x0A, 0x68, 0xED, 0x1E, 0x9F, 0xDC, 0x6B, - 0xFA, 0x18, 0xE3, 0xE5, 0x7D, 0x05, 0x7F, 0x22, - 0xFA, 0xA2, 0xF6, 0x0F, 0xB6, 0x34, 0x56, 0x72, - 0x55, 0x16, 0x5E, 0xF4, 0x18, 0xD1, 0x82, 0xFA, - 0xDD, 0xF7, 0xB8, 0x9F, 0x7D, 0x30, 0x10, 0x69, - 0xC4, 0x85, 0xD8, 0xE8, 0x34, 0x89, 0xD4, 0x93, - 0xBE, 0x56, 0xEE, 0xDC, 0x43, 0xD4, 0x82, 0x00, - 0xFD, 0x1E, 0x2B, 0x06, 0x69, 0x07, 0x1B, 0xBF, - 0x33, 0x61, 0x39, 0x28, 0xCA, 0x31, 0x91, 0x0B, - 0xF2, 0xEA, 0x32, 0x8E, 0xA8, 0x64, 0x13, 0x9A, - 0xEF, 0x79, 0x1A, 0x9A, 0xBE, 0x52, 0x13, 0x32, - 0x49, 0x93, 0x7D, 0xA8, 0x8C, 0x48, 0xD4, 0xC0, - 0x1D, 0x10, 0x8A, 0x46, 0x85, 0xAD, 0x29, 0xDF, - 0x2E, 0xCD, 0x41, 0x83, 0x82, 0x01, 0x28, 0x44, - 0x0E, 0xE5, 0x37, 0x8D, 0x6B, 0xCA, 0x61, 0x98, - 0xDE, 0x89, 0xA9, 0x7B, 0xBB, 0x44, 0x48, 0xA2, - 0x8D, 0x82, 0x3A, 0x57, 0x40, 0x60, 0x7C, 0x6E, - 0x69, 0x98, 0x98, 0x93, 0xFA, 0x7E, 0x29, 0x9A, - 0x74, 0x53, 0xD8, 0xDC, 0xB3, 0x4B, 0xDB, 0x7E, - 0xFE, 0x95, 0xB0, 0xC7, 0x23, 0x14, 0xEF, 0xCB, - 0x49, 0x3C, 0x09, 0xD7, 0x7B, 0xD0, 0x11, 0x9B, - 0xAC, 0xF2, 0xC2, 0x2E, 0x7C, 0xCB, 0xCD, 0x59, - 0x7F, 0x6A, 0x09, 0xFE, 0xFE, 0xDF, 0xA0, 0xA7, - 0xAC, 0x3C, 0x90, 0xBA, 0x75, 0x19, 0xF4, 0x01, - 0x60, 0x56, 0xD5, 0xFB, 0x41, 0x2B, 0xA0, 0x2D, - 0x0D, 0x45, 0xCF, 0xF3, 0xA6, 0x3D, 0x36, 0xEE, - 0xE1, 0xE4, 0x68, 0xE6, 0xEA, 0x2F, 0x67, 0x3A, - 0x7A, 0x02, 0x92, 0x6B, 0xB3, 0x18, 0xBA, 0x73, - 0xEE, 0x1B, 0x2C, 0x13, 0x7D, 0xEF, 0x4A, 0x39, - 0xE8, 0x03, 0xFF, 0x57, 0x35, 0x53, 0xE9, 0xA5, - 0xC6, 0xAA, 0x1A, 0x17, 0x21, 0xCA, 0x54, 0x38, - 0x7C, 0xB1, 0xDF, 0xB8, 0xFA, 0x7D, 0xA7, 0x26, - 0xB2, 0xAE, 0x7A, 0x05, 0x45, 0x3B, 0x40, 0x0A, - 0x19, 0xE5, 0x32, 0x52, 0x78, 0x9D, 0xC3, 0x20, - 0x63, 0x24, 0xB2, 0x58, 0x4B, 0x86, 0x1F, 0x00, - 0xA2, 0x50, 0xF9, 0x9F, 0xD9, 0xDC, 0x7D, 0x51, - 0x3D, 0xD7, 0xA6, 0x5A, 0x04, 0x03, 0x4E, 0xB3, - 0x3D, 0x2D, 0x56, 0xA4, 0x96, 0xB3, 0x6A, 0xBA, - 0x0A, 0x30, 0x08, 0xE3, 0x0F, 0xC1, 0x38, 0x24, - 0x88, 0x5D, 0x9E, 0x6F, 0x68, 0x1A, 0x7D, 0xB6, - 0x2D, 0xDD, 0xE3, 0x50, 0x1B, 0xD4, 0x07, 0x75, - 0xE2, 0xE2, 0xCC, 0x09, 0xCC, 0x8E, 0x4E, 0x67, - 0x02, 0x72, 0x02, 0xA8, 0x11, 0x70, 0xA5, 0x7F, - 0x4A, 0xC1, 0x98, 0xC1, 0x7F, 0xBF, 0x95, 0xBB, - 0xCE, 0xD3, 0x6D, 0x49, 0x30, 0xB9, 0x50, 0x8C, - 0xFA, 0x3E, 0x8B, 0xF6, 0xE5, 0x54, 0xE9, 0x1B, - 0xD7, 0xD6, 0xE5, 0x32, 0x33, 0xBB, 0x91, 0xAD, - 0xC8, 0x15, 0x76, 0x1A, 0x04, 0x35, 0xDE, 0xCC, - 0xE1, 0x67, 0x26, 0x4C, 0x2F, 0x4E, 0x34, 0x34, - 0x3D, 0x1E, 0x5A, 0xF7, 0xBC, 0xE6, 0x0C, 0x9B, - 0x7B, 0x7E, 0xE5, 0xDF, 0x72, 0x9A, 0x0D, 0xDD, - 0x4B, 0xE6, 0x6F, 0x82, 0xFB, 0x5E, 0x2C, 0xC0, - 0x7B, 0x03, 0x85, 0x76, 0x11, 0x0E, 0xFD, 0xC7, - 0xD5, 0x50, 0x26, 0xBE, 0x75, 0x5E, 0xC1, 0xF0, - 0x2E, 0x47, 0x62, 0xD6, 0xF1, 0xDA, 0xDF, 0xF4, - 0x1C, 0xEE, 0x63, 0x52, 0xC4, 0x45, 0x37, 0xE6, - 0x85, 0xA5, 0x0A, 0x07, 0x54, 0x63, 0x21, 0x7B, - 0x92, 0xF7, 0x33, 0x0C, 0xD9, 0x29, 0xCF, 0xE3, - 0xAB, 0xB5, 0xFC, 0xAA, 0x26, 0x20, 0x93, 0x55, - 0x8A, 0x07, 0x33, 0xB2, 0x7D, 0x95, 0x02, 0x7A, - 0x76, 0x9E, 0x7D, 0xBB, 0xC1, 0xF3, 0x6E, 0x84, - 0x10, 0x30, 0x4B, 0x5D, 0x59, 0x73, 0x68, 0xEC, - 0x2A, 0x63, 0x2D, 0x46, 0xE8, 0xC2, 0xF8, 0xEA, - 0x2B, 0xC4, 0x4F, 0xA7, 0x6E, 0xF4, 0x74, 0xEB, - 0x96, 0xA3, 0x64, 0x40, 0x9B, 0x23, 0x63, 0x42, - 0x4B, 0x8F, 0x85, 0x00, 0x43, 0x04, 0xAD, 0x61, - 0x76, 0x93, 0xBD, 0xC3, 0x88, 0xC3, 0xFC, 0x29, - 0x61, 0xBD, 0xB1, 0x5A, 0x1F, 0x5B, 0x20, 0xEF, - 0x95, 0xED, 0x99, 0x84, 0x96, 0xB2, 0x93, 0x81, - 0x82, 0xFF, 0xE3, 0xB9, 0x27, 0xEA, 0x9A, 0x23, - 0xF6, 0x42, 0x8D, 0xD3, 0x5C, 0x86, 0x11, 0xC8, - 0x39, 0xE3, 0x16, 0xE9, 0xA5, 0x32, 0x7C, 0xC9, - 0xEA, 0x82, 0x50, 0x9B, 0x21, 0x5C, 0xC9, 0x66, - 0xBE, 0x1C, 0x78, 0x48, 0xEF, 0x39, 0x2D, 0xA1, - 0xC6, 0xF3, 0x69, 0xA3, 0x36, 0x25, 0x3A, 0xA1, - 0x15, 0x2B, 0x6D, 0xCF, 0xDA, 0xA7, 0xCA, 0xDD, - 0x4D, 0x9A, 0x1D, 0x58, 0x9F, 0x73, 0xD3, 0xEF, - 0x0F, 0xBF, 0x03, 0x88, 0x2F, 0xDE, 0xB9, 0x44, - 0xB5, 0xB6, 0xCF, 0xE2, 0x6F, 0x6A, 0xB5, 0x12, - 0x38, 0x29, 0x55, 0x8C, 0x4C, 0x73, 0x6F, 0x0B, - 0x68, 0x7A, 0xC7, 0x06, 0x83, 0x80, 0xFE, 0x7F, - 0x61, 0xBE, 0x6B, 0x40, 0xE3, 0xF0, 0x4D, 0x7B, - 0x36, 0x82, 0x0F, 0xD8, 0x63, 0x29, 0xB3, 0x10, - 0x9D, 0x02, 0xEC, 0x63, 0x90, 0xEA, 0xFC, 0x8C, - 0xA7, 0x30, 0x56, 0x2B, 0x68, 0x08, 0x24, 0x24, - 0xFD, 0xA9, 0x8D, 0x0B, 0x64, 0xBC, 0x97, 0x34, - 0xB4, 0x0B, 0x63, 0xF7, 0xE3, 0x7A, 0xF6, 0x89, - 0x0A, 0xF7, 0xC2, 0xD9, 0x2F, 0x79, 0xEE, 0xA3, - 0xCC, 0xEA, 0xC6, 0x0A, 0x6F, 0x38, 0x06, 0x92, - 0xF8, 0x02, 0xB1, 0x55, 0x6A, 0x78, 0xFE, 0x55, - 0x83, 0xFF, 0x20, 0xA9, 0xC6, 0xA7, 0xBF, 0xCC, - 0x86, 0x3A, 0x9E, 0x7B, 0x62, 0x01, 0x4D, 0x16, - 0x05, 0xDE, 0x89, 0x4F, 0xB5, 0x85, 0xE2, 0xD4, - 0xF9, 0x41, 0x15, 0xE0, 0x29, 0xE5, 0x85, 0x7E, - 0x6A, 0x0A, 0x73, 0x89, 0x27, 0x5F, 0x53, 0x0D, - 0x3D, 0x80, 0xCF, 0xAB, 0x1F, 0x22, 0x5D, 0x38, - 0x33, 0x5D, 0x24, 0x67, 0x91, 0x97, 0xD4, 0x8A, - 0x01, 0x8A, 0x34, 0x18, 0x7D, 0xE3, 0xBC, 0xCE, - 0xDE, 0x94, 0xFF, 0x8E, 0xC5, 0x34, 0xC0, 0x2D, - 0xA7, 0x24, 0xD4, 0x59, 0x8D, 0x66, 0x9E, 0x85, - 0xA9, 0xC6, 0x0E, 0x45, 0x21, 0x4F, 0xAA, 0x65, - 0x44, 0xD6, 0xA4, 0x7D, 0x1C, 0x4E, 0xD7, 0x40, - 0x9D, 0x55, 0xB1, 0xA7, 0xF1, 0x15, 0xAE, 0x15, - 0x44, 0x3A, 0x1C, 0x31, 0x06, 0x40, 0xD1, 0x16, - 0x23, 0x84, 0x93, 0xEF, 0x3E, 0xE2, 0x87, 0x9B, - 0xB8, 0x46, 0x1F, 0x7D, 0x68, 0x73, 0x64, 0x70, - 0xD4, 0xB5, 0x73, 0xAE, 0x45, 0x49, 0x93, 0xF5, - 0x32, 0x30, 0x1E, 0x35, 0xCB, 0x9E, 0xEE, 0xDF, - 0xFE, 0xA8, 0x2F, 0xAC, 0x49, 0x77, 0x53, 0xF7, - 0x50, 0x19, 0xF2, 0xB3, 0xB0, 0x2C, 0x70, 0xB6, - 0x4A, 0x57, 0x95, 0x31, 0xC3, 0x26, 0x07, 0x2A, - 0xCF, 0x1B, 0xD0, 0xAA, 0xA0, 0x9F, 0x0A, 0x97, - 0x8B, 0x78, 0xAB, 0x22, 0xBD, 0x61, 0x19, 0xF8, - 0x8D, 0xD2, 0xD5, 0x72, 0xF8, 0x91, 0x9D, 0x47, - 0x4F, 0x59, 0x1D, 0xAE, 0x9F, 0xCE, 0x47, 0x53, - 0xC9, 0x85, 0xFB, 0x25, 0x04, 0x25, 0xF2, 0x65, - 0x61, 0xFF, 0xA9, 0x44, 0x3F, 0x23, 0x76, 0x68, - 0x9F, 0xEB, 0x48, 0xC4, 0xCE, 0x51, 0x46, 0x04, - 0x52, 0x6A, 0x10, 0x0A, 0xF3, 0x3F, 0x0D, 0x43, - 0x37, 0xD1, 0x60, 0x42, 0x22, 0xC4, 0xD9, 0xF9, - 0x3A, 0x8E, 0x69, 0xE4, 0xCC, 0xD3, 0x66, 0x69, - 0x09, 0x0C, 0x5D, 0xFB, 0x0E, 0x95, 0x49, 0x42, - 0x29, 0xFF, 0x9B, 0x20, 0xCC, 0xB1, 0xAC, 0x81, - 0xB8, 0x1A, 0x36, 0xD6, 0x3A, 0x85, 0x0D, 0xDB, - 0x33, 0x33, 0x4D, 0xAA, 0x51, 0x46, 0xBF, 0x36, - 0xFE, 0x18, 0x80, 0x1E, 0x3B, 0xEB, 0xD0, 0xE9, - 0x1B, 0x5E, 0x1C, 0xFE, 0x7A, 0x98, 0x26, 0x85, - 0x0A, 0xF4, 0x39, 0x7D, 0x1B, 0x07, 0xD3, 0xB7, - 0x19, 0xE5, 0x7B, 0xB8, 0x32, 0xAF, 0x42, 0x34, - 0xC0, 0xCD, 0x9F, 0xD4, 0x0B, 0x88, 0x2F, 0xCE, - 0xDA, 0x93, 0x7E, 0xF9, 0xA2, 0xDA, 0x24, 0x59, - 0x2B, 0xCB, 0x5D, 0x1B, 0xE8, 0x3E, 0xC5, 0xF0, - 0x3D, 0xBD, 0xFB, 0xCB, 0x33, 0x5D, 0x90, 0xD5, - 0xC8, 0xA0, 0x2E, 0xE5, 0x3D, 0x50, 0x8E, 0xB5, - 0xDE, 0x4A, 0x96, 0x1B, 0x95, 0x8F, 0x75, 0x1E, - 0x5F, 0x89, 0xA1, 0xD2, 0x88, 0x95, 0xA3, 0xDB, - 0x7B, 0x62, 0xEF, 0x4A, 0xE1, 0x6D, 0x28, 0xFB, - 0x78, 0x9B, 0x32, 0x03, 0xAD, 0x24, 0x63, 0xD6, - 0xEA, 0xB8, 0x3A, 0x6D, 0x20, 0xCE, 0xA1, 0x31, - 0x4A, 0xE0, 0x2A, 0x3F, 0xF6, 0xF6, 0x53, 0x15, - 0x4A, 0xE1, 0x44, 0x23, 0x81, 0x86, 0x21, 0x47, - 0x41, 0xC2, 0x36, 0x14, 0x81, 0x83, 0xBC, 0x39, - 0xAE, 0xDF, 0x44, 0xDA, 0x97, 0xF7, 0x31, 0xCE, - 0x3D, 0xCB, 0x61, 0xA4, 0xCF, 0xE1, 0x4F, 0x9E, - 0x84, 0xAA, 0x05, 0xAB, 0x1C, 0x1B, 0x95, 0x1D, - 0x20, 0x15, 0x52, 0x33, 0xFA, 0xFA, 0xF1, 0x6C, - 0xF1, 0xBD, 0x0B, 0xAF, 0xE1, 0x99, 0xE6, 0x5D, - 0x56, 0x34, 0x53, 0xBF, 0xE5, 0x5D, 0x5F, 0x47, - 0x4A, 0xB1, 0x05, 0x94, 0xD7, 0x38, 0xA8, 0xC1, - 0x06, 0x28, 0x8D, 0x69, 0xD0, 0x7A, 0x16, 0x88, - 0x60, 0x14, 0x63, 0xF3, 0xBD, 0x21, 0x46, 0x81, - 0x9C, 0x83, 0x72, 0x6D, 0x14, 0xC6, 0xA8, 0x08, - 0x39, 0xB8, 0x79, 0x0B, 0x57, 0x16, 0xE7, 0x72, - 0xF6, 0xC2, 0x4C, 0x2B, 0xEB, 0x7E, 0x2C, 0xF3, - 0x7B, 0x3F, 0x42, 0xAC, 0xDD, 0x47, 0x3E, 0x8C, - 0xCD, 0xBE, 0x48, 0x4D, 0x6E, 0x07, 0xB0, 0x73, - 0xDE, 0xCB, 0x17, 0x4A, 0xC3, 0xB8, 0xBB, 0x2E, - 0xF5, 0x4E, 0x6D, 0xF9, 0xE0, 0x20, 0x71, 0xFA, - 0x60, 0x0A, 0xE5, 0x59, 0x67, 0xEB, 0x6F, 0x70, - 0x2F, 0x71, 0x91, 0x59, 0xF0, 0xEB, 0x06, 0x5C, - 0xC4, 0x60, 0x48, 0xE8, 0x75, 0xE7, 0xCF, 0x42, - 0x71, 0xAD, 0x2E, 0xDA, 0xF9, 0x10, 0x82, 0x9A, - 0xF6, 0x13, 0xBA, 0x89, 0xFC, 0x61, 0x2A, 0x00, - 0xFD, 0xAE, 0x53, 0x7B, 0x09, 0x3A, 0xE8, 0xCB, - 0xE6, 0xB7, 0x0D, 0x03, 0x01, 0xFA, 0x2E, 0x13, - 0xA9, 0x16, 0x38, 0x1C, 0x92, 0xEC, 0xB4, 0x51, - 0xA3, 0x6E, 0x3F, 0xA8, 0xB7, 0x37, 0x36, 0x20, - 0xC0, 0x71, 0xA3, 0x05, 0x34, 0xED, 0xCB, 0x4A, - 0x3F, 0x11, 0x31, 0x17, 0xA5, 0x02, 0xD6, 0xA7, - 0x2D, 0xE6, 0xC7, 0x7B, 0xBB, 0xF6, 0xAE, 0x99, - 0x85, 0x9A, 0xAC, 0xE6, 0x4A, 0x92, 0x8C, 0x37, - 0x4B, 0xD2, 0xC4, 0x65, 0x2A, 0xC9, 0x7E, 0xB7, - 0x44, 0xD2, 0x9A, 0x70, 0xCE, 0xA9, 0xA1, 0x9D, - 0x70, 0x13, 0x49, 0x7B, 0xCA, 0xB6, 0x96, 0x31, - 0x43, 0x3F, 0x9E, 0xD1, 0xFE, 0x20, 0xF8, 0x0B, - 0x59, 0x83, 0xE1, 0x28, 0x8B, 0xB6, 0xA2, 0xBE, - 0x91, 0x54, 0x3E, 0xD4, 0x79, 0x28, 0xBB, 0x5E, - 0x46, 0x2D, 0x01, 0xE9, 0xC0, 0xB7, 0xFF, 0xFA, - 0xC0, 0x6C, 0x10, 0xF1, 0x52, 0xF4, 0x3C, 0x32, - 0x9E, 0x89, 0xDF, 0x8A, 0x79, 0x99, 0x6A, 0x09, - 0x79, 0x8A, 0x36, 0x76, 0x40, 0xBE, 0x9F, 0xB5, - 0x3D, 0xCE, 0x27, 0xBD, 0x0B, 0xAA, 0x9B, 0xF0, - 0x21, 0xBF, 0x10, 0xD2, 0xFC, 0xFE, 0x5B, 0x13, - 0xFD, 0x7D, 0x84, 0xD1, 0xC1, 0xEB, 0xC0, 0xBC, - 0xEC, 0x26, 0xD0, 0x87, 0x80, 0xD1, 0x3B, 0x99, - 0x47, 0x67, 0x26, 0x61, 0xE0, 0xFA, 0x5F, 0xAE, - 0x6F, 0x31, 0x5B, 0x6D, 0xE4, 0x01, 0x68, 0xC2, - 0x35, 0x1D, 0xE3, 0x1F, 0x41, 0xFF, 0x6C, 0x53, - 0x32, 0x26, 0xE1, 0xBC, 0xE3, 0xF8, 0xE2, 0x16, - 0xAF, 0x3B, 0xE6, 0x4C, 0x69, 0x33, 0x72, 0xA0, - 0x66, 0xB1, 0x75, 0xF7, 0x26, 0xCF, 0xCD, 0x64, - 0x2B, 0xAE, 0x98, 0x02, 0x92, 0xC1, 0xCB, 0x65, - 0xE0, 0x1F, 0x07, 0x29, 0x64, 0x0A, 0xB0, 0x09, - 0xCB, 0x98, 0x89, 0x2D, 0x6C, 0xFE, 0x40, 0x03, - 0x34, 0x55, 0xDE, 0xE7, 0x30, 0x33, 0xB6, 0xD5, - 0xE1, 0x9C, 0x59, 0x9F, 0x8A, 0x40, 0x0E, 0xB1, - 0x41, 0x52, 0x7D, 0xF2, 0xBB, 0xDD, 0xEF, 0x50, - 0xBB, 0xD5, 0xFB, 0x55, 0xAA, 0x5E, 0xFD, 0xB3, - 0x5D, 0x08, 0x56, 0x9B, 0x02, 0x97, 0xE2, 0x48, - 0x14, 0x69, 0xF1, 0x7B, 0x87, 0xB5, 0x08, 0x93, - 0x6A, 0x9C, 0x5C, 0x11, 0x08, 0x9A, 0xE9, 0xE4, - 0xB0, 0xCA, 0xC5, 0x74, 0x93, 0x93, 0xC8, 0x03, - 0xE4, 0x70, 0x39, 0xF5, 0x1B, 0x5C, 0xBD, 0x42, - 0xA6, 0xC9, 0xE1, 0x9E, 0xC3, 0xF6, 0x3C, 0x23, - 0x32, 0xE8, 0x77, 0x68, 0xA9, 0x60, 0xFA, 0x02, - 0x18, 0x6B, 0x7A, 0x2B, 0x02, 0x92, 0x65, 0x09, - 0x11, 0x46, 0x73, 0x04, 0x63, 0xDF, 0x8B, 0x37, - 0x5F, 0x24, 0xAA, 0x83, 0xBD, 0xD4, 0x1D, 0x13, - 0x04, 0xFC, 0x2F, 0xB5, 0x2D, 0xA1, 0x0F, 0x1F, - 0xED, 0x65, 0x29, 0x08, 0xCF, 0x8C, 0x52, 0x8F, - 0xB2, 0x62, 0x5F, 0x39, 0x3F, 0xC8, 0xC7, 0xB3, - 0x3F, 0xAD, 0x45, 0xBA, 0xD4, 0x7D, 0x38, 0x3D, - 0x2C, 0x04, 0xCF, 0x32, 0xE8, 0x07, 0x42, 0x5F, - 0x93, 0xD2, 0x35, 0x07, 0x21, 0xB7, 0xB2, 0xF5, - 0x96, 0x64, 0x8E, 0xB5, 0xE1, 0x38, 0x6B, 0x43, - 0xD1, 0x2E, 0xFD, 0xDB, 0x8F, 0xE2, 0x43, 0x6A, - 0xEC, 0x27, 0x8E, 0xE7, 0x68, 0x75, 0xB5, 0x23, - 0xC5, 0x43, 0x1D, 0x99, 0x48, 0x57, 0x73, 0xD9, - 0xAD, 0xBC, 0xD0, 0x14, 0xDD, 0x87, 0xBC, 0x68, - 0xFB, 0x82, 0xEE, 0x47, 0x4B, 0x22, 0xA5, 0x43, - 0x3A, 0xF9, 0xF9, 0x91, 0xFC, 0x34, 0xB2, 0x58, - 0x34, 0xDF, 0x13, 0x09, 0x9A, 0x46, 0xF5, 0x68, - 0xAF, 0xD1, 0x15, 0x5F, 0x32, 0x1B, 0x9D, 0xA9, - 0xE9, 0xC0, 0x63, 0x47, 0xAB, 0x3C, 0x1F, 0x59, - 0xF7, 0xEA, 0x0E, 0xD6, 0xCF, 0x47, 0xB3, 0xE9, - 0xAF, 0x65, 0x7A, 0xA7, 0xAE, 0x9B, 0xF8, 0x26, - 0x0B, 0x96, 0x9D, 0xE4, 0xAD, 0x24, 0xD3, 0xA8, - 0xCE, 0x95, 0xE5, 0x77, 0xD0, 0x44, 0x13, 0x05, - 0x06, 0x4E, 0x07, 0xB9, 0xA2, 0xC7, 0x5C, 0x3C, - 0x43, 0x80, 0x1F, 0xCE, 0xB7, 0x36, 0xFE, 0x3D, - 0x27, 0x1B, 0xE1, 0xF3, 0x6B, 0xFF, 0xC8, 0xE4, - 0x3D, 0xB1, 0x4A, 0x16, 0x24, 0x76, 0xBA, 0xEA, - 0x9D, 0x34, 0x6B, 0x52, 0x11, 0xAB, 0xD0, 0x06, - 0x08, 0xB1, 0x5A, 0xF3, 0xB5, 0xE6, 0x3A, 0x00, - 0xFF, 0x92, 0x8D, 0x1E, 0xA1, 0xA1, 0x8D, 0x75, - 0xFA, 0x7C, 0x6C, 0x1B, 0x0F, 0xB6, 0x27, 0x2E, - 0x55, 0xC3, 0xFE, 0x7E, 0x4D, 0x42, 0x05, 0xE5, - 0xCF, 0x0A, 0x1F, 0x87, 0x18, 0x30, 0x4E, 0x14, - 0xF2, 0xB4, 0xCC, 0x54, 0x3D, 0x04, 0x37, 0x34, - 0x1A, 0x4A, 0x31, 0x16, 0x01, 0xA9, 0x2E, 0x92, - 0x56, 0x6B, 0x7D, 0xFB, 0x42, 0x64, 0xE8, 0x70, - 0xE1, 0xB3, 0xA8, 0x75, 0xED, 0xBC, 0x00, 0x3A, - 0x56, 0x19, 0x70, 0xCF, 0x8A, 0x66, 0x9F, 0x3D, - 0x1B, 0x69, 0x28, 0x8C, 0xC6, 0xE3, 0x59, 0xCE, - 0x28, 0xCA, 0x65, 0xF9, 0xDA, 0xE8, 0xCE, 0xCA, - 0x74, 0x3C, 0x1C, 0x8D, 0x9F, 0xFB, 0x55, 0x08, - 0x82, 0x4A, 0x83, 0x61, 0xE3, 0x3B, 0x43, 0x1A, - 0x2E, 0x9E, 0x9A, 0x99, 0x78, 0x47, 0xD2, 0xE6, - 0xE4, 0x3C, 0x83, 0xF0, 0x22, 0x62, 0xE2, 0x94, - 0x6D, 0xF7, 0x72, 0x6D, 0x54, 0xE3, 0xE6, 0xC9, - 0xCC, 0xDB, 0x6D, 0x3F, 0x13, 0x63, 0x46, 0xC1, - 0x1E, 0x59, 0x42, 0xE7, 0xA1, 0xBF, 0x85, 0x0C, - 0x2E, 0x99, 0xB4, 0xFA, 0xCE, 0x75, 0xFD, 0x40, - 0x88, 0x69, 0x33, 0x90, 0x7C, 0xCD, 0xFC, 0x0D, - 0xE1, 0x17, 0x70, 0x20, 0x31, 0x94, 0x1D, 0x00, - 0x1E, 0x2A, 0x68, 0x3C, 0x55, 0x78, 0xFD, 0x33, - 0x54, 0x21, 0x2C, 0xEA, 0xD9, 0x69, 0xBF, 0x1C, - 0x81, 0x23, 0x9E, 0xEC, 0xC7, 0x74, 0xFD, 0x0B, - 0x88, 0x3D, 0x0E, 0xEE, 0x82, 0x4B, 0x10, 0xB8, - 0x79, 0xCF, 0x70, 0x7C, 0xB2, 0x68, 0x47, 0x45, - 0x22, 0x06, 0x1E, 0x92, 0x7B, 0x12, 0x43, 0x24, - 0x41, 0x15, 0xC6, 0x69, 0xE9, 0xEB, 0x27, 0x2B, - 0x60, 0xA6, 0x44, 0xF5, 0x19, 0xEF, 0xEC, 0x06, - 0x34, 0x08, 0xB6, 0x58, 0x47, 0x2E, 0x91, 0x61, - 0xA1, 0xF7, 0x44, 0xFD, 0x66, 0x16, 0x9F, 0x0C, - 0xAE, 0x36, 0xB4, 0x2E, 0x23, 0x79, 0xCB, 0xE8, - 0x1E, 0x6E, 0x51, 0xA0, 0xF5, 0x34, 0x15, 0x18, - 0x4E, 0xA0, 0x06, 0xB2, 0x27, 0x0B, 0x33, 0xE2, - 0xCA, 0x36, 0x4C, 0xDB, 0x33, 0xAA, 0xAE, 0x77, - 0xFF, 0xD9, 0x53, 0xDB, 0x39, 0x70, 0x4D, 0x49, - 0x0C, 0xE9, 0xAC, 0x6F, 0x2D, 0xD1, 0xC7, 0xA1, - 0x8E, 0x61, 0x74, 0x19, 0xA9, 0xAA, 0xFB, 0x37, - 0xE7, 0x23, 0x9B, 0x23, 0x6A, 0x4B, 0x74, 0xCE, - 0x63, 0xE4, 0xA0, 0xAD, 0xFF, 0x85, 0x5D, 0xCD, - 0x78, 0xF6, 0x45, 0x8E, 0x76, 0x0B, 0xFD, 0x1D, - 0x2A, 0xB9, 0x5E, 0x83, 0xC0, 0x3B, 0x6F, 0xAE, - 0x0C, 0xD3, 0xC5, 0xCE, 0xEE, 0xEE, 0x1C, 0x69, - 0x51, 0x59, 0x65, 0xA3, 0x35, 0xFC, 0xF7, 0x8E, - 0x80, 0xAA, 0x73, 0x93, 0x39, 0x54, 0x21, 0x27, - 0x17, 0x0B, 0x2C, 0x3E, 0xE1, 0x0B, 0x0E, 0xAA, - 0x09, 0x9A, 0xC7, 0xAD, 0x4C, 0xD7, 0x6E, 0x7F, - 0xE4, 0xC1, 0x16, 0x4E, 0x62, 0xF4, 0xE5, 0x80, - 0x7D, 0xC0, 0x06, 0x1F, 0x77, 0xE4, 0xA8, 0xA5, - 0x28, 0xD7, 0x10, 0x37, 0x59, 0x30, 0xCB, 0x75, - 0x5B, 0x28, 0xBF, 0xFD, 0x92, 0x8C, 0xB0, 0x7B, - 0xB4, 0xA1, 0x07, 0xCD, 0xCA, 0xBB, 0x30, 0x8A, - 0x48, 0x65, 0x0D, 0xA4, 0xE5, 0x74, 0xD9, 0xBF, - 0x56, 0x07, 0xF5, 0x83, 0xDA, 0xC3, 0x40, 0xD7, - 0x20, 0x93, 0xEF, 0xB1, 0x2B, 0xBF, 0x93, 0x41, - 0x0F, 0x1E, 0xF5, 0xC9, 0x51, 0x6C, 0x74, 0x4D, - 0x23, 0x15, 0xEC, 0x9E, 0x00, 0x0A, 0x8D, 0xC5, - 0xD1, 0x7A, 0x7B, 0x6F, 0x0D, 0x07, 0x9D, 0x78, - 0x4B, 0x6D, 0x90, 0x19, 0x3F, 0x6E, 0x3E, 0xE7, - 0xEA, 0x0E, 0xAB, 0xFC, 0x6F, 0x68, 0xC5, 0x2B, - 0x37, 0xCB, 0xCE, 0x82, 0x18, 0xAF, 0xA3, 0x67, - 0x0A, 0x80, 0xBC, 0x17, 0xB9, 0x5D, 0x7B, 0x40, - 0x53, 0x62, 0x26, 0x35, 0x8F, 0x04, 0xAC, 0xD9, - 0x2A, 0x1B, 0xE1, 0x5B, 0x26, 0xA4, 0xE5, 0x81, - 0x7E, 0x62, 0x8B, 0xA6, 0x79, 0xB3, 0x52, 0x72, - 0x03, 0xCD, 0x36, 0x32, 0x62, 0x8E, 0xC8, 0x3A, - 0xA4, 0xF2, 0x18, 0x6D, 0x2F, 0x00, 0x5D, 0x5D, - 0xFE, 0x6F, 0x7F, 0xDB, 0x4F, 0xED, 0xAC, 0x9E, - 0x89, 0xD6, 0x66, 0xE3, 0x03, 0xBB, 0x56, 0x83, - 0x06, 0x15, 0x6C, 0x56, 0xF0, 0x95, 0x34, 0xE2, - 0x5C, 0x61, 0x9A, 0xB3, 0xB9, 0x50, 0x18, 0xF4, - 0x89, 0x6B, 0xAC, 0xAA, 0x48, 0x34, 0xF6, 0xD2, - 0xD8, 0xFE, 0x14, 0xA9, 0x38, 0xAA, 0x10, 0xE5, - 0x30, 0x54, 0xF0, 0x00, 0x84, 0x44, 0xAC, 0x2E, - 0xEA, 0x25, 0x38, 0xC1, 0x23, 0x0E, 0x6A, 0x18, - 0xC9, 0x2B, 0x01, 0xD9, 0x14, 0x7F, 0xDC, 0xEF, - 0xC9, 0xC8, 0xDA, 0xC1, 0xD4, 0xEC, 0xC8, 0xCF, - 0x1F, 0x96, 0x2E, 0xFA, 0x1B, 0x8C, 0xD3, 0xC9, - 0x69, 0x00, 0x0B, 0x7E, 0xBA, 0xC5, 0x98, 0xDC, - 0xA4, 0x5E, 0xB4, 0x0B, 0xCF, 0xB1, 0x98, 0x51, - 0x48, 0x38, 0x51, 0xCF, 0x34, 0x0F, 0x3E, 0x8C, - 0x23, 0x7A, 0x9E, 0xFF, 0x1C, 0x9F, 0x21, 0xE4, - 0x97, 0x55, 0x41, 0xC6, 0x1A, 0x8F, 0xEF, 0x2A, - 0xC6, 0x05, 0x7F, 0x59, 0xDC, 0xB2, 0x3A, 0x80, - 0xE8, 0x06, 0x10, 0xCD, 0x85, 0xDB, 0x20, 0x3C, - 0x35, 0xD2, 0x4B, 0xC8, 0x2B, 0x9C, 0xD7, 0x82, - 0x46, 0xF5, 0x9F, 0xEB, 0xB2, 0x48, 0x32, 0xD7, - 0xCD, 0x66, 0x4C, 0x99, 0x51, 0x88, 0xE0, 0x28, - 0x1C, 0xD7, 0x86, 0x79, 0x00, 0xDC, 0x0D, 0xF4, - 0x4D, 0x40, 0x90, 0x80, 0x26, 0x8B, 0x79, 0xE9, - 0x56, 0x82, 0x88, 0x5F, 0x22, 0x87, 0x70, 0x73, - 0x4F, 0xA5, 0x35, 0x18, 0xEC, 0x80, 0xCE, 0x23, - 0x06, 0xCE, 0x14, 0x48, 0x52, 0x4E, 0xF0, 0x18, - 0x43, 0x03, 0xD4, 0x50, 0xC7, 0x6E, 0xA6, 0x3B, - 0x73, 0x3E, 0xB0, 0xC8, 0xDC, 0x48, 0xBF, 0x12, - 0x42, 0x3A, 0xD2, 0x38, 0x89, 0xCF, 0xCD, 0xD8, - 0x91, 0xE5, 0x95, 0x00, 0x47, 0x24, 0x0D, 0xC0, - 0xC3, 0x8A, 0xB2, 0xDB, 0xC1, 0x65, 0xB8, 0x1E, - 0x63, 0x10, 0x02, 0xEA, 0x6F, 0x74, 0x11, 0x9E, - 0x27, 0xF9, 0xF8, 0x60, 0x73, 0xBF, 0x2D, 0xF7, - 0x10, 0x81, 0x86, 0x76, 0x98, 0x0C, 0x4C, 0xB6, - 0xBD, 0x53, 0xF9, 0xA5, 0x72, 0x17, 0x78, 0xB8, - 0x9F, 0x59, 0xC6, 0x8C, 0x89, 0x35, 0xF5, 0x03, - 0x1C, 0x8A, 0x93, 0x36, 0x7D, 0x71, 0x70, 0x57, - 0xFD, 0x4D, 0x5E, 0xFA, 0xBE, 0xDE, 0x70, 0x2C, - 0xC6, 0x45, 0xEF, 0xB6, 0xD7, 0xF4, 0x4C, 0x86, - 0x0F, 0xFF, 0x76, 0x37, 0xAA, 0xD9, 0x72, 0x24, - 0x8C, 0x84, 0x4D, 0x15, 0x13, 0x39, 0x20, 0x07, - 0x38, 0x91, 0xC3, 0x13, 0x5D, 0x29, 0x78, 0x68, - 0xB7, 0xDA, 0x86, 0xF0, 0x97, 0xD8, 0xFB, 0x39, - 0xC1, 0x3B, 0xA1, 0x4C, 0x4F, 0x24, 0x75, 0x16, - 0xAB, 0xA4, 0xC5, 0xF8, 0xCE, 0x38, 0x18, 0x48, - 0x2C, 0x8F, 0xF6, 0x0C, 0xCA, 0x51, 0xFD, 0xB2, - 0xCE, 0xE9, 0x6B, 0xC1, 0x13, 0x8D, 0xC0, 0x4A, - 0x86, 0xF8, 0x57, 0x72, 0x75, 0x91, 0xAA, 0xE6, - 0xF8, 0x7C, 0x30, 0x05, 0x9B, 0x3E, 0x81, 0xB6, - 0x80, 0x55, 0xB2, 0x4E, 0xA2, 0xFA, 0x98, 0x36, - 0x86, 0x49, 0x8B, 0xFC, 0x9D, 0x9E, 0x7D, 0x59, - 0x50, 0x79, 0xEB, 0x64, 0x6E, 0x85, 0xB2, 0x12, - 0xCE, 0xDD, 0x21, 0xD0, 0x08, 0x7E, 0x0F, 0x2A, - 0xF6, 0x63, 0xEB, 0x77, 0x2A, 0x98, 0x47, 0xB1, - 0xDF, 0x21, 0x97, 0xAF, 0x13, 0x62, 0x6B, 0x89, - 0x7C, 0x24, 0x63, 0x7A, 0xF5, 0xBF, 0xE8, 0x18, - 0x16, 0xA8, 0xC9, 0x0D, 0x30, 0x48, 0x37, 0x5B, - 0x69, 0x94, 0x97, 0x14, 0x3E, 0x57, 0x71, 0x85, - 0xA7, 0x0E, 0x11, 0x50, 0x58, 0xA3, 0xA9, 0x11, - 0x2B, 0x2C, 0x43, 0x51, 0xB6, 0xCA, 0xD0, 0x09, - 0x28, 0x2B, 0x4F, 0x7C, 0xB8, 0xBD, 0xFC, 0x28, - 0x57, 0x77, 0xD7, 0xDF, 0xE8, 0xF5, 0x00, 0x00, + 0x4B, 0x3F, 0x52, 0xF0, 0x81, 0xB3, 0xD9, 0x14, + 0xBC, 0x7C, 0x6C, 0x07, 0x3B, 0x18, 0x2B, 0x26, + 0x8A, 0xDF, 0x51, 0x89, 0xE2, 0x98, 0xA8, 0x69, + 0xBF, 0xB9, 0x91, 0xB1, 0x99, 0x99, 0x3C, 0x10, + 0x42, 0xDE, 0xF5, 0xB5, 0x92, 0x70, 0xB6, 0xCD, + 0x3F, 0xF8, 0xF9, 0x07, 0xA1, 0xCB, 0x0D, 0x3B, + 0x6F, 0xED, 0xCA, 0x14, 0x38, 0x38, 0xF8, 0xF8, + 0x1E, 0x0C, 0x37, 0x0F, 0xFE, 0xEE, 0x6B, 0x25, + 0xCD, 0x07, 0x03, 0x56, 0x41, 0xA0, 0x51, 0x94, + 0x4E, 0xAB, 0x51, 0x6C, 0xFB, 0xB8, 0x01, 0x53, + 0x6B, 0x4F, 0x26, 0x2B, 0x16, 0x19, 0x8E, 0x7D, + 0xDB, 0x1D, 0x61, 0xC3, 0x5A, 0x64, 0xD9, 0x0D, + 0x39, 0x48, 0xCE, 0xAA, 0xC8, 0xEE, 0x58, 0x0D, + 0xCE, 0xF5, 0x40, 0xED, 0x99, 0xD9, 0x12, 0xBB, + 0xA2, 0xBC, 0x4F, 0x51, 0x45, 0xBB, 0x94, 0x9C, + 0x73, 0xCC, 0xBD, 0x58, 0x26, 0x13, 0xB1, 0x0E, + 0xAA, 0xE8, 0x63, 0xAC, 0xA3, 0x46, 0x83, 0xEB, + 0x92, 0x2B, 0x3D, 0xAD, 0xFC, 0x74, 0xF7, 0x6F, + 0x47, 0xE4, 0x97, 0x86, 0x02, 0x59, 0x24, 0x02, + 0xD9, 0x15, 0x43, 0x94, 0xEB, 0x09, 0xFB, 0xC2, + 0xEB, 0xCC, 0xC5, 0x94, 0x73, 0x2F, 0x2D, 0x8B, + 0xC3, 0x83, 0x50, 0xE5, 0x53, 0x5A, 0x44, 0x12, + 0xA7, 0x7A, 0xDD, 0x79, 0x16, 0x60, 0x45, 0x76, + 0xFD, 0x6A, 0x36, 0x31, 0xE5, 0x15, 0xBA, 0xF2, + 0x6A, 0x6F, 0x9C, 0xA4, 0x06, 0x1E, 0xBB, 0xDD, + 0x3B, 0xEC, 0x71, 0x79, 0xAD, 0x58, 0x55, 0x2A, + 0x5B, 0x50, 0x8F, 0x31, 0x34, 0x8A, 0x56, 0xAD, + 0x1A, 0xDA, 0x7A, 0x05, 0x35, 0x2C, 0x72, 0xC0, + 0x04, 0xB9, 0x4C, 0x47, 0xE7, 0x04, 0x9A, 0x10, + 0xB3, 0xA5, 0x9B, 0xF2, 0x38, 0xA8, 0xDF, 0xC6, + 0xC7, 0x01, 0x9A, 0x17, 0xF0, 0x5D, 0x5B, 0xFC, + 0xB9, 0xD9, 0x3D, 0x9D, 0x1C, 0xCB, 0xCB, 0x47, + 0xF8, 0xC4, 0x38, 0x09, 0x8F, 0xDB, 0xDF, 0xE2, + 0x3F, 0x9F, 0x78, 0xBC, 0x28, 0x06, 0x99, 0x08, + 0xC6, 0xB9, 0x89, 0x8B, 0x43, 0x4C, 0xBF, 0x37, + 0x78, 0x7E, 0x1A, 0xF6, 0xA6, 0xB8, 0x27, 0xE8, + 0x30, 0xE9, 0xF7, 0x62, 0x9C, 0xD8, 0xF5, 0x10, + 0x70, 0xC4, 0xC8, 0xA8, 0xDE, 0xB2, 0x60, 0xD0, + 0x7C, 0x3E, 0x41, 0xD8, 0x49, 0x04, 0x84, 0x87, + 0x74, 0x91, 0xB3, 0x9A, 0xA6, 0xD9, 0xE1, 0x0D, + 0x91, 0x74, 0x8B, 0x64, 0xE3, 0x31, 0x60, 0x62, + 0x9D, 0x8A, 0xE4, 0x3E, 0xFD, 0x5F, 0x85, 0x78, + 0x1E, 0x69, 0xF7, 0x6B, 0x68, 0x95, 0xC1, 0x41, + 0xEB, 0xCD, 0xDF, 0xEE, 0xB4, 0x85, 0xA0, 0x0B, + 0xDB, 0xA4, 0xF7, 0xC9, 0x91, 0xF5, 0x3F, 0x2F, + 0x84, 0x93, 0x39, 0x26, 0xAF, 0x39, 0xE6, 0x96, + 0x4A, 0xBF, 0x2D, 0xFE, 0xBB, 0xC1, 0x9A, 0x7E, + 0x31, 0xC5, 0x07, 0x97, 0xB8, 0xDA, 0x29, 0x31, + 0xE1, 0x0F, 0x3D, 0xAC, 0x49, 0x3F, 0x19, 0x8D, + 0xFD, 0x78, 0x5D, 0x21, 0xAD, 0xB2, 0xC0, 0x62, + 0xB0, 0x97, 0xE8, 0x89, 0xA2, 0x07, 0x37, 0xF1, + 0x86, 0x00, 0x8F, 0x29, 0x28, 0xF6, 0xB8, 0x4D, + 0x6E, 0x09, 0xE9, 0x75, 0xA8, 0xF2, 0xAA, 0xAD, + 0xC7, 0x85, 0x23, 0x42, 0x34, 0xFD, 0xA0, 0x37, + 0x03, 0xA7, 0xC2, 0x1F, 0x81, 0x2D, 0x65, 0x0B, + 0xD2, 0x51, 0x0B, 0x30, 0xF0, 0x55, 0x00, 0x81, + 0x04, 0x7A, 0x15, 0x5C, 0x84, 0x85, 0x86, 0xA9, + 0x6F, 0x10, 0x0D, 0x77, 0x4F, 0x3E, 0x39, 0xE0, + 0x29, 0xB0, 0x77, 0x7C, 0xD3, 0x3E, 0x68, 0x31, + 0x8A, 0x11, 0xC1, 0x98, 0x02, 0x93, 0xFA, 0xD3, + 0xE7, 0x87, 0xD2, 0x0D, 0xFE, 0x7E, 0xEE, 0x70, + 0x53, 0xC0, 0x5E, 0xEB, 0x6A, 0x15, 0x9B, 0xAA, + 0xD4, 0x02, 0x0B, 0x9E, 0xC3, 0xF5, 0x37, 0xDA, + 0x4D, 0xAD, 0xAF, 0xB3, 0xB1, 0xBB, 0x1D, 0xBE, + 0xB2, 0xD5, 0xB8, 0xF9, 0xD0, 0x5A, 0x01, 0x97, + 0x98, 0xEA, 0xE0, 0xED, 0x09, 0x9D, 0xB0, 0x66, + 0xD7, 0x3E, 0xE8, 0xE9, 0xA5, 0x6D, 0xE3, 0x68, + 0xE8, 0x78, 0xA7, 0xFF, 0x39, 0x14, 0x0D, 0x80, + 0x21, 0xD5, 0x00, 0x85, 0xE6, 0x25, 0x29, 0x41, + 0xAB, 0x31, 0x53, 0x09, 0xCB, 0x53, 0xAA, 0xA4, + 0x9E, 0x86, 0x34, 0x7F, 0xBA, 0xD5, 0x4A, 0x1F, + 0x87, 0x3E, 0x0C, 0xB4, 0xB8, 0x6A, 0x8D, 0x5B, + 0x1B, 0x2A, 0x95, 0xD4, 0x85, 0xF3, 0x7A, 0x9F, + 0xB6, 0x10, 0x5D, 0xF8, 0x44, 0x0F, 0xDB, 0x85, + 0x78, 0xF2, 0x62, 0x4C, 0x07, 0x93, 0x29, 0x56, + 0x9A, 0x75, 0xF3, 0x6F, 0x2C, 0x55, 0xD8, 0xD0, + 0x30, 0xFB, 0xFE, 0xAA, 0x88, 0x89, 0xAD, 0x74, + 0x6C, 0x32, 0x3B, 0x1A, 0xC4, 0xEC, 0x8C, 0x40, + 0x3E, 0x77, 0x5A, 0x6F, 0xBE, 0x59, 0x6E, 0x7E, + 0x6A, 0x5A, 0x28, 0x63, 0x57, 0x66, 0x25, 0x14, + 0x99, 0x40, 0x97, 0x6F, 0x7C, 0xC9, 0x36, 0x17, + 0xB4, 0x3F, 0xB1, 0x34, 0x89, 0x07, 0x4E, 0xCA, + 0xC5, 0xBE, 0xB1, 0xA4, 0xDF, 0xE5, 0x8B, 0x9A, + 0xD2, 0xE0, 0xC6, 0xA1, 0x5B, 0x76, 0xA7, 0xC2, + 0xD2, 0x08, 0x72, 0x5A, 0x31, 0x23, 0xCA, 0x4E, + 0x6F, 0x2C, 0x58, 0x47, 0xEE, 0x5F, 0xA8, 0x38, + 0x49, 0x19, 0xEF, 0x89, 0x01, 0x1D, 0x21, 0x9B, + 0x25, 0x7B, 0x3E, 0x4D, 0xC4, 0xF2, 0x09, 0x51, + 0x60, 0x84, 0x4C, 0xAE, 0xEA, 0xFC, 0xF8, 0x57, + 0x26, 0x0F, 0x1C, 0x63, 0xD3, 0xB0, 0x5A, 0x67, + 0xD3, 0xD0, 0xF2, 0xB0, 0xEC, 0x9D, 0xCC, 0x27, + 0x23, 0xF1, 0x37, 0x55, 0x75, 0x0B, 0xAE, 0x62, + 0xFC, 0xC3, 0x61, 0xCF, 0xB5, 0x84, 0xF7, 0x74, + 0xC0, 0x9A, 0xDF, 0x9A, 0x04, 0x31, 0xB2, 0x3E, + 0x48, 0x8C, 0x35, 0x9C, 0x0A, 0xEF, 0x5B, 0x1C, + 0x97, 0x87, 0xBD, 0x8F, 0x52, 0xB0, 0x83, 0xBC, + 0x9D, 0xBC, 0xC9, 0xB3, 0x03, 0x9F, 0x77, 0x7C, + 0x7E, 0x8E, 0xAB, 0xC8, 0x00, 0x78, 0x05, 0x0C, + 0xE6, 0xD4, 0x9C, 0x3B, 0xB7, 0x01, 0x68, 0xFA, + 0x21, 0x77, 0x29, 0x8F, 0xB0, 0xA8, 0xF7, 0x2C, + 0x1C, 0xD2, 0x8D, 0x66, 0x2A, 0x07, 0xDA, 0xE6, + 0xC7, 0xAC, 0xB7, 0xFB, 0x8E, 0x7F, 0xDD, 0x01, + 0xDF, 0xB2, 0x7C, 0x62, 0xEE, 0x68, 0x3F, 0x4E, + 0x5F, 0x88, 0xC7, 0xC1, 0xDD, 0xDD, 0x5E, 0xEC, + 0xC1, 0xC3, 0xAF, 0x85, 0x3F, 0x1F, 0xF6, 0xB1, + 0xD9, 0xDE, 0x67, 0x2F, 0x1B, 0xF6, 0x47, 0x3A, + 0xF0, 0x02, 0x1D, 0x8A, 0x3D, 0x4D, 0xD0, 0x4A, + 0x2F, 0xCA, 0x23, 0x25, 0xC7, 0x21, 0xCF, 0x1C, + 0x82, 0x16, 0x76, 0xD0, 0xA0, 0xD5, 0x74, 0x18, + 0x66, 0x25, 0xDE, 0x83, 0x1C, 0x84, 0x11, 0xF6, + 0x41, 0x79, 0xF9, 0x16, 0x7F, 0x78, 0xBC, 0xB2, + 0x2F, 0xB4, 0x1C, 0x2C, 0xDB, 0x63, 0xC4, 0xDB, + 0x5E, 0x13, 0x87, 0x66, 0xD3, 0x80, 0x35, 0x89, + 0x59, 0x8F, 0x11, 0x4F, 0x41, 0xBA, 0x42, 0xCD, + 0xB1, 0x34, 0x10, 0x20, 0x44, 0x9B, 0xA9, 0x96, + 0x56, 0x11, 0x39, 0x90, 0xB4, 0xE0, 0x22, 0xD8, + 0xDA, 0x20, 0xD7, 0x44, 0x49, 0x1C, 0x6E, 0xEA, + 0xB6, 0x7B, 0x91, 0x8E, 0x80, 0xFF, 0xF3, 0x43, + 0xCC, 0x5B, 0x4C, 0x8E, 0x58, 0xC3, 0x48, 0x4B, + 0x01, 0x25, 0xA6, 0x0C, 0x36, 0xAE, 0xF7, 0x63, + 0x89, 0x4D, 0x35, 0x14, 0x8B, 0x57, 0x8F, 0x41, + 0x7C, 0x3A, 0x98, 0xA1, 0x43, 0xED, 0xFE, 0x9F, + 0x8C, 0x95, 0xBC, 0xC3, 0x46, 0xC6, 0xF5, 0xEA, + 0xF9, 0x7A, 0xAD, 0x11, 0xDA, 0xE0, 0x1C, 0x47, + 0x7C, 0x22, 0x7A, 0x88, 0xD1, 0x0E, 0xCF, 0xDC, + 0xF4, 0x50, 0xB3, 0x7F, 0x88, 0x19, 0x68, 0x02, + 0x78, 0x49, 0xD9, 0xB4, 0x3E, 0x2B, 0xFF, 0x90, + 0xC6, 0xA3, 0x4A, 0xE4, 0x1B, 0x8B, 0xBD, 0x74, + 0x30, 0x83, 0xD3, 0xC5, 0x87, 0x86, 0xB0, 0x36, + 0x67, 0x1C, 0xD6, 0xEE, 0xD9, 0x4D, 0xAE, 0x51, + 0xF7, 0x61, 0x32, 0x47, 0xEF, 0x86, 0x07, 0xAC, + 0xF7, 0x4A, 0x3C, 0xCE, 0x93, 0x2F, 0x1C, 0x38, + 0x69, 0xBD, 0xB3, 0x5C, 0xA1, 0x7F, 0xC6, 0xBA, + 0x9F, 0x9C, 0x95, 0x6F, 0xF1, 0xD4, 0xD8, 0x80, + 0x94, 0x32, 0x5C, 0xAB, 0xCE, 0x41, 0x23, 0x3F, + 0xB1, 0xD8, 0x08, 0xEF, 0x41, 0x01, 0x03, 0x96, + 0xDE, 0xB0, 0xEC, 0xF5, 0x07, 0x34, 0xD8, 0x18, + 0xDD, 0xAB, 0x70, 0x01, 0x5A, 0x0A, 0xBD, 0xD1, + 0x92, 0x6D, 0xFA, 0x49, 0x1F, 0x71, 0x1A, 0xA8, + 0x5D, 0xA2, 0xA8, 0xEC, 0x60, 0xE3, 0x25, 0x5C, + 0xCF, 0x97, 0x5C, 0x23, 0xCC, 0x4E, 0x8D, 0xAF, + 0xDD, 0xED, 0x9F, 0xEC, 0x60, 0xA6, 0x46, 0x7C, + 0x45, 0xB0, 0x3C, 0xA4, 0x76, 0x49, 0x9A, 0xA3, + 0x31, 0xB0, 0xE3, 0x99, 0x95, 0x76, 0xCE, 0xC3, + 0x19, 0x1A, 0x9A, 0x62, 0xBC, 0x1B, 0xEA, 0xC1, + 0xEA, 0xF2, 0x0E, 0x18, 0xCF, 0xC3, 0x21, 0x61, + 0x27, 0xDE, 0x4A, 0xAE, 0x2E, 0x75, 0x20, 0x1F, + 0x9E, 0x42, 0x7E, 0x39, 0xBF, 0x92, 0x11, 0x50, + 0xEA, 0xB9, 0x49, 0x55, 0x9C, 0x02, 0x2D, 0x87, + 0x6F, 0xA2, 0x42, 0xC2, 0xA8, 0x45, 0xBC, 0xA7, + 0x23, 0x5F, 0x72, 0x1B, 0x00, 0x56, 0x78, 0x8A, + 0x44, 0xEC, 0xC3, 0xEB, 0x98, 0xF0, 0xF5, 0x02, + 0xB8, 0x9F, 0x8E, 0x74, 0x10, 0xEA, 0x56, 0x79, + 0xAE, 0x7C, 0x04, 0x34, 0xF1, 0x3A, 0xD8, 0x16, + 0x42, 0x1D, 0x2F, 0xEE, 0x30, 0xCB, 0xCB, 0x2D, + 0xAA, 0x6B, 0x85, 0x1C, 0xD1, 0xB6, 0xE9, 0x96, + 0xDA, 0x7A, 0x75, 0x7E, 0x4C, 0x4D, 0x85, 0x72, + 0xC8, 0xB6, 0x00, 0xDE, 0x85, 0xDD, 0xB6, 0x53, + 0x20, 0xD1, 0xCB, 0x71, 0xD9, 0x37, 0x83, 0x49, + 0xC0, 0xC4, 0x01, 0xAD, 0x4F, 0x9E, 0x91, 0x27, + 0x21, 0x39, 0x22, 0x8A, 0x8D, 0xA2, 0xF4, 0xFD, + 0x2F, 0x48, 0x89, 0x1A, 0x4D, 0xCB, 0x06, 0x6D, + 0x50, 0x1D, 0x44, 0x74, 0x83, 0xB6, 0x11, 0xBB, + 0x3C, 0x80, 0x55, 0x0A, 0x90, 0xEA, 0x0B, 0x73, + 0x2D, 0x63, 0x9D, 0x8B, 0x39, 0x26, 0xB6, 0xE7, + 0xC3, 0x54, 0x53, 0xED, 0x3C, 0xC1, 0x10, 0xBA, + 0xF5, 0x56, 0xCF, 0x46, 0xD8, 0xFC, 0x21, 0x77, + 0xE7, 0x6F, 0xB2, 0x66, 0x3B, 0x8B, 0xDD, 0x17, + 0x1E, 0x94, 0xC0, 0xAC, 0xAF, 0x25, 0xB9, 0x15, + 0x3B, 0x22, 0xBC, 0xA7, 0x49, 0x91, 0x67, 0x56, + 0xFB, 0x3E, 0xD3, 0x01, 0x8E, 0x09, 0x44, 0xB6, + 0xC3, 0xB9, 0xB6, 0xBF, 0xA1, 0x5B, 0x9B, 0xE8, + 0x03, 0xAC, 0x79, 0x33, 0x3C, 0xD2, 0xC3, 0xA2, + 0x7A, 0x26, 0xBC, 0x17, 0xCD, 0xA2, 0x57, 0x79, + 0x8A, 0xE1, 0x6B, 0x28, 0xB4, 0x63, 0xB6, 0xDF, + 0x3F, 0xA8, 0x7C, 0x2D, 0x74, 0x2D, 0x0F, 0x68, + 0x85, 0xBE, 0xE0, 0xBE, 0xC6, 0xE2, 0x0D, 0x01, + 0xE5, 0xDA, 0xDC, 0x86, 0x82, 0x3E, 0x92, 0xD6, + 0x0F, 0xEC, 0x79, 0xB0, 0xD2, 0x40, 0x24, 0x87, + 0x53, 0xE4, 0x20, 0x48, 0x38, 0x4C, 0x80, 0x42, + 0x89, 0x60, 0x48, 0x21, 0xA5, 0x7F, 0x4F, 0x9F, + 0x50, 0xAE, 0x0C, 0x38, 0x52, 0x7F, 0xE5, 0xA3, + 0x49, 0x38, 0xDD, 0xBC, 0xDC, 0xD9, 0xA1, 0xD0, + 0x20, 0x83, 0x9B, 0xEB, 0xB6, 0x2F, 0x9F, 0x41, + 0xFB, 0xA0, 0x80, 0x52, 0xAB, 0xB8, 0x2F, 0xAD, + 0xA8, 0x84, 0xCB, 0xE5, 0x63, 0x79, 0x11, 0x03, + 0xAA, 0x58, 0x55, 0x46, 0xEB, 0xFE, 0xB1, 0x12, + 0x72, 0xCC, 0x2E, 0x87, 0xA3, 0xB7, 0x5B, 0x3C, + 0x6B, 0xB1, 0x85, 0x3A, 0xE7, 0xF9, 0xCF, 0x55, + 0x85, 0xB2, 0x65, 0x3C, 0xF5, 0xEE, 0xA2, 0x44, + 0xD2, 0x04, 0xEB, 0x26, 0x9C, 0x56, 0xA2, 0x09, + 0x85, 0x16, 0x06, 0x59, 0xCB, 0x07, 0x25, 0xEE, + 0x13, 0xCE, 0x35, 0xD5, 0x5E, 0xB0, 0x95, 0xA5, + 0x34, 0x14, 0xF2, 0x32, 0xDF, 0x81, 0x08, 0xB1, + 0x80, 0x24, 0xEB, 0x0D, 0xBF, 0x34, 0x5E, 0xB5, + 0xCD, 0xAD, 0x0B, 0xCE, 0x72, 0x63, 0x50, 0x9A, + 0x34, 0x1D, 0x54, 0xA7, 0xD5, 0x34, 0xE5, 0x53, + 0xEA, 0xEF, 0xFE, 0x4E, 0x24, 0x2E, 0xA2, 0x3B, + 0xCF, 0xE5, 0x9A, 0x58, 0xA6, 0x04, 0x25, 0x88, + 0x2C, 0xB7, 0xE3, 0xB0, 0xC9, 0xE4, 0xAF, 0xE8, + 0x69, 0x8E, 0x3D, 0xF5, 0x6A, 0xFD, 0x6D, 0x61, + 0x1E, 0x91, 0x68, 0x74, 0x7D, 0x87, 0x35, 0xCF, + 0x92, 0x46, 0xD9, 0x4F, 0x21, 0x26, 0xBE, 0x72, + 0x7F, 0xB4, 0x2B, 0x22, 0x41, 0xA8, 0x3B, 0x34, + 0xF0, 0xB9, 0xEB, 0x47, 0x93, 0x8D, 0x72, 0x65, + 0x02, 0xC5, 0x4E, 0x45, 0x72, 0x76, 0x63, 0x31, + 0x62, 0x8F, 0xA5, 0xCD, 0xA8, 0x93, 0xC3, 0x53, + 0x76, 0xAB, 0x45, 0x38, 0xFF, 0x87, 0x17, 0xC2, + 0x79, 0x5B, 0x0F, 0x51, 0xF0, 0x8E, 0x11, 0x37, + 0x61, 0x2B, 0x89, 0xB0, 0xC1, 0xE2, 0xCD, 0x1F, + 0x09, 0x9E, 0x88, 0x55, 0x69, 0x23, 0xAE, 0x57, + 0xA1, 0xDA, 0xD2, 0xAF, 0xB1, 0x23, 0x0B, 0x50, + 0x94, 0xA1, 0xB2, 0x1B, 0xAD, 0x7D, 0xBB, 0xC3, + 0x33, 0xA9, 0x7F, 0x17, 0x93, 0x04, 0x71, 0x8F, + 0x32, 0x89, 0xB6, 0xDE, 0x31, 0x31, 0x5B, 0x74, + 0xC1, 0xA7, 0x3A, 0xC7, 0x75, 0x6F, 0xAA, 0x4D, + 0x7E, 0xB5, 0x68, 0xBB, 0xC6, 0xF7, 0xE7, 0x88, + 0xCD, 0x08, 0x9B, 0x39, 0x55, 0x64, 0xD2, 0x17, + 0x6B, 0x00, 0x56, 0xDF, 0xFE, 0x95, 0x2C, 0x77, + 0x48, 0xB0, 0x48, 0x30, 0x67, 0x20, 0xF6, 0x02, + 0xB6, 0x7E, 0x8F, 0x6A, 0xDC, 0xC9, 0x1F, 0x8E, + 0x3A, 0xA4, 0xB8, 0xC4, 0xD7, 0xFA, 0xC2, 0x33, + 0xAA, 0xF9, 0x36, 0x53, 0xAD, 0x22, 0x09, 0xE2, + 0xFF, 0x92, 0xDA, 0x30, 0xC2, 0xD5, 0x3F, 0xDE, + 0xF6, 0xF4, 0xC9, 0x0E, 0xAA, 0x0D, 0xE6, 0x0D, + 0x59, 0x4A, 0xDA, 0x39, 0x15, 0xDB, 0x24, 0x27, + 0x9D, 0x86, 0x74, 0x76, 0xEA, 0xD7, 0x57, 0xB4, + 0xC0, 0x26, 0x4A, 0x1D, 0xB8, 0xA1, 0xF5, 0x7A, + 0x1B, 0x5D, 0x71, 0x73, 0xBB, 0x1A, 0x96, 0x0C, + 0xE0, 0x2F, 0xDE, 0xFE, 0xF1, 0x60, 0xD5, 0x12, + 0x66, 0x7D, 0x65, 0x52, 0x68, 0xFC, 0xC3, 0xA1, + 0x53, 0xA4, 0x31, 0x47, 0x82, 0xA0, 0xEB, 0xFF, + 0x84, 0xF6, 0x5F, 0x14, 0xA0, 0xE3, 0xE1, 0x2A, + 0x13, 0x25, 0x0C, 0x07, 0xD0, 0x8C, 0x22, 0x5B, + 0x11, 0xA6, 0x83, 0x1B, 0xC2, 0x5C, 0x40, 0x46, + 0x7B, 0x76, 0x80, 0x04, 0xDD, 0xE0, 0xE8, 0x74, + 0xA5, 0x11, 0x44, 0xC1, 0x89, 0x20, 0xBD, 0xF2, + 0x86, 0x09, 0x0B, 0x59, 0xF5, 0x15, 0x64, 0xEA, + 0x40, 0x70, 0xFB, 0xBF, 0x61, 0xE3, 0x69, 0x64, + 0x35, 0xF2, 0x8F, 0x63, 0x33, 0x2B, 0x64, 0x49, + 0x6D, 0xF3, 0xEC, 0x8B, 0x65, 0xD5, 0x4E, 0x1C, + 0xF4, 0x78, 0x9D, 0xDA, 0xB1, 0x22, 0xDA, 0x6B, + 0x26, 0x4D, 0x31, 0x2A, 0x71, 0x1C, 0x12, 0x9E, + 0x3B, 0x07, 0xF4, 0xC6, 0xDA, 0x25, 0xA5, 0x61, + 0x73, 0xAF, 0x58, 0xB9, 0x0A, 0x71, 0xB7, 0xAC, + 0xFA, 0x31, 0x61, 0xA8, 0x1F, 0x59, 0xD1, 0x79, + 0x14, 0xC9, 0x9B, 0xBA, 0xC4, 0xF9, 0xA3, 0x14, + 0x97, 0x7A, 0x89, 0xCE, 0xF7, 0x69, 0x69, 0x43, + 0x60, 0x9B, 0xB4, 0x82, 0x79, 0x64, 0xFB, 0x29, + 0x76, 0x40, 0x3B, 0xD4, 0x99, 0x6F, 0x1E, 0x84, + 0x2B, 0xF5, 0xAA, 0xAE, 0x1E, 0xCC, 0xA1, 0x12, + 0x55, 0xB9, 0xE6, 0x00, 0x1C, 0x20, 0xF7, 0x2F, + 0x1F, 0xD5, 0xE3, 0x2C, 0xDA, 0x32, 0xD8, 0xA7, + 0xAC, 0x5F, 0x62, 0xB0, 0x9A, 0x0E, 0x61, 0x58, + 0x47, 0xCA, 0x74, 0x6F, 0x48, 0x95, 0x15, 0xCF, + 0x8F, 0x18, 0x31, 0x62, 0x85, 0x9F, 0x53, 0xB9, + 0x7E, 0x9E, 0x5C, 0xA8, 0x00, 0xEE, 0x62, 0x4F, + 0x72, 0x98, 0x43, 0xA0, 0x00, 0x91, 0x64, 0xA4, + 0xA9, 0xFF, 0x76, 0xEB, 0x34, 0xE4, 0x70, 0x41, + 0x84, 0x84, 0x8A, 0x13, 0x9A, 0xD9, 0x7D, 0x90, + 0x9F, 0x7A, 0x7E, 0xD1, 0x14, 0xF0, 0x87, 0xA4, + 0xB2, 0xE1, 0xB4, 0xA3, 0x03, 0x23, 0x91, 0x16, + 0x0B, 0x6F, 0x3A, 0x36, 0x49, 0xFF, 0x15, 0xAE, + 0xA2, 0xB7, 0x10, 0x7A, 0xF8, 0xA3, 0xB5, 0xFC, + 0xAD, 0x61, 0xD4, 0x3D, 0x60, 0x2E, 0x62, 0x86, + 0xA9, 0x00, 0x87, 0x0C, 0xC8, 0xCE, 0x24, 0xE3, + 0x9E, 0x78, 0xF0, 0x39, 0x7A, 0x0D, 0x7E, 0x27, + 0xE8, 0xE2, 0xD4, 0x77, 0x6A, 0x44, 0xCB, 0xA2, + 0x18, 0xEB, 0xCD, 0x88, 0xB3, 0xC2, 0x8C, 0x18, + 0x2A, 0x7C, 0x9F, 0x4D, 0xBB, 0x2D, 0xBB, 0x5E, + 0x98, 0x15, 0x63, 0xD6, 0x6C, 0xEE, 0xB7, 0x7E, + 0x7F, 0x90, 0x34, 0xBD, 0x42, 0x9D, 0x27, 0x63, + 0x7C, 0xF7, 0x97, 0xDE, 0x82, 0xE0, 0x1F, 0xEB, + 0xBC, 0xE2, 0x17, 0x1E, 0xFD, 0x01, 0x6E, 0x40, + 0x2A, 0x42, 0xD7, 0x8E, 0xA1, 0xAC, 0xE2, 0xCB, + 0x37, 0x0E, 0x75, 0xC9, 0x0A, 0xDF, 0xA1, 0xA7, + 0x93, 0xB2, 0x16, 0x9C, 0xC2, 0x65, 0x22, 0xDB, + 0x2F, 0x54, 0x6A, 0xC1, 0xDE, 0x34, 0xC9, 0x08, + 0x71, 0x20, 0xC4, 0x2A, 0x9F, 0x10, 0xC0, 0x0D, + 0x49, 0x3C, 0x25, 0x73, 0x01, 0x66, 0xF9, 0xD2, + 0x19, 0xFB, 0xDA, 0xD2, 0x22, 0xC8, 0xB2, 0x81, + 0x15, 0x54, 0x33, 0x13, 0x21, 0x08, 0x48, 0xFB, + 0x2F, 0x04, 0xBF, 0xDC, 0xE1, 0x5D, 0x32, 0x0C, + 0x36, 0x34, 0xA8, 0xE4, 0xD6, 0x37, 0x55, 0x51, + 0x59, 0x00, 0xC7, 0x5B, 0xFD, 0x09, 0x0A, 0xD7, + 0x8D, 0xD5, 0x88, 0x65, 0x9F, 0xBF, 0x97, 0xC9, + 0x6E, 0x0D, 0x0A, 0xCC, 0x8E, 0x81, 0x5E, 0x60, + 0x8F, 0x9E, 0x86, 0x1D, 0x79, 0xAF, 0x30, 0x51, + 0xB9, 0x42, 0xB5, 0x25, 0x70, 0xB6, 0x29, 0x2B, + 0xF4, 0x8C, 0x2B, 0xFA, 0xA9, 0x07, 0x7D, 0xC7, + 0x6F, 0xE9, 0x02, 0x68, 0x32, 0x17, 0xB8, 0xBF, + 0x80, 0x9E, 0xD7, 0xA0, 0x05, 0x0A, 0xDD, 0xBB, + 0x65, 0xFD, 0xDF, 0xBD, 0x24, 0x01, 0x9C, 0x91, + 0x81, 0xB5, 0xAC, 0x81, 0x56, 0x61, 0x13, 0xD6, + 0x69, 0x4E, 0xA6, 0x29, 0x1D, 0x7F, 0x4A, 0x7F, + 0x56, 0xA4, 0x1E, 0xB9, 0x1F, 0x76, 0x36, 0x8D, + 0xF8, 0x2B, 0x16, 0x4B, 0x48, 0x59, 0x25, 0x9D, + 0x71, 0x89, 0x24, 0x0F, 0x1D, 0x88, 0x03, 0xF8, + 0x10, 0x72, 0x96, 0xD3, 0x78, 0xBA, 0xB4, 0xD2, + 0x4F, 0xE6, 0xD1, 0x0E, 0xF7, 0x88, 0x36, 0x7B, + 0xCE, 0x16, 0xC5, 0xAB, 0x77, 0xFB, 0xC1, 0x68, + 0xB8, 0x57, 0xF7, 0xBA, 0x5C, 0xDC, 0xBE, 0x50, + 0x67, 0xC8, 0x64, 0xF8, 0x79, 0x80, 0x9F, 0xE5, + 0x21, 0x7D, 0xEF, 0x02, 0x94, 0xBF, 0xAF, 0xDF, + 0x80, 0x9A, 0xBC, 0xE9, 0x53, 0x2D, 0xD9, 0xDA, + 0xB3, 0x44, 0x8F, 0x4D, 0xA6, 0x8E, 0xCA, 0x51, + 0x60, 0x94, 0x76, 0x27, 0x8E, 0xB8, 0xC4, 0xF6, + 0x9E, 0xA2, 0x96, 0x73, 0xF6, 0x94, 0x18, 0x04, + 0x1D, 0x26, 0x85, 0x7E, 0xBC, 0x24, 0xA4, 0x87, + 0xBB, 0x4B, 0x0B, 0xA6, 0x3A, 0xF8, 0x48, 0x54, + 0x5E, 0xE9, 0xBE, 0x89, 0xF1, 0x39, 0xD5, 0x02, + 0x09, 0x9B, 0x9D, 0x35, 0xDB, 0x38, 0x07, 0xB9, + 0x25, 0xCB, 0xA5, 0x76, 0xE2, 0x71, 0x70, 0xEA, + 0xEC, 0x48, 0xCC, 0x2C, 0xC1, 0x5B, 0x04, 0x36, + 0x77, 0x82, 0x5D, 0x0E, 0xE8, 0x1E, 0xB2, 0xCE, + 0xE3, 0xA8, 0xED, 0x14, 0xA7, 0x98, 0xB8, 0x79, + 0x53, 0x02, 0x20, 0xE5, 0x0C, 0xE8, 0xC0, 0x03, + 0xA3, 0x05, 0x38, 0x2A, 0x24, 0xD2, 0x3C, 0x27, + 0x7B, 0x99, 0xD1, 0xF4, 0xC5, 0x4F, 0x9A, 0x8D, + 0x33, 0xFA, 0x3D, 0x1E, 0x33, 0x7E, 0x18, 0xD7, + 0xCB, 0xBA, 0x5E, 0x5A, 0x47, 0xF2, 0xD5, 0xE0, + 0x96, 0xCF, 0x45, 0x51, 0xB2, 0x3B, 0x1B, 0x86, + 0x43, 0x6E, 0x81, 0xB4, 0xA0, 0x9D, 0x1E, 0x3D, + 0x38, 0x49, 0x2E, 0xC8, 0xB2, 0xA0, 0x09, 0x67, + 0x01, 0x6A, 0xB7, 0x6B, 0x9A, 0x9B, 0x18, 0x64, + 0x67, 0x14, 0x21, 0xDA, 0x56, 0xF5, 0x7D, 0x00, + 0x8D, 0x5C, 0xE1, 0xB8, 0x92, 0xA7, 0xE9, 0xC1, + 0xF6, 0x9F, 0x6C, 0x72, 0x2C, 0xF1, 0x09, 0xDB, + 0x50, 0x0E, 0x53, 0xF6, 0xBC, 0x07, 0x83, 0x7A, + 0xD1, 0xCD, 0x4C, 0xF4, 0xA6, 0x4D, 0xA7, 0x63, + 0xB4, 0xA9, 0xC4, 0x92, 0x9B, 0x0D, 0xCD, 0xDF, + 0x7C, 0x7E, 0x11, 0x86, 0xBE, 0x3F, 0xF0, 0xC3, + 0x21, 0x15, 0x84, 0x37, 0x82, 0x0C, 0x81, 0xE7, + 0x4F, 0xF3, 0x16, 0xAE, 0x32, 0x54, 0xE9, 0x72, + 0xFC, 0x19, 0x7A, 0x7F, 0x0E, 0x62, 0x02, 0x42, + 0xAC, 0x05, 0xA4, 0xE4, 0x3E, 0x98, 0x7C, 0x2A, + 0x83, 0x55, 0xB0, 0x35, 0x77, 0x45, 0xCA, 0x79, + 0xE6, 0xAE, 0x48, 0xAB, 0x29, 0xED, 0x4F, 0xA6, + 0x3D, 0x3A, 0x1F, 0x19, 0xB9, 0x99, 0xDE, 0x25, + 0x1F, 0xDE, 0x06, 0x40, 0xDD, 0x87, 0x87, 0x6D, + 0x55, 0x76, 0x28, 0x78, 0xAD, 0x1D, 0xB1, 0x2D, + 0x65, 0xBA, 0xFD, 0x14, 0xB6, 0xA9, 0xA7, 0x08, + 0x1B, 0xF2, 0x3F, 0x9F, 0x06, 0xD9, 0x0C, 0xE2, + 0x73, 0xC5, 0xA2, 0x6E, 0x01, 0x2C, 0xA9, 0x4D, + 0xD4, 0x81, 0xD3, 0x2E, 0x10, 0x93, 0x8C, 0x16, + 0x51, 0x63, 0xE8, 0x9B, 0xE8, 0xA9, 0x3A, 0x63, + 0x03, 0x4D, 0x34, 0x5B, 0x74, 0xE2, 0xA9, 0x4E, + 0xF6, 0x43, 0xD0, 0x6A, 0xF9, 0xE1, 0xF5, 0xC9, + 0xF1, 0x04, 0x93, 0x0D, 0xA0, 0x0E, 0x61, 0xE0, + 0x61, 0xEE, 0x8C, 0x3B, 0xB1, 0x7C, 0x11, 0xE0, + 0x5D, 0x45, 0xC1, 0x68, 0x2E, 0x4D, 0x59, 0x3C, + 0x91, 0x98, 0x23, 0x8D, 0x2B, 0xA2, 0x89, 0x77, + 0x9E, 0x7D, 0x0F, 0x22, 0x7B, 0xCB, 0x0B, 0x09, + 0x97, 0x2B, 0x19, 0x77, 0x0F, 0xF0, 0x11, 0xBF, + 0x6C, 0x60, 0xD9, 0xD1, 0x93, 0xCF, 0xAB, 0x32, + 0x74, 0x7A, 0x00, 0x95, 0xE1, 0xA4, 0xAD, 0x32, + 0x51, 0x4C, 0x78, 0x2E, 0xF3, 0xDE, 0x7A, 0x26, + 0xEA, 0x77, 0x1F, 0x55, 0x30, 0xD9, 0xDE, 0x97, + 0x36, 0xD0, 0xF6, 0xAE, 0x1A, 0xFB, 0x78, 0xEC, + 0x7C, 0xE4, 0x88, 0x4A, 0x1B, 0xB4, 0x36, 0xCF, + 0xCE, 0x45, 0x9C, 0xD9, 0x93, 0x58, 0x26, 0x09, + 0x06, 0xAA, 0xC9, 0x97, 0x16, 0xA5, 0x36, 0xCC, + 0x76, 0x87, 0xA0, 0x37, 0x5F, 0xDA, 0x11, 0x00, + 0x76, 0x18, 0xE5, 0x53, 0x53, 0x4E, 0x54, 0xD5, + 0xB2, 0x14, 0xF7, 0xAA, 0x6F, 0xC7, 0xDB, 0xE3, + 0x7C, 0x2B, 0xD2, 0xB6, 0x48, 0x50, 0xAE, 0x46, + 0x9A, 0x98, 0x58, 0x98, 0x7F, 0x3F, 0xA4, 0xB1, + 0xFD, 0x26, 0xD9, 0x54, 0xBF, 0xEC, 0x36, 0x5D, + 0xBE, 0x06, 0xDD, 0xCD, 0x61, 0x5E, 0x1F, 0xED, + 0x58, 0xA8, 0x86, 0x76, 0x40, 0x2D, 0x1D, 0x6B, + 0x58, 0x14, 0x85, 0x49, 0x8B, 0x5A, 0xDF, 0xFF, + 0xC4, 0x2D, 0x47, 0xD6, 0x1D, 0xF9, 0x93, 0x84, + 0xE2, 0x2C, 0x51, 0x57, 0xF0, 0x17, 0x8A, 0x6F, + 0xDA, 0xF8, 0xF4, 0xA9, 0x49, 0x1D, 0xAF, 0x29, + 0x8B, 0x2C, 0x3E, 0xC8, 0x80, 0x85, 0x02, 0x2C, + 0x0A, 0x7C, 0xF2, 0x45, 0xED, 0x0F, 0xB5, 0xA3, + 0x8C, 0xD1, 0x6F, 0x30, 0xD3, 0x7D, 0xA5, 0xC4, + 0x95, 0x9A, 0x55, 0x50, 0x1D, 0xAD, 0x50, 0xF1, + 0xB4, 0x8B, 0xBB, 0xDD, 0x86, 0xAB, 0x8B, 0xB5, + 0x22, 0xA9, 0x36, 0xDD, 0xF0, 0x00, 0x3B, 0x81, + 0xBE, 0x16, 0x23, 0x1A, 0x04, 0xE7, 0xA5, 0x89, + 0xC5, 0x6F, 0xFF, 0xB5, 0x1B, 0x07, 0x92, 0x7B, + 0x4A, 0xFA, 0x1D, 0xB7, 0xD4, 0x8B, 0xC6, 0xFB, + 0xC3, 0xF3, 0x67, 0x56, 0x37, 0x18, 0x4B, 0x7A, + 0xDB, 0x9B, 0xAD, 0xF4, 0xDE, 0x7C, 0x08, 0x5B, + 0xCA, 0x1D, 0x42, 0x8D, 0xC9, 0xFC, 0x82, 0x77, + 0xCB, 0xD8, 0x58, 0x84, 0xA5, 0x92, 0x1B, 0x52, + 0xBB, 0x05, 0xB7, 0x10, 0x61, 0x55, 0x08, 0x26, + 0x1B, 0xB4, 0x54, 0x6B, 0xD6, 0xE1, 0xFC, 0x73, + 0x0D, 0x16, 0xB0, 0x49, 0xEA, 0x12, 0x79, 0x8C, + 0xE2, 0xE6, 0xDF, 0x43, 0xF5, 0xB8, 0xF3, 0xEF, + 0x9A, 0xC8, 0xFB, 0xAE, 0x31, 0xB0, 0x11, 0xE1, + 0x0C, 0x4F, 0xC6, 0x2F, 0xFD, 0x7F, 0x39, 0xD1, + 0x6E, 0xC3, 0x2C, 0xA8, 0x21, 0x0E, 0xD1, 0x6E, + 0x04, 0x1D, 0xA4, 0x3D, 0x92, 0x74, 0x22, 0x95, + 0x14, 0x05, 0x4A, 0x0F, 0x82, 0xD4, 0x62, 0xFE, + 0x08, 0x0C, 0x6F, 0xFD, 0x7B, 0xBD, 0xBF, 0xBF, + 0x0B, 0xFF, 0xC6, 0xD5, 0xEC, 0xC4, 0x32, 0xA3, + 0x25, 0x6C, 0x0B, 0xE0, 0xDD, 0xFD, 0x5D, 0x90, + 0x80, 0xC6, 0x76, 0xC7, 0x95, 0x5D, 0x66, 0xE4, + 0x4D, 0x1C, 0xE5, 0x1F, 0xCC, 0x23, 0x82, 0xF8, + 0x68, 0xD7, 0x32, 0xE8, 0x58, 0x51, 0x72, 0x1B, + 0x48, 0xA0, 0x1D, 0x08, 0xC6, 0x39, 0x62, 0x6E, + 0xE0, 0x50, 0x9C, 0xB5, 0x81, 0xEF, 0xF5, 0x62, + 0x8F, 0xA6, 0xCC, 0xD1, 0x08, 0x9A, 0xC0, 0xE1, + 0x2D, 0xEB, 0xE0, 0x85, 0x17, 0x82, 0xE6, 0x4C, + 0x50, 0x49, 0xCB, 0xD6, 0x50, 0x10, 0x13, 0x96, + 0x5C, 0xC0, 0xCA, 0x25, 0xAC, 0xAB, 0x17, 0x6E, + 0xF7, 0xCA, 0xB9, 0x29, 0x40, 0x98, 0x5D, 0xDB, + 0x49, 0x02, 0x1D, 0xF6, 0xC6, 0x0D, 0x6C, 0x4A, + 0x48, 0x91, 0x16, 0x31, 0x1E, 0x86, 0xBA, 0x19, + 0xED, 0xF0, 0x0D, 0x74, 0x79, 0x73, 0x58, 0x20, + 0x7C, 0xDE, 0x50, 0x50, 0x6D, 0x00, 0x7F, 0xE0, + 0x3C, 0x88, 0x04, 0xC6, 0x64, 0x51, 0xF0, 0x2A, + 0x01, 0x82, 0xD3, 0x87, 0xB7, 0x59, 0x89, 0x40, + 0x96, 0xF6, 0x52, 0x32, 0x95, 0x2D, 0x18, 0x3D, + 0xBA, 0xAA, 0xBB, 0x6B, 0xC0, 0xE1, 0x91, 0xDC, + 0x2C, 0x3F, 0x75, 0xFC, 0x72, 0xBD, 0x61, 0xBA, + 0xB2, 0xEF, 0x19, 0xB6, 0x53, 0x2B, 0x23, 0x1C, + 0x4A, 0xFB, 0x1A, 0x9C, 0x2C, 0xB2, 0xF3, 0xD6, + 0xC4, 0x51, 0xE8, 0x44, 0x0D, 0x6A, 0x92, 0x3C, + 0xF7, 0x2A, 0x63, 0xE2, 0xED, 0x85, 0x54, 0x77, + 0x38, 0x87, 0x91, 0x0C, 0xA5, 0xC6, 0x71, 0xAD, + 0x4F, 0xD5, 0x92, 0x3C, 0xB9, 0x5E, 0xC7, 0x3F, + 0xFD, 0xFB, 0xDA, 0x4B, 0x66, 0x55, 0xF5, 0x5D, + 0xBF, 0xD1, 0x31, 0x7D, 0x02, 0x44, 0x22, 0x30, + 0x1E, 0xD6, 0x6A, 0x6E, 0x4C, 0x67, 0x20, 0x85, + 0xCE, 0xD1, 0xF4, 0xC7, 0xB0, 0x50, 0x30, 0xA1, + 0x00, 0xC4, 0x78, 0x8F, 0xEF, 0x4C, 0xD3, 0xE4, + 0x94, 0xA8, 0x53, 0xBD, 0xE6, 0x3E, 0x9D, 0x44, + 0x9A, 0xE3, 0xBB, 0x6B, 0xA1, 0x08, 0x32, 0x38, + 0xDA, 0x3F, 0x40, 0x90, 0x51, 0x5D, 0x14, 0x3C, + 0x67, 0xDB, 0xE5, 0x3D, 0x8D, 0x50, 0x7A, 0x52, + 0x29, 0xFF, 0xEB, 0x20, 0x72, 0xD0, 0xBD, 0x09, + 0x2F, 0xC9, 0xAE, 0x52, 0xDE, 0xAA, 0xAC, 0xD1, + 0xF0, 0xF1, 0x4B, 0x5A, 0xC8, 0x47, 0x52, 0xBF, + 0xD0, 0x02, 0x5E, 0x5F, 0x55, 0xB8, 0x69, 0x35, + 0x0F, 0x4B, 0x27, 0x19, 0xC5, 0xC0, 0x5A, 0xC1, + 0x66, 0x9B, 0xB0, 0xFD, 0x3C, 0x61, 0x4A, 0xCE, + 0x02, 0xA2, 0x70, 0x61, 0x3F, 0xD3, 0x30, 0x97, + 0x06, 0xDD, 0xCD, 0x5B, 0x1A, 0x6A, 0xD2, 0x6F, + 0x35, 0x9A, 0xDA, 0x80, 0xB3, 0x0E, 0x50, 0xA7, + 0xE5, 0x0B, 0xBD, 0x3A, 0xA4, 0x5D, 0x06, 0x54, + 0xDD, 0x7D, 0x05, 0x8B, 0x0B, 0xBF, 0x4D, 0x0D, + 0x92, 0x13, 0x51, 0x42, 0x21, 0x4E, 0xE7, 0x05, + 0x11, 0xF3, 0x67, 0x6A, 0xE6, 0x43, 0xB5, 0xF2, + 0x45, 0x06, 0x3B, 0x94, 0x19, 0xCF, 0x6B, 0x49, + 0xFD, 0x64, 0x7F, 0x27, 0xD7, 0xC4, 0x1C, 0x86, + 0x6E, 0x6C, 0xAD, 0x9D, 0x5E, 0x2E, 0x3E, 0x33, + 0x1B, 0xF6, 0xB9, 0xF7, 0x2A, 0xCA, 0x32, 0x9B, + 0xB6, 0x42, 0x59, 0xC3, 0xE7, 0x97, 0x83, 0xA2, + 0x66, 0x74, 0xB7, 0xD3, 0x8E, 0xBD, 0xE8, 0x31, + 0x84, 0x11, 0xF4, 0x76, 0x4E, 0xBD, 0xC4, 0xC7, + 0xE4, 0x1A, 0xCF, 0xF8, 0x5B, 0xBB, 0x30, 0x31, + 0x8D, 0x59, 0xC4, 0x2C, 0x92, 0x03, 0xAB, 0xD6, + 0x63, 0x6B, 0xA3, 0xF7, 0x72, 0xB6, 0x72, 0x51, + 0x21, 0xC0, 0x52, 0xDE, 0x99, 0x91, 0x0D, 0x55, + 0x15, 0x8C, 0x6F, 0x3E, 0xF8, 0xBB, 0x7F, 0xED, + 0xE2, 0xF8, 0x1E, 0x58, 0xA7, 0xAE, 0xB2, 0x5E, + 0x2E, 0x46, 0xFD, 0x72, 0x32, 0x30, 0x2F, 0xAF, + 0xA8, 0xFC, 0x37, 0xFC, 0x8B, 0x55, 0xD5, 0x94, + 0xB7, 0x6E, 0xC4, 0xA5, 0x3E, 0xB1, 0x1E, 0xB3, + 0xFD, 0x63, 0x44, 0x28, 0xAA, 0xA5, 0xD8, 0x6F, + 0x83, 0x9D, 0x08, 0x9A, 0xBE, 0x2F, 0xEF, 0xE2, + 0xAE, 0x52, 0x62, 0xFE, 0xFC, 0x73, 0x48, 0xD8, + 0x36, 0x69, 0x2E, 0xDB, 0x21, 0x5D, 0x6F, 0x8F, + 0x54, 0x8B, 0x88, 0x52, 0x90, 0xC2, 0x40, 0x3C, + 0x51, 0xC3, 0xE2, 0x69, 0xD4, 0x93, 0xFB, 0xD3, + 0x39, 0xB5, 0xDF, 0xB0, 0xA3, 0x8E, 0xED, 0xA7, + 0x75, 0x4D, 0xAF, 0xFA, 0x16, 0xE5, 0xBC, 0xA5, + 0xA9, 0xBB, 0xDE, 0x04, 0xB0, 0x14, 0xB7, 0xAE, + 0xA8, 0x98, 0x8F, 0x37, 0x49, 0xD5, 0x2D, 0x2F, + 0xC1, 0xC9, 0xF7, 0xC7, 0xB2, 0xC2, 0xD6, 0x92, + 0xE7, 0x89, 0x6E, 0x4C, 0x34, 0xF5, 0x7C, 0x55, + 0x8C, 0xFE, 0x83, 0x17, 0xA8, 0x37, 0x44, 0x09, + 0xD5, 0x66, 0x87, 0x9A, 0x08, 0x62, 0x8F, 0x64, + 0x4F, 0xB4, 0x5B, 0x81, 0x84, 0x55, 0xBC, 0xA6, + 0x04, 0x2B, 0x4E, 0x61, 0x87, 0xC1, 0xDD, 0x17, + 0x7E, 0x9E, 0x51, 0x46, 0x31, 0x99, 0x04, 0xB1, + 0x50, 0x5F, 0x3E, 0xE0, 0x0C, 0xD7, 0xFE, 0xAF, + 0x0E, 0x83, 0xC3, 0x02, 0x49, 0x56, 0xF7, 0x76, + 0x59, 0xAC, 0xC5, 0x6D, 0x8D, 0x91, 0x7A, 0x37, + 0xE8, 0xFF, 0x7E, 0xB8, 0x87, 0x13, 0xCC, 0xA3, + 0x34, 0xEA, 0x04, 0xB8, 0xE2, 0x58, 0xC9, 0x34, + 0x5D, 0xA9, 0xDE, 0x26, 0xA0, 0xA3, 0x66, 0x51, + 0x94, 0x51, 0xE1, 0x01, 0x2D, 0xE6, 0xAA, 0xBF, + 0x46, 0x97, 0xC9, 0xDE, 0x82, 0x1D, 0x70, 0x02, + 0x1C, 0x32, 0x50, 0xA1, 0x06, 0xCF, 0x4C, 0x23, + 0xA1, 0xB1, 0x78, 0x5F, 0x54, 0x9D, 0x3C, 0x8C, + 0xD7, 0x1B, 0x05, 0xFE, 0xA7, 0x53, 0xE0, 0x04, + 0x6A, 0x3A, 0xE0, 0xA9, 0xB1, 0xF4, 0x02, 0x77, + 0xCF, 0x45, 0x3A, 0x2B, 0xA1, 0x4C, 0xBA, 0x92, + 0x3C, 0xC6, 0x26, 0x97, 0x06, 0xDF, 0xFF, 0xD5, + 0x17, 0xC1, 0xE5, 0x93, 0x00, 0x79, 0x91, 0x2E, + 0x05, 0xA5, 0x57, 0x18, 0x97, 0xA0, 0x68, 0x65, + 0x51, 0x6C, 0x86, 0x69, 0x9F, 0x70, 0x7E, 0x00, + 0xCB, 0x38, 0xCE, 0x19, 0x34, 0x90, 0xAE, 0xE3, + 0x0B, 0xA4, 0x7D, 0xDD, 0xF3, 0xA5, 0xB4, 0xFB, + 0xCE, 0xBA, 0x73, 0xDC, 0x13, 0xD0, 0xA1, 0x60, + 0xEA, 0x64, 0x2D, 0x30, 0xD6, 0x3A, 0x02, 0x96, + 0x4E, 0xDF, 0xDB, 0x2F, 0x29, 0xDC, 0xD3, 0x2C, + 0xA9, 0x97, 0x4F, 0x89, 0xC3, 0x2D, 0x1F, 0xA9, + 0xA8, 0x3C, 0x94, 0xA2, 0x77, 0x0F, 0xCF, 0xCF, + 0x86, 0xE6, 0x46, 0x46, 0x88, 0x2B, 0xD5, 0x50, + 0xDD, 0xD6, 0x5B, 0x4E, 0x2D, 0x28, 0x7A, 0xF6, + 0xC1, 0x96, 0xF4, 0x2D, 0xBD, 0x39, 0xB0, 0x20, + 0xD7, 0xCD, 0xFB, 0xB6, 0xE6, 0xE7, 0x5F, 0xFA, + 0xAB, 0x26, 0x09, 0x9E, 0xC1, 0xD2, 0x5E, 0x32, + 0x34, 0xF7, 0x0D, 0xD9, 0x72, 0x28, 0x6A, 0xEA, + 0x0C, 0x34, 0x36, 0x59, 0x5F, 0xE4, 0x9F, 0xCA, + 0x89, 0x8B, 0xFA, 0x42, 0x16, 0x04, 0xC8, 0x2D, + 0x3E, 0x94, 0x85, 0x6D, 0x18, 0x69, 0x05, 0x07, + 0x6D, 0x18, 0x6C, 0x68, 0x41, 0x74, 0xBF, 0x42, + 0x90, 0xDF, 0x31, 0x76, 0x9E, 0xDC, 0x97, 0xA1, + 0xDF, 0x2D, 0xFE, 0xD0, 0x3C, 0xF4, 0x5C, 0xE6, + 0x78, 0xC8, 0xA1, 0x42, 0x9E, 0xB9, 0x78, 0xD0, + 0x2A, 0x79, 0xD4, 0xF8, 0xCF, 0x01, 0x68, 0xDA, + 0xAB, 0x48, 0x2C, 0x6C, 0x61, 0x2F, 0x04, 0xB1, + 0xC9, 0x36, 0x37, 0xFE, 0x77, 0xB3, 0x02, 0xCE, + 0xFA, 0x78, 0x8C, 0x11, 0x35, 0x6C, 0x52, 0xC5, + 0x4F, 0x37, 0xA9, 0xDC, 0xFD, 0xA5, 0x59, 0x27, + 0xA8, 0xEF, 0x0A, 0x0C, 0xEA, 0x7C, 0xC4, 0xAD, + 0xCE, 0xE4, 0x59, 0xEB, 0x64, 0xDF, 0x08, 0xED, + 0x0F, 0xC2, 0x9F, 0xDC, 0x3C, 0x7B, 0x76, 0x2B, + 0x39, 0x93, 0x32, 0x06, 0x33, 0x40, 0xD4, 0x73, + 0x96, 0x62, 0x19, 0xBF, 0xC8, 0x7B, 0x4A, 0x3C, + 0x91, 0xC8, 0x0F, 0x0E, 0x4B, 0xA8, 0x6A, 0xA1, + 0x87, 0x9C, 0x76, 0x62, 0x5C, 0x86, 0x80, 0xA2, + 0x27, 0xAB, 0x22, 0x78, 0x06, 0x59, 0xD4, 0xB5, + 0xD3, 0x0E, 0x0E, 0x9A, 0x0D, 0xCE, 0x09, 0x4D, + 0xAF, 0x53, 0x76, 0x79, 0x27, 0x3A, 0x9B, 0x27, + 0x7E, 0xD2, 0xA2, 0xE2, 0x50, 0xEE, 0xA0, 0x93, + 0x82, 0x04, 0xC9, 0xE9, 0x63, 0xD3, 0x38, 0x52, + 0x2A, 0x3D, 0x1A, 0x44, 0x40, 0xE2, 0xA1, 0x23, + 0x97, 0xA5, 0xB9, 0x7D, 0x35, 0x65, 0x73, 0x07, + 0xBE, 0xC9, 0x4C, 0xC0, 0xC7, 0x2C, 0x5C, 0x6B, + 0x09, 0xDA, 0xF2, 0xBA, 0xF0, 0x02, 0x0B, 0x7D, + 0x8C, 0xA5, 0x60, 0xBF, 0x65, 0x96, 0x92, 0x9A, + 0xC8, 0xD4, 0xE5, 0x46, 0x0F, 0x78, 0x37, 0xB4, + 0x1B, 0x4A, 0xE6, 0xFF, 0x12, 0x33, 0x9D, 0xB8, + 0xEB, 0xD7, 0x02, 0x8A, 0xAC, 0xFE, 0x0B, 0x42, + 0xE0, 0x2C, 0xDE, 0x90, 0x67, 0x83, 0xAB, 0xFF, + 0x69, 0x4E, 0x7C, 0xBE, 0x08, 0x97, 0xED, 0x6E, + 0xD4, 0x38, 0xAC, 0xDB, 0x00, 0xA4, 0x70, 0x9C, + 0xFE, 0xF7, 0x15, 0x0E, 0xBE, 0xB0, 0x8C, 0x8F, + 0xF6, 0xC1, 0x54, 0x38, 0x15, 0xF4, 0xB8, 0x95, + 0x1C, 0x3C, 0xAC, 0xE4, 0x99, 0x58, 0x64, 0x58, + 0xA7, 0x3C, 0x85, 0x72, 0x38, 0x9A, 0xFC, 0x97, + 0x03, 0xA7, 0xFE, 0xAF, 0x67, 0x34, 0x45, 0xFB, + 0x4B, 0x0C, 0xCA, 0xA5, 0x11, 0xD4, 0xA2, 0xCF, + 0x46, 0x3F, 0x57, 0xE3, 0xA6, 0xD7, 0x2D, 0xA0, + 0x4B, 0x25, 0x66, 0x99, 0xA3, 0x02, 0x12, 0xE7, + 0xC5, 0x76, 0x8E, 0xFC, 0x15, 0x1B, 0x71, 0x74, + 0x41, 0x56, 0x57, 0x5A, 0x2E, 0x94, 0x43, 0x31, + 0x92, 0x32, 0xD1, 0x59, 0xC6, 0xCC, 0x00, 0x6F, + 0xDB, 0x57, 0xC5, 0x81, 0x73, 0xAD, 0x8D, 0x2C, + 0x86, 0x6C, 0x88, 0x87, 0x43, 0x7C, 0x22, 0x38, + 0x88, 0xE2, 0x1E, 0xF6, 0x7E, 0x1A, 0x33, 0x2C, + 0x1F, 0xDF, 0xCC, 0x15, 0xEF, 0x17, 0x47, 0x6F, + 0xE0, 0xFB, 0x57, 0xD4, 0x22, 0x98, 0x94, 0x72, + 0x5E, 0x14, 0x74, 0xC1, 0xBA, 0x12, 0x16, 0x56, + 0x28, 0x17, 0xF1, 0x6C, 0x53, 0xEC, 0xE0, 0x1C, + 0x7F, 0x9E, 0x36, 0x64, 0xEE, 0xDB, 0xBA, 0x94, + 0x95, 0x29, 0x87, 0x43, 0x1A, 0xA2, 0xA5, 0x7D, + 0x33, 0x0E, 0xB1, 0x1B, 0x28, 0xE6, 0xBF, 0x77, + 0x0E, 0x34, 0x9E, 0xCE, 0x35, 0x0C, 0x83, 0xE9, + 0x0D, 0xA6, 0xFE, 0x0D, 0x0A, 0x4A, 0xB9, 0x71, + 0x5D, 0xB2, 0x8B, 0xDD, 0x39, 0x7F, 0xAF, 0xA1, + 0x42, 0x83, 0x02, 0x15, 0x1E, 0x1F, 0x22, 0x2B, + 0x44, 0x69, 0x87, 0x9E, 0xB5, 0xD0, 0xF0, 0x18, + 0x60, 0x6A, 0x75, 0x94, 0xBF, 0xC8, 0x2C, 0x39, + 0x4E, 0x91, 0xB9, 0x26, 0x44, 0x95, 0xC9, 0x06, + 0x3D, 0x50, 0x52, 0x62, 0x79, 0x9B, 0x9F, 0xCB, + 0xE6, 0x31, 0x6B, 0xBC, 0xC8, 0xD8, 0x09, 0x30, + 0x53, 0x63, 0x6A, 0x74, 0xD4, 0xFA, 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, 0x03, 0x06, 0x0B, 0x11, 0x17, - 0x1F, 0x27, 0x2E - + 0x00, 0x00, 0x00, 0x02, 0x0F, 0x16, 0x1B, 0x1F, + 0x29, 0x2E, 0x36 }; #endif @@ -37932,7 +42789,7 @@ static int test_wc_SetSubjectBuffer(void) ExpectIntEQ(wc_InitCert(&cert), 0); ExpectIntEQ(wc_SetSubjectBuffer(&cert, der, (int)derSz), 0); - ExpectIntEQ(wc_SetSubjectBuffer(NULL, der, (int)derSz), BAD_FUNC_ARG); + ExpectIntEQ(wc_SetSubjectBuffer(NULL, der, (int)derSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); XFREE(der, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif @@ -38129,7 +42986,7 @@ static int test_wc_PKCS7_Init(void) ExpectIntEQ(wc_PKCS7_Init(pkcs7, heap, testDevId), 0); /* Pass in bad args. */ - ExpectIntEQ(wc_PKCS7_Init(NULL, heap, testDevId), BAD_FUNC_ARG); + ExpectIntEQ(wc_PKCS7_Init(NULL, heap, testDevId), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_PKCS7_Free(pkcs7); #endif @@ -38286,9 +43143,9 @@ static int test_wc_PKCS7_InitWithCert(void) /* Pass in bad args. No need free for null checks, free at end.*/ ExpectIntEQ(wc_PKCS7_InitWithCert(NULL, (byte*)cert, (word32)certSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_InitWithCert(pkcs7, NULL, (word32)certSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifdef HAVE_ECC ExpectIntLT(wc_PKCS7_InitWithCert(pkcs7, certWithInvalidEccKey, @@ -38408,10 +43265,10 @@ static int test_wc_PKCS7_EncodeData(void) /* Test bad args. */ ExpectIntEQ(wc_PKCS7_EncodeData(NULL, output, (word32)sizeof(output)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_EncodeData(pkcs7, NULL, (word32)sizeof(output)), - BAD_FUNC_ARG); - ExpectIntEQ(wc_PKCS7_EncodeData(pkcs7, output, 5), BUFFER_E); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_PKCS7_EncodeData(pkcs7, output, 5), WC_NO_ERR_TRACE(BUFFER_E)); wc_PKCS7_Free(pkcs7); #endif @@ -38672,7 +43529,7 @@ static int test_wc_PKCS7_EncodeSignedData(void) ExpectIntEQ(wc_PKCS7_GetStreamMode(pkcs7), 0); ExpectIntEQ(wc_PKCS7_SetStreamMode(pkcs7, 1, NULL, NULL, NULL), 0); ExpectIntEQ(wc_PKCS7_SetStreamMode(NULL, 1, NULL, NULL, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_GetStreamMode(pkcs7), 1); ExpectIntGT(signedSz = wc_PKCS7_EncodeSignedData(pkcs7, output, @@ -38736,7 +43593,7 @@ static int test_wc_PKCS7_EncodeSignedData(void) for (z = 0; z < outputSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, output + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -38748,15 +43605,15 @@ static int test_wc_PKCS7_EncodeSignedData(void) /* Pass in bad args. */ ExpectIntEQ(wc_PKCS7_EncodeSignedData(NULL, output, outputSz), - BAD_FUNC_ARG); - ExpectIntEQ(wc_PKCS7_EncodeSignedData(pkcs7, NULL, outputSz), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_PKCS7_EncodeSignedData(pkcs7, NULL, outputSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_EncodeSignedData(pkcs7, badOut, - badOutSz), BAD_FUNC_ARG); + badOutSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); if (pkcs7 != NULL) { pkcs7->hashOID = 0; /* bad hashOID */ } ExpectIntEQ(wc_PKCS7_EncodeSignedData(pkcs7, output, outputSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #if defined(HAVE_PKCS7) && defined(HAVE_PKCS7_RSA_RAW_SIGN_CALLBACK) && \ !defined(NO_RSA) && !defined(NO_SHA256) @@ -38987,7 +43844,7 @@ static int test_wc_PKCS7_EncodeSignedData_ex(void) for (z = 0; z < outputSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, output + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -39005,55 +43862,55 @@ static int test_wc_PKCS7_EncodeSignedData_ex(void) /* Pass in bad args. */ ExpectIntEQ(wc_PKCS7_EncodeSignedData_ex(NULL, hashBuf, hashSz, outputHead, - &outputHeadSz, outputFoot, &outputFootSz), BAD_FUNC_ARG); + &outputHeadSz, outputFoot, &outputFootSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_EncodeSignedData_ex(pkcs7, NULL, hashSz, outputHead, - &outputHeadSz, outputFoot, &outputFootSz), BAD_FUNC_ARG); + &outputHeadSz, outputFoot, &outputFootSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_EncodeSignedData_ex(pkcs7, hashBuf, 0, outputHead, - &outputHeadSz, outputFoot, &outputFootSz), BAD_FUNC_ARG); + &outputHeadSz, outputFoot, &outputFootSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_EncodeSignedData_ex(pkcs7, hashBuf, hashSz, NULL, - &outputHeadSz, outputFoot, &outputFootSz), BAD_FUNC_ARG); + &outputHeadSz, outputFoot, &outputFootSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_EncodeSignedData_ex(pkcs7, hashBuf, hashSz, - outputHead, NULL, outputFoot, &outputFootSz), BAD_FUNC_ARG); + outputHead, NULL, outputFoot, &outputFootSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_EncodeSignedData_ex(pkcs7, hashBuf, hashSz, - outputHead, &outputHeadSz, NULL, &outputFootSz), BAD_FUNC_ARG); + outputHead, &outputHeadSz, NULL, &outputFootSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_EncodeSignedData_ex(pkcs7, hashBuf, hashSz, - outputHead, &outputHeadSz, outputFoot, NULL), BAD_FUNC_ARG); + outputHead, &outputHeadSz, outputFoot, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); if (pkcs7 != NULL) { pkcs7->hashOID = 0; /* bad hashOID */ } ExpectIntEQ(wc_PKCS7_EncodeSignedData_ex(pkcs7, hashBuf, hashSz, - outputHead, &outputHeadSz, outputFoot, &outputFootSz), BAD_FUNC_ARG); + outputHead, &outputHeadSz, outputFoot, &outputFootSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_VerifySignedData_ex(NULL, hashBuf, hashSz, outputHead, - outputHeadSz, outputFoot, outputFootSz), BAD_FUNC_ARG); + outputHeadSz, outputFoot, outputFootSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_VerifySignedData_ex(pkcs7, NULL, hashSz, outputHead, - outputHeadSz, outputFoot, outputFootSz), BAD_FUNC_ARG); + outputHeadSz, outputFoot, outputFootSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_PKCS7_STREAM ExpectIntEQ(wc_PKCS7_VerifySignedData_ex(pkcs7, hashBuf, 0, outputHead, - outputHeadSz, outputFoot, outputFootSz), WC_PKCS7_WANT_READ_E); + outputHeadSz, outputFoot, outputFootSz), WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); #else ExpectIntEQ(wc_PKCS7_VerifySignedData_ex(pkcs7, hashBuf, 0, outputHead, - outputHeadSz, outputFoot, outputFootSz), BUFFER_E); + outputHeadSz, outputFoot, outputFootSz), WC_NO_ERR_TRACE(BUFFER_E)); #endif ExpectIntEQ(wc_PKCS7_VerifySignedData_ex(pkcs7, hashBuf, hashSz, NULL, - outputHeadSz, outputFoot, outputFootSz), BAD_FUNC_ARG); + outputHeadSz, outputFoot, outputFootSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_PKCS7_STREAM /* can pass in 0 buffer length with streaming API */ ExpectIntEQ(wc_PKCS7_VerifySignedData_ex(pkcs7, hashBuf, hashSz, - outputHead, 0, outputFoot, outputFootSz), WC_PKCS7_WANT_READ_E); + outputHead, 0, outputFoot, outputFootSz), WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); #else ExpectIntEQ(wc_PKCS7_VerifySignedData_ex(pkcs7, hashBuf, hashSz, - outputHead, 0, outputFoot, outputFootSz), BAD_FUNC_ARG); + outputHead, 0, outputFoot, outputFootSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif ExpectIntEQ(wc_PKCS7_VerifySignedData_ex(pkcs7, hashBuf, hashSz, - outputHead, outputHeadSz, NULL, outputFootSz), BAD_FUNC_ARG); + outputHead, outputHeadSz, NULL, outputFootSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_PKCS7_STREAM ExpectIntEQ(wc_PKCS7_VerifySignedData_ex(pkcs7, hashBuf, hashSz, - outputHead, outputHeadSz, outputFoot, 0), WC_PKCS7_WANT_READ_E); + outputHead, outputHeadSz, outputFoot, 0), WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); #else ExpectIntEQ(wc_PKCS7_VerifySignedData_ex(pkcs7, hashBuf, hashSz, - outputHead, outputHeadSz, outputFoot, 0), BUFFER_E); + outputHead, outputHeadSz, outputFoot, 0), WC_NO_ERR_TRACE(BUFFER_E)); #endif wc_PKCS7_Free(pkcs7); @@ -39482,7 +44339,7 @@ static int test_wc_PKCS7_VerifySignedData_RSA(void) for (z = 0; z < outputSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, output + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -39555,16 +44412,16 @@ static int test_wc_PKCS7_VerifySignedData_RSA(void) /* Test bad args. */ ExpectIntEQ(wc_PKCS7_VerifySignedData(NULL, output, outputSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_VerifySignedData(pkcs7, NULL, outputSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_PKCS7_STREAM /* can pass in 0 buffer length with streaming API */ ExpectIntEQ(wc_PKCS7_VerifySignedData(pkcs7, badOut, - badOutSz), WC_PKCS7_WANT_READ_E); + badOutSz), WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); #else ExpectIntEQ(wc_PKCS7_VerifySignedData(pkcs7, badOut, - badOutSz), BAD_FUNC_ARG); + badOutSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif wc_PKCS7_Free(pkcs7); pkcs7 = NULL; @@ -39583,7 +44440,7 @@ static int test_wc_PKCS7_VerifySignedData_RSA(void) pkcs7->contentSz = sizeof(badContent); } ExpectIntEQ(wc_PKCS7_VerifySignedData(pkcs7, output, outputSz), - SIG_VERIFY_E); + WC_NO_ERR_TRACE(SIG_VERIFY_E)); wc_PKCS7_Free(pkcs7); pkcs7 = NULL; @@ -39599,14 +44456,14 @@ static int test_wc_PKCS7_VerifySignedData_RSA(void) ret = -1; for (z = 0; z < outputSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, output + z, 1); - if (ret == WC_PKCS7_WANT_READ_E){ + if (ret == WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)){ continue; } else if (ret < 0) { break; } } - ExpectIntEQ(ret, SIG_VERIFY_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(SIG_VERIFY_E)); ExpectIntNE(pkcs7->contentSz, 0); ExpectNotNull(pkcs7->contentDynamic); wc_PKCS7_Free(pkcs7); @@ -39638,7 +44495,7 @@ static int test_wc_PKCS7_VerifySignedData_RSA(void) for (z = 0; z < outputSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, output + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -39682,7 +44539,7 @@ static int test_wc_PKCS7_VerifySignedData_RSA(void) for (z = 0; z < outputSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, output + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -39727,7 +44584,7 @@ static int test_wc_PKCS7_VerifySignedData_RSA(void) chunkSz; rc = wc_PKCS7_VerifySignedData(pkcs7, buf + i, (word32)sz); if (rc < 0 ) { - if (rc == WC_PKCS7_WANT_READ_E) { + if (rc == WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)) { i += sz; continue; } @@ -39737,7 +44594,7 @@ static int test_wc_PKCS7_VerifySignedData_RSA(void) break; } } - ExpectIntEQ(rc, PKCS7_SIGNEEDS_CHECK); + ExpectIntEQ(rc, WC_NO_ERR_TRACE(PKCS7_SIGNEEDS_CHECK)); wc_PKCS7_Free(pkcs7); pkcs7 = NULL; } @@ -39752,7 +44609,7 @@ static int test_wc_PKCS7_VerifySignedData_RSA(void) chunkSz; rc = wc_PKCS7_VerifySignedData(pkcs7, buf + i, (word32)sz); if (rc < 0 ) { - if (rc == WC_PKCS7_WANT_READ_E) { + if (rc == WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)) { i += sz; continue; } @@ -39762,7 +44619,7 @@ static int test_wc_PKCS7_VerifySignedData_RSA(void) break; } } - ExpectIntEQ(rc, ASN_PARSE_E); + ExpectIntEQ(rc, WC_NO_ERR_TRACE(ASN_PARSE_E)); wc_PKCS7_Free(pkcs7); pkcs7 = NULL; } @@ -39824,7 +44681,7 @@ static int test_wc_PKCS7_VerifySignedData_ECC(void) for (z = 0; z < outputSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, output + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -39847,7 +44704,7 @@ static int test_wc_PKCS7_VerifySignedData_ECC(void) pkcs7->contentSz = sizeof(badContent); } ExpectIntEQ(wc_PKCS7_VerifySignedData(pkcs7, output, outputSz), - SIG_VERIFY_E); + WC_NO_ERR_TRACE(SIG_VERIFY_E)); wc_PKCS7_Free(pkcs7); pkcs7 = NULL; @@ -39863,14 +44720,14 @@ static int test_wc_PKCS7_VerifySignedData_ECC(void) ret = -1; for (z = 0; z < outputSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, output + z, 1); - if (ret == WC_PKCS7_WANT_READ_E){ + if (ret == WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)){ continue; } else if (ret < 0) { break; } } - ExpectIntEQ(ret, SIG_VERIFY_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(SIG_VERIFY_E)); ExpectIntNE(pkcs7->contentSz, 0); ExpectNotNull(pkcs7->contentDynamic); wc_PKCS7_Free(pkcs7); @@ -39902,7 +44759,7 @@ static int test_wc_PKCS7_VerifySignedData_ECC(void) for (z = 0; z < outputSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, output + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -39949,7 +44806,7 @@ static int test_wc_PKCS7_VerifySignedData_ECC(void) for (z = 0; z < outputSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, output + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -40316,23 +45173,23 @@ static int test_wc_PKCS7_EncodeDecodeEnvelopedData(void) #ifndef NO_DES3 case DES3b: case DESb: - ExpectIntEQ(encodedSz, BAD_FUNC_ARG); + ExpectIntEQ(encodedSz, WC_NO_ERR_TRACE(BAD_FUNC_ARG)); break; #endif #ifdef HAVE_AESCCM #ifdef WOLFSSL_AES_128 case AES128CCMb: - ExpectIntEQ(encodedSz, BAD_FUNC_ARG); + ExpectIntEQ(encodedSz, WC_NO_ERR_TRACE(BAD_FUNC_ARG)); break; #endif #ifdef WOLFSSL_AES_192 case AES192CCMb: - ExpectIntEQ(encodedSz, BAD_FUNC_ARG); + ExpectIntEQ(encodedSz, WC_NO_ERR_TRACE(BAD_FUNC_ARG)); break; #endif #ifdef WOLFSSL_AES_256 case AES256CCMb: - ExpectIntEQ(encodedSz, BAD_FUNC_ARG); + ExpectIntEQ(encodedSz, WC_NO_ERR_TRACE(BAD_FUNC_ARG)); break; #endif #endif @@ -40401,24 +45258,24 @@ static int test_wc_PKCS7_EncodeDecodeEnvelopedData(void) /* Test bad args. */ ExpectIntEQ(wc_PKCS7_EncodeEnvelopedData(NULL, output, - (word32)sizeof(output)), BAD_FUNC_ARG); + (word32)sizeof(output)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_EncodeEnvelopedData(pkcs7, NULL, - (word32)sizeof(output)), BAD_FUNC_ARG); - ExpectIntEQ(wc_PKCS7_EncodeEnvelopedData(pkcs7, output, 0), BAD_FUNC_ARG); + (word32)sizeof(output)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_PKCS7_EncodeEnvelopedData(pkcs7, output, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Decode. */ ExpectIntEQ(wc_PKCS7_DecodeEnvelopedData(NULL, output, (word32)sizeof(output), decoded, (word32)sizeof(decoded)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_DecodeEnvelopedData(pkcs7, output, - (word32)sizeof(output), NULL, (word32)sizeof(decoded)), BAD_FUNC_ARG); + (word32)sizeof(output), NULL, (word32)sizeof(decoded)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_DecodeEnvelopedData(pkcs7, output, - (word32)sizeof(output), decoded, 0), BAD_FUNC_ARG); + (word32)sizeof(output), decoded, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_DecodeEnvelopedData(pkcs7, NULL, (word32)sizeof(output), decoded, (word32)sizeof(decoded)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_DecodeEnvelopedData(pkcs7, output, 0, decoded, - (word32)sizeof(decoded)), BAD_FUNC_ARG); + (word32)sizeof(decoded)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Should get a return of BAD_FUNC_ARG with structure data. Order matters.*/ #if defined(HAVE_ECC) && !defined(NO_AES) && defined(HAVE_AES_CBC) /* only a failure for KARI test cases */ @@ -40429,11 +45286,11 @@ static int test_wc_PKCS7_EncodeDecodeEnvelopedData(void) #if defined(WOLFSSL_ASN_TEMPLATE) ExpectIntEQ(wc_PKCS7_DecodeEnvelopedData(pkcs7, output, (word32)sizeof(output), decoded, (word32)sizeof(decoded)), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); #else ExpectIntEQ(wc_PKCS7_DecodeEnvelopedData(pkcs7, output, (word32)sizeof(output), decoded, (word32)sizeof(decoded)), - ASN_PARSE_E); + WC_NO_ERR_TRACE(ASN_PARSE_E)); #endif if (pkcs7 != NULL) { pkcs7->singleCertSz = tempWrd32; @@ -40447,11 +45304,11 @@ static int test_wc_PKCS7_EncodeDecodeEnvelopedData(void) * is returned from kari parse which gets set to bad func arg */ ExpectIntEQ(wc_PKCS7_DecodeEnvelopedData(pkcs7, output, (word32)sizeof(output), decoded, (word32)sizeof(decoded)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #else ExpectIntEQ(wc_PKCS7_DecodeEnvelopedData(pkcs7, output, (word32)sizeof(output), decoded, (word32)sizeof(decoded)), - ASN_PARSE_E); + WC_NO_ERR_TRACE(ASN_PARSE_E)); #endif #endif /* !NO_RSA */ if (pkcs7 != NULL) { @@ -40465,7 +45322,7 @@ static int test_wc_PKCS7_EncodeDecodeEnvelopedData(void) ExpectIntEQ(wc_PKCS7_DecodeEnvelopedData(pkcs7, output, (word32)sizeof(output), decoded, (word32)sizeof(decoded)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); if (pkcs7 != NULL) { pkcs7->privateKeySz = tempWrd32; @@ -40474,7 +45331,7 @@ static int test_wc_PKCS7_EncodeDecodeEnvelopedData(void) } ExpectIntEQ(wc_PKCS7_DecodeEnvelopedData(pkcs7, output, (word32)sizeof(output), decoded, (word32)sizeof(decoded)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); if (pkcs7 != NULL) { pkcs7->privateKey = tmpBytePtr; } @@ -40684,60 +45541,60 @@ static int test_wc_PKCS7_EncodeEncryptedData(void) } ExpectIntEQ(wc_PKCS7_EncodeEncryptedData(NULL, encrypted, - sizeof(encrypted)),BAD_FUNC_ARG); + sizeof(encrypted)),WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_EncodeEncryptedData(pkcs7, NULL, - sizeof(encrypted)), BAD_FUNC_ARG); + sizeof(encrypted)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_EncodeEncryptedData(pkcs7, encrypted, - 0), BAD_FUNC_ARG); + 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Testing the struct. */ if (pkcs7 != NULL) { tmpBytePtr = pkcs7->content; pkcs7->content = NULL; } ExpectIntEQ(wc_PKCS7_EncodeEncryptedData(pkcs7, encrypted, - sizeof(encrypted)), BAD_FUNC_ARG); + sizeof(encrypted)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); if (pkcs7 != NULL) { pkcs7->content = tmpBytePtr; tmpWrd32 = pkcs7->contentSz; pkcs7->contentSz = 0; } ExpectIntEQ(wc_PKCS7_EncodeEncryptedData(pkcs7, encrypted, - sizeof(encrypted)), BAD_FUNC_ARG); + sizeof(encrypted)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); if (pkcs7 != NULL) { pkcs7->contentSz = tmpWrd32; tmpInt = pkcs7->encryptOID; pkcs7->encryptOID = 0; } ExpectIntEQ(wc_PKCS7_EncodeEncryptedData(pkcs7, encrypted, - sizeof(encrypted)), BAD_FUNC_ARG); + sizeof(encrypted)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); if (pkcs7 != NULL) { pkcs7->encryptOID = tmpInt; tmpBytePtr = pkcs7->encryptionKey; pkcs7->encryptionKey = NULL; } ExpectIntEQ(wc_PKCS7_EncodeEncryptedData(pkcs7, encrypted, - sizeof(encrypted)), BAD_FUNC_ARG); + sizeof(encrypted)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); if (pkcs7 != NULL) { pkcs7->encryptionKey = tmpBytePtr; tmpWrd32 = pkcs7->encryptionKeySz; pkcs7->encryptionKeySz = 0; } ExpectIntEQ(wc_PKCS7_EncodeEncryptedData(pkcs7, encrypted, - sizeof(encrypted)), BAD_FUNC_ARG); + sizeof(encrypted)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); if (pkcs7 != NULL) { pkcs7->encryptionKeySz = tmpWrd32; } ExpectIntEQ(wc_PKCS7_DecodeEncryptedData(NULL, encrypted, (word32)encryptedSz, - decoded, sizeof(decoded)), BAD_FUNC_ARG); + decoded, sizeof(decoded)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_DecodeEncryptedData(pkcs7, NULL, (word32)encryptedSz, - decoded, sizeof(decoded)), BAD_FUNC_ARG); + decoded, sizeof(decoded)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_DecodeEncryptedData(pkcs7, encrypted, 0, - decoded, sizeof(decoded)), BAD_FUNC_ARG); + decoded, sizeof(decoded)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_DecodeEncryptedData(pkcs7, encrypted, (word32)encryptedSz, - NULL, sizeof(decoded)), BAD_FUNC_ARG); + NULL, sizeof(decoded)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_DecodeEncryptedData(pkcs7, encrypted, (word32)encryptedSz, - decoded, 0), BAD_FUNC_ARG); + decoded, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Test struct fields */ if (pkcs7 != NULL) { @@ -40745,13 +45602,13 @@ static int test_wc_PKCS7_EncodeEncryptedData(void) pkcs7->encryptionKey = NULL; } ExpectIntEQ(wc_PKCS7_DecodeEncryptedData(pkcs7, encrypted, (word32)encryptedSz, - decoded, sizeof(decoded)), BAD_FUNC_ARG); + decoded, sizeof(decoded)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); if (pkcs7 != NULL) { pkcs7->encryptionKey = tmpBytePtr; pkcs7->encryptionKeySz = 0; } ExpectIntEQ(wc_PKCS7_DecodeEncryptedData(pkcs7, encrypted, (word32)encryptedSz, - decoded, sizeof(decoded)), BAD_FUNC_ARG); + decoded, sizeof(decoded)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_PKCS7_Free(pkcs7); #endif @@ -40798,7 +45655,7 @@ static int test_wc_PKCS7_Degenerate(void) for (z = 0; z < derSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, der + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -40815,7 +45672,7 @@ static int test_wc_PKCS7_Degenerate(void) ExpectIntEQ(wc_PKCS7_InitWithCert(pkcs7, NULL, 0), 0); wc_PKCS7_AllowDegenerate(pkcs7, 0); /* override allowing degenerate case */ ExpectIntEQ(wc_PKCS7_VerifySignedData(pkcs7, der, derSz), - PKCS7_NO_SIGNER_E); + WC_NO_ERR_TRACE(PKCS7_NO_SIGNER_E)); #ifndef NO_PKCS7_STREAM wc_PKCS7_Free(pkcs7); @@ -40829,13 +45686,13 @@ static int test_wc_PKCS7_Degenerate(void) ret = -1; for (z = 0; z < derSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, der + z, 1); - if (ret == WC_PKCS7_WANT_READ_E){ + if (ret == WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)){ continue; } else break; } - ExpectIntEQ(ret, PKCS7_NO_SIGNER_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(PKCS7_NO_SIGNER_E)); #endif /* !NO_PKCS7_STREAM */ wc_PKCS7_Free(pkcs7); @@ -41084,7 +45941,7 @@ static int test_wc_PKCS7_BER(void) for (z = 0; z < derSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, der + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -41130,7 +45987,7 @@ static int test_wc_PKCS7_BER(void) #endif #else ExpectIntEQ(wc_PKCS7_DecodeEnvelopedData(pkcs7, berContent, - sizeof(berContent), decoded, sizeof(decoded)), NOT_COMPILED_IN); + sizeof(berContent), decoded, sizeof(decoded)), WC_NO_ERR_TRACE(NOT_COMPILED_IN)); #endif wc_PKCS7_Free(pkcs7); #endif /* !NO_DES3 */ @@ -41241,7 +46098,7 @@ static int test_wc_PKCS7_signed_enveloped(void) /* Set no certs in bundle for this test. */ if (pkcs7 != NULL) { ExpectIntEQ(wc_PKCS7_SetNoCerts(pkcs7, 1), 0); - ExpectIntEQ(wc_PKCS7_SetNoCerts(NULL, 1), BAD_FUNC_ARG); + ExpectIntEQ(wc_PKCS7_SetNoCerts(NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_GetNoCerts(pkcs7), 1); } ExpectIntGT((sigSz = wc_PKCS7_EncodeSignedData(pkcs7, sig, (word32)sigSz)), 0); @@ -41252,7 +46109,7 @@ static int test_wc_PKCS7_signed_enveloped(void) ExpectNotNull(pkcs7 = wc_PKCS7_New(NULL, 0)); ExpectIntEQ(wc_PKCS7_InitWithCert(pkcs7, NULL, 0), 0); ExpectIntEQ(wc_PKCS7_VerifySignedData(pkcs7, sig, (word32)sigSz), - PKCS7_SIGNEEDS_CHECK); + WC_NO_ERR_TRACE(PKCS7_SIGNEEDS_CHECK)); /* try verifying the signature manually */ { @@ -41291,7 +46148,7 @@ static int test_wc_PKCS7_signed_enveloped(void) for (z = 0; z < sigSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, sig + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -41356,7 +46213,7 @@ static int test_wc_PKCS7_signed_enveloped(void) for (z = 0; z < sigSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, sig + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -41396,7 +46253,7 @@ static int test_wc_PKCS7_signed_enveloped(void) for (z = 0; z < decodedSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, decoded + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -41421,7 +46278,7 @@ static int test_wc_PKCS7_NoDefaultSignedAttribs(void) ExpectNotNull(pkcs7 = wc_PKCS7_New(heap, testDevId)); ExpectIntEQ(wc_PKCS7_Init(pkcs7, heap, testDevId), 0); - ExpectIntEQ(wc_PKCS7_NoDefaultSignedAttribs(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_PKCS7_NoDefaultSignedAttribs(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_NoDefaultSignedAttribs(pkcs7), 0); wc_PKCS7_Free(pkcs7); @@ -41441,7 +46298,7 @@ static int test_wc_PKCS7_SetOriEncryptCtx(void) ExpectNotNull(pkcs7 = wc_PKCS7_New(heap, testDevId)); ExpectIntEQ(wc_PKCS7_Init(pkcs7, heap, testDevId), 0); - ExpectIntEQ(wc_PKCS7_SetOriEncryptCtx(NULL, ctx), BAD_FUNC_ARG); + ExpectIntEQ(wc_PKCS7_SetOriEncryptCtx(NULL, ctx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_SetOriEncryptCtx(pkcs7, ctx), 0); wc_PKCS7_Free(pkcs7); @@ -41461,7 +46318,7 @@ static int test_wc_PKCS7_SetOriDecryptCtx(void) ExpectNotNull(pkcs7 = wc_PKCS7_New(heap, testDevId)); ExpectIntEQ(wc_PKCS7_Init(pkcs7, heap, testDevId), 0); - ExpectIntEQ(wc_PKCS7_SetOriDecryptCtx(NULL, ctx), BAD_FUNC_ARG); + ExpectIntEQ(wc_PKCS7_SetOriDecryptCtx(NULL, ctx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_PKCS7_SetOriDecryptCtx(pkcs7, ctx), 0); wc_PKCS7_Free(pkcs7); @@ -41569,7 +46426,7 @@ static int test_wc_i2d_PKCS12(void) ExpectNotNull(pkcs12 = wc_PKCS12_new()); ExpectIntEQ(wc_d2i_PKCS12(der, (word32)derSz, pkcs12), 0); - ExpectIntEQ(wc_i2d_PKCS12(pkcs12, NULL, &outSz), LENGTH_ONLY_E); + ExpectIntEQ(wc_i2d_PKCS12(pkcs12, NULL, &outSz), WC_NO_ERR_TRACE(LENGTH_ONLY_E)); ExpectIntEQ(outSz, derSz); outSz = derSz - 1; @@ -41589,14 +46446,14 @@ static int test_wc_i2d_PKCS12(void) /* Run the same test but use wc_d2i_PKCS12_fp. */ ExpectNotNull(pkcs12 = wc_PKCS12_new()); ExpectIntEQ(wc_d2i_PKCS12_fp("./certs/test-servercert.p12", &pkcs12), 0); - ExpectIntEQ(wc_i2d_PKCS12(pkcs12, NULL, &outSz), LENGTH_ONLY_E); + ExpectIntEQ(wc_i2d_PKCS12(pkcs12, NULL, &outSz), WC_NO_ERR_TRACE(LENGTH_ONLY_E)); ExpectIntEQ(outSz, derSz); wc_PKCS12_free(pkcs12); pkcs12 = NULL; /* wc_d2i_PKCS12_fp can also allocate the PKCS12 object for the caller. */ ExpectIntEQ(wc_d2i_PKCS12_fp("./certs/test-servercert.p12", &pkcs12), 0); - ExpectIntEQ(wc_i2d_PKCS12(pkcs12, NULL, &outSz), LENGTH_ONLY_E); + ExpectIntEQ(wc_i2d_PKCS12(pkcs12, NULL, &outSz), WC_NO_ERR_TRACE(LENGTH_ONLY_E)); ExpectIntEQ(outSz, derSz); wc_PKCS12_free(pkcs12); pkcs12 = NULL; @@ -41633,11 +46490,11 @@ static int test_wc_SignatureGetSize_ecc(void) /* // NOLINTBEGIN(clang-analyzer-optin.core.EnumCastOutOfRange) */ sig_type = (enum wc_SignatureType) 100; /* // NOLINTEND(clang-analyzer-optin.core.EnumCastOutOfRange) */ - ExpectIntEQ(wc_SignatureGetSize(sig_type, &ecc, key_len), BAD_FUNC_ARG); + ExpectIntEQ(wc_SignatureGetSize(sig_type, &ecc, key_len), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); sig_type = WC_SIGNATURE_TYPE_ECC; ExpectIntEQ(wc_SignatureGetSize(sig_type, NULL, key_len), 0); key_len = (word32)0; - ExpectIntEQ(wc_SignatureGetSize(sig_type, &ecc, key_len), BAD_FUNC_ARG); + ExpectIntEQ(wc_SignatureGetSize(sig_type, &ecc, key_len), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_ecc_free(&ecc), 0); #endif /* !NO_SIG_WRAPPER && HAVE_ECC && !NO_ECC256 */ @@ -41700,11 +46557,11 @@ static int test_wc_SignatureGetSize_rsa(void) /* // NOLINTBEGIN(clang-analyzer-optin.core.EnumCastOutOfRange) */ sig_type = (enum wc_SignatureType)100; /* // NOLINTEND(clang-analyzer-optin.core.EnumCastOutOfRange) */ - ExpectIntEQ(wc_SignatureGetSize(sig_type, &rsa_key, key_len), BAD_FUNC_ARG); + ExpectIntEQ(wc_SignatureGetSize(sig_type, &rsa_key, key_len), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); sig_type = WC_SIGNATURE_TYPE_RSA; - ExpectIntEQ(wc_SignatureGetSize(sig_type, NULL, key_len), BAD_FUNC_ARG); + ExpectIntEQ(wc_SignatureGetSize(sig_type, NULL, key_len), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); key_len = (word32)0; - ExpectIntEQ(wc_SignatureGetSize(sig_type, &rsa_key, key_len), BAD_FUNC_ARG); + ExpectIntEQ(wc_SignatureGetSize(sig_type, &rsa_key, key_len), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRsaKey(&rsa_key), 0); XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -41754,7 +46611,7 @@ static int test_wc_HashInit(void) wc_HashFree(&hash, enumArray[i]); /* check for null ptr */ - ExpectIntEQ(wc_HashInit(NULL, enumArray[i]), BAD_FUNC_ARG); + ExpectIntEQ(wc_HashInit(NULL, enumArray[i]), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); } /* end of for loop */ @@ -41813,17 +46670,17 @@ static int test_wc_HashSetFlags(void) ExpectIntEQ(wc_HashInit(&hash, enumArray[i]), 0); ExpectIntEQ(wc_HashSetFlags(&hash, enumArray[i], flags), 0); ExpectTrue((flags & WC_HASH_FLAG_ISCOPY) == 0); - ExpectIntEQ(wc_HashSetFlags(NULL, enumArray[i], flags), BAD_FUNC_ARG); + ExpectIntEQ(wc_HashSetFlags(NULL, enumArray[i], flags), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_HashFree(&hash, enumArray[i]); } /* For loop to test not supported cases */ notSupportedLen = (sizeof(notSupported)/sizeof(enum wc_HashType)); for (j = 0; j < notSupportedLen; j++) { - ExpectIntEQ(wc_HashInit(&hash, notSupported[j]), BAD_FUNC_ARG); + ExpectIntEQ(wc_HashInit(&hash, notSupported[j]), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HashSetFlags(&hash, notSupported[j], flags), - BAD_FUNC_ARG); - ExpectIntEQ(wc_HashFree(&hash, notSupported[j]), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_HashFree(&hash, notSupported[j]), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); } #endif return EXPECT_RESULT(); @@ -41879,16 +46736,16 @@ static int test_wc_HashGetFlags(void) ExpectIntEQ(wc_HashInit(&hash, enumArray[i]), 0); ExpectIntEQ(wc_HashGetFlags(&hash, enumArray[i], &flags), 0); ExpectTrue((flags & WC_HASH_FLAG_ISCOPY) == 0); - ExpectIntEQ(wc_HashGetFlags(NULL, enumArray[i], &flags), BAD_FUNC_ARG); + ExpectIntEQ(wc_HashGetFlags(NULL, enumArray[i], &flags), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_HashFree(&hash, enumArray[i]); } /* For loop to test not supported cases */ notSupportedLen = (sizeof(notSupported)/sizeof(enum wc_HashType)); for (j = 0; j < notSupportedLen; j++) { - ExpectIntEQ(wc_HashInit(&hash, notSupported[j]), BAD_FUNC_ARG); + ExpectIntEQ(wc_HashInit(&hash, notSupported[j]), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_HashGetFlags(&hash, notSupported[j], &flags), - BAD_FUNC_ARG); - ExpectIntEQ(wc_HashFree(&hash, notSupported[j]), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_HashFree(&hash, notSupported[j]), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); } #endif return EXPECT_RESULT(); @@ -41907,6 +46764,8 @@ static int test_wolfSSL_ASN1_BIT_STRING(void) EXPECT_DECLS; #if !defined(NO_CERTS) && defined(OPENSSL_ALL) ASN1_BIT_STRING* str = NULL; + ASN1_BIT_STRING* str2 = NULL; + unsigned char* der = NULL; ExpectNotNull(str = ASN1_BIT_STRING_new()); /* Empty data testing. */ @@ -41942,8 +46801,19 @@ static int test_wolfSSL_ASN1_BIT_STRING(void) ExpectIntEQ(ASN1_BIT_STRING_set_bit(str, 42, 0), 1); ExpectIntEQ(ASN1_BIT_STRING_get_bit(str, 42), 0); + ExpectIntEQ(i2d_ASN1_BIT_STRING(str, NULL), 14); + ExpectIntEQ(i2d_ASN1_BIT_STRING(str, &der), 14); +#ifdef WOLFSSL_ASN_TEMPLATE + { + const unsigned char* tmp = der; + ExpectNotNull(d2i_ASN1_BIT_STRING(&str2, &tmp, 14)); + } +#endif + ASN1_BIT_STRING_free(str); + ASN1_BIT_STRING_free(str2); ASN1_BIT_STRING_free(NULL); + XFREE(der, NULL, DYNAMIC_TYPE_ASN1); #endif return EXPECT_RESULT(); } @@ -42332,7 +47202,7 @@ static int test_wolfSSL_d2i_ASN1_INTEGER(void) /* Set a to valid value. */ ExpectIntEQ(wolfSSL_ASN1_INTEGER_set(a, 1), WOLFSSL_SUCCESS); /* NULL output buffer. */ - ExpectIntLT(wolfSSL_i2d_ASN1_INTEGER(a, NULL), 0); + ExpectIntEQ(wolfSSL_i2d_ASN1_INTEGER(a, NULL), 3); wolfSSL_ASN1_INTEGER_free(a); a = NULL; @@ -42730,7 +47600,7 @@ static int test_wolfSSL_ASN1_get_object(void) const unsigned char objDerNotObj[] = { 0x02, 0x01, 0x00 }; const unsigned char objDerNoData[] = { 0x06, 0x00 }; const unsigned char* p; - unsigned char objDer[8]; + unsigned char objDer[10]; unsigned char* der; unsigned char* derPtr; int len = sizeof_cliecc_cert_der_256; @@ -42844,13 +47714,13 @@ static int test_wolfSSL_ASN1_get_object(void) ExpectIntEQ(i2d_ASN1_OBJECT(NULL, NULL), 0); ExpectIntEQ(i2d_ASN1_OBJECT(&s, NULL), 0); - ExpectIntEQ(i2d_ASN1_OBJECT(a, NULL), 8); + ExpectIntEQ(i2d_ASN1_OBJECT(a, NULL), 10); der = NULL; - ExpectIntEQ(i2d_ASN1_OBJECT(a, &der), 8); + ExpectIntEQ(i2d_ASN1_OBJECT(a, &der), 10); derPtr = objDer; - ExpectIntEQ(i2d_ASN1_OBJECT(a, &derPtr), 8); + ExpectIntEQ(i2d_ASN1_OBJECT(a, &derPtr), 10); ExpectPtrNE(derPtr, objDer); - ExpectIntEQ(XMEMCMP(der, objDer, 8), 0); + ExpectIntEQ(XMEMCMP(der, objDer, 10), 0); XFREE(der, NULL, DYNAMIC_TYPE_OPENSSL); ASN1_OBJECT_free(a); @@ -42866,8 +47736,6 @@ static int test_wolfSSL_i2a_ASN1_OBJECT(void) ASN1_OBJECT* a = NULL; BIO *bio = NULL; const unsigned char notObjDer[] = { 0x04, 0x01, 0xff }; - const unsigned char badLenDer[] = { 0x06, 0x04, 0x01 }; - const unsigned char goodDer[] = { 0x06, 0x01, 0x01 }; const unsigned char* p; ExpectNotNull(obj = OBJ_nid2obj(NID_sha256)); @@ -42883,22 +47751,10 @@ static int test_wolfSSL_i2a_ASN1_OBJECT(void) ExpectIntEQ(wolfSSL_i2a_ASN1_OBJECT(bio, a), 0); ASN1_OBJECT_free(a); a = NULL; - /* DER encoding - not OBJECT_ID */ + /* DER encoding */ p = notObjDer; ExpectNotNull(a = c2i_ASN1_OBJECT(NULL, &p, 3)); - ExpectIntEQ(wolfSSL_i2a_ASN1_OBJECT(bio, a), 0); - ASN1_OBJECT_free(a); - a = NULL; - /* Bad length encoding. */ - p = badLenDer; - ExpectNotNull(a = c2i_ASN1_OBJECT(NULL, &p, 3)); - ExpectIntEQ(wolfSSL_i2a_ASN1_OBJECT(bio, a), 0); - ASN1_OBJECT_free(a); - a = NULL; - /* Good encoding - but unknown. */ - p = goodDer; - ExpectNotNull(a = c2i_ASN1_OBJECT(NULL, &p, 3)); - ExpectIntGT(wolfSSL_i2a_ASN1_OBJECT(bio, a), 0); + ExpectIntEQ(wolfSSL_i2a_ASN1_OBJECT(bio, a), 5); ASN1_OBJECT_free(a); BIO_free(bio); @@ -42945,9 +47801,9 @@ static int test_wolfSSL_sk_ASN1_OBJECT(void) sk = NULL; ExpectNotNull(sk = wolfSSL_sk_new_asn1_obj()); - ExpectIntEQ(wolfSSL_sk_ASN1_OBJECT_push(NULL, NULL), 0); + ExpectIntEQ(wolfSSL_sk_ASN1_OBJECT_push(NULL, NULL), -1); ExpectIntEQ(wolfSSL_sk_ASN1_OBJECT_push(sk, NULL), 0); - ExpectIntEQ(wolfSSL_sk_ASN1_OBJECT_push(NULL, obj), 0); + ExpectIntEQ(wolfSSL_sk_ASN1_OBJECT_push(NULL, obj), -1); ExpectIntEQ(wolfSSL_sk_ASN1_OBJECT_push(sk, obj), 1); wolfSSL_sk_ASN1_OBJECT_pop_free(sk, NULL); sk = NULL; @@ -43127,9 +47983,9 @@ static int test_wolfSSL_ASN1_STRING_canon(void) ExpectNotNull(canon = ASN1_STRING_new()); /* Invalid parameter testing. */ - ExpectIntEQ(wolfSSL_ASN1_STRING_canon(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_ASN1_STRING_canon(canon, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_ASN1_STRING_canon(NULL, orig), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_ASN1_STRING_canon(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_ASN1_STRING_canon(canon, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_ASN1_STRING_canon(NULL, orig), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_ASN1_STRING_canon(canon, orig), 1); ExpectIntEQ(ASN1_STRING_cmp(orig, canon), 0); @@ -43480,9 +48336,9 @@ static int test_wolfSSL_ASN1_GENERALIZEDTIME_print(void) ExpectIntEQ(wolfSSL_ASN1_TIME_set_string(gtime, "20180504123500Z"), 1); /* Invalid parameters testing. */ - ExpectIntEQ(wolfSSL_ASN1_GENERALIZEDTIME_print(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_ASN1_GENERALIZEDTIME_print(bio, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_ASN1_GENERALIZEDTIME_print(NULL, gtime), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_ASN1_GENERALIZEDTIME_print(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_ASN1_GENERALIZEDTIME_print(bio, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_ASN1_GENERALIZEDTIME_print(NULL, gtime), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_ASN1_GENERALIZEDTIME_print(bio, gtime), 1); ExpectIntEQ(BIO_read(bio, buf, sizeof(buf)), 20); @@ -43535,6 +48391,9 @@ static int test_wolfSSL_ASN1_TIME(void) ExpectIntEQ(ASN1_TIME_check(NULL), 0); ExpectIntEQ(ASN1_TIME_check(asn_time), 1); + ExpectIntEQ(ASN1_TIME_set_string_X509(asn_time, "101219181011Z"), 1); + ExpectIntEQ(ASN1_TIME_set_string_X509(asn_time, "101219181011Za"), 0); + ASN1_TIME_free(asn_time); ASN1_TIME_free(NULL); #endif @@ -44133,7 +48992,7 @@ static int test_wolfSSL_ASN1_TYPE(void) return EXPECT_RESULT(); } -/* Testing code used in dpp.c in hostap */ +/* Testing code used in old dpp.c in hostap */ #if defined(OPENSSL_ALL) && defined(HAVE_ECC) && defined(USE_CERT_BUFFERS_256) typedef struct { /* AlgorithmIdentifier ecPublicKey with optional parameters present @@ -44150,6 +49009,57 @@ ASN1_SEQUENCE(DPP_BOOTSTRAPPING_KEY) = { IMPLEMENT_ASN1_FUNCTIONS(DPP_BOOTSTRAPPING_KEY) +typedef struct { + int type; + union { + ASN1_BIT_STRING *str1; + ASN1_BIT_STRING *str2; + ASN1_BIT_STRING *str3; + } d; +} ASN1_CHOICE_TEST; + +ASN1_CHOICE(ASN1_CHOICE_TEST) = { + ASN1_IMP(ASN1_CHOICE_TEST, d.str1, ASN1_BIT_STRING, 1), + ASN1_IMP(ASN1_CHOICE_TEST, d.str2, ASN1_BIT_STRING, 2), + ASN1_IMP(ASN1_CHOICE_TEST, d.str3, ASN1_BIT_STRING, 3) +} ASN1_CHOICE_END(ASN1_CHOICE_TEST) + +IMPLEMENT_ASN1_FUNCTIONS(ASN1_CHOICE_TEST) + +/* Test nested objects */ +typedef struct { + DPP_BOOTSTRAPPING_KEY* key; + ASN1_INTEGER* asnNum; + ASN1_INTEGER* expNum; + STACK_OF(ASN1_GENERALSTRING) *strList; + ASN1_CHOICE_TEST* str; +} TEST_ASN1_NEST1; + +ASN1_SEQUENCE(TEST_ASN1_NEST1) = { + ASN1_SIMPLE(TEST_ASN1_NEST1, key, DPP_BOOTSTRAPPING_KEY), + ASN1_SIMPLE(TEST_ASN1_NEST1, asnNum, ASN1_INTEGER), + ASN1_EXP(TEST_ASN1_NEST1, expNum, ASN1_INTEGER, 0), + ASN1_EXP_SEQUENCE_OF(TEST_ASN1_NEST1, strList, ASN1_GENERALSTRING, 1), + ASN1_SIMPLE(TEST_ASN1_NEST1, str, ASN1_CHOICE_TEST) +} ASN1_SEQUENCE_END(TEST_ASN1_NEST1) + +IMPLEMENT_ASN1_FUNCTIONS(TEST_ASN1_NEST1) + +typedef struct { + ASN1_INTEGER* num; + DPP_BOOTSTRAPPING_KEY* key; + TEST_ASN1_NEST1* asn1_obj; +} TEST_ASN1_NEST2; + +ASN1_SEQUENCE(TEST_ASN1_NEST2) = { + ASN1_SIMPLE(TEST_ASN1_NEST2, num, ASN1_INTEGER), + ASN1_SIMPLE(TEST_ASN1_NEST2, key, DPP_BOOTSTRAPPING_KEY), + ASN1_SIMPLE(TEST_ASN1_NEST2, asn1_obj, TEST_ASN1_NEST1) +} ASN1_SEQUENCE_END(TEST_ASN1_NEST2) + +IMPLEMENT_ASN1_FUNCTIONS(TEST_ASN1_NEST2) +/* End nested objects */ + typedef struct { ASN1_INTEGER *integer; } TEST_ASN1; @@ -44160,16 +49070,13 @@ ASN1_SEQUENCE(TEST_ASN1) = { IMPLEMENT_ASN1_FUNCTIONS(TEST_ASN1) -typedef struct { - ASN1_OCTET_STRING *octet_string; -} TEST_FAIL_ASN1; +typedef STACK_OF(ASN1_INTEGER) TEST_ASN1_ITEM; -#define WOLFSSL_ASN1_OCTET_STRING_ASN1 4 -ASN1_SEQUENCE(TEST_FAIL_ASN1) = { - ASN1_SIMPLE(TEST_FAIL_ASN1, octet_string, ASN1_OCTET_STRING), -} ASN1_SEQUENCE_END(TEST_FAIL_ASN1) +ASN1_ITEM_TEMPLATE(TEST_ASN1_ITEM) = + ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, MemName, ASN1_INTEGER) +ASN1_ITEM_TEMPLATE_END(TEST_ASN1_ITEM) -IMPLEMENT_ASN1_FUNCTIONS(TEST_FAIL_ASN1) +IMPLEMENT_ASN1_FUNCTIONS(TEST_ASN1_ITEM) #endif static int test_wolfSSL_IMPLEMENT_ASN1_FUNCTIONS(void) @@ -44182,7 +49089,9 @@ static int test_wolfSSL_IMPLEMENT_ASN1_FUNCTIONS(void) EVP_PKEY *key = NULL; size_t len = 0; unsigned char *der = NULL; - DPP_BOOTSTRAPPING_KEY *bootstrap = NULL; + unsigned char *der2 = NULL; + const unsigned char *tmp = NULL; + DPP_BOOTSTRAPPING_KEY *bootstrap = NULL, *bootstrap2 = NULL; const unsigned char *in = ecc_clikey_der_256; WOLFSSL_ASN1_OBJECT* ec_obj = NULL; WOLFSSL_ASN1_OBJECT* group_obj = NULL; @@ -44190,7 +49099,7 @@ static int test_wolfSSL_IMPLEMENT_ASN1_FUNCTIONS(void) const EC_POINT *point = NULL; int nid; TEST_ASN1 *test_asn1 = NULL; - TEST_FAIL_ASN1 test_fail_asn1; + TEST_ASN1 *test_asn1_2 = NULL; const unsigned char badObjDer[] = { 0x06, 0x00 }; const unsigned char goodObjDer[] = { @@ -44203,9 +49112,9 @@ static int test_wolfSSL_IMPLEMENT_ASN1_FUNCTIONS(void) ExpectNotNull(bootstrap = DPP_BOOTSTRAPPING_KEY_new()); der = NULL; - ExpectIntEQ(i2d_DPP_BOOTSTRAPPING_KEY(NULL, &der), 0); - ExpectIntEQ(wolfSSL_ASN1_item_i2d(bootstrap, &der, NULL), 0); - ExpectIntEQ(i2d_DPP_BOOTSTRAPPING_KEY(bootstrap, &der), 0); + ExpectIntEQ(i2d_DPP_BOOTSTRAPPING_KEY(NULL, &der), -1); + ExpectIntEQ(wolfSSL_ASN1_item_i2d(bootstrap, &der, NULL), -1); + ExpectIntEQ(i2d_DPP_BOOTSTRAPPING_KEY(bootstrap, &der), -1); ExpectNotNull(key = d2i_PrivateKey(EVP_PKEY_EC, NULL, &in, (long)sizeof_ecc_clikey_der_256)); @@ -44256,15 +49165,23 @@ static int test_wolfSSL_IMPLEMENT_ASN1_FUNCTIONS(void) bootstrap->pub_key->flags |= ASN1_STRING_FLAG_BITS_LEFT; } - ExpectIntGT(i2d_DPP_BOOTSTRAPPING_KEY(bootstrap, NULL), 0); + ExpectIntEQ(i2d_DPP_BOOTSTRAPPING_KEY(bootstrap, NULL), 16+len); der = NULL; - ExpectIntGT(i2d_DPP_BOOTSTRAPPING_KEY(bootstrap, &der), 0); - ExpectIntGT(i2d_DPP_BOOTSTRAPPING_KEY(bootstrap, &der), 0); + ExpectIntEQ(i2d_DPP_BOOTSTRAPPING_KEY(bootstrap, &der), 16+len); + der2 = NULL; +#ifdef WOLFSSL_ASN_TEMPLATE + tmp = der; + ExpectNotNull(d2i_DPP_BOOTSTRAPPING_KEY(&bootstrap2, &tmp, 16+len)); + ExpectIntEQ(i2d_DPP_BOOTSTRAPPING_KEY(bootstrap2, &der2), 16+len); + ExpectBufEQ(der, der2, 49); +#endif XFREE(der, NULL, DYNAMIC_TYPE_ASN1); + XFREE(der2, NULL, DYNAMIC_TYPE_ASN1); EVP_PKEY_free(key); EC_KEY_free(eckey); DPP_BOOTSTRAPPING_KEY_free(bootstrap); + DPP_BOOTSTRAPPING_KEY_free(bootstrap2); bootstrap = NULL; DPP_BOOTSTRAPPING_KEY_free(NULL); @@ -44288,7 +49205,7 @@ static int test_wolfSSL_IMPLEMENT_ASN1_FUNCTIONS(void) } /* Encode with bad OBJECT_ID. */ der = NULL; - ExpectIntEQ(i2d_DPP_BOOTSTRAPPING_KEY(bootstrap, &der), 0); + ExpectIntEQ(i2d_DPP_BOOTSTRAPPING_KEY(bootstrap, &der), -1); /* Fix OBJECT_ID and encode with empty BIT_STRING. */ if (EXPECT_SUCCESS()) { @@ -44298,7 +49215,7 @@ static int test_wolfSSL_IMPLEMENT_ASN1_FUNCTIONS(void) } der = NULL; ExpectIntEQ(i2d_DPP_BOOTSTRAPPING_KEY(bootstrap, &der), 16); - ExpectIntEQ(wolfSSL_ASN1_item_i2d(bootstrap, &der, &emptyTemplate), 0); + ExpectIntEQ(wolfSSL_ASN1_item_i2d(bootstrap, &der, &emptyTemplate), -1); XFREE(der, NULL, DYNAMIC_TYPE_ASN1); DPP_BOOTSTRAPPING_KEY_free(bootstrap); @@ -44307,24 +49224,225 @@ static int test_wolfSSL_IMPLEMENT_ASN1_FUNCTIONS(void) der = NULL; ExpectIntEQ(ASN1_INTEGER_set(test_asn1->integer, 100), 1); ExpectIntEQ(i2d_TEST_ASN1(test_asn1, &der), 5); + tmp = der; + ExpectNotNull(d2i_TEST_ASN1(&test_asn1_2, &tmp, 5)); + der2 = NULL; + ExpectIntEQ(i2d_TEST_ASN1(test_asn1_2, &der2), 5); + ExpectBufEQ(der, der2, 5); XFREE(der, NULL, DYNAMIC_TYPE_ASN1); + XFREE(der2, NULL, DYNAMIC_TYPE_ASN1); TEST_ASN1_free(test_asn1); + TEST_ASN1_free(test_asn1_2); /* Test integer cases. */ ExpectNull(wolfSSL_ASN1_item_new(NULL)); TEST_ASN1_free(NULL); - /* Test error cases. */ - ExpectNull(TEST_FAIL_ASN1_new()); - ExpectNull(wolfSSL_ASN1_item_new(NULL)); - TEST_FAIL_ASN1_free(NULL); - XMEMSET(&test_fail_asn1, 0, sizeof(TEST_FAIL_ASN1)); - ExpectIntEQ(i2d_TEST_FAIL_ASN1(&test_fail_asn1, &der), 0); + /* Test nested asn1 objects */ + { + TEST_ASN1_NEST2 *nested_asn1 = NULL; + TEST_ASN1_NEST2 *nested_asn1_2 = NULL; + int i; + + ExpectNotNull(nested_asn1 = TEST_ASN1_NEST2_new()); + /* Populate nested_asn1 with some random data */ + /* nested_asn1->num */ + ExpectIntEQ(ASN1_INTEGER_set(nested_asn1->num, 30003), 1); + /* nested_asn1->key */ + ec_obj = OBJ_nid2obj(EVP_PKEY_EC); + group_obj = OBJ_nid2obj(NID_secp256k1); + ExpectIntEQ(X509_ALGOR_set0(nested_asn1->key->alg, ec_obj, + V_ASN1_OBJECT, group_obj), 1); + ec_obj = NULL; + group_obj = NULL; + ExpectIntEQ(ASN1_BIT_STRING_set_bit(nested_asn1->key->pub_key, 50, 1), + 1); + /* nested_asn1->asn1_obj->key */ + ec_obj = OBJ_nid2obj(EVP_PKEY_EC); + group_obj = OBJ_nid2obj(NID_secp256k1); + ExpectIntEQ(X509_ALGOR_set0(nested_asn1->asn1_obj->key->alg, ec_obj, + V_ASN1_OBJECT, group_obj), 1); + ec_obj = NULL; + group_obj = NULL; + ExpectIntEQ(ASN1_BIT_STRING_set_bit(nested_asn1->asn1_obj->key->pub_key, + 500, 1), 1); + /* nested_asn1->asn1_obj->asnNum */ + ExpectIntEQ(ASN1_INTEGER_set(nested_asn1->asn1_obj->asnNum, 666666), 1); + /* nested_asn1->asn1_obj->expNum */ + ExpectIntEQ(ASN1_INTEGER_set(nested_asn1->asn1_obj->expNum, 22222), 1); + /* nested_asn1->asn1_obj->strList */ + for (i = 10; i >= 0; i--) { + ASN1_GENERALSTRING* genStr; + char fmtStr[20]; + + ExpectIntGT(snprintf(fmtStr, sizeof(fmtStr), "Bonjour #%d", i), 0); + ExpectNotNull(genStr = ASN1_GENERALSTRING_new()); + ExpectIntEQ(ASN1_GENERALSTRING_set(genStr, fmtStr, -1), 1); + ExpectIntGT( + sk_ASN1_GENERALSTRING_push(nested_asn1->asn1_obj->strList, + genStr), 0); + } + /* nested_asn1->asn1_obj->str */ + ExpectNotNull(nested_asn1->asn1_obj->str->d.str2 + = ASN1_BIT_STRING_new()); + ExpectIntEQ(ASN1_BIT_STRING_set_bit(nested_asn1->asn1_obj->str->d.str2, + 150, 1), 1); + nested_asn1->asn1_obj->str->type = 2; + + der = NULL; + ExpectIntEQ(i2d_TEST_ASN1_NEST2(nested_asn1, &der), 285); +#ifdef WOLFSSL_ASN_TEMPLATE + tmp = der; + ExpectNotNull(d2i_TEST_ASN1_NEST2(&nested_asn1_2, &tmp, 285)); + der2 = NULL; + ExpectIntEQ(i2d_TEST_ASN1_NEST2(nested_asn1_2, &der2), 285); + ExpectBufEQ(der, der2, 285); + XFREE(der2, NULL, DYNAMIC_TYPE_ASN1); +#endif + XFREE(der, NULL, DYNAMIC_TYPE_ASN1); + + TEST_ASN1_NEST2_free(nested_asn1); + TEST_ASN1_NEST2_free(nested_asn1_2); + } + + /* Test ASN1_ITEM_TEMPLATE */ + { + TEST_ASN1_ITEM* asn1_item = NULL; + TEST_ASN1_ITEM* asn1_item2 = NULL; + int i; + + ExpectNotNull(asn1_item = TEST_ASN1_ITEM_new()); + for (i = 0; i < 11; i++) { + ASN1_INTEGER* asn1_num; + + ExpectNotNull(asn1_num = ASN1_INTEGER_new()); + ExpectIntEQ(ASN1_INTEGER_set(asn1_num, i), 1); + ExpectIntGT(wolfSSL_sk_insert(asn1_item, asn1_num, -1), 0); + } + + der = NULL; + ExpectIntEQ(i2d_TEST_ASN1_ITEM(asn1_item, &der), 35); + tmp = der; + ExpectNotNull(d2i_TEST_ASN1_ITEM(&asn1_item2, &tmp, 35)); + der2 = NULL; + ExpectIntEQ(i2d_TEST_ASN1_ITEM(asn1_item2, &der2), 35); + ExpectBufEQ(der, der2, 35); + XFREE(der, NULL, DYNAMIC_TYPE_ASN1); + XFREE(der2, NULL, DYNAMIC_TYPE_ASN1); + + TEST_ASN1_ITEM_free(asn1_item); + TEST_ASN1_ITEM_free(asn1_item2); + } + #endif /* !HAVE_FIPS || HAVE_FIPS_VERSION > 2 */ #endif /* OPENSSL_ALL && HAVE_ECC && USE_CERT_BUFFERS_256 */ return EXPECT_RESULT(); } +static int test_wolfSSL_i2d_ASN1_TYPE(void) +{ + EXPECT_DECLS; +#if defined(OPENSSL_EXTRA) + /* Taken from one of sssd's certs othernames */ + unsigned char str_bin[] = { + 0x04, 0x10, 0xa4, 0x9b, 0xc8, 0xf4, 0x85, 0x8e, 0x89, 0x4d, 0x85, 0x8d, + 0x27, 0xbd, 0x63, 0xaa, 0x93, 0x93 + }; + ASN1_TYPE* asn1type = NULL; + unsigned char* der = NULL; + + /* Create ASN1_TYPE manually as we don't have a d2i version yet */ + { + ASN1_STRING* str = NULL; + ExpectNotNull(str = ASN1_STRING_type_new(V_ASN1_SEQUENCE)); + ExpectIntEQ(ASN1_STRING_set(str, str_bin, sizeof(str_bin)), 1); + ExpectNotNull(asn1type = ASN1_TYPE_new()); + ASN1_TYPE_set(asn1type, V_ASN1_SEQUENCE, str); + } + + ExpectIntEQ(i2d_ASN1_TYPE(asn1type, NULL), sizeof(str_bin)); + ExpectIntEQ(i2d_ASN1_TYPE(asn1type, &der), sizeof(str_bin)); + ExpectBufEQ(der, str_bin, sizeof(str_bin)); + + ASN1_TYPE_free(asn1type); + XFREE(der, NULL, DYNAMIC_TYPE_ASN1); +#endif + return EXPECT_RESULT(); +} + +static int test_wolfSSL_i2d_ASN1_SEQUENCE(void) +{ + EXPECT_DECLS; +#if defined(OPENSSL_EXTRA) + /* Taken from one of sssd's certs othernames */ + unsigned char str_bin[] = { + 0x04, 0x10, 0xa4, 0x9b, 0xc8, 0xf4, 0x85, 0x8e, 0x89, 0x4d, 0x85, 0x8d, + 0x27, 0xbd, 0x63, 0xaa, 0x93, 0x93 + }; + ASN1_STRING* str = NULL; + unsigned char* der = NULL; + + ExpectNotNull(str = ASN1_STRING_type_new(V_ASN1_SEQUENCE)); + ExpectIntEQ(ASN1_STRING_set(str, str_bin, sizeof(str_bin)), 1); + ExpectIntEQ(i2d_ASN1_SEQUENCE(str, NULL), sizeof(str_bin)); + ExpectIntEQ(i2d_ASN1_SEQUENCE(str, &der), sizeof(str_bin)); + + ASN1_STRING_free(str); + XFREE(der, NULL, DYNAMIC_TYPE_ASN1); +#endif + return EXPECT_RESULT(); +} + +static int test_ASN1_strings(void) +{ + EXPECT_DECLS; +#if defined(OPENSSL_EXTRA) + char text[] = "\0\0test string"; + unsigned char* der = NULL; + ASN1_STRING* str = NULL; + + /* Set the length byte */ + text[1] = XSTRLEN(text + 2); + + /* GENERALSTRING */ + { + const unsigned char* p = (const unsigned char*)text; + text[0] = ASN_GENERALSTRING; + ExpectNotNull(d2i_ASN1_GENERALSTRING(&str, &p, sizeof(text))); + ExpectIntEQ(i2d_ASN1_GENERALSTRING(str, &der), 13); + ASN1_STRING_free(str); + str = NULL; + XFREE(der, NULL, DYNAMIC_TYPE_ASN1); + der = NULL; + } + + /* OCTET_STRING */ + { + const unsigned char* p = (const unsigned char*)text; + text[0] = ASN_OCTET_STRING; + ExpectNotNull(d2i_ASN1_OCTET_STRING(&str, &p, sizeof(text))); + ExpectIntEQ(i2d_ASN1_OCTET_STRING(str, &der), 13); + ASN1_STRING_free(str); + str = NULL; + XFREE(der, NULL, DYNAMIC_TYPE_ASN1); + der = NULL; + } + + /* UTF8STRING */ + { + const unsigned char* p = (const unsigned char*)text; + text[0] = ASN_UTF8STRING; + ExpectNotNull(d2i_ASN1_UTF8STRING(&str, &p, sizeof(text))); + ExpectIntEQ(i2d_ASN1_UTF8STRING(str, &der), 13); + ASN1_STRING_free(str); + str = NULL; + XFREE(der, NULL, DYNAMIC_TYPE_ASN1); + der = NULL; + } + +#endif + return EXPECT_RESULT(); +} static int test_wolfSSL_lhash(void) { @@ -44873,12 +49991,12 @@ static int test_wolfSSL_X509_check_host(void) WOLFSSL_SUCCESS); ExpectIntEQ(X509_check_host(x509, NULL, 0, 0, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); X509_free(x509); ExpectIntEQ(X509_check_host(NULL, altName, XSTRLEN(altName), 0, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif return EXPECT_RESULT(); } @@ -44896,7 +50014,7 @@ static int test_wolfSSL_X509_check_email(void) /* Should fail on non-matching email address */ ExpectIntEQ(wolfSSL_X509_check_email(x509, badEmail, XSTRLEN(badEmail), 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Should succeed on matching email address */ ExpectIntEQ(wolfSSL_X509_check_email(x509, goodEmail, XSTRLEN(goodEmail), 0), WOLFSSL_SUCCESS); @@ -44905,13 +50023,13 @@ static int test_wolfSSL_X509_check_email(void) WOLFSSL_SUCCESS); /* Should fail when email address is NULL */ ExpectIntEQ(wolfSSL_X509_check_email(x509, NULL, 0, 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); X509_free(x509); /* Should fail when x509 is NULL */ ExpectIntEQ(wolfSSL_X509_check_email(NULL, goodEmail, 0, 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif /* OPENSSL_EXTRA && WOLFSSL_CERT_GEN */ return EXPECT_RESULT(); } @@ -44974,7 +50092,7 @@ static int test_wc_AllocDer(void) word32 testSize = 1024; ExpectIntEQ(wc_AllocDer(NULL, testSize, CERT_TYPE, HEAP_HINT), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_AllocDer(&pDer, testSize, CERT_TYPE, HEAP_HINT), 0); ExpectNotNull(pDer); wc_FreeDer(&pDer); @@ -44999,19 +50117,19 @@ static int test_wc_CertPemToDer(void) (int)cert_dersz, CERT_TYPE), 0); ExpectIntEQ(wc_CertPemToDer(NULL, (int)cert_sz, NULL, -1, CERT_TYPE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CertPemToDer(cert_buf, (int)cert_sz, NULL, -1, CERT_TYPE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CertPemToDer(NULL, (int)cert_sz, cert_der, -1, CERT_TYPE), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CertPemToDer(NULL, (int)cert_sz, NULL, (int)cert_dersz, - CERT_TYPE), BAD_FUNC_ARG); + CERT_TYPE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CertPemToDer(NULL, (int)cert_sz, cert_der, - (int)cert_dersz, CERT_TYPE), BAD_FUNC_ARG); + (int)cert_dersz, CERT_TYPE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CertPemToDer(cert_buf, (int)cert_sz, NULL, - (int)cert_dersz, CERT_TYPE), BAD_FUNC_ARG); + (int)cert_dersz, CERT_TYPE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_CertPemToDer(cert_buf, (int)cert_sz, cert_der, -1, - CERT_TYPE), BAD_FUNC_ARG); + CERT_TYPE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); if (cert_der != NULL) free(cert_der); @@ -45062,11 +50180,11 @@ static int test_wc_KeyPemToDer(void) /* Bad arg: Cert buffer is NULL */ ExpectIntEQ(wc_KeyPemToDer(NULL, cert_sz, cert_der, cert_dersz, ""), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Bad arg: Cert DER buffer non-NULL but size zero (or less) */ ExpectIntEQ(wc_KeyPemToDer(cert_buf, cert_sz, (byte*)&cert_der, 0, ""), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Test normal operation */ cert_dersz = cert_sz; /* DER will be smaller than PEM */ @@ -45106,7 +50224,7 @@ static int test_wc_PubKeyPemToDer(void) byte* cert_der = NULL; ExpectIntEQ(wc_PubKeyPemToDer(cert_buf, (int)cert_sz, - cert_der, (int)cert_dersz), BAD_FUNC_ARG); + cert_der, (int)cert_dersz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(load_file(key, &cert_buf, &cert_sz), 0); cert_dersz = cert_sz; /* DER will be smaller than PEM */ @@ -45146,7 +50264,7 @@ static int test_wc_PemPubKeyToDer(void) byte* cert_der = NULL; ExpectIntGE(wc_PemPubKeyToDer(NULL, cert_der, (int)cert_dersz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectNotNull(cert_der = (byte*)malloc(cert_dersz)); ExpectIntGE(wc_PemPubKeyToDer(key, cert_der, (int)cert_dersz), 0); @@ -45229,19 +50347,19 @@ static int test_wc_GetPubKeyDerFromCert(void) /* test LENGTH_ONLY_E case */ keyDerSz = 0; ExpectIntEQ(wc_GetPubKeyDerFromCert(&decoded, NULL, &keyDerSz), - LENGTH_ONLY_E); + WC_NO_ERR_TRACE(LENGTH_ONLY_E)); ExpectIntGT(keyDerSz, 0); /* bad args: DecodedCert NULL */ - ExpectIntEQ(wc_GetPubKeyDerFromCert(NULL, keyDer, &keyDerSz), BAD_FUNC_ARG); + ExpectIntEQ(wc_GetPubKeyDerFromCert(NULL, keyDer, &keyDerSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* bad args: output key buff size */ - ExpectIntEQ(wc_GetPubKeyDerFromCert(&decoded, keyDer, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_GetPubKeyDerFromCert(&decoded, keyDer, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* bad args: zero size output key buffer */ keyDerSz = 0; ExpectIntEQ(ret = wc_GetPubKeyDerFromCert(&decoded, keyDer, &keyDerSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wc_FreeDecodedCert(&decoded); @@ -45309,7 +50427,7 @@ static int test_wc_GetPubKeyDerFromCert(void) /* test LENGTH_ONLY_E case */ keyDerSz = 0; ExpectIntEQ(wc_GetPubKeyDerFromCert(&decoded, NULL, &keyDerSz), - LENGTH_ONLY_E); + WC_NO_ERR_TRACE(LENGTH_ONLY_E)); ExpectIntGT(keyDerSz, 0); wc_FreeDecodedCert(&decoded); @@ -45351,24 +50469,24 @@ static int test_wc_CheckCertSigPubKey(void) /* No certificate. */ ExpectIntEQ(wc_CheckCertSigPubKey(NULL, cert_dersz, NULL, keyDer, keyDerSz, - ECDSAk), BAD_FUNC_ARG); + ECDSAk), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Bad cert size. */ ExpectIntNE(ret = wc_CheckCertSigPubKey(cert_der, 0, NULL, keyDer, keyDerSz, RSAk), 0); - ExpectTrue(ret == ASN_PARSE_E || ret == BUFFER_E); + ExpectTrue(ret == WC_NO_ERR_TRACE(ASN_PARSE_E) || ret == WC_NO_ERR_TRACE(BUFFER_E)); /* No public key. */ ExpectIntEQ(wc_CheckCertSigPubKey(cert_der, cert_dersz, NULL, NULL, - keyDerSz, RSAk), ASN_NO_SIGNER_E); + keyDerSz, RSAk), WC_NO_ERR_TRACE(ASN_NO_SIGNER_E)); /* Bad public key size. */ ExpectIntEQ(wc_CheckCertSigPubKey(cert_der, cert_dersz, NULL, keyDer, 0, - RSAk), BAD_FUNC_ARG); + RSAk), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Wrong aglo. */ ExpectIntEQ(wc_CheckCertSigPubKey(cert_der, cert_dersz, NULL, keyDer, - keyDerSz, ECDSAk), ASN_PARSE_E); + keyDerSz, ECDSAk), WC_NO_ERR_TRACE(ASN_PARSE_E)); wc_FreeDecodedCert(&decoded); if (cert_der != NULL) @@ -45407,7 +50525,7 @@ static int test_wolfSSL_certs(void) ExpectTrue(SSL_CTX_use_PrivateKey_file(ctx, svrKeyFile, SSL_FILETYPE_PEM)); ExpectTrue(SSL_CTX_use_PrivateKey_file(ctx, cliKeyFile, SSL_FILETYPE_PEM)); #if !defined(NO_CHECK_PRIVATE_KEY) - ExpectIntEQ(SSL_CTX_check_private_key(ctx), SSL_FAILURE); + ExpectIntEQ(SSL_CTX_check_private_key(ctx), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif ExpectTrue(SSL_CTX_use_PrivateKey_file(ctx, svrKeyFile, SSL_FILETYPE_PEM)); #if !defined(NO_CHECK_PRIVATE_KEY) @@ -45417,11 +50535,11 @@ static int test_wolfSSL_certs(void) /* Invalid parameters. */ ExpectIntEQ(SSL_use_certificate_file(NULL, NULL, WOLFSSL_FILETYPE_PEM), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(SSL_use_certificate_file(ssl, NULL, WOLFSSL_FILETYPE_PEM), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(SSL_use_certificate_file(NULL, "./certs/server-cert.pem", - WOLFSSL_FILETYPE_PEM), BAD_FUNC_ARG); + WOLFSSL_FILETYPE_PEM), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #if !defined(NO_CHECK_PRIVATE_KEY) ExpectIntEQ(wolfSSL_check_private_key(ssl), WOLFSSL_SUCCESS); @@ -45433,11 +50551,11 @@ static int test_wolfSSL_certs(void) /* Invalid parameters. */ ExpectNotNull(x509 = wolfSSL_X509_new()); - ExpectIntEQ(SSL_use_certificate(NULL, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(SSL_use_certificate(ssl, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(SSL_use_certificate(NULL, x509), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_use_certificate(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(SSL_use_certificate(ssl, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(SSL_use_certificate(NULL, x509), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* No data in certificate. */ - ExpectIntEQ(SSL_use_certificate(ssl, x509), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_use_certificate(ssl, x509), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); wolfSSL_X509_free(x509); x509 = NULL; @@ -45458,13 +50576,13 @@ static int test_wolfSSL_certs(void) #if defined(USE_CERT_BUFFERS_2048) /* Invalid parameters. */ - ExpectIntEQ(SSL_use_certificate_ASN1(NULL, NULL, 0), WOLFSSL_FAILURE); - ExpectIntEQ(SSL_use_certificate_ASN1(ssl, NULL, 0), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_use_certificate_ASN1(NULL, NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(SSL_use_certificate_ASN1(ssl, NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(SSL_use_certificate_ASN1(NULL, - (unsigned char*)server_cert_der_2048, 0), WOLFSSL_FAILURE); + (unsigned char*)server_cert_der_2048, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* No data. */ ExpectIntEQ(SSL_use_certificate_ASN1(ssl, - (unsigned char*)server_cert_der_2048, 0), WOLFSSL_FAILURE); + (unsigned char*)server_cert_der_2048, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(SSL_use_certificate_ASN1(ssl, (unsigned char*)server_cert_der_2048, @@ -45484,7 +50602,7 @@ static int test_wolfSSL_certs(void) WOLFSSL_SUCCESS); ExpectIntEQ(X509_digest(NULL, wolfSSL_EVP_sha1(), digest, &digestSz), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); } #endif /* !NO_SHA && !NO_SHA256 && !NO_PWDBASED */ @@ -45509,7 +50627,7 @@ static int test_wolfSSL_certs(void) ExpectNotNull(ext = X509_EXTENSION_new()); X509_EXTENSION_set_critical(ext, 0); - ExpectIntEQ(X509_EXTENSION_set_data(ext, NULL), SSL_FAILURE); + ExpectIntEQ(X509_EXTENSION_set_data(ext, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); asn1_str = (ASN1_STRING*)X509_get_ext_d2i(x509ext, NID_key_usage, &crit, NULL); ExpectIntEQ(X509_EXTENSION_set_data(ext, asn1_str), SSL_SUCCESS); @@ -45722,7 +50840,7 @@ static int test_wolfSSL_private_keys(void) /* Have to load a cert before you can check the private key against that * certificates public key! */ #if !defined(NO_CHECK_PRIVATE_KEY) - ExpectIntEQ(wolfSSL_CTX_check_private_key(ctx), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_CTX_check_private_key(ctx), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif ExpectTrue(SSL_CTX_use_certificate_file(ctx, svrCertFile, WOLFSSL_FILETYPE_PEM)); @@ -45737,11 +50855,11 @@ static int test_wolfSSL_private_keys(void) /* Invalid parameters. */ ExpectIntEQ(SSL_use_PrivateKey_file(NULL, NULL, WOLFSSL_FILETYPE_PEM), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(SSL_use_PrivateKey_file(NULL, svrKeyFile, WOLFSSL_FILETYPE_PEM), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(SSL_use_PrivateKey_file(ssl, NULL, WOLFSSL_FILETYPE_PEM), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #ifdef USE_CERT_BUFFERS_2048 { @@ -45750,18 +50868,18 @@ static int test_wolfSSL_private_keys(void) word32 bufSz; /* Invalid parameters. */ - ExpectIntEQ(SSL_use_RSAPrivateKey_ASN1(NULL, NULL, 0), WOLFSSL_FAILURE); - ExpectIntEQ(SSL_use_RSAPrivateKey_ASN1(ssl, NULL, 0), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_use_RSAPrivateKey_ASN1(NULL, NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(SSL_use_RSAPrivateKey_ASN1(ssl, NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(SSL_use_RSAPrivateKey_ASN1(NULL, - (unsigned char*)client_key_der_2048, 0), WOLFSSL_FAILURE); - ExpectIntEQ(SSL_use_PrivateKey_ASN1(0, NULL, NULL, 0), WOLFSSL_FAILURE); - ExpectIntEQ(SSL_use_PrivateKey_ASN1(0, ssl, NULL, 0), WOLFSSL_FAILURE); + (unsigned char*)client_key_der_2048, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(SSL_use_PrivateKey_ASN1(0, NULL, NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(SSL_use_PrivateKey_ASN1(0, ssl, NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(SSL_use_PrivateKey_ASN1(0, NULL, (unsigned char*)server_key, 0), - WOLFSSL_FAILURE); - ExpectIntEQ(SSL_CTX_use_PrivateKey_ASN1(0, NULL, NULL, 0), WOLFSSL_FAILURE); - ExpectIntEQ(SSL_CTX_use_PrivateKey_ASN1(0, ctx, NULL, 0), WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(SSL_CTX_use_PrivateKey_ASN1(0, NULL, NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(SSL_CTX_use_PrivateKey_ASN1(0, ctx, NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(SSL_CTX_use_PrivateKey_ASN1(0, NULL, (unsigned char*)server_key, - 0), WOLFSSL_FAILURE); + 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(SSL_use_RSAPrivateKey_ASN1(ssl, (unsigned char*)client_key_der_2048, @@ -45799,11 +50917,11 @@ static int test_wolfSSL_private_keys(void) /* Invalid parameters. */ ExpectNotNull(pkey = wolfSSL_EVP_PKEY_new()); - ExpectIntEQ(SSL_use_PrivateKey(NULL, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(SSL_use_PrivateKey(ssl, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(SSL_use_PrivateKey(NULL, pkey), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_use_PrivateKey(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(SSL_use_PrivateKey(ssl, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(SSL_use_PrivateKey(NULL, pkey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* pkey is empty - no key data to use. */ - ExpectIntEQ(SSL_use_PrivateKey(ssl, pkey), ASN_PARSE_E); + ExpectIntEQ(SSL_use_PrivateKey(ssl, pkey), WC_NO_ERR_TRACE(ASN_PARSE_E)); wolfSSL_EVP_PKEY_free(pkey); pkey = NULL; @@ -46220,9 +51338,9 @@ static int test_wolfSSL_PEM_PrivateKey_rsa(void) XMEMSET(extra, BIO_PEM_TEST_CHAR, sizeof(extra)); ExpectNotNull(bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem())); - ExpectIntEQ(BIO_set_write_buf_size(bio, 4096), SSL_FAILURE); + ExpectIntEQ(BIO_set_write_buf_size(bio, 4096), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectNotNull(pub_bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem())); - ExpectIntEQ(BIO_set_write_buf_size(pub_bio, 4096), SSL_FAILURE); + ExpectIntEQ(BIO_set_write_buf_size(pub_bio, 4096), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectNull(d2i_PrivateKey(EVP_PKEY_EC, &pkey, &server_key, (long)sizeof_server_key_der_2048)); @@ -46231,17 +51349,17 @@ static int test_wolfSSL_PEM_PrivateKey_rsa(void) ExpectNotNull(wolfSSL_d2i_PrivateKey(EVP_PKEY_RSA, &pkey, &server_key, (long)sizeof_server_key_der_2048)); ExpectIntEQ(PEM_write_bio_PrivateKey(NULL, pkey, NULL, NULL, 0, NULL, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_write_bio_PrivateKey(bio, NULL, NULL, NULL, 0, NULL, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_write_bio_PrivateKey(bio, pkey, NULL, NULL, 0, NULL, NULL), WOLFSSL_SUCCESS); ExpectIntGT(BIO_pending(bio), 0); ExpectIntEQ(BIO_pending(bio), 1679); /* Check if the pubkey API writes only the public key */ #ifdef WOLFSSL_KEY_GEN - ExpectIntEQ(PEM_write_bio_PUBKEY(NULL, pkey), WOLFSSL_FAILURE); - ExpectIntEQ(PEM_write_bio_PUBKEY(pub_bio, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(PEM_write_bio_PUBKEY(NULL, pkey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(PEM_write_bio_PUBKEY(pub_bio, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_write_bio_PUBKEY(pub_bio, pkey), WOLFSSL_SUCCESS); ExpectIntGT(BIO_pending(pub_bio), 0); /* Previously both the private key and the pubkey calls would write @@ -46535,7 +51653,7 @@ static int test_wolfSSL_PEM_PrivateKey(void) NULL), 0); #endif #ifdef WOLFSSL_KEY_GEN - ExpectIntEQ(PEM_write_bio_PUBKEY(bio, pkey), WOLFSSL_FAILURE); + ExpectIntEQ(PEM_write_bio_PUBKEY(bio, pkey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif EVP_PKEY_free(pkey); pkey = NULL; @@ -46669,12 +51787,12 @@ static int test_wolfSSL_PEM_file_RSAKey(void) XFCLOSE(fp); ExpectIntEQ(RSA_size(rsa), 256); - ExpectIntEQ(PEM_write_RSAPublicKey(XBADFILE, rsa), WOLFSSL_FAILURE); - ExpectIntEQ(PEM_write_RSAPublicKey(stderr, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(PEM_write_RSAPublicKey(XBADFILE, rsa), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(PEM_write_RSAPublicKey(stderr, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_write_RSAPublicKey(stderr, rsa), WOLFSSL_SUCCESS); - ExpectIntEQ(PEM_write_RSA_PUBKEY(XBADFILE, rsa), WOLFSSL_FAILURE); - ExpectIntEQ(PEM_write_RSA_PUBKEY(stderr, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(PEM_write_RSA_PUBKEY(XBADFILE, rsa), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(PEM_write_RSA_PUBKEY(stderr, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_write_RSA_PUBKEY(stderr, rsa), WOLFSSL_SUCCESS); RSA_free(rsa); @@ -46702,9 +51820,9 @@ static int test_wolfSSL_PEM_file_RSAPrivateKey(void) } ExpectIntEQ(PEM_write_RSAPrivateKey(XBADFILE, rsa, NULL, NULL, 0, NULL, - NULL), WOLFSSL_FAILURE); + NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_write_RSAPrivateKey(stderr, NULL, NULL, NULL, 0, NULL, - NULL), WOLFSSL_FAILURE); + NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_write_RSAPrivateKey(stderr, rsa, NULL, NULL, 0, NULL, NULL), WOLFSSL_SUCCESS); @@ -46758,7 +51876,7 @@ static int test_wolfSSL_PEM_bio_RSAKey(void) ExpectNotNull(rsa); ExpectIntEQ(RSA_size(rsa), 256); ExpectIntEQ(PEM_write_bio_RSAPrivateKey(NULL, NULL, NULL, NULL, 0, NULL, \ - NULL), WOLFSSL_FAILURE); + NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); BIO_free(bio); bio = NULL; ExpectNotNull(bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem())); @@ -46774,7 +51892,7 @@ static int test_wolfSSL_PEM_bio_RSAKey(void) ExpectNull((rsa = PEM_read_bio_RSA_PUBKEY(NULL, NULL, NULL, NULL))); ExpectNotNull((rsa = PEM_read_bio_RSA_PUBKEY(bio, NULL, NULL, NULL))); ExpectIntEQ(RSA_size(rsa), 256); - ExpectIntEQ(PEM_write_bio_RSA_PUBKEY(NULL, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(PEM_write_bio_RSA_PUBKEY(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); BIO_free(bio); bio = NULL; ExpectNotNull(bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem())); @@ -46869,7 +51987,7 @@ static int test_wolfSSL_PEM_bio_DSAKey(void) ExpectNotNull((dsa = PEM_read_bio_DSAPrivateKey(bio, NULL, NULL, NULL))); ExpectIntEQ(BN_num_bytes(dsa->g), 128); ExpectIntEQ(PEM_write_bio_DSAPrivateKey(NULL, NULL, NULL, NULL, 0, NULL, - NULL), WOLFSSL_FAILURE); + NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); BIO_free(bio); bio = NULL; ExpectNotNull(bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem())); @@ -46885,7 +52003,7 @@ static int test_wolfSSL_PEM_bio_DSAKey(void) ExpectNull((dsa = PEM_read_bio_DSA_PUBKEY(NULL, NULL, NULL, NULL))); ExpectNotNull((dsa = PEM_read_bio_DSA_PUBKEY(bio, NULL, NULL, NULL))); ExpectIntEQ(BN_num_bytes(dsa->g), 128); - ExpectIntEQ(PEM_write_bio_DSA_PUBKEY(NULL, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(PEM_write_bio_DSA_PUBKEY(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); BIO_free(bio); bio = NULL; ExpectNotNull(bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem())); @@ -46939,11 +52057,11 @@ static int test_wolfSSL_PEM_bio_ECKey(void) ExpectIntEQ(ec == ec2, 1); ExpectIntEQ(wc_ecc_size((ecc_key*)ec->internal), 32); ExpectIntEQ(PEM_write_bio_ECPrivateKey(NULL, NULL, NULL, NULL, 0, NULL, - NULL), WOLFSSL_FAILURE); + NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_write_bio_ECPrivateKey(bio, NULL, NULL, NULL, 0, NULL, - NULL), WOLFSSL_FAILURE); + NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_write_bio_ECPrivateKey(NULL, ec, NULL, NULL, 0, NULL, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); BIO_free(bio); bio = NULL; /* Public key data - fail. */ @@ -46958,11 +52076,11 @@ static int test_wolfSSL_PEM_bio_ECKey(void) bio = NULL; ExpectIntEQ(PEM_write_ECPrivateKey(XBADFILE, NULL, NULL, NULL, 0, NULL, - NULL),WOLFSSL_FAILURE); + NULL),WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_write_ECPrivateKey(stderr, NULL, NULL, NULL, 0, NULL, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_write_ECPrivateKey(XBADFILE, ec, NULL, NULL, 0, NULL, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_write_ECPrivateKey(stderr, ec, NULL, NULL, 0, NULL, NULL), WOLFSSL_SUCCESS); @@ -46997,7 +52115,7 @@ static int test_wolfSSL_PEM_bio_ECKey(void) ExpectNotNull((ec = PEM_read_bio_EC_PUBKEY(bio, &ec2, NULL, NULL))); ExpectIntEQ(ec == ec2, 1); ExpectIntEQ(wc_ecc_size((ecc_key*)ec->internal), 32); - ExpectIntEQ(PEM_write_bio_EC_PUBKEY(NULL, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(PEM_write_bio_EC_PUBKEY(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); BIO_free(bio); bio = NULL; /* Test 0x30, 0x00 fails. */ @@ -47018,9 +52136,9 @@ static int test_wolfSSL_PEM_bio_ECKey(void) bio = NULL; /* Same test as above, but with a file pointer rather than a BIO. */ - ExpectIntEQ(PEM_write_EC_PUBKEY(NULL, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(PEM_write_EC_PUBKEY(NULL, ec), WOLFSSL_FAILURE); - ExpectIntEQ(PEM_write_EC_PUBKEY(stderr, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(PEM_write_EC_PUBKEY(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(PEM_write_EC_PUBKEY(NULL, ec), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(PEM_write_EC_PUBKEY(stderr, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_write_EC_PUBKEY(stderr, ec), WOLFSSL_SUCCESS); EC_KEY_free(ec); @@ -47318,46 +52436,46 @@ static int test_wolfSSL_tmp_dh(void) /* Failure cases */ ExpectIntEQ((int)wolfSSL_CTX_SetTmpDH(NULL, NULL, 0, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ((int)wolfSSL_CTX_SetTmpDH(ctx , NULL, 0, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ((int)wolfSSL_CTX_SetTmpDH(NULL, p , 0, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ((int)wolfSSL_CTX_SetTmpDH(NULL, NULL, 0, g , 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ((int)wolfSSL_CTX_SetTmpDH(ctx , p , 0, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ((int)wolfSSL_CTX_SetTmpDH(ctx , NULL, 0, g , 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ((int)wolfSSL_CTX_SetTmpDH(NULL, p , 0, g , 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ((int)wolfSSL_CTX_SetTmpDH(ctx , p , 1, g , 1), - DH_KEY_SIZE_E); + WC_NO_ERR_TRACE(DH_KEY_SIZE_E)); ExpectIntEQ((int)wolfSSL_CTX_SetTmpDH(ctx , buff, 6000, g , 1), - DH_KEY_SIZE_E); + WC_NO_ERR_TRACE(DH_KEY_SIZE_E)); #if !defined(WOLFSSL_OLD_PRIME_CHECK) && !defined(HAVE_FIPS) && \ !defined(HAVE_SELFTEST) ExpectIntEQ((int)wolfSSL_CTX_SetTmpDH(ctx, bad_p, pSz, g, gSz), - DH_CHECK_PUB_E); + WC_NO_ERR_TRACE(DH_CHECK_PUB_E)); #endif ExpectIntEQ((int)wolfSSL_SetTmpDH(NULL, NULL, 0, NULL, 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ((int)wolfSSL_SetTmpDH(ssl , NULL, 0, NULL, 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ((int)wolfSSL_SetTmpDH(NULL, p , 0, NULL, 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ((int)wolfSSL_SetTmpDH(NULL, NULL, 0, g , 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ((int)wolfSSL_SetTmpDH(ssl , p , 0, NULL, 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ((int)wolfSSL_SetTmpDH(ssl , NULL, 0, g , 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ((int)wolfSSL_SetTmpDH(NULL, p , 0, g , 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ((int)wolfSSL_SetTmpDH(ssl , p , 1, g , 1), - DH_KEY_SIZE_E); + WC_NO_ERR_TRACE(DH_KEY_SIZE_E)); ExpectIntEQ((int)wolfSSL_SetTmpDH(ssl , buff, 6000, g , 1), - DH_KEY_SIZE_E); + WC_NO_ERR_TRACE(DH_KEY_SIZE_E)); #if !defined(WOLFSSL_OLD_PRIME_CHECK) && !defined(HAVE_FIPS) && \ !defined(HAVE_SELFTEST) #ifndef NO_WOLFSSL_SERVER @@ -47368,18 +52486,18 @@ static int test_wolfSSL_tmp_dh(void) #endif #ifndef NO_WOLFSSL_CLIENT ExpectIntEQ((int)wolfSSL_SetTmpDH(ssl_c, p, pSz, g, gSz), - SIDE_ERROR); -#endif - ExpectIntEQ((int)SSL_CTX_set_tmp_dh(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ((int)SSL_CTX_set_tmp_dh(ctx , NULL), BAD_FUNC_ARG); - ExpectIntEQ((int)SSL_CTX_set_tmp_dh(NULL, dh ), BAD_FUNC_ARG); - ExpectIntEQ((int)SSL_set_tmp_dh(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ((int)SSL_set_tmp_dh(ssl , NULL), BAD_FUNC_ARG); - ExpectIntEQ((int)SSL_set_tmp_dh(NULL, dh ), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(SIDE_ERROR)); +#endif + ExpectIntEQ((int)SSL_CTX_set_tmp_dh(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ((int)SSL_CTX_set_tmp_dh(ctx , NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ((int)SSL_CTX_set_tmp_dh(NULL, dh ), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ((int)SSL_set_tmp_dh(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ((int)SSL_set_tmp_dh(ssl , NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ((int)SSL_set_tmp_dh(NULL, dh ), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* No p/g to use. */ dh2 = wolfSSL_DH_new(); - ExpectIntEQ((int)SSL_CTX_set_tmp_dh(ctx , dh2 ), WOLFSSL_FATAL_ERROR); - ExpectIntEQ((int)SSL_set_tmp_dh(ssl , dh2 ), WOLFSSL_FATAL_ERROR); + ExpectIntEQ((int)SSL_CTX_set_tmp_dh(ctx , dh2 ), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); + ExpectIntEQ((int)SSL_set_tmp_dh(ssl , dh2 ), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); DH_free(dh2); dh2 = NULL; @@ -47389,7 +52507,7 @@ static int test_wolfSSL_tmp_dh(void) #ifndef NO_WOLFSSL_SERVER ExpectIntEQ((int)SSL_set_tmp_dh(ssl, dh), WOLFSSL_SUCCESS); #else - ExpectIntEQ((int)SSL_set_tmp_dh(ssl, dh), SIDE_ERROR); + ExpectIntEQ((int)SSL_set_tmp_dh(ssl, dh), WC_NO_ERR_TRACE(SIDE_ERROR)); #endif BIO_free(bio); @@ -47736,10 +52854,9 @@ static int test_wolfSSL_EVP_MD_size(void) /* error case */ wolfSSL_EVP_MD_CTX_init(&mdCtx); - ExpectIntEQ(wolfSSL_EVP_DigestInit(&mdCtx, ""), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_EVP_MD_size(wolfSSL_EVP_MD_CTX_md(&mdCtx)), - BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_EVP_MD_CTX_block_size(&mdCtx), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_EVP_DigestInit(&mdCtx, ""), 0); + ExpectIntEQ(wolfSSL_EVP_MD_size(wolfSSL_EVP_MD_CTX_md(&mdCtx)), 0); + ExpectIntEQ(wolfSSL_EVP_MD_CTX_block_size(&mdCtx), 0); /* Cleanup is valid on uninit'ed struct */ ExpectIntEQ(wolfSSL_EVP_MD_CTX_cleanup(&mdCtx), 1); #endif /* OPENSSL_EXTRA */ @@ -48198,15 +53315,15 @@ static int test_wolfSSL_CTX_add_extra_chain_cert(void) WOLFSSL_FILETYPE_PEM)); /* Negative tests. */ - ExpectIntEQ((int)SSL_CTX_add_extra_chain_cert(NULL, NULL), WOLFSSL_FAILURE); - ExpectIntEQ((int)SSL_CTX_add_extra_chain_cert(ctx, NULL), WOLFSSL_FAILURE); - ExpectIntEQ((int)SSL_CTX_add_extra_chain_cert(NULL, x509), WOLFSSL_FAILURE); + ExpectIntEQ((int)SSL_CTX_add_extra_chain_cert(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ((int)SSL_CTX_add_extra_chain_cert(ctx, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ((int)SSL_CTX_add_extra_chain_cert(NULL, x509), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ((int)SSL_CTX_add_extra_chain_cert(ctx, x509), WOLFSSL_SUCCESS); ExpectNotNull(x509 = wolfSSL_X509_new()); /* Empty certificate. */ - ExpectIntEQ((int)SSL_CTX_add_extra_chain_cert(ctx, x509), WOLFSSL_FAILURE); + ExpectIntEQ((int)SSL_CTX_add_extra_chain_cert(ctx, x509), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); wolfSSL_X509_free(x509); x509 = NULL; @@ -48632,7 +53749,7 @@ static int test_wolfSSL_X509_LOOKUP_ctrl_file(void) /* since store knows crl list */ ExpectIntEQ(wolfSSL_CertManagerVerify(str->cm, "certs/server-revoked-cert.pem", - WOLFSSL_FILETYPE_PEM ), CRL_CERT_REVOKED); + WOLFSSL_FILETYPE_PEM ), WC_NO_ERR_TRACE(CRL_CERT_REVOKED)); } ExpectIntEQ(X509_LOOKUP_ctrl(NULL, 0, NULL, 0, NULL), 0); @@ -48727,7 +53844,7 @@ static int test_wolfSSL_PKCS7_certs(void) while (EXPECT_SUCCESS() && (sk_X509_INFO_num(info_sk) > 0)) { X509_INFO* info = NULL; ExpectNotNull(info = sk_X509_INFO_shift(info_sk)); - ExpectIntEQ(sk_X509_push(sk, info->x509), 1); + ExpectIntGT(sk_X509_push(sk, info->x509), 0); if (EXPECT_SUCCESS() && (info != NULL)) { info->x509 = NULL; } @@ -48866,7 +53983,7 @@ static int test_wolfSSL_X509_STORE_CTX(void) } #else ExpectIntEQ(X509_STORE_CTX_set_ex_data(ctx, i, &tmpData), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); tmpDataRet = (int*)X509_STORE_CTX_get_ex_data(ctx, i); ExpectNull(tmpDataRet); #endif @@ -48889,7 +54006,7 @@ static int test_wolfSSL_X509_STORE_CTX(void) } #else ExpectIntEQ(X509_STORE_set_ex_data(str, i, &tmpData), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); tmpDataRet = (int*)X509_STORE_get_ex_data(str, i); ExpectNull(tmpDataRet); #endif @@ -48918,7 +54035,7 @@ static int test_X509_STORE_untrusted_load_cert_to_stack(const char* filename, XFCLOSE(fp); fp = XBADFILE; } - ExpectIntEQ(sk_X509_push(chain, cert), 1); + ExpectIntGT(sk_X509_push(chain, cert), 0); if (EXPECT_FAIL()) X509_free(cert); @@ -49033,7 +54150,7 @@ static int test_wolfSSL_X509_STORE_set_flags(void) WOLFSSL_SUCCESS); #else ExpectIntEQ(X509_STORE_set_flags(store, WOLFSSL_CRL_CHECKALL), - NOT_COMPILED_IN); + WC_NO_ERR_TRACE(NOT_COMPILED_IN)); #endif wolfSSL_X509_free(x509); @@ -49063,7 +54180,7 @@ static int test_wolfSSL_X509_LOOKUP_load_file(void) ExpectIntEQ(wolfSSL_CertManagerVerify(store->cm, cliCertFile, WOLFSSL_FILETYPE_PEM), 1); ExpectIntEQ(wolfSSL_CertManagerVerify(store->cm, svrCertFile, - WOLFSSL_FILETYPE_PEM), ASN_NO_SIGNER_E); + WOLFSSL_FILETYPE_PEM), WC_NO_ERR_TRACE(ASN_NO_SIGNER_E)); } ExpectIntEQ(wolfSSL_X509_LOOKUP_load_file(lookup, "certs/ca-cert.pem", X509_FILETYPE_PEM), 1); @@ -49353,7 +54470,7 @@ static int test_wolfSSL_CTX_set_client_CA_list(void) ca_list = SSL_load_client_CA_file(caCertFile); ExpectNotNull(ca_list); ExpectNotNull(name = sk_X509_NAME_value(ca_list, 0)); - ExpectIntEQ(sk_X509_NAME_push(names, name), 1); + ExpectIntEQ(sk_X509_NAME_push(names, name), 2); if (EXPECT_FAIL()) { wolfSSL_X509_NAME_free(name); name = NULL; @@ -49545,7 +54662,7 @@ static THREAD_RETURN WOLFSSL_THREAD server_task_ech(void* args) if (ret != WOLFSSL_SUCCESS) { err = wolfSSL_get_error(ssl, 0); } - } while (ret != WOLFSSL_SUCCESS && err == WC_PENDING_E); + } while (ret != WOLFSSL_SUCCESS && err == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != WOLFSSL_SUCCESS) { char buff[WOLFSSL_MAX_ERROR_SZ]; @@ -49938,14 +55055,16 @@ static int post_auth_version_client_cb(WOLFSSL* ssl) /* do handshake and then test version error */ ExpectIntEQ(wolfSSL_connect(ssl), WOLFSSL_SUCCESS); ExpectStrEQ("TLSv1.2", wolfSSL_get_version(ssl)); - ExpectIntEQ(wolfSSL_verify_client_post_handshake(ssl), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_verify_client_post_handshake(ssl), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #if defined(OPENSSL_ALL) && !defined(NO_ERROR_QUEUE) /* check was added to error queue */ - ExpectIntEQ(wolfSSL_ERR_get_error(), -UNSUPPORTED_PROTO_VERSION); + ExpectIntEQ(wolfSSL_ERR_get_error(), -WC_NO_ERR_TRACE(UNSUPPORTED_PROTO_VERSION)); /* check the string matches expected string */ - ExpectStrEQ(wolfSSL_ERR_error_string(-UNSUPPORTED_PROTO_VERSION, NULL), + #ifndef NO_ERROR_STRINGS + ExpectStrEQ(wolfSSL_ERR_error_string(-WC_NO_ERR_TRACE(UNSUPPORTED_PROTO_VERSION), NULL), "WRONG_SSL_VERSION"); + #endif #endif return EXPECT_RESULT(); } @@ -50294,14 +55413,14 @@ static int test_wolfSSL_X509_STORE_load_locations(void) /* Test bad arguments */ ExpectIntEQ(X509_STORE_load_locations(NULL, ca_file, NULL), - WOLFSSL_FAILURE); - ExpectIntEQ(X509_STORE_load_locations(store, NULL, NULL), WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(X509_STORE_load_locations(store, NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(X509_STORE_load_locations(store, client_der_file, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(X509_STORE_load_locations(store, ecc_file, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(X509_STORE_load_locations(store, NULL, bad_path), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #ifdef HAVE_CRL /* Test with CRL */ @@ -50383,15 +55502,19 @@ static int test_X509_STORE_get0_objects(void) switch (X509_OBJECT_get_type(obj)) { case X509_LU_X509: { - WOLFSSL_X509* x509; + X509* x509 = NULL; + X509_NAME *subj_name = NULL; ExpectNotNull(x509 = X509_OBJECT_get0_X509(obj)); ExpectIntEQ(X509_STORE_add_cert(store_cpy, x509), WOLFSSL_SUCCESS); + ExpectNotNull(subj_name = X509_get_subject_name(x509)); + ExpectPtrEq(obj, X509_OBJECT_retrieve_by_subject(objs, X509_LU_X509, + subj_name)); break; } case X509_LU_CRL: #ifdef HAVE_CRL { - WOLFSSL_CRL* crl = NULL; + X509_CRL* crl = NULL; ExpectNotNull(crl = X509_OBJECT_get0_X509_CRL(obj)); ExpectIntEQ(X509_STORE_add_crl(store_cpy, crl), WOLFSSL_SUCCESS); break; @@ -50497,7 +55620,7 @@ static int test_wolfSSL_BN(void) ExpectIntEQ(BN_set_word(a, 1), SSL_SUCCESS); ExpectIntEQ(BN_set_word(b, 5), SSL_SUCCESS); ExpectIntEQ(BN_is_word(a, (WOLFSSL_BN_ULONG)BN_get_word(a)), SSL_SUCCESS); - ExpectIntEQ(BN_is_word(a, 3), SSL_FAILURE); + ExpectIntEQ(BN_is_word(a, 3), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(BN_sub(c, a, b), SSL_SUCCESS); #if defined(WOLFSSL_KEY_GEN) || defined(HAVE_COMP_KEY) { @@ -50591,14 +55714,14 @@ static int test_wolfSSL_BN_init(void) ExpectIntEQ(BN_set_word(&cv, 5), SSL_SUCCESS); /* a^b mod c = */ - ExpectIntEQ(BN_mod_exp(&dv, NULL, &bv, &cv, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(BN_mod_exp(&dv, NULL, &bv, &cv, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(BN_mod_exp(&dv, ap, &bv, &cv, NULL), WOLFSSL_SUCCESS); /* check result 3^2 mod 5 */ ExpectIntEQ(BN_get_word(&dv), 4); /* a*b mod c = */ - ExpectIntEQ(BN_mod_mul(&dv, NULL, &bv, &cv, NULL), SSL_FAILURE); + ExpectIntEQ(BN_mod_mul(&dv, NULL, &bv, &cv, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(BN_mod_mul(&dv, ap, &bv, &cv, NULL), SSL_SUCCESS); /* check result 3*2 mod 5 */ @@ -50632,7 +55755,6 @@ static int test_wolfSSL_BN_enc_dec(void) XMEMSET(&emptyBN, 0, sizeof(emptyBN)); ExpectNotNull(a = BN_new()); ExpectNotNull(b = BN_new()); - ExpectIntEQ(BN_set_word(a, 2), 1); /* Invalid parameters */ ExpectIntEQ(BN_bn2bin(NULL, NULL), -1); @@ -50644,8 +55766,10 @@ static int test_wolfSSL_BN_enc_dec(void) ExpectNull(BN_bn2dec(NULL)); ExpectNull(BN_bn2dec(&emptyBN)); - ExpectNull(BN_bin2bn(NULL, sizeof(binNum), NULL)); - ExpectNull(BN_bin2bn(NULL, sizeof(binNum), a)); + ExpectNotNull(BN_bin2bn(NULL, sizeof(binNum), a)); + BN_free(a); + ExpectNotNull(a = BN_new()); + ExpectIntEQ(BN_set_word(a, 2), 1); ExpectNull(BN_bin2bn(binNum, -1, a)); ExpectNull(BN_bin2bn(binNum, -1, NULL)); ExpectNull(BN_bin2bn(binNum, sizeof(binNum), &emptyBN)); @@ -51587,7 +56711,7 @@ static int test_generate_cookie(void) ExpectNotNull(ssl = SSL_new(ctx)); /* Test unconnected */ - ExpectIntEQ(EmbedGenerateCookie(ssl, buf, FOURK_BUF, NULL), GEN_COOKIE_E); + ExpectIntEQ(EmbedGenerateCookie(ssl, buf, FOURK_BUF, NULL), WC_NO_ERR_TRACE(GEN_COOKIE_E)); wolfSSL_CTX_SetGenCookie(ctx, EmbedGenerateCookie); @@ -51673,7 +56797,7 @@ static int test_wolfSSL_set_options(void) appData, sizeof(appData)), 0); } #else - ExpectIntEQ(wolfSSL_set_app_data(ssl, (void*)appData), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_set_app_data(ssl, (void*)appData), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectNull(wolfSSL_get_app_data((const WOLFSSL*)ssl)); #endif #endif @@ -51787,37 +56911,37 @@ static int test_wolfSSL_set1_curves_list(void) ExpectTrue(SSL_CTX_use_PrivateKey_file(ctx, eccKeyFile, SSL_FILETYPE_PEM)); ExpectNotNull(ssl = SSL_new(ctx)); - ExpectIntEQ(SSL_CTX_set1_curves_list(ctx, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_CTX_set1_curves_list(ctx, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #ifdef HAVE_ECC - ExpectIntEQ(SSL_CTX_set1_curves_list(ctx, "P-25X"), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_CTX_set1_curves_list(ctx, "P-25X"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(SSL_CTX_set1_curves_list(ctx, "P-256"), WOLFSSL_SUCCESS); #endif #ifdef HAVE_CURVE25519 ExpectIntEQ(SSL_CTX_set1_curves_list(ctx, "X25519"), WOLFSSL_SUCCESS); #else - ExpectIntEQ(SSL_CTX_set1_curves_list(ctx, "X25519"), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_CTX_set1_curves_list(ctx, "X25519"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif #ifdef HAVE_CURVE448 ExpectIntEQ(SSL_CTX_set1_curves_list(ctx, "X448"), WOLFSSL_SUCCESS); #else - ExpectIntEQ(SSL_CTX_set1_curves_list(ctx, "X448"), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_CTX_set1_curves_list(ctx, "X448"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif - ExpectIntEQ(SSL_set1_curves_list(ssl, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_set1_curves_list(ssl, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #ifdef HAVE_ECC - ExpectIntEQ(SSL_set1_curves_list(ssl, "P-25X"), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_set1_curves_list(ssl, "P-25X"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(SSL_set1_curves_list(ssl, "P-256"), WOLFSSL_SUCCESS); #endif #ifdef HAVE_CURVE25519 ExpectIntEQ(SSL_set1_curves_list(ssl, "X25519"), WOLFSSL_SUCCESS); #else - ExpectIntEQ(SSL_set1_curves_list(ssl, "X25519"), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_set1_curves_list(ssl, "X25519"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif #ifdef HAVE_CURVE448 ExpectIntEQ(SSL_set1_curves_list(ssl, "X448"), WOLFSSL_SUCCESS); #else - ExpectIntEQ(SSL_set1_curves_list(ssl, "X448"), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_set1_curves_list(ssl, "X448"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif SSL_free(ssl); @@ -51873,15 +56997,15 @@ static int test_wolfSSL_curves_mismatch(void) } test_params[] = { #ifdef WOLFSSL_TLS13 {wolfTLSv1_3_client_method, wolfTLSv1_3_server_method, "TLS 1.3", - FATAL_ERROR, BAD_KEY_SHARE_DATA}, + WC_NO_ERR_TRACE(FATAL_ERROR), WC_NO_ERR_TRACE(BAD_KEY_SHARE_DATA)}, #endif #ifndef WOLFSSL_NO_TLS12 {wolfTLSv1_2_client_method, wolfTLSv1_2_server_method, "TLS 1.2", - FATAL_ERROR, MATCH_SUITE_ERROR}, + WC_NO_ERR_TRACE(FATAL_ERROR), WC_NO_ERR_TRACE(MATCH_SUITE_ERROR)}, #endif #ifndef NO_OLD_TLS {wolfTLSv1_1_client_method, wolfTLSv1_1_server_method, "TLS 1.1", - FATAL_ERROR, MATCH_SUITE_ERROR}, + WC_NO_ERR_TRACE(FATAL_ERROR), WC_NO_ERR_TRACE(MATCH_SUITE_ERROR)}, #endif }; @@ -51928,29 +57052,29 @@ static int test_wolfSSL_set1_sigalgs_list(void) ExpectTrue(SSL_CTX_use_PrivateKey_file(ctx, svrKeyFile, SSL_FILETYPE_PEM)); ExpectNotNull(ssl = SSL_new(ctx)); - ExpectIntEQ(wolfSSL_CTX_set1_sigalgs_list(NULL, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_CTX_set1_sigalgs_list(ctx, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_set1_sigalgs_list(NULL, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_set1_sigalgs_list(ssl, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_CTX_set1_sigalgs_list(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_CTX_set1_sigalgs_list(ctx, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_set1_sigalgs_list(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_set1_sigalgs_list(ssl, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); - ExpectIntEQ(wolfSSL_CTX_set1_sigalgs_list(ctx, ""), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_set1_sigalgs_list(ssl, ""), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_CTX_set1_sigalgs_list(ctx, ""), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_set1_sigalgs_list(ssl, ""), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #ifndef NO_RSA #ifndef NO_SHA256 ExpectIntEQ(wolfSSL_CTX_set1_sigalgs_list(NULL, "RSA+SHA256"), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_set1_sigalgs_list(NULL, "RSA+SHA256"), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_set1_sigalgs_list(ctx, "RSA+SHA256"), WOLFSSL_SUCCESS); ExpectIntEQ(wolfSSL_set1_sigalgs_list(ssl, "RSA+SHA256"), WOLFSSL_SUCCESS); ExpectIntEQ(wolfSSL_CTX_set1_sigalgs_list(ctx, "RSA-SHA256"), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_set1_sigalgs_list(ssl, "RSA-SHA256"), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #ifdef WC_RSA_PSS ExpectIntEQ(wolfSSL_CTX_set1_sigalgs_list(ctx, "RSA-PSS+SHA256"), WOLFSSL_SUCCESS); @@ -51972,17 +57096,17 @@ static int test_wolfSSL_set1_sigalgs_list(void) ExpectIntEQ(wolfSSL_set1_sigalgs_list(ssl, "RSA+SHA256:RSA+SHA384"), WOLFSSL_SUCCESS); #endif - ExpectIntEQ(wolfSSL_CTX_set1_sigalgs_list(ctx, "RSA"), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_set1_sigalgs_list(ssl, "RSA"), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_CTX_set1_sigalgs_list(ctx, "RSA"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_set1_sigalgs_list(ssl, "RSA"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_set1_sigalgs_list(ctx, "RSA:RSA+SHA256"), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_set1_sigalgs_list(ssl, "RSA:RSA+SHA256"), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_set1_sigalgs_list(ctx, "RSA+SHA256+SHA256"), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_set1_sigalgs_list(ssl, "RSA+SHA256+RSA"), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif #endif #ifdef HAVE_ECC @@ -52129,7 +57253,7 @@ static int test_wolfSSL_BIO(void) buff[i] = i; } /* test BIO_free with NULL */ - ExpectIntEQ(BIO_free(NULL), WOLFSSL_FAILURE); + ExpectIntEQ(BIO_free(NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Creating and testing type BIO_s_bio */ ExpectNotNull(bio1 = BIO_new(BIO_s_bio())); @@ -52181,7 +57305,7 @@ static int test_wolfSSL_BIO(void) ExpectIntEQ(BIO_ctrl_reset_read_request(bio1), 1); /* new pair */ - ExpectIntEQ(BIO_make_bio_pair(bio1, bio3), WOLFSSL_FAILURE); + ExpectIntEQ(BIO_make_bio_pair(bio1, bio3), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); BIO_free(bio2); /* free bio2 and automatically remove from pair */ bio2 = NULL; ExpectIntEQ(BIO_make_bio_pair(bio1, bio3), WOLFSSL_SUCCESS); @@ -52189,8 +57313,8 @@ static int test_wolfSSL_BIO(void) ExpectIntEQ(BIO_nread(bio3, &bufPt, 10), 0); /* test wrap around... */ - ExpectIntEQ(BIO_reset(bio1), 0); - ExpectIntEQ(BIO_reset(bio3), 0); + ExpectIntEQ(BIO_reset(bio1), 1); + ExpectIntEQ(BIO_reset(bio3), 1); /* fill write buffer, read only small amount then write again */ ExpectIntEQ(BIO_nwrite(bio1, &bufPt, 20), 20); @@ -52215,7 +57339,7 @@ static int test_wolfSSL_BIO(void) ExpectIntEQ(bufPt[i], buff[4 + i]); } - ExpectIntEQ(BIO_nread(bio3, NULL, 0), WOLFSSL_FAILURE); + ExpectIntEQ(BIO_nread(bio3, NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(BIO_nread0(bio3, &bufPt), 4); for (i = 0; i < 4; i++) { ExpectIntEQ(bufPt[i], 0); @@ -52232,7 +57356,7 @@ static int test_wolfSSL_BIO(void) ExpectNotNull(XMEMCPY(bufPt, buff, 20)); /* test reset on data in bio1 write buffer */ - ExpectIntEQ(BIO_reset(bio1), 0); + ExpectIntEQ(BIO_reset(bio1), 1); ExpectIntEQ((int)BIO_ctrl_pending(bio3), 0); ExpectIntEQ(BIO_nread(bio3, &bufPt, 3), 0); ExpectIntEQ(BIO_nwrite(bio1, &bufPt, 20), 20); @@ -52263,7 +57387,7 @@ static int test_wolfSSL_BIO(void) { BIO* bioA = NULL; BIO* bioB = NULL; - ExpectIntEQ(BIO_new_bio_pair(NULL, 256, NULL, 256), BAD_FUNC_ARG); + ExpectIntEQ(BIO_new_bio_pair(NULL, 256, NULL, 256), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(BIO_new_bio_pair(&bioA, 256, &bioB, 256), WOLFSSL_SUCCESS); BIO_free(bioA); bioA = NULL; @@ -52303,7 +57427,7 @@ static int test_wolfSSL_BIO(void) ExpectIntEQ(BIO_tell(f_bio2),sizeof(cert) + sizeof(msg)); ExpectIntEQ((int)BIO_get_fp(f_bio2, &f2), WOLFSSL_SUCCESS); - ExpectIntEQ(BIO_reset(f_bio2), 0); + ExpectIntEQ(BIO_reset(f_bio2), 1); ExpectIntEQ(BIO_tell(NULL),-1); ExpectIntEQ(BIO_tell(f_bio2),0); ExpectIntEQ(BIO_seek(f_bio2, 4), 0); @@ -53012,7 +58136,7 @@ static int test_wolfSSL_X509(void) ExpectNotNull(ctx = X509_STORE_CTX_new()); - ExpectIntEQ(X509_verify_cert(ctx), SSL_FATAL_ERROR); + ExpectIntEQ(X509_verify_cert(ctx), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); ExpectNotNull(store = X509_STORE_new()); ExpectIntEQ(X509_STORE_add_cert(store, x509), SSL_SUCCESS); @@ -53067,7 +58191,7 @@ static int test_wolfSSL_X509_get_ext_count(void) XFILE f = XBADFILE; /* NULL parameter check */ - ExpectIntEQ(X509_get_ext_count(NULL), WOLFSSL_FAILURE); + ExpectIntEQ(X509_get_ext_count(NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectNotNull(x509 = wolfSSL_X509_load_certificate_file(svrCertFile, SSL_FILETYPE_PEM)); @@ -53088,7 +58212,7 @@ static int test_wolfSSL_X509_get_ext_count(void) ExpectIntEQ((ret = wolfSSL_X509_get_ext_count(x509)), 5); /* wolfSSL_X509_get_ext_count() NULL argument */ - ExpectIntEQ((ret = wolfSSL_X509_get_ext_count(NULL)), WOLFSSL_FAILURE); + ExpectIntEQ((ret = wolfSSL_X509_get_ext_count(NULL)), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); wolfSSL_X509_free(x509); #endif @@ -53470,7 +58594,7 @@ static int test_wolfSSL_X509_sign(void) ExpectIntGT(X509_sign(x509, priv, EVP_sha256()), 0); /* uses ParseCert which fails on bad version number */ - ExpectIntEQ(X509_get_ext_count(x509), SSL_FAILURE); + ExpectIntEQ(X509_get_ext_count(x509), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif EVP_MD_CTX_free(mctx); @@ -53507,8 +58631,11 @@ static int test_wolfSSL_X509_ALGOR_get0(void) X509* x509 = NULL; const ASN1_OBJECT* obj = NULL; const X509_ALGOR* alg = NULL; + X509_ALGOR* alg2 = NULL; int pptype = 0; const void *ppval = NULL; + byte* der = NULL; + const byte* tmp = NULL; ExpectNotNull(x509 = wolfSSL_X509_load_certificate_file(cliCertFile, SSL_FILETYPE_PEM)); @@ -53526,7 +58653,13 @@ static int test_wolfSSL_X509_ALGOR_get0(void) /* Make sure NID of X509_ALGOR is Sha256 with RSA */ ExpectIntEQ(OBJ_obj2nid(obj), NID_sha256WithRSAEncryption); + ExpectIntEQ(i2d_X509_ALGOR(alg, &der), 15); + tmp = der; + ExpectNotNull(d2i_X509_ALGOR(&alg2, &tmp, 15)); + + XFREE(der, NULL, DYNAMIC_TYPE_ASN1); X509_free(x509); + X509_ALGOR_free(alg2); #endif return EXPECT_RESULT(); } @@ -54602,13 +59735,13 @@ static int test_wolfSSL_ERR_get_error_order(void) /* Empty the queue. */ wolfSSL_ERR_clear_error(); - wolfSSL_ERR_put_error(0, 0, ASN_NO_SIGNER_E, "test", 0); - wolfSSL_ERR_put_error(0, 0, ASN_SELF_SIGNED_E, "test", 0); + wolfSSL_ERR_put_error(0, 0, WC_NO_ERR_TRACE(ASN_NO_SIGNER_E), "test", 0); + wolfSSL_ERR_put_error(0, 0, WC_NO_ERR_TRACE(ASN_SELF_SIGNED_E), "test", 0); - ExpectIntEQ(wolfSSL_ERR_peek_error(), -ASN_NO_SIGNER_E); - ExpectIntEQ(wolfSSL_ERR_get_error(), -ASN_NO_SIGNER_E); - ExpectIntEQ(wolfSSL_ERR_peek_error(), -ASN_SELF_SIGNED_E); - ExpectIntEQ(wolfSSL_ERR_get_error(), -ASN_SELF_SIGNED_E); + ExpectIntEQ(wolfSSL_ERR_peek_error(), -WC_NO_ERR_TRACE(ASN_NO_SIGNER_E)); + ExpectIntEQ(wolfSSL_ERR_get_error(), -WC_NO_ERR_TRACE(ASN_NO_SIGNER_E)); + ExpectIntEQ(wolfSSL_ERR_peek_error(), -WC_NO_ERR_TRACE(ASN_SELF_SIGNED_E)); + ExpectIntEQ(wolfSSL_ERR_get_error(), -WC_NO_ERR_TRACE(ASN_SELF_SIGNED_E)); #endif /* WOLFSSL_HAVE_ERROR_QUEUE && OPENSSL_EXTRA */ return EXPECT_RESULT(); } @@ -54724,7 +59857,7 @@ static int test_wc_ERR_print_errors_fp(void) long sz; XFILE fp = XBADFILE; - WOLFSSL_ERROR(BAD_FUNC_ARG); + WOLFSSL_ERROR(WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectTrue((fp = XFOPEN("./tests/test-log-dump-to-file.txt", "ar")) != XBADFILE); wc_ERR_print_errors_fp(fp); @@ -54890,9 +60023,9 @@ static int test_wolfSSL_MD5_Transform(void) ExpectIntEQ(MD5_Transform(NULL, NULL), 0); ExpectIntEQ(MD5_Transform(NULL, (const byte*)&input1), 0); ExpectIntEQ(MD5_Transform(&md5.compat, NULL), 0); - ExpectIntEQ(wc_Md5Transform(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Md5Transform(NULL, (const byte*)&input1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Md5Transform(&md5.native, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Md5Transform(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Md5Transform(NULL, (const byte*)&input1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Md5Transform(&md5.native, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Init MD5 CTX */ ExpectIntEQ(wolfSSL_MD5_Init(&md5.compat), 1); @@ -55088,9 +60221,9 @@ static int test_wolfSSL_SHA_Transform(void) ExpectIntEQ(SHA1_Transform(NULL, NULL), 0); ExpectIntEQ(SHA1_Transform(NULL, (const byte*)&input1), 0); ExpectIntEQ(SHA1_Transform(&sha.compat, NULL), 0); - ExpectIntEQ(wc_ShaTransform(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_ShaTransform(NULL, (const byte*)&input1), BAD_FUNC_ARG); - ExpectIntEQ(wc_ShaTransform(&sha.native, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ShaTransform(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ShaTransform(NULL, (const byte*)&input1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_ShaTransform(&sha.native, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Init SHA CTX */ ExpectIntEQ(SHA_Init(&sha.compat), 1); @@ -55229,9 +60362,9 @@ static int test_wolfSSL_SHA256_Transform(void) ExpectIntEQ(SHA256_Transform(NULL, NULL), 0); ExpectIntEQ(SHA256_Transform(NULL, (const byte*)&input1), 0); ExpectIntEQ(SHA256_Transform(&sha256.compat, NULL), 0); - ExpectIntEQ(wc_Sha256Transform(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha256Transform(NULL, (const byte*)&input1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha256Transform(&sha256.native, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha256Transform(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha256Transform(NULL, (const byte*)&input1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha256Transform(&sha256.native, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Init SHA256 CTX */ ExpectIntEQ(SHA256_Init(&sha256.compat), 1); @@ -55303,9 +60436,9 @@ static int test_wolfSSL_SHA512_Transform(void) ExpectIntEQ(SHA512_Transform(NULL, NULL), 0); ExpectIntEQ(SHA512_Transform(NULL, (const byte*)&input1), 0); ExpectIntEQ(SHA512_Transform(&sha512.compat, NULL), 0); - ExpectIntEQ(wc_Sha512Transform(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512Transform(NULL, (const byte*)&input1), BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512Transform(&sha512.native, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha512Transform(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512Transform(NULL, (const byte*)&input1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512Transform(&sha512.native, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Init SHA512 CTX */ ExpectIntEQ(wolfSSL_SHA512_Init(&sha512.compat), 1); @@ -55373,10 +60506,10 @@ static int test_wolfSSL_SHA512_224_Transform(void) ExpectIntEQ(SHA512_224_Transform(NULL, NULL), 0); ExpectIntEQ(SHA512_224_Transform(NULL, (const byte*)&input1), 0); ExpectIntEQ(SHA512_224_Transform(&sha512.compat, NULL), 0); - ExpectIntEQ(wc_Sha512_224Transform(NULL, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha512_224Transform(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sha512_224Transform(NULL, (const byte*)&input1), - BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512_224Transform(&sha512.native, NULL), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512_224Transform(&sha512.native, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Init SHA512 CTX */ ExpectIntEQ(wolfSSL_SHA512_224_Init(&sha512.compat), 1); @@ -55446,10 +60579,10 @@ static int test_wolfSSL_SHA512_256_Transform(void) ExpectIntEQ(SHA512_256_Transform(NULL, NULL), 0); ExpectIntEQ(SHA512_256_Transform(NULL, (const byte*)&input1), 0); ExpectIntEQ(SHA512_256_Transform(&sha512.compat, NULL), 0); - ExpectIntEQ(wc_Sha512_256Transform(NULL, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_Sha512_256Transform(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Sha512_256Transform(NULL, (const byte*)&input1), - BAD_FUNC_ARG); - ExpectIntEQ(wc_Sha512_256Transform(&sha512.native, NULL), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Sha512_256Transform(&sha512.native, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Init SHA512 CTX */ ExpectIntEQ(wolfSSL_SHA512_256_Init(&sha512.compat), 1); @@ -55755,7 +60888,7 @@ static int test_openssl_hmac(const WOLFSSL_EVP_MD* md, int md_len) ExpectIntEQ(HMAC_Init(hmac, (void*)key, (int)sizeof(key), NULL), 1); ExpectIntEQ(HMAC_Init(hmac, NULL, 0, md), 1); #else - ExpectIntEQ(HMAC_size(hmac), BAD_FUNC_ARG); + ExpectIntEQ(HMAC_size(hmac), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(HMAC_Init(hmac, NULL, 0, NULL), 0); ExpectIntEQ(HMAC_Init(hmac, (void*)key, (int)sizeof(key), NULL), 0); ExpectIntEQ(HMAC_Init(hmac, NULL, 0, md), 0); @@ -56528,7 +61661,7 @@ static int test_wolfSSL_AES_cbc_encrypt(void) /* wolfSSL_AES_wrap_key() 256-bit NULL iv */ ExpectIntEQ(wolfSSL_AES_set_encrypt_key(key256, sizeof(key256)*8, &aes), 0); ExpectIntEQ(wolfSSL_AES_wrap_key(&aes, NULL, wrapCipher, key256, - 15), WOLFSSL_FAILURE); + 15), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_AES_wrap_key(&aes, NULL, wrapCipher, key256, sizeof(key256)), sizeof(wrapCipher)); wc_AesFree((Aes*)&aes); @@ -56536,7 +61669,7 @@ static int test_wolfSSL_AES_cbc_encrypt(void) /* wolfSSL_AES_unwrap_key() 256-bit NULL iv */ ExpectIntEQ(wolfSSL_AES_set_decrypt_key(key256, sizeof(key256)*8, &aes), 0); ExpectIntEQ(wolfSSL_AES_unwrap_key(&aes, NULL, wrapPlain, wrapCipher, - 23), WOLFSSL_FAILURE); + 23), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_AES_unwrap_key(&aes, NULL, wrapPlain, wrapCipher, sizeof(wrapCipher)), sizeof(wrapPlain)); ExpectIntEQ(XMEMCMP(wrapPlain, key256, sizeof(key256)), 0); @@ -56905,7 +62038,7 @@ static int test_wolfSSL_OBJ(void) ASN1_STRING *asn1 = NULL; unsigned char *buf_dyn = NULL; - ExpectIntEQ(OBJ_obj2txt(buf, (int)sizeof(buf), obj, 1), SSL_FAILURE); + ExpectIntEQ(OBJ_obj2txt(buf, (int)sizeof(buf), obj, 1), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectNotNull(obj = OBJ_nid2obj(NID_any_policy)); ExpectIntEQ(OBJ_obj2nid(obj), NID_any_policy); ExpectIntEQ(OBJ_obj2txt(buf, (int)sizeof(buf), obj, 1), 11); @@ -57029,10 +62162,10 @@ static int test_wolfSSL_OBJ_cmp(void) ExpectNotNull(obj = OBJ_nid2obj(NID_any_policy)); ExpectNotNull(obj2 = OBJ_nid2obj(NID_sha256)); - ExpectIntEQ(OBJ_cmp(NULL, NULL), WOLFSSL_FATAL_ERROR); - ExpectIntEQ(OBJ_cmp(obj, NULL), WOLFSSL_FATAL_ERROR); - ExpectIntEQ(OBJ_cmp(NULL, obj2), WOLFSSL_FATAL_ERROR); - ExpectIntEQ(OBJ_cmp(obj, obj2), WOLFSSL_FATAL_ERROR); + ExpectIntEQ(OBJ_cmp(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); + ExpectIntEQ(OBJ_cmp(obj, NULL), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); + ExpectIntEQ(OBJ_cmp(NULL, obj2), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); + ExpectIntEQ(OBJ_cmp(obj, obj2), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); ExpectIntEQ(OBJ_cmp(obj, obj), 0); ExpectIntEQ(OBJ_cmp(obj2, obj2), 0); @@ -57558,6 +62691,8 @@ static int test_othername_and_SID_ext(void) { ASN1_OBJECT* sid_oid = NULL; ASN1_OCTET_STRING *sid_data = NULL; + ASN1_OBJECT* alt_names_oid = NULL; + EVP_PKEY* priv = NULL; XFILE f = XBADFILE; byte* pt = NULL; @@ -57618,6 +62753,10 @@ static int test_othername_and_SID_ext(void) { ExpectIntGT(X509_REQ_sign(x509, priv, EVP_sha256()), 0); pt = der; ExpectIntGT(derSz = i2d_X509_REQ(x509, &pt), 0); + X509_REQ_free(x509); + x509 = NULL; + pt = der; + ExpectNotNull(d2i_X509_REQ_INFO(&x509, (const unsigned char**)&pt, derSz)); sk_GENERAL_NAME_pop_free(gns, GENERAL_NAME_free); gns = NULL; sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free); @@ -57626,7 +62765,6 @@ static int test_othername_and_SID_ext(void) { ASN1_OBJECT_free(sid_oid); ASN1_OCTET_STRING_free(sid_data); X509_REQ_free(x509); - x509 = NULL; EVP_PKEY_free(priv); /* At this point everything used to generate what is in der is cleaned up. @@ -57644,17 +62782,23 @@ static int test_othername_and_SID_ext(void) { ExpectIntEQ(sk_X509_EXTENSION_num(exts), 2); /* Check the SID extension. */ - ExpectNotNull(ext = sk_X509_EXTENSION_value(exts, 0)); + ExpectNotNull(sid_oid = OBJ_txt2obj("1.3.6.1.4.1.311.25.2", 1)); + ExpectNotNull(ext = sk_X509_EXTENSION_value(exts, + X509_get_ext_by_OBJ(x509, sid_oid, -1))); ExpectNotNull(extval = X509_EXTENSION_get_data(ext)); ExpectIntEQ(extval->length, sizeof(SidExtension)); ExpectIntEQ(XMEMCMP(SidExtension, extval->data, sizeof(SidExtension)), 0); + ASN1_OBJECT_free(sid_oid); /* Check the AltNames extension. */ - ExpectNotNull(ext = sk_X509_EXTENSION_value(exts, 1)); + ExpectNotNull(alt_names_oid = OBJ_txt2obj("subjectAltName", 0)); + ExpectNotNull(ext = sk_X509_EXTENSION_value(exts, + X509_get_ext_by_OBJ(x509, alt_names_oid, -1))); ExpectNotNull(extval = X509_EXTENSION_get_data(ext)); ExpectIntEQ(extval->length, sizeof(expectedAltName)); ExpectIntEQ(XMEMCMP(expectedAltName, extval->data, sizeof(expectedAltName)), 0); + ASN1_OBJECT_free(alt_names_oid); /* Cleanup */ ExpectNotNull(gns = (GENERAL_NAMES*)X509_get_ext_d2i(x509, @@ -57688,14 +62832,14 @@ static int test_wolfSSL_X509_set_name(void) 1), WOLFSSL_SUCCESS); ExpectNotNull(x509 = X509_new()); - ExpectIntEQ(X509_set_subject_name(NULL, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(X509_set_subject_name(x509, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(X509_set_subject_name(NULL, name), WOLFSSL_FAILURE); + ExpectIntEQ(X509_set_subject_name(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(X509_set_subject_name(x509, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(X509_set_subject_name(NULL, name), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(X509_set_subject_name(x509, name), WOLFSSL_SUCCESS); - ExpectIntEQ(X509_set_issuer_name(NULL, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(X509_set_issuer_name(x509, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(X509_set_issuer_name(NULL, name), WOLFSSL_FAILURE); + ExpectIntEQ(X509_set_issuer_name(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(X509_set_issuer_name(x509, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(X509_set_issuer_name(NULL, name), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(X509_set_issuer_name(x509, name), WOLFSSL_SUCCESS); X509_free(x509); @@ -57871,7 +63015,7 @@ static int test_wolfSSL_BIO_gets(void) /* try with bad args */ ExpectNull(bio = BIO_new_mem_buf(NULL, sizeof(msg))); #ifdef OPENSSL_ALL - ExpectIntEQ(BIO_set_mem_buf(bio, NULL, BIO_NOCLOSE), BAD_FUNC_ARG); + ExpectIntEQ(BIO_set_mem_buf(bio, NULL, BIO_NOCLOSE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif /* try with real msg */ @@ -57971,7 +63115,7 @@ static int test_wolfSSL_BIO_gets(void) /* check error cases */ BIO_free(bio); bio = NULL; - ExpectIntEQ(BIO_gets(NULL, NULL, 0), SSL_FAILURE); + ExpectIntEQ(BIO_gets(NULL, NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectNotNull(bio = BIO_new(BIO_s_mem())); ExpectIntEQ(BIO_gets(bio, bio_buffer, 2), 0); /* nothing to read */ @@ -58382,15 +63526,15 @@ static int test_wolfSSL_BIO_tls(void) do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif ret = SSL_connect(ssl); err = SSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); - ExpectIntEQ(ret, WOLFSSL_FATAL_ERROR); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); /* in this use case, should return WANT READ * so that Qt will read the data from plain packet for next state. */ @@ -58764,7 +63908,7 @@ static int test_wolfSSL_BIO_printf(void) XMEMSET(out, 0, sizeof(out)); ExpectNotNull(bio = BIO_new(BIO_s_mem())); ExpectIntEQ(BIO_printf(bio, "%s : sz = %d", msg, sz), 30); - ExpectIntEQ(BIO_printf(NULL, ""), WOLFSSL_FATAL_ERROR); + ExpectIntEQ(BIO_printf(NULL, ""), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); ExpectIntEQ(BIO_read(bio, out, sizeof(out)), 30); ExpectIntEQ(XSTRNCMP(out, expected, sizeof(expected)), 0); BIO_free(bio); @@ -58909,7 +64053,7 @@ static int test_wolfSSL_BIO_reset(void) ExpectIntEQ(BIO_write(bio, "WriteToReadonly", 15), 0); ExpectIntEQ(BIO_read(bio, buf, 16), -1); XMEMSET(buf, 0, 16); - ExpectIntEQ(BIO_reset(bio), 0); + ExpectIntEQ(BIO_reset(bio), 1); ExpectIntEQ(BIO_read(bio, buf, 16), 16); ExpectIntEQ(XMEMCMP(buf, "secure your data", 16), 0); BIO_free(bio); @@ -59308,9 +64452,9 @@ static int test_wolfSSL_SESSION(void) /* TLS v1.3 requires session tickets */ /* CHACHA and POLY1305 required for myTicketEncCb */ -#if defined(WOLFSSL_TLS13) && (!defined(HAVE_SESSION_TICKET) && \ - !defined(WOLFSSL_NO_TLS12) || !(defined(HAVE_CHACHA) && \ - defined(HAVE_POLY1305) && !defined(HAVE_AESGCM))) +#if !defined(WOLFSSL_NO_TLS12) && (!defined(WOLFSSL_TLS13) || \ + !(defined(HAVE_SESSION_TICKET) && ((defined(HAVE_CHACHA) && \ + defined(HAVE_POLY1305)) || defined(HAVE_AESGCM)))) ExpectNotNull(ctx = wolfSSL_CTX_new(wolfTLSv1_2_client_method())); #else ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_client_method())); @@ -59357,14 +64501,14 @@ static int test_wolfSSL_SESSION(void) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif ret = wolfSSL_connect(ssl); err = wolfSSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); ExpectIntEQ(ret, WOLFSSL_SUCCESS); #ifdef WOLFSSL_ASYNC_CRYPT @@ -59372,14 +64516,14 @@ static int test_wolfSSL_SESSION(void) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif ret = wolfSSL_write(ssl, sendGET, (int)XSTRLEN(sendGET)); err = wolfSSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); ExpectIntEQ(ret, (int)XSTRLEN(sendGET)); #ifdef WOLFSSL_ASYNC_CRYPT @@ -59387,14 +64531,14 @@ static int test_wolfSSL_SESSION(void) #endif do { #ifdef WOLFSSL_ASYNC_CRYPT - if (err == WC_PENDING_E) { + if (err == WC_NO_ERR_TRACE(WC_PENDING_E)) { ret = wolfSSL_AsyncPoll(ssl, WOLF_POLL_FLAG_CHECK_HW); if (ret < 0) { break; } else if (ret == 0) { continue; } } #endif ret = wolfSSL_read(ssl, msg, sizeof(msg)); err = wolfSSL_get_error(ssl, 0); - } while (err == WC_PENDING_E); + } while (err == WC_NO_ERR_TRACE(WC_PENDING_E)); ExpectIntEQ(ret, 23); ExpectPtrNE((sess = wolfSSL_get1_session(ssl)), NULL); /* ref count 1 */ @@ -59470,7 +64614,7 @@ static int test_wolfSSL_SESSION(void) #if defined(OPENSSL_EXTRA) && defined(HAVE_EXT_CACHE) /* get session from DER and update the timeout */ - ExpectIntEQ(wolfSSL_i2d_SSL_SESSION(NULL, &sessDer), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_i2d_SSL_SESSION(NULL, &sessDer), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntGT((sz = wolfSSL_i2d_SSL_SESSION(sess, &sessDer)), 0); wolfSSL_SESSION_free(sess); sess = NULL; sess = NULL; @@ -59517,7 +64661,7 @@ static int test_wolfSSL_SESSION(void) #if defined(WOLFSSL_ERROR_CODE_OPENSSL) ExpectIntEQ(wolfSSL_set_session(ssl,sess), SSL_SUCCESS); #else - ExpectIntEQ(wolfSSL_set_session(ssl,sess), SSL_FAILURE); + ExpectIntEQ(wolfSSL_set_session(ssl,sess), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif ExpectIntEQ(wolfSSL_SSL_SESSION_set_timeout(sess, 500), SSL_SUCCESS); @@ -59525,15 +64669,15 @@ static int test_wolfSSL_SESSION(void) /* fail case with miss match session context IDs (use compatibility API) */ ExpectIntEQ(SSL_set_session_id_context(ssl, context, contextSz), SSL_SUCCESS); - ExpectIntEQ(wolfSSL_set_session(ssl, sess), SSL_FAILURE); + ExpectIntEQ(wolfSSL_set_session(ssl, sess), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); wolfSSL_free(ssl); ssl = NULL; ExpectIntEQ(SSL_CTX_set_session_id_context(NULL, context, contextSz), - SSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(SSL_CTX_set_session_id_context(ctx, context, contextSz), SSL_SUCCESS); ExpectNotNull(ssl = wolfSSL_new(ctx)); - ExpectIntEQ(wolfSSL_set_session(ssl, sess), SSL_FAILURE); + ExpectIntEQ(wolfSSL_set_session(ssl, sess), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif #endif /* OPENSSL_EXTRA */ @@ -59827,34 +64971,34 @@ static int test_wolfSSL_ticket_keys(void) ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_server_method())); ExpectIntEQ(wolfSSL_CTX_get_tlsext_ticket_keys(NULL, NULL, 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_get_tlsext_ticket_keys(ctx, NULL, 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_get_tlsext_ticket_keys(ctx, keys, 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_get_tlsext_ticket_keys(NULL, keys, 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_get_tlsext_ticket_keys(NULL, NULL, sizeof(keys)), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_get_tlsext_ticket_keys(ctx, NULL, sizeof(keys)), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_get_tlsext_ticket_keys(NULL, keys, sizeof(keys)), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_set_tlsext_ticket_keys(NULL, NULL, 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_set_tlsext_ticket_keys(ctx, NULL, 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_set_tlsext_ticket_keys(ctx, keys, 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_set_tlsext_ticket_keys(NULL, keys, 0), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_set_tlsext_ticket_keys(NULL, NULL, sizeof(keys)), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_set_tlsext_ticket_keys(ctx, NULL, sizeof(keys)), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_set_tlsext_ticket_keys(NULL, keys, sizeof(keys)), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_CTX_get_tlsext_ticket_keys(ctx, keys, sizeof(keys)), WOLFSSL_SUCCESS); @@ -60014,7 +65158,7 @@ static int test_wolfSSL_d2i_PrivateKeys_bio(void) /* RSA not set yet, expecting to fail*/ rsa = wolfSSL_RSA_new(); - ExpectIntEQ(SSL_CTX_use_RSAPrivateKey(ctx, rsa), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_CTX_use_RSAPrivateKey(ctx, rsa), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); wolfSSL_RSA_free(rsa); rsa = NULL; @@ -60026,14 +65170,14 @@ static int test_wolfSSL_d2i_PrivateKeys_bio(void) ExpectNotNull(rsa); /* Tests bad parameters */ - ExpectIntEQ(SSL_CTX_use_RSAPrivateKey(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(SSL_CTX_use_RSAPrivateKey(ctx, NULL), BAD_FUNC_ARG); - ExpectIntEQ(SSL_CTX_use_RSAPrivateKey(NULL, rsa), BAD_FUNC_ARG); + ExpectIntEQ(SSL_CTX_use_RSAPrivateKey(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(SSL_CTX_use_RSAPrivateKey(ctx, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(SSL_CTX_use_RSAPrivateKey(NULL, rsa), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(SSL_CTX_use_RSAPrivateKey(ctx, rsa), WOLFSSL_SUCCESS); /* i2d RSAprivate key tests */ - ExpectIntEQ(wolfSSL_i2d_RSAPrivateKey(NULL, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_i2d_RSAPrivateKey(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_i2d_RSAPrivateKey(rsa, NULL), 1192); ExpectIntEQ(wolfSSL_i2d_RSAPrivateKey(rsa, &bufPtr), sizeof_client_key_der_2048); @@ -60048,6 +65192,13 @@ static int test_wolfSSL_d2i_PrivateKeys_bio(void) sizeof_client_key_der_2048), 0); XFREE(bufPtr, NULL, DYNAMIC_TYPE_OPENSSL); + RSA_free(rsa); + rsa = NULL; + ExpectIntGT(BIO_write(bio, client_key_der_2048, + sizeof_client_key_der_2048), 0); + ExpectNotNull(d2i_RSA_PUBKEY_bio(bio, &rsa)); + (void)BIO_reset(bio); + RSA_free(rsa); rsa = RSA_new(); ExpectIntEQ(wolfSSL_i2d_RSAPrivateKey(rsa, NULL), 0); @@ -60527,7 +65678,7 @@ static int test_wolfSSL_verify_result(void) WOLFSSL_CTX* ctx = NULL; long result = 0xDEADBEEF; - ExpectIntEQ(WOLFSSL_FAILURE, wolfSSL_get_verify_result(ssl)); + ExpectIntEQ(WC_NO_ERR_TRACE(WOLFSSL_FAILURE), wolfSSL_get_verify_result(ssl)); ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_client_method())); ExpectNotNull(ssl = SSL_new(ctx)); @@ -60568,7 +65719,7 @@ static int test_wolfSSL_msg_callback(void) ExpectNotNull(ssl = SSL_new(ctx)); ExpectIntEQ(SSL_set_msg_callback(ssl, NULL), SSL_SUCCESS); ExpectIntEQ(SSL_set_msg_callback(ssl, &sslMsgCb), SSL_SUCCESS); - ExpectIntEQ(SSL_set_msg_callback(NULL, &sslMsgCb), SSL_FAILURE); + ExpectIntEQ(SSL_set_msg_callback(NULL, &sslMsgCb), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); SSL_free(ssl); SSL_CTX_free(ctx); @@ -61194,7 +66345,7 @@ static int test_wolfSSL_make_cert(void) if (ret >= 0) { ret = wc_MakeSelfCert(&cert, der, FOURK_BUF, &key, &rng); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); ExpectIntGT(ret, 0); #ifdef OPENSSL_EXTRA @@ -61256,6 +66407,26 @@ static int test_wolfSSL_make_cert(void) return EXPECT_RESULT(); } +static int test_x509_get_key_id(void) +{ + EXPECT_DECLS; +#if defined(OPENSSL_EXTRA) && !defined(NO_FILESYSTEM) && !defined(NO_RSA) + X509 *x509 = NULL; + const ASN1_STRING* str = NULL; + byte* keyId = NULL; + + ExpectNotNull(x509 = X509_load_certificate_file(cliCertFile, + WOLFSSL_FILETYPE_PEM)); + ExpectNotNull(str = X509_get0_subject_key_id(x509)); + ExpectNotNull(keyId = wolfSSL_X509_get_subjectKeyID(x509, NULL, NULL)); + ExpectBufEQ(keyId, ASN1_STRING_data((ASN1_STRING*)str), + ASN1_STRING_length(str)); + + X509_free(x509); +#endif + return EXPECT_RESULT(); +} + static int test_wolfSSL_X509_get_version(void) { @@ -61571,10 +66742,10 @@ static int test_wolfSSL_EVP_PKEY_set1_get1_EC_KEY (void) ExpectNotNull(pkey = wolfSSL_EVP_PKEY_new()); /* Test wolfSSL_EVP_PKEY_set1_EC_KEY */ - ExpectIntEQ(wolfSSL_EVP_PKEY_set1_EC_KEY(NULL, ecKey), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_EVP_PKEY_set1_EC_KEY(pkey, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_EVP_PKEY_set1_EC_KEY(NULL, ecKey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_EVP_PKEY_set1_EC_KEY(pkey, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Should fail since ecKey is empty */ - ExpectIntEQ(wolfSSL_EVP_PKEY_set1_EC_KEY(pkey, ecKey), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_EVP_PKEY_set1_EC_KEY(pkey, ecKey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_EC_KEY_generate_key(ecKey), 1); ExpectIntEQ(wolfSSL_EVP_PKEY_set1_EC_KEY(pkey, ecKey), WOLFSSL_SUCCESS); @@ -61731,14 +66902,14 @@ static int test_wolfSSL_CTX_ctrl(void) /* Tests should fail with passed in NULL pointer */ ExpectIntEQ((int)wolfSSL_CTX_ctrl(ctx, SSL_CTRL_EXTRA_CHAIN_CERT, 0, NULL), - SSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #if !defined(NO_DH) && !defined(NO_DSA) ExpectIntEQ((int)wolfSSL_CTX_ctrl(ctx, SSL_CTRL_SET_TMP_DH, 0, NULL), - SSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif #ifdef HAVE_ECC ExpectIntEQ((int)wolfSSL_CTX_ctrl(ctx, SSL_CTRL_SET_TMP_ECDH, 0, NULL), - SSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif /* Test with SSL_CTRL_EXTRA_CHAIN_CERT @@ -61837,9 +67008,9 @@ static int test_wolfSSL_EVP_PKEY_assign(void) type = EVP_PKEY_RSA; ExpectNotNull(pkey = wolfSSL_EVP_PKEY_new()); ExpectNotNull(rsa = wolfSSL_RSA_new()); - ExpectIntEQ(wolfSSL_EVP_PKEY_assign(NULL, type, rsa), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, type, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, -1, rsa), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_EVP_PKEY_assign(NULL, type, rsa), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, type, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, -1, rsa), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, type, rsa), WOLFSSL_SUCCESS); if (EXPECT_FAIL()) { wolfSSL_RSA_free(rsa); @@ -61852,9 +67023,9 @@ static int test_wolfSSL_EVP_PKEY_assign(void) type = EVP_PKEY_DSA; ExpectNotNull(pkey = wolfSSL_EVP_PKEY_new()); ExpectNotNull(dsa = wolfSSL_DSA_new()); - ExpectIntEQ(wolfSSL_EVP_PKEY_assign(NULL, type, dsa), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, type, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, -1, dsa), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_EVP_PKEY_assign(NULL, type, dsa), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, type, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, -1, dsa), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, type, dsa), WOLFSSL_SUCCESS); if (EXPECT_FAIL()) { wolfSSL_DSA_free(dsa); @@ -61867,10 +67038,10 @@ static int test_wolfSSL_EVP_PKEY_assign(void) type = EVP_PKEY_EC; ExpectNotNull(pkey = wolfSSL_EVP_PKEY_new()); ExpectNotNull(ecKey = wolfSSL_EC_KEY_new()); - ExpectIntEQ(wolfSSL_EVP_PKEY_assign(NULL, type, ecKey), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, type, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, -1, ecKey), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, type, ecKey), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_EVP_PKEY_assign(NULL, type, ecKey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, type, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, -1, ecKey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, type, ecKey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_EC_KEY_generate_key(ecKey), 1); ExpectIntEQ(wolfSSL_EVP_PKEY_assign(pkey, type, ecKey), WOLFSSL_SUCCESS); if (EXPECT_FAIL()) { @@ -61909,9 +67080,9 @@ static int test_wolfSSL_EVP_PKEY_assign_DH(void) ExpectNotNull(pkey = wolfSSL_EVP_PKEY_new()); /* Bad cases */ - ExpectIntEQ(wolfSSL_EVP_PKEY_assign_DH(NULL, dh), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_EVP_PKEY_assign_DH(pkey, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_EVP_PKEY_assign_DH(NULL, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_EVP_PKEY_assign_DH(NULL, dh), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_EVP_PKEY_assign_DH(pkey, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_EVP_PKEY_assign_DH(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Good case */ ExpectIntEQ(wolfSSL_EVP_PKEY_assign_DH(pkey, dh), WOLFSSL_SUCCESS); @@ -61966,15 +67137,15 @@ static int test_wolfSSL_EVP_PKEY_paramgen(void) EVP_PKEY* pkey = NULL; /* Test error conditions. */ - ExpectIntEQ(EVP_PKEY_paramgen(NULL, &pkey), WOLFSSL_FAILURE); + ExpectIntEQ(EVP_PKEY_paramgen(NULL, &pkey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectNotNull(ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL)); - ExpectIntEQ(EVP_PKEY_paramgen(ctx, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(EVP_PKEY_paramgen(ctx, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #ifndef NO_RSA EVP_PKEY_CTX_free(ctx); /* Parameter generation for RSA not supported yet. */ ExpectNotNull(ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL)); - ExpectIntEQ(EVP_PKEY_paramgen(ctx, &pkey), WOLFSSL_FAILURE); + ExpectIntEQ(EVP_PKEY_paramgen(ctx, &pkey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif #ifdef HAVE_ECC @@ -62015,9 +67186,9 @@ static int test_wolfSSL_EVP_PKEY_keygen(void) ExpectNotNull(ctx = EVP_PKEY_CTX_new(pkey, NULL)); /* Bad cases */ - ExpectIntEQ(wolfSSL_EVP_PKEY_keygen(NULL, &pkey), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_EVP_PKEY_keygen(ctx, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_EVP_PKEY_keygen(NULL, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_EVP_PKEY_keygen(NULL, &pkey), 0); + ExpectIntEQ(wolfSSL_EVP_PKEY_keygen(ctx, NULL), 0); + ExpectIntEQ(wolfSSL_EVP_PKEY_keygen(NULL, NULL), 0); /* Good case */ ExpectIntEQ(wolfSSL_EVP_PKEY_keygen(ctx, &pkey), 0); @@ -62317,13 +67488,13 @@ static int test_wolfSSL_EVP_CIPHER_CTX_set_iv(void) /* Bad cases */ ExpectIntEQ(wolfSSL_EVP_CIPHER_CTX_set_iv(NULL, iv, ivLen), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_EVP_CIPHER_CTX_set_iv(ctx, NULL, ivLen), - WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_EVP_CIPHER_CTX_set_iv(ctx, iv, 0), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_EVP_CIPHER_CTX_set_iv(NULL, NULL, 0), WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_EVP_CIPHER_CTX_set_iv(ctx, iv, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_EVP_CIPHER_CTX_set_iv(NULL, NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_EVP_CIPHER_CTX_set_iv(ctx, iv, keyLen), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Good case */ ExpectIntEQ(wolfSSL_EVP_CIPHER_CTX_set_iv(ctx, iv, ivLen), 1); @@ -62920,7 +68091,7 @@ static int test_wolfSSL_EVP_BytesToKey(void) 16); md = "2"; ExpectIntEQ(EVP_BytesToKey(type, md, salt, data, sz, count, key, iv), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Good case */ md = EVP_sha256(); @@ -63075,7 +68246,7 @@ static int test_evp_cipher_aes_gcm(void) ExpectIntEQ(EVP_CipherInit(encCtx, NULL, NULL, iv, 1), SSL_SUCCESS); ExpectIntEQ(EVP_CIPHER_CTX_ctrl(encCtx, EVP_CTRL_GCM_IV_GEN, -1, - currentIv), SSL_FAILURE); + currentIv), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(EVP_CipherInit(decCtx, EVP_aes_256_gcm(), key, NULL, 0), SSL_SUCCESS); @@ -63099,7 +68270,7 @@ static int test_evp_cipher_aes_gcm(void) * been issued first. */ ExpectIntEQ(EVP_CIPHER_CTX_ctrl(encCtx, EVP_CTRL_GCM_IV_GEN, -1, - currentIv), SSL_FAILURE); + currentIv), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(EVP_CIPHER_CTX_ctrl(encCtx, EVP_CTRL_GCM_SET_IV_FIXED, -1, (void*)iv), SSL_SUCCESS); @@ -63917,7 +69088,7 @@ static int test_wolfSSL_X509_EXTENSION_get_critical(void) XFCLOSE(file); ExpectNotNull(ext = wolfSSL_X509_get_ext(x509, 0)); - ExpectIntEQ(crit = wolfSSL_X509_EXTENSION_get_critical(NULL), BAD_FUNC_ARG); + ExpectIntEQ(crit = wolfSSL_X509_EXTENSION_get_critical(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(crit = wolfSSL_X509_EXTENSION_get_critical(ext), 0); wolfSSL_X509_free(x509); @@ -64029,13 +69200,13 @@ static int test_wolfSSL_X509_cmp(void) ExpectIntEQ(-1, wolfSSL_X509_cmp(cert1, cert2)); /* wolfSSL_X509_cmp() testing NULL, valid args */ - ExpectIntEQ(BAD_FUNC_ARG, wolfSSL_X509_cmp(NULL, cert2)); + ExpectIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wolfSSL_X509_cmp(NULL, cert2)); /* wolfSSL_X509_cmp() testing valid, NULL args */ - ExpectIntEQ(BAD_FUNC_ARG, wolfSSL_X509_cmp(cert1, NULL)); + ExpectIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wolfSSL_X509_cmp(cert1, NULL)); /* wolfSSL_X509_cmp() testing NULL, NULL args */ - ExpectIntEQ(BAD_FUNC_ARG, wolfSSL_X509_cmp(NULL, NULL)); + ExpectIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wolfSSL_X509_cmp(NULL, NULL)); wolfSSL_X509_free(cert1); wolfSSL_X509_free(cert2); @@ -64543,6 +69714,294 @@ static int test_wolfSSL_OCSP_resp_get0(void) return EXPECT_RESULT(); } +static int test_wolfSSL_OCSP_parse_url(void) +{ + EXPECT_DECLS; +#if defined(OPENSSL_EXTRA) && defined(HAVE_OCSP) +#define CK_OPU_OK(u, h, po, pa, s) do { \ + char* host = NULL; \ + char* port = NULL; \ + char* path = NULL; \ + int isSsl = 0; \ + ExpectIntEQ(OCSP_parse_url(u, &host, &port, &path, &isSsl), 1); \ + ExpectStrEQ(host, h); \ + ExpectStrEQ(port, po); \ + ExpectStrEQ(path, pa); \ + ExpectIntEQ(isSsl, s); \ + XFREE(host, NULL, DYNAMIC_TYPE_OPENSSL); \ + XFREE(port, NULL, DYNAMIC_TYPE_OPENSSL); \ + XFREE(path, NULL, DYNAMIC_TYPE_OPENSSL); \ +} while(0) + +#define CK_OPU_FAIL(u) do { \ + char* host = NULL; \ + char* port = NULL; \ + char* path = NULL; \ + int isSsl = 0; \ + ExpectIntEQ(OCSP_parse_url(u, &host, &port, &path, &isSsl), 0); \ + XFREE(host, NULL, DYNAMIC_TYPE_OPENSSL); \ + XFREE(port, NULL, DYNAMIC_TYPE_OPENSSL); \ + XFREE(path, NULL, DYNAMIC_TYPE_OPENSSL); \ +} while(0) + + CK_OPU_OK("http://localhost", "localhost", "80", "/", 0); + CK_OPU_OK("https://wolfssl.com", "wolfssl.com", "443", "/", 1); + CK_OPU_OK("https://www.wolfssl.com/fips-140-3-announcement-to-the-world/", + "www.wolfssl.com", "443", "/fips-140-3-announcement-to-the-world/", 1); + CK_OPU_OK("http://localhost:1234", "localhost", "1234", "/", 0); + CK_OPU_OK("https://localhost:1234", "localhost", "1234", "/", 1); + + CK_OPU_FAIL("ftp://localhost"); + /* two strings to cppcheck doesn't mark it as a c++ style comment */ + CK_OPU_FAIL("http/""/localhost"); + CK_OPU_FAIL("http:/localhost"); + CK_OPU_FAIL("https://localhost/path:1234"); + +#undef CK_OPU_OK +#undef CK_OPU_FAIL +#endif + return EXPECT_RESULT(); +} + +#if defined(OPENSSL_ALL) && defined(HAVE_OCSP) && \ + defined(WOLFSSL_SIGNER_DER_CERT) && !defined(NO_FILESYSTEM) +static time_t test_wolfSSL_OCSP_REQ_CTX_time_cb(time_t* t) +{ + if (t != NULL) { + *t = 1722006780; + } + + return 1722006780; +} +#endif + +static int test_wolfSSL_OCSP_REQ_CTX(void) +{ + EXPECT_DECLS; +#if defined(OPENSSL_ALL) && defined(HAVE_OCSP) && \ + defined(WOLFSSL_SIGNER_DER_CERT) && !defined(NO_FILESYSTEM) + /* This buffer was taken from the ocsp-stapling.test test case 1. The ocsp + * response was captured in wireshark. It contains both the http and binary + * parts. The time test_wolfSSL_OCSP_REQ_CTX_time_cb is set exactly so that + * the time check passes. */ + unsigned char ocspRespBin[] = { + 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x30, 0x20, 0x32, 0x30, 0x30, + 0x20, 0x4f, 0x4b, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x2d, 0x74, 0x79, 0x70, 0x65, 0x3a, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x73, 0x70, 0x2d, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x0d, 0x0a, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x3a, 0x20, 0x31, 0x38, 0x32, 0x31, 0x0d, 0x0a, 0x0d, 0x0a, 0x30, 0x82, + 0x07, 0x19, 0x0a, 0x01, 0x00, 0xa0, 0x82, 0x07, 0x12, 0x30, 0x82, 0x07, + 0x0e, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x01, 0x01, + 0x04, 0x82, 0x06, 0xff, 0x30, 0x82, 0x06, 0xfb, 0x30, 0x82, 0x01, 0x19, + 0xa1, 0x81, 0xa1, 0x30, 0x81, 0x9e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, + 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, + 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, + 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, + 0x07, 0x0c, 0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x31, 0x10, + 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x07, 0x77, 0x6f, 0x6c, + 0x66, 0x53, 0x53, 0x4c, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, + 0x0b, 0x0c, 0x0b, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, + 0x6e, 0x67, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, + 0x16, 0x77, 0x6f, 0x6c, 0x66, 0x53, 0x53, 0x4c, 0x20, 0x4f, 0x43, 0x53, + 0x50, 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x31, + 0x1f, 0x30, 0x1d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, + 0x09, 0x01, 0x16, 0x10, 0x69, 0x6e, 0x66, 0x6f, 0x40, 0x77, 0x6f, 0x6c, + 0x66, 0x73, 0x73, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x18, 0x0f, 0x32, 0x30, + 0x32, 0x34, 0x30, 0x37, 0x32, 0x36, 0x31, 0x35, 0x31, 0x32, 0x30, 0x35, + 0x5a, 0x30, 0x62, 0x30, 0x60, 0x30, 0x38, 0x30, 0x07, 0x06, 0x05, 0x2b, + 0x0e, 0x03, 0x02, 0x1a, 0x04, 0x14, 0x71, 0x4d, 0x82, 0x23, 0x40, 0x59, + 0xc0, 0x96, 0xa1, 0x37, 0x43, 0xfa, 0x31, 0xdb, 0xba, 0xb1, 0x43, 0x18, + 0xda, 0x04, 0x04, 0x14, 0x83, 0xc6, 0x3a, 0x89, 0x2c, 0x81, 0xf4, 0x02, + 0xd7, 0x9d, 0x4c, 0xe2, 0x2a, 0xc0, 0x71, 0x82, 0x64, 0x44, 0xda, 0x0e, + 0x02, 0x01, 0x05, 0x80, 0x00, 0x18, 0x0f, 0x32, 0x30, 0x32, 0x34, 0x30, + 0x37, 0x32, 0x36, 0x31, 0x35, 0x31, 0x32, 0x30, 0x35, 0x5a, 0xa0, 0x11, + 0x18, 0x0f, 0x32, 0x30, 0x32, 0x34, 0x30, 0x37, 0x32, 0x36, 0x31, 0x35, + 0x31, 0x33, 0x30, 0x35, 0x5a, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, + 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, + 0x00, 0x89, 0x7a, 0xe9, 0x6b, 0x66, 0x47, 0x8e, 0x52, 0x16, 0xf9, 0x8a, + 0x5a, 0x1e, 0x7a, 0x35, 0xbb, 0x1d, 0x6c, 0xd8, 0x31, 0xbb, 0x24, 0xd2, + 0xd7, 0xa4, 0x30, 0x27, 0x06, 0x17, 0x66, 0xd1, 0xf9, 0x8d, 0x24, 0xb0, + 0x49, 0x37, 0x62, 0x13, 0x78, 0x5e, 0xa6, 0x6d, 0xea, 0xe3, 0xd0, 0x30, + 0x82, 0x7d, 0xb6, 0xf6, 0x55, 0x82, 0x11, 0xdc, 0xe7, 0x0f, 0xd6, 0x24, + 0xb4, 0x80, 0x23, 0x4f, 0xfd, 0xa7, 0x9a, 0x4b, 0xac, 0xf2, 0xd3, 0xde, + 0x42, 0x10, 0xfb, 0x4b, 0x29, 0x06, 0x02, 0x7b, 0x47, 0x36, 0x70, 0x75, + 0x45, 0x38, 0x8d, 0x3e, 0x55, 0x9c, 0xce, 0x78, 0xd8, 0x18, 0x45, 0x47, + 0x2d, 0x2a, 0x46, 0x65, 0x13, 0x93, 0x1a, 0x98, 0x90, 0xc6, 0x2d, 0xd5, + 0x05, 0x2a, 0xfc, 0xcb, 0xac, 0x53, 0x73, 0x93, 0x42, 0x4e, 0xdb, 0x17, + 0x91, 0xcb, 0xe1, 0x08, 0x03, 0xd1, 0x33, 0x57, 0x4b, 0x1d, 0xb8, 0x71, + 0x84, 0x01, 0x04, 0x47, 0x6f, 0x06, 0xfa, 0x76, 0x7d, 0xd9, 0x37, 0x64, + 0x57, 0x37, 0x3a, 0x8f, 0x4d, 0x88, 0x11, 0xa5, 0xd4, 0xaa, 0xcb, 0x49, + 0x47, 0x86, 0xdd, 0xcf, 0x46, 0xa6, 0xfa, 0x8e, 0xf2, 0x62, 0x0f, 0xc9, + 0x25, 0xf2, 0x39, 0x62, 0x3e, 0x2d, 0x35, 0xc4, 0x76, 0x7b, 0xae, 0xd5, + 0xe8, 0x85, 0xa1, 0xa6, 0x2d, 0x41, 0xd6, 0x8e, 0x3c, 0xfa, 0xdc, 0x6c, + 0x66, 0xe2, 0x61, 0xe7, 0xe5, 0x90, 0xa1, 0xfd, 0x7f, 0xdb, 0x18, 0xd0, + 0xeb, 0x6d, 0x73, 0x08, 0x5f, 0x6a, 0x65, 0x44, 0x50, 0xad, 0x38, 0x9d, + 0xb6, 0xfb, 0xbf, 0x28, 0x55, 0x84, 0x65, 0xfa, 0x0e, 0x34, 0xfc, 0x43, + 0x19, 0x80, 0x5c, 0x7d, 0x2d, 0x5b, 0xd8, 0x60, 0xec, 0x0e, 0xf9, 0x1e, + 0x6e, 0x32, 0x3f, 0x35, 0xf7, 0xec, 0x7e, 0x47, 0xba, 0xb5, 0xd2, 0xaa, + 0x5a, 0x9d, 0x07, 0x2c, 0xc5, 0xa0, 0x82, 0x04, 0xc6, 0x30, 0x82, 0x04, + 0xc2, 0x30, 0x82, 0x04, 0xbe, 0x30, 0x82, 0x03, 0xa6, 0xa0, 0x03, 0x02, + 0x01, 0x02, 0x02, 0x01, 0x04, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, + 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x97, 0x31, + 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, + 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0a, 0x57, + 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, + 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x53, 0x65, 0x61, 0x74, + 0x74, 0x6c, 0x65, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a, + 0x0c, 0x07, 0x77, 0x6f, 0x6c, 0x66, 0x53, 0x53, 0x4c, 0x31, 0x14, 0x30, + 0x12, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x0b, 0x45, 0x6e, 0x67, 0x69, + 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x31, 0x18, 0x30, 0x16, 0x06, + 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0f, 0x77, 0x6f, 0x6c, 0x66, 0x53, 0x53, + 0x4c, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x31, 0x1f, 0x30, + 0x1d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, + 0x16, 0x10, 0x69, 0x6e, 0x66, 0x6f, 0x40, 0x77, 0x6f, 0x6c, 0x66, 0x73, + 0x73, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x34, + 0x30, 0x37, 0x32, 0x36, 0x31, 0x35, 0x31, 0x32, 0x30, 0x34, 0x5a, 0x17, + 0x0d, 0x32, 0x37, 0x30, 0x34, 0x32, 0x32, 0x31, 0x35, 0x31, 0x32, 0x30, + 0x34, 0x5a, 0x30, 0x81, 0x9e, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, + 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, + 0x55, 0x04, 0x08, 0x0c, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, + 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, + 0x0c, 0x07, 0x53, 0x65, 0x61, 0x74, 0x74, 0x6c, 0x65, 0x31, 0x10, 0x30, + 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x0c, 0x07, 0x77, 0x6f, 0x6c, 0x66, + 0x53, 0x53, 0x4c, 0x31, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0b, + 0x0c, 0x0b, 0x45, 0x6e, 0x67, 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, + 0x67, 0x31, 0x1f, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x16, + 0x77, 0x6f, 0x6c, 0x66, 0x53, 0x53, 0x4c, 0x20, 0x4f, 0x43, 0x53, 0x50, + 0x20, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x65, 0x72, 0x31, 0x1f, + 0x30, 0x1d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, + 0x01, 0x16, 0x10, 0x69, 0x6e, 0x66, 0x6f, 0x40, 0x77, 0x6f, 0x6c, 0x66, + 0x73, 0x73, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x82, 0x01, 0x22, 0x30, + 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, + 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, + 0x82, 0x01, 0x01, 0x00, 0xb8, 0xba, 0x23, 0xb4, 0xf6, 0xc3, 0x7b, 0x14, + 0xc3, 0xa4, 0xf5, 0x1d, 0x61, 0xa1, 0xf5, 0x1e, 0x63, 0xb9, 0x85, 0x23, + 0x34, 0x50, 0x6d, 0xf8, 0x7c, 0xa2, 0x8a, 0x04, 0x8b, 0xd5, 0x75, 0x5c, + 0x2d, 0xf7, 0x63, 0x88, 0xd1, 0x07, 0x7a, 0xea, 0x0b, 0x45, 0x35, 0x2b, + 0xeb, 0x1f, 0xb1, 0x22, 0xb4, 0x94, 0x41, 0x38, 0xe2, 0x9d, 0x74, 0xd6, + 0x8b, 0x30, 0x22, 0x10, 0x51, 0xc5, 0xdb, 0xca, 0x3f, 0x46, 0x2b, 0xfe, + 0xe5, 0x5a, 0x3f, 0x41, 0x74, 0x67, 0x75, 0x95, 0xa9, 0x94, 0xd5, 0xc3, + 0xee, 0x42, 0xf8, 0x8d, 0xeb, 0x92, 0x95, 0xe1, 0xd9, 0x65, 0xb7, 0x43, + 0xc4, 0x18, 0xde, 0x16, 0x80, 0x90, 0xce, 0x24, 0x35, 0x21, 0xc4, 0x55, + 0xac, 0x5a, 0x51, 0xe0, 0x2e, 0x2d, 0xb3, 0x0a, 0x5a, 0x4f, 0x4a, 0x73, + 0x31, 0x50, 0xee, 0x4a, 0x16, 0xbd, 0x39, 0x8b, 0xad, 0x05, 0x48, 0x87, + 0xb1, 0x99, 0xe2, 0x10, 0xa7, 0x06, 0x72, 0x67, 0xca, 0x5c, 0xd1, 0x97, + 0xbd, 0xc8, 0xf1, 0x76, 0xf8, 0xe0, 0x4a, 0xec, 0xbc, 0x93, 0xf4, 0x66, + 0x4c, 0x28, 0x71, 0xd1, 0xd8, 0x66, 0x03, 0xb4, 0x90, 0x30, 0xbb, 0x17, + 0xb0, 0xfe, 0x97, 0xf5, 0x1e, 0xe8, 0xc7, 0x5d, 0x9b, 0x8b, 0x11, 0x19, + 0x12, 0x3c, 0xab, 0x82, 0x71, 0x78, 0xff, 0xae, 0x3f, 0x32, 0xb2, 0x08, + 0x71, 0xb2, 0x1b, 0x8c, 0x27, 0xac, 0x11, 0xb8, 0xd8, 0x43, 0x49, 0xcf, + 0xb0, 0x70, 0xb1, 0xf0, 0x8c, 0xae, 0xda, 0x24, 0x87, 0x17, 0x3b, 0xd8, + 0x04, 0x65, 0x6c, 0x00, 0x76, 0x50, 0xef, 0x15, 0x08, 0xd7, 0xb4, 0x73, + 0x68, 0x26, 0x14, 0x87, 0x95, 0xc3, 0x5f, 0x6e, 0x61, 0xb8, 0x87, 0x84, + 0xfa, 0x80, 0x1a, 0x0a, 0x8b, 0x98, 0xf3, 0xe3, 0xff, 0x4e, 0x44, 0x1c, + 0x65, 0x74, 0x7c, 0x71, 0x54, 0x65, 0xe5, 0x39, 0x02, 0x03, 0x01, 0x00, + 0x01, 0xa3, 0x82, 0x01, 0x0a, 0x30, 0x82, 0x01, 0x06, 0x30, 0x09, 0x06, + 0x03, 0x55, 0x1d, 0x13, 0x04, 0x02, 0x30, 0x00, 0x30, 0x1d, 0x06, 0x03, + 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x32, 0x67, 0xe1, 0xb1, 0x79, + 0xd2, 0x81, 0xfc, 0x9f, 0x23, 0x0c, 0x70, 0x40, 0x50, 0xb5, 0x46, 0x56, + 0xb8, 0x30, 0x36, 0x30, 0x81, 0xc4, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, + 0x81, 0xbc, 0x30, 0x81, 0xb9, 0x80, 0x14, 0x73, 0xb0, 0x1c, 0xa4, 0x2f, + 0x82, 0xcb, 0xcf, 0x47, 0xa5, 0x38, 0xd7, 0xb0, 0x04, 0x82, 0x3a, 0x7e, + 0x72, 0x15, 0x21, 0xa1, 0x81, 0x9d, 0xa4, 0x81, 0x9a, 0x30, 0x81, 0x97, + 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, + 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c, 0x0a, + 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, + 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x0c, 0x07, 0x53, 0x65, 0x61, + 0x74, 0x74, 0x6c, 0x65, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, + 0x0a, 0x0c, 0x07, 0x77, 0x6f, 0x6c, 0x66, 0x53, 0x53, 0x4c, 0x31, 0x14, + 0x30, 0x12, 0x06, 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x0b, 0x45, 0x6e, 0x67, + 0x69, 0x6e, 0x65, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x31, 0x18, 0x30, 0x16, + 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0f, 0x77, 0x6f, 0x6c, 0x66, 0x53, + 0x53, 0x4c, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x41, 0x31, 0x1f, + 0x30, 0x1d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, + 0x01, 0x16, 0x10, 0x69, 0x6e, 0x66, 0x6f, 0x40, 0x77, 0x6f, 0x6c, 0x66, + 0x73, 0x73, 0x6c, 0x2e, 0x63, 0x6f, 0x6d, 0x82, 0x01, 0x63, 0x30, 0x13, + 0x06, 0x03, 0x55, 0x1d, 0x25, 0x04, 0x0c, 0x30, 0x0a, 0x06, 0x08, 0x2b, + 0x06, 0x01, 0x05, 0x05, 0x07, 0x03, 0x09, 0x30, 0x0d, 0x06, 0x09, 0x2a, + 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, + 0x01, 0x01, 0x00, 0x37, 0xb9, 0x66, 0xd3, 0xa1, 0x08, 0xfc, 0x37, 0x58, + 0x4e, 0xe0, 0x8c, 0xd3, 0x7f, 0xa6, 0x0f, 0x59, 0xd3, 0x14, 0xf7, 0x4b, + 0x36, 0xf7, 0x2e, 0x98, 0xeb, 0x7c, 0x03, 0x3f, 0x3a, 0xd6, 0x9c, 0xcd, + 0xb4, 0x9e, 0x8d, 0x5f, 0x92, 0xa6, 0x6f, 0x63, 0x87, 0x34, 0xe8, 0x83, + 0xfd, 0x6d, 0x34, 0x64, 0xb5, 0xf0, 0x9c, 0x71, 0x02, 0xb8, 0xf6, 0x2f, + 0x10, 0xa0, 0x92, 0x8f, 0x3f, 0x86, 0x3e, 0xe2, 0x01, 0x5a, 0x56, 0x39, + 0x0a, 0x8d, 0xb1, 0xbe, 0x03, 0xf7, 0xf8, 0xa7, 0x88, 0x46, 0xef, 0x81, + 0xa0, 0xad, 0x86, 0xc9, 0xe6, 0x23, 0x89, 0x1d, 0xa6, 0x24, 0x45, 0xf2, + 0x6a, 0x83, 0x2d, 0x8e, 0x92, 0x17, 0x1e, 0x44, 0x19, 0xfa, 0x0f, 0x47, + 0x6b, 0x8f, 0x4a, 0xa2, 0xda, 0xab, 0xd5, 0x2b, 0xcd, 0xcb, 0x14, 0xf0, + 0xb5, 0xcf, 0x7c, 0x76, 0x42, 0x32, 0x90, 0x21, 0xdc, 0xdd, 0x52, 0xfc, + 0x53, 0x7e, 0xff, 0x7f, 0xd9, 0x58, 0x6b, 0x1f, 0x73, 0xee, 0x83, 0xf4, + 0x67, 0xfa, 0x4a, 0x4f, 0x24, 0xe4, 0x2b, 0x10, 0x74, 0x89, 0x52, 0x9a, + 0xf7, 0xa4, 0xe0, 0xaf, 0xf5, 0x63, 0xd7, 0xfa, 0x0b, 0x2c, 0xc9, 0x39, + 0x5d, 0xbd, 0x44, 0x93, 0x69, 0xa4, 0x1d, 0x01, 0xe2, 0x66, 0xe7, 0xc1, + 0x11, 0x44, 0x7d, 0x0a, 0x7e, 0x5d, 0x1d, 0x26, 0xc5, 0x4a, 0x26, 0x2e, + 0xa3, 0x58, 0xc4, 0xf7, 0x10, 0xcb, 0xba, 0xe6, 0x27, 0xfc, 0xdb, 0x54, + 0xe2, 0x60, 0x08, 0xc2, 0x0e, 0x4b, 0xd4, 0xaa, 0x22, 0x23, 0x93, 0x9f, + 0xe1, 0xcb, 0x85, 0xa4, 0x41, 0x6f, 0x26, 0xa7, 0x77, 0x8a, 0xef, 0x66, + 0xd0, 0xf8, 0x33, 0xf6, 0xfd, 0x6d, 0x37, 0x7a, 0x89, 0xcc, 0x88, 0x3b, + 0x82, 0xd0, 0xa9, 0xdf, 0xf1, 0x3d, 0xdc, 0xb0, 0x06, 0x1c, 0xe4, 0x4b, + 0x57, 0xb4, 0x0c, 0x65, 0xb9, 0xb4, 0x6c + }; + OCSP_REQ_CTX *ctx = NULL; + OCSP_REQUEST *req = NULL; + OCSP_CERTID *cid = NULL; + OCSP_RESPONSE *rsp = NULL; + BIO* bio1 = NULL; + BIO* bio2 = NULL; + X509* cert = NULL; + X509 *issuer = NULL; + X509_LOOKUP *lookup = NULL; + X509_STORE *store = NULL; + STACK_OF(X509_OBJECT) *str_objs = NULL; + X509_OBJECT *x509_obj = NULL; + + ExpectNotNull(bio1 = BIO_new(BIO_s_bio())); + ExpectNotNull(bio2 = BIO_new(BIO_s_bio())); + ExpectIntEQ(BIO_make_bio_pair(bio1, bio2), WOLFSSL_SUCCESS); + + /* Load the leaf cert */ + ExpectNotNull(cert = wolfSSL_X509_load_certificate_file( + "certs/ocsp/server1-cert.pem", WOLFSSL_FILETYPE_PEM)); + + ExpectNotNull(store = X509_STORE_new()); + ExpectNotNull(lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file())); + ExpectIntEQ(X509_LOOKUP_load_file(lookup, "certs/ocsp/server1-cert.pem", + X509_FILETYPE_PEM), 1); + ExpectNotNull(str_objs = X509_STORE_get0_objects(store)); + ExpectNotNull(x509_obj = X509_OBJECT_retrieve_by_subject(str_objs, + X509_LU_X509, X509_get_issuer_name(cert))); + ExpectNotNull(issuer = X509_OBJECT_get0_X509(x509_obj)); + + ExpectNotNull(req = OCSP_REQUEST_new()); + ExpectNotNull(cid = OCSP_cert_to_id(EVP_sha1(), cert, issuer)); + ExpectNotNull(OCSP_request_add0_id(req, cid)); + ExpectIntEQ(OCSP_request_add1_nonce(req, NULL, -1), 1); + + ExpectNotNull(ctx = OCSP_sendreq_new(bio1, "/", NULL, -1)); + ExpectIntEQ(OCSP_REQ_CTX_add1_header(ctx, "Host", "127.0.0.1"), 1); + ExpectIntEQ(OCSP_REQ_CTX_set1_req(ctx, req), 1); + ExpectIntEQ(OCSP_sendreq_nbio(&rsp, ctx), -1); + ExpectIntEQ(BIO_write(bio2, ocspRespBin, sizeof(ocspRespBin)), + sizeof(ocspRespBin)); + ExpectIntEQ(wc_SetTimeCb(test_wolfSSL_OCSP_REQ_CTX_time_cb), 0); + ExpectIntEQ(OCSP_sendreq_nbio(&rsp, ctx), 1); + ExpectIntEQ(wc_SetTimeCb(NULL), 0); + ExpectNotNull(rsp); + + OCSP_REQ_CTX_free(ctx); + OCSP_REQUEST_free(req); + OCSP_RESPONSE_free(rsp); + BIO_free(bio1); + BIO_free(bio2); + X509_free(cert); + X509_STORE_free(store); +#endif + return EXPECT_RESULT(); +} + static int test_wolfSSL_EVP_PKEY_derive(void) { EXPECT_DECLS; @@ -64747,7 +70206,7 @@ static int test_wc_CreateEncryptedPKCS8Key(void) ExpectIntEQ(wc_CreateEncryptedPKCS8Key((byte*)server_key_der_2048, sizeof_server_key_der_2048, NULL, &encKeySz, password, (int)passwordSz, PKCS5, PBES2, AES256CBCb, NULL, 0, WC_PKCS12_ITT_DEFAULT, &rng, NULL), - LENGTH_ONLY_E); + WC_NO_ERR_TRACE(LENGTH_ONLY_E)); ExpectNotNull(encKey = (byte*)XMALLOC(encKeySz, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER)); /* Call with the allocated out buffer. */ @@ -64795,18 +70254,18 @@ static int test_wc_GetPkcs8TraditionalOffset(void) /* inOutIdx > sz */ inOutIdx = 4000; ExpectIntEQ(length = wc_GetPkcs8TraditionalOffset(der, &inOutIdx, (word32)derSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* null input */ inOutIdx = 0; ExpectIntEQ(length = wc_GetPkcs8TraditionalOffset(NULL, &inOutIdx, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* invalid input, fill buffer with 1's */ XMEMSET(der, 1, sizeof(der)); inOutIdx = 0; ExpectIntEQ(length = wc_GetPkcs8TraditionalOffset(der, &inOutIdx, (word32)derSz), - ASN_PARSE_E); + WC_NO_ERR_TRACE(ASN_PARSE_E)); #endif /* NO_ASN */ return EXPECT_RESULT(); } @@ -64914,7 +70373,7 @@ static int test_wc_SetSubjectKeyId(void) ExpectIntEQ(0, wc_InitCert(&cert)); ExpectIntEQ(0, wc_SetSubjectKeyId(&cert, file)); - ExpectIntEQ(BAD_FUNC_ARG, wc_SetSubjectKeyId(NULL, file)); + ExpectIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SetSubjectKeyId(NULL, file)); ExpectIntGT(0, wc_SetSubjectKeyId(&cert, "badfile.name")); #endif return EXPECT_RESULT(); @@ -64934,7 +70393,7 @@ static int test_wc_SetSubject(void) ExpectIntEQ(0, wc_InitCert(&cert)); ExpectIntEQ(0, wc_SetSubject(&cert, file)); - ExpectIntEQ(BAD_FUNC_ARG, wc_SetSubject(NULL, file)); + ExpectIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SetSubject(NULL, file)); ExpectIntGT(0, wc_SetSubject(&cert, "badfile.name")); #endif return EXPECT_RESULT(); @@ -64952,13 +70411,13 @@ static int test_CheckCertSignature(void) int certSz; #endif - ExpectIntEQ(BAD_FUNC_ARG, wc_CheckCertSignature(NULL, 0, NULL, NULL)); + ExpectIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_CheckCertSignature(NULL, 0, NULL, NULL)); ExpectNotNull(cm = wolfSSL_CertManagerNew_ex(NULL)); - ExpectIntEQ(BAD_FUNC_ARG, wc_CheckCertSignature(NULL, 0, NULL, cm)); + ExpectIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_CheckCertSignature(NULL, 0, NULL, cm)); #ifndef NO_RSA #ifdef USE_CERT_BUFFERS_1024 - ExpectIntEQ(ASN_NO_SIGNER_E, wc_CheckCertSignature(server_cert_der_1024, + ExpectIntEQ(WC_NO_ERR_TRACE(ASN_NO_SIGNER_E), wc_CheckCertSignature(server_cert_der_1024, sizeof_server_cert_der_1024, NULL, cm)); ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_CertManagerLoadCABuffer(cm, ca_cert_der_1024, sizeof_ca_cert_der_1024, @@ -64966,7 +70425,7 @@ static int test_CheckCertSignature(void) ExpectIntEQ(0, wc_CheckCertSignature(server_cert_der_1024, sizeof_server_cert_der_1024, NULL, cm)); #elif defined(USE_CERT_BUFFERS_2048) - ExpectIntEQ(ASN_NO_SIGNER_E, wc_CheckCertSignature(server_cert_der_2048, + ExpectIntEQ(WC_NO_ERR_TRACE(ASN_NO_SIGNER_E), wc_CheckCertSignature(server_cert_der_2048, sizeof_server_cert_der_2048, NULL, cm)); ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_CertManagerLoadCABuffer(cm, ca_cert_der_2048, sizeof_ca_cert_der_2048, @@ -64977,7 +70436,7 @@ static int test_CheckCertSignature(void) #endif #if defined(HAVE_ECC) && defined(USE_CERT_BUFFERS_256) - ExpectIntEQ(ASN_NO_SIGNER_E, wc_CheckCertSignature(serv_ecc_der_256, + ExpectIntEQ(WC_NO_ERR_TRACE(ASN_NO_SIGNER_E), wc_CheckCertSignature(serv_ecc_der_256, sizeof_serv_ecc_der_256, NULL, cm)); ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_CertManagerLoadCABuffer(cm, ca_ecc_cert_der_256, sizeof_ca_ecc_cert_der_256, @@ -64997,7 +70456,7 @@ static int test_CheckCertSignature(void) XFCLOSE(fp); fp = XBADFILE; } - ExpectIntEQ(ASN_NO_SIGNER_E, wc_CheckCertSignature(cert, certSz, NULL, cm)); + ExpectIntEQ(WC_NO_ERR_TRACE(ASN_NO_SIGNER_E), wc_CheckCertSignature(cert, certSz, NULL, cm)); ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_CertManagerLoadCA(cm, "./certs/ca-cert.pem", NULL)); ExpectIntEQ(0, wc_CheckCertSignature(cert, certSz, NULL, cm)); @@ -65009,7 +70468,7 @@ static int test_CheckCertSignature(void) XFCLOSE(fp); fp = XBADFILE; } - ExpectIntEQ(ASN_NO_SIGNER_E, wc_CheckCertSignature(cert, certSz, NULL, cm)); + ExpectIntEQ(WC_NO_ERR_TRACE(ASN_NO_SIGNER_E), wc_CheckCertSignature(cert, certSz, NULL, cm)); ExpectIntEQ(WOLFSSL_SUCCESS, wolfSSL_CertManagerLoadCA(cm, "./certs/ca-ecc-cert.pem", NULL)); ExpectIntEQ(0, wc_CheckCertSignature(cert, certSz, NULL, cm)); @@ -65073,11 +70532,11 @@ static int test_wc_ParseCert_Error(void) const int cSz; const int expRet; } t[] = { - {c0, sizeof(c0), ASN_PARSE_E}, /* Invalid bit-string length */ - {c1, sizeof(c1), ASN_PARSE_E}, /* Invalid bit-string length */ - {c2, sizeof(c2), ASN_PARSE_E}, /* Invalid integer length (zero) */ - {c3, sizeof(c3), ASN_PARSE_E}, /* Valid INTEGER, but buffer too short */ - {c4, sizeof(c4), ASN_PARSE_E}, /* Valid INTEGER, but not in bit-string */ + {c0, sizeof(c0), WC_NO_ERR_TRACE(ASN_PARSE_E)}, /* Invalid bit-string length */ + {c1, sizeof(c1), WC_NO_ERR_TRACE(ASN_PARSE_E)}, /* Invalid bit-string length */ + {c2, sizeof(c2), WC_NO_ERR_TRACE(ASN_PARSE_E)}, /* Invalid integer length (zero) */ + {c3, sizeof(c3), WC_NO_ERR_TRACE(ASN_PARSE_E)}, /* Valid INTEGER, but buffer too short */ + {c4, sizeof(c4), WC_NO_ERR_TRACE(ASN_PARSE_E)}, /* Valid INTEGER, but not in bit-string */ }; const int tSz = (int)(sizeof(t) / sizeof(struct testStruct)); @@ -65206,7 +70665,7 @@ static int test_MakeCertWith0Ser(void) #if !defined(WOLFSSL_NO_ASN_STRICT) && !defined(WOLFSSL_PYTHON) ExpectIntEQ(wc_ParseCert(&decodedCert, CERT_TYPE, NO_VERIFY, NULL), - ASN_PARSE_E); + WC_NO_ERR_TRACE(ASN_PARSE_E)); #else ExpectIntEQ(wc_ParseCert(&decodedCert, CERT_TYPE, NO_VERIFY, NULL), 0); #endif @@ -65290,7 +70749,7 @@ static int test_wc_ecc_get_curve_size_from_name(void) /* invalid case */ ExpectIntEQ(wc_ecc_get_curve_size_from_name("BADCURVE"), -1); /* NULL input */ - ExpectIntEQ(wc_ecc_get_curve_size_from_name(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_get_curve_size_from_name(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif /* HAVE_ECC */ return EXPECT_RESULT(); } @@ -65306,7 +70765,7 @@ static int test_wc_ecc_get_curve_id_from_name(void) /* invalid case */ ExpectIntEQ(wc_ecc_get_curve_id_from_name("BADCURVE"), -1); /* NULL input */ - ExpectIntEQ(wc_ecc_get_curve_id_from_name(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_get_curve_id_from_name(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif /* HAVE_ECC */ return EXPECT_RESULT(); } @@ -65345,7 +70804,7 @@ static int test_wc_ecc_get_curve_id_from_dp_params(void) } #endif /* invalid case, NULL input*/ - ExpectIntEQ(wc_ecc_get_curve_id_from_dp_params(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wc_ecc_get_curve_id_from_dp_params(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); wolfSSL_EC_KEY_free(ecKey); @@ -65431,7 +70890,7 @@ static int test_wc_ecc_get_curve_id_from_params(void) /* invalid case, NULL prime */ ExpectIntEQ(wc_ecc_get_curve_id_from_params(fieldSize, NULL, sizeof(prime), Af, sizeof(Af), Bf, sizeof(Bf), order, sizeof(order), - Gx, sizeof(Gx), Gy, sizeof(Gy), cofactor), BAD_FUNC_ARG); + Gx, sizeof(Gx), Gy, sizeof(Gy), cofactor), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* invalid case, invalid prime */ ExpectIntEQ(wc_ecc_get_curve_id_from_params(fieldSize, @@ -65701,7 +71160,7 @@ static int test_wolfSSL_EVP_PKEY_sign_verify(int keyType) WOLFSSL_SUCCESS); ExpectIntEQ(EVP_PKEY_verify( ctx_verify, sig, siglen, zero, SHA256_DIGEST_LENGTH), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #if defined(OPENSSL_EXTRA) && !defined(NO_RSA) && defined(WOLFSSL_KEY_GEN) && \ !defined(HAVE_SELFTEST) @@ -65810,8 +71269,8 @@ static int test_EVP_PKEY_rsa(void) ExpectNotNull(rsa = wolfSSL_RSA_new()); ExpectNotNull(pkey = wolfSSL_EVP_PKEY_new()); - ExpectIntEQ(EVP_PKEY_assign_RSA(NULL, rsa), WOLFSSL_FAILURE); - ExpectIntEQ(EVP_PKEY_assign_RSA(pkey, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(EVP_PKEY_assign_RSA(NULL, rsa), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(EVP_PKEY_assign_RSA(pkey, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(EVP_PKEY_assign_RSA(pkey, rsa), WOLFSSL_SUCCESS); if (EXPECT_FAIL()) { wolfSSL_RSA_free(rsa); @@ -65832,10 +71291,10 @@ static int test_EVP_PKEY_ec(void) ExpectNotNull(ecKey = wolfSSL_EC_KEY_new()); ExpectNotNull(pkey = wolfSSL_EVP_PKEY_new()); - ExpectIntEQ(EVP_PKEY_assign_EC_KEY(NULL, ecKey), WOLFSSL_FAILURE); - ExpectIntEQ(EVP_PKEY_assign_EC_KEY(pkey, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(EVP_PKEY_assign_EC_KEY(NULL, ecKey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(EVP_PKEY_assign_EC_KEY(pkey, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Should fail since ecKey is empty */ - ExpectIntEQ(EVP_PKEY_assign_EC_KEY(pkey, ecKey), WOLFSSL_FAILURE); + ExpectIntEQ(EVP_PKEY_assign_EC_KEY(pkey, ecKey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_EC_KEY_generate_key(ecKey), 1); ExpectIntEQ(EVP_PKEY_assign_EC_KEY(pkey, ecKey), WOLFSSL_SUCCESS); if (EXPECT_FAIL()) { @@ -66145,15 +71604,15 @@ static int test_X509_REQ(void) ExpectNotNull(pub = d2i_PUBKEY(NULL, &rsaPub, (long)sizeof_client_keypub_der_2048)); ExpectNotNull(req = X509_REQ_new()); - ExpectIntEQ(X509_REQ_set_subject_name(NULL, name), WOLFSSL_FAILURE); - ExpectIntEQ(X509_REQ_set_subject_name(req, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(X509_REQ_set_subject_name(NULL, name), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(X509_REQ_set_subject_name(req, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(X509_REQ_set_subject_name(req, name), WOLFSSL_SUCCESS); - ExpectIntEQ(X509_REQ_set_pubkey(NULL, pub), WOLFSSL_FAILURE); - ExpectIntEQ(X509_REQ_set_pubkey(req, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(X509_REQ_set_pubkey(NULL, pub), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(X509_REQ_set_pubkey(req, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(X509_REQ_set_pubkey(req, pub), WOLFSSL_SUCCESS); - ExpectIntEQ(X509_REQ_sign(NULL, priv, EVP_sha256()), WOLFSSL_FAILURE); - ExpectIntEQ(X509_REQ_sign(req, NULL, EVP_sha256()), WOLFSSL_FAILURE); - ExpectIntEQ(X509_REQ_sign(req, priv, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(X509_REQ_sign(NULL, priv, EVP_sha256()), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(X509_REQ_sign(req, NULL, EVP_sha256()), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(X509_REQ_sign(req, priv, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(X509_REQ_sign(req, priv, EVP_sha256()), WOLFSSL_SUCCESS); len = i2d_X509_REQ(req, &der); DEBUG_WRITE_DER(der, len, "req.der"); @@ -66261,7 +71720,7 @@ static int test_wolfssl_PKCS7(void) ExpectNull(pkcs7 = d2i_PKCS7(NULL, &p, 0)); ExpectNotNull(pkcs7 = d2i_PKCS7(NULL, &p, (int)len)); ExpectIntEQ(wolfSSL_PKCS7_verify(NULL, NULL, NULL, NULL, NULL, - PKCS7_NOVERIFY), WOLFSSL_FAILURE); + PKCS7_NOVERIFY), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); PKCS7_free(pkcs7); pkcs7 = NULL; @@ -66269,7 +71728,7 @@ static int test_wolfssl_PKCS7(void) p = data; ExpectNotNull(pkcs7 = d2i_PKCS7(NULL, &p, (int)len)); ExpectIntEQ(wolfSSL_PKCS7_verify(pkcs7, NULL, NULL, NULL, NULL, - 0), WOLFSSL_FAILURE); + 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); PKCS7_free(pkcs7); pkcs7 = NULL; @@ -66396,7 +71855,7 @@ static int test_wolfSSL_PKCS7_sign(void) for (z = 0; z < outLen && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(p7Ver, out + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -66486,7 +71945,7 @@ static int test_wolfSSL_PKCS7_sign(void) for (z = 0; z < outLen && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(p7Ver, out + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -66545,7 +72004,7 @@ static int test_wolfSSL_PKCS7_sign(void) for (z = 0; z < outLen && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(p7Ver, out + z, 1); if (ret < 0){ - ExpectIntEQ(ret, WC_PKCS7_WANT_READ_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)); } } ExpectIntEQ(ret, 0); @@ -66781,7 +72240,7 @@ static int test_wolfSSL_SMIME_read_PKCS7(void) pkcs7 = wolfSSL_SMIME_read_PKCS7(bio, &bcont); ExpectNotNull(pkcs7); /* can read in the unverified smime bundle */ ExpectIntEQ(wolfSSL_PKCS7_verify(pkcs7, NULL, NULL, bcont, NULL, - PKCS7_NOVERIFY), SSL_FAILURE); + PKCS7_NOVERIFY), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); if (smimeTestFile != XBADFILE) { XFCLOSE(smimeTestFile); smimeTestFile = XBADFILE; @@ -67045,7 +72504,7 @@ static int test_X509_STORE_No_SSL_CTX(void) /* Perform verification, which should NOT indicate CRL missing due to the * store CM's X509 store pointer being NULL */ - ExpectIntNE(X509_verify_cert(storeCtx), CRL_MISSING); + ExpectIntNE(X509_verify_cert(storeCtx), WC_NO_ERR_TRACE(CRL_MISSING)); X509_CRL_free(crl); X509_STORE_free(store); @@ -67116,7 +72575,7 @@ static int test_X509_LOOKUP_add_dir(void) ExpectIntEQ(X509_STORE_CTX_init(storeCtx, store, cert, NULL), SSL_SUCCESS); /* Perform verification, which should NOT return CRL missing */ - ExpectIntNE(X509_verify_cert(storeCtx), CRL_MISSING); + ExpectIntNE(X509_verify_cert(storeCtx), WC_NO_ERR_TRACE(CRL_MISSING)); X509_CRL_free(crl); crl = NULL; @@ -67164,7 +72623,7 @@ static int test_X509_LOOKUP_add_dir(void) /* Now we SHOULD get CRL_MISSING, because we looked for PEM * in dir containing only ASN1/DER. */ - ExpectIntEQ(X509_verify_cert(storeCtx), WOLFSSL_FAILURE); + ExpectIntEQ(X509_verify_cert(storeCtx), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(X509_STORE_CTX_get_error(storeCtx), X509_V_ERR_UNABLE_TO_GET_CRL); @@ -67255,14 +72714,14 @@ static int test_RsaSigFailure_cm(void) /* test bad cert */ #if defined(NO_WOLFSSL_CLIENT) && defined(NO_WOLFSSL_SERVER) ExpectIntEQ(verify_sig_cm(ca_cert, cert_buf, cert_sz, TESTING_RSA), - WOLFSSL_FATAL_ERROR); + WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); #elif defined(NO_ASN_CRYPT) /* RSA verify is not called when ASN crypt support is disabled */ ExpectIntEQ(verify_sig_cm(ca_cert, cert_buf, cert_sz, TESTING_RSA), WOLFSSL_SUCCESS); #else ExpectIntEQ(verify_sig_cm(ca_cert, cert_buf, cert_sz, TESTING_RSA), - ASN_SIG_CONFIRM_E); + WC_NO_ERR_TRACE(ASN_SIG_CONFIRM_E)); #endif } @@ -67292,14 +72751,14 @@ static int test_EccSigFailure_cm(void) /* test bad cert */ #if defined(NO_WOLFSSL_CLIENT) && defined(NO_WOLFSSL_SERVER) ExpectIntEQ(verify_sig_cm(ca_cert, cert_buf, cert_sz, TESTING_ECC), - WOLFSSL_FATAL_ERROR); + WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); #elif defined(NO_ASN_CRYPT) /* ECC verify is not called when ASN crypt support is disabled */ ExpectIntEQ(verify_sig_cm(ca_cert, cert_buf, cert_sz, TESTING_ECC), WOLFSSL_SUCCESS); #else ExpectIntEQ(verify_sig_cm(ca_cert, cert_buf, cert_sz, TESTING_ECC), - ASN_SIG_CONFIRM_E); + WC_NO_ERR_TRACE(ASN_SIG_CONFIRM_E)); #endif } @@ -67363,7 +72822,13 @@ static int test_tls13_apis(void) #if defined(HAVE_ECC) && defined(HAVE_SUPPORTED_CURVES) int groups[2] = { WOLFSSL_ECC_SECP256R1, #ifdef WOLFSSL_HAVE_KYBER + #ifndef WOLFSSL_NO_KYBER512 WOLFSSL_KYBER_LEVEL1 + #elif !defined(WOLFSSL_NO_KYBER768) + WOLFSSL_KYBER_LEVEL3 + #else + WOLFSSL_KYBER_LEVEL5 + #endif #else WOLFSSL_ECC_SECP256R1 #endif @@ -67391,15 +72856,30 @@ static int test_tls13_apis(void) #if (!defined(NO_ECC256) || defined(HAVE_ALL_CURVES)) && ECC_MIN_KEY_SZ <= 256 "P-256:secp256r1" #if defined(WOLFSSL_HAVE_KYBER) + #ifndef WOLFSSL_NO_KYBER512 ":P256_KYBER_LEVEL1" + #elif !defined(WOLFSSL_NO_KYBER768) + ":P256_KYBER_LEVEL3" + #else + ":P256_KYBER_LEVEL5" + #endif #endif #endif #endif /* !defined(NO_ECC_SECP) */ #if defined(WOLFSSL_HAVE_KYBER) + #ifndef WOLFSSL_NO_KYBER512 ":KYBER_LEVEL1" + #elif !defined(WOLFSSL_NO_KYBER768) + ":KYBER_LEVEL3" + #else + ":KYBER_LEVEL5" + #endif #endif ""; #endif /* defined(OPENSSL_EXTRA) && defined(HAVE_ECC) */ +#if defined(WOLFSSL_HAVE_KYBER) + int kyberLevel; +#endif (void)ret; @@ -67434,14 +72914,14 @@ static int test_tls13_apis(void) #endif #ifdef WOLFSSL_SEND_HRR_COOKIE - ExpectIntEQ(wolfSSL_send_hrr_cookie(NULL, NULL, 0), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_send_hrr_cookie(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT - ExpectIntEQ(wolfSSL_send_hrr_cookie(clientSsl, NULL, 0), SIDE_ERROR); + ExpectIntEQ(wolfSSL_send_hrr_cookie(clientSsl, NULL, 0), WC_NO_ERR_TRACE(SIDE_ERROR)); #endif #ifndef NO_WOLFSSL_SERVER #ifndef WOLFSSL_NO_TLS12 ExpectIntEQ(wolfSSL_send_hrr_cookie(serverTls12Ssl, NULL, 0), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif ExpectIntEQ(wolfSSL_send_hrr_cookie(serverSsl, NULL, 0), WOLFSSL_SUCCESS); @@ -67453,16 +72933,16 @@ static int test_tls13_apis(void) #ifdef HAVE_SUPPORTED_CURVES #ifdef HAVE_ECC ExpectIntEQ(wolfSSL_UseKeyShare(NULL, WOLFSSL_ECC_SECP256R1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_SERVER do { ret = wolfSSL_UseKeyShare(serverSsl, WOLFSSL_ECC_SECP256R1); #ifdef WOLFSSL_ASYNC_CRYPT - if (ret == WC_PENDING_E) + if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) wolfSSL_AsyncPoll(serverSsl, WOLF_POLL_FLAG_CHECK_HW); #endif } - while (ret == WC_PENDING_E); + while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); ExpectIntEQ(ret, WOLFSSL_SUCCESS); #endif #ifndef NO_WOLFSSL_CLIENT @@ -67470,25 +72950,25 @@ static int test_tls13_apis(void) do { ret = wolfSSL_UseKeyShare(clientTls12Ssl, WOLFSSL_ECC_SECP256R1); #ifdef WOLFSSL_ASYNC_CRYPT - if (ret == WC_PENDING_E) + if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) wolfSSL_AsyncPoll(clientTls12Ssl, WOLF_POLL_FLAG_CHECK_HW); #endif } - while (ret == WC_PENDING_E); + while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); ExpectIntEQ(ret, WOLFSSL_SUCCESS); #endif do { ret = wolfSSL_UseKeyShare(clientSsl, WOLFSSL_ECC_SECP256R1); #ifdef WOLFSSL_ASYNC_CRYPT - if (ret == WC_PENDING_E) + if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) wolfSSL_AsyncPoll(clientSsl, WOLF_POLL_FLAG_CHECK_HW); #endif } - while (ret == WC_PENDING_E); + while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); ExpectIntEQ(ret, WOLFSSL_SUCCESS); #endif #elif defined(HAVE_CURVE25519) - ExpectIntEQ(wolfSSL_UseKeyShare(NULL, WOLFSSL_ECC_X25519), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_UseKeyShare(NULL, WOLFSSL_ECC_X25519), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_SERVER ExpectIntEQ(wolfSSL_UseKeyShare(serverSsl, WOLFSSL_ECC_X25519), WOLFSSL_SUCCESS); @@ -67502,7 +72982,7 @@ static int test_tls13_apis(void) WOLFSSL_SUCCESS); #endif #elif defined(HAVE_CURVE448) - ExpectIntEQ(wolfSSL_UseKeyShare(NULL, WOLFSSL_ECC_X448), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_UseKeyShare(NULL, WOLFSSL_ECC_X448), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_SERVER ExpectIntEQ(wolfSSL_UseKeyShare(serverSsl, WOLFSSL_ECC_X448), WOLFSSL_SUCCESS); @@ -67517,36 +72997,43 @@ static int test_tls13_apis(void) #endif #else ExpectIntEQ(wolfSSL_UseKeyShare(NULL, WOLFSSL_ECC_SECP256R1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 ExpectIntEQ(wolfSSL_UseKeyShare(clientTls12Ssl, WOLFSSL_ECC_SECP256R1), - NOT_COMPILED_IN); + WC_NO_ERR_TRACE(NOT_COMPILED_IN)); #endif ExpectIntEQ(wolfSSL_UseKeyShare(clientSsl, WOLFSSL_ECC_SECP256R1), - NOT_COMPILED_IN); + WC_NO_ERR_TRACE(NOT_COMPILED_IN)); #endif #endif #if defined(WOLFSSL_HAVE_KYBER) - ExpectIntEQ(wolfSSL_UseKeyShare(NULL, WOLFSSL_KYBER_LEVEL3), BAD_FUNC_ARG); +#ifndef WOLFSSL_NO_KYBER768 + kyberLevel = WOLFSSL_KYBER_LEVEL3; +#elif !defined(WOLFSSL_NO_KYBER1024) + kyberLevel = WOLFSSL_KYBER_LEVEL5; +#else + kyberLevel = WOLFSSL_KYBER_LEVEL1; +#endif + ExpectIntEQ(wolfSSL_UseKeyShare(NULL, kyberLevel), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_SERVER - ExpectIntEQ(wolfSSL_UseKeyShare(serverSsl, WOLFSSL_KYBER_LEVEL3), + ExpectIntEQ(wolfSSL_UseKeyShare(serverSsl, kyberLevel), WOLFSSL_SUCCESS); #endif #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 - ExpectIntEQ(wolfSSL_UseKeyShare(clientTls12Ssl, WOLFSSL_KYBER_LEVEL3), - BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_UseKeyShare(clientTls12Ssl, kyberLevel), + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif - ExpectIntEQ(wolfSSL_UseKeyShare(clientSsl, WOLFSSL_KYBER_LEVEL3), + ExpectIntEQ(wolfSSL_UseKeyShare(clientSsl, kyberLevel), WOLFSSL_SUCCESS); #endif #endif - ExpectIntEQ(wolfSSL_NoKeyShares(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_NoKeyShares(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_SERVER - ExpectIntEQ(wolfSSL_NoKeyShares(serverSsl), SIDE_ERROR); + ExpectIntEQ(wolfSSL_NoKeyShares(serverSsl), WC_NO_ERR_TRACE(SIDE_ERROR)); #endif #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 @@ -67556,32 +73043,32 @@ static int test_tls13_apis(void) #endif #endif /* HAVE_SUPPORTED_CURVES */ - ExpectIntEQ(wolfSSL_CTX_no_ticket_TLSv13(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_no_ticket_TLSv13(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT - ExpectIntEQ(wolfSSL_CTX_no_ticket_TLSv13(clientCtx), SIDE_ERROR); + ExpectIntEQ(wolfSSL_CTX_no_ticket_TLSv13(clientCtx), WC_NO_ERR_TRACE(SIDE_ERROR)); #endif #ifndef NO_WOLFSSL_SERVER #ifndef WOLFSSL_NO_TLS12 - ExpectIntEQ(wolfSSL_CTX_no_ticket_TLSv13(serverTls12Ctx), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_no_ticket_TLSv13(serverTls12Ctx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif ExpectIntEQ(wolfSSL_CTX_no_ticket_TLSv13(serverCtx), 0); #endif - ExpectIntEQ(wolfSSL_no_ticket_TLSv13(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_no_ticket_TLSv13(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT - ExpectIntEQ(wolfSSL_no_ticket_TLSv13(clientSsl), SIDE_ERROR); + ExpectIntEQ(wolfSSL_no_ticket_TLSv13(clientSsl), WC_NO_ERR_TRACE(SIDE_ERROR)); #endif #ifndef NO_WOLFSSL_SERVER #ifndef WOLFSSL_NO_TLS12 - ExpectIntEQ(wolfSSL_no_ticket_TLSv13(serverTls12Ssl), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_no_ticket_TLSv13(serverTls12Ssl), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif ExpectIntEQ(wolfSSL_no_ticket_TLSv13(serverSsl), 0); #endif - ExpectIntEQ(wolfSSL_CTX_no_dhe_psk(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_no_dhe_psk(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 - ExpectIntEQ(wolfSSL_CTX_no_dhe_psk(clientTls12Ctx), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_no_dhe_psk(clientTls12Ctx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif ExpectIntEQ(wolfSSL_CTX_no_dhe_psk(clientCtx), 0); #endif @@ -67589,10 +73076,10 @@ static int test_tls13_apis(void) ExpectIntEQ(wolfSSL_CTX_no_dhe_psk(serverCtx), 0); #endif - ExpectIntEQ(wolfSSL_no_dhe_psk(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_no_dhe_psk(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 - ExpectIntEQ(wolfSSL_no_dhe_psk(clientTls12Ssl), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_no_dhe_psk(clientTls12Ssl), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif ExpectIntEQ(wolfSSL_no_dhe_psk(clientSsl), 0); #endif @@ -67600,139 +73087,139 @@ static int test_tls13_apis(void) ExpectIntEQ(wolfSSL_no_dhe_psk(serverSsl), 0); #endif - ExpectIntEQ(wolfSSL_update_keys(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_update_keys(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 - ExpectIntEQ(wolfSSL_update_keys(clientTls12Ssl), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_update_keys(clientTls12Ssl), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif - ExpectIntEQ(wolfSSL_update_keys(clientSsl), BUILD_MSG_ERROR); + ExpectIntEQ(wolfSSL_update_keys(clientSsl), WC_NO_ERR_TRACE(BUILD_MSG_ERROR)); #endif #ifndef NO_WOLFSSL_SERVER - ExpectIntEQ(wolfSSL_update_keys(serverSsl), BUILD_MSG_ERROR); + ExpectIntEQ(wolfSSL_update_keys(serverSsl), WC_NO_ERR_TRACE(BUILD_MSG_ERROR)); #endif - ExpectIntEQ(wolfSSL_key_update_response(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_key_update_response(NULL, &required), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_key_update_response(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_key_update_response(NULL, &required), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 ExpectIntEQ(wolfSSL_key_update_response(clientTls12Ssl, &required), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif - ExpectIntEQ(wolfSSL_key_update_response(clientSsl, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_key_update_response(clientSsl, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #ifndef NO_WOLFSSL_SERVER - ExpectIntEQ(wolfSSL_key_update_response(serverSsl, NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_key_update_response(serverSsl, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #if !defined(NO_CERTS) && defined(WOLFSSL_POST_HANDSHAKE_AUTH) - ExpectIntEQ(wolfSSL_CTX_allow_post_handshake_auth(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_allow_post_handshake_auth(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_SERVER - ExpectIntEQ(wolfSSL_CTX_allow_post_handshake_auth(serverCtx), SIDE_ERROR); + ExpectIntEQ(wolfSSL_CTX_allow_post_handshake_auth(serverCtx), WC_NO_ERR_TRACE(SIDE_ERROR)); #endif #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 ExpectIntEQ(wolfSSL_CTX_allow_post_handshake_auth(clientTls12Ctx), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif ExpectIntEQ(wolfSSL_CTX_allow_post_handshake_auth(clientCtx), 0); #endif - ExpectIntEQ(wolfSSL_allow_post_handshake_auth(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_allow_post_handshake_auth(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_SERVER - ExpectIntEQ(wolfSSL_allow_post_handshake_auth(serverSsl), SIDE_ERROR); + ExpectIntEQ(wolfSSL_allow_post_handshake_auth(serverSsl), WC_NO_ERR_TRACE(SIDE_ERROR)); #endif #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 ExpectIntEQ(wolfSSL_allow_post_handshake_auth(clientTls12Ssl), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif ExpectIntEQ(wolfSSL_allow_post_handshake_auth(clientSsl), 0); #endif - ExpectIntEQ(wolfSSL_request_certificate(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_request_certificate(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT - ExpectIntEQ(wolfSSL_request_certificate(clientSsl), SIDE_ERROR); + ExpectIntEQ(wolfSSL_request_certificate(clientSsl), WC_NO_ERR_TRACE(SIDE_ERROR)); #endif #ifndef NO_WOLFSSL_SERVER #ifndef WOLFSSL_NO_TLS12 ExpectIntEQ(wolfSSL_request_certificate(serverTls12Ssl), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif - ExpectIntEQ(wolfSSL_request_certificate(serverSsl), NOT_READY_ERROR); + ExpectIntEQ(wolfSSL_request_certificate(serverSsl), WC_NO_ERR_TRACE(NOT_READY_ERROR)); #endif #endif #ifdef HAVE_ECC #ifndef WOLFSSL_NO_SERVER_GROUPS_EXT - ExpectIntEQ(wolfSSL_preferred_group(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_preferred_group(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_SERVER - ExpectIntEQ(wolfSSL_preferred_group(serverSsl), SIDE_ERROR); + ExpectIntEQ(wolfSSL_preferred_group(serverSsl), WC_NO_ERR_TRACE(SIDE_ERROR)); #endif #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 - ExpectIntEQ(wolfSSL_preferred_group(clientTls12Ssl), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_preferred_group(clientTls12Ssl), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif - ExpectIntEQ(wolfSSL_preferred_group(clientSsl), NOT_READY_ERROR); + ExpectIntEQ(wolfSSL_preferred_group(clientSsl), WC_NO_ERR_TRACE(NOT_READY_ERROR)); #endif #endif #ifdef HAVE_SUPPORTED_CURVES - ExpectIntEQ(wolfSSL_CTX_set_groups(NULL, NULL, 0), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_set_groups(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT - ExpectIntEQ(wolfSSL_CTX_set_groups(clientCtx, NULL, 0), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_set_groups(clientCtx, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif - ExpectIntEQ(wolfSSL_CTX_set_groups(NULL, groups, numGroups), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_set_groups(NULL, groups, numGroups), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 ExpectIntEQ(wolfSSL_CTX_set_groups(clientTls12Ctx, groups, numGroups), WOLFSSL_SUCCESS); #endif ExpectIntEQ(wolfSSL_CTX_set_groups(clientCtx, groups, - WOLFSSL_MAX_GROUP_COUNT + 1), BAD_FUNC_ARG); + WOLFSSL_MAX_GROUP_COUNT + 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_set_groups(clientCtx, groups, numGroups), WOLFSSL_SUCCESS); ExpectIntEQ(wolfSSL_CTX_set_groups(clientCtx, bad_groups, numGroups), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #ifndef NO_WOLFSSL_SERVER ExpectIntEQ(wolfSSL_CTX_set_groups(serverCtx, groups, numGroups), WOLFSSL_SUCCESS); ExpectIntEQ(wolfSSL_CTX_set_groups(serverCtx, bad_groups, numGroups), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif - ExpectIntEQ(wolfSSL_set_groups(NULL, NULL, 0), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_set_groups(NULL, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT - ExpectIntEQ(wolfSSL_set_groups(clientSsl, NULL, 0), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_set_groups(clientSsl, NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif - ExpectIntEQ(wolfSSL_set_groups(NULL, groups, numGroups), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_set_groups(NULL, groups, numGroups), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 ExpectIntEQ(wolfSSL_set_groups(clientTls12Ssl, groups, numGroups), WOLFSSL_SUCCESS); #endif ExpectIntEQ(wolfSSL_set_groups(clientSsl, groups, - WOLFSSL_MAX_GROUP_COUNT + 1), BAD_FUNC_ARG); + WOLFSSL_MAX_GROUP_COUNT + 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_set_groups(clientSsl, groups, numGroups), WOLFSSL_SUCCESS); ExpectIntEQ(wolfSSL_set_groups(clientSsl, bad_groups, numGroups), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #ifndef NO_WOLFSSL_SERVER ExpectIntEQ(wolfSSL_set_groups(serverSsl, groups, numGroups), WOLFSSL_SUCCESS); ExpectIntEQ(wolfSSL_set_groups(serverSsl, bad_groups, numGroups), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #ifdef OPENSSL_EXTRA - ExpectIntEQ(wolfSSL_CTX_set1_groups_list(NULL, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_CTX_set1_groups_list(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #ifndef NO_WOLFSSL_CLIENT ExpectIntEQ(wolfSSL_CTX_set1_groups_list(clientCtx, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif ExpectIntEQ(wolfSSL_CTX_set1_groups_list(NULL, groupList), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 ExpectIntEQ(wolfSSL_CTX_set1_groups_list(clientTls12Ctx, groupList), @@ -67746,11 +73233,11 @@ static int test_tls13_apis(void) WOLFSSL_SUCCESS); #endif - ExpectIntEQ(wolfSSL_set1_groups_list(NULL, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_set1_groups_list(NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #ifndef NO_WOLFSSL_CLIENT - ExpectIntEQ(wolfSSL_set1_groups_list(clientSsl, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_set1_groups_list(clientSsl, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif - ExpectIntEQ(wolfSSL_set1_groups_list(NULL, groupList), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_set1_groups_list(NULL, groupList), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 ExpectIntEQ(wolfSSL_set1_groups_list(clientTls12Ssl, groupList), @@ -67769,31 +73256,31 @@ static int test_tls13_apis(void) #ifdef WOLFSSL_EARLY_DATA #ifndef OPENSSL_EXTRA - ExpectIntEQ(wolfSSL_CTX_set_max_early_data(NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CTX_get_max_early_data(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_set_max_early_data(NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CTX_get_max_early_data(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #else - ExpectIntEQ(SSL_CTX_set_max_early_data(NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(SSL_CTX_get_max_early_data(NULL), BAD_FUNC_ARG); + ExpectIntEQ(SSL_CTX_set_max_early_data(NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(SSL_CTX_get_max_early_data(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #ifndef NO_WOLFSSL_CLIENT #ifndef OPENSSL_EXTRA - ExpectIntEQ(wolfSSL_CTX_set_max_early_data(clientCtx, 0), SIDE_ERROR); - ExpectIntEQ(wolfSSL_CTX_get_max_early_data(clientCtx), SIDE_ERROR); + ExpectIntEQ(wolfSSL_CTX_set_max_early_data(clientCtx, 0), WC_NO_ERR_TRACE(SIDE_ERROR)); + ExpectIntEQ(wolfSSL_CTX_get_max_early_data(clientCtx), WC_NO_ERR_TRACE(SIDE_ERROR)); #else - ExpectIntEQ(SSL_CTX_set_max_early_data(clientCtx, 0), SIDE_ERROR); - ExpectIntEQ(SSL_CTX_get_max_early_data(clientCtx), SIDE_ERROR); + ExpectIntEQ(SSL_CTX_set_max_early_data(clientCtx, 0), WC_NO_ERR_TRACE(SIDE_ERROR)); + ExpectIntEQ(SSL_CTX_get_max_early_data(clientCtx), WC_NO_ERR_TRACE(SIDE_ERROR)); #endif #endif #ifndef NO_WOLFSSL_SERVER #ifndef WOLFSSL_NO_TLS12 #ifndef OPENSSL_EXTRA ExpectIntEQ(wolfSSL_CTX_set_max_early_data(serverTls12Ctx, 0), - BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CTX_get_max_early_data(serverTls12Ctx), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CTX_get_max_early_data(serverTls12Ctx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #else ExpectIntEQ(SSL_CTX_set_max_early_data(serverTls12Ctx, 0), - BAD_FUNC_ARG); - ExpectIntEQ(SSL_CTX_get_max_early_data(serverTls12Ctx), BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(SSL_CTX_get_max_early_data(serverTls12Ctx), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #endif #ifndef OPENSSL_EXTRA @@ -67811,11 +73298,11 @@ static int test_tls13_apis(void) #endif #ifndef OPENSSL_EXTRA - ExpectIntEQ(wolfSSL_set_max_early_data(NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_get_max_early_data(NULL), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_set_max_early_data(NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_get_max_early_data(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #else - ExpectIntEQ(SSL_set_max_early_data(NULL, 0), BAD_FUNC_ARG); - ExpectIntEQ(SSL_get_max_early_data(NULL), BAD_FUNC_ARG); + ExpectIntEQ(SSL_set_max_early_data(NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(SSL_get_max_early_data(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #ifndef NO_WOLFSSL_CLIENT #ifndef OPENSSL_EXTRA @@ -67833,11 +73320,11 @@ static int test_tls13_apis(void) #ifndef NO_WOLFSSL_SERVER #ifndef WOLFSSL_NO_TLS12 #ifndef OPENSSL_EXTRA - ExpectIntEQ(wolfSSL_set_max_early_data(serverTls12Ssl, 0), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_get_max_early_data(serverTls12Ssl), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_set_max_early_data(serverTls12Ssl, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_get_max_early_data(serverTls12Ssl), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #else - ExpectIntEQ(SSL_set_max_early_data(serverTls12Ssl, 0), BAD_FUNC_ARG); - ExpectIntEQ(SSL_get_max_early_data(serverTls12Ssl), BAD_FUNC_ARG); + ExpectIntEQ(SSL_set_max_early_data(serverTls12Ssl, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(SSL_get_max_early_data(serverTls12Ssl), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #endif #ifndef OPENSSL_EXTRA @@ -67855,49 +73342,49 @@ static int test_tls13_apis(void) ExpectIntEQ(wolfSSL_write_early_data(NULL, earlyData, sizeof(earlyData), - &outSz), BAD_FUNC_ARG); + &outSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_CLIENT ExpectIntEQ(wolfSSL_write_early_data(clientSsl, NULL, sizeof(earlyData), - &outSz), BAD_FUNC_ARG); + &outSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_write_early_data(clientSsl, earlyData, -1, &outSz), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_write_early_data(clientSsl, earlyData, - sizeof(earlyData), NULL), BAD_FUNC_ARG); + sizeof(earlyData), NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #ifndef NO_WOLFSSL_SERVER ExpectIntEQ(wolfSSL_write_early_data(serverSsl, earlyData, - sizeof(earlyData), &outSz), SIDE_ERROR); + sizeof(earlyData), &outSz), WC_NO_ERR_TRACE(SIDE_ERROR)); #endif #ifndef NO_WOLFSSL_CLIENT #ifndef WOLFSSL_NO_TLS12 ExpectIntEQ(wolfSSL_write_early_data(clientTls12Ssl, earlyData, - sizeof(earlyData), &outSz), BAD_FUNC_ARG); + sizeof(earlyData), &outSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif ExpectIntEQ(wolfSSL_write_early_data(clientSsl, earlyData, - sizeof(earlyData), &outSz), WOLFSSL_FATAL_ERROR); + sizeof(earlyData), &outSz), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); #endif ExpectIntEQ(wolfSSL_read_early_data(NULL, earlyDataBuffer, - sizeof(earlyDataBuffer), &outSz), BAD_FUNC_ARG); + sizeof(earlyDataBuffer), &outSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #ifndef NO_WOLFSSL_SERVER ExpectIntEQ(wolfSSL_read_early_data(serverSsl, NULL, - sizeof(earlyDataBuffer), &outSz), BAD_FUNC_ARG); + sizeof(earlyDataBuffer), &outSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_read_early_data(serverSsl, earlyDataBuffer, -1, - &outSz), BAD_FUNC_ARG); + &outSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_read_early_data(serverSsl, earlyDataBuffer, - sizeof(earlyDataBuffer), NULL), BAD_FUNC_ARG); + sizeof(earlyDataBuffer), NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif #ifndef NO_WOLFSSL_CLIENT ExpectIntEQ(wolfSSL_read_early_data(clientSsl, earlyDataBuffer, - sizeof(earlyDataBuffer), &outSz), SIDE_ERROR); + sizeof(earlyDataBuffer), &outSz), WC_NO_ERR_TRACE(SIDE_ERROR)); #endif #ifndef NO_WOLFSSL_SERVER #ifndef WOLFSSL_NO_TLS12 ExpectIntEQ(wolfSSL_read_early_data(serverTls12Ssl, earlyDataBuffer, - sizeof(earlyDataBuffer), &outSz), BAD_FUNC_ARG); + sizeof(earlyDataBuffer), &outSz), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #endif ExpectIntEQ(wolfSSL_read_early_data(serverSsl, earlyDataBuffer, - sizeof(earlyDataBuffer), &outSz), WOLFSSL_FATAL_ERROR); + sizeof(earlyDataBuffer), &outSz), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); #endif #endif @@ -68076,7 +73563,7 @@ static int test_tls13_cipher_suites(void) } } /* Test multiple occurrences of same cipher suite. */ - ExpectIntEQ(wolfSSL_accept_TLSv13(ssl), WOLFSSL_FATAL_ERROR); + ExpectIntEQ(wolfSSL_accept_TLSv13(ssl), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); wolfSSL_free(ssl); ssl = NULL; @@ -68095,7 +73582,7 @@ static int test_tls13_cipher_suites(void) /* Server order: TLS13-AES256-GCM-SHA384:TLS13-AES128-GCM-SHA256 */ ExpectIntEQ(wolfSSL_set_cipher_list(ssl, serverCs), WOLFSSL_SUCCESS); /* Negotiate cipher suites in server order: TLS13-AES256-GCM-SHA384 */ - ExpectIntEQ(wolfSSL_accept_TLSv13(ssl), WOLFSSL_FATAL_ERROR); + ExpectIntEQ(wolfSSL_accept_TLSv13(ssl), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); /* Check refined order - server order. */ ExpectIntEQ(ssl->suites->suiteSz, 4); ExpectIntEQ(ssl->suites->suites[0], TLS13_BYTE); @@ -68114,7 +73601,7 @@ static int test_tls13_cipher_suites(void) ExpectIntEQ(wolfSSL_set_cipher_list(ssl, serverCs), WOLFSSL_SUCCESS); ExpectIntEQ(wolfSSL_UseClientSuites(ssl), 0); /* Negotiate cipher suites in client order: TLS13-AES128-GCM-SHA256 */ - ExpectIntEQ(wolfSSL_accept_TLSv13(ssl), WOLFSSL_FATAL_ERROR); + ExpectIntEQ(wolfSSL_accept_TLSv13(ssl), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); /* Check refined order - client order. */ ExpectIntEQ(ssl->suites->suiteSz, 4); ExpectIntEQ(ssl->suites->suites[0], TLS13_BYTE); @@ -68196,7 +73683,7 @@ static int test_dh_ssl_setup(WOLFSSL* ssl) wolfSSL_SetDhAgreeCtx(ssl, &dh_test_ctx); ExpectIntEQ(*((int*)wolfSSL_GetDhAgreeCtx(ssl)), dh_test_ctx); ret = wolfSSL_SetTmpDH_file(ssl, dhParamFile, WOLFSSL_FILETYPE_PEM); - if (ret != WOLFSSL_SUCCESS && ret != SIDE_ERROR) { + if (ret != WOLFSSL_SUCCESS && ret != WC_NO_ERR_TRACE(SIDE_ERROR)) { ExpectIntEQ(ret, WOLFSSL_SUCCESS); } return EXPECT_RESULT(); @@ -68210,7 +73697,7 @@ static int test_dh_ssl_setup_fail(WOLFSSL* ssl) wolfSSL_SetDhAgreeCtx(ssl, NULL); ExpectNull(wolfSSL_GetDhAgreeCtx(ssl)); ret = wolfSSL_SetTmpDH_file(ssl, dhParamFile, WOLFSSL_FILETYPE_PEM); - if (ret != WOLFSSL_SUCCESS && ret != SIDE_ERROR) { + if (ret != WOLFSSL_SUCCESS && ret != WC_NO_ERR_TRACE(SIDE_ERROR)) { ExpectIntEQ(ret, WOLFSSL_SUCCESS); } return EXPECT_RESULT(); @@ -68231,7 +73718,7 @@ static int test_DhCallbacks(void) /* Test that DH callback APIs work. */ ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_client_method())); - ExpectIntEQ(wolfSSL_CTX_set_cipher_list(NULL, "NONE"), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_CTX_set_cipher_list(NULL, "NONE"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); wolfSSL_CTX_SetDhAgreeCb(ctx, &my_DhCallback); /* load client ca cert */ ExpectIntEQ(wolfSSL_CTX_load_verify_locations(ctx, caCertFile, 0), @@ -68340,9 +73827,9 @@ static int test_get_rand_digit(void) ExpectIntEQ(wc_InitRng(&rng), 0); ExpectIntEQ(get_rand_digit(&rng, &d), 0); - ExpectIntEQ(get_rand_digit(NULL, NULL), BAD_FUNC_ARG); - ExpectIntEQ(get_rand_digit(NULL, &d), BAD_FUNC_ARG); - ExpectIntEQ(get_rand_digit(&rng, NULL), BAD_FUNC_ARG); + ExpectIntEQ(get_rand_digit(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(get_rand_digit(NULL, &d), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(get_rand_digit(&rng, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); DoExpectIntEQ(wc_FreeRng(&rng), 0); #endif @@ -68388,9 +73875,9 @@ static int test_mp_cond_copy(void) ExpectIntEQ(mp_init(&a), MP_OKAY); ExpectIntEQ(mp_init(&b), MP_OKAY); - ExpectIntEQ(mp_cond_copy(NULL, copy, NULL), BAD_FUNC_ARG); - ExpectIntEQ(mp_cond_copy(NULL, copy, &b), BAD_FUNC_ARG); - ExpectIntEQ(mp_cond_copy(&a, copy, NULL), BAD_FUNC_ARG); + ExpectIntEQ(mp_cond_copy(NULL, copy, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(mp_cond_copy(NULL, copy, &b), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(mp_cond_copy(&a, copy, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(mp_cond_copy(&a, copy, &b), 0); mp_clear(&a); @@ -68416,9 +73903,9 @@ static int test_mp_rand(void) ExpectIntEQ(mp_init(&a), MP_OKAY); ExpectIntEQ(wc_InitRng(&rng), 0); - ExpectIntEQ(mp_rand(&a, digits, NULL), MISSING_RNG_E); - ExpectIntEQ(mp_rand(NULL, digits, &rng), BAD_FUNC_ARG); - ExpectIntEQ(mp_rand(&a, 0, &rng), BAD_FUNC_ARG); + ExpectIntEQ(mp_rand(&a, digits, NULL), WC_NO_ERR_TRACE(MISSING_RNG_E)); + ExpectIntEQ(mp_rand(NULL, digits, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(mp_rand(&a, 0, &rng), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(mp_rand(&a, digits, &rng), 0); mp_clear(&a); @@ -68467,14 +73954,14 @@ static int test_wc_export_int(void) ExpectIntEQ(mp_set(&mp, 1234), 0); ExpectIntEQ(wc_export_int(NULL, buf, &len, keySz, WC_TYPE_UNSIGNED_BIN), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); len = sizeof(buf)-1; ExpectIntEQ(wc_export_int(&mp, buf, &len, keySz, WC_TYPE_UNSIGNED_BIN), - BUFFER_E); + WC_NO_ERR_TRACE(BUFFER_E)); len = sizeof(buf); ExpectIntEQ(wc_export_int(&mp, buf, &len, keySz, WC_TYPE_UNSIGNED_BIN), 0); len = 4; /* test input too small */ - ExpectIntEQ(wc_export_int(&mp, buf, &len, 0, WC_TYPE_HEX_STR), BUFFER_E); + ExpectIntEQ(wc_export_int(&mp, buf, &len, 0, WC_TYPE_HEX_STR), WC_NO_ERR_TRACE(BUFFER_E)); len = sizeof(buf); ExpectIntEQ(wc_export_int(&mp, buf, &len, 0, WC_TYPE_HEX_STR), 0); /* hex version of 1234 is 04D2 and should be 4 digits + 1 null */ @@ -68675,11 +74162,11 @@ static int test_wolfSSL_X509_load_crl_file(void) /* since store knows crl list */ ExpectIntEQ(wolfSSL_CertManagerVerify(store->cm, "certs/server-revoked-cert.pem", WOLFSSL_FILETYPE_PEM), - CRL_CERT_REVOKED); + WC_NO_ERR_TRACE(CRL_CERT_REVOKED)); #ifdef WC_RSA_PSS ExpectIntEQ(wolfSSL_CertManagerVerify(store->cm, "certs/rsapss/server-rsapss-cert.pem", WOLFSSL_FILETYPE_PEM), - CRL_CERT_REVOKED); + WC_NO_ERR_TRACE(CRL_CERT_REVOKED)); #endif } /* once feeing store */ @@ -68710,7 +74197,7 @@ static int test_wolfSSL_X509_load_crl_file(void) /* since store knows crl list */ ExpectIntEQ(wolfSSL_CertManagerVerify(store->cm, "certs/server-revoked-cert.pem", WOLFSSL_FILETYPE_PEM), - CRL_CERT_REVOKED); + WC_NO_ERR_TRACE(CRL_CERT_REVOKED)); } /* test for incorrect parameter */ @@ -68970,10 +74457,10 @@ static int test_wolfSSL_PEM_read(void) ExpectTrue((fp = XFOPEN(filename, "rb")) != XBADFILE); /* Fail cases. */ - ExpectIntEQ(PEM_read(fp, NULL, &header, &data, &len), WOLFSSL_FAILURE); - ExpectIntEQ(PEM_read(fp, &name, NULL, &data, &len), WOLFSSL_FAILURE); - ExpectIntEQ(PEM_read(fp, &name, &header, NULL, &len), WOLFSSL_FAILURE); - ExpectIntEQ(PEM_read(fp, &name, &header, &data, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(PEM_read(fp, NULL, &header, &data, &len), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(PEM_read(fp, &name, NULL, &data, &len), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(PEM_read(fp, &name, &header, NULL, &len), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(PEM_read(fp, &name, &header, &data, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_read(fp, &name, &header, &data, &len), WOLFSSL_SUCCESS); @@ -69025,9 +74512,9 @@ static int test_wolfSSL_PEM_read(void) ExpectIntGT(len, 0); /* Fail cases. */ - ExpectIntEQ(PEM_get_EVP_CIPHER_INFO(NULL, &cipher), WOLFSSL_FAILURE); - ExpectIntEQ(PEM_get_EVP_CIPHER_INFO(header, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(PEM_get_EVP_CIPHER_INFO((char*)"", &cipher), WOLFSSL_FAILURE); + ExpectIntEQ(PEM_get_EVP_CIPHER_INFO(NULL, &cipher), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(PEM_get_EVP_CIPHER_INFO(header, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(PEM_get_EVP_CIPHER_INFO((char*)"", &cipher), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #ifndef NO_DES3 ExpectIntEQ(PEM_get_EVP_CIPHER_INFO(header, &cipher), WOLFSSL_SUCCESS); @@ -69035,22 +74522,22 @@ static int test_wolfSSL_PEM_read(void) /* Fail cases. */ ExpectIntEQ(PEM_do_header(NULL, data, &len, PasswordCallBack, - (void*)"yassl123"), WOLFSSL_FAILURE); + (void*)"yassl123"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_do_header(&cipher, NULL, &len, PasswordCallBack, - (void*)"yassl123"), WOLFSSL_FAILURE); + (void*)"yassl123"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_do_header(&cipher, data, NULL, PasswordCallBack, - (void*)"yassl123"), WOLFSSL_FAILURE); + (void*)"yassl123"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_do_header(&cipher, data, &len, NULL, - (void*)"yassl123"), WOLFSSL_FAILURE); + (void*)"yassl123"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(PEM_do_header(&cipher, data, &len, NoPasswordCallBack, - (void*)"yassl123"), WOLFSSL_FAILURE); + (void*)"yassl123"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #if !defined(NO_DES3) && !defined(NO_MD5) ExpectIntEQ(PEM_do_header(&cipher, data, &len, PasswordCallBack, (void*)"yassl123"), WOLFSSL_SUCCESS); #else ExpectIntEQ(PEM_do_header(&cipher, data, &len, PasswordCallBack, - (void*)"yassl123"), WOLFSSL_FAILURE); + (void*)"yassl123"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif BIO_free(bio); @@ -69764,19 +75251,22 @@ static int test_wolfssl_EVP_chacha20_poly1305(void) EVP_CIPHER_CTX* ctx = NULL; int outSz; + XMEMSET(key, 0, sizeof(key)); + XMEMSET(iv, 0, sizeof(iv)); + /* Encrypt. */ ExpectNotNull((ctx = EVP_CIPHER_CTX_new())); ExpectIntEQ(EVP_EncryptInit_ex(ctx, EVP_chacha20_poly1305(), NULL, NULL, NULL), WOLFSSL_SUCCESS); /* Invalid IV length. */ ExpectIntEQ(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, - CHACHA20_POLY1305_AEAD_IV_SIZE-1, NULL), WOLFSSL_FAILURE); + CHACHA20_POLY1305_AEAD_IV_SIZE-1, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Valid IV length. */ ExpectIntEQ(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, CHACHA20_POLY1305_AEAD_IV_SIZE, NULL), WOLFSSL_SUCCESS); /* Invalid tag length. */ ExpectIntEQ(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, - CHACHA20_POLY1305_AEAD_AUTHTAG_SIZE-1, NULL), WOLFSSL_FAILURE); + CHACHA20_POLY1305_AEAD_AUTHTAG_SIZE-1, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Valid tag length. */ ExpectIntEQ(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, CHACHA20_POLY1305_AEAD_AUTHTAG_SIZE, NULL), WOLFSSL_SUCCESS); @@ -69791,7 +75281,7 @@ static int test_wolfssl_EVP_chacha20_poly1305(void) ExpectIntEQ(outSz, 0); /* Invalid tag length. */ ExpectIntEQ(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, - CHACHA20_POLY1305_AEAD_AUTHTAG_SIZE-1, tag), WOLFSSL_FAILURE); + CHACHA20_POLY1305_AEAD_AUTHTAG_SIZE-1, tag), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Valid tag length. */ ExpectIntEQ(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, CHACHA20_POLY1305_AEAD_AUTHTAG_SIZE, tag), WOLFSSL_SUCCESS); @@ -69860,7 +75350,7 @@ static int test_wolfssl_EVP_chacha20(void) NULL), WOLFSSL_SUCCESS); /* Any tag length must fail - not an AEAD cipher. */ ExpectIntEQ(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, - 16, NULL), WOLFSSL_FAILURE); + 16, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv), WOLFSSL_SUCCESS); ExpectIntEQ(EVP_EncryptUpdate(ctx, cipherText, &outSz, plainText, sizeof(plainText)), WOLFSSL_SUCCESS); @@ -69925,7 +75415,7 @@ static int test_wolfssl_EVP_sm4_ecb(void) WOLFSSL_SUCCESS); /* Any tag length must fail - not an AEAD cipher. */ ExpectIntEQ(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, 16, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(EVP_EncryptInit_ex(ctx, NULL, NULL, key, NULL), WOLFSSL_SUCCESS); ExpectIntEQ(EVP_EncryptUpdate(ctx, cipherText, &outSz, plainText, @@ -69982,7 +75472,7 @@ static int test_wolfssl_EVP_sm4_cbc(void) WOLFSSL_SUCCESS); /* Any tag length must fail - not an AEAD cipher. */ ExpectIntEQ(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, 16, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv), WOLFSSL_SUCCESS); ExpectIntEQ(EVP_EncryptUpdate(ctx, cipherText, &outSz, plainText, sizeof(plainText)), WOLFSSL_SUCCESS); @@ -70050,7 +75540,7 @@ static int test_wolfssl_EVP_sm4_ctr(void) WOLFSSL_SUCCESS); /* Any tag length must fail - not an AEAD cipher. */ ExpectIntEQ(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, 16, NULL), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv), WOLFSSL_SUCCESS); ExpectIntEQ(EVP_EncryptUpdate(ctx, cipherText, &outSz, plainText, sizeof(plainText)), WOLFSSL_SUCCESS); @@ -70446,48 +75936,48 @@ static int test_wolfSSL_EVP_PKEY_hkdf(void) ExpectNotNull((ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_HKDF, NULL))); ExpectIntEQ(EVP_PKEY_derive_init(ctx), WOLFSSL_SUCCESS); /* NULL ctx. */ - ExpectIntEQ(EVP_PKEY_CTX_set_hkdf_md(NULL, EVP_sha256()), WOLFSSL_FAILURE); + ExpectIntEQ(EVP_PKEY_CTX_set_hkdf_md(NULL, EVP_sha256()), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* NULL md. */ - ExpectIntEQ(EVP_PKEY_CTX_set_hkdf_md(ctx, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(EVP_PKEY_CTX_set_hkdf_md(ctx, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(EVP_PKEY_CTX_set_hkdf_md(ctx, EVP_sha256()), WOLFSSL_SUCCESS); /* NULL ctx. */ ExpectIntEQ(EVP_PKEY_CTX_set1_hkdf_salt(NULL, salt, sizeof(salt)), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* NULL salt is ok. */ ExpectIntEQ(EVP_PKEY_CTX_set1_hkdf_salt(ctx, NULL, sizeof(salt)), WOLFSSL_SUCCESS); /* Salt length <= 0. */ /* Length 0 salt is ok. */ ExpectIntEQ(EVP_PKEY_CTX_set1_hkdf_salt(ctx, salt, 0), WOLFSSL_SUCCESS); - ExpectIntEQ(EVP_PKEY_CTX_set1_hkdf_salt(ctx, salt, -1), WOLFSSL_FAILURE); + ExpectIntEQ(EVP_PKEY_CTX_set1_hkdf_salt(ctx, salt, -1), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(EVP_PKEY_CTX_set1_hkdf_salt(ctx, salt, sizeof(salt)), WOLFSSL_SUCCESS); /* NULL ctx. */ ExpectIntEQ(EVP_PKEY_CTX_set1_hkdf_key(NULL, key, sizeof(key)), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* NULL key. */ ExpectIntEQ(EVP_PKEY_CTX_set1_hkdf_key(ctx, NULL, sizeof(key)), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Key length <= 0 */ - ExpectIntEQ(EVP_PKEY_CTX_set1_hkdf_key(ctx, key, 0), WOLFSSL_FAILURE); - ExpectIntEQ(EVP_PKEY_CTX_set1_hkdf_key(ctx, key, -1), WOLFSSL_FAILURE); + ExpectIntEQ(EVP_PKEY_CTX_set1_hkdf_key(ctx, key, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(EVP_PKEY_CTX_set1_hkdf_key(ctx, key, -1), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(EVP_PKEY_CTX_set1_hkdf_key(ctx, key, sizeof(key)), WOLFSSL_SUCCESS); /* NULL ctx. */ ExpectIntEQ(EVP_PKEY_CTX_add1_hkdf_info(NULL, info, sizeof(info)), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* NULL info is ok. */ ExpectIntEQ(EVP_PKEY_CTX_add1_hkdf_info(ctx, NULL, sizeof(info)), WOLFSSL_SUCCESS); /* Info length <= 0 */ /* Length 0 info is ok. */ ExpectIntEQ(EVP_PKEY_CTX_add1_hkdf_info(ctx, info, 0), WOLFSSL_SUCCESS); - ExpectIntEQ(EVP_PKEY_CTX_add1_hkdf_info(ctx, info, -1), WOLFSSL_FAILURE); + ExpectIntEQ(EVP_PKEY_CTX_add1_hkdf_info(ctx, info, -1), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(EVP_PKEY_CTX_add1_hkdf_info(ctx, info, sizeof(info)), WOLFSSL_SUCCESS); /* NULL ctx. */ ExpectIntEQ(EVP_PKEY_CTX_hkdf_mode(NULL, EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY), - WOLFSSL_FAILURE); + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Extract and expand (default). */ ExpectIntEQ(EVP_PKEY_derive(ctx, outKey, &outKeySz), WOLFSSL_SUCCESS); ExpectIntEQ(outKeySz, sizeof(extractAndExpand)); @@ -70705,7 +76195,7 @@ static int test_wolfSSL_X509_STORE_set_get_crl_verify(int ok, } /* Ignore CRL missing error */ #ifndef OPENSSL_COMPATIBLE_DEFAULTS - if (cert_error == CRL_MISSING) + if (cert_error == WC_NO_ERR_TRACE(CRL_MISSING)) #else if (cert_error == X509_V_ERR_UNABLE_TO_GET_CRL) #endif @@ -70749,12 +76239,18 @@ static int test_wolfSSL_X509_STORE_set_get_crl_ctx_ready2(WOLFSSL_CTX* ctx) #endif X509_STORE_set_verify_cb(cert_store, test_wolfSSL_X509_STORE_set_get_crl_verify); - ExpectNotNull(param = X509_STORE_get0_param(cert_store)); + ExpectNotNull(X509_STORE_get0_param(cert_store)); + ExpectNotNull(param = X509_VERIFY_PARAM_new()); + ExpectIntEQ(X509_VERIFY_PARAM_inherit(param, + X509_STORE_get0_param(cert_store)), 1); ExpectIntEQ(X509_VERIFY_PARAM_set_flags( param, X509_V_FLAG_CRL_CHECK | X509_V_FLAG_CRL_CHECK_ALL), 1); + ExpectIntEQ(X509_STORE_set1_param(cert_store, param), 1); ExpectIntEQ(X509_STORE_set_flags(cert_store, X509_V_FLAG_CRL_CHECK | X509_V_FLAG_CRL_CHECK_ALL), 1); + + X509_VERIFY_PARAM_free(param); return EXPECT_RESULT(); } #endif @@ -70807,7 +76303,7 @@ static int test_wolfSSL_dup_CA_list(void) for (i = 0; i < 3; i++) { name = X509_NAME_new(); ExpectNotNull(name); - ExpectIntEQ(sk_X509_NAME_push(originalStack, name), WOLFSSL_SUCCESS); + ExpectIntEQ(sk_X509_NAME_push(originalStack, name), i+1); if (EXPECT_FAIL()) { X509_NAME_free(name); } @@ -70953,7 +76449,7 @@ static int test_wolfSSL_BIO_get_len(void) BIO *bio = NULL; const char txt[] = "Some example text to push to the BIO."; - ExpectIntEQ(wolfSSL_BIO_get_len(bio), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_BIO_get_len(bio), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectNotNull(bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem())); @@ -70963,7 +76459,7 @@ static int test_wolfSSL_BIO_get_len(void) bio = NULL; ExpectNotNull(bio = BIO_new_fd(STDERR_FILENO, BIO_NOCLOSE)); - ExpectIntEQ(wolfSSL_BIO_get_len(bio), WOLFSSL_BAD_FILE); + ExpectIntEQ(wolfSSL_BIO_get_len(bio), WC_NO_ERR_TRACE(WOLFSSL_BAD_FILE)); BIO_free(bio); #endif return EXPECT_RESULT(); @@ -71000,6 +76496,65 @@ static int test_wolfSSL_RSA(void) ExpectNotNull(rsa = RSA_generate_key(2048, 3, NULL, NULL)); ExpectIntEQ(RSA_size(rsa), 256); +#if (!defined(HAVE_FIPS) || FIPS_VERSION3_GT(6,0,0)) && !defined(HAVE_SELFTEST) + { + /* Test setting only subset of parameters */ + RSA *rsa2 = NULL; + unsigned char hash[SHA256_DIGEST_LENGTH]; + unsigned char signature[2048/8]; + unsigned int signatureLen = 0; + + XMEMSET(hash, 0, sizeof(hash)); + RSA_get0_key(rsa, &n, &e, &d); + RSA_get0_factors(rsa, &p, &q); + RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp); + + ExpectIntEQ(RSA_sign(NID_sha256, hash, sizeof(hash), signature, + &signatureLen, rsa), 1); + /* Quick sanity check */ + ExpectIntEQ(RSA_verify(NID_sha256, hash, sizeof(hash), signature, + signatureLen, rsa), 1); + + /* Verifying */ + ExpectNotNull(rsa2 = RSA_new()); + ExpectIntEQ(RSA_set0_key(rsa2, BN_dup(n), BN_dup(e), NULL), 1); + ExpectIntEQ(RSA_verify(NID_sha256, hash, sizeof(hash), signature, + signatureLen, rsa2), 1); + ExpectIntEQ(RSA_set0_factors(rsa2, BN_dup(p), BN_dup(q)), 1); + ExpectIntEQ(RSA_verify(NID_sha256, hash, sizeof(hash), signature, + signatureLen, rsa2), 1); + ExpectIntEQ(RSA_set0_crt_params(rsa2, BN_dup(dmp1), BN_dup(dmq1), + BN_dup(iqmp)), 1); + ExpectIntEQ(RSA_verify(NID_sha256, hash, sizeof(hash), signature, + signatureLen, rsa2), 1); + RSA_free(rsa2); + rsa2 = NULL; + + /* Signing */ + XMEMSET(signature, 0, sizeof(signature)); + ExpectNotNull(rsa2 = RSA_new()); + ExpectIntEQ(RSA_set0_key(rsa2, BN_dup(n), BN_dup(e), BN_dup(d)), 1); + ExpectIntEQ(RSA_sign(NID_sha256, hash, sizeof(hash), signature, + &signatureLen, rsa2), 1); + ExpectIntEQ(RSA_verify(NID_sha256, hash, sizeof(hash), signature, + signatureLen, rsa), 1); + ExpectIntEQ(RSA_set0_factors(rsa2, BN_dup(p), BN_dup(q)), 1); + XMEMSET(signature, 0, sizeof(signature)); + ExpectIntEQ(RSA_sign(NID_sha256, hash, sizeof(hash), signature, + &signatureLen, rsa2), 1); + ExpectIntEQ(RSA_verify(NID_sha256, hash, sizeof(hash), signature, + signatureLen, rsa), 1); + ExpectIntEQ(RSA_set0_crt_params(rsa2, BN_dup(dmp1), BN_dup(dmq1), + BN_dup(iqmp)), 1); + ExpectIntEQ(RSA_sign(NID_sha256, hash, sizeof(hash), signature, + &signatureLen, rsa2), 1); + ExpectIntEQ(RSA_verify(NID_sha256, hash, sizeof(hash), signature, + signatureLen, rsa), 1); + RSA_free(rsa2); + rsa2 = NULL; + } +#endif + #ifdef WOLFSSL_RSA_KEY_CHECK ExpectIntEQ(RSA_check_key(NULL), 0); ExpectIntEQ(RSA_check_key(rsa), 1); @@ -71180,7 +76735,7 @@ static int test_wolfSSL_RSA_DER(void) buff = tbl[0].der; ExpectNull(d2i_RSAPrivateKey(&rsa, &buff, 1)); - ExpectIntEQ(i2d_RSAPublicKey(NULL, NULL), BAD_FUNC_ARG); + ExpectIntEQ(i2d_RSAPublicKey(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); rsa = RSA_new(); ExpectIntEQ(i2d_RSAPublicKey(rsa, NULL), 0); RSA_free(rsa); @@ -71532,13 +77087,13 @@ static int test_wolfSSL_RSA_verify(void) signatureLength, pubKey), SSL_SUCCESS); ExpectIntEQ(RSA_verify(NID_sha256, NULL, SHA256_DIGEST_LENGTH, NULL, - signatureLength, NULL), SSL_FAILURE); + signatureLength, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(RSA_verify(NID_sha256, NULL, SHA256_DIGEST_LENGTH, signature, - signatureLength, pubKey), SSL_FAILURE); + signatureLength, pubKey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(RSA_verify(NID_sha256, hash, SHA256_DIGEST_LENGTH, NULL, - signatureLength, pubKey), SSL_FAILURE); + signatureLength, pubKey), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(RSA_verify(NID_sha256, hash, SHA256_DIGEST_LENGTH, signature, - signatureLength, NULL), SSL_FAILURE); + signatureLength, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); RSA_free(pKey); @@ -72252,8 +77807,8 @@ static int test_wolfSSL_RSA_To_Der(void) rsa = NULL; ExpectNotNull(wolfSSL_d2i_RSAPrivateKey(&rsa, &der, privDerSz)); - ExpectIntEQ(wolfSSL_RSA_To_Der(NULL, &outDer, 0, HEAP_HINT), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_RSA_To_Der(rsa, &outDer, 2, HEAP_HINT), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_RSA_To_Der(NULL, &outDer, 0, HEAP_HINT), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_RSA_To_Der(rsa, &outDer, 2, HEAP_HINT), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_RSA_To_Der(rsa, NULL, 0, HEAP_HINT), privDerSz); outDer = out; @@ -72273,14 +77828,14 @@ static int test_wolfSSL_RSA_To_Der(void) RSA_free(rsa); ExpectNotNull(rsa = RSA_new()); - ExpectIntEQ(wolfSSL_RSA_To_Der(rsa, &outDer, 0, HEAP_HINT), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_RSA_To_Der(rsa, &outDer, 1, HEAP_HINT), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_RSA_To_Der(rsa, &outDer, 0, HEAP_HINT), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_RSA_To_Der(rsa, &outDer, 1, HEAP_HINT), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); RSA_free(rsa); der = pubDer; rsa = NULL; ExpectNotNull(wolfSSL_d2i_RSAPublicKey(&rsa, &der, pubDerSz)); - ExpectIntEQ(wolfSSL_RSA_To_Der(rsa, &outDer, 0, HEAP_HINT), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_RSA_To_Der(rsa, &outDer, 0, HEAP_HINT), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); RSA_free(rsa); #endif #endif @@ -72689,7 +78244,7 @@ static int test_wolfSSL_DH(void) /* Test DH_up_ref() */ dh = wolfSSL_DH_new(); ExpectNotNull(dh); - ExpectIntEQ(wolfSSL_DH_up_ref(NULL), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_DH_up_ref(NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_DH_up_ref(dh), WOLFSSL_SUCCESS); DH_free(dh); /* decrease ref count */ DH_free(dh); /* free WOLFSSL_DH */ @@ -73198,12 +78753,12 @@ static int test_wolfSSL_PEM_write_DHparams(void) ExpectNotNull(fp = XFOPEN("./test-write-dhparams.pem", "wb")); ExpectIntEQ(PEM_write_DHparams(fp, dh), WOLFSSL_SUCCESS); - ExpectIntEQ(PEM_write_DHparams(fp, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(PEM_write_DHparams(fp, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); DH_free(dh); dh = NULL; dh = wolfSSL_DH_new(); - ExpectIntEQ(PEM_write_DHparams(fp, dh), WOLFSSL_FAILURE); + ExpectIntEQ(PEM_write_DHparams(fp, dh), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); if (fp != XBADFILE) { XFCLOSE(fp); fp = XBADFILE; @@ -73874,7 +79429,7 @@ static int test_wolfSSL_EC_POINT(void) ctx), WOLFSSL_SUCCESS); /* check if point X coordinate is zero */ - ExpectIntEQ(BN_is_zero(X), WOLFSSL_FAILURE); + ExpectIntEQ(BN_is_zero(X), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* set the same X and Y points in another object */ ExpectIntEQ(EC_POINT_set_affine_coordinates_GFp(group, set_point, X, Y, @@ -74377,6 +79932,18 @@ static int test_EC_i2d(void) ExpectNull(d2i_ECPrivateKey(©, &tmp, 1)); ExpectNull(d2i_ECPrivateKey(&key, &tmp, 0)); + { + EC_KEY *pubkey = NULL; + BIO* bio = NULL; + + ExpectNotNull(bio = BIO_new(BIO_s_mem())); + ExpectIntGT(BIO_write(bio, buf, len), 0); + ExpectNotNull(d2i_EC_PUBKEY_bio(bio, &pubkey)); + + BIO_free(bio); + EC_KEY_free(pubkey); + } + ExpectIntEQ(i2d_ECPrivateKey(NULL, &p), 0); ExpectIntEQ(i2d_ECPrivateKey(NULL, NULL), 0); @@ -74569,7 +80136,7 @@ static int test_wolfSSL_EC_KEY_dup(void) /* Test EC_KEY_up_ref */ ExpectNotNull(ecKey = wolfSSL_EC_KEY_new()); ExpectIntEQ(wolfSSL_EC_KEY_generate_key(ecKey), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_EC_KEY_up_ref(NULL), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_EC_KEY_up_ref(NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_EC_KEY_up_ref(ecKey), WOLFSSL_SUCCESS); /* reference count doesn't follow duplicate */ ExpectNotNull(dupKey = wolfSSL_EC_KEY_dup(ecKey)); @@ -74721,12 +80288,12 @@ static int test_wolfSSL_EC_KEY_print_fp(void) EC_KEY* key = NULL; /* Bad file pointer. */ - ExpectIntEQ(wolfSSL_EC_KEY_print_fp(NULL, key, 0), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_EC_KEY_print_fp(NULL, key, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* NULL key. */ - ExpectIntEQ(wolfSSL_EC_KEY_print_fp(stderr, NULL, 0), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_EC_KEY_print_fp(stderr, NULL, 0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectNotNull((key = wolfSSL_EC_KEY_new_by_curve_name(NID_secp224r1))); /* Negative indent. */ - ExpectIntEQ(wolfSSL_EC_KEY_print_fp(stderr, key, -1), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_EC_KEY_print_fp(stderr, key, -1), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_EC_KEY_print_fp(stderr, key, 4), WOLFSSL_SUCCESS); ExpectIntEQ(wolfSSL_EC_KEY_generate_key(key), WOLFSSL_SUCCESS); @@ -75253,9 +80820,9 @@ static int test_wolfSSL_CTX_LoadCRL(void) WOLFSSL_CERT_MANAGER* cm = NULL; #define FAIL_T1(x, y, z, p, d) ExpectIntEQ((int) x(y, z, p, d), \ - BAD_FUNC_ARG) + WC_NO_ERR_TRACE(BAD_FUNC_ARG)) #define FAIL_T2(x, y, z, p, d) ExpectIntEQ((int) x(y, z, p, d), \ - NOT_COMPILED_IN) + WC_NO_ERR_TRACE(NOT_COMPILED_IN)) #define SUCC_T(x, y, z, p, d) ExpectIntEQ((int) x(y, z, p, d), \ WOLFSSL_SUCCESS) #ifndef NO_WOLFSSL_CLIENT @@ -75438,11 +81005,11 @@ static int test_wolfSSL_dtls_set_mtu(void) } ExpectNotNull(ssl = wolfSSL_new(ctx)); - ExpectIntEQ(wolfSSL_CTX_dtls_set_mtu(NULL, 1488), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_dtls_set_mtu(NULL, 1488), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_CTX_dtls_set_mtu(ctx, 20000), BAD_FUNC_ARG); - ExpectIntEQ(wolfSSL_dtls_set_mtu(ssl, 20000), WOLFSSL_FAILURE); - ExpectIntEQ(wolfSSL_get_error(ssl, WOLFSSL_FAILURE), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_dtls_set_mtu(NULL, 1488), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_dtls_set_mtu(NULL, 1488), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_CTX_dtls_set_mtu(ctx, 20000), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wolfSSL_dtls_set_mtu(ssl, 20000), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(wolfSSL_get_error(ssl, WC_NO_ERR_TRACE(WOLFSSL_FAILURE)), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_dtls_set_mtu(ctx, 1488), WOLFSSL_SUCCESS); ExpectIntEQ(wolfSSL_dtls_set_mtu(ssl, 1488), WOLFSSL_SUCCESS); @@ -75721,14 +81288,14 @@ static int test_wolfSSL_dtls_fragments(void) /* The socket should be closed by the server resulting in a * socket error, fatal error or reading a close notify alert */ - if (func_cb_client.last_err != SOCKET_ERROR_E && + if (func_cb_client.last_err != WC_NO_ERR_TRACE(SOCKET_ERROR_E) && func_cb_client.last_err != WOLFSSL_ERROR_ZERO_RETURN && - func_cb_client.last_err != FATAL_ERROR) { - ExpectIntEQ(func_cb_client.last_err, SOCKET_ERROR_E); + func_cb_client.last_err != WC_NO_ERR_TRACE(FATAL_ERROR)) { + ExpectIntEQ(func_cb_client.last_err, WC_NO_ERR_TRACE(SOCKET_ERROR_E)); } /* Check the server returned an error indicating the msg buffer * was full */ - ExpectIntEQ(func_cb_server.last_err, DTLS_TOO_MANY_FRAGMENTS_E); + ExpectIntEQ(func_cb_server.last_err, WC_NO_ERR_TRACE(DTLS_TOO_MANY_FRAGMENTS_E)); if (EXPECT_FAIL()) break; @@ -76026,7 +81593,7 @@ static void test_AEAD_limit_client(WOLFSSL* ssl) w64Decrement(&Dtls13GetEpoch(ssl, ssl->dtls13PeerEpoch)->dropCount); /* Connection should fail with a DECRYPT_ERROR */ ret = wolfSSL_read(ssl, msgBuf, sizeof(msgBuf)); - AssertIntEQ(ret, WOLFSSL_FATAL_ERROR); + AssertIntEQ(ret, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); AssertIntEQ(wolfSSL_get_error(ssl, ret), DECRYPT_ERROR); test_AEAD_done = 1; @@ -76332,7 +81899,7 @@ static void test_wolfSSL_dtls_compare_stateless(WOLFSSL* ssl) res = wolfSSL_accept(ssl); err = wolfSSL_get_error(ssl, res); - AssertIntEQ(res, WOLFSSL_FATAL_ERROR); + AssertIntEQ(res, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); AssertIntEQ(err, WOLFSSL_ERROR_WANT_READ); AssertIntEQ(initHash, test_wolfSSL_dtls_stateless_HashWOLFSSL(ssl)); @@ -76814,7 +82381,7 @@ static THREAD_RETURN WOLFSSL_THREAD SSL_read_test_server_thread(void* args) if (ret != WOLFSSL_SUCCESS) { err = wolfSSL_get_error(ssl, 0); } - } while (ret != WOLFSSL_SUCCESS && err == WC_PENDING_E); + } while (ret != WOLFSSL_SUCCESS && err == WC_NO_ERR_TRACE(WC_PENDING_E)); } ExpectIntEQ(ret, WOLFSSL_SUCCESS); @@ -76848,7 +82415,7 @@ static THREAD_RETURN WOLFSSL_THREAD SSL_read_test_server_thread(void* args) /* bidirectional shutdown */ while (EXPECT_SUCCESS()) { ret = wolfSSL_shutdown(ssl); - ExpectIntNE(ret, WOLFSSL_FATAL_ERROR); + ExpectIntNE(ret, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); if (ret == WOLFSSL_SUCCESS) { break; } @@ -76863,7 +82430,7 @@ static THREAD_RETURN WOLFSSL_THREAD SSL_read_test_server_thread(void* args) } /* detect TCP disconnect */ - ExpectIntLE(ret,WOLFSSL_FAILURE); + ExpectIntLE(ret,WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_get_error(ssl, ret), WOLFSSL_ERROR_ZERO_RETURN); ((func_args*)args)->return_code = EXPECT_RESULT(); @@ -76922,7 +82489,7 @@ static THREAD_RETURN WOLFSSL_THREAD SSL_read_test_client_thread(void* args) if (ret != WOLFSSL_SUCCESS) { err = wolfSSL_get_error(ssl, 0); } - } while (ret != WOLFSSL_SUCCESS && err == WC_PENDING_E); + } while (ret != WOLFSSL_SUCCESS && err == WC_NO_ERR_TRACE(WC_PENDING_E)); } ExpectIntGE(wolfSSL_write(ssl, msg, len), 0); @@ -77132,9 +82699,18 @@ static int test_wolfSSL_set_SSL_CTX(void) #ifdef WOLFSSL_SESSION_ID_CTX ExpectIntEQ(XMEMCMP(ssl->sessionCtx, session_id2, 4), 0); #endif +#ifdef WOLFSSL_COPY_CERT + if (ctx2 != NULL && ctx2->certificate != NULL) { + ExpectFalse(ssl->buffers.certificate == ctx2->certificate); + } + if (ctx2 != NULL && ctx2->certChain != NULL) { + ExpectFalse(ssl->buffers.certChain == ctx2->certChain); + } +#else ExpectTrue(ssl->buffers.certificate == ctx2->certificate); ExpectTrue(ssl->buffers.certChain == ctx2->certChain); #endif +#endif #ifdef HAVE_SESSION_TICKET ExpectIntNE((wolfSSL_get_options(ssl) & SSL_OP_NO_TICKET), 0); @@ -77151,8 +82727,17 @@ static int test_wolfSSL_set_SSL_CTX(void) #endif /* MUST change */ #ifdef WOLFSSL_INT_H +#ifdef WOLFSSL_COPY_CERT + if (ctx1 != NULL && ctx1->certificate != NULL) { + ExpectFalse(ssl->buffers.certificate == ctx1->certificate); + } + if (ctx1 != NULL && ctx1->certChain != NULL) { + ExpectFalse(ssl->buffers.certChain == ctx1->certChain); + } +#else ExpectTrue(ssl->buffers.certificate == ctx1->certificate); ExpectTrue(ssl->buffers.certChain == ctx1->certChain); +#endif #ifdef WOLFSSL_SESSION_ID_CTX ExpectIntEQ(XMEMCMP(ssl->sessionCtx, session_id1, 4), 0); #endif @@ -77258,14 +82843,14 @@ static int test_wolfSSL_CTX_set_timeout(void) /* in WOLFSSL_ERROR_CODE_OPENSSL macro guard, * wolfSSL_CTX_set_timeout returns previous timeout value on success. */ - ExpectIntEQ(wolfSSL_CTX_set_timeout(NULL, 0), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_set_timeout(NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* giving 0 as timeout value sets default timeout */ timeout = wolfSSL_CTX_set_timeout(ctx, 0); ExpectIntEQ(wolfSSL_CTX_set_timeout(ctx, 20), timeout); ExpectIntEQ(wolfSSL_CTX_set_timeout(ctx, 30), 20); #else - ExpectIntEQ(wolfSSL_CTX_set_timeout(NULL, 0), BAD_FUNC_ARG); + ExpectIntEQ(wolfSSL_CTX_set_timeout(NULL, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_set_timeout(ctx, 100), 1); ExpectIntEQ(wolfSSL_CTX_set_timeout(ctx, 0), 1); #endif @@ -77312,9 +82897,9 @@ static int test_CONF_CTX_CMDLINE(void) /* cmd invalid command */ ExpectIntEQ(SSL_CONF_cmd(cctx, "foo", "foobar"), -2); ExpectIntEQ(SSL_CONF_cmd(cctx, "foo", NULL), -2); - ExpectIntEQ(SSL_CONF_cmd(cctx, NULL, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(SSL_CONF_cmd(cctx, NULL, "foobar"), WOLFSSL_FAILURE); - ExpectIntEQ(SSL_CONF_cmd(NULL, "-curves", "foobar"), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_CONF_cmd(cctx, NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(SSL_CONF_cmd(cctx, NULL, "foobar"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(SSL_CONF_cmd(NULL, "-curves", "foobar"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* cmd Certificate and Private Key*/ { @@ -77387,9 +82972,9 @@ static int test_CONF_CTX_FILE(void) /* sanity check */ ExpectIntEQ(SSL_CONF_cmd(cctx, "foo", "foobar"), -2); ExpectIntEQ(SSL_CONF_cmd(cctx, "foo", NULL), -2); - ExpectIntEQ(SSL_CONF_cmd(cctx, NULL, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(SSL_CONF_cmd(cctx, NULL, "foobar"), WOLFSSL_FAILURE); - ExpectIntEQ(SSL_CONF_cmd(NULL, "-curves", "foobar"), WOLFSSL_FAILURE); + ExpectIntEQ(SSL_CONF_cmd(cctx, NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(SSL_CONF_cmd(cctx, NULL, "foobar"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(SSL_CONF_cmd(NULL, "-curves", "foobar"), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* cmd Certificate and Private Key*/ { @@ -77658,6 +83243,95 @@ static int test_wolfSSL_set_psk_use_session_callback(void) return EXPECT_RESULT(); } +/* similar to error_test() in wolfcrypt/test/test.c, but adding error codes from + * TLS layer. + */ +static int error_test(void) +{ + EXPECT_DECLS; + const char* errStr; + const char* unknownStr = wc_GetErrorString(0); + +#ifdef NO_ERROR_STRINGS + /* Ensure a valid error code's string matches an invalid code's. + * The string is that error strings are not available. + */ + errStr = wc_GetErrorString(OPEN_RAN_E); + ExpectIntEQ(XSTRCMP(errStr, unknownStr), 0); + if (EXPECT_FAIL()) + return OPEN_RAN_E; +#else + int i; + int j = 0; + /* Values that are not or no longer error codes. */ + static const struct { + int first; + int last; + } missing[] = { +#ifndef OPENSSL_EXTRA + { 0, 0 }, +#endif + +#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) || \ + defined(HAVE_WEBSERVER) || defined(HAVE_MEMCACHED) + { -11, -12 }, + { -15, -17 }, + { -19, -19 }, + { -26, -27 }, + { -30, WC_FIRST_E+1 }, +#else + { -9, WC_FIRST_E+1 }, +#endif + { -124, -124 }, + { -166, -169 }, + { -300, -300 }, + { -334, -336 }, + { -346, -349 }, + { -356, -356 }, + { -358, -358 }, + { -372, -372 }, + { -384, -384 }, + { -466, -499 }, + { WOLFSSL_LAST_E-1, WOLFSSL_LAST_E-1 } + }; + + /* Check that all errors have a string and it's the same through the two + * APIs. Check that the values that are not errors map to the unknown + * string. + */ + for (i = 0; i >= WOLFSSL_LAST_E-1; i--) { + int this_missing = 0; + for (j = 0; j < (int)XELEM_CNT(missing); ++j) { + if ((i <= missing[j].first) && (i >= missing[j].last)) { + this_missing = 1; + break; + } + } + errStr = wolfSSL_ERR_reason_error_string(i); + + if (! this_missing) { + ExpectIntNE(XSTRCMP(errStr, unknownStr), 0); + if (EXPECT_FAIL()) { + return i; + } + ExpectTrue(XSTRLEN(errStr) < WOLFSSL_MAX_ERROR_SZ); + if (EXPECT_FAIL()) { + return i; + } + } + else { + j++; + ExpectIntEQ(XSTRCMP(errStr, unknownStr), 0); + if (EXPECT_FAIL()) { + return i; + } + } + } +#endif + + return 1; +} + static int test_wolfSSL_ERR_strings(void) { EXPECT_DECLS; @@ -77672,19 +83346,19 @@ static int test_wolfSSL_ERR_strings(void) (void)err2; #if defined(OPENSSL_EXTRA) - ExpectNotNull(err = ERR_reason_error_string(UNSUPPORTED_SUITE)); + ExpectNotNull(err = ERR_reason_error_string(WC_NO_ERR_TRACE(UNSUPPORTED_SUITE))); ExpectIntEQ(XSTRNCMP(err, err1, XSTRLEN(err1)), 0); - ExpectNotNull(err = ERR_func_error_string(UNSUPPORTED_SUITE)); + ExpectNotNull(err = ERR_func_error_string(WC_NO_ERR_TRACE(UNSUPPORTED_SUITE))); ExpectIntEQ((*err == '\0'), 1); ExpectNotNull(err = ERR_lib_error_string(PEM_R_PROBLEMS_GETTING_PASSWORD)); ExpectIntEQ(XSTRNCMP(err, err2, XSTRLEN(err2)), 0); #else - ExpectNotNull(err = wolfSSL_ERR_reason_error_string(UNSUPPORTED_SUITE)); + ExpectNotNull(err = wolfSSL_ERR_reason_error_string(WC_NO_ERR_TRACE(UNSUPPORTED_SUITE))); ExpectIntEQ(XSTRNCMP(err, err1, XSTRLEN(err1)), 0); - ExpectNotNull(err = wolfSSL_ERR_func_error_string(UNSUPPORTED_SUITE)); + ExpectNotNull(err = wolfSSL_ERR_func_error_string(WC_NO_ERR_TRACE(UNSUPPORTED_SUITE))); ExpectIntEQ((*err == '\0'), 1); /* The value -MIN_CODE_E+2 is PEM_R_PROBLEMS_GETTING_PASSWORD. */ @@ -77693,6 +83367,8 @@ static int test_wolfSSL_ERR_strings(void) #endif #endif + ExpectIntEQ(error_test(), 1); + return EXPECT_RESULT(); } static int test_wolfSSL_EVP_shake128(void) @@ -77756,13 +83432,13 @@ static int test_wolfSSL_EVP_sm3(void) ExpectTrue(mdCtx != NULL); /* Invalid Parameters */ - ExpectIntEQ(EVP_DigestInit(NULL, md), BAD_FUNC_ARG); + ExpectIntEQ(EVP_DigestInit(NULL, md), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* Valid Parameters */ ExpectIntEQ(EVP_DigestInit(mdCtx, md), WOLFSSL_SUCCESS); - ExpectIntEQ(EVP_DigestUpdate(NULL, NULL, 1), WOLFSSL_FAILURE); - ExpectIntEQ(EVP_DigestUpdate(mdCtx, NULL, 1), WOLFSSL_FAILURE); - ExpectIntEQ(EVP_DigestUpdate(NULL, data, 1), WOLFSSL_FAILURE); + ExpectIntEQ(EVP_DigestUpdate(NULL, NULL, 1), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(EVP_DigestUpdate(mdCtx, NULL, 1), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(EVP_DigestUpdate(NULL, data, 1), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Valid Parameters */ ExpectIntEQ(EVP_DigestUpdate(mdCtx, NULL, 0), WOLFSSL_SUCCESS); @@ -77779,11 +83455,11 @@ static int test_wolfSSL_EVP_sm3(void) WOLFSSL_SUCCESS); /* Invalid Parameters */ - ExpectIntEQ(EVP_DigestFinal(NULL, NULL, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(EVP_DigestFinal(mdCtx, NULL, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(EVP_DigestFinal(NULL, hash, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(EVP_DigestFinal(NULL, hash, NULL), WOLFSSL_FAILURE); - ExpectIntEQ(EVP_DigestFinal(mdCtx, NULL, NULL), WOLFSSL_FAILURE); + ExpectIntEQ(EVP_DigestFinal(NULL, NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(EVP_DigestFinal(mdCtx, NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(EVP_DigestFinal(NULL, hash, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(EVP_DigestFinal(NULL, hash, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); + ExpectIntEQ(EVP_DigestFinal(mdCtx, NULL, NULL), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Valid Parameters */ ExpectIntEQ(EVP_DigestFinal(mdCtx, hash, NULL), WOLFSSL_SUCCESS); @@ -78100,7 +83776,7 @@ static int load_pem_key_file_as_der(const char* privKeyFile, DerBuffer** pDer, } static int test_CryptoCb_Func(int thisDevId, wc_CryptoInfo* info, void* ctx) { - int ret = CRYPTOCB_UNAVAILABLE; + int ret = WC_NO_ERR_TRACE(CRYPTOCB_UNAVAILABLE); const char* privKeyFile = (const char*)ctx; DerBuffer* pDer = NULL; int keyFormat = 0; @@ -78116,7 +83792,7 @@ static int test_CryptoCb_Func(int thisDevId, wc_CryptoInfo* info, void* ctx) case RSA_PUBLIC_ENCRYPT: case RSA_PUBLIC_DECRYPT: /* perform software based RSA public op */ - ret = CRYPTOCB_UNAVAILABLE; /* fallback to software */ + ret = WC_NO_ERR_TRACE(CRYPTOCB_UNAVAILABLE); /* fallback to software */ break; case RSA_PRIVATE_ENCRYPT: case RSA_PRIVATE_DECRYPT: @@ -78703,12 +84379,12 @@ static int test_wolfSSL_FIPS_mode(void) #if defined(OPENSSL_ALL) #ifdef HAVE_FIPS ExpectIntEQ(wolfSSL_FIPS_mode(), 1); - ExpectIntEQ(wolfSSL_FIPS_mode_set(0), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_FIPS_mode_set(0), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); ExpectIntEQ(wolfSSL_FIPS_mode_set(1), WOLFSSL_SUCCESS); #else ExpectIntEQ(wolfSSL_FIPS_mode(), 0); ExpectIntEQ(wolfSSL_FIPS_mode_set(0), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_FIPS_mode_set(1), WOLFSSL_FAILURE); + ExpectIntEQ(wolfSSL_FIPS_mode_set(1), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); #endif #endif return EXPECT_RESULT(); @@ -78956,10 +84632,10 @@ static int test_wolfSSL_dtls_stateless2(void) wolfSSL_SetIOWriteCtx(ssl_c2, &test_ctx); wolfSSL_SetIOReadCtx(ssl_c2, &test_ctx); /* send CH */ - ExpectTrue((wolfSSL_connect(ssl_c2) == WOLFSSL_FATAL_ERROR) && - (ssl_c2->error == WANT_READ)); - ExpectTrue((wolfSSL_accept(ssl_s) == WOLFSSL_FATAL_ERROR) && - (ssl_s->error == WANT_READ)); + ExpectTrue((wolfSSL_connect(ssl_c2) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_c2->error == WC_NO_ERR_TRACE(WANT_READ))); + ExpectTrue((wolfSSL_accept(ssl_s) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_s->error == WC_NO_ERR_TRACE(WANT_READ))); ExpectIntNE(test_ctx.c_len, 0); /* consume HRR */ test_ctx.c_len = 0; @@ -78997,10 +84673,10 @@ static int test_wolfSSL_dtls_stateless_maxfrag(void) max_fragment = ssl_s->max_fragment; } /* send CH */ - ExpectTrue((wolfSSL_connect(ssl_c2) == WOLFSSL_FATAL_ERROR) && - (ssl_c2->error == WANT_READ)); - ExpectTrue((wolfSSL_accept(ssl_s) == WOLFSSL_FATAL_ERROR) && - (ssl_s->error == WANT_READ)); + ExpectTrue((wolfSSL_connect(ssl_c2) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_c2->error == WC_NO_ERR_TRACE(WANT_READ))); + ExpectTrue((wolfSSL_accept(ssl_s) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_s->error == WC_NO_ERR_TRACE(WANT_READ))); /* CH without cookie shouldn't change state */ ExpectIntEQ(ssl_s->max_fragment, max_fragment); ExpectIntNE(test_ctx.c_len, 0); @@ -79082,10 +84758,10 @@ static int _test_wolfSSL_dtls_stateless_resume(byte useticket, byte bad) wolfSSL_SetIOWriteCtx(ssl_s, &test_ctx); wolfSSL_SetIOReadCtx(ssl_s, &test_ctx); ExpectIntEQ(wolfSSL_set_session(ssl_c, sess), WOLFSSL_SUCCESS); - ExpectTrue((wolfSSL_connect(ssl_c) == WOLFSSL_FATAL_ERROR) && - (ssl_c->error == WANT_READ)); - ExpectTrue((wolfSSL_accept(ssl_s) == WOLFSSL_FATAL_ERROR) && - (ssl_s->error == WANT_READ)); + ExpectTrue((wolfSSL_connect(ssl_c) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_c->error == WC_NO_ERR_TRACE(WANT_READ))); + ExpectTrue((wolfSSL_accept(ssl_s) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_s->error == WC_NO_ERR_TRACE(WANT_READ))); ExpectFalse(bad && !buf_is_hvr(test_ctx.c_buff, test_ctx.c_len)); ExpectFalse(!bad && buf_is_hvr(test_ctx.c_buff, test_ctx.c_len)); if (!useticket) { @@ -79138,10 +84814,10 @@ static int test_wolfSSL_dtls_stateless_downgrade(void) wolfSSL_SetIOWriteCtx(ssl_c2, &test_ctx); wolfSSL_SetIOReadCtx(ssl_c2, &test_ctx); /* send CH */ - ExpectTrue((wolfSSL_connect(ssl_c2) == WOLFSSL_FATAL_ERROR) && - (ssl_c2->error == WANT_READ)); - ExpectTrue((wolfSSL_accept(ssl_s) == WOLFSSL_FATAL_ERROR) && - (ssl_s->error == WANT_READ)); + ExpectTrue((wolfSSL_connect(ssl_c2) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_c2->error == WC_NO_ERR_TRACE(WANT_READ))); + ExpectTrue((wolfSSL_accept(ssl_s) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_s->error == WC_NO_ERR_TRACE(WANT_READ))); ExpectIntNE(test_ctx.c_len, 0); /* consume HRR */ test_ctx.c_len = 0; @@ -79178,23 +84854,23 @@ static int test_WOLFSSL_dtls_version_alert(void) wolfDTLSv1_2_client_method, wolfDTLSv1_server_method), 0); /* client hello */ - ExpectTrue((wolfSSL_connect(ssl_c) == WOLFSSL_FATAL_ERROR) && - (ssl_c->error == WANT_READ)); + ExpectTrue((wolfSSL_connect(ssl_c) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_c->error == WC_NO_ERR_TRACE(WANT_READ))); /* hrr */ - ExpectTrue((wolfSSL_accept(ssl_s) == WOLFSSL_FATAL_ERROR) && - (ssl_s->error == WANT_READ)); + ExpectTrue((wolfSSL_accept(ssl_s) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_s->error == WC_NO_ERR_TRACE(WANT_READ))); /* client hello 1 */ - ExpectTrue((wolfSSL_connect(ssl_c) == WOLFSSL_FATAL_ERROR) && - (ssl_c->error == WANT_READ)); + ExpectTrue((wolfSSL_connect(ssl_c) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_c->error == WC_NO_ERR_TRACE(WANT_READ))); /* server hello */ - ExpectTrue((wolfSSL_accept(ssl_s) == WOLFSSL_FATAL_ERROR) && - (ssl_s->error == WANT_READ)); + ExpectTrue((wolfSSL_accept(ssl_s) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_s->error == WC_NO_ERR_TRACE(WANT_READ))); /* should fail */ - ExpectTrue((wolfSSL_connect(ssl_c) == WOLFSSL_FATAL_ERROR) && - (ssl_c->error == VERSION_ERROR)); + ExpectTrue((wolfSSL_connect(ssl_c) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_c->error == WC_NO_ERR_TRACE(VERSION_ERROR))); /* shuould fail */ - ExpectTrue((wolfSSL_accept(ssl_s) == WOLFSSL_FATAL_ERROR) && - (ssl_s->error == VERSION_ERROR || ssl_s->error == FATAL_ERROR)); + ExpectTrue((wolfSSL_accept(ssl_s) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_s->error == WC_NO_ERR_TRACE(VERSION_ERROR) || ssl_s->error == WC_NO_ERR_TRACE(FATAL_ERROR))); wolfSSL_free(ssl_c); wolfSSL_free(ssl_s); @@ -79290,8 +84966,8 @@ static int test_ticket_nonce_malloc_do(WOLFSSL *ssl_s, WOLFSSL *ssl_c, byte len) char *buf[1024]; ExpectIntEQ(send_new_session_ticket(ssl_s, len, len), 0); - ExpectTrue((wolfSSL_recv(ssl_c, buf, 1024, 0) == WOLFSSL_FATAL_ERROR) && - (ssl_c->error == WANT_READ)); + ExpectTrue((wolfSSL_recv(ssl_c, buf, 1024, 0) == WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)) && + (ssl_c->error == WC_NO_ERR_TRACE(WANT_READ))); ExpectIntEQ(test_ticket_nonce_check(ssl_c->session, len), 0); @@ -79349,10 +85025,10 @@ static int test_ticket_nonce_malloc(void) while (EXPECT_SUCCESS() && (ssl_c->options.handShakeDone == 0) && (ssl_s->options.handShakeDone == 0)) { ExpectTrue((wolfSSL_connect(ssl_c) == WOLFSSL_SUCCESS) || - (ssl_c->error == WANT_READ)); + (ssl_c->error == WC_NO_ERR_TRACE(WANT_READ))); ExpectTrue((wolfSSL_accept(ssl_s) == WOLFSSL_SUCCESS) || - (ssl_s->error == WANT_READ)); + (ssl_s->error == WC_NO_ERR_TRACE(WANT_READ))); } small = TLS13_TICKET_NONCE_STATIC_SZ; @@ -79890,7 +85566,7 @@ static int test_extra_alerts_wrong_cs(void) /* CH */ ExpectIntNE(wolfSSL_connect(ssl_c), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); /* consume CH */ @@ -79901,7 +85577,7 @@ static int test_extra_alerts_wrong_cs(void) test_ctx.c_len = sizeof(test_extra_alerts_wrong_cs_sh); ExpectIntNE(wolfSSL_connect(ssl_c), WOLFSSL_SUCCESS); - ExpectIntNE(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), + ExpectIntNE(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); ExpectIntEQ(wolfSSL_get_alert_history(ssl_c, &h), WOLFSSL_SUCCESS); ExpectIntEQ(h.last_tx.code, handshake_failure); @@ -79954,7 +85630,7 @@ static int test_wrong_cs_downgrade(void) /* CH */ ExpectIntNE(wolfSSL_connect(ssl_c), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); /* consume CH */ @@ -79965,8 +85641,8 @@ static int test_wrong_cs_downgrade(void) test_ctx.c_len = sizeof(test_wrong_cs_downgrade_sh); ExpectIntNE(wolfSSL_connect(ssl_c), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), - MATCH_SUITE_ERROR); + ExpectIntEQ(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), + WC_NO_ERR_TRACE(MATCH_SUITE_ERROR)); wolfSSL_free(ssl_c); wolfSSL_CTX_free(ctx_c); @@ -80074,16 +85750,16 @@ static int test_remove_hs_message(byte hs_message_type, wolfTLSv1_2_client_method, wolfTLSv1_2_server_method), 0); ExpectIntNE(wolfSSL_connect(ssl_c), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); ExpectIntNE(wolfSSL_accept(ssl_s), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); if (extra_round) { ExpectIntNE(wolfSSL_connect(ssl_c), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); /* this will complete handshake from server side */ @@ -80102,7 +85778,7 @@ static int test_remove_hs_message(byte hs_message_type, } ExpectIntNE(wolfSSL_connect(ssl_c), WOLFSSL_SUCCESS); - ExpectIntNE(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), + ExpectIntNE(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); ExpectIntEQ(wolfSSL_get_alert_history(ssl_c, &h), WOLFSSL_SUCCESS); ExpectTrue(alert_type == 0xff || h.last_tx.code == alert_type); @@ -80177,15 +85853,15 @@ static int test_extra_alerts_bad_psk(void) wolfSSL_set_psk_server_callback(ssl_s, test_server_psk_cb); ExpectIntNE(wolfSSL_connect(ssl_c), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); ExpectIntNE(wolfSSL_accept(ssl_s), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_get_error(ssl_s, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_get_error(ssl_s, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); ExpectIntNE(wolfSSL_connect(ssl_c), WOLFSSL_SUCCESS); - ExpectIntNE(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), + ExpectIntNE(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); ExpectIntEQ(wolfSSL_get_alert_history(ssl_c, &h), WOLFSSL_SUCCESS); ExpectIntEQ(h.last_tx.code, handshake_failure); @@ -80205,6 +85881,90 @@ static int test_extra_alerts_bad_psk(void) } #endif +#if defined(OPENSSL_EXTRA) && defined(HAVE_MANUAL_MEMIO_TESTS_DEPENDENCIES) && !defined(WOLFSSL_NO_TLS12) +/* + * Emulates wolfSSL_shutdown that goes on EAGAIN, + * by returning on output WOLFSSL_ERROR_WANT_WRITE.*/ +static int custom_wolfSSL_shutdown(WOLFSSL *ssl, char *buf, + int sz, void *ctx) +{ + (void)ssl; + (void)buf; + (void)ctx; + (void)sz; + + return WOLFSSL_CBIO_ERR_WANT_WRITE; +} + +static int test_multiple_alerts_EAGAIN(void) +{ + EXPECT_DECLS; + size_t size_of_last_packet = 0; + + /* declare wolfSSL objects */ + struct test_memio_ctx test_ctx; + WOLFSSL_CTX *ctx_c = NULL, *ctx_s = NULL; + WOLFSSL *ssl_c = NULL, *ssl_s = NULL; + + XMEMSET(&test_ctx, 0, sizeof(test_ctx)); + + /* Create and initialize WOLFSSL_CTX and WOLFSSL objects */ +#ifdef USE_TLSV13 + ExpectIntEQ(test_memio_setup(&test_ctx, &ctx_c, &ctx_s, &ssl_c, &ssl_s, + wolfTLSv1_3_client_method, wolfTLSv1_3_server_method), 0); +#else + ExpectIntEQ(test_memio_setup(&test_ctx, &ctx_c, &ctx_s, &ssl_c, &ssl_s, + wolfTLSv1_2_client_method, wolfTLSv1_2_server_method), 0); +#endif + ExpectNotNull(ctx_c); + ExpectNotNull(ssl_c); + ExpectNotNull(ctx_s); + ExpectNotNull(ssl_s); + + /* Load client certificates into WOLFSSL_CTX */ + ExpectIntEQ(wolfSSL_CTX_load_verify_locations(ctx_c, "./certs/ca-cert.pem", NULL), WOLFSSL_SUCCESS); + + ExpectIntEQ(test_memio_do_handshake(ssl_c, ssl_s, 10, NULL), 0); + + /* + * We set the custom callback for the IO to emulate multiple EAGAINs + * on shutdown, so we can check that we don't send multiple packets. + * */ + wolfSSL_SSLSetIOSend(ssl_c, custom_wolfSSL_shutdown); + + /* + * We call wolfSSL_shutdown multiple times to reproduce the behaviour, + * to check that it doesn't add the CLOSE_NOTIFY packet multiple times + * on the output buffer. + * */ + wolfSSL_shutdown(ssl_c); + wolfSSL_shutdown(ssl_c); + + if (ssl_c != NULL) { + size_of_last_packet = ssl_c->buffers.outputBuffer.length; + } + wolfSSL_shutdown(ssl_c); + + /* + * Finally we check the length of the output buffer. + * */ + ExpectIntEQ((ssl_c->buffers.outputBuffer.length - size_of_last_packet), 0); + + /* Cleanup and return */ + wolfSSL_CTX_free(ctx_c); + wolfSSL_free(ssl_c); + wolfSSL_CTX_free(ctx_s); + wolfSSL_free(ssl_s); + + return EXPECT_RESULT(); +} +#else +static int test_multiple_alerts_EAGAIN(void) +{ + return TEST_SKIPPED; +} +#endif + #if defined(WOLFSSL_TLS13) && defined(HAVE_MANUAL_MEMIO_TESTS_DEPENDENCIES)\ && !defined(NO_PSK) static unsigned int test_tls13_bad_psk_binder_client_cb(WOLFSSL* ssl, @@ -80254,16 +86014,16 @@ static int test_tls13_bad_psk_binder(void) wolfSSL_set_psk_server_callback(ssl_s, test_tls13_bad_psk_binder_server_cb); ExpectIntNE(wolfSSL_connect(ssl_c), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); ExpectIntNE(wolfSSL_accept(ssl_s), WOLFSSL_SUCCESS); - ExpectIntEQ( wolfSSL_get_error(ssl_s, WOLFSSL_FATAL_ERROR), - BAD_BINDER); + ExpectIntEQ( wolfSSL_get_error(ssl_s, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), + WC_NO_ERR_TRACE(BAD_BINDER)); ExpectIntNE(wolfSSL_connect(ssl_c), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), - FATAL_ERROR); + ExpectIntEQ(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), + WC_NO_ERR_TRACE(FATAL_ERROR)); ExpectIntEQ(wolfSSL_get_alert_history(ssl_c, &h), WOLFSSL_SUCCESS); ExpectIntEQ(h.last_rx.code, illegal_parameter); ExpectIntEQ(h.last_rx.level, alert_fatal); @@ -80335,8 +86095,8 @@ static int test_harden_no_secure_renegotiation(void) ExpectIntEQ(client_cbs.return_code, TEST_FAIL); ExpectIntEQ(client_cbs.last_err, SECURE_RENEGOTIATION_E); ExpectIntEQ(server_cbs.return_code, TEST_FAIL); - ExpectTrue(server_cbs.last_err == SOCKET_ERROR_E || - server_cbs.last_err == FATAL_ERROR); + ExpectTrue(server_cbs.last_err == WC_NO_ERR_TRACE(SOCKET_ERROR_E) || + server_cbs.last_err == WC_NO_ERR_TRACE(FATAL_ERROR)); return EXPECT_RESULT(); } @@ -80354,13 +86114,13 @@ static int test_override_alt_cert_chain_cert_cb(int preverify, fprintf(stderr, "preverify: %d\n", preverify); fprintf(stderr, "store->error: %d\n", store->error); fprintf(stderr, "error reason: %s\n", wolfSSL_ERR_reason_error_string(store->error)); - if (store->error == OCSP_INVALID_STATUS) { + if (store->error == WC_NO_ERR_TRACE(OCSP_INVALID_STATUS)) { fprintf(stderr, "Overriding OCSP error\n"); return 1; } #ifndef WOLFSSL_ALT_CERT_CHAINS - else if ((store->error == ASN_NO_SIGNER_E || - store->error == ASN_SELF_SIGNED_E + else if ((store->error == WC_NO_ERR_TRACE(ASN_NO_SIGNER_E) || + store->error == WC_NO_ERR_TRACE(ASN_SELF_SIGNED_E) #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) || \ defined(HAVE_WEBSERVER) || store->error == WOLFSSL_X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY @@ -80595,25 +86355,25 @@ static int test_rpk_set_xxx_cert_type(void) /* illegal parameter test caces */ ExpectIntEQ(wolfSSL_CTX_set_client_cert_type(NULL, ctype, MAX_CLIENT_CERT_TYPE_CNT), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_set_client_cert_type(ctx, ctype, sizeof(ctype)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ctype[0] = WOLFSSL_CERT_TYPE_RPK; /* set an identical cert type */ ctype[1] = WOLFSSL_CERT_TYPE_RPK; ExpectIntEQ(wolfSSL_CTX_set_client_cert_type(ctx, ctype, MAX_CLIENT_CERT_TYPE_CNT), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ctype[0] = WOLFSSL_CERT_TYPE_X509; ctype[1] = 10; /* set unknown cert type */ ExpectIntEQ(wolfSSL_CTX_set_client_cert_type(ctx, ctype, MAX_CLIENT_CERT_TYPE_CNT), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* pass larger type count */ ctype[0] = WOLFSSL_CERT_TYPE_RPK; ctype[1] = WOLFSSL_CERT_TYPE_X509; @@ -80621,7 +86381,7 @@ static int test_rpk_set_xxx_cert_type(void) ExpectIntEQ(wolfSSL_CTX_set_client_cert_type(ctx, ctype, MAX_CLIENT_CERT_TYPE_CNT + 1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* should accept NULL for type buffer */ ExpectIntEQ(wolfSSL_CTX_set_client_cert_type(ctx, NULL, @@ -80643,25 +86403,25 @@ static int test_rpk_set_xxx_cert_type(void) ExpectIntEQ(wolfSSL_CTX_set_server_cert_type(NULL, ctype, MAX_SERVER_CERT_TYPE_CNT), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_CTX_set_server_cert_type(ctx, ctype, sizeof(ctype)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ctype[0] = WOLFSSL_CERT_TYPE_RPK; /* set an identical cert type */ ctype[1] = WOLFSSL_CERT_TYPE_RPK; ExpectIntEQ(wolfSSL_CTX_set_server_cert_type(ctx, ctype, MAX_SERVER_CERT_TYPE_CNT), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ctype[0] = WOLFSSL_CERT_TYPE_X509; ctype[1] = 10; /* set unknown cert type */ ExpectIntEQ(wolfSSL_CTX_set_server_cert_type(ctx, ctype, MAX_SERVER_CERT_TYPE_CNT), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* pass larger type count */ ctype[0] = WOLFSSL_CERT_TYPE_RPK; ctype[1] = WOLFSSL_CERT_TYPE_X509; @@ -80669,7 +86429,7 @@ static int test_rpk_set_xxx_cert_type(void) ExpectIntEQ(wolfSSL_CTX_set_server_cert_type(ctx, ctype, MAX_SERVER_CERT_TYPE_CNT + 1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* should accept NULL for type buffer */ ExpectIntEQ(wolfSSL_CTX_set_server_cert_type(ctx, NULL, @@ -80691,25 +86451,25 @@ static int test_rpk_set_xxx_cert_type(void) ExpectIntEQ(wolfSSL_set_client_cert_type(NULL, ctype, MAX_CLIENT_CERT_TYPE_CNT), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_set_client_cert_type(ssl, ctype, sizeof(ctype)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ctype[0] = WOLFSSL_CERT_TYPE_RPK; /* set an identical cert type */ ctype[1] = WOLFSSL_CERT_TYPE_RPK; ExpectIntEQ(wolfSSL_set_client_cert_type(ssl, ctype, MAX_CLIENT_CERT_TYPE_CNT), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ctype[0] = WOLFSSL_CERT_TYPE_X509; ctype[1] = 10; /* set unknown cert type */ ExpectIntEQ(wolfSSL_set_client_cert_type(ssl, ctype, MAX_CLIENT_CERT_TYPE_CNT), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* pass larger type count */ ctype[0] = WOLFSSL_CERT_TYPE_RPK; ctype[1] = WOLFSSL_CERT_TYPE_X509; @@ -80717,7 +86477,7 @@ static int test_rpk_set_xxx_cert_type(void) ExpectIntEQ(wolfSSL_set_client_cert_type(ssl, ctype, MAX_CLIENT_CERT_TYPE_CNT + 1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* should accept NULL for type buffer */ ExpectIntEQ(wolfSSL_set_client_cert_type(ssl, NULL, @@ -80739,25 +86499,25 @@ static int test_rpk_set_xxx_cert_type(void) ExpectIntEQ(wolfSSL_set_server_cert_type(NULL, ctype, MAX_SERVER_CERT_TYPE_CNT), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_set_server_cert_type(ssl, ctype, sizeof(ctype)), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ctype[0] = WOLFSSL_CERT_TYPE_RPK; /* set an identical cert type */ ctype[1] = WOLFSSL_CERT_TYPE_RPK; ExpectIntEQ(wolfSSL_set_server_cert_type(ssl, ctype, MAX_SERVER_CERT_TYPE_CNT), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ctype[0] = WOLFSSL_CERT_TYPE_X509; ctype[1] = 10; /* set unknown cert type */ ExpectIntEQ(wolfSSL_set_server_cert_type(ssl, ctype, MAX_SERVER_CERT_TYPE_CNT), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* pass larger type count */ ctype[0] = WOLFSSL_CERT_TYPE_RPK; ctype[1] = WOLFSSL_CERT_TYPE_X509; @@ -80765,7 +86525,7 @@ static int test_rpk_set_xxx_cert_type(void) ExpectIntEQ(wolfSSL_set_server_cert_type(ssl, ctype, MAX_SERVER_CERT_TYPE_CNT + 1), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* should accept NULL for type buffer */ ExpectIntEQ(wolfSSL_set_server_cert_type(ssl, NULL, @@ -80786,16 +86546,16 @@ static int test_rpk_set_xxx_cert_type(void) /*------------------------------------------------*/ ExpectIntEQ(wolfSSL_get_negotiated_client_cert_type(NULL, &tp), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_get_negotiated_client_cert_type(ssl, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_get_negotiated_server_cert_type(NULL, &tp), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wolfSSL_get_negotiated_server_cert_type(ssl, NULL), - BAD_FUNC_ARG); + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* clean up */ @@ -81299,7 +87059,7 @@ static int test_tls13_rpk_handshake(void) if (ret != -1) return TEST_FAIL; - ExpectIntEQ(wolfSSL_get_error(ssl_c, ret), UNSUPPORTED_CERTIFICATE); + ExpectIntEQ(wolfSSL_get_error(ssl_c, ret), WC_NO_ERR_TRACE(UNSUPPORTED_CERTIFICATE)); ExpectIntEQ(wolfSSL_get_negotiated_client_cert_type(ssl_c, &tp), WOLFSSL_SUCCESS); @@ -81381,7 +87141,7 @@ static int test_tls13_rpk_handshake(void) /* expect server detect cert type mismatch then send Alert */ ExpectIntNE(ret, 0); err = wolfSSL_get_error(ssl_c, ret); - ExpectIntEQ(err, UNSUPPORTED_CERTIFICATE); + ExpectIntEQ(err, WC_NO_ERR_TRACE(UNSUPPORTED_CERTIFICATE)); /* client did not load RPK cert actually, so negotiation did not happen */ ExpectIntEQ(wolfSSL_get_negotiated_client_cert_type(ssl_c, &tp), @@ -81514,7 +87274,7 @@ static int test_dtls13_bad_epoch_ch(void) ExpectIntEQ(wolfSSL_disable_hrr_cookie(ssl_s), WOLFSSL_SUCCESS); ExpectIntNE(wolfSSL_connect(ssl_c), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); ExpectIntGE(test_ctx.s_len, EPOCH_OFF + 2); @@ -81527,7 +87287,7 @@ static int test_dtls13_bad_epoch_ch(void) test_ctx.s_buff[EPOCH_OFF + 1] = 0x2; ExpectIntNE(wolfSSL_accept(ssl_s), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_get_error(ssl_s, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_get_error(ssl_s, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); ExpectIntNE(ssl_s->msgsReceived.got_client_hello, 1); @@ -81551,7 +87311,13 @@ static int test_dtls13_bad_epoch_ch(void) } #endif -#if defined(HAVE_SSL_MEMIO_TESTS_DEPENDENCIES) && !defined(NO_SESSION_CACHE) +#if ((defined(WOLFSSL_TLS13) && !defined(WOLFSSL_NO_DEF_TICKET_ENC_CB) && \ + defined(HAVE_SESSION_TICKET) && defined(WOLFSSL_TICKET_HAVE_ID) && \ + !defined(WOLFSSL_TLS13_MIDDLEBOX_COMPAT)) || \ + (!defined(NO_OLD_TLS) && ((!defined(NO_AES) && !defined(NO_AES_CBC)) || \ + !defined(NO_DES3))) || !defined(WOLFSSL_NO_TLS12)) && \ + !defined(NO_WOLFSSL_CLIENT) && !defined(NO_WOLFSSL_SERVER) && \ + defined(HAVE_SSL_MEMIO_TESTS_DEPENDENCIES) && !defined(NO_SESSION_CACHE) static int test_short_session_id_ssl_ready(WOLFSSL* ssl) { EXPECT_DECLS; @@ -81625,7 +87391,6 @@ static int test_short_session_id(void) ExpectIntEQ(test_wolfSSL_client_server_nofail_memio(&client_cbf, &server_cbf, NULL), TEST_SUCCESS); } - return EXPECT_RESULT(); } #else @@ -81831,7 +87596,7 @@ static int test_dtls_ipv6_check(void) ExpectIntNE(fcntl(sockfd, F_SETFL, O_NONBLOCK), -1); wolfSSL_dtls_set_using_nonblock(ssl_c, 1); ExpectIntNE(wolfSSL_connect(ssl_c), WOLFSSL_SUCCESS); - ExpectIntEQ(ssl_c->error, SOCKET_ERROR_E); + ExpectIntEQ(ssl_c->error, WC_NO_ERR_TRACE(SOCKET_ERROR_E)); ExpectIntEQ(wolfSSL_dtls_set_peer(ssl_s, &fake_addr6, sizeof(fake_addr6)), WOLFSSL_SUCCESS); @@ -81839,7 +87604,7 @@ static int test_dtls_ipv6_check(void) ExpectIntEQ(wolfSSL_set_fd(ssl_c, sockfd), WOLFSSL_SUCCESS); wolfSSL_dtls_set_using_nonblock(ssl_s, 1); ExpectIntNE(wolfSSL_accept(ssl_s), WOLFSSL_SUCCESS); - ExpectIntEQ(ssl_s->error, SOCKET_ERROR_E); + ExpectIntEQ(ssl_s->error, WC_NO_ERR_TRACE(SOCKET_ERROR_E)); if (sockfd != -1) close(sockfd); @@ -82054,7 +87819,7 @@ static int test_tls_alert_no_server_hello(void) test_ctx.c_len = sizeof(alert_msg); ExpectIntEQ(wolfSSL_connect(ssl_c), -1); - ExpectIntEQ(wolfSSL_get_error(ssl_c, -1), FATAL_ERROR); + ExpectIntEQ(wolfSSL_get_error(ssl_c, -1), WC_NO_ERR_TRACE(FATAL_ERROR)); wolfSSL_free(ssl_c); wolfSSL_CTX_free(ctx_c); @@ -82132,9 +87897,9 @@ static int test_TLSX_CA_NAMES_bad_extension(void) ExpectIntEQ(wolfSSL_connect(ssl_c), -1); #ifndef WOLFSSL_DISABLE_EARLY_SANITY_CHECKS - ExpectIntEQ(wolfSSL_get_error(ssl_c, -1), OUT_OF_ORDER_E); + ExpectIntEQ(wolfSSL_get_error(ssl_c, -1), WC_NO_ERR_TRACE(OUT_OF_ORDER_E)); #else - ExpectIntEQ(wolfSSL_get_error(ssl_c, -1), BUFFER_ERROR); + ExpectIntEQ(wolfSSL_get_error(ssl_c, -1), WC_NO_ERR_TRACE(BUFFER_ERROR)); #endif wolfSSL_free(ssl_c); @@ -82284,8 +88049,8 @@ static int test_session_ticket_hs_update(void) wolfSSL_SetLoggingPrefix("client"); /* Read the ticket msg */ ExpectIntEQ(wolfSSL_read(ssl_c, read_data, sizeof(read_data)), - WOLFSSL_FATAL_ERROR); - ExpectIntEQ(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), + WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); + ExpectIntEQ(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); wolfSSL_SetLoggingPrefix(NULL); @@ -82300,13 +88065,13 @@ static int test_session_ticket_hs_update(void) wolfSSL_SetLoggingPrefix("client"); /* Exchange initial flights for the second connection */ - ExpectIntEQ(wolfSSL_connect(ssl_c2), WOLFSSL_FATAL_ERROR); - ExpectIntEQ(wolfSSL_get_error(ssl_c2, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_connect(ssl_c2), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); + ExpectIntEQ(wolfSSL_get_error(ssl_c2, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); wolfSSL_SetLoggingPrefix(NULL); wolfSSL_SetLoggingPrefix("server"); - ExpectIntEQ(wolfSSL_accept(ssl_s2), WOLFSSL_FATAL_ERROR); - ExpectIntEQ(wolfSSL_get_error(ssl_s2, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_accept(ssl_s2), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); + ExpectIntEQ(wolfSSL_get_error(ssl_s2, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); wolfSSL_SetLoggingPrefix(NULL); @@ -82315,8 +88080,8 @@ static int test_session_ticket_hs_update(void) /* Read the ticket msg */ wolfSSL_SetLoggingPrefix("client"); ExpectIntEQ(wolfSSL_read(ssl_c3, read_data, sizeof(read_data)), - WOLFSSL_FATAL_ERROR); - ExpectIntEQ(wolfSSL_get_error(ssl_c3, WOLFSSL_FATAL_ERROR), + WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); + ExpectIntEQ(wolfSSL_get_error(ssl_c3, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); wolfSSL_SetLoggingPrefix(NULL); @@ -82358,7 +88123,7 @@ static void test_dtls_downgrade_scr_server_on_result(WOLFSSL* ssl) char testMsg[] = "Message after SCR"; char msgBuf[sizeof(testMsg)]; if (wolfSSL_is_server(ssl)) { - AssertIntEQ(wolfSSL_Rehandshake(ssl), WOLFSSL_FATAL_ERROR); + AssertIntEQ(wolfSSL_Rehandshake(ssl), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); AssertIntEQ(wolfSSL_get_error(ssl, -1), APP_DATA_READY); AssertIntEQ(wolfSSL_read(ssl, msgBuf, sizeof(msgBuf)), sizeof(msgBuf)); AssertIntEQ(wolfSSL_Rehandshake(ssl), WOLFSSL_SUCCESS); @@ -82418,7 +88183,7 @@ static void test_dtls_downgrade_scr_on_result(WOLFSSL* ssl) char testMsg[] = "Message after SCR"; char msgBuf[sizeof(testMsg)]; if (wolfSSL_is_server(ssl)) { - AssertIntEQ(wolfSSL_Rehandshake(ssl), WOLFSSL_FATAL_ERROR); + AssertIntEQ(wolfSSL_Rehandshake(ssl), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); AssertIntEQ(wolfSSL_get_error(ssl, -1), APP_DATA_READY); AssertIntEQ(wolfSSL_read(ssl, msgBuf, sizeof(msgBuf)), sizeof(msgBuf)); AssertIntEQ(wolfSSL_Rehandshake(ssl), WOLFSSL_SUCCESS); @@ -82877,12 +88642,12 @@ static int test_certreq_sighash_algos(void) ExpectIntEQ(wolfSSL_use_certificate_file(ssl_s, "./certs/server-ecc.pem", WOLFSSL_FILETYPE_PEM), WOLFSSL_SUCCESS); - ExpectIntEQ(wolfSSL_connect(ssl_c), WOLFSSL_FATAL_ERROR); - ExpectIntEQ(wolfSSL_get_error(ssl_c, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_connect(ssl_c), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); + ExpectIntEQ(wolfSSL_get_error(ssl_c, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); - ExpectIntEQ(wolfSSL_accept(ssl_s), WOLFSSL_FATAL_ERROR); - ExpectIntEQ(wolfSSL_get_error(ssl_s, WOLFSSL_FATAL_ERROR), + ExpectIntEQ(wolfSSL_accept(ssl_s), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); + ExpectIntEQ(wolfSSL_get_error(ssl_s, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)), WOLFSSL_ERROR_WANT_READ); /* Find the CertificateRequest message */ @@ -83014,8 +88779,8 @@ static int test_revoked_loaded_int_cert(void) ExpectIntEQ(test_wolfSSL_client_server_nofail_memio(&client_cbf, &server_cbf, NULL), TEST_FAIL); - ExpectIntEQ(client_cbf.last_err, CRL_CERT_REVOKED); - ExpectIntEQ(server_cbf.last_err, FATAL_ERROR); + ExpectIntEQ(client_cbf.last_err, WC_NO_ERR_TRACE(CRL_CERT_REVOKED)); + ExpectIntEQ(server_cbf.last_err, WC_NO_ERR_TRACE(FATAL_ERROR)); if (!EXPECT_SUCCESS()) break; @@ -84369,7 +90134,7 @@ static int test_ocsp_callback_fails(void) ExpectIntEQ(wolfSSL_CTX_load_verify_locations(ctx_s, caCertFile, 0), WOLFSSL_SUCCESS); ExpectIntEQ(wolfSSL_SetOCSP_Cb(ssl_s, test_ocsp_callback_fails_cb, NULL, NULL), WOLFSSL_SUCCESS); ExpectIntEQ(test_memio_do_handshake(ssl_c, ssl_s, 10, NULL), -1); - ExpectIntEQ(wolfSSL_get_error(ssl_s, -1), OCSP_INVALID_STATUS); + ExpectIntEQ(wolfSSL_get_error(ssl_s, -1), WC_NO_ERR_TRACE(OCSP_INVALID_STATUS)); wolfSSL_free(ssl_c); wolfSSL_free(ssl_s); @@ -84759,10 +90524,12 @@ TEST_CASE testCases[] = { TEST_DECL(test_wc_dilithium_make_key), TEST_DECL(test_wc_dilithium_sign), TEST_DECL(test_wc_dilithium_verify), + TEST_DECL(test_wc_dilithium_sign_vfy), TEST_DECL(test_wc_dilithium_check_key), TEST_DECL(test_wc_dilithium_public_der_decode), TEST_DECL(test_wc_dilithium_der), TEST_DECL(test_wc_dilithium_make_key_from_seed), + TEST_DECL(test_wc_dilithium_sig_kats), TEST_DECL(test_wc_dilithium_verify_kats), /* Signature API */ @@ -84876,6 +90643,9 @@ TEST_CASE testCases[] = { TEST_DECL(test_wolfSSL_ASN1_UTCTIME_print), TEST_DECL(test_wolfSSL_ASN1_TYPE), TEST_DECL(test_wolfSSL_IMPLEMENT_ASN1_FUNCTIONS), + TEST_DECL(test_wolfSSL_i2d_ASN1_TYPE), + TEST_DECL(test_wolfSSL_i2d_ASN1_SEQUENCE), + TEST_DECL(test_ASN1_strings), TEST_DECL(test_wolfSSL_lhash), @@ -85133,6 +90903,7 @@ TEST_CASE testCases[] = { #endif TEST_DECL(test_wolfSSL_X509_CA_num), + TEST_DECL(test_x509_get_key_id), TEST_DECL(test_wolfSSL_X509_get_version), #ifndef NO_BIO TEST_DECL(test_wolfSSL_X509_print), @@ -85270,6 +91041,8 @@ TEST_CASE testCases[] = { TEST_DECL(test_wolfSSL_OCSP_single_get0_status), TEST_DECL(test_wolfSSL_OCSP_resp_count), TEST_DECL(test_wolfSSL_OCSP_resp_get0), + TEST_DECL(test_wolfSSL_OCSP_parse_url), + TEST_DECL(test_wolfSSL_OCSP_REQ_CTX), TEST_DECL(test_wolfSSL_PEM_read), @@ -85707,6 +91480,7 @@ TEST_CASE testCases[] = { TEST_DECL(test_extra_alerts_wrong_cs), TEST_DECL(test_extra_alerts_skip_hs), TEST_DECL(test_extra_alerts_bad_psk), + TEST_DECL(test_multiple_alerts_EAGAIN), TEST_DECL(test_tls13_bad_psk_binder), /* Can't memory test as client/server Asserts. */ TEST_DECL(test_harden_no_secure_renegotiation), diff --git a/tests/suites.c b/tests/suites.c index 5c367fe9c9..93f3bec42c 100644 --- a/tests/suites.c +++ b/tests/suites.c @@ -172,6 +172,41 @@ static int IsValidCipherSuite(const char* line, char *suite, size_t suite_spc) return valid; } +#ifdef WOLFSSL_HAVE_KYBER +static int IsKyberLevelAvailable(const char* line) +{ + int available = 0; + const char* find = "--pqc "; + const char* begin = strstr(line, find); + const char* end; + + if (begin != NULL) { + begin += 6; + end = XSTRSTR(begin, " "); + + if ((size_t)end - (size_t)begin == 12) { + #ifndef WOLFSSL_NO_KYBER512 + if (XSTRNCMP(begin, "KYBER_LEVEL1", 12) == 0) { + available = 1; + } + #endif + #ifndef WOLFSSL_NO_KYBER768 + if (XSTRNCMP(begin, "KYBER_LEVEL3", 12) == 0) { + available = 1; + } + #endif + #ifndef WOLFSSL_NO_KYBER1024 + if (XSTRNCMP(begin, "KYBER_LEVEL5", 12) == 0) { + available = 1; + } + #endif + } + } + + return (begin == NULL) || available; +} +#endif + static int IsValidCert(const char* line) { int ret = 1; @@ -356,6 +391,14 @@ static int execute_test_case(int svr_argc, char** svr_argv, #endif return NOT_BUILT_IN; } +#ifdef WOLFSSL_HAVE_KYBER + if (!IsKyberLevelAvailable(commandLine)) { + #ifdef DEBUG_SUITE_TESTS + printf("Kyber level not supported in build: %s\n", commandLine); + #endif + return NOT_BUILT_IN; + } +#endif if (!IsValidCert(commandLine)) { #ifdef DEBUG_SUITE_TESTS printf("certificate %s not supported in build\n", commandLine); diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index 7f0e23d5f6..c35809119c 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -526,7 +526,7 @@ wc_GetErrorString(err)); printf("%shash = %s\n", ok ? info_prefix : err_prefix, hash); - if (err == IN_CORE_FIPS_E) { + if (err == WC_NO_ERR_TRACE(IN_CORE_FIPS_E)) { printf("%sIn core integrity hash check failure, copy above hash\n", err_prefix); printf("%sinto verifyCore[] in fips_test.c and rebuild\n", @@ -685,6 +685,11 @@ #define BENCH_KYBER1024 0x00000080 #define BENCH_KYBER (BENCH_KYBER512 | BENCH_KYBER768 | \ BENCH_KYBER1024) +#define BENCH_ML_KEM_512 0x00000020 +#define BENCH_ML_KEM_768 0x00000040 +#define BENCH_ML_KEM_1024 0x00000080 +#define BENCH_ML_KEM (BENCH_ML_KEM_512 | BENCH_ML_KEM_768 | \ + BENCH_ML_KEM_1024) #define BENCH_FALCON_LEVEL1_SIGN 0x00000001 #define BENCH_FALCON_LEVEL5_SIGN 0x00000002 #define BENCH_DILITHIUM_LEVEL2_SIGN 0x04000000 @@ -1087,6 +1092,10 @@ static const bench_pq_alg bench_pq_asym_opt[] = { { "-kyber512", BENCH_KYBER512 }, { "-kyber768", BENCH_KYBER768 }, { "-kyber1024", BENCH_KYBER1024 }, + { "-ml-kem", BENCH_ML_KEM }, + { "-ml-kem-512", BENCH_ML_KEM_512 }, + { "-ml-kem-768", BENCH_ML_KEM_768 }, + { "-ml-kem-1024", BENCH_ML_KEM_1024 }, #endif #if defined(HAVE_FALCON) { "-falcon_level1", BENCH_FALCON_LEVEL1_SIGN }, @@ -1663,18 +1672,6 @@ static const char* bench_result_words3[][5] = { const char *desc_extra); #endif -#if defined(DEBUG_WOLFSSL) && !defined(HAVE_VALGRIND) && \ - !defined(HAVE_STACK_SIZE) -#ifdef __cplusplus - extern "C" { -#endif - WOLFSSL_API int wolfSSL_Debugging_ON(void); - WOLFSSL_API void wolfSSL_Debugging_OFF(void); -#ifdef __cplusplus - } /* extern "C" */ -#endif -#endif - #if !defined(WC_NO_RNG) && \ ((!defined(NO_RSA) && !defined(WOLFSSL_RSA_VERIFY_ONLY)) \ || !defined(NO_DH) || defined(WOLFSSL_KEY_GEN) || defined(HAVE_ECC) \ @@ -1801,7 +1798,7 @@ static const char* bench_result_words2[][5] = { { WOLF_EVENT_STATE state = asyncDev->event.state; - if (*ret == WC_PENDING_E) { + if (*ret == WC_NO_ERR_TRACE(WC_PENDING_E)) { if (state == WOLF_EVENT_STATE_DONE) { *ret = asyncDev->event.ret; asyncDev->event.state = WOLF_EVENT_STATE_READY; @@ -8959,7 +8956,7 @@ void bench_rsa_key(int useDeviceID, word32 rsaKeySz) /* create the RSA key */ ret = wc_MakeRsaKey(rsaKey[i], (int)rsaKeySz, exp, &gRng); - if (ret == WC_PENDING_E) { + if (ret == WC_NO_ERR_TRACE(WC_PENDING_E)) { isPending[i] = 1; pending = 1; } @@ -10202,15 +10199,11 @@ static void bench_xmss_sign_verify(const char * params) bench_stats_asym_finish(params, (int)sigSz, "verify", 0, count, start, ret); /* Cleanup everything. */ - if (sig != NULL) { - XFREE(sig, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - sig = NULL; - } + XFREE(sig, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + sig = NULL; - if (sk != NULL) { - XFREE(sk, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - sk = NULL; - } + XFREE(sk, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + sk = NULL; if (freeRng) { wc_FreeRng(&rng); @@ -11070,10 +11063,8 @@ void bench_eccEncrypt(int curveId) wc_ecc_free(userB); XFREE(userB, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); } - if (msg) - XFREE(msg, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (out) - XFREE(out, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(msg, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(out, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #else wc_ecc_free(userB); wc_ecc_free(userA); @@ -12482,11 +12473,9 @@ void bench_sakke(void) exit: - if (iTable) - XFREE(iTable, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(iTable, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (table) - XFREE(table, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(table, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); WC_FREE_VAR(genKey, HEAP_HINT); } diff --git a/wolfcrypt/src/aes.c b/wolfcrypt/src/aes.c index 747c22c70e..177e289b23 100644 --- a/wolfcrypt/src/aes.c +++ b/wolfcrypt/src/aes.c @@ -613,6 +613,10 @@ block cipher mechanism that uses n-bit binary string parameter key with 128-bits #define AESNI_ALIGN 16 #endif + /* note that all write access to these static variables must be idempotent, + * as arranged by Check_CPU_support_AES(), else they will be susceptible to + * data races. + */ static int checkedAESNI = 0; static int haveAESNI = 0; static word32 intel_flags = 0; @@ -8858,7 +8862,7 @@ int WARN_UNUSED_RESULT AES_GCM_decrypt_C( /* now use res as a mask for constant time return of ret, unless tag * mismatch, whereupon AES_GCM_AUTH_E is returned. */ - ret = (ret & ~res) | (res & AES_GCM_AUTH_E); + ret = (ret & ~res) | (res & WC_NO_ERR_TRACE(AES_GCM_AUTH_E)); #endif return ret; } @@ -11307,10 +11311,8 @@ void wc_AesFree(Aes* aes) #endif #if defined(WOLFSSL_AESGCM_STREAM) && defined(WOLFSSL_SMALL_STACK) && \ !defined(WOLFSSL_AESNI) - if (aes->streamData != NULL) { - XFREE(aes->streamData, aes->heap, DYNAMIC_TYPE_AES); - aes->streamData = NULL; - } + XFREE(aes->streamData, aes->heap, DYNAMIC_TYPE_AES); + aes->streamData = NULL; #endif #if defined(WOLFSSL_SE050) && defined(WOLFSSL_SE050_CRYPT) @@ -12170,8 +12172,7 @@ int wc_AesKeyWrap(const byte* key, word32 keySz, const byte* in, word32 inSz, out: #ifdef WOLFSSL_SMALL_STACK - if (aes != NULL) - XFREE(aes, NULL, DYNAMIC_TYPE_AES); + XFREE(aes, NULL, DYNAMIC_TYPE_AES); #endif return ret; @@ -12289,8 +12290,7 @@ int wc_AesKeyUnWrap(const byte* key, word32 keySz, const byte* in, word32 inSz, out: #ifdef WOLFSSL_SMALL_STACK - if (aes) - XFREE(aes, NULL, DYNAMIC_TYPE_AES); + XFREE(aes, NULL, DYNAMIC_TYPE_AES); #endif return ret; @@ -13696,9 +13696,7 @@ static WARN_UNUSED_RESULT int S2V( } } #ifdef WOLFSSL_SMALL_STACK - if (cmac != NULL) { - XFREE(cmac, NULL, DYNAMIC_TYPE_CMAC); - } + XFREE(cmac, NULL, DYNAMIC_TYPE_CMAC); #elif defined(WOLFSSL_CHECK_MEM_ZERO) wc_MemZero_Check(cmac, sizeof(Cmac)); #endif diff --git a/wolfcrypt/src/aes_gcm_asm.asm b/wolfcrypt/src/aes_gcm_asm.asm index 38d3a9872a..5b3fc7f636 100644 --- a/wolfcrypt/src/aes_gcm_asm.asm +++ b/wolfcrypt/src/aes_gcm_asm.asm @@ -1,6 +1,6 @@ ; /* aes_gcm_asm.asm */ ; /* -; * Copyright (C) 2006-2024 wolfSSL Inc. +; * Copyright (C) 2006-2024 wolfSSL Inc. ; * ; * This file is part of wolfSSL. ; * diff --git a/wolfcrypt/src/aes_xts_asm.asm b/wolfcrypt/src/aes_xts_asm.asm index aea341fe76..7194a06b87 100644 --- a/wolfcrypt/src/aes_xts_asm.asm +++ b/wolfcrypt/src/aes_xts_asm.asm @@ -1,6 +1,6 @@ ; /* aes_xts_asm.asm */ ; /* -; * Copyright (C) 2006-2024 wolfSSL Inc. +; * Copyright (C) 2006-2024 wolfSSL Inc. ; * ; * This file is part of wolfSSL. ; * diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index de916c5150..d41f8cbe4a 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -56,6 +56,8 @@ ASN Options: * WOLFSSL_CERT_GEN: Cert generation. Saves extra certificate info in GetName. * WOLFSSL_NO_ASN_STRICT: Disable strict RFC compliance checks to restore 3.13.0 behavior. + * WOLFSSL_ASN_ALLOW_0_SERIAL: Even if WOLFSSL_NO_ASN_STRICT is not defined, + allow a length=1, but zero value serial numnber. * WOLFSSL_NO_OCSP_OPTIONAL_CERTS: Skip optional OCSP certs (responder issuer must still be trusted) * WOLFSSL_NO_TRUSTED_CERTS_VERIFY: Workaround for situation where entire cert @@ -100,6 +102,9 @@ ASN Options: * which is discouraged by X.690 specification - default values shall not * be encoded. * NO_TIME_SIGNEDNESS_CHECK: Disabled the time_t signedness check. + * WOLFSSL_ECC_SIGALG_PARAMS_NULL_ALLOWED: Allows the ECDSA/EdDSA signature + * algorithms in certificates to have NULL parameter instead of empty. + * DO NOT enable this unless required for interoperability. */ #include @@ -1092,7 +1097,7 @@ static int GetASN_Integer(const byte* input, word32 idx, int length, * @return 0 on success. * @return ASN_PARSE_E when unused bits is invalid. */ -static int GetASN_BitString(const byte* input, word32 idx, int length) +int GetASN_BitString(const byte* input, word32 idx, int length) { #if !defined(HAVE_SELFTEST) && !defined(HAVE_FIPS) || \ (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION > 2)) @@ -1498,6 +1503,8 @@ int GetASN_Items(const ASNItem* asn, ASNGetData *data, int count, int complete, int minDepth; /* Integer had a zero prepended. */ int zeroPadded; + word32 tmpW32Val; + signed char tmpScharVal; #ifdef WOLFSSL_DEBUG_ASN_TEMPLATE WOLFSSL_ENTER("GetASN_Items"); @@ -1536,14 +1543,18 @@ int GetASN_Items(const ASNItem* asn, ASNGetData *data, int count, int complete, /* Check if first of numbered choice. */ if (choice == 0 && asn[i].optional > 1) { choice = asn[i].optional; - if (choiceMet[choice - 2] == -1) { + tmpScharVal = choiceMet[choice - 2]; + XFENCE(); /* Prevent memory access */ + if (tmpScharVal == -1) { /* Choice seen but not found a match yet. */ choiceMet[choice - 2] = 0; } } /* Check for end of data or not a choice and tag not matching. */ - if (idx == endIdx[depth] || (data[i].dataType != ASN_DATA_TYPE_CHOICE && + tmpW32Val = endIdx[depth]; + XFENCE(); /* Prevent memory access */ + if (idx == tmpW32Val || (data[i].dataType != ASN_DATA_TYPE_CHOICE && (input[idx] & ~ASN_CONSTRUCTED) != asn[i].tag)) { if (asn[i].optional) { /* Skip over ASN.1 items underneath this optional item. */ @@ -1611,6 +1622,7 @@ int GetASN_Items(const ASNItem* asn, ASNGetData *data, int count, int complete, /* Store found tag in data. */ data[i].tag = input[idx]; + XFENCE(); /* Prevent memory access */ if (data[i].dataType != ASN_DATA_TYPE_CHOICE) { int constructed = (input[idx] & ASN_CONSTRUCTED) == ASN_CONSTRUCTED; /* Check constructed match expected for non-choice ASN.1 item. */ @@ -2471,7 +2483,7 @@ static int GetASNHeader_ex(const byte* input, byte tag, word32* inOutIdx, * @return BUFFER_E when there is not enough data to parse. * @return ASN_PARSE_E when the expected tag is not found or length is invalid. */ -static int GetASNHeader(const byte* input, byte tag, word32* inOutIdx, int* len, +int GetASNHeader(const byte* input, byte tag, word32* inOutIdx, int* len, word32 maxIdx) { return GetASNHeader_ex(input, tag, inOutIdx, len, maxIdx, 1); @@ -4025,9 +4037,7 @@ int wc_BerToDer(const byte* ber, word32 berSz, byte* der, word32* derSz) } end: #ifdef WOLFSSL_SMALL_STACK - if (indefItems != NULL) { - XFREE(indefItems, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(indefItems, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; } @@ -5642,7 +5652,7 @@ int EncodeObjectId(const word16* in, word32 inSz, byte* out, word32* outSz) } /* compute length of encoded OID */ - d = (in[0] * 40) + in[1]; + d = ((word32)in[0] * 40) + in[1]; len = 0; for (i = 1; i < (int)inSz; i++) { x = 0; @@ -5665,7 +5675,7 @@ int EncodeObjectId(const word16* in, word32 inSz, byte* out, word32* outSz) } /* calc first byte */ - d = (in[0] * 40) + in[1]; + d = ((word32)in[0] * 40) + in[1]; /* encode bytes */ x = 0; @@ -5700,7 +5710,7 @@ int EncodeObjectId(const word16* in, word32 inSz, byte* out, word32* outSz) } /* return length */ - *outSz = len; + *outSz = (word32)len; return 0; } @@ -6063,22 +6073,8 @@ enum { #define algoIdASN_Length (sizeof(algoIdASN) / sizeof(ASNItem)) #endif -/* Get the OID id/sum from the BER encoding of an algorithm identifier. - * - * NULL tag is skipped if present. - * - * @param [in] input Buffer holding BER encoded data. - * @param [in, out] inOutIdx On in, start of algorithm identifier. - * On out, start of ASN.1 item after algorithm id. - * @param [out] oid Id of OID in algorithm identifier data. - * @param [in] oidType Type of OID to expect. - * @param [in] maxIdx Maximum index of data in buffer. - * @return 0 on success. - * @return ASN_PARSE_E when encoding is invalid. - * @return ASN_UNKNOWN_OID_E when the OID cannot be verified. - */ -int GetAlgoId(const byte* input, word32* inOutIdx, word32* oid, - word32 oidType, word32 maxIdx) +static int GetAlgoIdImpl(const byte* input, word32* inOutIdx, word32* oid, + word32 oidType, word32 maxIdx, byte *absentParams) { #ifndef WOLFSSL_ASN_TEMPLATE int length; @@ -6104,6 +6100,10 @@ int GetAlgoId(const byte* input, word32* inOutIdx, word32* oid, ret = GetASNNull(input, &idx, maxIdx); if (ret != 0) return ret; + + if (absentParams != NULL) { + *absentParams = FALSE; + } } } } @@ -6128,6 +6128,11 @@ int GetAlgoId(const byte* input, word32* inOutIdx, word32* oid, if (ret == 0) { /* Return the OID id/sum. */ *oid = dataASN[ALGOIDASN_IDX_OID].data.oid.sum; + + if ((absentParams != NULL) && + (dataASN[ALGOIDASN_IDX_NULL].tag == ASN_TAG_NULL)) { + *absentParams = FALSE; + } } FREE_ASNGETDATA(dataASN, NULL); @@ -6135,6 +6140,37 @@ int GetAlgoId(const byte* input, word32* inOutIdx, word32* oid, #endif /* WOLFSSL_ASN_TEMPLATE */ } +/* Get the OID id/sum from the BER encoding of an algorithm identifier. + * + * NULL tag is skipped if present. + * + * @param [in] input Buffer holding BER encoded data. + * @param [in, out] inOutIdx On in, start of algorithm identifier. + * On out, start of ASN.1 item after algorithm id. + * @param [out] oid Id of OID in algorithm identifier data. + * @param [in] oidType Type of OID to expect. + * @param [in] maxIdx Maximum index of data in buffer. + * @return 0 on success. + * @return ASN_PARSE_E when encoding is invalid. + * @return ASN_UNKNOWN_OID_E when the OID cannot be verified. + */ +int GetAlgoId(const byte* input, word32* inOutIdx, word32* oid, + word32 oidType, word32 maxIdx) +{ + return GetAlgoIdImpl(input, inOutIdx, oid, oidType, maxIdx, NULL); +} + +int GetAlgoIdEx(const byte* input, word32* inOutIdx, word32* oid, + word32 oidType, word32 maxIdx, byte *absentParams) +{ + /* Assume absent until proven otherwise */ + if (absentParams != NULL) { + *absentParams = TRUE; + } + + return GetAlgoIdImpl(input, inOutIdx, oid, oidType, maxIdx, absentParams); +} + #ifndef NO_RSA #ifdef WC_RSA_PSS @@ -8616,9 +8652,7 @@ int wc_EncryptPKCS8Key(byte* key, word32 keySz, byte* out, word32* outSz, } #ifdef WOLFSSL_SMALL_STACK - if (saltTmp != NULL) { - XFREE(saltTmp, heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(saltTmp, heap, DYNAMIC_TYPE_TMP_BUFFER); #endif WOLFSSL_LEAVE("wc_EncryptPKCS8Key", ret); @@ -11554,8 +11588,7 @@ void FreeDecodedCert(DecodedCert* cert) wolfSSL_X509_NAME_free((WOLFSSL_X509_NAME*)cert->subjectName); #endif /* WOLFSSL_X509_NAME_AVAILABLE */ #if defined(WOLFSSL_RENESAS_TSIP_TLS) || defined(WOLFSSL_RENESAS_FSPSM_TLS) - if (cert->sce_tsip_encRsaKeyIdx != NULL) - XFREE(cert->sce_tsip_encRsaKeyIdx, cert->heap, DYNAMIC_TYPE_RSA); + XFREE(cert->sce_tsip_encRsaKeyIdx, cert->heap, DYNAMIC_TYPE_RSA); #endif FreeSignatureCtx(&cert->sigCtx); } @@ -13443,12 +13476,12 @@ static int GenerateDNSEntryRIDString(DNS_entry* entry, void* heap) } if (i < tmpSize - 1) { - ret = XSNPRINTF(oidName + j, MAX_OID_SZ - j, "%d.", - tmpName[i]); + ret = XSNPRINTF(oidName + j, (word32)(MAX_OID_SZ - j), + "%d.", tmpName[i]); } else { - ret = XSNPRINTF(oidName + j, MAX_OID_SZ - j, "%d", - tmpName[i]); + ret = XSNPRINTF(oidName + j, (word32)(MAX_OID_SZ - j), + "%d", tmpName[i]); } if (ret >= 0) { @@ -13467,7 +13500,7 @@ static int GenerateDNSEntryRIDString(DNS_entry* entry, void* heap) if (ret == 0) { nameSz = (int)XSTRLEN((const char*)finalName); - entry->ridString = (char*)XMALLOC(nameSz + 1, heap, + entry->ridString = (char*)XMALLOC((word32)(nameSz + 1), heap, DYNAMIC_TYPE_ALTNAME); if (entry->ridString == NULL) { @@ -13475,7 +13508,7 @@ static int GenerateDNSEntryRIDString(DNS_entry* entry, void* heap) } if (ret == 0) { - XMEMCPY(entry->ridString, finalName, nameSz + 1); + XMEMCPY(entry->ridString, finalName, (word32)(nameSz + 1)); } } @@ -13522,7 +13555,7 @@ static int AddDNSEntryToList(DNS_entry** lst, DNS_entry* entry) /* Allocate a DNS entry and set the fields. * - * @param [in] cert Certificate object. + * @param [in] heap Heap hint. * @param [in] str DNS name string. * @param [in] strLen Length of DNS name string. * @param [in] type Type of DNS name string. @@ -13530,24 +13563,21 @@ static int AddDNSEntryToList(DNS_entry** lst, DNS_entry* entry) * @return 0 on success. * @return MEMORY_E when dynamic memory allocation fails. */ -static int SetDNSEntry(DecodedCert* cert, const char* str, int strLen, +static int SetDNSEntry(void* heap, const char* str, int strLen, int type, DNS_entry** entries) { DNS_entry* dnsEntry; int ret = 0; - /* Only used for heap. */ - (void)cert; - /* TODO: consider one malloc. */ /* Allocate DNS Entry object. */ - dnsEntry = AltNameNew(cert->heap); + dnsEntry = AltNameNew(heap); if (dnsEntry == NULL) { ret = MEMORY_E; } if (ret == 0) { /* Allocate DNS Entry name - length of string plus 1 for NUL. */ - dnsEntry->name = (char*)XMALLOC((size_t)strLen + 1, cert->heap, + dnsEntry->name = (char*)XMALLOC((size_t)strLen + 1, heap, DYNAMIC_TYPE_ALTNAME); if (dnsEntry->name == NULL) { ret = MEMORY_E; @@ -13562,25 +13592,23 @@ static int SetDNSEntry(DecodedCert* cert, const char* str, int strLen, #ifdef WOLFSSL_RID_ALT_NAME /* store registeredID as a string */ - if (type == ASN_RID_TYPE) { - ret = GenerateDNSEntryRIDString(dnsEntry, cert->heap); - } + if (type == ASN_RID_TYPE) + ret = GenerateDNSEntryRIDString(dnsEntry, heap); #endif + } #ifdef WOLFSSL_IP_ALT_NAME - /* store IP addresses as a string */ - if (type == ASN_IP_TYPE) { - ret = GenerateDNSEntryIPString(dnsEntry, cert->heap); - } + /* store IP addresses as a string */ + if (ret == 0 && type == ASN_IP_TYPE) + ret = GenerateDNSEntryIPString(dnsEntry, heap); #endif - } if (ret == 0) { ret = AddDNSEntryToList(entries, dnsEntry); } /* failure cleanup */ if (ret != 0 && dnsEntry != NULL) { - XFREE(dnsEntry->name, cert->heap, DYNAMIC_TYPE_ALTNAME); - XFREE(dnsEntry, cert->heap, DYNAMIC_TYPE_ALTNAME); + XFREE(dnsEntry->name, heap, DYNAMIC_TYPE_ALTNAME); + XFREE(dnsEntry, heap, DYNAMIC_TYPE_ALTNAME); } return ret; @@ -13971,13 +13999,17 @@ static int GetCertName(DecodedCert* cert, char* full, byte* hash, int nameType, } #ifndef WOLFSSL_NO_ASN_STRICT - /* RFC 5280 section 4.1.2.4 lists a DirecotryString as being + /* RFC 5280 section 4.1.2.4 lists a DirectoryString as being * 1..MAX in length */ if (strLen < 1) { WOLFSSL_MSG("Non conforming DirectoryString of length 0 was" " found"); WOLFSSL_MSG("Use WOLFSSL_NO_ASN_STRICT if wanting to allow" " empty DirectoryString's"); + #if (defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)) && \ + !defined(WOLFCRYPT_ONLY) + wolfSSL_X509_NAME_free(dName); + #endif /* OPENSSL_EXTRA */ return ASN_PARSE_E; } #endif @@ -14613,7 +14645,7 @@ static int GetCertName(DecodedCert* cert, char* full, byte* hash, int nameType, GetASN_GetRef(&dataASN[RDNASN_IDX_ATTR_VAL], &str, &strLen); #ifndef WOLFSSL_NO_ASN_STRICT - /* RFC 5280 section 4.1.2.4 lists a DirecotryString as being + /* RFC 5280 section 4.1.2.4 lists a DirectoryString as being * 1..MAX in length */ if (ret == 0 && strLen < 1) { WOLFSSL_MSG("Non conforming DirectoryString of length 0 was" @@ -15858,7 +15890,7 @@ word32 SetLengthEx(word32 length, byte* output, byte isIndef) * @param [out] output Buffer to encode into. * @return Number of bytes encoded. */ -static word32 SetHeader(byte tag, word32 len, byte* output, byte isIndef) +word32 SetHeader(byte tag, word32 len, byte* output, byte isIndef) { if (output) { /* Encode tag first. */ @@ -16082,7 +16114,7 @@ static WC_INLINE int IsSigAlgoECC(word32 algoOID) * @return Encoded data size on success. * @return 0 when dynamic memory allocation fails. */ -word32 SetAlgoID(int algoOID, byte* output, int type, int curveSz) +static word32 SetAlgoIDImpl(int algoOID, byte* output, int type, int curveSz, byte absentParams) { #ifndef WOLFSSL_ASN_TEMPLATE word32 tagSz, idSz, seqSz, algoSz = 0; @@ -16091,9 +16123,10 @@ word32 SetAlgoID(int algoOID, byte* output, int type, int curveSz) byte seqArray[MAX_SEQ_SZ + 1]; /* add object_id to end */ word32 length = 0; - tagSz = (type == oidHashType || + tagSz = ((type == oidHashType || (type == oidSigType && !IsSigAlgoECC((word32)algoOID)) || - (type == oidKeyType && algoOID == RSAk)) ? 2U : 0U; + (type == oidKeyType && algoOID == RSAk)) && + (absentParams == FALSE)) ? 2U : 0U; algoName = OidFromId((word32)algoOID, (word32)type, &algoSz); if (algoName == NULL) { WOLFSSL_MSG("Unknown Algorithm"); @@ -16149,6 +16182,10 @@ word32 SetAlgoID(int algoOID, byte* output, int type, int curveSz) /* Don't put out NULL DER item. */ dataASN[ALGOIDASN_IDX_NULL].noOut = 1; } + /* Override for absent (not NULL) params */ + if (TRUE == absentParams) { + dataASN[ALGOIDASN_IDX_NULL].noOut = 1; + } if (algoOID == DSAk) { /* Don't include SEQUENCE for DSA keys. */ o = 1; @@ -16191,6 +16228,27 @@ word32 SetAlgoID(int algoOID, byte* output, int type, int curveSz) #endif /* WOLFSSL_ASN_TEMPLATE */ } +/* Encode an algorithm identifier. + * + * [algoOID, type] is unique. + * + * @param [in] algoOID Algorithm identifier. + * @param [out] output Buffer to hold encoding. + * @param [in] type Type of OID being encoded. + * @param [in] curveSz Add extra space for curve data. + * @return Encoded data size on success. + * @return 0 when dynamic memory allocation fails. + */ +word32 SetAlgoID(int algoOID, byte* output, int type, int curveSz) +{ + return SetAlgoIDImpl(algoOID, output, type, curveSz, FALSE); +} + +word32 SetAlgoIDEx(int algoOID, byte* output, int type, int curveSz, byte absentParams) +{ + return SetAlgoIDImpl(algoOID, output, type, curveSz, absentParams); +} + #ifdef WOLFSSL_ASN_TEMPLATE /* Always encode PKCS#1 v1.5 RSA signature and compare to encoded data. */ /* ASN.1 template for DigestInfo for a PKCS#1 v1.5 RSA signature. @@ -16323,15 +16381,11 @@ void FreeSignatureCtx(SignatureCtx* sigCtx) if (sigCtx == NULL) return; - if (sigCtx->digest) { - XFREE(sigCtx->digest, sigCtx->heap, DYNAMIC_TYPE_DIGEST); - sigCtx->digest = NULL; - } + XFREE(sigCtx->digest, sigCtx->heap, DYNAMIC_TYPE_DIGEST); + sigCtx->digest = NULL; #if !(defined(NO_RSA) && defined(NO_DSA)) - if (sigCtx->sigCpy) { - XFREE(sigCtx->sigCpy, sigCtx->heap, DYNAMIC_TYPE_SIGNATURE); - sigCtx->sigCpy = NULL; - } + XFREE(sigCtx->sigCpy, sigCtx->heap, DYNAMIC_TYPE_SIGNATURE); + sigCtx->sigCpy = NULL; #endif #ifndef NO_ASN_CRYPT if (sigCtx->key.ptr) { @@ -16611,7 +16665,7 @@ static int ConfirmSignature(SignatureCtx* sigCtx, const byte* sigParams, word32 sigParamsSz, byte* rsaKeyIdx) { - int ret = ASN_SIG_CONFIRM_E; /* default to failure */ + int ret = WC_NO_ERR_TRACE(ASN_SIG_CONFIRM_E); /* default to failure */ #if defined(WOLFSSL_RENESAS_TSIP_TLS) || defined(WOLFSSL_RENESAS_FSPSM_TLS) CertAttribute* certatt = NULL; #endif @@ -17796,8 +17850,7 @@ int wc_ConfirmAltSignature( } #ifdef WOLFSSL_SMALL_STACK - if (sigCtx != NULL) - XFREE(sigCtx, heap, DYNAMIC_TYPE_SIGNATURE); + XFREE(sigCtx, heap, DYNAMIC_TYPE_SIGNATURE); #endif return ret; } @@ -18173,7 +18226,7 @@ static int DecodeOtherHelper(ASNGetData* dataASN, DecodedCert* cert, int oid) } if (ret == 0) { - ret = SetDNSEntry(cert, buf, (int)bufLen, ASN_OTHER_TYPE, &entry); + ret = SetDNSEntry(cert->heap, buf, (int)bufLen, ASN_OTHER_TYPE, &entry); if (ret == 0) { #ifdef WOLFSSL_FPKI entry->oidSum = oid; @@ -18200,10 +18253,12 @@ static int DecodeOtherHelper(ASNGetData* dataASN, DecodedCert* cert, int oid) * @return BUFFER_E when data in buffer is too small. */ static int DecodeOtherName(DecodedCert* cert, const byte* input, - word32* inOutIdx, word32 maxIdx) + word32* inOutIdx, int len) { DECL_ASNGETDATA(dataASN, otherNameASN_Length); int ret = 0; + word32 maxIdx = *inOutIdx + (word32)len; + const char* name = (const char*)input + *inOutIdx; CALLOC_ASNGETDATA(dataASN, otherNameASN_Length, ret, cert->heap); @@ -18232,7 +18287,9 @@ static int DecodeOtherName(DecodedCert* cert, const byte* input, (int)dataASN[OTHERNAMEASN_IDX_TYPEID].data.oid.sum); break; default: - WOLFSSL_MSG("\tunsupported OID skipping"); + WOLFSSL_MSG("\tadding unsupported OID"); + ret = SetDNSEntry(cert->heap, name, len, ASN_OTHER_TYPE, + &cert->altNames); break; } } @@ -18264,8 +18321,8 @@ static int DecodeGeneralName(const byte* input, word32* inOutIdx, byte tag, /* GeneralName choice: dnsName */ if (tag == (ASN_CONTEXT_SPECIFIC | ASN_DNS_TYPE)) { - ret = SetDNSEntry(cert, (const char*)(input + idx), len, ASN_DNS_TYPE, - &cert->altNames); + ret = SetDNSEntry(cert->heap, (const char*)(input + idx), len, + ASN_DNS_TYPE, &cert->altNames); if (ret == 0) { idx += (word32)len; } @@ -18283,7 +18340,7 @@ static int DecodeGeneralName(const byte* input, word32* inOutIdx, byte tag, return ASN_PARSE_E; } - ret = SetDNSEntry(cert, (const char*)(input + idxDir), strLen, + ret = SetDNSEntry(cert->heap, (const char*)(input + idxDir), strLen, ASN_DIR_TYPE, &cert->altDirNames); if (ret == 0) { idx += (word32)len; @@ -18291,7 +18348,7 @@ static int DecodeGeneralName(const byte* input, word32* inOutIdx, byte tag, } /* GeneralName choice: rfc822Name */ else if (tag == (ASN_CONTEXT_SPECIFIC | ASN_RFC822_TYPE)) { - ret = SetDNSEntry(cert, (const char*)(input + idx), len, + ret = SetDNSEntry(cert->heap, (const char*)(input + idx), len, ASN_RFC822_TYPE, &cert->altEmailNames); if (ret == 0) { idx += (word32)len; @@ -18339,8 +18396,8 @@ static int DecodeGeneralName(const byte* input, word32* inOutIdx, byte tag, } #endif - ret = SetDNSEntry(cert, (const char*)(input + idx), len, ASN_URI_TYPE, - &cert->altNames); + ret = SetDNSEntry(cert->heap, (const char*)(input + idx), len, + ASN_URI_TYPE, &cert->altNames); if (ret == 0) { idx += (word32)len; } @@ -18348,8 +18405,8 @@ static int DecodeGeneralName(const byte* input, word32* inOutIdx, byte tag, #ifdef WOLFSSL_IP_ALT_NAME /* GeneralName choice: iPAddress */ else if (tag == (ASN_CONTEXT_SPECIFIC | ASN_IP_TYPE)) { - ret = SetDNSEntry(cert, (const char*)(input + idx), len, ASN_IP_TYPE, - &cert->altNames); + ret = SetDNSEntry(cert->heap, (const char*)(input + idx), len, + ASN_IP_TYPE, &cert->altNames); if (ret == 0) { idx += (word32)len; } @@ -18358,7 +18415,7 @@ static int DecodeGeneralName(const byte* input, word32* inOutIdx, byte tag, #ifdef WOLFSSL_RID_ALT_NAME /* GeneralName choice: registeredID */ else if (tag == (ASN_CONTEXT_SPECIFIC | ASN_RID_TYPE)) { - ret = SetDNSEntry(cert, (const char*)(input + idx), len, + ret = SetDNSEntry(cert->heap, (const char*)(input + idx), len, ASN_RID_TYPE, &cert->altNames); if (ret == 0) { idx += (word32)len; @@ -18370,7 +18427,7 @@ static int DecodeGeneralName(const byte* input, word32* inOutIdx, byte tag, /* GeneralName choice: otherName */ else if (tag == (ASN_CONTEXT_SPECIFIC | ASN_CONSTRUCTED | ASN_OTHER_TYPE)) { /* TODO: test data for code path */ - ret = DecodeOtherName(cert, input, &idx, idx + (word32)len); + ret = DecodeOtherName(cert, input, &idx, len); } #endif /* GeneralName choice: dNSName, x400Address, ediPartyName */ @@ -19675,13 +19732,14 @@ static int DecodeAuthKeyId(const byte* input, word32 sz, DecodedCert* cert) return ASN_PARSE_E; } + cert->extAuthKeyIdSz = length; + #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) #ifdef WOLFSSL_AKID_NAME cert->extRawAuthKeyIdSrc = input; cert->extRawAuthKeyIdSz = sz; #endif cert->extAuthKeyIdSrc = &input[idx]; - cert->extAuthKeyIdSz = length; #endif /* OPENSSL_EXTRA */ return GetHashId(input + idx, length, cert->extAuthKeyId, @@ -19777,9 +19835,9 @@ static int DecodeSubjKeyId(const byte* input, word32 sz, DecodedCert* cert) ret = GetOctetString(input, &idx, &length, sz); if (ret > 0) { + cert->extSubjKeyIdSz = (word32)length; #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) cert->extSubjKeyIdSrc = &input[idx]; - cert->extSubjKeyIdSz = (word32)length; #endif /* OPENSSL_EXTRA */ /* Get the hash or hash of the hash if wrong size. */ @@ -20804,6 +20862,11 @@ static int DecodeSubjDirAttr(const byte* input, word32 sz, DecodedCert* cert) WOLFSSL_ENTER("DecodeSubjDirAttr"); +#ifdef OPENSSL_ALL + cert->extSubjDirAttrSrc = input; + cert->extSubjDirAttrSz = sz; +#endif /* OPENSSL_ALL */ + CALLOC_ASNGETDATA(dataASN, subjDirAttrASN_Length, ret, cert->heap); /* Strip outer SEQUENCE. */ @@ -21848,8 +21911,8 @@ static int CheckDate(ASNGetData *dataASN, int dateType) * @param [in] verify Whether to verify dates before and after now. * @param [out] criticalExt Critical extension return code. * @param [out] badDateRet Bad date return code. - * @param [in] stopAtPubKey Stop parsing before subkectPublicKeyInfo. - * @param [in] stopAfterPubKey Stop parsing after subkectPublicKeyInfo. + * @param [in] stopAtPubKey Stop parsing before subjectPublicKeyInfo. + * @param [in] stopAfterPubKey Stop parsing after subjectPublicKeyInfo. * @return 0 on success. * @return ASN_CRIT_EXT_E when a critical extension was not recognized. * @return ASN_TIME_E when date BER tag is nor UTC or GENERALIZED time. @@ -21958,7 +22021,8 @@ static int DecodeCertInternal(DecodedCert* cert, int verify, int* criticalExt, cert->version = version; cert->serialSz = (int)serialSz; - #if !defined(WOLFSSL_NO_ASN_STRICT) && !defined(WOLFSSL_PYTHON) + #if !defined(WOLFSSL_NO_ASN_STRICT) && !defined(WOLFSSL_PYTHON) && \ + !defined(WOLFSSL_ASN_ALLOW_0_SERIAL) /* RFC 5280 section 4.1.2.2 states that non-conforming CAs may issue * a negative or zero serial number and should be handled gracefully. * Since it is a non-conforming CA that issues a serial of 0 then we @@ -21969,6 +22033,11 @@ static int DecodeCertInternal(DecodedCert* cert, int verify, int* criticalExt, ret = ASN_PARSE_E; } #endif + if (cert->serialSz == 0) { + WOLFSSL_MSG("Error serial size is zero. Should be at least one " + "even with no serial number."); + ret = ASN_PARSE_E; + } cert->signatureOID = dataASN[X509CERTASN_IDX_TBS_ALGOID_OID].data.oid.sum; cert->keyOID = dataASN[X509CERTASN_IDX_TBS_SPUBKEYINFO_ALGO_OID].data.oid.sum; @@ -22034,16 +22103,20 @@ static int DecodeCertInternal(DecodedCert* cert, int verify, int* criticalExt, } /* Parameters not allowed after ECDSA or EdDSA algorithm OID. */ else if (IsSigAlgoECC(cert->signatureOID)) { - if ((dataASN[X509CERTASN_IDX_SIGALGO_PARAMS_NULL].tag != 0) - #ifdef WC_RSA_PSS - || (dataASN[X509CERTASN_IDX_SIGALGO_PARAMS].tag != 0) + #ifndef WOLFSSL_ECC_SIGALG_PARAMS_NULL_ALLOWED + if (dataASN[X509CERTASN_IDX_SIGALGO_PARAMS_NULL].tag != 0) { + WOLFSSL_ERROR_VERBOSE(ASN_PARSE_E); + ret = ASN_PARSE_E; + } #endif - ) { + #ifdef WC_RSA_PSS + if (dataASN[X509CERTASN_IDX_SIGALGO_PARAMS].tag != 0) { WOLFSSL_ERROR_VERBOSE(ASN_PARSE_E); ret = ASN_PARSE_E; } + #endif } - #ifdef WC_RSA_PSS + #ifdef WC_RSA_PSS /* Check parameters starting with a SEQUENCE. */ else if (dataASN[X509CERTASN_IDX_SIGALGO_PARAMS].tag != 0) { word32 oid = dataASN[X509CERTASN_IDX_SIGALGO_OID].data.oid.sum; @@ -22085,7 +22158,7 @@ static int DecodeCertInternal(DecodedCert* cert, int verify, int* criticalExt, cert->sigParamsLength = sigAlgParamsSz; } } - #endif + #endif } if ((ret == 0) && (!done)) { pubKeyEnd = dataASN[X509CERTASN_IDX_TBS_ISSUERUID].offset; @@ -23114,8 +23187,7 @@ static int CheckCertSignature_ex(const byte* cert, word32 certSz, void* heap, FreeSignatureCtx(sigCtx); #ifdef WOLFSSL_SMALL_STACK - if (sigCtx != NULL) - XFREE(sigCtx, heap, DYNAMIC_TYPE_SIGNATURE); + XFREE(sigCtx, heap, DYNAMIC_TYPE_SIGNATURE); #endif return ret; #else /* WOLFSSL_ASN_TEMPLATE */ @@ -24323,13 +24395,9 @@ void FreeTrustedPeer(TrustedPeerCert* tp, void* heap) return; } - if (tp->name) { - XFREE(tp->name, heap, DYNAMIC_TYPE_SUBJECT_CN); - } + XFREE(tp->name, heap, DYNAMIC_TYPE_SUBJECT_CN); - if (tp->sig) { - XFREE(tp->sig, heap, DYNAMIC_TYPE_SIGNATURE); - } + XFREE(tp->sig, heap, DYNAMIC_TYPE_SIGNATURE); #ifndef IGNORE_NAME_CONSTRAINTS if (tp->permittedNames) FreeNameSubtrees(tp->permittedNames, heap); @@ -27502,12 +27570,8 @@ static int SetExtKeyUsage(Cert* cert, byte* output, word32 outSz, byte input) } /* Dispose of allocated data. */ - if (extKuASN != NULL) { - XFREE(extKuASN, cert->heap, DYNAMIC_TYPE_TMP_BUFFER); - } - if (dataASN != NULL) { - XFREE(dataASN, cert->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(extKuASN, cert->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(dataASN, cert->heap, DYNAMIC_TYPE_TMP_BUFFER); return ret; #endif @@ -28057,9 +28121,9 @@ static int EncodeName(EncodedName* name, const char* nameStr, break; #ifdef WOLFSSL_CUSTOM_OID case ASN_CUSTOM_NAME: - nameSz = cname->custom.valSz; + nameSz = (word32)cname->custom.valSz; oid = cname->custom.oid; - oidSz = cname->custom.oidSz; + oidSz = (word32)cname->custom.oidSz; break; #endif #ifdef WOLFSSL_CERT_REQ @@ -28383,8 +28447,8 @@ static int SetNameRdnItems(ASNSetData* dataASN, ASNItem* namesASN, else if (type == ASN_CUSTOM_NAME) { #ifdef WOLFSSL_CUSTOM_OID SetRdnItems(namesASN + idx, dataASN + idx, name->custom.oid, - name->custom.oidSz, name->custom.enc, - name->custom.val, name->custom.valSz); + (word32)name->custom.oidSz, (byte)name->custom.enc, + name->custom.val, (word32)name->custom.valSz); #endif } else { @@ -28606,10 +28670,8 @@ int SetNameEx(byte* output, word32 outputSz, CertName* name, void* heap) } } - if (namesASN != NULL) - XFREE(namesASN, heap, DYNAMIC_TYPE_TMP_BUFFER); - if (dataASN != NULL) - XFREE(dataASN, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(namesASN, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(dataASN, heap, DYNAMIC_TYPE_TMP_BUFFER); (void)heap; return ret; #endif @@ -31974,7 +32036,7 @@ int wc_MakeSelfCert(Cert* cert, byte* buf, word32 buffSz, WOLFSSL_ABI int wc_GetSubjectRaw(byte **subjectRaw, Cert *cert) { - int rc = BAD_FUNC_ARG; + int rc = WC_NO_ERR_TRACE(BAD_FUNC_ARG); if ((subjectRaw != NULL) && (cert != NULL)) { *subjectRaw = cert->sbjRaw; rc = 0; @@ -32424,7 +32486,7 @@ int wc_SetExtKeyUsageOID(Cert *cert, const char *in, word32 sz, byte idx, } XMEMCPY(cert->extKeyUsageOID[idx], oid, oidSz); - cert->extKeyUsageOIDSz[idx] = oidSz; + cert->extKeyUsageOIDSz[idx] = (byte)oidSz; cert->extKeyUsage |= EXTKEYUSE_USER; return 0; @@ -32460,7 +32522,7 @@ int wc_SetCustomExtension(Cert *cert, int critical, const char *oid, ext->oid = (char*)oid; ext->crit = (critical == 0) ? 0 : 1; ext->val = (byte*)der; - ext->valSz = derSz; + ext->valSz = (int)derSz; cert->customCertExtCount++; return 0; @@ -37486,8 +37548,7 @@ void FreeOcspRequest(OcspRequest* req) WOLFSSL_ENTER("FreeOcspRequest"); if (req) { - if (req->serial) - XFREE(req->serial, req->heap, DYNAMIC_TYPE_OCSP_REQUEST); + XFREE(req->serial, req->heap, DYNAMIC_TYPE_OCSP_REQUEST); req->serial = NULL; #ifdef OPENSSL_EXTRA @@ -37500,8 +37561,7 @@ void FreeOcspRequest(OcspRequest* req) req->serialInt = NULL; #endif - if (req->url) - XFREE(req->url, req->heap, DYNAMIC_TYPE_OCSP_REQUEST); + XFREE(req->url, req->heap, DYNAMIC_TYPE_OCSP_REQUEST); req->url = NULL; #ifdef OPENSSL_EXTRA @@ -37722,8 +37782,7 @@ void FreeDecodedCRL(DecodedCRL* dcrl) tmp = next; } #ifdef OPENSSL_EXTRA - if (dcrl->issuer != NULL) - XFREE(dcrl->issuer, NULL, DYNAMIC_TYPE_OPENSSL); + XFREE(dcrl->issuer, NULL, DYNAMIC_TYPE_OPENSSL); #endif } @@ -38665,7 +38724,7 @@ int ParseCRL(RevokedCert* rcert, DecodedCRL* dcrl, const byte* buff, word32 sz, tbsParams = GetASNItem_Addr(dataASN[CRLASN_IDX_TBS_SIGALGO_PARAMS], buff); - tbsParamsSz = + tbsParamsSz =(int) GetASNItem_Length(dataASN[CRLASN_IDX_TBS_SIGALGO_PARAMS], buff); } @@ -38673,7 +38732,7 @@ int ParseCRL(RevokedCert* rcert, DecodedCRL* dcrl, const byte* buff, word32 sz, sigParams = GetASNItem_Addr(dataASN[CRLASN_IDX_SIGALGO_PARAMS], buff); - sigParamsSz = + sigParamsSz = (int) GetASNItem_Length(dataASN[CRLASN_IDX_SIGALGO_PARAMS], buff); dcrl->sigParamsIndex = @@ -38700,7 +38759,7 @@ int ParseCRL(RevokedCert* rcert, DecodedCRL* dcrl, const byte* buff, word32 sz, ret = ASN_PARSE_E; } else if ((tbsParamsSz > 0) && - (XMEMCMP(tbsParams, sigParams, tbsParamsSz) != 0)) { + (XMEMCMP(tbsParams, sigParams, (word32)tbsParamsSz) != 0)) { WOLFSSL_MSG("CRL TBS and signature parameter mismatch"); ret = ASN_PARSE_E; } @@ -39029,10 +39088,8 @@ int wc_MIME_parse_headers(char* in, int inLen, MimeHdr** headers) mimeType == MIME_PARAM)) && pos >= 1) { mimeStatus = MIME_BODYVAL; end = pos-1; - if (nameAttr != NULL) { - XFREE(nameAttr, NULL, DYNAMIC_TYPE_PKCS7); - nameAttr = NULL; - } + XFREE(nameAttr, NULL, DYNAMIC_TYPE_PKCS7); + nameAttr = NULL; ret = wc_MIME_header_strip(curLine, &nameAttr, start, end); if (ret) { goto error; @@ -39041,10 +39098,8 @@ int wc_MIME_parse_headers(char* in, int inLen, MimeHdr** headers) } else if (mimeStatus == MIME_BODYVAL && cur == ';' && pos >= 1) { end = pos-1; - if (bodyVal != NULL) { - XFREE(bodyVal, NULL, DYNAMIC_TYPE_PKCS7); - bodyVal = NULL; - } + XFREE(bodyVal, NULL, DYNAMIC_TYPE_PKCS7); + bodyVal = NULL; ret = wc_MIME_header_strip(curLine, &bodyVal, start, end); if (ret) { goto error; @@ -39137,12 +39192,9 @@ int wc_MIME_parse_headers(char* in, int inLen, MimeHdr** headers) if (ret != 0) wc_MIME_free_hdrs(curHdr); wc_MIME_free_hdrs(nextHdr); - if (nameAttr != NULL) - XFREE(nameAttr, NULL, DYNAMIC_TYPE_PKCS7); - if (bodyVal != NULL) - XFREE(bodyVal, NULL, DYNAMIC_TYPE_PKCS7); - if (nextParam != NULL) - XFREE(nextParam, NULL, DYNAMIC_TYPE_PKCS7); + XFREE(nameAttr, NULL, DYNAMIC_TYPE_PKCS7); + XFREE(bodyVal, NULL, DYNAMIC_TYPE_PKCS7); + XFREE(nextParam, NULL, DYNAMIC_TYPE_PKCS7); return ret; } diff --git a/wolfcrypt/src/chacha.c b/wolfcrypt/src/chacha.c index b87418a724..1bad41dfb3 100644 --- a/wolfcrypt/src/chacha.c +++ b/wolfcrypt/src/chacha.c @@ -35,6 +35,43 @@ Public domain. #include +#ifdef HAVE_CHACHA + #include + #include + + #ifdef NO_INLINE + #include + #else + #define WOLFSSL_MISC_INCLUDED + #include + #endif + + #ifdef BIG_ENDIAN_ORDER + #define LITTLE32(x) ByteReverseWord32(x) + #else + #define LITTLE32(x) (x) + #endif + + /* Number of rounds */ + #define ROUNDS 20 + + #define U32C(v) (v##U) + #define U32V(v) ((word32)(v) & U32C(0xFFFFFFFF)) + #define U8TO32_LITTLE(p) LITTLE32(((word32*)(p))[0]) + + #define ROTATE(v,c) rotlFixed(v, c) + #define XOR(v,w) ((v) ^ (w)) + #define PLUS(v,w) (U32V((v) + (w))) + #define PLUSONE(v) (PLUS((v),1)) + + #define QUARTERROUND(a,b,c,d) \ + x[a] = PLUS(x[a],x[b]); x[d] = ROTATE(XOR(x[d],x[a]),16); \ + x[c] = PLUS(x[c],x[d]); x[b] = ROTATE(XOR(x[b],x[c]),12); \ + x[a] = PLUS(x[a],x[b]); x[d] = ROTATE(XOR(x[d],x[a]), 8); \ + x[c] = PLUS(x[c],x[d]); x[b] = ROTATE(XOR(x[b],x[c]), 7); +#endif /* HAVE_CHACHA */ + + #if defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_ARMASM_NO_NEON) /* implementation is located in wolfcrypt/src/port/arm/armv8-chacha.c */ @@ -42,18 +79,12 @@ Public domain. /* implementation located in wolfcrypt/src/port/rsicv/riscv-64-chacha.c */ #else + +/* BEGIN ChaCha C implementation */ #if defined(HAVE_CHACHA) -#include -#include #include #include -#ifdef NO_INLINE - #include -#else - #define WOLFSSL_MISC_INCLUDED - #include -#endif #ifdef CHACHA_AEAD_TEST #include @@ -88,31 +119,6 @@ Public domain. static word32 cpuidFlags = 0; #endif -#ifdef BIG_ENDIAN_ORDER - #define LITTLE32(x) ByteReverseWord32(x) -#else - #define LITTLE32(x) (x) -#endif - -/* Number of rounds */ -#define ROUNDS 20 - -#define U32C(v) (v##U) -#define U32V(v) ((word32)(v) & U32C(0xFFFFFFFF)) -#define U8TO32_LITTLE(p) LITTLE32(((word32*)(p))[0]) - -#define ROTATE(v,c) rotlFixed(v, c) -#define XOR(v,w) ((v) ^ (w)) -#define PLUS(v,w) (U32V((v) + (w))) -#define PLUSONE(v) (PLUS((v),1)) - -#define QUARTERROUND(a,b,c,d) \ - x[a] = PLUS(x[a],x[b]); x[d] = ROTATE(XOR(x[d],x[a]),16); \ - x[c] = PLUS(x[c],x[d]); x[b] = ROTATE(XOR(x[b],x[c]),12); \ - x[a] = PLUS(x[a],x[b]); x[d] = ROTATE(XOR(x[d],x[a]), 8); \ - x[c] = PLUS(x[c],x[d]); x[b] = ROTATE(XOR(x[b],x[c]), 7); - - /** * Set up iv(nonce). Earlier versions used 64 bits instead of 96, this version * uses the typical AEAD 96 bit nonce and can do record sizes of 256 GB. @@ -238,86 +244,6 @@ static WC_INLINE void wc_Chacha_wordtobyte(word32 x[CHACHA_CHUNK_WORDS], } #endif /* !USE_INTEL_CHACHA_SPEEDUP */ - -#ifdef HAVE_XCHACHA - -/* - * wc_HChacha_block - half a ChaCha block, for XChaCha - * - * see https://tools.ietf.org/html/draft-arciszewski-xchacha-03 - */ -static WC_INLINE void wc_HChacha_block(ChaCha* ctx, word32 stream[CHACHA_CHUNK_WORDS/2], word32 nrounds) -{ - word32 x[CHACHA_CHUNK_WORDS]; - word32 i; - - for (i = 0; i < CHACHA_CHUNK_WORDS; i++) { - x[i] = ctx->X[i]; - } - - for (i = nrounds; 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 < CHACHA_CHUNK_WORDS/4; ++i) - stream[i] = x[i]; - for (i = CHACHA_CHUNK_WORDS/4; i < CHACHA_CHUNK_WORDS/2; ++i) - stream[i] = x[i + CHACHA_CHUNK_WORDS/2]; -} - -/* XChaCha -- https://tools.ietf.org/html/draft-arciszewski-xchacha-03 */ -int wc_XChacha_SetKey(ChaCha *ctx, - const byte *key, word32 keySz, - const byte *nonce, word32 nonceSz, - word32 counter) { - word32 k[CHACHA_MAX_KEY_SZ]; - byte iv[CHACHA_IV_BYTES]; - int ret; - - if (nonceSz != XCHACHA_NONCE_BYTES) - return BAD_FUNC_ARG; - - if ((ret = wc_Chacha_SetKey(ctx, key, keySz)) < 0) - return ret; - - /* form a first chacha IV from the first 16 bytes of the nonce. - * the first word is supplied in the "counter" arg, and - * the result is a full 128 bit nonceful IV for the one-time block - * crypto op that follows. - */ - if ((ret = wc_Chacha_SetIV(ctx, nonce + 4, U8TO32_LITTLE(nonce))) < 0) - return ret; - - wc_HChacha_block(ctx, k, 20); /* 20 rounds, but keeping half the output. */ - - /* the HChacha output is used as a 256 bit key for the main cipher. */ - XMEMCPY(&ctx->X[4], k, 8 * sizeof(word32)); - - /* use 8 bytes from the end of the 24 byte nonce, padded up to 12 bytes, - * to form the IV for the main cipher. - */ - XMEMSET(iv, 0, 4); - XMEMCPY(iv + 4, nonce + 16, 8); - - if ((ret = wc_Chacha_SetIV(ctx, iv, counter)) < 0) - return ret; - - ForceZero(k, sizeof k); - ForceZero(iv, sizeof iv); - - return 0; -} - -#endif /* HAVE_XCHACHA */ - - #ifdef __cplusplus extern "C" { #endif @@ -441,7 +367,13 @@ int wc_Chacha_Process(ChaCha* ctx, byte* output, const byte* input, #endif } -void wc_Chacha_purge_current_block(ChaCha* ctx) { +#endif /* HAVE_CHACHA */ +#endif /* END ChaCha C implementation */ + +#if defined(HAVE_CHACHA) && defined(HAVE_XCHACHA) + +void wc_Chacha_purge_current_block(ChaCha* ctx) +{ if (ctx->left > 0) { byte scratch[CHACHA_CHUNK_BYTES]; XMEMSET(scratch, 0, sizeof(scratch)); @@ -449,6 +381,80 @@ void wc_Chacha_purge_current_block(ChaCha* ctx) { } } -#endif /* HAVE_CHACHA */ +/* + * wc_HChacha_block - half a ChaCha block, for XChaCha + * + * see https://tools.ietf.org/html/draft-arciszewski-xchacha-03 + */ +static WC_INLINE void wc_HChacha_block(ChaCha* ctx, + word32 stream[CHACHA_CHUNK_WORDS/2], word32 nrounds) +{ + word32 x[CHACHA_CHUNK_WORDS]; + word32 i; + + for (i = 0; i < CHACHA_CHUNK_WORDS; i++) { + x[i] = ctx->X[i]; + } + + for (i = nrounds; 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 < CHACHA_CHUNK_WORDS/4; ++i) + stream[i] = x[i]; + for (i = CHACHA_CHUNK_WORDS/4; i < CHACHA_CHUNK_WORDS/2; ++i) + stream[i] = x[i + CHACHA_CHUNK_WORDS/2]; +} + +/* XChaCha -- https://tools.ietf.org/html/draft-arciszewski-xchacha-03 */ +int wc_XChacha_SetKey(ChaCha *ctx, + const byte *key, word32 keySz, + const byte *nonce, word32 nonceSz, + word32 counter) +{ + int ret; + word32 k[CHACHA_MAX_KEY_SZ]; + byte iv[CHACHA_IV_BYTES]; + + if (nonceSz != XCHACHA_NONCE_BYTES) + return BAD_FUNC_ARG; + + if ((ret = wc_Chacha_SetKey(ctx, key, keySz)) < 0) + return ret; + + /* form a first chacha IV from the first 16 bytes of the nonce. + * the first word is supplied in the "counter" arg, and + * the result is a full 128 bit nonceful IV for the one-time block + * crypto op that follows. + */ + if ((ret = wc_Chacha_SetIV(ctx, nonce + 4, U8TO32_LITTLE(nonce))) < 0) + return ret; + + wc_HChacha_block(ctx, k, 20); /* 20 rounds, but keeping half the output. */ + + /* the HChacha output is used as a 256 bit key for the main cipher. */ + XMEMCPY(&ctx->X[4], k, 8 * sizeof(word32)); + + /* use 8 bytes from the end of the 24 byte nonce, padded up to 12 bytes, + * to form the IV for the main cipher. + */ + XMEMSET(iv, 0, 4); + XMEMCPY(iv + 4, nonce + 16, 8); + + if ((ret = wc_Chacha_SetIV(ctx, iv, counter)) < 0) + return ret; + + ForceZero(k, sizeof k); + ForceZero(iv, sizeof iv); + + return 0; +} -#endif /* WOLFSSL_ARMASM && !WOLFSSL_ARMASM_NO_NEON */ +#endif /* HAVE_CHACHA && HAVE_XCHACHA */ diff --git a/wolfcrypt/src/chacha_asm.asm b/wolfcrypt/src/chacha_asm.asm index 43b4ee16ed..78de305818 100644 --- a/wolfcrypt/src/chacha_asm.asm +++ b/wolfcrypt/src/chacha_asm.asm @@ -1,6 +1,6 @@ ; /* chacha_asm.asm */ ; /* -; * Copyright (C) 2006-2024 wolfSSL Inc. +; * Copyright (C) 2006-2024 wolfSSL Inc. ; * ; * This file is part of wolfSSL. ; * diff --git a/wolfcrypt/src/cmac.c b/wolfcrypt/src/cmac.c index 5e0faecec5..8accb1a872 100644 --- a/wolfcrypt/src/cmac.c +++ b/wolfcrypt/src/cmac.c @@ -242,9 +242,7 @@ int wc_CmacFree(Cmac* cmac) /* TODO: msg is leaked if wc_CmacFinal() is not called * e.g. when multiple calls to wc_CmacUpdate() and one fails but * wc_CmacFinal() not called. */ - if (cmac->msg != NULL) { - XFREE(cmac->msg, cmac->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(cmac->msg, cmac->heap, DYNAMIC_TYPE_TMP_BUFFER); #endif wc_AesFree(&cmac->aes); ForceZero(cmac, sizeof(Cmac)); @@ -414,9 +412,7 @@ int wc_AesCmacGenerate(byte* out, word32* outSz, #ifdef WOLFSSL_SMALL_STACK - if (cmac) { - XFREE(cmac, NULL, DYNAMIC_TYPE_CMAC); - } + XFREE(cmac, NULL, DYNAMIC_TYPE_CMAC); #elif defined(WOLFSSL_CHECK_MEM_ZERO) wc_MemZero_Check(cmac, sizeof(Cmac)); #endif @@ -495,9 +491,7 @@ int wc_AesCmacVerify(const byte* check, word32 checkSz, INVALID_DEVID); #ifdef WOLFSSL_SMALL_STACK - if (cmac) { - XFREE(cmac, NULL, DYNAMIC_TYPE_CMAC); - } + XFREE(cmac, NULL, DYNAMIC_TYPE_CMAC); #elif defined(WOLFSSL_CHECK_MEM_ZERO) wc_MemZero_Check(cmac, sizeof(Cmac)); #endif diff --git a/wolfcrypt/src/compress.c b/wolfcrypt/src/compress.c index 6496ad436c..941596e7fa 100644 --- a/wolfcrypt/src/compress.c +++ b/wolfcrypt/src/compress.c @@ -310,10 +310,8 @@ int wc_DeCompressDynamic(byte** out, int maxSz, int memoryType, if (inflateEnd(&stream) != Z_OK) result = DECOMPRESS_E; - if (tmp != NULL) { - XFREE(tmp, heap, memoryType); - tmp = NULL; - } + XFREE(tmp, heap, memoryType); + tmp = NULL; return result; } diff --git a/wolfcrypt/src/dh.c b/wolfcrypt/src/dh.c index 1a76ca6dec..c2f1fc0b2d 100644 --- a/wolfcrypt/src/dh.c +++ b/wolfcrypt/src/dh.c @@ -1028,7 +1028,7 @@ static int _ffc_pairwise_consistency_test(DhKey* key, if (n < 5) return 0; else - return (word32)(2.4 * XPOW((double)n, 1.0/3.0) * + return (word32)((double)2.4 * XPOW((double)n, 1.0/3.0) * XPOW(XLOG((double)n), 2.0/3.0) - 5); } #endif /* WOLFSSL_DH_CONST*/ diff --git a/wolfcrypt/src/dilithium.c b/wolfcrypt/src/dilithium.c index a40265fa07..91b1d99d62 100644 --- a/wolfcrypt/src/dilithium.c +++ b/wolfcrypt/src/dilithium.c @@ -80,6 +80,9 @@ * * WOLFSSL_DILITHIUM_NO_ASN1 Default: OFF * Disables any ASN.1 encoding or decoding code. + * WOLFSSL_DILITHIUM_REVERSE_HASH_OID Default: OFF + * Reverse the DER encoded hash oid when signing and verifying a pre-hashed + * message. * * WC_DILITHIUM_CACHE_MATRIX_A Default: OFF * Enable caching of the A matrix on import. @@ -246,6 +249,9 @@ void print_data(const char* name, const byte* d, int len) /* Number of bytes to a block of SHAKE-256 when generating s1 and s2. */ #define DILITHIUM_GEN_S_BLOCK_BYTES (WC_SHA3_256_COUNT * 8) +/* Length of the hash OID to include in pre-hash message. */ +#define DILITHIUM_HASH_OID_LEN 11 + /* The ML-DSA parameters sets. */ static const wc_dilithium_params dilithium_params[] = { @@ -300,7 +306,7 @@ static const wc_dilithium_params dilithium_params[] = { static int dilithium_get_params(int level, const wc_dilithium_params** params) { unsigned int i; - int ret = NOT_COMPILED_IN; + int ret = WC_NO_ERR_TRACE(NOT_COMPILED_IN); for (i = 0; i < DILITHIUM_PARAMS_CNT; i++) { if (dilithium_params[i].level == level) { @@ -347,7 +353,6 @@ static int dilithium_shake256(wc_Shake* shake256, const byte* data, return ret; } -#if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || !defined(WOLFSSL_DILITHIUM_NO_VERIFY) /* 256-bit hash using SHAKE-256. * * FIPS 204. 8.3: H(v,d) <- SHAKE256(v,d) @@ -385,6 +390,195 @@ static int dilithium_hash256(wc_Shake* shake256, const byte* data1, return ret; } + +#if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || !defined(WOLFSSL_DILITHIUM_NO_VERIFY) +/* 256-bit hash of context and message using SHAKE-256. + * + * FIPS 204. 5.2: Algorithm 2 ML-DSA.Sign(sk, M, ctx) + * ... + * 10: M' <- BytesToBits(IntegerToBytes(0, 1) || IntegerToBytes(|ctx|, 1) || + * ctx) || M + * ... + * + * FIPS 204. 6.2: Algorithm 7 ML-DSA.Sign_internal(sk, M', rnd) + * ... + * 6: mu <- H(BytesToBits(tr)||M', 64)) + * ... + * + * @param [in, out] shake256 SHAKE-256 object. + * @param [in] tr Public key hash. + * @param [in] trLen Length of public key hash in bytes. + * @param [in] preHash 0 when message was not hashed, + * 1 when message was hashed. + * @param [in] ctx Context of signature. + * @param [in] ctxLen Length of context of signature in bytes. + * @param [in] ctx Message to sign. + * @param [in] ctxLen Length of message to sign in bytes. + * @param [out] hash Buffer to hold hash result. + * @param [in] hashLen Number of bytes of hash to return. + * @return 0 on success. + * @return Negative on error. + */ +static int dilithium_hash256_ctx_msg(wc_Shake* shake256, const byte* tr, + byte trLen, byte preHash, const byte* ctx, byte ctxLen, const byte* msg, + word32 msgLen, byte* hash, word32 hashLen) +{ + int ret; + byte prefix[2]; + + prefix[0] = preHash; + prefix[1] = ctxLen; + + /* Initialize SHAKE-256 operation. */ + ret = wc_InitShake256(shake256, NULL, INVALID_DEVID); + if (ret == 0) { + /* Update with public key hash. */ + ret = wc_Shake256_Update(shake256, tr, trLen); + } + if (ret == 0) { + /* Update with context prefix - 0 | ctxLen. */ + ret = wc_Shake256_Update(shake256, prefix, (word32)sizeof(prefix)); + } + if (ret == 0) { + /* Update with context. */ + ret = wc_Shake256_Update(shake256, ctx, ctxLen); + } + if (ret == 0) { + /* Update with message. */ + ret = wc_Shake256_Update(shake256, msg, msgLen); + } + if (ret == 0) { + /* Compute hash of data. */ + ret = wc_Shake256_Final(shake256, hash, hashLen); + } + + return ret; +} + +/* Get the OID for the digest hash. + * + * @param [in] hash Hash algorithm. + * @param [out] oidBuffer Buffer to hold OID. + * @param [out] oidLen Length of OID in buffer. + * @return 0 on success. + * @return BAD_FUNC_ARG if hash algorithm not known. + */ +static int dilithium_get_hash_oid(int hash, byte* oidBuffer, word32* oidLen) +{ + int ret = 0; + const byte* oid; + +#ifndef WOLFSSL_DILITHIUM_NO_ASN1 + + oid = OidFromId(wc_HashGetOID((enum wc_HashType)hash), oidHashType, oidLen); + if ((oid != NULL) && (*oidLen <= DILITHIUM_HASH_OID_LEN - 2)) { +#ifndef WOLFSSL_DILITHIUM_REVERSE_HASH_OID + oidBuffer[0] = 0x06; /* ObjectID */ + oidBuffer[1] = *oidLen; /* ObjectID */ + oidBuffer += 2; + XMEMCPY(oidBuffer, oid, *oidLen); +#else + int i; + for (i = (int)*oidLen - 1; i >= 0; i--) { + *(oidBuffer++) = oid[i]; + } + *(oidBuffer++) = *oidLen; /* ObjectID */ + * oidBuffer = 0x06; /* ObjectID */ +#endif + *oidLen += 2; + } + else { + ret = BAD_FUNC_ARG; + } + +#else + + *oidLen = DILITHIUM_HASH_OID_LEN; +#ifndef NO_SHA256 + if (hash == WC_HASH_TYPE_SHA256) { + static byte sha256Oid[DILITHIUM_HASH_OID_LEN] = { + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01 + }; + oid = sha256Oid; + } + else +#endif +#ifdef WOLFSSL_SHA384 + if (hash == WC_HASH_TYPE_SHA384) { + static byte sha384Oid[DILITHIUM_HASH_OID_LEN] = { + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02 + }; + oid = sha384Oid; + } + else +#endif +#ifdef WOLFSSL_SHA512 + if (hash == WC_HASH_TYPE_SHA512) { + static byte sha512Oid[DILITHIUM_HASH_OID_LEN] = { + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03 + }; + oid = sha512Oid; + } + else +#ifndef WOLFSSL_NOSHA512_256 + if (hash == WC_HASH_TYPE_SHA512_256) { + static byte sha512_256Oid[DILITHIUM_HASH_OID_LEN] = { + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x06 + }; + oid = sha512_256Oid; + } + else +#endif +#endif + if (hash == WC_HASH_TYPE_SHAKE128) { + static byte shake128Oid[DILITHIUM_HASH_OID_LEN] = { + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x0B + }; + oid = shake128Oid; + } + else if (hash == WC_HASH_TYPE_SHAKE256) { + static byte shake256Oid[DILITHIUM_HASH_OID_LEN] = { + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x0C + }; + oid = shake256Oid; + } + else if (hash == WC_HASH_TYPE_SHA3_256) { + static byte sha3_256Oid[DILITHIUM_HASH_OID_LEN] = { + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x08 + }; + oid = sha3_256Oid; + } + else if (hash == WC_HASH_TYPE_SHA3_384) { + static byte sha3_384Oid[DILITHIUM_HASH_OID_LEN] = { + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x09 + }; + oid = sha3_384Oid; + } + else if (hash == WC_HASH_TYPE_SHA3_512) { + static byte sha3_512Oid[DILITHIUM_HASH_OID_LEN] = { + 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x0A + }; + oid = sha3_512Oid; + } + else { + oid = NULL; + ret = BAD_FUNC_ARG; + } + + if ((oid != NULL) && (*oidLen <= DILITHIUM_HASH_OID_LEN)) { +#ifndef WOLFSSL_DILITHIUM_REVERSE_HASH_OID + XMEMCPY(oidBuffer, oid, *oidLen); +#else + int i; + for (i = (int)*oidLen - 1; i >= 0; i--) { + *(oidBuffer++) = oid[i]; + } +#endif + } +#endif + + return ret; +} #endif #ifndef WOLFSSL_DILITHIUM_SMALL @@ -739,13 +933,13 @@ static void dilithium_vec_decode_eta_bits(const byte* p, byte eta, sword32* s, * 2: r0 <- r+ mod +/- 2^d * 3: return ((r+ - r0) / 2^d, r0) * - * FIPS 204. 8.2: Algorithm 18 skEncode(rho, K, tr, s1, s2, t0) + * FIPS 204. 7.2: Algorithm 24 skEncode(rho, K, tr, s1, s2, t0) * ... * 8: for i form 0 to k - 1 do * 9: sk <- sk || BitPack(t0[i], s^(d-1) - 1, 2^(d-1)) * 10: end for * - * FIPS 204. 8.2: Algorithm 16 pkEncode(rho, t1) + * FIPS 204. 7.2: Algorithm 22 pkEncode(rho, t1) * ... * 2: for i from 0 to k - 1 do * 3: pk <- pk || SimpleBitPack(t1[i], 2^bitlen(q-1) - d - 1) @@ -761,9 +955,9 @@ static void dilithium_vec_encode_t0_t1(sword32* t, byte d, byte* t0, byte* t1) unsigned int i; unsigned int j; - /* Alg 18, Step 8 and Alg 16, Step 2. For each polynomial of vector. */ + /* Alg 24, Step 8 and Alg 22, Step 2. For each polynomial of vector. */ for (i = 0; i < d; i++) { - /* Alg 18, Step 9 and Alg 16, Step 3. + /* Alg 24, Step 9 and Alg 22, Step 3. * Do all polynomial values - 8 at a time. */ for (j = 0; j < DILITHIUM_N; j += 8) { /* Take 8 values of t and take top bits and make positive. */ @@ -2564,6 +2758,7 @@ static int dilithium_vec_expand_mask(wc_Shake* shake256, byte* seed, * * @param [in] shake256 SHAKE-256 object. * @param [in] seed Buffer containing seed to expand. + * @param [in] seedLen Length of seed in bytes. * @param [in] tau Number of +/- 1s in polynomial. * @param [out] c Commit polynomial. * @param [in] block Memory to use for block from key. @@ -2571,7 +2766,7 @@ static int dilithium_vec_expand_mask(wc_Shake* shake256, byte* seed, * @return Negative on hash error. */ static int dilithium_sample_in_ball_ex(wc_Shake* shake256, const byte* seed, - byte tau, sword32* c, byte* block) + word32 seedLen, byte tau, sword32* c, byte* block) { int ret = 0; unsigned int k; @@ -2584,7 +2779,7 @@ static int dilithium_sample_in_ball_ex(wc_Shake* shake256, const byte* seed, XMEMSET(c, 0, DILITHIUM_POLY_SIZE); /* Generate a block of data from seed. */ - ret = dilithium_shake256(shake256, seed, DILITHIUM_SEED_SZ, block, + ret = dilithium_shake256(shake256, seed, seedLen, block, DILITHIUM_GEN_C_BLOCK_BYTES); } if (ret == 0) { @@ -2634,6 +2829,7 @@ static int dilithium_sample_in_ball_ex(wc_Shake* shake256, const byte* seed, * * @param [in] shake256 SHAKE-256 object. * @param [in] seed Buffer containing seed to expand. + * @param [in] seedLen Length of seed in bytes. * @param [in] tau Number of +/- 1s in polynomial. * @param [out] c Commit polynomial. * @param [in] heap Dynamic memory hint. @@ -2642,7 +2838,7 @@ static int dilithium_sample_in_ball_ex(wc_Shake* shake256, const byte* seed, * @return Negative on hash error. */ static int dilithium_sample_in_ball(wc_Shake* shake256, const byte* seed, - byte tau, sword32* c, void* heap) + word32 seedLen, byte tau, sword32* c, void* heap) { int ret = 0; #if defined(WOLFSSL_SMALL_STACK) @@ -2662,7 +2858,8 @@ static int dilithium_sample_in_ball(wc_Shake* shake256, const byte* seed, #endif if (ret == 0) { - ret = dilithium_sample_in_ball_ex(shake256, seed, tau, c, block); + ret = dilithium_sample_in_ball_ex(shake256, seed, seedLen, tau, c, + block); } #if defined(WOLFSSL_SMALL_STACK) @@ -5218,27 +5415,27 @@ static void dilithium_vec_make_pos(sword32* a, byte l) /* Make a key from a random seed. * * xi is seed passed in. - * FIPS 204. 5: Algorithm 1 ML-DSA.KeyGen() - * ... - * 2: (rho, rho', K) E {0,1}256 x {0,1}512 x {0,1}256 <- H(xi, 1024) + * FIPS 204. 6.1: Algorithm 6 ML-DSA.KeyGen_internal(xi) + * 1: (rho, rho', K) E B32 x B64 x B32 <- H(xi||k||l, 1024) + * 2: * 3: A_circum <- ExpandA(rho) * 4: (s1,s2) <- ExpandS(rho') * 5: t <- NTT-1(A_circum o NTT(s1)) + s2 * 6: (t1, t0) <- Power2Round(t, d) * 7: pk <- pkEncode(rho, t1) - * 8: tr <- H(BytesToBits(pk), 512) + * 8: tr <- H(pk, 64) * 9: sk <- skEncode(rho, K, tr, s1, s2, t0) * 10: return (pk, sk) * - * FIPS 204. 8.2: Algorithm 16 pkEncode(rho, t1) - * 1: pk <- BitsToBytes(rho) - * 2: for i from 0 to l - 1 do + * FIPS 204. 7.2: Algorithm 22 pkEncode(rho, t1) + * 1: pk <- rho + * 2: for i from 0 to k - 1 do * 3: pk <- pk || SimpleBitPack(t1[i], 2^(bitlen(q-1)-d) - 1) * 4: end for * 5: return pk * - * FIPS 204. 8.2: Algorithm 18 skEncode(rho, K, tr, s, s2, t0) - * 1: sk <- BitsToBytes(rho) || BitsToBytes(K) || BitsToBytes(tr) + * FIPS 204. 7.2: Algorithm 24 skEncode(rho, K, tr, s, s2, t0) + * 1: sk <- rho || K || tr * 2: for i from 0 to l - 1 do * 3: sk <- sk || BitPack(s1[i], eta, eta) * 4: end for @@ -5268,6 +5465,7 @@ static int dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) sword32* s2 = NULL; sword32* t = NULL; byte* pub_seed = key->k; + byte kl[2]; /* Allocate memory for large intermediates. */ #ifdef WC_DILITHIUM_CACHE_MATRIX_A @@ -5328,13 +5526,15 @@ static int dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) #endif if (ret == 0) { - /* Step 2: Create public seed, private seed and K from seed. - * Step 9; Alg 18, Step 1: Public seed is placed into private key. */ - ret = dilithium_shake256(&key->shake, seed, DILITHIUM_SEED_SZ, pub_seed, - DILITHIUM_SEEDS_SZ); + kl[0] = params->k; + kl[1] = params->l; + /* Step 1: Create public seed, private seed and K from seed. + * Step 9; Alg 24, Step 1: Public seed is placed into private key. */ + ret = dilithium_hash256(&key->shake, seed, DILITHIUM_SEED_SZ, kl, 2, + pub_seed, DILITHIUM_SEEDS_SZ); } if (ret == 0) { - /* Step 7; Alg 16 Step 1: Copy public seed into public key. */ + /* Step 7; Alg 22 Step 1: Copy public seed into public key. */ XMEMCPY(key->p, pub_seed, DILITHIUM_PUB_SEED_SZ); /* Step 3: Expand public seed into a matrix of polynomials. */ @@ -5358,9 +5558,9 @@ static int dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) /* Step 9: Move k down to after public seed. */ XMEMCPY(k, k + DILITHIUM_PRIV_SEED_SZ, DILITHIUM_K_SZ); - /* Step 9. Alg 18 Steps 2-4: Encode s1 into private key. */ + /* Step 9. Alg 24 Steps 2-4: Encode s1 into private key. */ dilthium_vec_encode_eta_bits(s1, params->l, params->eta, s1p); - /* Step 9. Alg 18 Steps 5-7: Encode s2 into private key. */ + /* Step 9. Alg 24 Steps 5-7: Encode s2 into private key. */ dilthium_vec_encode_eta_bits(s2, params->k, params->eta, s2p); /* Step 5: t <- NTT-1(A_circum o NTT(s1)) + s2 */ @@ -5371,11 +5571,11 @@ static int dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) /* Make positive for decomposing. */ dilithium_vec_make_pos(t, params->k); - /* Step 6, Step 7, Step 9. Alg 16 Steps 2-4, Alg 18 Steps 8-10. + /* Step 6, Step 7, Step 9. Alg 22 Steps 2-4, Alg 24 Steps 8-10. * Decompose t in t0 and t1 and encode into public and private key. */ dilithium_vec_encode_t0_t1(t, params->k, t0, t1); - /* Step 8. Alg 18, Step 1: Hash public key into private key. */ + /* Step 8. Alg 24, Step 1: Hash public key into private key. */ ret = dilithium_shake256(&key->shake, key->p, params->pkSz, tr, DILITHIUM_TR_SZ); } @@ -5415,6 +5615,7 @@ static int dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) byte* pub_seed = key->k; unsigned int r; unsigned int s; + byte kl[2]; /* Allocate memory for large intermediates. */ if (ret == 0) { @@ -5443,15 +5644,17 @@ static int dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) } if (ret == 0) { - /* Step 2: Create public seed, private seed and K from seed. - * Step 9; Alg 18, Step 1: Public seed is placed into private key. */ - ret = dilithium_shake256(&key->shake, seed, DILITHIUM_SEED_SZ, pub_seed, - DILITHIUM_SEEDS_SZ); + kl[0] = params->k; + kl[1] = params->l; + /* Step 1: Create public seed, private seed and K from seed. + * Step 9; Alg 24, Step 1: Public seed is placed into private key. */ + ret = dilithium_hash256(&key->shake, seed, DILITHIUM_SEED_SZ, kl, 2, + pub_seed, DILITHIUM_SEEDS_SZ); } if (ret == 0) { byte* priv_seed = key->k + DILITHIUM_PUB_SEED_SZ; - /* Step 7; Alg 16 Step 1: Copy public seed into public key. */ + /* Step 7; Alg 22 Step 1: Copy public seed into public key. */ XMEMCPY(key->p, pub_seed, DILITHIUM_PUB_SEED_SZ); /* Step 4: Expand private seed into to vectors of polynomials. */ @@ -5471,9 +5674,9 @@ static int dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) /* Step 9: Move k down to after public seed. */ XMEMCPY(k, k + DILITHIUM_PRIV_SEED_SZ, DILITHIUM_K_SZ); - /* Step 9. Alg 18 Steps 2-4: Encode s1 into private key. */ + /* Step 9. Alg 24 Steps 2-4: Encode s1 into private key. */ dilthium_vec_encode_eta_bits(s1, params->l, params->eta, s1p); - /* Step 9. Alg 18 Steps 5-7: Encode s2 into private key. */ + /* Step 9. Alg 24 Steps 5-7: Encode s2 into private key. */ dilthium_vec_encode_eta_bits(s2, params->k, params->eta, s2p); /* Step 5: NTT(s1) */ @@ -5588,11 +5791,11 @@ static int dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) s2t += DILITHIUM_N; } - /* Step 6, Step 7, Step 9. Alg 16 Steps 2-4, Alg 18 Steps 8-10. + /* Step 6, Step 7, Step 9. Alg 22 Steps 2-4, Alg 24 Steps 8-10. * Decompose t in t0 and t1 and encode into public and private key. */ dilithium_vec_encode_t0_t1(t, params->k, t0, t1); - /* Step 8. Alg 18, Step 1: Hash public key into private key. */ + /* Step 8. Alg 24, Step 1: Hash public key into private key. */ ret = dilithium_shake256(&key->shake, key->p, params->pkSz, tr, DILITHIUM_TR_SZ); } @@ -5609,9 +5812,12 @@ static int dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) /* Make a key from a random seed. * - * FIPS 204. 5: Algorithm 1 ML-DSA.KeyGen() - * 1: xi <- {0,1}256 [Choose random seed] - * ... + * FIPS 204. 5.1: Algorithm 1 ML-DSA.KeyGen() + * 1: xi <- B32 [Choose random seed] + * 2: if xi = NULL then + * 3: return falsam + * 4: end if + * 5: return ML-DSA.KeyGen_internal(xi) * * @param [in, out] key Dilithium key. * @param [in] rng Random number generator. @@ -5624,10 +5830,11 @@ static int dilithium_make_key(dilithium_key* key, WC_RNG* rng) int ret; byte seed[DILITHIUM_SEED_SZ]; - /* Generate a 256-bit random seed. */ + /* Step 1: Generate a 32 byte random seed. */ ret = wc_RNG_GenerateBlock(rng, seed, DILITHIUM_SEED_SZ); + /* Step 2: Check for error. */ if (ret == 0) { - /* Make key with random seed. */ + /* Step 5: Make key with random seed. */ ret = wc_dilithium_make_key_from_seed(key, seed); } @@ -5642,7 +5849,7 @@ static int dilithium_make_key(dilithium_key* key, WC_RNG* rng) defined(WC_DILITHIUM_CACHE_PRIV_VECTORS) /* Decode, from private key, and NTT private key vectors s1, s2, and t0. * - * FIPS 204. 6: Algorithm 2 MD-DSA.Sign(sk, M) + * FIPS 204. 6: Algorithm 2 ML-DSA.Sign(sk, M) * 1: (rho, K, tr, s1, s2, t0) <- skDecode(sk) * 2: s1_circum <- NTT(s1) * 3: s2_circum <- NTT(s2) @@ -5685,7 +5892,13 @@ static void dilithium_make_priv_vecs(dilithium_key* key, sword32* s1, /* Sign a message with the key and a seed. * - * FIPS 204. 6: Algorithm 2 MD-DSA.Sign(sk, M) + * FIPS 204. 5.2: Algorithm 2 ML-DSA.sign(sk, M, ctx) + * ... + * 10: M' <- ByyesToBits(IntegerToBytes(0, 1) || IntegerToBytes(|ctx|, 1) || + * ctx) || M + * ... + * + * FIPS 204. 6: Algorithm 2 ML-DSA.Sign(sk, M) * 1: (rho, K, tr, s1, s2, t0) <- skDecode(sk) * 2: s1_circum <- NTT(s1) * 3: s2_circum <- NTT(s2) @@ -5724,26 +5937,25 @@ static void dilithium_make_priv_vecs(dilithium_key* key, sword32* s1, * 33: return sigma * * @param [in, out] key Dilithium key. - * @param [in, out] seed Random seed. - * @param [in] msg Message data to sign. - * @param [in] msgLen Length of message data in bytes. + * @param [in] seedMu Random seed || mu. * @param [out] sig Buffer to hold signature. * @param [in, out] sigLen On in, length of buffer in bytes. * On out, the length of the signature in bytes. * @return 0 on success. + * @return BAD_FUNC_ARG when context length is greater than 255. * @return BUFFER_E when the signature buffer is too small. * @return MEMORY_E when memory allocation fails. * @return Other negative when an error occurs. */ -static int dilithium_sign_msg_with_seed(dilithium_key* key, const byte* seed, - const byte* msg, word32 msgLen, byte* sig, word32 *sigLen) +static int dilithium_sign_with_seed_mu(dilithium_key* key, + const byte* seedMu, byte* sig, word32 *sigLen) { #ifndef WOLFSSL_DILITHIUM_SIGN_SMALL_MEM int ret = 0; const wc_dilithium_params* params = key->params; const byte* pub_seed = key->k; const byte* k = pub_seed + DILITHIUM_PUB_SEED_SZ; - const byte* tr = k + DILITHIUM_K_SZ; + const byte* mu = seedMu + DILITHIUM_RND_SZ; sword32* a = NULL; sword32* s1 = NULL; sword32* s2 = NULL; @@ -5754,13 +5966,11 @@ static int dilithium_sign_msg_with_seed(dilithium_key* key, const byte* seed, sword32* c = NULL; sword32* z = NULL; sword32* ct0 = NULL; - byte data[DILITHIUM_RND_SZ + DILITHIUM_MU_SZ]; - byte* mu = data + DILITHIUM_RND_SZ; byte priv_rand_seed[DILITHIUM_Y_SEED_SZ]; - byte* h = sig + params->lambda * 2 + params->zEncSz; + byte* h = sig + params->lambda / 4 + params->zEncSz; /* Check the signature buffer isn't too small. */ - if ((ret == 0) && (*sigLen < params->sigSz)) { + if (*sigLen < params->sigSz) { ret = BUFFER_E; } if (ret == 0) { @@ -5785,7 +5995,8 @@ static int dilithium_sign_msg_with_seed(dilithium_key* key, const byte* seed, #ifdef WC_DILITHIUM_CACHE_PRIV_VECTORS #ifndef WC_DILITHIUM_FIXED_ARRAY if ((ret == 0) && (key->s1 == NULL)) { - key->s1 = (sword32*)XMALLOC(params->aSz, key->heap, DYNAMIC_TYPE_DILITHIUM); + key->s1 = (sword32*)XMALLOC(params->aSz, key->heap, + DYNAMIC_TYPE_DILITHIUM); if (key->s1 == NULL) { ret = MEMORY_E; } @@ -5859,18 +6070,9 @@ static int dilithium_sign_msg_with_seed(dilithium_key* key, const byte* seed, #endif } } - if (ret == 0) { - /* Step 6: Compute the hash of tr, public key hash, and message. */ - ret = dilithium_hash256(&key->shake, tr, DILITHIUM_TR_SZ, msg, msgLen, - mu, DILITHIUM_MU_SZ); - } - if (ret == 0) { - /* Step 7: Copy random into buffer for hashing. */ - XMEMCPY(data, seed, DILITHIUM_RND_SZ); - } if (ret == 0) { /* Step 9: Compute private random using hash. */ - ret = dilithium_hash256(&key->shake, k, DILITHIUM_K_SZ, data, + ret = dilithium_hash256(&key->shake, k, DILITHIUM_K_SZ, seedMu, DILITHIUM_RND_SZ + DILITHIUM_MU_SZ, priv_rand_seed, DILITHIUM_PRIV_RAND_SEED_SZ); } @@ -5914,11 +6116,11 @@ static int dilithium_sign_msg_with_seed(dilithium_key* key, const byte* seed, /* Step 15: Hash mu and encoded w1. * Step 32: Hash is stored in signature. */ ret = dilithium_hash256(&key->shake, mu, DILITHIUM_MU_SZ, - w1e, params->w1EncSz, commit, 2 * params->lambda); + w1e, params->w1EncSz, commit, params->lambda / 4); if (ret == 0) { /* Step 17: Compute c from first 256 bits of commit. */ ret = dilithium_sample_in_ball(&key->shake, commit, - params->tau, c, key->heap); + params->lambda / 4, params->tau, c, key->heap); } if (ret == 0) { sword32 hi; @@ -5982,7 +6184,7 @@ static int dilithium_sign_msg_with_seed(dilithium_key* key, const byte* seed, while ((ret == 0) && (!valid)); } if (ret == 0) { - byte* ze = sig + params->lambda * 2; + byte* ze = sig + params->lambda / 4; /* Step 32: Encode z into signature. * Commit (c) and h already encoded into signature. */ dilithium_vec_encode_gamma1(z, params->l, params->gamma1_bits, ze); @@ -5999,6 +6201,7 @@ static int dilithium_sign_msg_with_seed(dilithium_key* key, const byte* seed, const byte* s1p = tr + DILITHIUM_TR_SZ; const byte* s2p = s1p + params->s1EncSz; const byte* t0p = s2p + params->s2EncSz; + const byte* mu = seedMu + DILITHIUM_RND_SZ; sword32* a = NULL; sword32* s1 = NULL; sword32* s2 = NULL; @@ -6014,10 +6217,8 @@ static int dilithium_sign_msg_with_seed(dilithium_key* key, const byte* seed, sword64* t64 = NULL; #endif byte* blocks = NULL; - byte data[DILITHIUM_RND_SZ + DILITHIUM_MU_SZ]; - byte* mu = data + DILITHIUM_RND_SZ; byte priv_rand_seed[DILITHIUM_Y_SEED_SZ]; - byte* h = sig + params->lambda * 2 + params->zEncSz; + byte* h = sig + params->lambda / 4 + params->zEncSz; #ifdef WOLFSSL_DILITHIUM_SIGN_SMALL_MEM_PRECALC_A byte maxK = (byte)min(WOLFSSL_DILITHIUM_SIGN_SMALL_MEM_PRECALC_A, params->k); @@ -6088,17 +6289,9 @@ static int dilithium_sign_msg_with_seed(dilithium_key* key, const byte* seed, } } - if (ret == 0) { - /* Step 7: Copy random into buffer for hashing. */ - XMEMCPY(data, seed, DILITHIUM_RND_SZ); - - /* Step 6: Compute the hash of tr, public key hash, and message. */ - ret = dilithium_hash256(&key->shake, tr, DILITHIUM_TR_SZ, msg, msgLen, - mu, DILITHIUM_MU_SZ); - } if (ret == 0) { /* Step 9: Compute private random using hash. */ - ret = dilithium_hash256(&key->shake, k, DILITHIUM_K_SZ, data, + ret = dilithium_hash256(&key->shake, k, DILITHIUM_K_SZ, seedMu, DILITHIUM_RND_SZ + DILITHIUM_MU_SZ, priv_rand_seed, DILITHIUM_PRIV_RAND_SEED_SZ); } @@ -6327,18 +6520,18 @@ static int dilithium_sign_msg_with_seed(dilithium_key* key, const byte* seed, #ifndef WOLFSSL_DILITHIUM_SIGN_SMALL_MEM_PRECALC const byte* s1pt = s1p; #endif - byte* ze = sig + params->lambda * 2; + byte* ze = sig + params->lambda / 4; /* Step 15: Encode w1. */ dilithium_vec_encode_w1(w1, params->k, params->gamma2, w1e); /* Step 15: Hash mu and encoded w1. * Step 32: Hash is stored in signature. */ ret = dilithium_hash256(&key->shake, mu, DILITHIUM_MU_SZ, - w1e, params->w1EncSz, commit, 2 * params->lambda); + w1e, params->w1EncSz, commit, params->lambda / 4); if (ret == 0) { /* Step 17: Compute c from first 256 bits of commit. */ ret = dilithium_sample_in_ball_ex(&key->shake, commit, - params->tau, c, blocks); + params->lambda / 4, params->tau, c, blocks); } if (ret == 0) { /* Step 18: NTT(c). */ @@ -6515,149 +6708,453 @@ static int dilithium_sign_msg_with_seed(dilithium_key* key, const byte* seed, #endif } -/* Sign a message with the key and a random number generator. +/* Sign a message with the key and a seed. + * + * FIPS 204. 5.2: Algorithm 2 ML-DSA.Sign(sk, M, ctx) + * ... + * 10: M' <- BytesToBits(IntegerToBytes(0, 1) || IntegerToBytes(|ctx|, 1) || + * ctx || M) + * 11: sigma <- ML-DSA.Sign_internal(sk, M', rnd) + * 12: return sigma * - * FIPS 204. 6: Algorithm 2 MD-DSA.Sign(sk, M) + * FIPS 204. 6.2: Algorithm 7 ML-DSA.SignInternal(sk, M', rnd) * ... - * 7: rnd <- {0,1}256 [Randomly generated.] + * 6: mu <- H(BytesToBits(tr)||M', 64) * ... * * @param [in, out] key Dilithium key. - * @param [in, out] rng Random number generator. + * @param [in] seed Random seed. + * @param [in] ctx Context of signature. + * @param [in] ctxLen Length of context in bytes. * @param [in] msg Message data to sign. * @param [in] msgLen Length of message data in bytes. * @param [out] sig Buffer to hold signature. * @param [in, out] sigLen On in, length of buffer in bytes. * On out, the length of the signature in bytes. * @return 0 on success. + * @return BAD_FUNC_ARG when context length is greater than 255. * @return BUFFER_E when the signature buffer is too small. * @return MEMORY_E when memory allocation fails. * @return Other negative when an error occurs. */ -static int dilithium_sign_msg(dilithium_key* key, WC_RNG* rng, const byte* msg, +static int dilithium_sign_ctx_msg_with_seed(dilithium_key* key, + const byte* seed, const byte* ctx, byte ctxLen, const byte* msg, word32 msgLen, byte* sig, word32 *sigLen) { - int ret = 0; - byte rnd[DILITHIUM_RND_SZ]; - - /* Must have a random number generator. */ - if (rng == NULL) { - ret = BAD_FUNC_ARG; - } + int ret; + const byte* pub_seed = key->k; + const byte* k = pub_seed + DILITHIUM_PUB_SEED_SZ; + const byte* tr = k + DILITHIUM_K_SZ; + byte seedMu[DILITHIUM_RND_SZ + DILITHIUM_MU_SZ]; + byte* mu = seedMu + DILITHIUM_RND_SZ; + XMEMCPY(seedMu, seed, DILITHIUM_RND_SZ); + /* Step 6. Calculate mu. */ + ret = dilithium_hash256_ctx_msg(&key->shake, tr, DILITHIUM_TR_SZ, 0, + ctx, ctxLen, msg, msgLen, mu, DILITHIUM_MU_SZ); if (ret == 0) { - /* Step 7: Generate random seed. */ - ret = wc_RNG_GenerateBlock(rng, rnd, DILITHIUM_RND_SZ); - } - if (ret == 0) { - /* Sign with random seed. */ - ret = dilithium_sign_msg_with_seed(key, rnd, msg, msgLen, sig, - sigLen); + ret = dilithium_sign_with_seed_mu(key, seedMu, sig, sigLen); } return ret; } -#endif /* !WOLFSSL_DILITHIUM_NO_SIGN */ - -#ifndef WOLFSSL_DILITHIUM_NO_VERIFY - -#if !defined(WOLFSSL_DILITHIUM_VERIFY_SMALL_MEM) || \ - defined(WC_DILITHIUM_CACHE_PUB_VECTORS) -static void dilithium_make_pub_vec(dilithium_key* key, sword32* t1) +/* Sign a message with the key and a seed. + * + * FIPS 204. 5.2: Algorithm 2 ML-DSA.Sign(sk, M, ctx) + * ... + * 10: M' <- BytesToBits(IntegerToBytes(0, 1) || IntegerToBytes(|ctx|, 1) || + * ctx || M) + * 11: sigma <- ML-DSA.Sign_internal(sk, M', rnd) + * 12: return sigma + * + * FIPS 204. 6.2: Algorithm 7 ML-DSA.SignInternal(sk, M', rnd) + * ... + * 6: mu <- H(BytesToBits(tr)||M', 64) + * ... + * + * @param [in, out] key Dilithium key. + * @param [in] seed Random seed. + * @param [in] msg Message data to sign. + * @param [in] msgLen Length of message data in bytes. + * @param [out] sig Buffer to hold signature. + * @param [in, out] sigLen On in, length of buffer in bytes. + * On out, the length of the signature in bytes. + * @return 0 on success. + * @return BAD_FUNC_ARG when context length is greater than 255. + * @return BUFFER_E when the signature buffer is too small. + * @return MEMORY_E when memory allocation fails. + * @return Other negative when an error occurs. + */ +static int dilithium_sign_msg_with_seed(dilithium_key* key, const byte* seed, + const byte* msg, word32 msgLen, byte* sig, word32 *sigLen) { - const wc_dilithium_params* params = key->params; - const byte* t1p = key->p + DILITHIUM_PUB_SEED_SZ; + int ret; + const byte* pub_seed = key->k; + const byte* k = pub_seed + DILITHIUM_PUB_SEED_SZ; + const byte* tr = k + DILITHIUM_K_SZ; + byte seedMu[DILITHIUM_RND_SZ + DILITHIUM_MU_SZ]; + byte* mu = seedMu + DILITHIUM_RND_SZ; - dilithium_vec_decode_t1(t1p, params->k, t1); - dilithium_vec_ntt(t1, params->k); + XMEMCPY(seedMu, seed, DILITHIUM_RND_SZ); + /* Step 6. Calculate mu. */ + ret = dilithium_hash256(&key->shake, tr, DILITHIUM_TR_SZ, msg, msgLen, mu, + DILITHIUM_MU_SZ); + if (ret == 0) { + ret = dilithium_sign_with_seed_mu(key, seedMu, sig, sigLen); + } -#ifdef WC_DILITHIUM_CACHE_PUB_VECTORS - key->pubVecSet = 1; -#endif + return ret; } -#endif -/* Verify signature of message using public key. +/* Sign a message with the key and a random number generator. * - * FIPS 204. 6: Algorithm 3 ML-DSA.Verify(pk, M, sigma) - * 1: (rho, t1) <- pkDecode(pk) - * 2: (c_tilde, z, h) <- sigDecode(sigma) - * 3: if h = falsam then return false - * 4: end if - * 5: A_circum <- ExpandS(rho) - * 6: tr <- H(BytesToBits(pk), 512) - * 7: mu <- H(tr||M, 512) - * 8: (c1_tilde, c2_tilde) E {0,1}256 x {0,1)2*lambda-256 <- c_tilde - * 9: c <- SampleInBall(c1_tilde) - * 10: w'approx <- NTT-1(A_circum o NTT(z) - NTT(c) o NTT(t1.s^d)) - * 11: w1' <- UseHint(h, w'approx) - * 12: c'_tilde < H(mu||w1Encode(w1'), 2*lambda) - * 13: return [[ ||z||inf < GAMMA1 - BETA]] and [[c_tilde = c'_tilde]] and - * [[number of 1's in h is <= OMEGA + * FIPS 204. 5.2: Algorithm 2 ML-DSA.Sign(sk, M, ctx) + * ... + * 5: rnd <- B32 [Randomly generated.] + * 6: if rnd = NULL then + * 7: return falsam + * 8: end if + * 9: + * 10: M' <- BytesToBits(IntegerToBytes(0, 1) || IntegerToBytes(|ctx|, 1) || + * ctx || M) + * ... + * + * FIPS 204. 6.2: Algorithm 7 ML-DSA.SignInternal(sk, M', rnd) + * ... + * 6: mu <- H(BytesToBits(tr)||M', 64) + * ... * * @param [in, out] key Dilithium key. - * @param [in] msg Message to verify. - * @param [in] msgLen Length of message in bytes. - * @param [in] sig Signature to verify message. - * @param [in] sigLen Length of message in bytes. - * @param [out] res Result of verification. + * @param [in, out] rng Random number generator. + * @param [in] ctx Context of signature. + * @param [in] ctxLen Length of context. + * @param [in] msg Message data to sign. + * @param [in] msgLen Length of message data in bytes. + * @param [out] sig Buffer to hold signature. + * @param [in, out] sigLen On in, length of buffer in bytes. + * On out, the length of the signature in bytes. * @return 0 on success. - * @return SIG_VERIFY_E when hint is malformed. - * @return BUFFER_E when the length of the signature does not match - * parameters. + * @return BUFFER_E when the signature buffer is too small. * @return MEMORY_E when memory allocation fails. * @return Other negative when an error occurs. */ -static int dilithium_verify_msg(dilithium_key* key, const byte* msg, - word32 msgLen, const byte* sig, word32 sigLen, int* res) +static int dilithium_sign_ctx_msg(dilithium_key* key, WC_RNG* rng, + const byte* ctx, byte ctxLen, const byte* msg, word32 msgLen, byte* sig, + word32 *sigLen) { -#ifndef WOLFSSL_DILITHIUM_VERIFY_SMALL_MEM int ret = 0; - const wc_dilithium_params* params = key->params; - const byte* pub_seed = key->p; - const byte* commit = sig; - const byte* ze = sig + params->lambda * 2; - const byte* h = ze + params->zEncSz; - sword32* a = NULL; - sword32* t1 = NULL; - sword32* c = NULL; - sword32* z = NULL; - sword32* w = NULL; - sword32* t1c = NULL; - byte tr[DILITHIUM_TR_SZ]; - byte* mu = tr; - byte* w1e = NULL; - byte* commit_calc = tr; - int valid = 0; - sword32 hi; + const byte* pub_seed = key->k; + const byte* k = pub_seed + DILITHIUM_PUB_SEED_SZ; + const byte* tr = k + DILITHIUM_K_SZ; + byte seedMu[DILITHIUM_RND_SZ + DILITHIUM_MU_SZ]; + byte* mu = seedMu + DILITHIUM_RND_SZ; - /* Ensure the signature is the right size for the parameters. */ - if (sigLen != params->sigSz) { - ret = BUFFER_E; + /* Must have a random number generator. */ + if (rng == NULL) { + ret = BAD_FUNC_ARG; } + if (ret == 0) { - /* Step 13: Verify the hint is well-formed. */ - ret = dilithium_check_hint(h, params->k, params->omega); + /* Step 7: Generate random seed. */ + ret = wc_RNG_GenerateBlock(rng, seedMu, DILITHIUM_RND_SZ); } - - /* Allocate memory for large intermediates. */ -#ifdef WC_DILITHIUM_CACHE_MATRIX_A -#ifndef WC_DILITHIUM_FIXED_ARRAY - if ((ret == 0) && (key->a == NULL)) { - key->a = (sword32*)XMALLOC(params->aSz, key->heap, - DYNAMIC_TYPE_DILITHIUM); - if (key->a == NULL) { - ret = MEMORY_E; - } + if (ret == 0) { + /* Step 6. Calculate mu. */ + ret = dilithium_hash256_ctx_msg(&key->shake, tr, DILITHIUM_TR_SZ, 0, + ctx, ctxLen, msg, msgLen, mu, DILITHIUM_MU_SZ); } -#endif if (ret == 0) { - a = key->a; + ret = dilithium_sign_with_seed_mu(key, seedMu, sig, sigLen); } -#endif -#ifdef WC_DILITHIUM_CACHE_PUB_VECTORS -#ifndef WC_DILITHIUM_FIXED_ARRAY + + return ret; +} + +/* Sign a message with the key and a random number generator. + * + * FIPS 204. 5.2: Algorithm 2 ML-DSA.Sign(sk, M, ctx) + * ... + * 5: rnd <- B32 [Randomly generated.] + * 6: if rnd = NULL then + * 7: return falsam + * 8: end if + * 9: + * 10: M' <- BytesToBits(IntegerToBytes(0, 1) || IntegerToBytes(|ctx|, 1) || + * ctx || M) + * ... + * + * FIPS 204. 6.2: Algorithm 7 ML-DSA.SignInternal(sk, M', rnd) + * ... + * 6: mu <- H(BytesToBits(tr)||M', 64) + * ... + * + * @param [in, out] key Dilithium key. + * @param [in, out] rng Random number generator. + * @param [in] msg Message data to sign. + * @param [in] msgLen Length of message data in bytes. + * @param [out] sig Buffer to hold signature. + * @param [in, out] sigLen On in, length of buffer in bytes. + * On out, the length of the signature in bytes. + * @return 0 on success. + * @return BUFFER_E when the signature buffer is too small. + * @return MEMORY_E when memory allocation fails. + * @return Other negative when an error occurs. + */ +static int dilithium_sign_msg(dilithium_key* key, WC_RNG* rng, + const byte* msg, word32 msgLen, byte* sig, word32 *sigLen) +{ + int ret = 0; + const byte* pub_seed = key->k; + const byte* k = pub_seed + DILITHIUM_PUB_SEED_SZ; + const byte* tr = k + DILITHIUM_K_SZ; + byte seedMu[DILITHIUM_RND_SZ + DILITHIUM_MU_SZ]; + byte* mu = seedMu + DILITHIUM_RND_SZ; + + /* Must have a random number generator. */ + if (rng == NULL) { + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + /* Step 7: Generate random seed. */ + ret = wc_RNG_GenerateBlock(rng, seedMu, DILITHIUM_RND_SZ); + } + if (ret == 0) { + /* Step 6. Calculate mu. */ + ret = dilithium_hash256(&key->shake, tr, DILITHIUM_TR_SZ, msg, msgLen, + mu, DILITHIUM_MU_SZ); + } + if (ret == 0) { + ret = dilithium_sign_with_seed_mu(key, seedMu, sig, sigLen); + } + + return ret; +} + +/* Sign a pre-hashed message with the key and a seed. + * + * FIPS 204. 5.4.1: Algorithm 4 HashML-DSA.Sign(sk, M, ctx, PH) + * ... + * 10: switch PH do + * 11: case SHA-256: + * 12: OID <- IntegerToBytes(0x0609608648016503040201, 11) + * 13: PHm <- SHA256(M) (not done here as hash is passed in) + * ... + * 22: end switch + * 23: M' <- BytesToBits(IntegerToBytes(1, 1) || IntegerToBytes(|ctx|, 1) || + * ctx || OID || PHm) + * 24: sigma <- ML-DSA.Sign_internal(sk, M', rnd) + * 25: return sigma + * + * FIPS 204. 6.2: Algorithm 7 ML-DSA.SignInternal(sk, M', rnd) + * ... + * 6: mu <- H(BytesToBits(tr)||M', 64) + * ... + * + * @param [in, out] key Dilithium key. + * @param [in] seed Random seed. + * @param [in] ctx Context of signature. + * @param [in] ctxLen Length of context. + * @param [in] hashAlg Hash algorithm used on message. + * @param [in] hash Message hash to sign. + * @param [in] hashLen Length of message hash in bytes. + * @param [out] sig Buffer to hold signature. + * @param [in, out] sigLen On in, length of buffer in bytes. + * On out, the length of the signature in bytes. + * @return 0 on success. + * @return BUFFER_E when the signature buffer is too small. + * @return MEMORY_E when memory allocation fails. + * @return Other negative when an error occurs. + */ +static int dilithium_sign_ctx_hash_with_seed(dilithium_key* key, + const byte* seed, const byte* ctx, byte ctxLen, int hashAlg, + const byte* hash, word32 hashLen, byte* sig, word32 *sigLen) +{ + int ret = 0; + const byte* pub_seed = key->k; + const byte* k = pub_seed + DILITHIUM_PUB_SEED_SZ; + const byte* tr = k + DILITHIUM_K_SZ; + byte seedMu[DILITHIUM_RND_SZ + DILITHIUM_MU_SZ]; + byte* mu = seedMu + DILITHIUM_RND_SZ; + byte oidMsgHash[DILITHIUM_HASH_OID_LEN + WC_MAX_DIGEST_SIZE]; + word32 oidMsgHashLen; + + if ((ret == 0) && (hashLen > WC_MAX_DIGEST_SIZE)) { + ret = BUFFER_E; + } + + if (ret == 0) { + XMEMCPY(seedMu, seed, DILITHIUM_RND_SZ); + + ret = dilithium_get_hash_oid(hashAlg, oidMsgHash, &oidMsgHashLen); + } + if (ret == 0) { + XMEMCPY(oidMsgHash + oidMsgHashLen, hash, hashLen); + oidMsgHashLen += hashLen; + + /* Step 6. Calculate mu. */ + ret = dilithium_hash256_ctx_msg(&key->shake, tr, DILITHIUM_TR_SZ, 1, + ctx, ctxLen, oidMsgHash, oidMsgHashLen, mu, DILITHIUM_MU_SZ); + } + if (ret == 0) { + ret = dilithium_sign_with_seed_mu(key, seedMu, sig, sigLen); + } + + return ret; +} + +/* Sign a pre-hashed message with the key and a random number generator. + * + * FIPS 204. 5.4.1: Algorithm 4 HashML-DSA.Sign(sk, M, ctx, PH) + * ... + * 5: rnd <- B32 [Randomly generated.] + * 6: if rnd = NULL then + * 7: return falsam + * 8: end if + * ... + * + * @param [in, out] key Dilithium key. + * @param [in, out] rng Random number generator. + * @param [in] ctx Context of signature. + * @param [in] ctxLen Length of context. + * @param [in] hashAlg Hash algorithm used on message. + * @param [in] hash Message hash to sign. + * @param [in] hashLen Length of message hash in bytes. + * @param [out] sig Buffer to hold signature. + * @param [in, out] sigLen On in, length of buffer in bytes. + * On out, the length of the signature in bytes. + * @return 0 on success. + * @return BUFFER_E when the signature buffer is too small. + * @return MEMORY_E when memory allocation fails. + * @return Other negative when an error occurs. + */ +static int dilithium_sign_ctx_hash(dilithium_key* key, WC_RNG* rng, + const byte* ctx, byte ctxLen, int hashAlg, const byte* hash, word32 hashLen, + byte* sig, word32 *sigLen) +{ + int ret = 0; + byte seed[DILITHIUM_RND_SZ]; + + /* Must have a random number generator. */ + if (rng == NULL) { + ret = BAD_FUNC_ARG; + } + if (ret == 0) { + /* Step 7: Generate random seed. */ + ret = wc_RNG_GenerateBlock(rng, seed, DILITHIUM_RND_SZ); + } + + if (ret == 0) { + ret = dilithium_sign_ctx_hash_with_seed(key, seed, ctx, ctxLen, hashAlg, + hash, hashLen, sig, sigLen); + } + + return ret; +} + +#endif /* !WOLFSSL_DILITHIUM_NO_SIGN */ + +#ifndef WOLFSSL_DILITHIUM_NO_VERIFY + +#if !defined(WOLFSSL_DILITHIUM_VERIFY_SMALL_MEM) || \ + defined(WC_DILITHIUM_CACHE_PUB_VECTORS) +/* Make public vector from public key data. + * + * @param [in, out] key Key with public key data. + * @param [out] t1 Vector in NTT form. + */ +static void dilithium_make_pub_vec(dilithium_key* key, sword32* t1) +{ + const wc_dilithium_params* params = key->params; + const byte* t1p = key->p + DILITHIUM_PUB_SEED_SZ; + + dilithium_vec_decode_t1(t1p, params->k, t1); + dilithium_vec_ntt(t1, params->k); + +#ifdef WC_DILITHIUM_CACHE_PUB_VECTORS + key->pubVecSet = 1; +#endif +} +#endif + +/* Verify signature of message using public key. + * + * FIPS 204. 6: Algorithm 3 ML-DSA.Verify(pk, M, sigma) + * 1: (rho, t1) <- pkDecode(pk) + * 2: (c_tilde, z, h) <- sigDecode(sigma) + * 3: if h = falsam then return false + * 4: end if + * 5: A_circum <- ExpandS(rho) + * 6: tr <- H(BytesToBits(pk), 512) + * 7: mu <- H(tr||M, 512) + * 8: (c1_tilde, c2_tilde) E {0,1}256 x {0,1)2*lambda-256 <- c_tilde + * 9: c <- SampleInBall(c1_tilde) + * 10: w'approx <- NTT-1(A_circum o NTT(z) - NTT(c) o NTT(t1.2^d)) + * 11: w1' <- UseHint(h, w'approx) + * 12: c'_tilde < H(mu||w1Encode(w1'), 2*lambda) + * 13: return [[ ||z||inf < GAMMA1 - BETA]] and [[c_tilde = c'_tilde]] and + * [[number of 1's in h is <= OMEGA + * + * @param [in, out] key Dilithium key. + * @param [in] mu Data to verify. + * @param [in] sig Signature to verify message. + * @param [in] sigLen Length of message in bytes. + * @param [out] res Result of verification. + * @return 0 on success. + * @return SIG_VERIFY_E when hint is malformed. + * @return BUFFER_E when the length of the signature does not match + * parameters. + * @return MEMORY_E when memory allocation fails. + * @return Other negative when an error occurs. + */ +static int dilithium_verify_mu(dilithium_key* key, const byte* mu, + const byte* sig, word32 sigLen, int* res) +{ +#ifndef WOLFSSL_DILITHIUM_VERIFY_SMALL_MEM + int ret = 0; + const wc_dilithium_params* params = key->params; + const byte* pub_seed = key->p; + const byte* commit = sig; + const byte* ze = sig + params->lambda / 4; + const byte* h = ze + params->zEncSz; + sword32* a = NULL; + sword32* t1 = NULL; + sword32* c = NULL; + sword32* z = NULL; + sword32* w = NULL; + sword32* t1c = NULL; + byte commit_calc[DILITHIUM_TR_SZ]; + byte* w1e = NULL; + int valid = 0; + sword32 hi; + + /* Ensure the signature is the right size for the parameters. */ + if (sigLen != params->sigSz) { + ret = BUFFER_E; + } + if (ret == 0) { + /* Step 13: Verify the hint is well-formed. */ + ret = dilithium_check_hint(h, params->k, params->omega); + } + + /* Allocate memory for large intermediates. */ +#ifdef WC_DILITHIUM_CACHE_MATRIX_A +#ifndef WC_DILITHIUM_FIXED_ARRAY + if ((ret == 0) && (key->a == NULL)) { + key->a = (sword32*)XMALLOC(params->aSz, key->heap, + DYNAMIC_TYPE_DILITHIUM); + if (key->a == NULL) { + ret = MEMORY_E; + } + } +#endif + if (ret == 0) { + a = key->a; + } +#endif +#ifdef WC_DILITHIUM_CACHE_PUB_VECTORS +#ifndef WC_DILITHIUM_FIXED_ARRAY if ((ret == 0) && (key->t1 == NULL)) { key->t1 = (sword32*)XMALLOC(params->s2Sz, key->heap, DYNAMIC_TYPE_DILITHIUM); @@ -6733,19 +7230,9 @@ static int dilithium_verify_msg(dilithium_key* key, const byte* msg, } } if ((ret == 0) && valid) { - /* Step 6: Hash public key. */ - ret = dilithium_shake256(&key->shake, key->p, params->pkSz, tr, - DILITHIUM_TR_SZ); - } - if ((ret == 0) && valid) { - /* Step 7: Hash hash of public key and message. */ - ret = dilithium_hash256(&key->shake, tr, DILITHIUM_TR_SZ, msg, msgLen, - mu, DILITHIUM_MU_SZ); - } - if ((ret == 0) && valid) { - /* Step 9: Compute c from first 256 bits of commit. */ - ret = dilithium_sample_in_ball(&key->shake, commit, params->tau, c, - key->heap); + /* Step 9: Compute c from commit. */ + ret = dilithium_sample_in_ball(&key->shake, commit, params->lambda / 4, + params->tau, c, key->heap); } if ((ret == 0) && valid) { /* Step 10: w = NTT-1(A o NTT(z) - NTT(c) o NTT(t1)) */ @@ -6761,11 +7248,11 @@ static int dilithium_verify_msg(dilithium_key* key, const byte* msg, dilithium_vec_encode_w1(w, params->k, params->gamma2, w1e); /* Step 12: Hash mu and encoded w1. */ ret = dilithium_hash256(&key->shake, mu, DILITHIUM_MU_SZ, w1e, - params->w1EncSz, commit_calc, 2 * params->lambda); + params->w1EncSz, commit_calc, params->lambda / 4); } if ((ret == 0) && valid) { /* Step 13: Compare commit. */ - valid = (XMEMCMP(commit, commit_calc, 2 * params->lambda) == 0); + valid = (XMEMCMP(commit, commit_calc, params->lambda / 4) == 0); } *res = valid; @@ -6777,7 +7264,7 @@ static int dilithium_verify_msg(dilithium_key* key, const byte* msg, const byte* pub_seed = key->p; const byte* t1p = pub_seed + DILITHIUM_PUB_SEED_SZ; const byte* commit = sig; - const byte* ze = sig + params->lambda * 2; + const byte* ze = sig + params->lambda / 4; const byte* h = ze + params->zEncSz; sword32* t1 = NULL; sword32* a = NULL; @@ -6791,7 +7278,6 @@ static int dilithium_verify_msg(dilithium_key* key, const byte* msg, byte* block = NULL; #endif byte tr[DILITHIUM_TR_SZ]; - byte* mu = tr; byte* w1e = NULL; byte* commit_calc = tr; int valid = 0; @@ -6864,11 +7350,11 @@ static int dilithium_verify_msg(dilithium_key* key, const byte* msg, /* Step 9: Compute c from first 256 bits of commit. */ #ifdef WOLFSSL_DILITHIUM_VERIFY_NO_MALLOC - ret = dilithium_sample_in_ball_ex(&key->shake, commit, params->tau, c, - key->block); + ret = dilithium_sample_in_ball_ex(&key->shake, commit, + params->lambda / 4, params->tau, c, key->block); #else - ret = dilithium_sample_in_ball_ex(&key->shake, commit, params->tau, c, - block); + ret = dilithium_sample_in_ball_ex(&key->shake, commit, + params->lambda / 4, params->tau, c, block); #endif } if ((ret == 0) && valid) { @@ -7013,34 +7499,172 @@ static int dilithium_verify_msg(dilithium_key* key, const byte* msg, } } } - if ((ret == 0) && valid) { + if ((ret == 0) && valid) { + /* Step 6: Hash public key. */ + ret = dilithium_shake256(&key->shake, key->p, params->pkSz, tr, + DILITHIUM_TR_SZ); + } + if ((ret == 0) && valid) { + /* Step 12: Hash mu and encoded w1. */ + ret = dilithium_hash256(&key->shake, mu, DILITHIUM_MU_SZ, w1e, + params->w1EncSz, commit_calc, params->lambda / 4); + } + if ((ret == 0) && valid) { + /* Step 13: Compare commit. */ + valid = (XMEMCMP(commit, commit_calc, params->lambda / 4) == 0); + } + + *res = valid; +#ifndef WOLFSSL_DILITHIUM_VERIFY_NO_MALLOC + XFREE(z, key->heap, DYNAMIC_TYPE_DILITHIUM); +#endif + return ret; +#endif /* !WOLFSSL_DILITHIUM_VERIFY_SMALL_MEM */ +} + +/* Verify signature of message using public key. + * + * @param [in, out] key Dilithium key. + * @param [in] ctx Context of verification. + * @param [in] ctxLen Length of context in bytes. + * @param [in] msg Message to verify. + * @param [in] msgLen Length of message in bytes. + * @param [in] sig Signature to verify message. + * @param [in] sigLen Length of message in bytes. + * @param [out] res Result of verification. + * @return 0 on success. + * @return SIG_VERIFY_E when hint is malformed. + * @return BUFFER_E when the length of the signature does not match + * parameters. + * @return MEMORY_E when memory allocation fails. + * @return Other negative when an error occurs. + */ +static int dilithium_verify_ctx_msg(dilithium_key* key, const byte* ctx, + word32 ctxLen, const byte* msg, word32 msgLen, const byte* sig, + word32 sigLen, int* res) +{ + int ret = 0; + byte tr[DILITHIUM_TR_SZ]; + byte* mu = tr; + + if (key == NULL) { + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + /* Step 6: Hash public key. */ + ret = dilithium_shake256(&key->shake, key->p, key->params->pkSz, tr, + DILITHIUM_TR_SZ); + } + if (ret == 0) { + /* Step 6. Calculate mu. */ + ret = dilithium_hash256_ctx_msg(&key->shake, tr, DILITHIUM_TR_SZ, 0, + ctx, ctxLen, msg, msgLen, mu, DILITHIUM_MU_SZ); + } + if (ret == 0) { + ret = dilithium_verify_mu(key, mu, sig, sigLen, res); + } + + return ret; +} + +/* Verify signature of message using public key. + * + * @param [in, out] key Dilithium key. + * @param [in] msg Message to verify. + * @param [in] msgLen Length of message in bytes. + * @param [in] sig Signature to verify message. + * @param [in] sigLen Length of message in bytes. + * @param [out] res Result of verification. + * @return 0 on success. + * @return SIG_VERIFY_E when hint is malformed. + * @return BUFFER_E when the length of the signature does not match + * parameters. + * @return MEMORY_E when memory allocation fails. + * @return Other negative when an error occurs. + */ +static int dilithium_verify_msg(dilithium_key* key, const byte* msg, + word32 msgLen, const byte* sig, word32 sigLen, int* res) +{ + int ret = 0; + byte tr[DILITHIUM_TR_SZ]; + byte* mu = tr; + + if (key == NULL) { + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { /* Step 6: Hash public key. */ - ret = dilithium_shake256(&key->shake, key->p, params->pkSz, tr, + ret = dilithium_shake256(&key->shake, key->p, key->params->pkSz, tr, DILITHIUM_TR_SZ); } - if ((ret == 0) && valid) { - /* Step 7: Hash hash of public key and message. */ + if (ret == 0) { + /* Step 6. Calculate mu. */ ret = dilithium_hash256(&key->shake, tr, DILITHIUM_TR_SZ, msg, msgLen, mu, DILITHIUM_MU_SZ); } - if ((ret == 0) && valid) { - /* Step 12: Hash mu and encoded w1. */ - ret = dilithium_hash256(&key->shake, mu, DILITHIUM_MU_SZ, w1e, - params->w1EncSz, commit_calc, 2 * params->lambda); - } - if ((ret == 0) && valid) { - /* Step 13: Compare commit. */ - valid = (XMEMCMP(commit, commit_calc, 2 * params->lambda) == 0); + if (ret == 0) { + ret = dilithium_verify_mu(key, mu, sig, sigLen, res); } - *res = valid; -#ifndef WOLFSSL_DILITHIUM_VERIFY_NO_MALLOC - XFREE(z, key->heap, DYNAMIC_TYPE_DILITHIUM); -#endif return ret; -#endif /* !WOLFSSL_DILITHIUM_VERIFY_SMALL_MEM */ } +/* Verify signature of message using public key. + * + * @param [in, out] key Dilithium key. + * @param [in] ctx Context of verification. + * @param [in] ctxLen Length of context in bytes. + * @param [iu] hashAlg Hash algorithm used on message. + * @param [in] hash Hash of message to verify. + * @param [in] hashLen Length of message hash in bytes. + * @param [in] sig Signature to verify message. + * @param [in] sigLen Length of message in bytes. + * @param [out] res Result of verification. + * @return 0 on success. + * @return SIG_VERIFY_E when hint is malformed. + * @return BUFFER_E when the length of the signature does not match + * parameters. + * @return MEMORY_E when memory allocation fails. + * @return Other negative when an error occurs. + */ +static int dilithium_verify_ctx_hash(dilithium_key* key, const byte* ctx, + word32 ctxLen, int hashAlg, const byte* hash, word32 hashLen, + const byte* sig, word32 sigLen, int* res) +{ + int ret = 0; + byte tr[DILITHIUM_TR_SZ]; + byte* mu = tr; + byte oidMsgHash[DILITHIUM_HASH_OID_LEN + WC_MAX_DIGEST_SIZE]; + word32 oidMsgHashLen; + + if (key == NULL) { + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + /* Step 6: Hash public key. */ + ret = dilithium_shake256(&key->shake, key->p, key->params->pkSz, tr, + DILITHIUM_TR_SZ); + } + if (ret == 0) { + ret = dilithium_get_hash_oid(hashAlg, oidMsgHash, &oidMsgHashLen); + } + if (ret == 0) { + XMEMCPY(oidMsgHash + oidMsgHashLen, hash, hashLen); + oidMsgHashLen += hashLen; + + /* Step 6. Calculate mu. */ + ret = dilithium_hash256_ctx_msg(&key->shake, tr, DILITHIUM_TR_SZ, 1, + ctx, ctxLen, oidMsgHash, oidMsgHashLen, mu, DILITHIUM_MU_SZ); + } + if (ret == 0) { + ret = dilithium_verify_mu(key, mu, sig, sigLen, res); + } + + return ret; +} #endif /* WOLFSSL_DILITHIUM_NO_VERIFY */ #elif defined(HAVE_LIBOQS) @@ -7286,6 +7910,63 @@ int wc_dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) #endif #ifndef WOLFSSL_DILITHIUM_NO_SIGN +/* Sign the message using the dilithium private key. + * + * ctx [in] Context of signature. + * ctxLen [in] Length of context in bytes. + * msg [in] Message to sign. + * msgLen [in] Length of the message in bytes. + * sig [out] Buffer to write signature into. + * sigLen [in/out] On in, size of buffer. + * On out, the length of the signature in bytes. + * key [in] Dilithium key to use when signing + * returns BAD_FUNC_ARG when a parameter is NULL, public key not set + * or ctx is NULL and ctxLen is not 0, + * BUFFER_E when outLen is less than DILITHIUM_LEVEL2_SIG_SIZE, + * 0 otherwise. + */ +int wc_dilithium_sign_ctx_msg(const byte* ctx, byte ctxLen, const byte* msg, + word32 msgLen, byte* sig, word32 *sigLen, dilithium_key* key, WC_RNG* rng) +{ + int ret = 0; + + /* Validate parameters. */ + if ((msg == NULL) || (sig == NULL) || (sigLen == NULL) || (key == NULL)) { + ret = BAD_FUNC_ARG; + } + if ((ret == 0) && (ctx == NULL) && (ctxLen > 0)) { + ret = BAD_FUNC_ARG; + } + +#ifdef WOLF_CRYPTO_CB + if (ret == 0) { + #ifndef WOLF_CRYPTO_CB_FIND + if (key->devId != INVALID_DEVID) + #endif + { + ret = wc_CryptoCb_PqcSign(msg, msgLen, sig, sigLen, rng, + WC_PQC_SIG_TYPE_DILITHIUM, key); + if (ret != WC_NO_ERR_TRACE(CRYPTOCB_UNAVAILABLE)) + return ret; + /* fall-through when unavailable */ + ret = 0; + } + } +#endif + + if (ret == 0) { + /* Sign message. */ + #ifdef WOLFSSL_WC_DILITHIUM + ret = dilithium_sign_ctx_msg(key, rng, ctx, ctxLen, msg, msgLen, sig, + sigLen); + #elif defined(HAVE_LIBOQS) + ret = oqs_dilithium_sign_msg(msg, msgLen, sig, sigLen, key, rng); + #endif + } + + return ret; +} + /* Sign the message using the dilithium private key. * * msg [in] Message to sign. @@ -7336,6 +8017,97 @@ int wc_dilithium_sign_msg(const byte* msg, word32 msgLen, byte* sig, return ret; } +/* Sign the message hash using the dilithium private key. + * + * ctx [in] Context of signature. + * ctxLen [in] Length of context in bytes. + * hashAlg [in] Hash algorithm used on message. + * hash [in] Hash of message to sign. + * hashLen [in] Length of the message hash in bytes. + * sig [out] Buffer to write signature into. + * sigLen [in/out] On in, size of buffer. + * On out, the length of the signature in bytes. + * key [in] Dilithium key to use when signing + * returns BAD_FUNC_ARG when a parameter is NULL, public key not set + * or ctx is NULL and ctxLen is not 0, + * BUFFER_E when outLen is less than DILITHIUM_LEVEL2_SIG_SIZE, + * 0 otherwise. + */ +int wc_dilithium_sign_ctx_hash(const byte* ctx, byte ctxLen, int hashAlg, + const byte* hash, word32 hashLen, byte* sig, word32 *sigLen, + dilithium_key* key, WC_RNG* rng) +{ + int ret = 0; + + /* Validate parameters. */ + if ((hash == NULL) || (sig == NULL) || (sigLen == NULL) || (key == NULL)) { + ret = BAD_FUNC_ARG; + } + if ((ret == 0) && (ctx == NULL) && (ctxLen > 0)) { + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + /* Sign message. */ + #ifdef WOLFSSL_WC_DILITHIUM + ret = dilithium_sign_ctx_hash(key, rng, ctx, ctxLen, hashAlg, hash, + hashLen, sig, sigLen); + #elif defined(HAVE_LIBOQS) + ret = NOT_COMPILED_IN; + (void)hashAlg; + (void)hash; + (void)hashLen; + (void)rng; + #endif + } + + return ret; +} + +/* Sign the message using the dilithium private key. + * + * ctx [in] Context of signature. + * ctxLen [in] Length of context in bytes. + * msg [in] Message to sign. + * msgLen [in] Length of the message in bytes. + * sig [out] Buffer to write signature into. + * sigLen [in/out] On in, size of buffer. + * On out, the length of the signature in bytes. + * key [in] Dilithium key to use when signing + * returns BAD_FUNC_ARG when a parameter is NULL, public key not set + * or ctx is NULL and ctxLen is not 0, + * BUFFER_E when outLen is less than DILITHIUM_LEVEL2_SIG_SIZE, + * 0 otherwise. + */ +int wc_dilithium_sign_ctx_msg_with_seed(const byte* ctx, byte ctxLen, + const byte* msg, word32 msgLen, byte* sig, word32 *sigLen, + dilithium_key* key, const byte* seed) +{ + int ret = 0; + + /* Validate parameters. */ + if ((msg == NULL) || (sig == NULL) || (sigLen == NULL) || (key == NULL)) { + ret = BAD_FUNC_ARG; + } + if ((ret == 0) && (ctx == NULL) && (ctxLen > 0)) { + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + /* Sign message. */ + #ifdef WOLFSSL_WC_DILITHIUM + ret = dilithium_sign_ctx_msg_with_seed(key, seed, ctx, ctxLen, msg, + msgLen, sig, sigLen); + #elif defined(HAVE_LIBOQS) + ret = NOT_COMPILED_IN; + (void)msgLen; + (void)seed; + #endif + } + + return ret; +} + /* Sign the message using the dilithium private key. * * msg [in] Message to sign. @@ -7349,7 +8121,7 @@ int wc_dilithium_sign_msg(const byte* msg, word32 msgLen, byte* sig, * 0 otherwise. */ int wc_dilithium_sign_msg_with_seed(const byte* msg, word32 msgLen, byte* sig, - word32 *sigLen, dilithium_key* key, byte* seed) + word32 *sigLen, dilithium_key* key, const byte* seed) { int ret = 0; @@ -7371,9 +8143,100 @@ int wc_dilithium_sign_msg_with_seed(const byte* msg, word32 msgLen, byte* sig, return ret; } + +/* Sign the message using the dilithium private key. + * + * ctx [in] Context of signature. + * ctxLen [in] Length of context in bytes. + * hashAlg [in] Hash algorithm used on message. + * hash [in] Hash of message to sign. + * hashLen [in] Length of the message hash in bytes. + * sig [out] Buffer to write signature into. + * sigLen [in/out] On in, size of buffer. + * On out, the length of the signature in bytes. + * key [in] Dilithium key to use when signing + * returns BAD_FUNC_ARG when a parameter is NULL, public key not set + * or ctx is NULL and ctxLen is not 0, + * BUFFER_E when outLen is less than DILITHIUM_LEVEL2_SIG_SIZE, + * 0 otherwise. + */ +int wc_dilithium_sign_ctx_hash_with_seed(const byte* ctx, byte ctxLen, + int hashAlg, const byte* hash, word32 hashLen, byte* sig, word32 *sigLen, + dilithium_key* key, const byte* seed) +{ + int ret = 0; + + /* Validate parameters. */ + if ((hash == NULL) || (sig == NULL) || (sigLen == NULL) || (key == NULL)) { + ret = BAD_FUNC_ARG; + } + if ((ret == 0) && (ctx == NULL) && (ctxLen > 0)) { + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + /* Sign message. */ + #ifdef WOLFSSL_WC_DILITHIUM + ret = dilithium_sign_ctx_hash_with_seed(key, seed, ctx, ctxLen, + hashAlg, hash, hashLen, sig, sigLen); + #elif defined(HAVE_LIBOQS) + ret = NOT_COMPILED_IN; + (void)hashAlg; + (void)hash; + (void)hashLen; + (void)seed; + #endif + } + + return ret; +} #endif /* !WOLFSSL_DILITHIUM_NO_SIGN */ #ifndef WOLFSSL_DILITHIUM_NO_VERIFY +/* Verify the message using the dilithium public key. + * + * sig [in] Signature to verify. + * sigLen [in] Size of signature in bytes. + * ctx [in] Context of signature. + * ctxLen [in] Length of context in bytes. + * msg [in] Message to verify. + * msgLen [in] Length of the message in bytes. + * res [out] *res is set to 1 on successful verification. + * key [in] Dilithium key to use to verify. + * returns BAD_FUNC_ARG when a parameter is NULL, public key not set + * or ctx is NULL and ctxLen is not 0, + * BUFFER_E when sigLen is less than DILITHIUM_LEVEL2_SIG_SIZE, + * 0 otherwise. + */ +int wc_dilithium_verify_ctx_msg(const byte* sig, word32 sigLen, const byte* ctx, + word32 ctxLen, const byte* msg, word32 msgLen, int* res, dilithium_key* key) +{ + int ret = 0; + + /* Validate parameters. */ + if ((key == NULL) || (sig == NULL) || (msg == NULL) || (res == NULL)) { + ret = BAD_FUNC_ARG; + } + if ((ret == 0) && (ctx == NULL) && (ctxLen > 0)) { + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + /* Verify message with signature. */ + #ifdef WOLFSSL_WC_DILITHIUM + ret = dilithium_verify_ctx_msg(key, ctx, ctxLen, msg, msgLen, sig, + sigLen, res); + #elif defined(HAVE_LIBOQS) + ret = NOT_COMPILED_IN; + (void)sigLen; + (void)msgLen; + (void)res; + #endif + } + + return ret; +} + /* Verify the message using the dilithium public key. * * sig [in] Signature to verify. @@ -7423,6 +8286,53 @@ int wc_dilithium_verify_msg(const byte* sig, word32 sigLen, const byte* msg, return ret; } + +/* Verify the message using the dilithium public key. + * + * sig [in] Signature to verify. + * sigLen [in] Size of signature in bytes. + * ctx [in] Context of signature. + * ctxLen [in] Length of context in bytes. + * hashAlg [in] Hash algorithm used on message. + * hash [in] Hash of message to verify. + * hashLen [in] Length of the message hash in bytes. + * res [out] *res is set to 1 on successful verification. + * key [in] Dilithium key to use to verify. + * returns BAD_FUNC_ARG when a parameter is NULL, public key not set + * or ctx is NULL and ctxLen is not 0, + * BUFFER_E when sigLen is less than DILITHIUM_LEVEL2_SIG_SIZE, + * 0 otherwise. + */ +int wc_dilithium_verify_ctx_hash(const byte* sig, word32 sigLen, + const byte* ctx, word32 ctxLen, int hashAlg, const byte* hash, + word32 hashLen, int* res, dilithium_key* key) +{ + int ret = 0; + + /* Validate parameters. */ + if ((key == NULL) || (sig == NULL) || (hash == NULL) || (res == NULL)) { + ret = BAD_FUNC_ARG; + } + if ((ret == 0) && (ctx == NULL) && (ctxLen > 0)) { + ret = BAD_FUNC_ARG; + } + + if (ret == 0) { + /* Verify message with signature. */ + #ifdef WOLFSSL_WC_DILITHIUM + ret = dilithium_verify_ctx_hash(key, ctx, ctxLen, hashAlg, hash, + hashLen, sig, sigLen, res); + #elif defined(HAVE_LIBOQS) + ret = NOT_COMPILED_IN; + (void)sigLen; + (void)hashAlg; + (void)hash; + (void)hashLen; + #endif + } + + return ret; +} #endif /* WOLFSSL_DILITHIUM_NO_VERIFY */ /* Initialize the dilithium private/public key. @@ -7649,7 +8559,7 @@ void wc_dilithium_free(dilithium_key* key) */ int wc_dilithium_size(dilithium_key* key) { - int ret = BAD_FUNC_ARG; + int ret = WC_NO_ERR_TRACE(BAD_FUNC_ARG); if (key != NULL) { if (key->level == WC_ML_DSA_44) { @@ -7675,7 +8585,7 @@ int wc_dilithium_size(dilithium_key* key) */ int wc_dilithium_priv_size(dilithium_key* key) { - int ret = BAD_FUNC_ARG; + int ret = WC_NO_ERR_TRACE(BAD_FUNC_ARG); if (key != NULL) { if (key->level == WC_ML_DSA_44) { @@ -7722,7 +8632,7 @@ int wc_MlDsaKey_GetPrivLen(MlDsaKey* key, int* len) */ int wc_dilithium_pub_size(dilithium_key* key) { - int ret = BAD_FUNC_ARG; + int ret = WC_NO_ERR_TRACE(BAD_FUNC_ARG); if (key != NULL) { if (key->level == WC_ML_DSA_44) { @@ -7768,7 +8678,7 @@ int wc_MlDsaKey_GetPubLen(MlDsaKey* key, int* len) */ int wc_dilithium_sig_size(dilithium_key* key) { - int ret = BAD_FUNC_ARG; + int ret = WC_NO_ERR_TRACE(BAD_FUNC_ARG); if (key != NULL) { if (key->level == WC_ML_DSA_44) { @@ -7934,8 +8844,8 @@ int wc_dilithium_check_key(dilithium_key* key) } } - /* Dispose of allocated memory. */ - if (s1 != NULL) { + if (key != NULL) { + /* Dispose of allocated memory. */ XFREE(s1, key->heap, DYNAMIC_TYPE_DILITHIUM); } #else @@ -8802,7 +9712,7 @@ int wc_Dilithium_PublicKeyToDer(dilithium_key* key, byte* output, word32 len, */ int wc_Dilithium_KeyToDer(dilithium_key* key, byte* output, word32 len) { - int ret = BAD_FUNC_ARG; + int ret = WC_NO_ERR_TRACE(BAD_FUNC_ARG); /* Validate parameters and check public and private key set. */ if ((key != NULL) && key->prvKeySet && key->pubKeySet) { @@ -8838,7 +9748,7 @@ int wc_Dilithium_KeyToDer(dilithium_key* key, byte* output, word32 len) */ int wc_Dilithium_PrivateKeyToDer(dilithium_key* key, byte* output, word32 len) { - int ret = BAD_FUNC_ARG; + int ret = WC_NO_ERR_TRACE(BAD_FUNC_ARG); /* Validate parameters and check private key set. */ if ((key != NULL) && key->prvKeySet) { diff --git a/wolfcrypt/src/ecc.c b/wolfcrypt/src/ecc.c index 1d5e8135c4..eeb91c2ba8 100644 --- a/wolfcrypt/src/ecc.c +++ b/wolfcrypt/src/ecc.c @@ -2491,8 +2491,7 @@ static int _ecc_projective_dbl_point(ecc_point *P, ecc_point *R, mp_int* a, } if (err == MP_OKAY && mp_iszero((MP_INT_SIZE*)t2)) { /* T2 = X * X */ - if (err == MP_OKAY) - err = mp_sqr(x, t2); + err = mp_sqr(x, t2); if (err == MP_OKAY) err = mp_montgomery_reduce(t2, modulus, mp); /* T1 = T2 + T1 */ @@ -2506,8 +2505,7 @@ static int _ecc_projective_dbl_point(ecc_point *P, ecc_point *R, mp_int* a, /* use "a" in calc */ /* T2 = T1 * T1 */ - if (err == MP_OKAY) - err = mp_sqr(t1, t2); + err = mp_sqr(t1, t2); if (err == MP_OKAY) err = mp_montgomery_reduce(t2, modulus, mp); /* T1 = T2 * a */ @@ -3653,17 +3651,12 @@ static void ecc_key_tmp_final(ecc_key* key, void* heap) FREE_MP_INT_SIZE(key->t1, heap, DYNAMIC_TYPE_ECC); #else #ifdef ALT_ECC_SIZE - if (key->z != NULL) - XFREE(key->z, heap, DYNAMIC_TYPE_ECC); - if (key->y != NULL) - XFREE(key->y, heap, DYNAMIC_TYPE_ECC); - if (key->x != NULL) - XFREE(key->x, heap, DYNAMIC_TYPE_ECC); + XFREE(key->z, heap, DYNAMIC_TYPE_ECC); + XFREE(key->y, heap, DYNAMIC_TYPE_ECC); + XFREE(key->x, heap, DYNAMIC_TYPE_ECC); #endif - if (key->t2 != NULL) - XFREE(key->t2, heap, DYNAMIC_TYPE_ECC); - if (key->t1 != NULL) - XFREE(key->t1, heap, DYNAMIC_TYPE_ECC); + XFREE(key->t2, heap, DYNAMIC_TYPE_ECC); + XFREE(key->t1, heap, DYNAMIC_TYPE_ECC); #endif } #endif /* WOLFSSL_SMALL_STACK_CACHE */ @@ -4981,8 +4974,7 @@ int wc_ecc_shared_secret_gen_sync(ecc_key* private_key, ecc_point* point, if (k == k_lcl) mp_clear(k); #ifdef WOLFSSL_SMALL_STACK - if (k_lcl != NULL) - XFREE(k_lcl, private_key->heap, DYNAMIC_TYPE_ECC_BUFFER); + XFREE(k_lcl, private_key->heap, DYNAMIC_TYPE_ECC_BUFFER); #endif #endif @@ -5526,7 +5518,7 @@ static int ecc_make_pub_ex(ecc_key* key, ecc_curve_spec* curve, /* Map in a separate call as this should be constant time */ err = wc_ecc_mulmod_ex2(ecc_get_k(key), base, pub, curve->Af, curve->prime, curve->order, rng, 0, key->heap); - if (err == MP_MEM) { + if (err == WC_NO_ERR_TRACE(MP_MEM)) { err = MEMORY_E; } } @@ -5542,7 +5534,7 @@ static int ecc_make_pub_ex(ecc_key* key, ecc_curve_spec* curve, if (err != MP_OKAY #ifdef WOLFSSL_ASYNC_CRYPT - && err != WC_PENDING_E + && err != WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { /* clean up if failed */ @@ -5996,7 +5988,7 @@ static int _ecc_make_key_ex(WC_RNG* rng, int keysize, ecc_key* key, if (err == MP_OKAY #ifdef WOLFSSL_ASYNC_CRYPT - || err == WC_PENDING_E + || err == WC_NO_ERR_TRACE(WC_PENDING_E) #endif ) { key->type = ECC_PRIVATEKEY; @@ -7619,14 +7611,10 @@ int wc_ecc_gen_deterministic_k(const byte* hash, word32 hashSz, /* bail out if any error has been hit at this point */ if (ret != 0) { - if (x != NULL) - XFREE(x, heap, DYNAMIC_TYPE_PRIVATE_KEY); - if (K != NULL) - XFREE(K, heap, DYNAMIC_TYPE_ECC_BUFFER); - if (V != NULL) - XFREE(V, heap, DYNAMIC_TYPE_ECC_BUFFER); - if (h1 != NULL) - XFREE(h1, heap, DYNAMIC_TYPE_DIGEST); + XFREE(x, heap, DYNAMIC_TYPE_PRIVATE_KEY); + XFREE(K, heap, DYNAMIC_TYPE_ECC_BUFFER); + XFREE(V, heap, DYNAMIC_TYPE_ECC_BUFFER); + XFREE(h1, heap, DYNAMIC_TYPE_DIGEST); return ret; } #endif @@ -7779,16 +7767,11 @@ int wc_ecc_gen_deterministic_k(const byte* hash, word32 hashSz, ForceZero(x, MAX_ECC_BYTES); #ifdef WOLFSSL_SMALL_STACK - if (z1 != NULL) - XFREE(z1, heap, DYNAMIC_TYPE_ECC_BUFFER); - if (x != NULL) - XFREE(x, heap, DYNAMIC_TYPE_PRIVATE_KEY); - if (K != NULL) - XFREE(K, heap, DYNAMIC_TYPE_ECC_BUFFER); - if (V != NULL) - XFREE(V, heap, DYNAMIC_TYPE_ECC_BUFFER); - if (h1 != NULL) - XFREE(h1, heap, DYNAMIC_TYPE_DIGEST); + XFREE(z1, heap, DYNAMIC_TYPE_ECC_BUFFER); + XFREE(x, heap, DYNAMIC_TYPE_PRIVATE_KEY); + XFREE(K, heap, DYNAMIC_TYPE_ECC_BUFFER); + XFREE(V, heap, DYNAMIC_TYPE_ECC_BUFFER); + XFREE(h1, heap, DYNAMIC_TYPE_DIGEST); #elif defined(WOLFSSL_CHECK_MEM_ZERO) wc_MemZero_Check(x, MAX_ECC_BYTES); #endif @@ -9540,12 +9523,8 @@ int wc_ecc_import_point_der_ex(const byte* in, word32 inLen, } #ifdef WOLFSSL_SMALL_STACK - if (t1 != NULL) { - XFREE(t1, NULL, DYNAMIC_TYPE_BIGINT); - } - if (t2 != NULL) { - XFREE(t2, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(t1, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(t2, NULL, DYNAMIC_TYPE_BIGINT); #endif wc_ecc_curve_free(curve); @@ -10811,12 +10790,8 @@ int wc_ecc_import_x963_ex(const byte* in, word32 inLen, ecc_key* key, mp_clear(t1); } #ifdef WOLFSSL_SMALL_STACK - if (t1 != NULL) { - XFREE(t1, NULL, DYNAMIC_TYPE_BIGINT); - } - if (t2 != NULL) { - XFREE(t2, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(t1, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(t2, NULL, DYNAMIC_TYPE_BIGINT); #endif wc_ecc_curve_free(curve); @@ -14879,9 +14854,7 @@ int wc_ecc_decrypt(ecc_key* privKey, ecc_key* pubKey, const byte* msg, #endif #ifdef WOLFSSL_SMALL_STACK #ifndef WOLFSSL_ECIES_OLD - if (peerKey != NULL) { - XFREE(peerKey, ctx->heap, DYNAMIC_TYPE_ECC_BUFFER); - } + XFREE(peerKey, ctx->heap, DYNAMIC_TYPE_ECC_BUFFER); #endif XFREE(sharedSecret, ctx->heap, DYNAMIC_TYPE_ECC_BUFFER); XFREE(keys, ctx->heap, DYNAMIC_TYPE_ECC_BUFFER); diff --git a/wolfcrypt/src/error.c b/wolfcrypt/src/error.c index 3a1ae2151d..11f56d31f2 100644 --- a/wolfcrypt/src/error.c +++ b/wolfcrypt/src/error.c @@ -42,7 +42,19 @@ WOLFSSL_ABI const char* wc_GetErrorString(int error) { - switch (error) { + switch ((enum wolfCrypt_ErrorCodes)error) { + + case MP_MEM : + return "MP integer dynamic memory allocation failed"; + + case MP_VAL : + return "MP integer invalid argument"; + + case MP_WOULDBLOCK : + return "MP integer non-blocking operation would block"; + + case MP_NOT_INF: + return "MP point not at infinity"; case OPEN_RAN_E : return "opening random device error"; @@ -630,6 +642,8 @@ const char* wc_GetErrorString(int error) case PBKDF2_KAT_FIPS_E: return "wolfCrypt FIPS PBKDF2 Known Answer Test Failure"; + case MAX_CODE_E: + case MIN_CODE_E: default: return "unknown error number"; diff --git a/wolfcrypt/src/evp.c b/wolfcrypt/src/evp.c index b53d6eca97..b8bd891704 100644 --- a/wolfcrypt/src/evp.c +++ b/wolfcrypt/src/evp.c @@ -283,6 +283,40 @@ static const struct s_ent { static const char EVP_NULL[] = "NULL"; +static const struct pkey_type_name_ent { + int type; + const char *name; +} pkey_type_names[] = { + { EVP_PKEY_RSA, "RSA" }, + { EVP_PKEY_EC, "EC" }, + { EVP_PKEY_DH, "DH" }, + { EVP_PKEY_DSA, "DSA" } +}; + +static int pkey_type_by_name(const char *name) { + unsigned int i; + if (name == NULL) + return EVP_PKEY_NONE; + for (i = 0; i < XELEM_CNT(pkey_type_names); ++i) { + if (XSTRCMP(name, pkey_type_names[i].name) == 0) + return pkey_type_names[i].type; + } + return EVP_PKEY_NONE; +} + +int wolfSSL_EVP_PKEY_is_a(const WOLFSSL_EVP_PKEY *pkey, const char *name) { + int type; + + if (pkey == NULL) + return WOLFSSL_FAILURE; + + type = pkey_type_by_name(name); + if (type == EVP_PKEY_NONE) + return WOLFSSL_FAILURE; + + return (pkey->type == type) ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE; +} + #define EVP_CIPHER_TYPE_MATCHES(x, y) (XSTRCMP(x,y) == 0) #define EVP_PKEY_PRINT_LINE_WIDTH_MAX 80 @@ -364,6 +398,9 @@ int wolfSSL_EVP_Cipher_key_length(const WOLFSSL_EVP_CIPHER* c) case DES_ECB_TYPE: return 8; case DES_EDE3_ECB_TYPE: return 24; #endif + #ifndef NO_RC4 + case ARC4_TYPE: return 16; + #endif #if defined(HAVE_CHACHA) && defined(HAVE_POLY1305) case CHACHA20_POLY1305_TYPE: return 32; #endif @@ -452,7 +489,7 @@ void wolfSSL_EVP_CIPHER_CTX_free(WOLFSSL_EVP_CIPHER_CTX *ctx) int wolfSSL_EVP_CIPHER_CTX_reset(WOLFSSL_EVP_CIPHER_CTX *ctx) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); if (ctx != NULL) { WOLFSSL_ENTER("wolfSSL_EVP_CIPHER_CTX_reset"); @@ -1688,7 +1725,7 @@ int wolfSSL_EVP_DecryptFinal_legacy(WOLFSSL_EVP_CIPHER_CTX *ctx, { int fl; if (ctx == NULL || out == NULL || outl == NULL) - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; WOLFSSL_ENTER("wolfSSL_EVP_DecryptFinal_legacy"); if (ctx->block_size == 1) { @@ -1727,7 +1764,7 @@ int wolfSSL_EVP_DecryptFinal_legacy(WOLFSSL_EVP_CIPHER_CTX *ctx, int wolfSSL_EVP_CIPHER_CTX_block_size(const WOLFSSL_EVP_CIPHER_CTX *ctx) { - if (ctx == NULL) return BAD_FUNC_ARG; + if (ctx == NULL) return WOLFSSL_FAILURE; switch (ctx->cipherType) { #if !defined(NO_AES) || !defined(NO_DES3) || defined(WOLFSSL_SM4) #if !defined(NO_AES) @@ -2009,7 +2046,7 @@ static unsigned int cipherType(const WOLFSSL_EVP_CIPHER *cipher) int wolfSSL_EVP_CIPHER_block_size(const WOLFSSL_EVP_CIPHER *cipher) { if (cipher == NULL) - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; switch (cipherType(cipher)) { #if !defined(NO_AES) @@ -2269,7 +2306,7 @@ int wolfSSL_EVP_CIPHER_CTX_set_padding(WOLFSSL_EVP_CIPHER_CTX *ctx, int padding) { if (ctx == NULL) - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; if (padding) { ctx->flags &= (unsigned long)~WOLFSSL_EVP_CIPH_NO_PADDING; } @@ -2281,9 +2318,10 @@ int wolfSSL_EVP_CIPHER_CTX_set_padding(WOLFSSL_EVP_CIPHER_CTX *ctx, int wolfSSL_EVP_add_digest(const WOLFSSL_EVP_MD *digest) { - (void)digest; /* nothing to do */ - return 0; + if (digest == NULL) + return WOLFSSL_FAILURE; + return WOLFSSL_SUCCESS; } @@ -2679,9 +2717,7 @@ int wolfSSL_EVP_PKEY_CTX_set1_hkdf_salt(WOLFSSL_EVP_PKEY_CTX* ctx, } if (ret == WOLFSSL_SUCCESS && salt != NULL && saltSz > 0) { - if (ctx->pkey->hkdfSalt != NULL) { - XFREE(ctx->pkey->hkdfSalt, NULL, DYNAMIC_TYPE_SALT); - } + XFREE(ctx->pkey->hkdfSalt, NULL, DYNAMIC_TYPE_SALT); ctx->pkey->hkdfSalt = (byte*)XMALLOC((size_t)saltSz, NULL, DYNAMIC_TYPE_SALT); if (ctx->pkey->hkdfSalt == NULL) { @@ -2716,9 +2752,7 @@ int wolfSSL_EVP_PKEY_CTX_set1_hkdf_key(WOLFSSL_EVP_PKEY_CTX* ctx, } if (ret == WOLFSSL_SUCCESS) { - if (ctx->pkey->hkdfKey != NULL) { - XFREE(ctx->pkey->hkdfKey, NULL, DYNAMIC_TYPE_KEY); - } + XFREE(ctx->pkey->hkdfKey, NULL, DYNAMIC_TYPE_KEY); ctx->pkey->hkdfKey = (byte*)XMALLOC((size_t)keySz, NULL, DYNAMIC_TYPE_KEY); if (ctx->pkey->hkdfKey == NULL) { @@ -3110,7 +3144,7 @@ int wolfSSL_EVP_PKEY_sign(WOLFSSL_EVP_PKEY_CTX *ctx, unsigned char *sig, if (!ctx->pkey->dsa) return WOLFSSL_FAILURE; bytes = wolfSSL_BN_num_bytes(ctx->pkey->dsa->q); - if (bytes == WOLFSSL_FAILURE) + if (bytes == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) return WOLFSSL_FAILURE; bytes *= 2; if (!sig) { @@ -3123,7 +3157,7 @@ int wolfSSL_EVP_PKEY_sign(WOLFSSL_EVP_PKEY_CTX *ctx, unsigned char *sig, /* wolfSSL_DSA_do_sign() can return WOLFSSL_FATAL_ERROR */ if (ret != WOLFSSL_SUCCESS) return ret; - if (bytes == WOLFSSL_FAILURE) + if (bytes == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) return WOLFSSL_FAILURE; *siglen = (size_t)bytes; return WOLFSSL_SUCCESS; @@ -3404,14 +3438,14 @@ int wolfSSL_EVP_PKEY_keygen_init(WOLFSSL_EVP_PKEY_CTX *ctx) int wolfSSL_EVP_PKEY_keygen(WOLFSSL_EVP_PKEY_CTX *ctx, WOLFSSL_EVP_PKEY **ppkey) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); int ownPkey = 0; WOLFSSL_EVP_PKEY* pkey; WOLFSSL_ENTER("wolfSSL_EVP_PKEY_keygen"); if (ctx == NULL || ppkey == NULL) { - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; } pkey = *ppkey; @@ -3421,7 +3455,7 @@ int wolfSSL_EVP_PKEY_keygen(WOLFSSL_EVP_PKEY_CTX *ctx, ctx->pkey->type != EVP_PKEY_RSA && ctx->pkey->type != EVP_PKEY_DH)) { WOLFSSL_MSG("Key not set or key type not supported"); - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; } pkey = wolfSSL_EVP_PKEY_new(); if (pkey == NULL) { @@ -3809,7 +3843,7 @@ static int DH_param_check(WOLFSSL_DH* dh_key) } else if (ret == WOLFSSL_SUCCESS && - wolfSSL_BN_is_one(num1) == WOLFSSL_FAILURE) { + wolfSSL_BN_is_one(num1) == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) { WOLFSSL_MSG("dh_key->g is not suitable generator"); ret = WOLFSSL_FAILURE; } @@ -3957,7 +3991,7 @@ int wolfSSL_EVP_SignFinal(WOLFSSL_EVP_MD_CTX *ctx, unsigned char *sigret, (void)siglen; WOLFSSL_ENTER("EVP_SignFinal"); - if (ctx == NULL) + if (ctx == NULL || sigret == NULL || siglen == NULL || pkey == NULL) return WOLFSSL_FAILURE; ret = wolfSSL_EVP_DigestFinal(ctx, md, &mdsize); @@ -3989,15 +4023,32 @@ int wolfSSL_EVP_SignFinal(WOLFSSL_EVP_MD_CTX *ctx, unsigned char *sigret, if (ret != WOLFSSL_SUCCESS) return ret; bytes = wolfSSL_BN_num_bytes(pkey->dsa->q); - if (bytes == WOLFSSL_FAILURE || (int)*siglen < bytes * 2) + if (bytes == WC_NO_ERR_TRACE(WOLFSSL_FAILURE) || + (int)*siglen < bytes * 2) + { return WOLFSSL_FAILURE; + } *siglen = (unsigned int)(bytes * 2); return WOLFSSL_SUCCESS; } #endif - case EVP_PKEY_EC: - WOLFSSL_MSG("not implemented"); - FALL_THROUGH; +#ifdef HAVE_ECC + case EVP_PKEY_EC: { + WOLFSSL_ECDSA_SIG *ecdsaSig = wolfSSL_ECDSA_do_sign(md, (int)mdsize, + pkey->ecc); + if (ecdsaSig == NULL) + return WOLFSSL_FAILURE; + ret = wolfSSL_i2d_ECDSA_SIG(ecdsaSig, NULL); + if (ret <= 0 || ret > (int)*siglen) + return WOLFSSL_FAILURE; + ret = wolfSSL_i2d_ECDSA_SIG(ecdsaSig, &sigret); + wolfSSL_ECDSA_SIG_free(ecdsaSig); + if (ret <= 0 || ret > (int)*siglen) + return WOLFSSL_FAILURE; + *siglen = (unsigned int)ret; + return WOLFSSL_SUCCESS; + } +#endif default: break; } @@ -4055,7 +4106,8 @@ int wolfSSL_EVP_VerifyFinal(WOLFSSL_EVP_MD_CTX *ctx, if (ctx == NULL) return WOLFSSL_FAILURE; WOLFSSL_ENTER("EVP_VerifyFinal"); ret = wolfSSL_EVP_DigestFinal(ctx, md, &mdsize); - if (ret <= 0) return ret; + if (ret <= 0) + return ret; (void)sig; (void)siglen; @@ -4072,9 +4124,19 @@ int wolfSSL_EVP_VerifyFinal(WOLFSSL_EVP_MD_CTX *ctx, (unsigned int)siglen, pkey->rsa); } #endif /* NO_RSA */ - +#ifdef HAVE_ECC + case EVP_PKEY_EC: { + WOLFSSL_ECDSA_SIG *ecdsaSig = wolfSSL_d2i_ECDSA_SIG( + NULL, (const unsigned char **)&sig, (long)siglen); + if (ecdsaSig == NULL) + return WOLFSSL_FAILURE; + ret = wolfSSL_ECDSA_do_verify(md, (int)mdsize, ecdsaSig, + pkey->ecc); + wolfSSL_ECDSA_SIG_free(ecdsaSig); + return ret; + } +#endif case EVP_PKEY_DSA: - case EVP_PKEY_EC: WOLFSSL_MSG("not implemented"); FALL_THROUGH; default: @@ -4085,9 +4147,10 @@ int wolfSSL_EVP_VerifyFinal(WOLFSSL_EVP_MD_CTX *ctx, int wolfSSL_EVP_add_cipher(const WOLFSSL_EVP_CIPHER *cipher) { - (void)cipher; /* nothing to do */ - return 0; + if (cipher == NULL) + return WOLFSSL_FAILURE; + return WOLFSSL_SUCCESS; } @@ -4144,7 +4207,7 @@ WOLFSSL_EVP_PKEY* wolfSSL_EVP_PKEY_new_CMAC_key(WOLFSSL_ENGINE* e, } ret = wolfSSL_CMAC_Init(ctx, priv, len, cipher, e); - if (ret == WOLFSSL_FAILURE) { + if (ret == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) { wolfSSL_CMAC_CTX_free(ctx); WOLFSSL_LEAVE("wolfSSL_EVP_PKEY_new_CMAC_key", 0); return NULL; @@ -4286,7 +4349,7 @@ static int wolfSSL_evp_digest_pk_init(WOLFSSL_EVP_MD_CTX *ctx, } type = wolfSSL_EVP_get_digestbynid(default_digest); if (type == NULL) { - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; } } @@ -4478,7 +4541,7 @@ int wolfSSL_EVP_DigestSignInit(WOLFSSL_EVP_MD_CTX *ctx, WOLFSSL_ENTER("EVP_DigestSignInit"); if (ctx == NULL || pkey == NULL) - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; return wolfSSL_evp_digest_pk_init(ctx, pctx, type, e, pkey); } @@ -4490,7 +4553,7 @@ int wolfSSL_EVP_DigestSignUpdate(WOLFSSL_EVP_MD_CTX *ctx, const void *d, WOLFSSL_ENTER("EVP_DigestSignUpdate"); if (ctx == NULL || d == NULL) - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; return wolfssl_evp_digest_pk_update(ctx, d, cnt); } @@ -4603,7 +4666,7 @@ int wolfSSL_EVP_DigestVerifyInit(WOLFSSL_EVP_MD_CTX *ctx, WOLFSSL_ENTER("EVP_DigestVerifyInit"); if (ctx == NULL || type == NULL || pkey == NULL) - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; return wolfSSL_evp_digest_pk_init(ctx, pctx, type, e, pkey); } @@ -4615,7 +4678,7 @@ int wolfSSL_EVP_DigestVerifyUpdate(WOLFSSL_EVP_MD_CTX *ctx, const void *d, WOLFSSL_ENTER("EVP_DigestVerifyUpdate"); if (ctx == NULL || d == NULL) - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; return wolfssl_evp_digest_pk_update(ctx, d, (unsigned int)cnt); } @@ -4756,7 +4819,7 @@ int wolfSSL_EVP_DigestVerifyFinal(WOLFSSL_EVP_MD_CTX *ctx, int wolfSSL_EVP_read_pw_string(char* buf, int bufSz, const char* banner, int v) { printf("%s", banner); - if (XGETPASSWD(buf, bufSz) == WOLFSSL_FAILURE) { + if (XGETPASSWD(buf, bufSz) == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) { return -1; } (void)v; /* fgets always sanity checks size of input vs buffer */ @@ -5913,7 +5976,7 @@ void wolfSSL_EVP_init(void) int wolfSSL_EVP_CIPHER_CTX_ctrl(WOLFSSL_EVP_CIPHER_CTX *ctx, int type, \ int arg, void *ptr) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); #if defined(HAVE_AESGCM) || (defined(HAVE_CHACHA) && defined(HAVE_POLY1305)) #ifndef WC_NO_RNG WC_RNG rng; @@ -6298,15 +6361,11 @@ void wolfSSL_EVP_init(void) ctx->keyLen = 0; #if defined(HAVE_AESGCM) || defined(HAVE_AESCCM) || defined(HAVE_ARIA) || \ defined(WOLFSSL_SM4_GCM) || defined(WOLFSSL_SM4_CCM) - if (ctx->authBuffer) { - XFREE(ctx->authBuffer, NULL, DYNAMIC_TYPE_OPENSSL); - ctx->authBuffer = NULL; - } + XFREE(ctx->authBuffer, NULL, DYNAMIC_TYPE_OPENSSL); + ctx->authBuffer = NULL; ctx->authBufferLen = 0; - if (ctx->authIn) { - XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL); - ctx->authIn = NULL; - } + XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL); + ctx->authIn = NULL; ctx->authInSz = 0; ctx->authIvGenEnable = 0; ctx->authIncIv = 0; @@ -6361,7 +6420,7 @@ void wolfSSL_EVP_init(void) } ret = wolfSSL_EVP_get_hashinfo(md, &hashType, NULL); - if (ret == WOLFSSL_FAILURE) + if (ret == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) goto end; ret = wc_PBKDF1_ex(key, (int)info->keySz, iv, (int)info->ivSz, data, sz, @@ -6428,10 +6487,8 @@ void wolfSSL_EVP_init(void) { int ret = WOLFSSL_SUCCESS; - if (ctx->authIn) { - XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL); - ctx->authIn = NULL; - } + XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL); + ctx->authIn = NULL; ctx->authInSz = 0; ctx->block_size = AES_BLOCK_SIZE; @@ -6520,7 +6577,7 @@ void wolfSSL_EVP_init(void) static int EvpCipherAesGCM(WOLFSSL_EVP_CIPHER_CTX* ctx, byte* dst, byte* src, word32 len) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); #ifndef WOLFSSL_AESGCM_STREAM /* No destination means only AAD. */ @@ -6635,10 +6692,8 @@ void wolfSSL_EVP_init(void) { int ret = WOLFSSL_SUCCESS; - if (ctx->authIn) { - XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL); - ctx->authIn = NULL; - } + XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL); + ctx->authIn = NULL; ctx->authInSz = 0; ctx->block_size = AES_BLOCK_SIZE; @@ -6714,7 +6769,7 @@ void wolfSSL_EVP_init(void) static int EvpCipherAesCCM(WOLFSSL_EVP_CIPHER_CTX* ctx, byte* dst, byte* src, word32 len) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); /* No destination means only AAD. */ if (src != NULL && dst == NULL) { @@ -6786,10 +6841,8 @@ void wolfSSL_EVP_init(void) return WOLFSSL_FAILURE; } - if (ctx->authIn) { - XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL); - ctx->authIn = NULL; - } + XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL); + ctx->authIn = NULL; ctx->authInSz = 0; ctx->block_size = AES_BLOCK_SIZE; @@ -7821,10 +7874,8 @@ void wolfSSL_EVP_init(void) ctx->ivSz = GCM_NONCE_MID_SZ; } ctx->authTagSz = SM4_BLOCK_SIZE; - if (ctx->authIn) { - XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL); - ctx->authIn = NULL; - } + XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL); + ctx->authIn = NULL; ctx->authInSz = 0; if (enc == 0 || enc == 1) ctx->enc = enc ? 1 : 0; @@ -7853,10 +7904,8 @@ void wolfSSL_EVP_init(void) ctx->ivSz = GCM_NONCE_MID_SZ; } ctx->authTagSz = SM4_BLOCK_SIZE; - if (ctx->authIn) { - XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL); - ctx->authIn = NULL; - } + XFREE(ctx->authIn, NULL, DYNAMIC_TYPE_OPENSSL); + ctx->authIn = NULL; ctx->authInSz = 0; if (enc == 0 || enc == 1) ctx->enc = enc ? 1 : 0; @@ -8224,7 +8273,7 @@ void wolfSSL_EVP_init(void) int wolfSSL_EVP_Cipher(WOLFSSL_EVP_CIPHER_CTX* ctx, byte* dst, byte* src, word32 len) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_ENTER("wolfSSL_EVP_Cipher"); @@ -9304,7 +9353,7 @@ const WOLFSSL_EVP_MD* wolfSSL_EVP_ripemd160(void) int wolfSSL_EVP_MD_pkey_type(const WOLFSSL_EVP_MD* type) { - int ret = WC_NO_ERR_TRACE(BAD_FUNC_ARG); + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_ENTER("wolfSSL_EVP_MD_pkey_type"); @@ -9329,7 +9378,7 @@ int wolfSSL_EVP_MD_pkey_type(const WOLFSSL_EVP_MD* type) } } else { - ret = BAD_FUNC_ARG; + ret = WOLFSSL_FAILURE; } WOLFSSL_LEAVE("wolfSSL_EVP_MD_pkey_type", ret); @@ -9873,10 +9922,24 @@ static const struct alias { const char *alias; } digest_alias_tbl[] = { - {"MD4", "ssl3-md4"}, - {"MD5", "ssl3-md5"}, - {"SHA1", "ssl3-sha1"}, + {"MD4", "md4"}, + {"MD5", "md5"}, + {"SHA1", "sha1"}, {"SHA1", "SHA"}, + {"SHA224", "sha224"}, + {"SHA256", "sha256"}, + {"SHA384", "sha384"}, + {"SHA512", "sha512"}, + {"SHA512_224", "sha512_224"}, + {"SHA3_224", "sha3_224"}, + {"SHA3_256", "sha3_256"}, + {"SHA3_384", "sha3_384"}, + {"SHA3_512", "sha3_512"}, + {"SM3", "sm3"}, + {"BLAKE2B512", "blake2b512"}, + {"BLAKE2S256", "blake2s256"}, + {"SHAKE128", "shake128"}, + {"SHAKE256", "shake256"}, { NULL, NULL} }; @@ -10205,7 +10268,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD* type) * @param n message digest type name * @return alias name, otherwise NULL */ - static const char* hasAliasName(const char* n) + static const char* getMdAliasName(const char* n) { const char* aliasnm = NULL; @@ -10236,23 +10299,15 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD* type) { struct do_all_md *md = (struct do_all_md*)arg; - const struct s_ent *ent; - /* sanity check */ if (md == NULL || nm == NULL || md->fn == NULL || nm->type != WOLFSSL_OBJ_NAME_TYPE_MD_METH) return; - /* loop all md */ - for (ent = md_tbl; ent->name != NULL; ent++){ - /* check if the md has alias */ - if(hasAliasName(ent->name) != NULL) { - md->fn(NULL, ent->name, ent->name, md->arg); - } - else { - md->fn(ent->name, ent->name, NULL, md->arg); - } - } + if (nm->alias) + md->fn(NULL, nm->name, nm->data, md->arg); + else + md->fn((const EVP_MD *)nm->data, nm->name, NULL, md->arg); } /* call md_do_all function to do all md algorithm via a callback function @@ -10287,11 +10342,30 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD* type) if (!fn) return; - objnm.type = type; - switch(type) { case WOLFSSL_OBJ_NAME_TYPE_MD_METH: - fn(&objnm, arg); + { + const struct s_ent *ent; + /* loop all md */ + for (ent = md_tbl; ent->name != NULL; ent++){ + XMEMSET(&objnm, 0, sizeof(objnm)); + + /* populate objnm with info about the md */ + objnm.type = WOLFSSL_OBJ_NAME_TYPE_MD_METH; + objnm.name = ent->name; + objnm.data = (const char*) + wolfSSL_EVP_get_digestbyname(ent->name); + fn(&objnm, arg); + + /* check if the md has alias and also call fn with it */ + objnm.name = getMdAliasName(ent->name); + if (objnm.name != NULL) { + objnm.alias |= WOLFSSL_OBJ_NAME_ALIAS; + objnm.data = ent->name; + fn(&objnm, arg); + } + } + } break; case WOLFSSL_OBJ_NAME_TYPE_CIPHER_METH: case WOLFSSL_OBJ_NAME_TYPE_PKEY_METH: @@ -10424,7 +10498,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD* type) WOLFSSL_ENTER("EVP_DigestInit"); if (ctx == NULL) { - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; } @@ -10522,7 +10596,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD* type) #endif { ctx->macType = WC_HASH_TYPE_NONE; - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; } return ret; @@ -10532,7 +10606,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD* type) int wolfSSL_EVP_DigestUpdate(WOLFSSL_EVP_MD_CTX* ctx, const void* data, size_t sz) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); enum wc_HashType macType; WOLFSSL_ENTER("EVP_DigestUpdate"); @@ -10660,7 +10734,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD* type) int wolfSSL_EVP_DigestFinal(WOLFSSL_EVP_MD_CTX* ctx, unsigned char* md, unsigned int* s) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); enum wc_HashType macType; WOLFSSL_ENTER("EVP_DigestFinal"); @@ -10839,7 +10913,7 @@ int wolfSSL_EVP_MD_block_size(const WOLFSSL_EVP_MD* type) if (type == NULL) { WOLFSSL_MSG("No md type arg"); - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; } #ifndef NO_SHA @@ -10905,7 +10979,7 @@ int wolfSSL_EVP_MD_block_size(const WOLFSSL_EVP_MD* type) } else #endif - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; } int wolfSSL_EVP_MD_size(const WOLFSSL_EVP_MD* type) @@ -10914,7 +10988,7 @@ int wolfSSL_EVP_MD_size(const WOLFSSL_EVP_MD* type) if (type == NULL) { WOLFSSL_MSG("No md type arg"); - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; } #ifndef NO_SHA @@ -10990,7 +11064,7 @@ int wolfSSL_EVP_MD_size(const WOLFSSL_EVP_MD* type) } #endif - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; } #endif /* OPENSSL_EXTRA || HAVE_CURL */ @@ -11108,18 +11182,12 @@ void wolfSSL_EVP_PKEY_free(WOLFSSL_EVP_PKEY* key) #ifdef HAVE_HKDF case EVP_PKEY_HKDF: - if (key->hkdfSalt != NULL) { - XFREE(key->hkdfSalt, NULL, DYNAMIC_TYPE_SALT); - key->hkdfSalt = NULL; - } - if (key->hkdfKey != NULL) { - XFREE(key->hkdfKey, NULL, DYNAMIC_TYPE_KEY); - key->hkdfKey = NULL; - } - if (key->hkdfInfo != NULL) { - XFREE(key->hkdfInfo, NULL, DYNAMIC_TYPE_INFO); - key->hkdfInfo = NULL; - } + XFREE(key->hkdfSalt, NULL, DYNAMIC_TYPE_SALT); + key->hkdfSalt = NULL; + XFREE(key->hkdfKey, NULL, DYNAMIC_TYPE_KEY); + key->hkdfKey = NULL; + XFREE(key->hkdfInfo, NULL, DYNAMIC_TYPE_INFO); + key->hkdfInfo = NULL; key->hkdfSaltSz = 0; key->hkdfKeySz = 0; key->hkdfInfoSz = 0; @@ -11598,10 +11666,8 @@ static int PrintPubKeyEC(WOLFSSL_BIO* out, const byte* pkey, int pkeySz, res = wolfSSL_BIO_write(out, "\n", 1) > 0; } - if (pub != NULL) { - XFREE(pub, NULL, DYNAMIC_TYPE_ECC_BUFFER); - pub = NULL; - } + XFREE(pub, NULL, DYNAMIC_TYPE_ECC_BUFFER); + pub = NULL; wc_ecc_free(key); mp_free(a); diff --git a/wolfcrypt/src/ext_lms.c b/wolfcrypt/src/ext_lms.c index a991129ec5..70dfa5bd7a 100644 --- a/wolfcrypt/src/ext_lms.c +++ b/wolfcrypt/src/ext_lms.c @@ -27,7 +27,8 @@ #include #include -#ifdef WOLFSSL_HAVE_LMS +#if defined(WOLFSSL_HAVE_LMS) && defined(HAVE_LIBLMS) + #include #ifdef NO_INLINE @@ -1048,4 +1049,4 @@ int wc_LmsKey_Verify(LmsKey * key, const byte * sig, word32 sigSz, return 0; } -#endif /* WOLFSSL_HAVE_LMS */ +#endif /* WOLFSSL_HAVE_LMS && HAVE_LIBLMS */ diff --git a/wolfcrypt/src/ext_xmss.c b/wolfcrypt/src/ext_xmss.c index 14e3f71c97..938d5136d1 100644 --- a/wolfcrypt/src/ext_xmss.c +++ b/wolfcrypt/src/ext_xmss.c @@ -28,7 +28,8 @@ #include #include -#ifdef WOLFSSL_HAVE_XMSS +#if defined(WOLFSSL_HAVE_XMSS) && defined(HAVE_LIBXMSS) + #include #ifdef NO_INLINE @@ -1042,4 +1043,4 @@ int wc_XmssKey_Verify(XmssKey * key, const byte * sig, word32 sigLen, return ret; } -#endif /* WOLFSSL_HAVE_XMSS */ +#endif /* WOLFSSL_HAVE_XMSS && HAVE_LIBXMSS */ diff --git a/wolfcrypt/src/ge_448.c b/wolfcrypt/src/ge_448.c index fbb600eaf2..415928f97f 100644 --- a/wolfcrypt/src/ge_448.c +++ b/wolfcrypt/src/ge_448.c @@ -10781,18 +10781,10 @@ int ge448_double_scalarmult_vartime(ge448_p2 *r, const byte *a, } #if defined(WOLFSSL_SMALL_STACK) && (!defined(WOLFSSL_NO_MALLOC) || defined(XMALLOC_USER)) - if (p2 != NULL) { - XFREE(p2, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (pi != NULL) { - XFREE(pi, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (bslide != NULL) { - XFREE(bslide, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } - if (aslide != NULL) { - XFREE(aslide, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(p2, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(pi, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(bslide, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(aslide, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; diff --git a/wolfcrypt/src/ge_operations.c b/wolfcrypt/src/ge_operations.c index 6a82d50dcd..bcf9d354b5 100644 --- a/wolfcrypt/src/ge_operations.c +++ b/wolfcrypt/src/ge_operations.c @@ -9470,18 +9470,12 @@ int ge_double_scalarmult_vartime(ge_p2 *r, const unsigned char *a, #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) out: - if (aslide != NULL) - XFREE(aslide, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (bslide != NULL) - XFREE(bslide, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (Ai != NULL) - XFREE(Ai, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (u != NULL) - XFREE(u, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (A2 != NULL) - XFREE(A2, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(aslide, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(bslide, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(Ai, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(u, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(A2, NULL, DYNAMIC_TYPE_TMP_BUFFER); return ret; #else diff --git a/wolfcrypt/src/kdf.c b/wolfcrypt/src/kdf.c index fa0e096ca3..690774474b 100644 --- a/wolfcrypt/src/kdf.c +++ b/wolfcrypt/src/kdf.c @@ -157,9 +157,9 @@ int wc_PRF(byte* result, word32 resLen, const byte* secret, current = (byte*)XMALLOC(P_HASH_MAX_SIZE, heap, DYNAMIC_TYPE_DIGEST); hmac = (Hmac*)XMALLOC(sizeof(Hmac), heap, DYNAMIC_TYPE_HMAC); if (previous == NULL || current == NULL || hmac == NULL) { - if (previous) XFREE(previous, heap, DYNAMIC_TYPE_DIGEST); - if (current) XFREE(current, heap, DYNAMIC_TYPE_DIGEST); - if (hmac) XFREE(hmac, heap, DYNAMIC_TYPE_HMAC); + XFREE(previous, heap, DYNAMIC_TYPE_DIGEST); + XFREE(current, heap, DYNAMIC_TYPE_DIGEST); + XFREE(hmac, heap, DYNAMIC_TYPE_HMAC); return MEMORY_E; } #endif diff --git a/wolfcrypt/src/logging.c b/wolfcrypt/src/logging.c index f28a71ef7b..d548cd6149 100644 --- a/wolfcrypt/src/logging.c +++ b/wolfcrypt/src/logging.c @@ -471,26 +471,48 @@ void WOLFSSL_BUFFER(const byte* buffer, word32 length) while (buflen > 0) { int bufidx = 0; - XSNPRINTF(&line[bufidx], sizeof(line)-bufidx, "\t"); + if (XSNPRINTF(&line[bufidx], sizeof(line)-bufidx, "\t") + >= (int)sizeof(line) - bufidx) + { + goto errout; + } bufidx++; for (i = 0; i < LINE_LEN; i++) { if (i < buflen) { - XSNPRINTF(&line[bufidx], sizeof(line)-bufidx, "%02x ", buffer[i]); + if (XSNPRINTF(&line[bufidx], sizeof(line)-bufidx, "%02x ", + buffer[i]) >= (int)sizeof(line) - bufidx) + { + goto errout; + } } else { - XSNPRINTF(&line[bufidx], sizeof(line)-bufidx, " "); + if (XSNPRINTF(&line[bufidx], sizeof(line)-bufidx, " ") + >= (int)sizeof(line) - bufidx) + { + goto errout; + } } bufidx += 3; } - XSNPRINTF(&line[bufidx], sizeof(line)-bufidx, "| "); + if (XSNPRINTF(&line[bufidx], sizeof(line)-bufidx, "| ") + >= (int)sizeof(line) - bufidx) + { + goto errout; + } bufidx++; for (i = 0; i < LINE_LEN; i++) { if (i < buflen) { - XSNPRINTF(&line[bufidx], sizeof(line)-bufidx, - "%c", 31 < buffer[i] && buffer[i] < 127 ? buffer[i] : '.'); + if (XSNPRINTF(&line[bufidx], sizeof(line)-bufidx, + "%c", 31 < buffer[i] && buffer[i] < 127 + ? buffer[i] + : '.') + >= (int)sizeof(line) - bufidx) + { + goto errout; + } bufidx++; } } @@ -499,6 +521,12 @@ void WOLFSSL_BUFFER(const byte* buffer, word32 length) buffer += LINE_LEN; buflen -= LINE_LEN; } + + return; + +errout: + + wolfssl_log(INFO_LOG, NULL, 0, "\t[Buffer error while rendering]"); } #undef WOLFSSL_ENTER /* undo WOLFSSL_DEBUG_CODEPOINTS wrapper */ @@ -506,7 +534,11 @@ void WOLFSSL_ENTER(const char* msg) { if (loggingEnabled) { char buffer[WOLFSSL_MAX_ERROR_SZ]; - XSNPRINTF(buffer, sizeof(buffer), "wolfSSL Entering %s", msg); + if (XSNPRINTF(buffer, sizeof(buffer), "wolfSSL Entering %s", msg) + >= (int)sizeof(buffer)) + { + buffer[sizeof(buffer) - 1] = 0; + } wolfssl_log(ENTER_LOG, NULL, 0, buffer); } } @@ -516,7 +548,11 @@ void WOLFSSL_ENTER2(const char *file, int line, const char* msg) { if (loggingEnabled) { char buffer[WOLFSSL_MAX_ERROR_SZ]; - XSNPRINTF(buffer, sizeof(buffer), "wolfSSL Entering %s", msg); + if (XSNPRINTF(buffer, sizeof(buffer), "wolfSSL Entering %s", msg) + >= (int)sizeof(buffer)) + { + buffer[sizeof(buffer) - 1] = 0; + } wolfssl_log(ENTER_LOG, file, line, buffer); } } @@ -527,8 +563,12 @@ void WOLFSSL_LEAVE(const char* msg, int ret) { if (loggingEnabled) { char buffer[WOLFSSL_MAX_ERROR_SZ]; - XSNPRINTF(buffer, sizeof(buffer), "wolfSSL Leaving %s, return %d", - msg, ret); + if (XSNPRINTF(buffer, sizeof(buffer), "wolfSSL Leaving %s, return %d", + msg, ret) + >= (int)sizeof(buffer)) + { + buffer[sizeof(buffer) - 1] = 0; + } wolfssl_log(LEAVE_LOG, NULL, 0, buffer); } } @@ -538,8 +578,12 @@ void WOLFSSL_LEAVE2(const char *file, int line, const char* msg, int ret) { if (loggingEnabled) { char buffer[WOLFSSL_MAX_ERROR_SZ]; - XSNPRINTF(buffer, sizeof(buffer), "wolfSSL Leaving %s, return %d", - msg, ret); + if (XSNPRINTF(buffer, sizeof(buffer), "wolfSSL Leaving %s, return %d", + msg, ret) + >= (int)sizeof(buffer)) + { + buffer[sizeof(buffer) - 1] = 0; + } wolfssl_log(LEAVE_LOG, file, line, buffer); } } @@ -1674,3 +1718,144 @@ void WOLFSSL_ERROR_MSG(const char* msg) } #endif /* DEBUG_WOLFSSL || WOLFSSL_NGINX || WOLFSSL_HAPROXY */ + +#ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES + +#ifdef WOLFSSL_LINUXKM + +void wc_backtrace_render(void) { + dump_stack(); +} + +#else /* !WOLFSSL_LINUXKM */ + +#include + +#if BACKTRACE_SUPPORTED != 1 + #error WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES is defined but BACKTRACE_SUPPORTED is 0. +#endif + +#if !defined(WOLFSSL_MUTEX_INITIALIZER) && defined(WOLFSSL_NO_ATOMICS) + #error WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES requires WOLFSSL_MUTEX_INITIALIZER or wolfSSL_Atomic_Ints. +#endif + +#include + +static int backtrace_callback(void *data, uintptr_t pc, const char *filename, + int lineno, const char *function) +{ + if (function == NULL) + return 0; + /* the first callback is for the call to wc_print_backtrace() -- skip it. */ + if (*(int *)data == 0) { + *(int *)data = 1; + return 0; + } +#ifdef NO_STDIO_FILESYSTEM + printf(" #%d %p in %s %s:%d\n", (*(int *)data)++, (void *)pc, + function, filename, lineno); +#else + fprintf(stderr, " #%d %p in %s %s:%d\n", (*(int *)data)++, (void *)pc, + function, filename, lineno); +#endif + return 0; +} + +static void backtrace_error(void *data, const char *msg, int errnum) { + (void)data; +#ifdef NO_STDIO_FILESYSTEM + printf("ERR TRACE: error %d while backtracing: %s", errnum, msg); +#else + fprintf(stderr, "ERR TRACE: error %d while backtracing: %s", errnum, msg); +#endif +} + +static void backtrace_creation_error(void *data, const char *msg, int errnum) { + (void)data; +#ifdef NO_STDIO_FILESYSTEM + printf("ERR TRACE: internal error %d " + "while initializing backtrace facility: %s", errnum, msg); + printf("ERR TRACE: internal error " + "while initializing backtrace facility"); +#else + fprintf(stderr, "ERR TRACE: internal error %d " + "while initializing backtrace facility: %s", errnum, msg); +#endif +} + +static int backtrace_init(struct backtrace_state **backtrace_state) { +#ifdef WOLFSSL_MUTEX_INITIALIZER + static wolfSSL_Mutex backtrace_create_state_mutex = + WOLFSSL_MUTEX_INITIALIZER(backtrace_create_state_mutex); + if (wc_LockMutex(&backtrace_create_state_mutex) != 0) + return -1; +#elif defined(WOLFSSL_ATOMIC_OPS) + static wolfSSL_Atomic_Int init_count = 0; + if (wolfSSL_Atomic_Int_FetchAdd(&init_count, 1) != 1) + return -1; +#endif + if (*backtrace_state == NULL) { + /* passing a NULL filename to backtrace_create_state() tells + * libbacktrace to use a target-specific strategy to determine the + * executable. "libbacktrace supports ELF, PE/COFF, Mach-O, and XCOFF + * executables with DWARF debugging information. In other words, it + * supports GNU/Linux, *BSD, macOS, Windows, and AIX." + */ + *backtrace_state = backtrace_create_state( + NULL, 0, backtrace_creation_error, NULL); + } +#ifdef WOLFSSL_MUTEX_INITIALIZER + wc_UnLockMutex(&backtrace_create_state_mutex); +#endif + if (*backtrace_state == NULL) + return -1; + return 0; +} + +void wc_backtrace_render(void) { + static wolfSSL_Mutex backtrace_mutex + WOLFSSL_MUTEX_INITIALIZER_CLAUSE(backtrace_mutex); + static struct backtrace_state *backtrace_state = NULL; + int depth = 0; + +#ifndef WOLFSSL_MUTEX_INITIALIZER + static wolfSSL_Atomic_Int init_count = 0; + if (init_count != 1) { + int cur_init_count = wolfSSL_Atomic_Int_FetchSub(&init_count, 1); + if (cur_init_count != 0) { + (void)wolfSSL_Atomic_Int_FetchAdd(&init_count, 1); + return; + } + if (wc_InitMutex(&backtrace_mutex) != 0) + return; + /* set init_count to 1, race-free: (-1) - (0-2) = 1 */ + (void)wolfSSL_Atomic_Int_FetchSub(&init_count, cur_init_count - 2); + } +#endif + + /* backtrace_state can't be shared between threads even when + * BACKTRACE_SUPPORTS_THREADS == 1, so we serialize the render op. this + * helpfully mutexes the initialization too. + */ + if (wc_LockMutex(&backtrace_mutex) != 0) + return; + + if (backtrace_state == NULL) { + if (backtrace_init(&backtrace_state) < 0) { + wc_UnLockMutex(&backtrace_mutex); + return; + } + } + + /* note that the optimizer can produce misleading backtraces, even with + * -funwind-tables. in contrast, the macro-generated "ERR TRACE" message + * from WC_ERR_TRACE() always accurately identifies the error code point. + */ + backtrace_full(backtrace_state, 0, backtrace_callback, backtrace_error, + (void *)&depth); + + wc_UnLockMutex(&backtrace_mutex); +} +#endif /* !WOLFSSL_LINUXKM */ + +#endif /* WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES */ diff --git a/wolfcrypt/src/misc.c b/wolfcrypt/src/misc.c index e69ad655ba..7a9bcb02c9 100644 --- a/wolfcrypt/src/misc.c +++ b/wolfcrypt/src/misc.c @@ -709,13 +709,23 @@ WC_MISC_STATIC WC_INLINE void w64SetLow32(w64wrapper *n, word32 low) { WC_MISC_STATIC WC_INLINE w64wrapper w64Add32(w64wrapper a, word32 b, byte *wrap) { - a.n = a.n + b; + a.n += b; if (a.n < b && wrap != NULL) *wrap = 1; return a; } +WC_MISC_STATIC WC_INLINE w64wrapper w64Add(w64wrapper a, w64wrapper b, + byte *wrap) +{ + a.n += b.n; + if (a.n < b.n && wrap != NULL) + *wrap = 1; + + return a; +} + WC_MISC_STATIC WC_INLINE w64wrapper w64Sub32(w64wrapper a, word32 b, byte *wrap) { if (a.n < b && wrap != NULL) @@ -796,6 +806,13 @@ WC_MISC_STATIC WC_INLINE w64wrapper w64ShiftLeft(w64wrapper a, int shift) return a; } +WC_MISC_STATIC WC_INLINE w64wrapper w64Mul(word32 a, word32 b) +{ + w64wrapper ret; + ret.n = (word64)a * (word64)b; + return ret; +} + #else WC_MISC_STATIC WC_INLINE void w64Increment(w64wrapper *n) @@ -831,7 +848,7 @@ WC_MISC_STATIC WC_INLINE void w64SetLow32(w64wrapper *n, word32 low) WC_MISC_STATIC WC_INLINE w64wrapper w64Add32(w64wrapper a, word32 b, byte *wrap) { - a.n[1] = a.n[1] + b; + a.n[1] += b; if (a.n[1] < b) { a.n[0]++; if (wrap != NULL && a.n[0] == 0) @@ -841,6 +858,24 @@ WC_MISC_STATIC WC_INLINE w64wrapper w64Add32(w64wrapper a, word32 b, byte *wrap) return a; } +WC_MISC_STATIC WC_INLINE w64wrapper w64Add(w64wrapper a, w64wrapper b, + byte *wrap) +{ + a.n[1] += b.n[1]; + if (a.n[1] < b.n[1]) { + a.n[0]++; + if (wrap != NULL && a.n[0] == 0) + *wrap = 1; + } + + a.n[0] += b.n[0]; + if (wrap != NULL && a.n[0] < b.n[0]) { + *wrap = 1; + } + + return a; +} + WC_MISC_STATIC WC_INLINE w64wrapper w64Sub32(w64wrapper a, word32 b, byte *wrap) { byte _underflow = 0; @@ -894,7 +929,7 @@ WC_MISC_STATIC WC_INLINE byte w64IsZero(w64wrapper a) return a.n[0] == 0 && a.n[1] == 0; } -WC_MISC_STATIC WC_INLINE void c64toa(w64wrapper *a, byte *out) +WC_MISC_STATIC WC_INLINE void c64toa(const w64wrapper *a, byte *out) { #ifdef BIG_ENDIAN_ORDER word32 *_out = (word32*)(out); @@ -939,7 +974,7 @@ WC_MISC_STATIC WC_INLINE byte w64LT(w64wrapper a, w64wrapper b) WC_MISC_STATIC WC_INLINE w64wrapper w64ShiftRight(w64wrapper a, int shift) { if (shift < 32) { - a.n[1] = (a.n[1] >> shift) || (a.n[0] << (32 - shift)); + a.n[1] = (a.n[1] >> shift) | (a.n[0] << (32 - shift)); a.n[0] >>= shift; } else { @@ -951,7 +986,7 @@ WC_MISC_STATIC WC_INLINE w64wrapper w64ShiftRight(w64wrapper a, int shift) WC_MISC_STATIC WC_INLINE w64wrapper w64ShiftLeft(w64wrapper a, int shift) { if (shift < 32) { - a.n[0] = (a.n[0] << shift) || (a.n[1] >> (32 - shift)); + a.n[0] = (a.n[0] << shift) | (a.n[1] >> (32 - shift)); a.n[1] <<= shift; } else { @@ -961,6 +996,30 @@ WC_MISC_STATIC WC_INLINE w64wrapper w64ShiftLeft(w64wrapper a, int shift) return a; } +WC_MISC_STATIC WC_INLINE w64wrapper w64Mul(word32 a, word32 b) +{ + w64wrapper ret; + word16 ltlA, ltlB, ltlC, ltlD; + word32 bigA, bigB, bigC, bigD; + + ltlA = a & 0xFFFF; + ltlB = (a >> 16) & 0xFFFF; + ltlC = b & 0xFFFF; + ltlD = (b >> 16) & 0xFFFF; + + bigA = (word32)ltlA * (word32)ltlC; + bigC = (word32)ltlB * (word32)ltlC; + bigD = (word32)ltlA * (word32)ltlD; + bigB = (word32)ltlB * (word32)ltlD; + + ret = w64From32(0, bigB); + ret = w64ShiftLeft(ret, 16); + ret = w64Add32(ret, bigD, NULL); + ret = w64Add32(ret, bigC, NULL); + ret = w64ShiftLeft(ret, 16); + return w64Add32(ret, bigA, NULL); +} + #endif /* WORD64_AVAILABLE && !WOLFSSL_W64_WRAPPER_TEST */ #endif /* WOLFSSL_W64_WRAPPER */ diff --git a/wolfcrypt/src/pkcs12.c b/wolfcrypt/src/pkcs12.c index d6cf526221..c24e1f1810 100644 --- a/wolfcrypt/src/pkcs12.c +++ b/wolfcrypt/src/pkcs12.c @@ -165,9 +165,7 @@ static void freeSafe(AuthenticatedSafe* safe, void* heap) safe->CI = ci->next; XFREE(ci, heap, DYNAMIC_TYPE_PKCS); } - if (safe->data != NULL) { - XFREE(safe->data, heap, DYNAMIC_TYPE_PKCS); - } + XFREE(safe->data, heap, DYNAMIC_TYPE_PKCS); XFREE(safe, heap, DYNAMIC_TYPE_PKCS); (void)heap; @@ -191,22 +189,14 @@ void wc_PKCS12_free(WC_PKCS12* pkcs12) /* free mac data */ if (pkcs12->signData != NULL) { - if (pkcs12->signData->digest != NULL) { - XFREE(pkcs12->signData->digest, heap, DYNAMIC_TYPE_DIGEST); - } - if (pkcs12->signData->salt != NULL) { - XFREE(pkcs12->signData->salt, heap, DYNAMIC_TYPE_SALT); - } + XFREE(pkcs12->signData->digest, heap, DYNAMIC_TYPE_DIGEST); + XFREE(pkcs12->signData->salt, heap, DYNAMIC_TYPE_SALT); XFREE(pkcs12->signData, heap, DYNAMIC_TYPE_PKCS); } #ifdef ASN_BER_TO_DER - if (pkcs12->der != NULL) { - XFREE(pkcs12->der, pkcs12->heap, DYNAMIC_TYPE_PKCS); - } - if (pkcs12->safeDer != NULL) { - XFREE(pkcs12->safeDer, pkcs12->heap, DYNAMIC_TYPE_PKCS); - } + XFREE(pkcs12->der, pkcs12->heap, DYNAMIC_TYPE_PKCS); + XFREE(pkcs12->safeDer, pkcs12->heap, DYNAMIC_TYPE_PKCS); #endif XFREE(pkcs12, heap, DYNAMIC_TYPE_PKCS); @@ -533,8 +523,7 @@ static int GetSignData(WC_PKCS12* pkcs12, const byte* mem, word32* idx, /* failure cleanup */ if (ret != 0) { if (mac) { - if (mac->digest) - XFREE(mac->digest, pkcs12->heap, DYNAMIC_TYPE_DIGEST); + XFREE(mac->digest, pkcs12->heap, DYNAMIC_TYPE_DIGEST); XFREE(mac, pkcs12->heap, DYNAMIC_TYPE_PKCS); } } @@ -856,9 +845,7 @@ int wc_d2i_PKCS12_fp(const char* file, WC_PKCS12** pkcs12) wc_PKCS12_free(*pkcs12); *pkcs12 = NULL; } - if (buf != NULL) { - XFREE(buf, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(buf, NULL, DYNAMIC_TYPE_TMP_BUFFER); WOLFSSL_LEAVE("wc_d2i_PKCS12_fp", ret); @@ -1099,9 +1086,7 @@ void wc_FreeCertList(WC_DerCertList* list, void* heap) while (current != NULL) { next = current->next; - if (current->buffer != NULL) { - XFREE(current->buffer, heap, DYNAMIC_TYPE_PKCS); - } + XFREE(current->buffer, heap, DYNAMIC_TYPE_PKCS); XFREE(current, heap, DYNAMIC_TYPE_PKCS); current = next; } @@ -1707,10 +1692,8 @@ int wc_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw, } /* free temporary buffer */ - if (buf != NULL) { - XFREE(buf, pkcs12->heap, DYNAMIC_TYPE_PKCS); - buf = NULL; - } + XFREE(buf, pkcs12->heap, DYNAMIC_TYPE_PKCS); + buf = NULL; ci = ci->next; WOLFSSL_MSG("Done Parsing PKCS12 Content Info Container"); @@ -1744,10 +1727,8 @@ int wc_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw, XFREE(*pkey, pkcs12->heap, DYNAMIC_TYPE_PUBLIC_KEY); *pkey = NULL; } - if (buf) { - XFREE(buf, pkcs12->heap, DYNAMIC_TYPE_PKCS); - buf = NULL; - } + XFREE(buf, pkcs12->heap, DYNAMIC_TYPE_PKCS); + buf = NULL; wc_FreeCertList(certList, pkcs12->heap); } diff --git a/wolfcrypt/src/pkcs7.c b/wolfcrypt/src/pkcs7.c index d07f1f7889..e6fa08c211 100644 --- a/wolfcrypt/src/pkcs7.c +++ b/wolfcrypt/src/pkcs7.c @@ -289,7 +289,7 @@ static int wc_PKCS7_AddDataToStream(PKCS7* pkcs7, byte* in, word32 inSz, /* try to store input data into stream buffer */ if (inSz - rdSz > 0 && pkcs7->stream->length < expected) { - int len = (int)min(inSz - rdSz, expected - pkcs7->stream->length); + word32 len = min(inSz - rdSz, expected - pkcs7->stream->length); /* sanity check that the input buffer is not internal buffer */ if (in == pkcs7->stream->buffer) { @@ -385,7 +385,7 @@ static int wc_PKCS7_SetMaxStream(PKCS7* pkcs7, byte* in, word32 defSz) } } #endif /* ASN_BER_TO_DER */ - pkcs7->stream->maxLen = length + idx; + pkcs7->stream->maxLen = (word32)length + idx; if (pkcs7->stream->maxLen == 0) { pkcs7->stream->maxLen = defSz; @@ -550,7 +550,7 @@ static int wc_SetContentType(int pkcs7TypeOID, byte* output, word32 outputSz) { 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x05, 0x0C }; #endif - int idSz, idx = 0; + word32 idSz, idx = 0; word32 typeSz = 0; const byte* typeName = 0; byte ID_Length[MAX_LENGTH_SZ]; @@ -630,14 +630,14 @@ static int wc_SetContentType(int pkcs7TypeOID, byte* output, word32 outputSz) return BAD_FUNC_ARG; } - idSz = (int)SetLength(typeSz, ID_Length); + idSz = SetLength(typeSz, ID_Length); output[idx++] = ASN_OBJECT_ID; XMEMCPY(output + idx, ID_Length, idSz); idx += idSz; XMEMCPY(output + idx, typeName, typeSz); idx += typeSz; - return idx; + return (int)idx; } @@ -819,7 +819,7 @@ int wc_PKCS7_Init(PKCS7* pkcs7, void* heap, int devId) isDynamic = pkcs7->isDynamic; XMEMSET(pkcs7, 0, sizeof(PKCS7)); - pkcs7->isDynamic = isDynamic; + pkcs7->isDynamic = (isDynamic != 0); #ifdef WOLFSSL_HEAP_TEST pkcs7->heap = (void*)WOLFSSL_HEAP_TEST; #else @@ -887,7 +887,7 @@ static void wc_PKCS7_FreeCertSet(PKCS7* pkcs7) * Returns total size of recipients, or negative upon error */ static int wc_PKCS7_GetRecipientListSize(PKCS7* pkcs7) { - int totalSz = 0; + word32 totalSz = 0; Pkcs7EncodedRecip* tmp = NULL; if (pkcs7 == NULL) @@ -900,7 +900,7 @@ static int wc_PKCS7_GetRecipientListSize(PKCS7* pkcs7) tmp = tmp->next; } - return totalSz; + return (int)totalSz; } @@ -1165,7 +1165,7 @@ int wc_PKCS7_InitWithCert(PKCS7* pkcs7, byte* derCert, word32 derCertSz) } /* verify extracted public key is valid before storing */ - ret = wc_PKCS7_CheckPublicKeyDer(pkcs7, dCert->keyOID, + ret = wc_PKCS7_CheckPublicKeyDer(pkcs7, (int)dCert->keyOID, dCert->publicKey, dCert->pubKeySize); if (ret != 0) { WOLFSSL_MSG("Invalid public key, check pkcs7->cert"); @@ -1192,7 +1192,7 @@ int wc_PKCS7_InitWithCert(PKCS7* pkcs7, byte* derCert, word32 derCertSz) XMEMCPY(pkcs7->issuerHash, dCert->issuerHash, KEYID_SIZE); pkcs7->issuer = dCert->issuerRaw; pkcs7->issuerSz = (word32)dCert->issuerRawLen; - XMEMCPY(pkcs7->issuerSn, dCert->serial, dCert->serialSz); + XMEMCPY(pkcs7->issuerSn, dCert->serial, (word32)dCert->serialSz); pkcs7->issuerSnSz = (word32)dCert->serialSz; XMEMCPY(pkcs7->issuerSubjKeyId, dCert->extSubjKeyId, KEYID_SIZE); @@ -1265,12 +1265,8 @@ static void wc_PKCS7_FreeDecodedAttrib(PKCS7DecodedAttrib* attrib, void* heap) current = attrib; while (current != NULL) { PKCS7DecodedAttrib* next = current->next; - if (current->oid != NULL) { - XFREE(current->oid, heap, DYNAMIC_TYPE_PKCS7); - } - if (current->value != NULL) { - XFREE(current->value, heap, DYNAMIC_TYPE_PKCS7); - } + XFREE(current->oid, heap, DYNAMIC_TYPE_PKCS7); + XFREE(current->value, heap, DYNAMIC_TYPE_PKCS7); XFREE(current, heap, DYNAMIC_TYPE_PKCS7); current = next; } @@ -1282,10 +1278,8 @@ static void wc_PKCS7_FreeDecodedAttrib(PKCS7DecodedAttrib* attrib, void* heap) /* return 0 on success */ static int wc_PKCS7_SignerInfoNew(PKCS7* pkcs7) { - if (pkcs7->signerInfo != NULL) { - XFREE(pkcs7->signerInfo, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - pkcs7->signerInfo = NULL; - } + XFREE(pkcs7->signerInfo, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + pkcs7->signerInfo = NULL; pkcs7->signerInfo = (PKCS7SignerInfo*)XMALLOC(sizeof(PKCS7SignerInfo), pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -1301,10 +1295,8 @@ static int wc_PKCS7_SignerInfoNew(PKCS7* pkcs7) static void wc_PKCS7_SignerInfoFree(PKCS7* pkcs7) { if (pkcs7->signerInfo != NULL) { - if (pkcs7->signerInfo->sid != NULL) { - XFREE(pkcs7->signerInfo->sid, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - pkcs7->signerInfo->sid = NULL; - } + XFREE(pkcs7->signerInfo->sid, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + pkcs7->signerInfo->sid = NULL; XFREE(pkcs7->signerInfo, pkcs7->heap, DYNAMIC_TYPE_PKCS7); pkcs7->signerInfo = NULL; } @@ -1320,16 +1312,14 @@ static int wc_PKCS7_SignerInfoSetSID(PKCS7* pkcs7, byte* in, int inSz) return BAD_FUNC_ARG; } - if (pkcs7->signerInfo->sid != NULL) { - XFREE(pkcs7->signerInfo->sid, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - pkcs7->signerInfo->sid = NULL; - } - pkcs7->signerInfo->sid = (byte*)XMALLOC(inSz, pkcs7->heap, + XFREE(pkcs7->signerInfo->sid, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + pkcs7->signerInfo->sid = NULL; + pkcs7->signerInfo->sid = (byte*)XMALLOC((word32)inSz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); if (pkcs7->signerInfo->sid == NULL) { return MEMORY_E; } - XMEMCPY(pkcs7->signerInfo->sid, in, inSz); + XMEMCPY(pkcs7->signerInfo->sid, in, (word32)inSz); pkcs7->signerInfo->sidSz = (word32)inSz; return 0; } @@ -1351,15 +1341,11 @@ void wc_PKCS7_Free(PKCS7* pkcs7) wc_PKCS7_FreeCertSet(pkcs7); #ifdef ASN_BER_TO_DER - if (pkcs7->der != NULL) { - XFREE(pkcs7->der, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - pkcs7->der = NULL; - } + XFREE(pkcs7->der, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + pkcs7->der = NULL; #endif - if (pkcs7->contentDynamic != NULL) { - XFREE(pkcs7->contentDynamic, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - pkcs7->contentDynamic = NULL; - } + XFREE(pkcs7->contentDynamic, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + pkcs7->contentDynamic = NULL; if (pkcs7->cek != NULL) { ForceZero(pkcs7->cek, pkcs7->cekSz); @@ -1478,7 +1464,7 @@ int wc_PKCS7_GetAttributeValue(PKCS7* pkcs7, const byte* oid, word32 oidSz, } XMEMCPY(out, attrib->value, attrib->valueSz); - return attrib->valueSz; + return (int)attrib->valueSz; } @@ -1493,7 +1479,7 @@ int wc_PKCS7_EncodeData(PKCS7* pkcs7, byte* output, word32 outputSz) word32 seqSz; word32 octetStrSz; word32 oidSz = (word32)sizeof(oid); - int idx = 0; + word32 idx = 0; if (pkcs7 == NULL || output == NULL) { return BAD_FUNC_ARG; @@ -1514,7 +1500,7 @@ int wc_PKCS7_EncodeData(PKCS7* pkcs7, byte* output, word32 outputSz) XMEMCPY(output + idx, pkcs7->content, pkcs7->contentSz); idx += pkcs7->contentSz; - return idx; + return (int)idx; } @@ -1578,26 +1564,26 @@ static int EncodeAttributes(EncodedAttrib* ea, int eaSz, PKCS7Attrib* attribs, int attribsSz) { int i; - int maxSz = (int)min((word32)eaSz, attribsSz); + int maxSz = (int)min((word32)eaSz, (word32)attribsSz); int allAttribsSz = 0; for (i = 0; i < maxSz; i++) { - int attribSz = 0; + word32 attribSz = 0; ea[i].value = attribs[i].value; ea[i].valueSz = attribs[i].valueSz; attribSz += ea[i].valueSz; - ea[i].valueSetSz = SetSet((word32)attribSz, ea[i].valueSet); + ea[i].valueSetSz = SetSet(attribSz, ea[i].valueSet); attribSz += ea[i].valueSetSz; ea[i].oid = attribs[i].oid; ea[i].oidSz = attribs[i].oidSz; attribSz += ea[i].oidSz; - ea[i].valueSeqSz = SetSequence((word32)attribSz, ea[i].valueSeq); + ea[i].valueSeqSz = SetSequence(attribSz, ea[i].valueSeq); attribSz += ea[i].valueSeqSz; - ea[i].totalSz = (word32)attribSz; + ea[i].totalSz = attribSz; - allAttribsSz += attribSz; + allAttribsSz += (int)attribSz; } return allAttribsSz; } @@ -1686,7 +1672,8 @@ static int SortAttribArray(FlatAttrib** arr, int rows) static int FlattenEncodedAttribs(PKCS7* pkcs7, FlatAttrib** derArr, int rows, EncodedAttrib* ea, int eaSz) { - int i, idx, sz; + int i; + word32 idx, sz; byte* output = NULL; FlatAttrib* fa = NULL; @@ -1719,7 +1706,7 @@ static int FlattenEncodedAttribs(PKCS7* pkcs7, FlatAttrib** derArr, int rows, fa = derArr[i]; fa->data = output; - fa->dataSz = (word32)sz; + fa->dataSz = sz; } return 0; @@ -1730,7 +1717,8 @@ static int FlattenEncodedAttribs(PKCS7* pkcs7, FlatAttrib** derArr, int rows, static int FlattenAttributes(PKCS7* pkcs7, byte* output, EncodedAttrib* ea, int eaSz) { - int i, idx, ret; + int i, ret; + word32 idx; FlatAttrib** derArr = NULL; FlatAttrib* fa = NULL; @@ -2109,8 +2097,9 @@ static int wc_PKCS7_BuildSignedAttributes(PKCS7* pkcs7, ESD* esd, } esd->signedAttribsCount += cannedAttribsCount; - esd->signedAttribsSz += EncodeAttributes(&esd->signedAttribs[atrIdx], - (int)idx, cannedAttribs, cannedAttribsCount); + esd->signedAttribsSz += (word32)EncodeAttributes( + &esd->signedAttribs[atrIdx], (int)idx, cannedAttribs, + (int)cannedAttribsCount); atrIdx += idx; } else { esd->signedAttribsCount = 0; @@ -2120,9 +2109,9 @@ static int wc_PKCS7_BuildSignedAttributes(PKCS7* pkcs7, ESD* esd, /* add custom signed attributes if set */ if (pkcs7->signedAttribsSz > 0 && pkcs7->signedAttribs != NULL) { esd->signedAttribsCount += pkcs7->signedAttribsSz; - esd->signedAttribsSz += EncodeAttributes(&esd->signedAttribs[atrIdx], - esd->signedAttribsCount, - pkcs7->signedAttribs, pkcs7->signedAttribsSz); + esd->signedAttribsSz += (word32)EncodeAttributes( + &esd->signedAttribs[atrIdx], (int)esd->signedAttribsCount, + pkcs7->signedAttribs, (int)pkcs7->signedAttribsSz); } #ifdef NO_ASN_TIME @@ -2290,12 +2279,12 @@ static int wc_PKCS7_BuildDigestInfo(PKCS7* pkcs7, byte* flatSignedAttribs, word32 flatSignedAttribsSz, ESD* esd, byte* digestInfo, word32* digestInfoSz) { - int ret, hashSz, digIdx = 0; + int ret, digIdx = 0; byte digestInfoSeq[MAX_SEQ_SZ]; byte digestStr[MAX_OCTET_STR_SZ]; byte attribSet[MAX_SET_SZ]; byte algoId[MAX_ALGO_SZ]; - word32 digestInfoSeqSz, digestStrSz, algoIdSz; + word32 digestInfoSeqSz, digestStrSz, algoIdSz, dgstInfoSz, hashSz; word32 attribSetSz; if (pkcs7 == NULL || esd == NULL || digestInfo == NULL || @@ -2303,9 +2292,10 @@ static int wc_PKCS7_BuildDigestInfo(PKCS7* pkcs7, byte* flatSignedAttribs, return BAD_FUNC_ARG; } - hashSz = wc_HashGetDigestSize(esd->hashType); - if (hashSz < 0) - return hashSz; + ret = wc_HashGetDigestSize(esd->hashType); + if (ret < 0) + return ret; + hashSz = (word32)ret; if (flatSignedAttribsSz != 0) { @@ -2336,25 +2326,26 @@ static int wc_PKCS7_BuildDigestInfo(PKCS7* pkcs7, byte* flatSignedAttribs, XMEMCPY(esd->contentAttribsDigest, esd->contentDigest + 2, hashSz); } - /* set algoID, with NULL attributes */ - algoIdSz = SetAlgoID(pkcs7->hashOID, algoId, oidHashType, 0); + /* Set algoID, allow absent hash params */ + algoIdSz = SetAlgoIDEx(pkcs7->hashOID, algoId, oidHashType, + 0, pkcs7->hashParamsAbsent); digestStrSz = SetOctetString(hashSz, digestStr); - digestInfoSeqSz = SetSequence(algoIdSz + digestStrSz + hashSz, - digestInfoSeq); + dgstInfoSz = algoIdSz + digestStrSz + hashSz; + digestInfoSeqSz = SetSequence(dgstInfoSz, digestInfoSeq); - if (*digestInfoSz < (digestInfoSeqSz + algoIdSz + digestStrSz + hashSz)) { + if (*digestInfoSz < (digestInfoSeqSz + dgstInfoSz)) { return BUFFER_E; } XMEMCPY(digestInfo + digIdx, digestInfoSeq, digestInfoSeqSz); - digIdx += digestInfoSeqSz; + digIdx += (int)digestInfoSeqSz; XMEMCPY(digestInfo + digIdx, algoId, algoIdSz); - digIdx += algoIdSz; + digIdx += (int)algoIdSz; XMEMCPY(digestInfo + digIdx, digestStr, digestStrSz); - digIdx += digestStrSz; + digIdx += (int)digestStrSz; XMEMCPY(digestInfo + digIdx, esd->contentAttribsDigest, hashSz); - digIdx += hashSz; + digIdx += (int)hashSz; *digestInfoSz = (word32)digIdx; @@ -2500,7 +2491,7 @@ static int wc_PKCS7_EncodeContentStreamHelper(PKCS7* pkcs7, int cipherType, switch (cipherType) { case WC_CIPHER_NONE: - XMEMCPY(encContentOut, contentData, contentDataSz); + XMEMCPY(encContentOut, contentData, (word32)contentDataSz); if (esd && esd->contentDigestSet != 1) { ret = wc_HashUpdate(&esd->hash, esd->hashType, contentData, (word32)contentDataSz); @@ -2537,7 +2528,7 @@ static int wc_PKCS7_EncodeContentStreamHelper(PKCS7* pkcs7, int cipherType, *outIdx += encContentOutOctSz; wc_PKCS7_WriteOut(pkcs7, (out)? out + *outIdx : NULL, encContentOut, (word32)contentDataSz); - *outIdx += contentDataSz; + *outIdx += (word32)contentDataSz; } return ret; @@ -2574,10 +2565,10 @@ static int wc_PKCS7_EncodeContentStream(PKCS7* pkcs7, ESD* esd, void* aes, byte* encContentOut; byte* contentData; word32 idx = 0, outIdx = 0; - int padSz = 0; + word32 padSz = 0; if (cipherType != WC_CIPHER_NONE) { - padSz = wc_PKCS7_GetPadSize(pkcs7->contentSz, + padSz = (word32)wc_PKCS7_GetPadSize(pkcs7->contentSz, (word32)wc_PKCS7_GetOIDBlockSize(pkcs7->encryptOID)); } @@ -2629,8 +2620,8 @@ static int wc_PKCS7_EncodeContentStream(PKCS7* pkcs7, ESD* esd, void* aes, return BAD_FUNC_ARG; } - if (szLeft + totalSz > (word32)inSz) - szLeft = inSz - totalSz; + if ((word32)szLeft + totalSz > (word32)inSz) + szLeft = inSz - (int)totalSz; contentDataRead = szLeft; buf = in + totalSz; @@ -2644,11 +2635,11 @@ static int wc_PKCS7_EncodeContentStream(PKCS7* pkcs7, ESD* esd, void* aes, /* check and handle octet boundary */ sz = contentDataRead; - if (idx + sz > BER_OCTET_LENGTH) { - sz = BER_OCTET_LENGTH - idx; + if ((int)idx + sz > BER_OCTET_LENGTH) { + sz = BER_OCTET_LENGTH - (int)idx; contentDataRead -= sz; - XMEMCPY(contentData + idx, buf, sz); + XMEMCPY(contentData + idx, buf, (word32)sz); ret = wc_PKCS7_EncodeContentStreamHelper(pkcs7, cipherType, aes, encContentOut, contentData, BER_OCTET_LENGTH, out, &outIdx, esd); @@ -2659,20 +2650,20 @@ static int wc_PKCS7_EncodeContentStream(PKCS7* pkcs7, ESD* esd, void* aes, } /* copy over any remaining data */ - XMEMCPY(contentData, buf + sz, contentDataRead); + XMEMCPY(contentData, buf + sz, (word32)contentDataRead); idx = (word32)contentDataRead; } else { /* was not on an octet boundary, copy full * amount over */ - XMEMCPY(contentData + idx, buf, sz); - idx += sz; + XMEMCPY(contentData + idx, buf, (word32)sz); + idx += (word32)sz; } } while (totalSz < pkcs7->contentSz); /* add in padding to the end */ if ((cipherType != WC_CIPHER_NONE) && (totalSz == pkcs7->contentSz)) { - int i; + word32 i; if (BER_OCTET_LENGTH < idx) { XFREE(encContentOut, heap, DYNAMIC_TYPE_PKCS7); @@ -2683,7 +2674,7 @@ static int wc_PKCS7_EncodeContentStream(PKCS7* pkcs7, ESD* esd, void* aes, for (i = 0; i < padSz; i++) { contentData[idx + i] = (byte)padSz; } - idx += padSz; + idx += (word32)padSz; } /* encrypt and flush out remainder of content data */ @@ -2709,7 +2700,7 @@ static int wc_PKCS7_EncodeContentStream(PKCS7* pkcs7, ESD* esd, void* aes, switch (cipherType) { case WC_CIPHER_NONE: if (!pkcs7->detached) { - XMEMCPY(out, in, inSz); + XMEMCPY(out, in, (word32)inSz); } if (esd && esd->contentDigestSet != 1) { ret = wc_HashInit(&esd->hash, esd->hashType); @@ -2931,9 +2922,11 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, } else if (pkcs7->sidType == CMS_SKID) { /* SubjectKeyIdentifier */ esd->issuerSKIDSz = SetOctetString((word32)keyIdSize, esd->issuerSKID); - esd->issuerSKIDSeqSz = SetExplicit(0, esd->issuerSKIDSz + keyIdSize, + esd->issuerSKIDSeqSz = SetExplicit(0, esd->issuerSKIDSz + + (word32)keyIdSize, esd->issuerSKIDSeq, 0); - signerInfoSz += (esd->issuerSKIDSz + esd->issuerSKIDSeqSz + keyIdSize); + signerInfoSz += (esd->issuerSKIDSz + esd->issuerSKIDSeqSz + + (word32)keyIdSize); /* version MUST be 3 */ esd->signerVersionSz = (word32)SetMyVersion(3, esd->signerVersion, 0); @@ -2946,8 +2939,8 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, if (pkcs7->sidType != DEGENERATE_SID) { signerInfoSz += esd->signerVersionSz; - esd->signerDigAlgoIdSz = SetAlgoID(pkcs7->hashOID, esd->signerDigAlgoId, - oidHashType, 0); + esd->signerDigAlgoIdSz = SetAlgoIDEx(pkcs7->hashOID, esd->signerDigAlgoId, + oidHashType, 0, pkcs7->hashParamsAbsent); signerInfoSz += esd->signerDigAlgoIdSz; /* set signatureAlgorithm */ @@ -2957,8 +2950,8 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, idx = ret; goto out; } - esd->digEncAlgoIdSz = SetAlgoID(digEncAlgoId, esd->digEncAlgoId, - digEncAlgoType, 0); + esd->digEncAlgoIdSz = SetAlgoIDEx(digEncAlgoId, esd->digEncAlgoId, + digEncAlgoType, 0, pkcs7->hashParamsAbsent); signerInfoSz += esd->digEncAlgoIdSz; /* build up signed attributes, include contentType, signingTime, and @@ -2984,8 +2977,8 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, flatSignedAttribsSz = esd->signedAttribsSz; - FlattenAttributes(pkcs7, flatSignedAttribs, - esd->signedAttribs, esd->signedAttribsCount); + FlattenAttributes(pkcs7, flatSignedAttribs, esd->signedAttribs, + (int)esd->signedAttribsCount); esd->signedAttribSetSz = SetImplicit(ASN_SET, 0, esd->signedAttribsSz, esd->signedAttribSet, 0); } else { @@ -3032,8 +3025,8 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, esd->certsSetSz = SetImplicit(ASN_SET, 0, certSetSz, esd->certsSet, 0); if (pkcs7->sidType != DEGENERATE_SID) { - esd->singleDigAlgoIdSz = SetAlgoID(pkcs7->hashOID, esd->singleDigAlgoId, - oidHashType, 0); + esd->singleDigAlgoIdSz = SetAlgoIDEx(pkcs7->hashOID, esd->singleDigAlgoId, + oidHashType, 0, pkcs7->hashParamsAbsent); } esd->digAlgoIdSetSz = SetSet(esd->singleDigAlgoIdSz, esd->digAlgoIdSet); @@ -3143,37 +3136,37 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, idx = 0; wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, esd->outerSeq, esd->outerSeqSz); - idx += esd->outerSeqSz; + idx += (int)esd->outerSeqSz; wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, signedDataOid, signedDataOidSz); - idx += signedDataOidSz; + idx += (int)signedDataOidSz; wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, esd->outerContent, esd->outerContentSz); - idx += esd->outerContentSz; + idx += (int)esd->outerContentSz; wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, esd->innerSeq, esd->innerSeqSz); - idx += esd->innerSeqSz; + idx += (int)esd->innerSeqSz; wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, esd->version, esd->versionSz); - idx += esd->versionSz; + idx += (int)esd->versionSz; wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, esd->digAlgoIdSet, esd->digAlgoIdSetSz); - idx += esd->digAlgoIdSetSz; + idx += (int)esd->digAlgoIdSetSz; wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, esd->singleDigAlgoId, esd->singleDigAlgoIdSz); - idx += esd->singleDigAlgoIdSz; + idx += (int)esd->singleDigAlgoIdSz; wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, esd->contentInfoSeq, esd->contentInfoSeqSz); - idx += esd->contentInfoSeqSz; + idx += (int)esd->contentInfoSeqSz; wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, pkcs7->contentType, pkcs7->contentTypeSz); - idx += pkcs7->contentTypeSz; + idx += (int)pkcs7->contentTypeSz; wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, esd->innerContSeq, esd->innerContSeqSz); - idx += esd->innerContSeqSz; + idx += (int)esd->innerContSeqSz; wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, esd->innerOctets, esd->innerOctetsSz); - idx += esd->innerOctetsSz; + idx += (int)esd->innerOctetsSz; /* support returning header and footer without content */ if (output2 && output2Sz) { @@ -3189,14 +3182,15 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, #endif && pkcs7->contentSz > 0) { wc_PKCS7_EncodeContentStream(pkcs7, esd, NULL, pkcs7->content, - pkcs7->contentSz, (output)? output + idx : NULL, WC_CIPHER_NONE); + (int)pkcs7->contentSz, (output)? output + idx : NULL, + WC_CIPHER_NONE); if (!pkcs7->detached) { #ifdef ASN_BER_TO_DER if (pkcs7->encodeStream) { byte indefEnd[ASN_INDEF_END_SZ * 3]; word32 localIdx = 0; - idx += streamSz; + idx += (int)streamSz; /* end of content octet string */ localIdx += SetIndefEnd(indefEnd + localIdx); @@ -3209,12 +3203,12 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, indefEnd, localIdx); - idx += localIdx; + idx += (int)localIdx; } else #endif { - idx += pkcs7->contentSz; + idx += (int)pkcs7->contentSz; } } } @@ -3224,14 +3218,14 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, /* certificates */ wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, esd->certsSet, esd->certsSetSz); - idx += esd->certsSetSz; + idx += (int)esd->certsSetSz; if (pkcs7->noCerts != 1) { certPtr = pkcs7->certList; while (certPtr != NULL) { wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, certPtr->der, certPtr->derSz); - idx += certPtr->derSz; + idx += (int)certPtr->derSz; certPtr = certPtr->next; } } @@ -3240,36 +3234,36 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, esd->signerInfoSet, esd->signerInfoSetSz); - idx += esd->signerInfoSetSz; + idx += (int)esd->signerInfoSetSz; wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, esd->signerInfoSeq, esd->signerInfoSeqSz); - idx += esd->signerInfoSeqSz; + idx += (int)esd->signerInfoSeqSz; wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, esd->signerVersion, esd->signerVersionSz); - idx += esd->signerVersionSz; + idx += (int)esd->signerVersionSz; /* SignerIdentifier */ if (pkcs7->sidType == CMS_ISSUER_AND_SERIAL_NUMBER) { /* IssuerAndSerialNumber */ wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, esd->issuerSnSeq, esd->issuerSnSeqSz); - idx += esd->issuerSnSeqSz; + idx += (int)esd->issuerSnSeqSz; wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, esd->issuerName, esd->issuerNameSz); - idx += esd->issuerNameSz; + idx += (int)esd->issuerNameSz; wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, pkcs7->issuer, pkcs7->issuerSz); - idx += pkcs7->issuerSz; + idx += (int)pkcs7->issuerSz; wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, esd->issuerSn, esd->issuerSnSz); - idx += esd->issuerSnSz; + idx += (int)esd->issuerSnSz; } else if (pkcs7->sidType == CMS_SKID) { /* SubjectKeyIdentifier */ wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, esd->issuerSKIDSeq, esd->issuerSKIDSeqSz); - idx += esd->issuerSKIDSeqSz; + idx += (int)esd->issuerSKIDSeqSz; wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, esd->issuerSKID, esd->issuerSKIDSz); - idx += esd->issuerSKIDSz; + idx += (int)esd->issuerSKIDSz; wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, pkcs7->issuerSubjKeyId, (word32)keyIdSize); idx += keyIdSize; @@ -3281,7 +3275,7 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, } wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, esd->signerDigAlgoId, esd->signerDigAlgoIdSz); - idx += esd->signerDigAlgoIdSz; + idx += (int)esd->signerDigAlgoIdSz; /* SignerInfo:Attributes */ if (flatSignedAttribsSz > 0) { @@ -3312,7 +3306,8 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, flatSignedAttribsSz = esd->signedAttribsSz; FlattenAttributes(pkcs7, flatSignedAttribs, - esd->signedAttribs, esd->signedAttribsCount); + esd->signedAttribs, + (int)esd->signedAttribsCount); } else { esd->signedAttribSetSz = 0; } @@ -3320,10 +3315,10 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, esd->signedAttribSet, esd->signedAttribSetSz); - idx += esd->signedAttribSetSz; + idx += (int)esd->signedAttribSetSz; wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, flatSignedAttribs, flatSignedAttribsSz); - idx += flatSignedAttribsSz; + idx += (int)flatSignedAttribsSz; } if (hashBuf == NULL && pkcs7->sidType != DEGENERATE_SID) { @@ -3339,14 +3334,14 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, esd->digEncAlgoId, esd->digEncAlgoIdSz); - idx += esd->digEncAlgoIdSz; + idx += (int)esd->digEncAlgoIdSz; wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, esd->signerDigest, esd->signerDigestSz); - idx += esd->signerDigestSz; + idx += (int)esd->signerDigestSz; wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, esd->encContentDigest, esd->encContentDigestSz); - idx += esd->encContentDigestSz; + idx += (int)esd->encContentDigestSz; #ifdef ASN_BER_TO_DER if (pkcs7->encodeStream) { @@ -3364,7 +3359,7 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, wc_PKCS7_WriteOut(pkcs7, (output2)? (output2 + idx) : NULL, indefEnd, localIdx); - idx += localIdx; + idx += (int)localIdx; } #endif @@ -3378,14 +3373,11 @@ static int PKCS7_EncodeSigned(PKCS7* pkcs7, out: - if (flatSignedAttribs != NULL) - XFREE(flatSignedAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(flatSignedAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); #ifdef WOLFSSL_SMALL_STACK - if (esd) - XFREE(esd, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER); - if (signedDataOid) - XFREE(signedDataOid, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(esd, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(signedDataOid, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER); #endif return idx; @@ -3444,7 +3436,7 @@ int wc_PKCS7_SetDetached(PKCS7* pkcs7, word16 flag) if (pkcs7 == NULL || (flag != 0 && flag != 1)) return BAD_FUNC_ARG; - pkcs7->detached = flag; + pkcs7->detached = (flag != 0); return 0; } @@ -3686,13 +3678,14 @@ int wc_PKCS7_EncodeSignedEncryptedFPD(PKCS7* pkcs7, byte* encryptKey, } /* save encryptedData, reset output buffer and struct */ - encrypted = (byte*)XMALLOC(encryptedSz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + encrypted = (byte*)XMALLOC((word32)encryptedSz, pkcs7->heap, + DYNAMIC_TYPE_PKCS7); if (encrypted == NULL) { ForceZero(output, outputSz); return MEMORY_E; } - XMEMCPY(encrypted, output, encryptedSz); + XMEMCPY(encrypted, output, (word32)encryptedSz); ForceZero(output, outputSz); ret = wc_InitRng_ex(&rng, pkcs7->heap, pkcs7->devId); @@ -4203,14 +4196,18 @@ static int wc_PKCS7_EcdsaVerify(PKCS7* pkcs7, byte* sig, int sigSz, } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); #endif - FreeDecodedCert(dCert); - wc_ecc_free(key); - if (ret == 0 && res == 1) { /* found signer that successfully verified signature */ verified = 1; + XMEMCPY(pkcs7->issuerSubjKeyId, dCert->extSubjKeyId, KEYID_SIZE); pkcs7->verifyCert = pkcs7->cert[i]; pkcs7->verifyCertSz = pkcs7->certSz[i]; + } + + wc_ecc_free(key); + FreeDecodedCert(dCert); + + if (ret == 0 && res == 1) { break; } } @@ -4340,23 +4337,24 @@ static int wc_PKCS7_BuildSignedDataDigest(PKCS7* pkcs7, byte* signedAttrib, } } - /* Set algoID, with NULL attributes */ - algoIdSz = SetAlgoID(pkcs7->hashOID, algoId, oidHashType, 0); + /* Set algoID, match whatever was input to match either NULL or absent */ + algoIdSz = SetAlgoIDEx(pkcs7->hashOID, algoId, oidHashType, + 0, pkcs7->hashParamsAbsent); digestStrSz = SetOctetString(hashSz, digestStr); digestInfoSeqSz = SetSequence(algoIdSz + digestStrSz + hashSz, digestInfoSeq); XMEMCPY(digestInfo + digIdx, digestInfoSeq, digestInfoSeqSz); - digIdx += digestInfoSeqSz; + digIdx += (int)digestInfoSeqSz; XMEMCPY(digestInfo + digIdx, algoId, algoIdSz); - digIdx += algoIdSz; + digIdx += (int)algoIdSz; XMEMCPY(digestInfo + digIdx, digestStr, digestStrSz); - digIdx += digestStrSz; + digIdx += (int)digestStrSz; XMEMCPY(digestInfo + digIdx, digest, hashSz); - digIdx += hashSz; + digIdx += (int)hashSz; - XMEMCPY(pkcs7Digest, digestInfo, digIdx); + XMEMCPY(pkcs7Digest, digestInfo, (word32)digIdx); *pkcs7DigestSz = (word32)digIdx; /* set plain digest pointer */ @@ -4750,7 +4748,7 @@ static int wc_PKCS7_SetPublicKeyOID(PKCS7* pkcs7, int sigOID) return ASN_SIG_KEY_E; } - return pkcs7->publicKeyOID; + return (int)pkcs7->publicKeyOID; } @@ -4782,7 +4780,7 @@ static int wc_PKCS7_ParseAttribs(PKCS7* pkcs7, byte* in, int inSz) while (idx < (word32)inSz) { int length = 0; - int oidIdx; + word32 oidIdx; PKCS7DecodedAttrib* attrib; if (GetSequence(in, &idx, &length, (word32)inSz) < 0) @@ -4795,7 +4793,7 @@ static int wc_PKCS7_ParseAttribs(PKCS7* pkcs7, byte* in, int inSz) } XMEMSET(attrib, 0, sizeof(PKCS7DecodedAttrib)); - oidIdx = (int)idx; + oidIdx = idx; if (GetObjectId(in, &idx, &oid, oidIgnoreType, (word32)inSz) < 0) { XFREE(attrib, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -4817,7 +4815,7 @@ static int wc_PKCS7_ParseAttribs(PKCS7* pkcs7, byte* in, int inSz) return ASN_PARSE_E; } - if ((inSz - idx) < (word32)length) { + if ((inSz - (int)idx) < length) { XFREE(attrib->oid, pkcs7->heap, DYNAMIC_TYPE_PKCS7); XFREE(attrib, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return ASN_PARSE_E; @@ -4832,7 +4830,7 @@ static int wc_PKCS7_ParseAttribs(PKCS7* pkcs7, byte* in, int inSz) return MEMORY_E; } XMEMCPY(attrib->value, in + idx, attrib->valueSz); - idx += length; + idx += (word32)length; /* store attribute in linked list */ if (pkcs7->decodedAttrib != NULL) { @@ -4885,6 +4883,7 @@ static int wc_PKCS7_ParseSignerInfo(PKCS7* pkcs7, byte* in, word32 inSz, word32 sigOID = 0, hashOID = 0; word32 idx = *idxIn, localIdx; byte tag; + byte absentParams = FALSE; WOLFSSL_ENTER("wc_PKCS7_ParseSignerInfo"); /* require a signer if degenerate case not allowed */ @@ -4921,7 +4920,7 @@ static int wc_PKCS7_ParseSignerInfo(PKCS7* pkcs7, byte* in, word32 inSz, if (ret == 0) { ret = wc_PKCS7_SignerInfoSetSID(pkcs7, in + idx, length); - idx += length; + idx += (word32)length; } } else if (ret == 0 && version == 3) { @@ -4977,7 +4976,7 @@ static int wc_PKCS7_ParseSignerInfo(PKCS7* pkcs7, byte* in, word32 inSz, if (ret == 0) { ret = wc_PKCS7_SignerInfoSetSID(pkcs7, in + idx, length); - idx += length; + idx += (word32)length; } } else { @@ -4986,10 +4985,12 @@ static int wc_PKCS7_ParseSignerInfo(PKCS7* pkcs7, byte* in, word32 inSz, } /* Get the sequence of digestAlgorithm */ - if (ret == 0 && GetAlgoId(in, &idx, &hashOID, oidHashType, inSz) < 0) { + if (ret == 0 && GetAlgoIdEx(in, &idx, &hashOID, oidHashType, + inSz, &absentParams) < 0) { ret = ASN_PARSE_E; } pkcs7->hashOID = (int)hashOID; + pkcs7->hashParamsAbsent = (absentParams != 0); /* Get the IMPLICIT[0] SET OF signedAttributes */ localIdx = idx; @@ -5010,7 +5011,7 @@ static int wc_PKCS7_ParseSignerInfo(PKCS7* pkcs7, byte* in, word32 inSz, ret = ASN_PARSE_E; } - idx += length; + idx += (word32)length; } /* Get digestEncryptionAlgorithm - key type or signature type */ @@ -5067,10 +5068,8 @@ static int wc_PKCS7_HandleOctetStrings(PKCS7* pkcs7, byte* in, word32 inSz, /* no content case, do nothing */ if (pkcs7->stream->noContent) { if (pkcs7->content && pkcs7->contentSz > 0) { - if (pkcs7->stream->content != NULL) { - XFREE(pkcs7->stream->content, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - pkcs7->stream->content = NULL; - } + XFREE(pkcs7->stream->content, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + pkcs7->stream->content = NULL; pkcs7->stream->content = (byte*)XMALLOC(pkcs7->contentSz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -5085,10 +5084,8 @@ static int wc_PKCS7_HandleOctetStrings(PKCS7* pkcs7, byte* in, word32 inSz, } /* free pkcs7->contentDynamic buffer */ - if (pkcs7->contentDynamic != NULL) { - XFREE(pkcs7->contentDynamic, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - pkcs7->contentDynamic = NULL; - } + XFREE(pkcs7->contentDynamic, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + pkcs7->contentDynamic = NULL; while(1) { if ((ret = wc_PKCS7_AddDataToStream(pkcs7, in, inSz, @@ -5143,7 +5140,7 @@ static int wc_PKCS7_HandleOctetStrings(PKCS7* pkcs7, byte* in, word32 inSz, * number of indef is stored in pkcs7->stream->cntIdfCnt. */ pkcs7->stream->expected = (word32)(ASN_TAG_SZ + TRAILING_ZERO) * - pkcs7->stream->cntIdfCnt; + (word32)pkcs7->stream->cntIdfCnt; /* dec idx by one since already consumed to get ASN_EOC */ (*idx)--; @@ -5223,10 +5220,8 @@ static int wc_PKCS7_HandleOctetStrings(PKCS7* pkcs7, byte* in, word32 inSz, if (pkcs7->stream->content == NULL) { WOLFSSL_MSG("failed to grow content buffer."); - if (tempBuf != NULL) { - XFREE(tempBuf, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - tempBuf = NULL; - } + XFREE(tempBuf, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + tempBuf = NULL; ret = MEMORY_E; break; } @@ -5237,10 +5232,8 @@ static int wc_PKCS7_HandleOctetStrings(PKCS7* pkcs7, byte* in, word32 inSz, } XMEMCPY(pkcs7->stream->content + contBufSz, msg + *idx, pkcs7->stream->expected); - if (tempBuf != NULL) { - XFREE(tempBuf, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - tempBuf = NULL; - } + XFREE(tempBuf, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + tempBuf = NULL; } } @@ -5359,9 +5352,11 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, switch (pkcs7->state) { case WC_PKCS7_START: #ifndef NO_PKCS7_STREAM - if ((ret = wc_PKCS7_AddDataToStream(pkcs7, in, inSz, MAX_SEQ_SZ + + /* The expected size calculation originally assumed digest OID + * with NULL params, -2 to also accept with absent params */ + if ((ret = wc_PKCS7_AddDataToStream(pkcs7, in, inSz, (MAX_SEQ_SZ + MAX_VERSION_SZ + MAX_SEQ_SZ + MAX_LENGTH_SZ + - ASN_TAG_SZ + MAX_OID_SZ + MAX_SEQ_SZ, + ASN_TAG_SZ + MAX_OID_SZ + MAX_SEQ_SZ) - 2, &pkiMsg, &idx)) != 0) { break; } @@ -5375,7 +5370,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, break; } if (ret == 0 && length > 0) - pkcs7->stream->maxLen = length + localIdx; + pkcs7->stream->maxLen = (word32)length + localIdx; else pkcs7->stream->maxLen = inSz; @@ -5517,7 +5512,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, ret = ASN_PARSE_E; } /* store hashType for later hashing */ - pkcs7->stream->hashType = hashType; + pkcs7->stream->hashType = (int)hashType; /* restore idx */ idx = localIdx; @@ -5527,12 +5522,12 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, #endif /* !NO_PKCS7_STREAM */ /* Skip the set. */ - idx += length; + idx += (word32)length; degenerate = (length == 0) ? 1 : 0; #ifndef NO_PKCS7_STREAM - pkcs7->stream->degenerate = degenerate; + pkcs7->stream->degenerate = (degenerate != 0); #endif /* !NO_PKCS7_STREAM */ - if (pkcs7->noDegenerate == 1 && degenerate == 1) { + if (pkcs7->noDegenerate == 1 && degenerate != 0) { ret = PKCS7_NO_SIGNER_E; } @@ -5596,8 +5591,8 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, } if (GetASNObjectId(pkiMsg, &idx, &length, pkiMsgSz) == 0) { contentType = pkiMsg + tmpIdx; - contentTypeSz = length + (idx - tmpIdx); - idx += length; + contentTypeSz = (word32)length + (idx - tmpIdx); + idx += (word32)length; } else { ret = ASN_PARSE_E; @@ -5630,7 +5625,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, /* Set error state if no more data left in ContentInfo, meaning * no content - may be detached. Will recover from error below */ if ((encapContentInfoLen != 0) && - (encapContentInfoLen - contentTypeSz == 0)) { + ((word32)encapContentInfoLen - contentTypeSz == 0)) { ret = ASN_PARSE_E; #ifndef NO_PKCS7_STREAM pkcs7->stream->noContent = 1; @@ -5730,11 +5725,12 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, if (ret == 0) { /* Use single OCTET_STRING directly, or reset length. */ - if (localIdx - start + length == (word32)contentLen) { + if (localIdx - start + (word32)length == + (word32)contentLen) { multiPart = 0; } else { #ifndef NO_PKCS7_STREAM - pkcs7->stream->multi = multiPart; + pkcs7->stream->multi = (multiPart != 0); pkcs7->stream->currContIdx = localIdx; pkcs7->stream->currContSz = (word32)length; pkcs7->stream->currContRmnSz = (word32)length; @@ -5762,7 +5758,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, ret = ASN_PARSE_E; #ifndef NO_PKCS7_STREAM if (ret == 0) { - pkcs7->stream->multi = multiPart; + pkcs7->stream->multi = (multiPart != 0); pkcs7->stream->currContIdx = localIdx; pkcs7->stream->currContSz = (word32)length; pkcs7->stream->currContRmnSz = (word32)length; @@ -5814,7 +5810,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, #ifndef NO_PKCS7_STREAM /* save detached flag value */ - pkcs7->stream->detached = detached; + pkcs7->stream->detached = (detached != 0); /* save contentType */ pkcs7->stream->nonce = (byte*)XMALLOC(contentTypeSz, pkcs7->heap, @@ -5858,10 +5854,8 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, #ifndef NO_PKCS7_STREAM /* free pkcs7->stream->content buffer */ - if (pkcs7->stream->content != NULL) { - XFREE(pkcs7->stream->content, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - pkcs7->stream->content = NULL; - } + XFREE(pkcs7->stream->content, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + pkcs7->stream->content = NULL; #endif /* !NO_PKCS7_STREAM */ FALL_THROUGH; @@ -6081,7 +6075,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, WOLFSSL_MSG("certificate set found"); /* adjust cert length */ - length += localIdx - certIdx; + length += (int)(localIdx - certIdx); idx = certIdx; } } @@ -6159,13 +6153,13 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, if (length > 0 && in2Sz == 0) { /* free tmpCert if not NULL */ XFREE(pkcs7->stream->tmpCert, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - pkcs7->stream->tmpCert = (byte*)XMALLOC(length, + pkcs7->stream->tmpCert = (byte*)XMALLOC((word32)length, pkcs7->heap, DYNAMIC_TYPE_PKCS7); if ((pkiMsg2 == NULL) || (pkcs7->stream->tmpCert == NULL)) { ret = MEMORY_E; break; } - XMEMCPY(pkcs7->stream->tmpCert, pkiMsg2 + idx, length); + XMEMCPY(pkcs7->stream->tmpCert, pkiMsg2 + idx, (word32)length); pkiMsg2 = pkcs7->stream->tmpCert; pkiMsg2Sz = (word32)length; idx = 0; @@ -6196,7 +6190,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, ret = ASN_PARSE_E; cert = &pkiMsg2[idx]; - certSz += (certIdx - idx); + certSz += (int)(certIdx - idx); if (certSz > length) { ret = BUFFER_E; break; @@ -6218,7 +6212,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, /* Save dynamic content before freeing PKCS7 struct */ if (pkcs7->contentDynamic != NULL) { - contentDynamic = (byte*)XMALLOC(contentSz, + contentDynamic = (byte*)XMALLOC((word32)contentSz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); if (contentDynamic == NULL) { #ifndef NO_PKCS7_STREAM @@ -6228,13 +6222,13 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, break; } XMEMCPY(contentDynamic, pkcs7->contentDynamic, - contentSz); + (word32)contentSz); } /* Free pkcs7 resources but not the structure itself */ pkcs7->isDynamic = 0; wc_PKCS7_Free(pkcs7); - pkcs7->isDynamic = isDynamic; + pkcs7->isDynamic = (isDynamic != 0); /* This will reset PKCS7 structure and then set the * certificate */ ret = wc_PKCS7_InitWithCert(pkcs7, cert, (word32)certSz); @@ -6247,7 +6241,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, } /* Restore content is PKCS#7 flag */ - pkcs7->contentIsPkcs7Type = contentIsPkcs7Type; + pkcs7->contentIsPkcs7Type = (contentIsPkcs7Type != 0); #ifndef NO_PKCS7_STREAM pkcs7->stream = stream; @@ -6267,7 +6261,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, pkcs7->cert[0] = cert; pkcs7->certSz[0] = (word32)certSz; - certIdx = idx + certSz; + certIdx = idx + (word32)certSz; for (i = 1; i < MAX_PKCS7_CERTS && certIdx + 1 < pkiMsg2Sz && @@ -6289,21 +6283,22 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, } pkcs7->cert[i] = &pkiMsg2[localIdx]; - pkcs7->certSz[i] = sz + (certIdx - localIdx); - certIdx += sz; + pkcs7->certSz[i] = (word32)sz + + (certIdx - localIdx); + certIdx += (word32)sz; } } } } - idx += length; + idx += (word32)length; if (!detached) { /* set content and size after init of PKCS7 structure */ pkcs7->content = content; - pkcs7->contentSz = contentSz; + pkcs7->contentSz = (word32)contentSz; } - idx = certIdx2 + length; + idx = certIdx2 + (word32)length; if (ret != 0) { break; @@ -6329,7 +6324,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, /* if certificate set has indef-length, there maybe trailing zeros. * add expected size to include size of zeros. */ if (pkcs7->stream->cntIdfCnt > 0) { - pkcs7->stream->expected += pkcs7->stream->cntIdfCnt * 2; + pkcs7->stream->expected += (word32)pkcs7->stream->cntIdfCnt * 2; } if (pkcs7->stream->expected > (pkcs7->stream->maxLen - @@ -6389,10 +6384,10 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, /* prior to find set of crls, remove trailing zeros of * set of certificates */ if (ret == 0 && pkcs7->stream->cntIdfCnt > 0) { - int i; + word32 i; + word32 sz = (word32)pkcs7->stream->cntIdfCnt * ASN_INDEF_END_SZ; localIdx = idx; - for (i = 0; i < pkcs7->stream->cntIdfCnt * ASN_INDEF_END_SZ; - i++) { + for (i = 0; i < sz; i++) { if (pkiMsg2[localIdx + i] == 0) continue; else { @@ -6401,7 +6396,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, } } if (ret == 0) { - idx += pkcs7->stream->cntIdfCnt * ASN_INDEF_END_SZ; + idx += (word32)pkcs7->stream->cntIdfCnt * ASN_INDEF_END_SZ; pkcs7->stream->cntIdfCnt = 0; } } @@ -6418,7 +6413,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, ret = ASN_PARSE_E; /* Skip the set */ - idx += length; + idx += (word32)length; } /* Get the set of signerInfos */ @@ -6513,7 +6508,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, sig = &pkiMsg2[idx]; sigSz = length; - idx += length; + idx += (word32)length; } pkcs7->content = content; @@ -6530,7 +6525,7 @@ static int PKCS7_VerifySignedData(PKCS7* pkcs7, const byte* hashBuf, /* make sure that terminating zero's follow */ if ((ret == WC_NO_ERR_TRACE(PKCS7_SIGNEEDS_CHECK) || ret >= 0) && pkcs7->stream->indefLen == 1) { - int i; + word32 i; for (i = 0; i < 3 * ASN_INDEF_END_SZ; i++) { if (pkiMsg2[idx + i] != 0) { ret = ASN_PARSE_E; @@ -7066,22 +7061,22 @@ static int wc_PKCS7_KariGenerateSharedInfo(WC_PKCS7_KARI* kari, int keyWrapOID) /* kekOctet */ kekOctetSz = (int)SetOctetString(sizeof(word32), kekOctet); - sharedInfoSz += (kekOctetSz + sizeof(word32)); + sharedInfoSz += (kekOctetSz + (int)sizeof(word32)); /* suppPubInfo */ - suppPubInfoSeqSz = SetImplicit(ASN_SEQUENCE, 2, - kekOctetSz + sizeof(word32), - suppPubInfoSeq, 0); + suppPubInfoSeqSz = (int)SetImplicit(ASN_SEQUENCE, 2, + (word32)kekOctetSz + sizeof(word32), + suppPubInfoSeq, 0); sharedInfoSz += suppPubInfoSeqSz; /* optional ukm/entityInfo */ if (kari->ukmSz > 0) { entityUInfoOctetSz = (int)SetOctetString(kari->ukmSz, entityUInfoOctet); - sharedInfoSz += (entityUInfoOctetSz + kari->ukmSz); + sharedInfoSz += (entityUInfoOctetSz + (int)kari->ukmSz); - entityUInfoExplicitSz = SetExplicit(0, entityUInfoOctetSz + - kari->ukmSz, - entityUInfoExplicitSeq, 0); + entityUInfoExplicitSz = (int)SetExplicit(0, + (word32)entityUInfoOctetSz + kari->ukmSz, + entityUInfoExplicitSeq, 0); sharedInfoSz += entityUInfoExplicitSz; } @@ -7093,29 +7088,30 @@ static int wc_PKCS7_KariGenerateSharedInfo(WC_PKCS7_KARI* kari, int keyWrapOID) sharedInfoSeqSz = (int)SetSequence((word32)sharedInfoSz, sharedInfoSeq); sharedInfoSz += sharedInfoSeqSz; - kari->sharedInfo = (byte*)XMALLOC(sharedInfoSz, kari->heap, + kari->sharedInfo = (byte*)XMALLOC((word32)sharedInfoSz, kari->heap, DYNAMIC_TYPE_PKCS7); if (kari->sharedInfo == NULL) return MEMORY_E; kari->sharedInfoSz = (word32)sharedInfoSz; - XMEMCPY(kari->sharedInfo + idx, sharedInfoSeq, sharedInfoSeqSz); + XMEMCPY(kari->sharedInfo + idx, sharedInfoSeq, (word32)sharedInfoSeqSz); idx += sharedInfoSeqSz; - XMEMCPY(kari->sharedInfo + idx, keyInfo, keyInfoSz); + XMEMCPY(kari->sharedInfo + idx, keyInfo, (word32)keyInfoSz); idx += keyInfoSz; if (kari->ukmSz > 0) { XMEMCPY(kari->sharedInfo + idx, entityUInfoExplicitSeq, - entityUInfoExplicitSz); + (word32)entityUInfoExplicitSz); idx += entityUInfoExplicitSz; - XMEMCPY(kari->sharedInfo + idx, entityUInfoOctet, entityUInfoOctetSz); + XMEMCPY(kari->sharedInfo + idx, entityUInfoOctet, + (word32)entityUInfoOctetSz); idx += entityUInfoOctetSz; XMEMCPY(kari->sharedInfo + idx, kari->ukm, kari->ukmSz); - idx += kari->ukmSz; + idx += (int)kari->ukmSz; } - XMEMCPY(kari->sharedInfo + idx, suppPubInfoSeq, suppPubInfoSeqSz); + XMEMCPY(kari->sharedInfo + idx, suppPubInfoSeq, (word32)suppPubInfoSeqSz); idx += suppPubInfoSeqSz; - XMEMCPY(kari->sharedInfo + idx, kekOctet, kekOctetSz); + XMEMCPY(kari->sharedInfo + idx, kekOctet, (word32)kekOctetSz); idx += kekOctetSz; kekBitSz = (kari->kekSz) * 8; /* convert to bits */ @@ -7148,7 +7144,7 @@ static int wc_PKCS7_KariGenerateKEK(WC_PKCS7_KARI* kari, WC_RNG* rng, if (kSz < 0) return kSz; - kari->kek = (byte*)XMALLOC(kSz, kari->heap, DYNAMIC_TYPE_PKCS7); + kari->kek = (byte*)XMALLOC((word32)kSz, kari->heap, DYNAMIC_TYPE_PKCS7); if (kari->kek == NULL) return MEMORY_E; @@ -7448,16 +7444,18 @@ int wc_PKCS7_AddRecipient_KARI(PKCS7* pkcs7, const byte* cert, word32 certSz, /* Start of RecipientEncryptedKeys */ /* EncryptedKey */ - encryptedKeyOctetSz = (int)SetOctetString(encryptedKeySz, encryptedKeyOctet); - totalSz += (encryptedKeyOctetSz + encryptedKeySz); + encryptedKeyOctetSz = (int)SetOctetString(encryptedKeySz, + encryptedKeyOctet); + totalSz += (encryptedKeyOctetSz + (int)encryptedKeySz); /* SubjectKeyIdentifier */ subjKeyIdOctetSz = (int)SetOctetString((word32)keyIdSize, subjKeyIdOctet); totalSz += (subjKeyIdOctetSz + keyIdSize); /* RecipientKeyIdentifier IMPLICIT [0] */ - recipKeyIdSeqSz = SetImplicit(ASN_SEQUENCE, 0, subjKeyIdOctetSz + - keyIdSize, recipKeyIdSeq, 0); + recipKeyIdSeqSz = (int)SetImplicit(ASN_SEQUENCE, 0, + (word32)(subjKeyIdOctetSz + keyIdSize), + recipKeyIdSeq, 0); totalSz += recipKeyIdSeqSz; /* RecipientEncryptedKey */ @@ -7472,9 +7470,9 @@ int wc_PKCS7_AddRecipient_KARI(PKCS7* pkcs7, const byte* cert, word32 certSz, if (kari->ukmSz > 0) { ukmOctetSz = (int)SetOctetString(kari->ukmSz, ukmOctetStr); - totalSz += (ukmOctetSz + kari->ukmSz); + totalSz += (ukmOctetSz + (int)kari->ukmSz); - ukmExplicitSz = SetExplicit(1, ukmOctetSz + kari->ukmSz, + ukmExplicitSz = (int)SetExplicit(1, (word32)ukmOctetSz + kari->ukmSz, ukmExplicitSeq, 0); totalSz += ukmExplicitSz; } @@ -7497,7 +7495,7 @@ int wc_PKCS7_AddRecipient_KARI(PKCS7* pkcs7, const byte* cert, word32 certSz, origPubKeyStr[0] = ASN_BIT_STRING; origPubKeyStrSz = (int)SetLength(kari->senderKeyExportSz + 1, origPubKeyStr + 1) + 2; - totalSz += (origPubKeyStrSz + kari->senderKeyExportSz); + totalSz += (origPubKeyStrSz + (int)kari->senderKeyExportSz); /* Originator AlgorithmIdentifier, params set to NULL for interop compatibility */ @@ -7508,15 +7506,15 @@ int wc_PKCS7_AddRecipient_KARI(PKCS7* pkcs7, const byte* cert, word32 certSz, /* outer OriginatorPublicKey IMPLICIT [1] */ origPubKeySeqSz = (int)SetImplicit(ASN_SEQUENCE, 1, - origAlgIdSz + origPubKeyStrSz + - kari->senderKeyExportSz, origPubKeySeq, 0); + (word32)(origAlgIdSz + origPubKeyStrSz + + (int)kari->senderKeyExportSz), origPubKeySeq, 0); totalSz += origPubKeySeqSz; /* outer OriginatorIdentifierOrKey IMPLICIT [0] */ origIdOrKeySeqSz = (int)SetImplicit(ASN_SEQUENCE, 0, - origPubKeySeqSz + origAlgIdSz + - origPubKeyStrSz + kari->senderKeyExportSz, - origIdOrKeySeq, 0); + (word32)(origPubKeySeqSz + origAlgIdSz + + origPubKeyStrSz + (int)kari->senderKeyExportSz), + origIdOrKeySeq, 0); totalSz += origIdOrKeySeqSz; /* version, always 3 */ @@ -7538,53 +7536,53 @@ int wc_PKCS7_AddRecipient_KARI(PKCS7* pkcs7, const byte* cert, word32 certSz, return BUFFER_E; } - XMEMCPY(recip->recip + idx, kariSeq, kariSeqSz); - idx += kariSeqSz; - XMEMCPY(recip->recip + idx, ver, verSz); - idx += verSz; + XMEMCPY(recip->recip + idx, kariSeq, (word32)kariSeqSz); + idx += (word32)kariSeqSz; + XMEMCPY(recip->recip + idx, ver, (word32)verSz); + idx += (word32)verSz; - XMEMCPY(recip->recip + idx, origIdOrKeySeq, origIdOrKeySeqSz); - idx += origIdOrKeySeqSz; - XMEMCPY(recip->recip + idx, origPubKeySeq, origPubKeySeqSz); - idx += origPubKeySeqSz; + XMEMCPY(recip->recip + idx, origIdOrKeySeq, (word32)origIdOrKeySeqSz); + idx += (word32)origIdOrKeySeqSz; + XMEMCPY(recip->recip + idx, origPubKeySeq, (word32)origPubKeySeqSz); + idx += (word32)origPubKeySeqSz; /* AlgorithmIdentifier with NULL parameter */ - XMEMCPY(recip->recip + idx, origAlgId, origAlgIdSz); - idx += origAlgIdSz; + XMEMCPY(recip->recip + idx, origAlgId, (word32)origAlgIdSz); + idx += (word32)origAlgIdSz; - XMEMCPY(recip->recip + idx, origPubKeyStr, origPubKeyStrSz); - idx += origPubKeyStrSz; + XMEMCPY(recip->recip + idx, origPubKeyStr, (word32)origPubKeyStrSz); + idx += (word32)origPubKeyStrSz; /* ephemeral public key */ XMEMCPY(recip->recip + idx, kari->senderKeyExport, kari->senderKeyExportSz); idx += kari->senderKeyExportSz; if (kari->ukmSz > 0) { - XMEMCPY(recip->recip + idx, ukmExplicitSeq, ukmExplicitSz); - idx += ukmExplicitSz; - XMEMCPY(recip->recip + idx, ukmOctetStr, ukmOctetSz); - idx += ukmOctetSz; + XMEMCPY(recip->recip + idx, ukmExplicitSeq, (word32)ukmExplicitSz); + idx += (word32)ukmExplicitSz; + XMEMCPY(recip->recip + idx, ukmOctetStr, (word32)ukmOctetSz); + idx += (word32)ukmOctetSz; XMEMCPY(recip->recip + idx, kari->ukm, kari->ukmSz); idx += kari->ukmSz; } - XMEMCPY(recip->recip + idx, keyEncryptAlgoId, keyEncryptAlgoIdSz); - idx += keyEncryptAlgoIdSz; - XMEMCPY(recip->recip + idx, keyWrapAlg, keyWrapAlgSz); - idx += keyWrapAlgSz; + XMEMCPY(recip->recip + idx, keyEncryptAlgoId, (word32)keyEncryptAlgoIdSz); + idx += (word32)keyEncryptAlgoIdSz; + XMEMCPY(recip->recip + idx, keyWrapAlg, (word32)keyWrapAlgSz); + idx += (word32)keyWrapAlgSz; - XMEMCPY(recip->recip + idx, recipEncKeysSeq, recipEncKeysSeqSz); - idx += recipEncKeysSeqSz; - XMEMCPY(recip->recip + idx, recipEncKeySeq, recipEncKeySeqSz); - idx += recipEncKeySeqSz; - XMEMCPY(recip->recip + idx, recipKeyIdSeq, recipKeyIdSeqSz); - idx += recipKeyIdSeqSz; - XMEMCPY(recip->recip + idx, subjKeyIdOctet, subjKeyIdOctetSz); - idx += subjKeyIdOctetSz; + XMEMCPY(recip->recip + idx, recipEncKeysSeq, (word32)recipEncKeysSeqSz); + idx += (word32)recipEncKeysSeqSz; + XMEMCPY(recip->recip + idx, recipEncKeySeq, (word32)recipEncKeySeqSz); + idx += (word32)recipEncKeySeqSz; + XMEMCPY(recip->recip + idx, recipKeyIdSeq, (word32)recipKeyIdSeqSz); + idx += (word32)recipKeyIdSeqSz; + XMEMCPY(recip->recip + idx, subjKeyIdOctet, (word32)subjKeyIdOctetSz); + idx += (word32)subjKeyIdOctetSz; /* subject key id */ - XMEMCPY(recip->recip + idx, kari->decoded->extSubjKeyId, keyIdSize); - idx += keyIdSize; - XMEMCPY(recip->recip + idx, encryptedKeyOctet, encryptedKeyOctetSz); - idx += encryptedKeyOctetSz; + XMEMCPY(recip->recip + idx, kari->decoded->extSubjKeyId, (word32)keyIdSize); + idx += (word32)keyIdSize; + XMEMCPY(recip->recip + idx, encryptedKeyOctet, (word32)encryptedKeyOctetSz); + idx += (word32)encryptedKeyOctetSz; /* encrypted CEK */ XMEMCPY(recip->recip + idx, encryptedKey, encryptedKeySz); idx += encryptedKeySz; @@ -7799,8 +7797,8 @@ int wc_PKCS7_AddRecipient_KTRI(PKCS7* pkcs7, const byte* cert, word32 certSz, XFREE(recip, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return -1; } - snSz = SetSerialNumber(decoded->serial, decoded->serialSz, serial, - MAX_SN_SZ, MAX_SN_SZ); + snSz = SetSerialNumber(decoded->serial, (word32)decoded->serialSz, + serial, MAX_SN_SZ, MAX_SN_SZ); if (snSz < 0) { WOLFSSL_MSG("Error setting the serial number"); FreeDecodedCert(decoded); @@ -7813,8 +7811,8 @@ int wc_PKCS7_AddRecipient_KTRI(PKCS7* pkcs7, const byte* cert, word32 certSz, XFREE(recip, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return -1; } - issuerSerialSeqSz = SetSequence(issuerSeqSz + issuerSz + snSz, - issuerSerialSeq); + issuerSerialSeqSz = (int)SetSequence((word32)(issuerSeqSz + issuerSz + + snSz), issuerSerialSeq); } else if (sidType == CMS_SKID) { /* version, must be 2 for SubjectKeyIdentifier */ @@ -7849,7 +7847,8 @@ int wc_PKCS7_AddRecipient_KTRI(PKCS7* pkcs7, const byte* cert, word32 certSz, return ALGO_ID_E; } - keyEncAlgSz = SetAlgoID(pkcs7->publicKeyOID, keyAlgArray, oidKeyType, 0); + keyEncAlgSz = (int)SetAlgoID((int)pkcs7->publicKeyOID, keyAlgArray, + oidKeyType, 0); if (keyEncAlgSz == 0) { FreeDecodedCert(decoded); #ifdef WOLFSSL_SMALL_STACK @@ -7961,12 +7960,12 @@ int wc_PKCS7_AddRecipient_KTRI(PKCS7* pkcs7, const byte* cert, word32 certSz, /* RecipientInfo */ if (sidType == CMS_ISSUER_AND_SERIAL_NUMBER) { - recipSeqSz = (int)SetSequence(verSz + issuerSerialSeqSz + issuerSeqSz + - issuerSz + snSz + keyEncAlgSz + - encKeyOctetStrSz + encryptedKeySz, recipSeq); + int recipLen = verSz + (int)issuerSerialSeqSz + issuerSeqSz + + issuerSz + snSz + keyEncAlgSz + encKeyOctetStrSz + + (int)encryptedKeySz; + recipSeqSz = (int)SetSequence((word32)recipLen, recipSeq); - if (recipSeqSz + verSz + issuerSerialSeqSz + issuerSeqSz + snSz + - keyEncAlgSz + encKeyOctetStrSz + encryptedKeySz > MAX_RECIP_SZ) { + if ((recipSeqSz + recipLen) > MAX_RECIP_SZ) { WOLFSSL_MSG("RecipientInfo output buffer too small"); FreeDecodedCert(decoded); #ifdef WOLFSSL_SMALL_STACK @@ -7980,12 +7979,10 @@ int wc_PKCS7_AddRecipient_KTRI(PKCS7* pkcs7, const byte* cert, word32 certSz, } } else { - recipSeqSz = SetSequence(verSz + ASN_TAG_SZ + issuerSKIDSz + - keyIdSize + keyEncAlgSz + encKeyOctetStrSz + - encryptedKeySz, recipSeq); - - if (recipSeqSz + verSz + ASN_TAG_SZ + issuerSKIDSz + keyIdSize + - keyEncAlgSz + encKeyOctetStrSz + encryptedKeySz > MAX_RECIP_SZ) { + int recipLen = verSz + ASN_TAG_SZ + (int)issuerSKIDSz + keyIdSize + + keyEncAlgSz + encKeyOctetStrSz + (int)encryptedKeySz; + recipSeqSz = (int)SetSequence((word32)recipLen, recipSeq); + if ((recipSeqSz + recipLen) > MAX_RECIP_SZ) { WOLFSSL_MSG("RecipientInfo output buffer too small"); FreeDecodedCert(decoded); #ifdef WOLFSSL_SMALL_STACK @@ -8000,31 +7997,31 @@ int wc_PKCS7_AddRecipient_KTRI(PKCS7* pkcs7, const byte* cert, word32 certSz, } idx = 0; - XMEMCPY(recip->recip + idx, recipSeq, recipSeqSz); - idx += recipSeqSz; - XMEMCPY(recip->recip + idx, ver, verSz); - idx += verSz; + XMEMCPY(recip->recip + idx, recipSeq, (word32)recipSeqSz); + idx += (word32)recipSeqSz; + XMEMCPY(recip->recip + idx, ver, (word32)verSz); + idx += (word32)verSz; if (sidType == CMS_ISSUER_AND_SERIAL_NUMBER) { - XMEMCPY(recip->recip + idx, issuerSerialSeq, issuerSerialSeqSz); - idx += issuerSerialSeqSz; - XMEMCPY(recip->recip + idx, issuerSeq, issuerSeqSz); - idx += issuerSeqSz; - XMEMCPY(recip->recip + idx, decoded->issuerRaw, issuerSz); - idx += issuerSz; - XMEMCPY(recip->recip + idx, serial, snSz); - idx += snSz; + XMEMCPY(recip->recip + idx, issuerSerialSeq, (word32)issuerSerialSeqSz); + idx += (word32)issuerSerialSeqSz; + XMEMCPY(recip->recip + idx, issuerSeq, (word32)issuerSeqSz); + idx += (word32)issuerSeqSz; + XMEMCPY(recip->recip + idx, decoded->issuerRaw, (word32)issuerSz); + idx += (word32)issuerSz; + XMEMCPY(recip->recip + idx, serial, (word32)snSz); + idx += (word32)snSz; } else { recip->recip[idx] = ASN_CONTEXT_SPECIFIC; idx += ASN_TAG_SZ; XMEMCPY(recip->recip + idx, issuerSKID, issuerSKIDSz); idx += issuerSKIDSz; - XMEMCPY(recip->recip + idx, pkcs7->issuerSubjKeyId, keyIdSize); - idx += keyIdSize; + XMEMCPY(recip->recip + idx, pkcs7->issuerSubjKeyId, (word32)keyIdSize); + idx += (word32)keyIdSize; } - XMEMCPY(recip->recip + idx, keyAlgArray, keyEncAlgSz); - idx += keyEncAlgSz; - XMEMCPY(recip->recip + idx, encKeyOctetStr, encKeyOctetStrSz); - idx += encKeyOctetStrSz; + XMEMCPY(recip->recip + idx, keyAlgArray, (word32)keyEncAlgSz); + idx += (word32)keyEncAlgSz; + XMEMCPY(recip->recip + idx, encKeyOctetStr, (word32)encKeyOctetStrSz); + idx += (word32)encKeyOctetStrSz; XMEMCPY(recip->recip + idx, encryptedKey, encryptedKeySz); idx += encryptedKeySz; @@ -8207,16 +8204,18 @@ static int wc_PKCS7_EncryptContent(PKCS7* pkcs7, int encryptOID, byte* key, ret = NOT_COMPILED_IN; } else { - ret = wc_AesGcmEncrypt(aes, out, in, inSz, iv, ivSz, - authTag, authTagSz, aad, aadSz); + ret = wc_AesGcmEncrypt(aes, out, in, (word32)inSz, iv, + (word32)ivSz, authTag, authTagSz, aad, aadSz); #ifdef WOLFSSL_ASYNC_CRYPT - /* async encrypt not available here, so block till done */ + /* async encrypt not available here, so block till done + */ ret = wc_AsyncWait(ret, &aes->asyncDev, WC_ASYNC_FLAG_NONE); #endif } #else - ret = wc_AesGcmEncryptInit(aes, key, (word32)keySz, iv, ivSz); + ret = wc_AesGcmEncryptInit(aes, key, (word32)keySz, iv, + (word32)ivSz); if (ret == 0) { ret = wc_AesGcmEncryptUpdate(aes, NULL, NULL, 0, aad, aadSz); @@ -8268,8 +8267,9 @@ static int wc_PKCS7_EncryptContent(PKCS7* pkcs7, int encryptOID, byte* key, if (ret == 0) { ret = wc_AesCcmSetKey(aes, key, (word32)keySz); if (ret == 0) { - ret = wc_AesCcmEncrypt(aes, out, in, (word32)inSz, iv, ivSz, - authTag, authTagSz, aad, aadSz); + ret = wc_AesCcmEncrypt(aes, out, in, (word32)inSz, iv, + (word32)ivSz, authTag, authTagSz, + aad, aadSz); #ifdef WOLFSSL_ASYNC_CRYPT /* async encrypt not available here, so block till done */ ret = wc_AsyncWait(ret, &aes->asyncDev, WC_ASYNC_FLAG_NONE); @@ -8439,8 +8439,9 @@ static int wc_PKCS7_DecryptContent(PKCS7* pkcs7, int encryptOID, byte* key, if (ret == 0) { ret = wc_AesGcmSetKey(aes, key, (word32)keySz); if (ret == 0) { - ret = wc_AesGcmDecrypt(aes, out, in, (word32)inSz, iv, ivSz, - authTag, authTagSz, aad, aadSz); + ret = wc_AesGcmDecrypt(aes, out, in, (word32)inSz, iv, + (word32)ivSz, authTag, authTagSz, + aad, aadSz); #ifdef WOLFSSL_ASYNC_CRYPT /* async decrypt not available here, so block till done */ ret = wc_AsyncWait(ret, &aes->asyncDev, WC_ASYNC_FLAG_NONE); @@ -8478,8 +8479,9 @@ static int wc_PKCS7_DecryptContent(PKCS7* pkcs7, int encryptOID, byte* key, if (ret == 0) { ret = wc_AesCcmSetKey(aes, key, (word32)keySz); if (ret == 0) { - ret = wc_AesCcmDecrypt(aes, out, in, (word32)inSz, iv, ivSz, - authTag, authTagSz, aad, aadSz); + ret = wc_AesCcmDecrypt(aes, out, in, (word32)inSz, iv, + (word32)ivSz, authTag, authTagSz, + aad, aadSz); #ifdef WOLFSSL_ASYNC_CRYPT /* async decrypt not available here, so block till done */ ret = wc_AsyncWait(ret, &aes->asyncDev, WC_ASYNC_FLAG_NONE); @@ -8633,14 +8635,14 @@ int wc_PKCS7_SetContentType(PKCS7* pkcs7, byte* contentType, word32 sz) /* return size of padded data, padded to blockSz chunks, or negative on error */ int wc_PKCS7_GetPadSize(word32 inputSz, word32 blockSz) { - int padSz; + word32 padSz; if (blockSz == 0) return BAD_FUNC_ARG; padSz = blockSz - (inputSz % blockSz); - return padSz; + return (int)padSz; } @@ -8649,15 +8651,17 @@ int wc_PKCS7_GetPadSize(word32 inputSz, word32 blockSz) int wc_PKCS7_PadData(byte* in, word32 inSz, byte* out, word32 outSz, word32 blockSz) { - int i, padSz; + int ret; + word32 i, padSz; if (in == NULL || inSz == 0 || out == NULL || outSz == 0) return BAD_FUNC_ARG; - padSz = wc_PKCS7_GetPadSize(inSz, blockSz); - if (padSz < 0) - return padSz; + ret = wc_PKCS7_GetPadSize(inSz, blockSz); + if (ret < 0) + return ret; + padSz = (word32)ret; if (outSz < (inSz + padSz)) return BAD_FUNC_ARG; @@ -8668,7 +8672,7 @@ int wc_PKCS7_PadData(byte* in, word32 inSz, byte* out, word32 outSz, out[inSz + i] = (byte)padSz; } - return inSz + padSz; + return (int)(inSz + padSz); } @@ -8729,8 +8733,8 @@ int wc_PKCS7_AddRecipient_ORI(PKCS7* pkcs7, CallbackOriEncrypt oriEncryptCb, oriTypeLenSz = (int)SetLength(oriTypeSz, oriTypeLen); - recipSeqSz = SetImplicit(ASN_SEQUENCE, 4, 1 + oriTypeLenSz + oriTypeSz + - oriValueSz, recipSeq, 0); + recipSeqSz = SetImplicit(ASN_SEQUENCE, 4, 1 + (word32)oriTypeLenSz + + oriTypeSz + oriValueSz, recipSeq, 0); idx = 0; XMEMCPY(recip->recip + idx, recipSeq, recipSeqSz); @@ -8738,8 +8742,8 @@ int wc_PKCS7_AddRecipient_ORI(PKCS7* pkcs7, CallbackOriEncrypt oriEncryptCb, /* oriType */ recip->recip[idx] = ASN_OBJECT_ID; idx += 1; - XMEMCPY(recip->recip + idx, oriTypeLen, oriTypeLenSz); - idx += oriTypeLenSz; + XMEMCPY(recip->recip + idx, oriTypeLen, (word32)oriTypeLenSz); + idx += (word32)oriTypeLenSz; XMEMCPY(recip->recip + idx, oriType, oriTypeSz); idx += oriTypeSz; /* oriValue, input MUST already be ASN.1 encoded */ @@ -8784,8 +8788,8 @@ static int wc_PKCS7_GenerateKEK_PWRI(PKCS7* pkcs7, byte* passwd, word32 pLen, case PBKDF2_OID: - ret = wc_PBKDF2(out, passwd, (int)pLen, salt, saltSz, iterations, - (int)outSz, prfOID); + ret = wc_PBKDF2(out, passwd, (int)pLen, salt, (int)saltSz, + iterations, (int)outSz, prfOID); if (ret != 0) { return ret; } @@ -8827,12 +8831,12 @@ static int wc_PKCS7_PwriKek_KeyWrap(PKCS7* pkcs7, const byte* kek, word32 kekSz, } /* get pad bytes needed to block boundary */ - padSz = blockSz - ((4 + cekSz) % blockSz); - outLen = 4 + cekSz + padSz; + padSz = (word32)blockSz - ((4 + cekSz) % (word32)blockSz); + outLen = (int)(4 + cekSz + padSz); /* must be at least two blocks long */ if (outLen < 2 * blockSz) - padSz += blockSz; + padSz += (word32)blockSz; /* if user set out to NULL, give back required length */ if (out == NULL) { @@ -8917,7 +8921,7 @@ static int wc_PKCS7_PwriKek_KeyUnWrap(PKCS7* pkcs7, const byte* kek, } /* input needs to be blockSz multiple and at least 2 * blockSz */ - if (((inSz % blockSz) != 0) || (inSz < (2 * (word32)blockSz))) { + if (((inSz % (word32)blockSz) != 0) || (inSz < (2 * (word32)blockSz))) { WOLFSSL_MSG("PWRI-KEK unwrap input must of block size and >= 2 " "times block size"); XFREE(outTmp, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER); @@ -8937,15 +8941,15 @@ static int wc_PKCS7_PwriKek_KeyUnWrap(PKCS7* pkcs7, const byte* kek, /* using last decrypted block as IV, decrypt [0 ... n-1] blocks */ lastBlock = outTmp + inSz - blockSz; ret = wc_PKCS7_DecryptContent(pkcs7, algID, (byte*)kek, (int)kekSz, - lastBlock, blockSz, NULL, 0, NULL, 0, (byte*)in, inSz - blockSz, - outTmp, pkcs7->devId, pkcs7->heap); + lastBlock, blockSz, NULL, 0, NULL, 0, (byte*)in, + (int)inSz - blockSz, outTmp, pkcs7->devId, pkcs7->heap); } if (ret == 0) { /* decrypt using original kek and iv */ ret = wc_PKCS7_DecryptContent(pkcs7, algID, (byte*)kek, (int)kekSz, - (byte*)iv, ivSz, NULL, 0, NULL, 0, outTmp, inSz, outTmp, - pkcs7->devId, pkcs7->heap); + (byte*)iv, (int)ivSz, NULL, 0, NULL, 0, outTmp, (int)inSz, + outTmp, pkcs7->devId, pkcs7->heap); } if (ret != 0) { @@ -9080,7 +9084,7 @@ int wc_PKCS7_AddRecipient_PWRI(PKCS7* pkcs7, byte* passwd, word32 pLen, if (recip == NULL) return MEMORY_E; - kek = (byte*)XMALLOC(kekKeySz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + kek = (byte*)XMALLOC((word32)kekKeySz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); if (kek == NULL) { XFREE(recip, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return MEMORY_E; @@ -9096,7 +9100,7 @@ int wc_PKCS7_AddRecipient_PWRI(PKCS7* pkcs7, byte* passwd, word32 pLen, encryptedKeySz = MAX_ENCRYPTED_KEY_SZ; XMEMSET(recip, 0, sizeof(Pkcs7EncodedRecip)); - XMEMSET(kek, 0, kekKeySz); + XMEMSET(kek, 0, (word32)kekKeySz); XMEMSET(encryptedKey, 0, encryptedKeySz); /* generate KEK: expand password into KEK */ @@ -9128,12 +9132,12 @@ int wc_PKCS7_AddRecipient_PWRI(PKCS7* pkcs7, byte* passwd, word32 pLen, /* put together IV OCTET STRING */ ivOctetStringSz = SetOctetString((word32)kekBlockSz, ivOctetString); - totalSz += (ivOctetStringSz + kekBlockSz); + totalSz += (ivOctetStringSz + (word32)kekBlockSz); /* set PWRIAlgorithms AlgorithmIdentifier, adding (ivOctetStringSz + blockKeySz) for IV OCTET STRING */ pwriEncAlgoIdSz = SetAlgoID(encryptOID, pwriEncAlgoId, - oidBlkType, ivOctetStringSz + kekBlockSz); + oidBlkType, (int)ivOctetStringSz + kekBlockSz); totalSz += pwriEncAlgoIdSz; /* set KeyEncryptionAlgorithms OID */ @@ -9149,7 +9153,7 @@ int wc_PKCS7_AddRecipient_PWRI(PKCS7* pkcs7, byte* passwd, word32 pLen, /* KeyEncryptionAlgorithm SEQ */ keyEncAlgoIdSeqSz = SetSequence(keyEncAlgoIdSz + pwriEncAlgoIdSz + - ivOctetStringSz + kekBlockSz, + ivOctetStringSz + (word32)kekBlockSz, keyEncAlgoIdSeq); totalSz += keyEncAlgoIdSeqSz; @@ -9225,8 +9229,8 @@ int wc_PKCS7_AddRecipient_PWRI(PKCS7* pkcs7, byte* passwd, word32 pLen, idx += pwriEncAlgoIdSz; XMEMCPY(recip->recip + idx, ivOctetString, ivOctetStringSz); idx += ivOctetStringSz; - XMEMCPY(recip->recip + idx, tmpIv, kekBlockSz); - idx += kekBlockSz; + XMEMCPY(recip->recip + idx, tmpIv, (word32)kekBlockSz); + idx += (word32)kekBlockSz; XMEMCPY(recip->recip + idx, encKeyOctetStr, encKeyOctetStrSz); idx += encKeyOctetStrSz; XMEMCPY(recip->recip + idx, encryptedKey, encryptedKeySz); @@ -9361,7 +9365,7 @@ int wc_PKCS7_AddRecipient_KEKRI(PKCS7* pkcs7, int keyWrapOID, byte* kek, } #endif encryptedKeySz = MAX_ENCRYPTED_KEY_SZ; - XMEMSET(encryptedKey, 0, encryptedKeySz); + XMEMSET(encryptedKey, 0, (word32)encryptedKeySz); #ifndef NO_AES direction = AES_ENCRYPTION; @@ -9389,7 +9393,7 @@ int wc_PKCS7_AddRecipient_KEKRI(PKCS7* pkcs7, int keyWrapOID, byte* kek, } encKeyOctetStrSz = SetOctetString((word32)encryptedKeySz, encKeyOctetStr); - totalSz += (encKeyOctetStrSz + encryptedKeySz); + totalSz += (encKeyOctetStrSz + (word32)encryptedKeySz); /* KeyEncryptionAlgorithmIdentifier */ encAlgoIdSz = SetAlgoID(keyWrapOID, encAlgoId, oidKeyWrapType, 0); @@ -9411,7 +9415,7 @@ int wc_PKCS7_AddRecipient_KEKRI(PKCS7* pkcs7, int keyWrapOID, byte* kek, #endif return timeSz; } - totalSz += timeSz; + totalSz += (word32)timeSz; } #endif @@ -9422,7 +9426,7 @@ int wc_PKCS7_AddRecipient_KEKRI(PKCS7* pkcs7, int keyWrapOID, byte* kek, } /* KEKIdentifier SEQ */ - kekIdSeqSz = SetSequence(kekIdOctetStrSz + keyIdSz + timeSz + + kekIdSeqSz = SetSequence(kekIdOctetStrSz + keyIdSz + (word32)timeSz + otherAttSeqSz + otherOIDSz + otherSz, kekIdSeq); totalSz += kekIdSeqSz; @@ -9455,8 +9459,8 @@ int wc_PKCS7_AddRecipient_KEKRI(PKCS7* pkcs7, int keyWrapOID, byte* kek, XMEMCPY(recip->recip + idx, keyId, keyIdSz); idx += keyIdSz; if (timePtr != NULL) { - XMEMCPY(recip->recip + idx, genTime, timeSz); - idx += timeSz; + XMEMCPY(recip->recip + idx, genTime, (word32)timeSz); + idx += (word32)timeSz; } if (other != NULL && otherSz > 0) { XMEMCPY(recip->recip + idx, otherAttSeq, otherAttSeqSz); @@ -9470,8 +9474,8 @@ int wc_PKCS7_AddRecipient_KEKRI(PKCS7* pkcs7, int keyWrapOID, byte* kek, idx += encAlgoIdSz; XMEMCPY(recip->recip + idx, encKeyOctetStr, encKeyOctetStrSz); idx += encKeyOctetStrSz; - XMEMCPY(recip->recip + idx, encryptedKey, encryptedKeySz); - idx += encryptedKeySz; + XMEMCPY(recip->recip + idx, encryptedKey, (word32)encryptedKeySz); + idx += (word32)encryptedKeySz; #ifdef WOLFSSL_SMALL_STACK XFREE(encryptedKey, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -9699,20 +9703,21 @@ int wc_PKCS7_EncodeEnvelopedData(PKCS7* pkcs7, byte* output, word32 outputSz) return padSz; } - encryptedOutSz = pkcs7->contentSz + padSz; + encryptedOutSz = (int)pkcs7->contentSz + padSz; #ifdef ASN_BER_TO_DER if (pkcs7->getContentCb == NULL) #endif { - plain = (byte*)XMALLOC(encryptedOutSz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + plain = (byte*)XMALLOC((word32)encryptedOutSz, pkcs7->heap, + DYNAMIC_TYPE_PKCS7); if (plain == NULL) { wc_PKCS7_FreeEncodedRecipientSet(pkcs7); return MEMORY_E; } ret = wc_PKCS7_PadData(pkcs7->content, pkcs7->contentSz, plain, - (word32)encryptedOutSz, blockSz); + (word32)encryptedOutSz, (word32)blockSz); if (ret < 0) { XFREE(plain, pkcs7->heap, DYNAMIC_TYPE_PKCS7); wc_PKCS7_FreeEncodedRecipientSet(pkcs7); @@ -9725,7 +9730,7 @@ int wc_PKCS7_EncodeEnvelopedData(PKCS7* pkcs7, byte* output, word32 outputSz) if (pkcs7->streamOutCb == NULL) #endif { - encryptedContent = (byte*)XMALLOC(encryptedOutSz, pkcs7->heap, + encryptedContent = (byte*)XMALLOC((word32)encryptedOutSz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); if (encryptedContent == NULL) { XFREE(plain, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -9751,9 +9756,9 @@ int wc_PKCS7_EncodeEnvelopedData(PKCS7* pkcs7, byte* output, word32 outputSz) encContentOctetSz = (int)SetImplicit(ASN_OCTET_STRING, 0, (word32)encryptedOutSz, encContentOctet, pkcs7->encodeStream); - encContentSeqSz = (int)SetSequenceEx(contentTypeSz + contentEncAlgoSz + - ivOctetStringSz + blockSz + - encContentOctetSz + encryptedOutSz, + encContentSeqSz = (int)SetSequenceEx((word32)(contentTypeSz + + contentEncAlgoSz + ivOctetStringSz + blockSz + + encContentOctetSz + encryptedOutSz), encContentSeq, pkcs7->encodeStream); /* keep track of sizes for outer wrapper layering */ @@ -9773,8 +9778,9 @@ int wc_PKCS7_EncodeEnvelopedData(PKCS7* pkcs7, byte* output, word32 outputSz) totalSz += ASN_INDEF_END_SZ; /* account for asn1 syntax around octet strings */ - StreamOctetString(NULL, (word32)encryptedOutSz, NULL, &streamSz, &tmpIdx); - totalSz += (streamSz - encryptedOutSz); + StreamOctetString(NULL, (word32)encryptedOutSz, NULL, &streamSz, + &tmpIdx); + totalSz += ((int)streamSz - encryptedOutSz); /* resize encrypted content buffer */ if (encryptedContent != NULL) { @@ -9858,7 +9864,7 @@ int wc_PKCS7_EncodeEnvelopedData(PKCS7* pkcs7, byte* output, word32 outputSz) while (tmpRecip != NULL) { wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, tmpRecip->recip, tmpRecip->recipSz); - idx += tmpRecip->recipSz; + idx += (int)tmpRecip->recipSz; tmpRecip = tmpRecip->next; } wc_PKCS7_FreeEncodedRecipientSet(pkcs7); @@ -9884,16 +9890,12 @@ int wc_PKCS7_EncodeEnvelopedData(PKCS7* pkcs7, byte* output, word32 outputSz) /* encrypt content */ ret = wc_PKCS7_EncryptContent(pkcs7, pkcs7->encryptOID, pkcs7->cek, - pkcs7->cekSz, tmpIv, blockSz, NULL, 0, NULL, 0, plain, + (int)pkcs7->cekSz, tmpIv, blockSz, NULL, 0, NULL, 0, plain, encryptedOutSz, encryptedContent); if (ret != 0) { - if (encryptedContent != NULL) { - XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - } + XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - if (plain != NULL) { - XFREE(plain, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - } + XFREE(plain, pkcs7->heap, DYNAMIC_TYPE_PKCS7); wc_PKCS7_FreeEncodedRecipientSet(pkcs7); return ret; @@ -9910,7 +9912,7 @@ int wc_PKCS7_EncodeEnvelopedData(PKCS7* pkcs7, byte* output, word32 outputSz) wc_PKCS7_WriteOut(pkcs7, (output)? output + idx : NULL, encryptedContent, streamSz); } - idx += streamSz; + idx += (int)streamSz; /* end of encrypted content */ localIdx += SetIndefEnd(indefEnd + localIdx); @@ -9929,23 +9931,19 @@ int wc_PKCS7_EncodeEnvelopedData(PKCS7* pkcs7, byte* output, word32 outputSz) wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, indefEnd, localIdx); - idx += localIdx; + idx += (int)localIdx; } else #endif { wc_PKCS7_WriteOut(pkcs7, (output)? (output + idx) : NULL, - encryptedContent, encryptedOutSz); + encryptedContent, (word32)encryptedOutSz); idx += encryptedOutSz; } - if (plain != NULL) { - XFREE(plain, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - } + XFREE(plain, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - if (encryptedContent != NULL) { - XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - } + XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return idx; } @@ -10085,7 +10083,8 @@ static int wc_PKCS7_DecryptKtri(PKCS7* pkcs7, byte* in, word32 inSz, return ASN_PARSE_E; /* if we found correct recipient, issuer hashes will match */ - if (XMEMCMP(issuerHash, pkcs7->issuerHash, keyIdSize) == 0) { + if (XMEMCMP(issuerHash, pkcs7->issuerHash, + (word32)keyIdSize) == 0) { *recipFound = 1; } @@ -10138,10 +10137,10 @@ static int wc_PKCS7_DecryptKtri(PKCS7* pkcs7, byte* in, word32 inSz, /* if we found correct recipient, SKID will match */ if (XMEMCMP(pkiMsg + (*idx), pkcs7->issuerSubjKeyId, - keyIdSize) == 0) { + (word32)keyIdSize) == 0) { *recipFound = 1; } - (*idx) += keyIdSize; + (*idx) += (word32)keyIdSize; } if (GetAlgoId(pkiMsg, idx, &encOID, oidKeyType, pkiMsgSz) < 0) @@ -10202,14 +10201,14 @@ static int wc_PKCS7_DecryptKtri(PKCS7* pkcs7, byte* in, word32 inSz, #endif /* Always allocate to ensure aligned use with RSA */ - encryptedKey = (byte*)XMALLOC(encryptedKeySz, pkcs7->heap, + encryptedKey = (byte*)XMALLOC((word32)encryptedKeySz, pkcs7->heap, DYNAMIC_TYPE_WOLF_BIGINT); if (encryptedKey == NULL) return MEMORY_E; if (*recipFound == 1) - XMEMCPY(encryptedKey, &pkiMsg[*idx], encryptedKeySz); - *idx += encryptedKeySz; + XMEMCPY(encryptedKey, &pkiMsg[*idx], (word32)encryptedKeySz); + *idx += (word32)encryptedKeySz; /* load private key */ #ifdef WOLFSSL_SMALL_STACK @@ -10324,7 +10323,7 @@ static int wc_PKCS7_DecryptKtri(PKCS7* pkcs7, byte* in, word32 inSz, return keySz; } else { *decryptedKeySz = (word32)keySz; - XMEMCPY(decryptedKey, outKey, keySz); + XMEMCPY(decryptedKey, outKey, (word32)keySz); ForceZero(encryptedKey, (word32)encryptedKeySz); } @@ -10430,15 +10429,16 @@ static int wc_PKCS7_KariGetOriginatorIdentifierOrKey(WC_PKCS7_KARI* kari, kari->senderKeyInit = 1; /* length-1 for unused bits counter */ - ret = wc_ecc_import_x963_ex(pkiMsg + (*idx), length - 1, kari->senderKey, - curve_id); + ret = wc_ecc_import_x963_ex(pkiMsg + (*idx), (word32)length - 1, + kari->senderKey, curve_id); if (ret != 0) { - ret = wc_EccPublicKeyDecode(pkiMsg, idx, kari->senderKey, *idx + length - 1); + ret = wc_EccPublicKeyDecode(pkiMsg, idx, kari->senderKey, + *idx + (word32)length - 1); if (ret != 0) return ret; } else { - (*idx) += length - 1; + (*idx) += (word32)(length - 1); } return 0; @@ -10491,15 +10491,16 @@ static int wc_PKCS7_KariGetUserKeyingMaterial(WC_PKCS7_KARI* kari, kari->ukm = NULL; if (length > 0) { - kari->ukm = (byte*)XMALLOC(length, kari->heap, DYNAMIC_TYPE_PKCS7); + kari->ukm = (byte*)XMALLOC((word32)length, kari->heap, + DYNAMIC_TYPE_PKCS7); if (kari->ukm == NULL) return MEMORY_E; - XMEMCPY(kari->ukm, pkiMsg + (*idx), length); + XMEMCPY(kari->ukm, pkiMsg + (*idx), (word32)length); kari->ukmOwner = 1; } - (*idx) += length; + (*idx) += (word32)length; kari->ukmSz = (word32)length; return 0; @@ -10531,7 +10532,7 @@ static int wc_PKCS7_KariGetKeyEncryptionAlgorithmId(WC_PKCS7_KARI* kari, return ASN_PARSE_E; } - if (localIdx < *idx + length) { + if (localIdx < *idx + (word32)length) { *idx = localIdx; } /* remove KeyWrapAlgorithm, stored in parameter of KeyEncAlgoId */ @@ -10590,11 +10591,11 @@ static int wc_PKCS7_KariGetSubjectKeyIdentifier(WC_PKCS7_KARI* kari, if (length != keyIdSize) return ASN_PARSE_E; - XMEMCPY(rid, pkiMsg + (*idx), keyIdSize); - (*idx) += length; + XMEMCPY(rid, pkiMsg + (*idx), (word32)keyIdSize); + (*idx) += (word32)length; /* subject key id should match if recipient found */ - if (XMEMCMP(rid, kari->decoded->extSubjKeyId, keyIdSize) == 0) { + if (XMEMCMP(rid, kari->decoded->extSubjKeyId, (word32)keyIdSize) == 0) { *recipFound = 1; } @@ -10640,7 +10641,7 @@ static int wc_PKCS7_KariGetIssuerAndSerialNumber(WC_PKCS7_KARI* kari, /* if we found correct recipient, issuer hashes will match */ if (kari->decodedInit == 1) { - if (XMEMCMP(rid, kari->decoded->issuerHash, keyIdSize) == 0) { + if (XMEMCMP(rid, kari->decoded->issuerHash, (word32)keyIdSize) == 0) { *recipFound = 1; } } @@ -10675,7 +10676,7 @@ static int wc_PKCS7_KariGetIssuerAndSerialNumber(WC_PKCS7_KARI* kari, ret = mp_init(recipSerial); if (ret == MP_OKAY) ret = mp_read_unsigned_bin(recipSerial, kari->decoded->serial, - kari->decoded->serialSz); + (word32)kari->decoded->serialSz); if (ret != MP_OKAY) { mp_clear(serial); WOLFSSL_MSG("Failed to parse CMS recipient serial number"); @@ -10767,9 +10768,9 @@ static int wc_PKCS7_KariGetRecipientEncryptedKeys(WC_PKCS7_KARI* kari, if (length > *encryptedKeySz) return BUFFER_E; - XMEMCPY(encryptedKey, pkiMsg + (*idx), length); + XMEMCPY(encryptedKey, pkiMsg + (*idx), (word32)length); *encryptedKeySz = length; - (*idx) += length; + (*idx) += (word32)length; return 0; } @@ -10880,12 +10881,12 @@ static int wc_PKCS7_DecryptOri(PKCS7* pkcs7, byte* in, word32 inSz, if (GetASNObjectId(pkiMsg, idx, &oriOIDSz, pkiMsgSz) != 0) return ASN_PARSE_E; - XMEMCPY(oriOID, pkiMsg + *idx, oriOIDSz); - *idx += oriOIDSz; + XMEMCPY(oriOID, pkiMsg + *idx, (word32)oriOIDSz); + *idx += (word32)oriOIDSz; /* get oriValue, increment idx */ oriValue = pkiMsg + *idx; - oriValueSz = seqSz - (*idx - tmpIdx); + oriValueSz = (word32)seqSz - (*idx - tmpIdx); *idx += oriValueSz; /* pass oriOID and oriValue to user callback, expect back @@ -10993,12 +10994,13 @@ static int wc_PKCS7_DecryptPwri(PKCS7* pkcs7, byte* in, word32 inSz, if (GetLength(pkiMsg, idx, &saltSz, pkiMsgSz) < 0) return ASN_PARSE_E; - salt = (byte*)XMALLOC(saltSz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + salt = (byte*)XMALLOC((word32)saltSz, pkcs7->heap, + DYNAMIC_TYPE_PKCS7); if (salt == NULL) return MEMORY_E; - XMEMCPY(salt, pkiMsg + (*idx), saltSz); - *idx += saltSz; + XMEMCPY(salt, pkiMsg + (*idx), (word32)saltSz); + *idx += (word32)saltSz; /* get KDF iterations */ if (GetMyVersion(pkiMsg, idx, &iterations, pkiMsgSz) < 0) { @@ -11019,7 +11021,8 @@ static int wc_PKCS7_DecryptPwri(PKCS7* pkcs7, byte* in, word32 inSz, } /* get pwriEncAlgoId */ - if (GetAlgoId(pkiMsg, idx, &pwriEncAlgoId, oidBlkType, pkiMsgSz) < 0) { + if (GetAlgoId(pkiMsg, idx, &pwriEncAlgoId, oidBlkType, + pkiMsgSz) < 0) { XFREE(salt, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return ASN_PARSE_E; } @@ -11059,8 +11062,8 @@ static int wc_PKCS7_DecryptPwri(PKCS7* pkcs7, byte* in, word32 inSz, return ASN_PARSE_E; } - XMEMCPY(tmpIv, pkiMsg + (*idx), length); - *idx += length; + XMEMCPY(tmpIv, pkiMsg + (*idx), (word32)length); + *idx += (word32)length; /* get EncryptedKey */ if (GetASNTag(pkiMsg, idx, &tag, pkiMsgSz) < 0) { @@ -11087,7 +11090,8 @@ static int wc_PKCS7_DecryptPwri(PKCS7* pkcs7, byte* in, word32 inSz, } /* generate KEK */ - kek = (byte*)XMALLOC(kekKeySz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + kek = (byte*)XMALLOC((word32)kekKeySz, pkcs7->heap, + DYNAMIC_TYPE_PKCS7); if (kek == NULL) { XFREE(salt, pkcs7->heap, DYNAMIC_TYPE_PKCS7); XFREE(cek, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -11095,8 +11099,8 @@ static int wc_PKCS7_DecryptPwri(PKCS7* pkcs7, byte* in, word32 inSz, } ret = wc_PKCS7_GenerateKEK_PWRI(pkcs7, pkcs7->pass, pkcs7->passSz, - salt, (word32)saltSz, kdfAlgoId, hashOID, - iterations, kek, (word32)kekKeySz); + salt, (word32)saltSz, (int)kdfAlgoId, hashOID, + iterations, kek, (word32)kekKeySz); if (ret < 0) { XFREE(salt, pkcs7->heap, DYNAMIC_TYPE_PKCS7); XFREE(kek, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -11106,8 +11110,8 @@ static int wc_PKCS7_DecryptPwri(PKCS7* pkcs7, byte* in, word32 inSz, /* decrypt CEK with KEK */ ret = wc_PKCS7_PwriKek_KeyUnWrap(pkcs7, kek, (word32)kekKeySz, - pkiMsg + (*idx), (word32)length, cek, - cekSz, tmpIv, (word32)blockSz, + pkiMsg + (*idx), (word32)length, + cek, cekSz, tmpIv, (word32)blockSz, (int)pwriEncAlgoId); if (ret < 0) { XFREE(salt, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -11134,7 +11138,7 @@ static int wc_PKCS7_DecryptPwri(PKCS7* pkcs7, byte* in, word32 inSz, /* mark recipFound, since we only support one RecipientInfo for now */ *recipFound = 1; - *idx += length; + *idx += (word32)length; #ifndef NO_PKCS7_STREAM if ((ret = wc_PKCS7_StreamEndCase(pkcs7, &tmpIdx, idx)) != 0) { break; @@ -11212,7 +11216,7 @@ static int wc_PKCS7_DecryptKekri(PKCS7* pkcs7, byte* in, word32 inSz, &dateLen) != 0) { return ASN_PARSE_E; } - *idx += (dateLen + 1); + *idx += (word32)(dateLen + 1); } if (*idx > pkiMsgSz) { @@ -11228,7 +11232,7 @@ static int wc_PKCS7_DecryptKekri(PKCS7* pkcs7, byte* in, word32 inSz, return ASN_PARSE_E; /* skip it */ - *idx += length; + *idx += (word32)length; } if (*idx > pkiMsgSz) { @@ -11274,7 +11278,7 @@ static int wc_PKCS7_DecryptKekri(PKCS7* pkcs7, byte* in, word32 inSz, /* mark recipFound, since we only support one RecipientInfo for now */ *recipFound = 1; - *idx += length; + *idx += (word32)length; #ifndef NO_PKCS7_STREAM if ((ret = wc_PKCS7_StreamEndCase(pkcs7, &tmpIdx, idx)) != 0) { @@ -12321,8 +12325,8 @@ WOLFSSL_API int wc_PKCS7_DecodeEnvelopedData(PKCS7* pkcs7, byte* in, ret = 0; #endif - XMEMCPY(tmpIv, &pkiMsg[idx], length); - idx += length; + XMEMCPY(tmpIv, &pkiMsg[idx], (word32)length); + idx += (word32)length; explicitOctet = 0; localIdx = idx; @@ -12382,7 +12386,7 @@ WOLFSSL_API int wc_PKCS7_DecodeEnvelopedData(PKCS7* pkcs7, byte* in, * consecutive OCTET STRINGs, if so loop through * collecting and caching encrypted content bytes */ localIdx = idx; - while (idx < (localIdx + encryptedContentTotalSz)) { + while (idx < (localIdx + (word32)encryptedContentTotalSz)) { if (GetASNTag(pkiMsg, &idx, &tag, pkiMsgSz) < 0) { ret = ASN_PARSE_E; @@ -12407,7 +12411,7 @@ WOLFSSL_API int wc_PKCS7_DecodeEnvelopedData(PKCS7* pkcs7, byte* in, } /* advance idx past encrypted content */ - idx += encryptedContentSz; + idx += (word32)encryptedContentSz; } if (ret != 0) { @@ -12421,7 +12425,7 @@ WOLFSSL_API int wc_PKCS7_DecodeEnvelopedData(PKCS7* pkcs7, byte* in, if (ret != 0) { break; } - idx += encryptedContentTotalSz; + idx += (word32)encryptedContentTotalSz; } /* use cached content */ @@ -12445,7 +12449,8 @@ WOLFSSL_API int wc_PKCS7_DecodeEnvelopedData(PKCS7* pkcs7, byte* in, ret = BUFFER_E; break; } - XMEMCPY(output, encryptedContent, encryptedContentSz - padLen); + XMEMCPY(output, encryptedContent, + (word32)encryptedContentSz - padLen); /* free memory, zero out keys */ ForceZero(decryptedKey, MAX_ENCRYPTED_KEY_SZ); @@ -12753,17 +12758,18 @@ int wc_PKCS7_EncodeAuthEnvelopedData(PKCS7* pkcs7, byte* output, contentTypeAttrib.valueSz = pkcs7->contentTypeSz; } - authAttribsSz += EncodeAttributes(authAttribs, 1, - &contentTypeAttrib, 1); + authAttribsSz += (word32)EncodeAttributes(authAttribs, 1, + &contentTypeAttrib, 1); authAttribsCount += 1; } /* authAttribs: add in user authenticated attributes */ if (pkcs7->authAttribs != NULL && pkcs7->authAttribsSz > 0) { - authAttribsSz += EncodeAttributes(authAttribs + authAttribsCount, - MAX_AUTH_ATTRIBS_SZ - authAttribsCount, + authAttribsSz += (word32)EncodeAttributes( + authAttribs + authAttribsCount, + (int)(MAX_AUTH_ATTRIBS_SZ - authAttribsCount), pkcs7->authAttribs, - pkcs7->authAttribsSz); + (int)pkcs7->authAttribsSz); authAttribsCount += pkcs7->authAttribsSz; } @@ -12811,20 +12817,19 @@ int wc_PKCS7_EncodeAuthEnvelopedData(PKCS7* pkcs7, byte* output, /* build up unauthenticated attributes (unauthAttrs) */ if (pkcs7->unauthAttribsSz > 0) { - unauthAttribsSz = EncodeAttributes(unauthAttribs + unauthAttribsCount, - MAX_UNAUTH_ATTRIBS_SZ - unauthAttribsCount, - pkcs7->unauthAttribs, - pkcs7->unauthAttribsSz); + unauthAttribsSz = (word32)EncodeAttributes( + unauthAttribs + unauthAttribsCount, + (int)(MAX_UNAUTH_ATTRIBS_SZ - unauthAttribsCount), + pkcs7->unauthAttribs, + (int)pkcs7->unauthAttribsSz); unauthAttribsCount = pkcs7->unauthAttribsSz; flatUnauthAttribs = (byte*)XMALLOC(unauthAttribsSz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); if (flatUnauthAttribs == NULL) { wc_PKCS7_FreeEncodedRecipientSet(pkcs7); - if (aadBuffer) - XFREE(aadBuffer, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER); - if (flatAuthAttribs) - XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(aadBuffer, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return MEMORY_E; } @@ -12845,56 +12850,48 @@ int wc_PKCS7_EncodeAuthEnvelopedData(PKCS7* pkcs7, byte* output, /* Copy content to plain buffer (zero-padded) to encrypt in full, * contiguous blocks */ - plain = (byte*)XMALLOC(encryptedAllocSz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + plain = (byte*)XMALLOC((word32)encryptedAllocSz, pkcs7->heap, + DYNAMIC_TYPE_PKCS7); if (plain == NULL) { wc_PKCS7_FreeEncodedRecipientSet(pkcs7); - if (aadBuffer) - XFREE(aadBuffer, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER); - if (flatUnauthAttribs) - XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - if (flatAuthAttribs) - XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(aadBuffer, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return MEMORY_E; } XMEMCPY(plain, pkcs7->content, pkcs7->contentSz); if ((encryptedAllocSz - encryptedOutSz) > 0) { - XMEMSET(plain + encryptedOutSz, 0, encryptedAllocSz - encryptedOutSz); + XMEMSET(plain + encryptedOutSz, 0, + (word32)(encryptedAllocSz - encryptedOutSz)); } - encryptedContent = (byte*)XMALLOC(encryptedAllocSz, pkcs7->heap, + encryptedContent = (byte*)XMALLOC((word32)encryptedAllocSz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); if (encryptedContent == NULL) { XFREE(plain, pkcs7->heap, DYNAMIC_TYPE_PKCS7); wc_PKCS7_FreeEncodedRecipientSet(pkcs7); - if (aadBuffer) - XFREE(aadBuffer, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER); - if (flatUnauthAttribs) - XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - if (flatAuthAttribs) - XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(aadBuffer, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return MEMORY_E; } /* encrypt content */ ret = wc_PKCS7_EncryptContent(pkcs7, pkcs7->encryptOID, pkcs7->cek, - pkcs7->cekSz, nonce, nonceSz, aadBuffer, aadBufferSz, authTag, - sizeof(authTag), plain, encryptedOutSz, encryptedContent); + (int)pkcs7->cekSz, nonce, (int)nonceSz, aadBuffer, aadBufferSz, + authTag, sizeof(authTag), plain, encryptedOutSz, encryptedContent); XFREE(plain, pkcs7->heap, DYNAMIC_TYPE_PKCS7); plain = NULL; - if (aadBuffer) { - XFREE(aadBuffer, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER); - aadBuffer = NULL; - } + XFREE(aadBuffer, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER); + aadBuffer = NULL; if (ret != 0) { wc_PKCS7_FreeEncodedRecipientSet(pkcs7); - if (flatUnauthAttribs) - XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - if (flatAuthAttribs) - XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return ret; } @@ -12904,10 +12901,8 @@ int wc_PKCS7_EncodeAuthEnvelopedData(PKCS7* pkcs7, byte* output, sizeof(contentType)); if (ret < 0) { wc_PKCS7_FreeEncodedRecipientSet(pkcs7); - if (flatUnauthAttribs) - XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - if (flatAuthAttribs) - XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return ret; } @@ -12921,41 +12916,41 @@ int wc_PKCS7_EncodeAuthEnvelopedData(PKCS7* pkcs7, byte* output, macIntSz = (word32)SetMyVersion(sizeof(authTag), macInt, 0); /* add nonce and icv len into parameters string RFC5084 */ - algoParamSeqSz = SetSequence(nonceOctetStringSz + nonceSz + macIntSz, - algoParamSeq); + algoParamSeqSz = SetSequence((word32)nonceOctetStringSz + nonceSz + + macIntSz, algoParamSeq); /* build up our ContentEncryptionAlgorithmIdentifier sequence, * adding (nonceOctetStringSz + blockSz + macIntSz) for nonce OCTET STRING * and tag size */ contentEncAlgoSz = (int)SetAlgoID(pkcs7->encryptOID, contentEncAlgo, - oidBlkType, nonceOctetStringSz + nonceSz + - macIntSz + algoParamSeqSz); + oidBlkType, nonceOctetStringSz + (int)nonceSz + + (int)macIntSz + (int)algoParamSeqSz); if (contentEncAlgoSz == 0) { wc_PKCS7_FreeEncodedRecipientSet(pkcs7); - if (flatUnauthAttribs) - XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - if (flatAuthAttribs) - XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return BAD_FUNC_ARG; } encContentOctetSz = (int)SetImplicit(ASN_OCTET_STRING, 0, (word32)encryptedOutSz, encContentOctet, 0); - encContentSeqSz = (int)SetSequence(contentTypeSz + contentEncAlgoSz + - nonceOctetStringSz + nonceSz + macIntSz + - algoParamSeqSz + encContentOctetSz + - encryptedOutSz, encContentSeq); + encContentSeqSz = (int)SetSequence((word32)contentTypeSz + + (word32)contentEncAlgoSz + + (word32)nonceOctetStringSz + nonceSz + macIntSz + + algoParamSeqSz + (word32)encContentOctetSz + + (word32)encryptedOutSz, encContentSeq); macOctetStringSz = (int)SetOctetString(sizeof(authTag), macOctetString); /* keep track of sizes for outer wrapper layering */ - totalSz = verSz + recipSetSz + recipSz + encContentSeqSz + contentTypeSz + - contentEncAlgoSz + nonceOctetStringSz + nonceSz + macIntSz + - algoParamSeqSz + encContentOctetSz + encryptedOutSz + - authAttribsSz + authAttribsSetSz + macOctetStringSz + - sizeof(authTag) + unauthAttribsSz + unauthAttribsSetSz; + totalSz = verSz + recipSetSz + recipSz + encContentSeqSz + + contentTypeSz + contentEncAlgoSz + nonceOctetStringSz + + (int)nonceSz + (int)macIntSz + (int)algoParamSeqSz + + encContentOctetSz + encryptedOutSz + (int)authAttribsSz + + (int)authAttribsSetSz + macOctetStringSz + (int)sizeof(authTag) + + (int)unauthAttribsSz + (int)unauthAttribsSetSz; /* EnvelopedData */ envDataSeqSz = (int)SetSequence((word32)totalSz, envDataSeq); @@ -12973,80 +12968,76 @@ int wc_PKCS7_EncodeAuthEnvelopedData(PKCS7* pkcs7, byte* output, if (totalSz > (int)outputSz) { WOLFSSL_MSG("Pkcs7_encrypt output buffer too small"); wc_PKCS7_FreeEncodedRecipientSet(pkcs7); - if (flatUnauthAttribs) - XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - if (flatAuthAttribs) - XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return BUFFER_E; } - XMEMCPY(output + idx, contentInfoSeq, contentInfoSeqSz); + XMEMCPY(output + idx, contentInfoSeq, (word32)contentInfoSeqSz); idx += contentInfoSeqSz; - XMEMCPY(output + idx, outerContentType, outerContentTypeSz); + XMEMCPY(output + idx, outerContentType, (word32)outerContentTypeSz); idx += outerContentTypeSz; - XMEMCPY(output + idx, outerContent, outerContentSz); + XMEMCPY(output + idx, outerContent, (word32)outerContentSz); idx += outerContentSz; - XMEMCPY(output + idx, envDataSeq, envDataSeqSz); + XMEMCPY(output + idx, envDataSeq, (word32)envDataSeqSz); idx += envDataSeqSz; - XMEMCPY(output + idx, ver, verSz); + XMEMCPY(output + idx, ver, (word32)verSz); idx += verSz; - XMEMCPY(output + idx, recipSet, recipSetSz); + XMEMCPY(output + idx, recipSet, (word32)recipSetSz); idx += recipSetSz; /* copy in recipients from list */ tmpRecip = pkcs7->recipList; while (tmpRecip != NULL) { XMEMCPY(output + idx, tmpRecip->recip, tmpRecip->recipSz); - idx += tmpRecip->recipSz; + idx += (int)tmpRecip->recipSz; tmpRecip = tmpRecip->next; } wc_PKCS7_FreeEncodedRecipientSet(pkcs7); - XMEMCPY(output + idx, encContentSeq, encContentSeqSz); + XMEMCPY(output + idx, encContentSeq, (word32)encContentSeqSz); idx += encContentSeqSz; - XMEMCPY(output + idx, contentType, contentTypeSz); + XMEMCPY(output + idx, contentType, (word32)contentTypeSz); idx += contentTypeSz; - XMEMCPY(output + idx, contentEncAlgo, contentEncAlgoSz); + XMEMCPY(output + idx, contentEncAlgo, (word32)contentEncAlgoSz); idx += contentEncAlgoSz; XMEMCPY(output + idx, algoParamSeq, algoParamSeqSz); - idx += algoParamSeqSz; - XMEMCPY(output + idx, nonceOctetString, nonceOctetStringSz); + idx += (int)algoParamSeqSz; + XMEMCPY(output + idx, nonceOctetString, (word32)nonceOctetStringSz); idx += nonceOctetStringSz; XMEMCPY(output + idx, nonce, nonceSz); - idx += nonceSz; + idx += (int)nonceSz; XMEMCPY(output + idx, macInt, macIntSz); - idx += macIntSz; + idx += (int)macIntSz; - XMEMCPY(output + idx, encContentOctet, encContentOctetSz); + XMEMCPY(output + idx, encContentOctet, (word32)encContentOctetSz); idx += encContentOctetSz; - XMEMCPY(output + idx, encryptedContent, encryptedOutSz); + XMEMCPY(output + idx, encryptedContent, (word32)encryptedOutSz); idx += encryptedOutSz; /* authenticated attributes */ if (flatAuthAttribs && authAttribsSz > 0) { XMEMCPY(output + idx, authAttribSet, authAttribsSetSz); - idx += authAttribsSetSz; + idx += (int)authAttribsSetSz; XMEMCPY(output + idx, flatAuthAttribs, authAttribsSz); - idx += authAttribsSz; + idx += (int)authAttribsSz; XFREE(flatAuthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); } - XMEMCPY(output + idx, macOctetString, macOctetStringSz); + XMEMCPY(output + idx, macOctetString, (word32)macOctetStringSz); idx += macOctetStringSz; XMEMCPY(output + idx, authTag, sizeof(authTag)); - idx += sizeof(authTag); + idx += (int)sizeof(authTag); /* unauthenticated attributes */ if (unauthAttribsSz > 0) { XMEMCPY(output + idx, unauthAttribSet, unauthAttribsSetSz); - idx += unauthAttribsSetSz; + idx += (int)unauthAttribsSetSz; XMEMCPY(output + idx, flatUnauthAttribs, unauthAttribsSz); - idx += unauthAttribsSz; + idx += (int)unauthAttribsSz; } - if (flatUnauthAttribs != NULL) { - XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - } + XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -13290,8 +13281,8 @@ WOLFSSL_API int wc_PKCS7_DecodeAuthEnvelopedData(PKCS7* pkcs7, byte* in, } if (ret == 0) { - XMEMCPY(nonce, &pkiMsg[idx], nonceSz); - idx += nonceSz; + XMEMCPY(nonce, &pkiMsg[idx], (word32)nonceSz); + idx += (word32)nonceSz; } /* get mac size, also stored in OPTIONAL parameter of AlgoID */ @@ -13346,14 +13337,14 @@ WOLFSSL_API int wc_PKCS7_DecodeAuthEnvelopedData(PKCS7* pkcs7, byte* in, /* store nonce for later */ if (nonceSz > 0) { pkcs7->stream->nonceSz = (word32)nonceSz; - pkcs7->stream->nonce = (byte*)XMALLOC(nonceSz, pkcs7->heap, - DYNAMIC_TYPE_PKCS7); + pkcs7->stream->nonce = (byte*)XMALLOC((word32)nonceSz, + pkcs7->heap, DYNAMIC_TYPE_PKCS7); if (pkcs7->stream->nonce == NULL) { ret = MEMORY_E; break; } else { - XMEMCPY(pkcs7->stream->nonce, nonce, nonceSz); + XMEMCPY(pkcs7->stream->nonce, nonce, (word32)nonceSz); } } @@ -13402,15 +13393,16 @@ WOLFSSL_API int wc_PKCS7_DecodeAuthEnvelopedData(PKCS7* pkcs7, byte* in, encryptedContentSz + expBlockSz - (encryptedContentSz % expBlockSz) : encryptedContentSz; - encryptedContent = (byte*)XMALLOC(encryptedAllocSz, pkcs7->heap, - DYNAMIC_TYPE_PKCS7); + encryptedContent = (byte*)XMALLOC((word32)encryptedAllocSz, + pkcs7->heap, DYNAMIC_TYPE_PKCS7); if (ret == 0 && encryptedContent == NULL) { ret = MEMORY_E; } if (ret == 0) { - XMEMCPY(encryptedContent, &pkiMsg[idx], encryptedContentSz); - idx += encryptedContentSz; + XMEMCPY(encryptedContent, &pkiMsg[idx], + (word32)encryptedContentSz); + idx += (word32)encryptedContentSz; } #ifndef NO_PKCS7_STREAM pkcs7->stream->bufferPt = encryptedContent; @@ -13429,7 +13421,7 @@ WOLFSSL_API int wc_PKCS7_DecodeAuthEnvelopedData(PKCS7* pkcs7, byte* in, #ifndef NO_PKCS7_STREAM pkcs7->stream->expected = (word32)length; #endif - encodedAttribSz = length + (idx - encodedAttribIdx); + encodedAttribSz = (word32)length + (idx - encodedAttribIdx); if (ret != 0) break; @@ -13486,12 +13478,12 @@ WOLFSSL_API int wc_PKCS7_DecodeAuthEnvelopedData(PKCS7* pkcs7, byte* in, break; } - idx += length; + idx += (word32)length; #ifndef NO_PKCS7_STREAM if (encodedAttribSz > 0) { - XMEMCPY(pkcs7->stream->aad + (encodedAttribSz - length), - authAttrib, authAttribSz); + XMEMCPY(pkcs7->stream->aad + (encodedAttribSz - (word32)length), + authAttrib, (word32)authAttribSz); } if ((ret = wc_PKCS7_StreamEndCase(pkcs7, &tmpIdx, &idx)) != 0) { break; @@ -13535,8 +13527,8 @@ WOLFSSL_API int wc_PKCS7_DecodeAuthEnvelopedData(PKCS7* pkcs7, byte* in, } if (ret == 0) { - XMEMCPY(authTag, &pkiMsg[idx], authTagSz); - idx += authTagSz; + XMEMCPY(authTag, &pkiMsg[idx], (word32)authTagSz); + idx += (word32)authTagSz; } if (ret == 0 && authAttrib != NULL) { @@ -13561,14 +13553,14 @@ WOLFSSL_API int wc_PKCS7_DecodeAuthEnvelopedData(PKCS7* pkcs7, byte* in, /* store tag for later */ if (authTagSz > 0) { pkcs7->stream->tagSz = (word32)authTagSz; - pkcs7->stream->tag = (byte*)XMALLOC(authTagSz, pkcs7->heap, - DYNAMIC_TYPE_PKCS7); + pkcs7->stream->tag = (byte*)XMALLOC((word32)authTagSz, + pkcs7->heap, DYNAMIC_TYPE_PKCS7); if (pkcs7->stream->tag == NULL) { ret = MEMORY_E; break; } else { - XMEMCPY(pkcs7->stream->tag, authTag, authTagSz); + XMEMCPY(pkcs7->stream->tag, authTag, (word32)authTagSz); } } @@ -13592,7 +13584,7 @@ WOLFSSL_API int wc_PKCS7_DecodeAuthEnvelopedData(PKCS7* pkcs7, byte* in, break; } else { - XMEMCPY(nonce, pkcs7->stream->nonce, nonceSz); + XMEMCPY(nonce, pkcs7->stream->nonce, (word32)nonceSz); } } @@ -13604,7 +13596,7 @@ WOLFSSL_API int wc_PKCS7_DecodeAuthEnvelopedData(PKCS7* pkcs7, byte* in, break; } else { - XMEMCPY(authTag, pkcs7->stream->tag, authTagSz); + XMEMCPY(authTag, pkcs7->stream->tag, (word32)authTagSz); } } @@ -13624,8 +13616,9 @@ WOLFSSL_API int wc_PKCS7_DecodeAuthEnvelopedData(PKCS7* pkcs7, byte* in, /* decrypt encryptedContent */ ret = wc_PKCS7_DecryptContent(pkcs7, (int)encOID, decryptedKey, blockKeySz, nonce, nonceSz, encodedAttribs, encodedAttribSz, - authTag, (word32)authTagSz, encryptedContent, encryptedContentSz, - encryptedContent, pkcs7->devId, pkcs7->heap); + authTag, (word32)authTagSz, encryptedContent, + encryptedContentSz, encryptedContent, pkcs7->devId, + pkcs7->heap); if (ret != 0) { XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return ret; @@ -13637,7 +13630,7 @@ WOLFSSL_API int wc_PKCS7_DecodeAuthEnvelopedData(PKCS7* pkcs7, byte* in, } /* copy plaintext to output */ - XMEMCPY(output, encryptedContent, encryptedContentSz); + XMEMCPY(output, encryptedContent, (word32)encryptedContentSz); /* free memory, zero out keys */ ForceZero(encryptedContent, (word32)encryptedContentSz); @@ -13668,7 +13661,14 @@ WOLFSSL_API int wc_PKCS7_DecodeAuthEnvelopedData(PKCS7* pkcs7, byte* in, } XFREE(decryptedKey, pkcs7->heap, DYNAMIC_TYPE_PKCS7); } +#else + if (ret < 0) { + ForceZero(encryptedContent, (word32)encryptedContentSz); + XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + ForceZero(decryptedKey, MAX_ENCRYPTED_KEY_SZ); + } #endif + #ifndef NO_PKCS7_STREAM if (ret != 0 && ret != WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)) { wc_PKCS7_ResetStream(pkcs7); @@ -13773,21 +13773,21 @@ int wc_PKCS7_EncodeEncryptedData(PKCS7* pkcs7, byte* output, word32 outputSz) if (padSz < 0) return padSz; - encryptedOutSz = pkcs7->contentSz + padSz; + encryptedOutSz = (int)pkcs7->contentSz + padSz; - plain = (byte*)XMALLOC(encryptedOutSz, pkcs7->heap, + plain = (byte*)XMALLOC((word32)encryptedOutSz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); if (plain == NULL) return MEMORY_E; ret = wc_PKCS7_PadData(pkcs7->content, pkcs7->contentSz, plain, - (word32)encryptedOutSz, blockSz); + (word32)encryptedOutSz, (word32)blockSz); if (ret < 0) { XFREE(plain, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return ret; } - encryptedContent = (byte*)XMALLOC(encryptedOutSz, pkcs7->heap, + encryptedContent = (byte*)XMALLOC((word32)encryptedOutSz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); if (encryptedContent == NULL) { XFREE(plain, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -13817,8 +13817,8 @@ int wc_PKCS7_EncodeEncryptedData(PKCS7* pkcs7, byte* output, word32 outputSz) } ret = wc_PKCS7_EncryptContent(pkcs7, pkcs7->encryptOID, - pkcs7->encryptionKey, pkcs7->encryptionKeySz, tmpIv, blockSz, NULL, - 0, NULL, 0, plain, encryptedOutSz, encryptedContent); + pkcs7->encryptionKey, (int)pkcs7->encryptionKeySz, tmpIv, blockSz, + NULL, 0, NULL, 0, plain, encryptedOutSz, encryptedContent); if (ret != 0) { XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); XFREE(plain, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -13828,9 +13828,9 @@ int wc_PKCS7_EncodeEncryptedData(PKCS7* pkcs7, byte* output, word32 outputSz) encContentOctetSz = (int)SetImplicit(ASN_OCTET_STRING, 0, (word32)encryptedOutSz, encContentOctet, 0); - encContentSeqSz = (int)SetSequence(contentTypeSz + contentEncAlgoSz + - ivOctetStringSz + blockSz + - encContentOctetSz + encryptedOutSz, + encContentSeqSz = (int)SetSequence((word32)(contentTypeSz + + contentEncAlgoSz + ivOctetStringSz + blockSz + + encContentOctetSz + encryptedOutSz), encContentSeq); /* optional UnprotectedAttributes */ @@ -13852,11 +13852,13 @@ int wc_PKCS7_EncodeEncryptedData(PKCS7* pkcs7, byte* output, word32 outputSz) } attribsCount = pkcs7->unprotectedAttribsSz; - attribsSz = EncodeAttributes(attribs, pkcs7->unprotectedAttribsSz, + attribsSz = (word32)EncodeAttributes(attribs, + (int)pkcs7->unprotectedAttribsSz, pkcs7->unprotectedAttribs, - pkcs7->unprotectedAttribsSz); + (int)pkcs7->unprotectedAttribsSz); - flatAttribs = (byte*)XMALLOC(attribsSz, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + flatAttribs = (byte*)XMALLOC(attribsSz, pkcs7->heap, + DYNAMIC_TYPE_PKCS7); if (flatAttribs == NULL) { XFREE(attribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -13882,7 +13884,7 @@ int wc_PKCS7_EncodeEncryptedData(PKCS7* pkcs7, byte* output, word32 outputSz) /* keep track of sizes for outer wrapper layering */ totalSz = verSz + encContentSeqSz + contentTypeSz + contentEncAlgoSz + ivOctetStringSz + blockSz + encContentOctetSz + encryptedOutSz + - attribsSz + attribsSetSz; + (int)attribsSz + (int)attribsSetSz; /* EncryptedData */ encDataSeqSz = (int)SetSequence((word32)totalSz, encDataSeq); @@ -13903,51 +13905,47 @@ int wc_PKCS7_EncodeEncryptedData(PKCS7* pkcs7, byte* output, word32 outputSz) if (totalSz > (int)outputSz) { WOLFSSL_MSG("PKCS#7 output buffer too small"); - if (attribs != NULL) - XFREE(attribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - if (flatAttribs != NULL) - XFREE(flatAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(attribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(flatAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); XFREE(plain, pkcs7->heap, DYNAMIC_TYPE_PKCS7); return BUFFER_E; } - XMEMCPY(output + idx, contentInfoSeq, contentInfoSeqSz); + XMEMCPY(output + idx, contentInfoSeq, (word32)contentInfoSeqSz); idx += contentInfoSeqSz; - XMEMCPY(output + idx, outerContentType, outerContentTypeSz); + XMEMCPY(output + idx, outerContentType, (word32)outerContentTypeSz); idx += outerContentTypeSz; - XMEMCPY(output + idx, outerContent, outerContentSz); + XMEMCPY(output + idx, outerContent, (word32)outerContentSz); idx += outerContentSz; - XMEMCPY(output + idx, encDataSeq, encDataSeqSz); + XMEMCPY(output + idx, encDataSeq, (word32)encDataSeqSz); idx += encDataSeqSz; - XMEMCPY(output + idx, ver, verSz); + XMEMCPY(output + idx, ver, (word32)verSz); idx += verSz; - XMEMCPY(output + idx, encContentSeq, encContentSeqSz); + XMEMCPY(output + idx, encContentSeq, (word32)encContentSeqSz); idx += encContentSeqSz; - XMEMCPY(output + idx, contentType, contentTypeSz); + XMEMCPY(output + idx, contentType, (word32)contentTypeSz); idx += contentTypeSz; - XMEMCPY(output + idx, contentEncAlgo, contentEncAlgoSz); + XMEMCPY(output + idx, contentEncAlgo, (word32)contentEncAlgoSz); idx += contentEncAlgoSz; - XMEMCPY(output + idx, ivOctetString, ivOctetStringSz); + XMEMCPY(output + idx, ivOctetString, (word32)ivOctetStringSz); idx += ivOctetStringSz; - XMEMCPY(output + idx, tmpIv, blockSz); + XMEMCPY(output + idx, tmpIv, (word32)blockSz); idx += blockSz; - XMEMCPY(output + idx, encContentOctet, encContentOctetSz); + XMEMCPY(output + idx, encContentOctet, (word32)encContentOctetSz); idx += encContentOctetSz; - XMEMCPY(output + idx, encryptedContent, encryptedOutSz); + XMEMCPY(output + idx, encryptedContent, (word32)encryptedOutSz); idx += encryptedOutSz; if (pkcs7->unprotectedAttribsSz != 0) { XMEMCPY(output + idx, attribSet, attribsSetSz); - idx += attribsSetSz; + idx += (int)attribsSetSz; XMEMCPY(output + idx, flatAttribs, attribsSz); - idx += attribsSz; + idx += (int)attribsSz; } - if (attribs != NULL) - XFREE(attribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); - if (flatAttribs != NULL) - XFREE(flatAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(attribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); + XFREE(flatAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); XFREE(plain, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -14208,8 +14206,8 @@ int wc_PKCS7_DecodeEncryptedData(PKCS7* pkcs7, byte* in, word32 inSz, tmpIv = pkcs7->stream->tmpIv; length = (int)pkcs7->stream->expected; #endif - XMEMCPY(tmpIv, &pkiMsg[idx], length); - idx += length; + XMEMCPY(tmpIv, &pkiMsg[idx], (word32)length); + idx += (word32)length; /* read encryptedContent, cont[0] */ if (ret == 0 && GetASNTag(pkiMsg, &idx, &tag, pkiMsgSz) < 0) ret = ASN_PARSE_E; @@ -14229,7 +14227,7 @@ int wc_PKCS7_DecodeEncryptedData(PKCS7* pkcs7, byte* in, word32 inSz, break; } - if (pkcs7->stream->totalRd + encryptedContentSz < + if (pkcs7->stream->totalRd + (word32)encryptedContentSz < pkcs7->stream->maxLen) { pkcs7->stream->flagOne = 1; } @@ -14258,21 +14256,23 @@ int wc_PKCS7_DecodeEncryptedData(PKCS7* pkcs7, byte* in, word32 inSz, tmpIv = pkcs7->stream->tmpIv; #endif if (ret == 0 && (encryptedContent = (byte*)XMALLOC( - encryptedContentSz, pkcs7->heap, DYNAMIC_TYPE_PKCS7)) == NULL) { + (unsigned int)encryptedContentSz, pkcs7->heap, + DYNAMIC_TYPE_PKCS7)) == NULL) { ret = MEMORY_E; break; } if (ret == 0) { - XMEMCPY(encryptedContent, &pkiMsg[idx], encryptedContentSz); - idx += encryptedContentSz; + XMEMCPY(encryptedContent, &pkiMsg[idx], + (unsigned int)encryptedContentSz); + idx += (word32)encryptedContentSz; /* decrypt encryptedContent */ ret = wc_PKCS7_DecryptContent(pkcs7, (int)encOID, - pkcs7->encryptionKey, pkcs7->encryptionKeySz, tmpIv, - expBlockSz, NULL, 0, NULL, 0, encryptedContent, - encryptedContentSz, encryptedContent, - pkcs7->devId, pkcs7->heap); + pkcs7->encryptionKey, (int)pkcs7->encryptionKeySz, + tmpIv, expBlockSz, NULL, 0, NULL, 0, + encryptedContent, encryptedContentSz, + encryptedContent, pkcs7->devId, pkcs7->heap); if (ret != 0) { XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); } @@ -14289,7 +14289,8 @@ int wc_PKCS7_DecodeEncryptedData(PKCS7* pkcs7, byte* in, word32 inSz, } /* copy plaintext to output */ - XMEMCPY(output, encryptedContent, encryptedContentSz - padLen); + XMEMCPY(output, encryptedContent, + (unsigned int)(encryptedContentSz - padLen)); /* get implicit[1] unprotected attributes, optional */ wc_PKCS7_FreeDecodedAttrib(pkcs7->decodedAttrib, pkcs7->heap); @@ -14392,7 +14393,7 @@ int wc_PKCS7_SetStreamMode(PKCS7* pkcs7, byte flag, return BAD_FUNC_ARG; } #ifdef ASN_BER_TO_DER - pkcs7->encodeStream = flag; + pkcs7->encodeStream = (flag != 0); pkcs7->getContentCb = getContentCb; pkcs7->streamOutCb = streamOutCb; pkcs7->streamCtx = ctx; @@ -14428,7 +14429,7 @@ int wc_PKCS7_SetNoCerts(PKCS7* pkcs7, byte flag) if (pkcs7 == NULL) { return BAD_FUNC_ARG; } - pkcs7->noCerts = flag; + pkcs7->noCerts = (flag != 0); return 0; } diff --git a/wolfcrypt/src/poly1305.c b/wolfcrypt/src/poly1305.c index 730a5c2afa..b4b5c0f7ea 100644 --- a/wolfcrypt/src/poly1305.c +++ b/wolfcrypt/src/poly1305.c @@ -29,6 +29,13 @@ and Daniel J. Bernstein */ +/* + * WOLFSSL_W64_WRAPPER Uses wrappers around word64 types for a system that does + * not have word64 available. As expected it reduces + * performance. Benchmarks collected July 2024 show + * 303.004 MiB/s with and 1874.194 MiB/s without. + */ + #ifdef HAVE_CONFIG_H #include #endif @@ -199,7 +206,7 @@ extern void poly1305_final_avx2(Poly1305* ctx, byte* mac); #endif #elif defined(POLY130564) -#ifndef WOLFSSL_ARMASM +#if !defined(WOLFSSL_ARMASM) && !defined(WOLFSSL_RISCV_ASM) static word64 U8TO64(const byte* p) { return @@ -223,7 +230,7 @@ extern void poly1305_final_avx2(Poly1305* ctx, byte* mac); p[6] = (byte)(v >> 48); p[7] = (byte)(v >> 56); } -#endif/* WOLFSSL_ARMASM */ +#endif/* !WOLFSSL_ARMASM && !WOLFSSL_RISCV_ASM */ #else /* if not 64 bit then use 32 bit */ static word32 U8TO32(const byte *p) @@ -261,7 +268,8 @@ static WC_INLINE void u32tole64(const word32 inLe32, byte outLe64[8]) } -#if !defined(WOLFSSL_ARMASM) || !defined(__aarch64__) +#if (!defined(WOLFSSL_ARMASM) || !defined(__aarch64__)) && \ + !defined(WOLFSSL_RISCV_ASM) /* This local function operates on a message with a given number of bytes with a given ctx pointer to a Poly1305 structure. @@ -332,8 +340,22 @@ static int poly1305_blocks(Poly1305* ctx, const unsigned char *m, word32 r0,r1,r2,r3,r4; word32 s1,s2,s3,s4; word32 h0,h1,h2,h3,h4; - word64 d0,d1,d2,d3,d4; word32 c; +#ifdef WOLFSSL_W64_WRAPPER + #ifdef WOLFSSL_SMALL_STACK + w64wrapper* d; + + d = (w64wrapper*)XMALLOC(5 * sizeof(w64wrapper), NULL, + DYNAMIC_TYPE_TMP_BUFFER); + if (d == NULL) { + return MEMORY_E; + } + #else + w64wrapper d[5]; + #endif +#else + word64 d0,d1,d2,d3,d4; +#endif r0 = ctx->r[0]; @@ -362,6 +384,41 @@ static int poly1305_blocks(Poly1305* ctx, const unsigned char *m, h4 += (U8TO32(m+12) >> 8) | hibit; /* h *= r */ +#ifdef WOLFSSL_W64_WRAPPER + { + w64wrapper tmp; + + d[0] = w64Mul(h0, r0); tmp = w64Mul(h1, s4); + d[0] = w64Add(d[0], tmp, NULL); tmp = w64Mul(h2, s3); + d[0] = w64Add(d[0], tmp, NULL); tmp = w64Mul(h3, s2); + d[0] = w64Add(d[0], tmp, NULL); tmp = w64Mul(h4, s1); + d[0] = w64Add(d[0], tmp, NULL); + + d[1] = w64Mul(h0, r1); tmp = w64Mul(h1, r0); + d[1] = w64Add(d[1], tmp, NULL); tmp = w64Mul(h2, s4); + d[1] = w64Add(d[1], tmp, NULL); tmp = w64Mul(h3, s3); + d[1] = w64Add(d[1], tmp, NULL); tmp = w64Mul(h4, s2); + d[1] = w64Add(d[1], tmp, NULL); + + d[2] = w64Mul(h0, r2); tmp = w64Mul(h1, r1); + d[2] = w64Add(d[2], tmp, NULL); tmp = w64Mul(h2, r0); + d[2] = w64Add(d[2], tmp, NULL); tmp = w64Mul(h3, s4); + d[2] = w64Add(d[2], tmp, NULL); tmp = w64Mul(h4, s3); + d[2] = w64Add(d[2], tmp, NULL); + + d[3] = w64Mul(h0, r3); tmp = w64Mul(h1, r2); + d[3] = w64Add(d[3], tmp, NULL); tmp = w64Mul(h2, r1); + d[3] = w64Add(d[3], tmp, NULL); tmp = w64Mul(h3, r0); + d[3] = w64Add(d[3], tmp, NULL); tmp = w64Mul(h4, s4); + d[3] = w64Add(d[3], tmp, NULL); + + d[4] = w64Mul(h0, r4); tmp = w64Mul(h1, r3); + d[4] = w64Add(d[4], tmp, NULL); tmp = w64Mul(h2, r2); + d[4] = w64Add(d[4], tmp, NULL); tmp = w64Mul(h3, r1); + d[4] = w64Add(d[4], tmp, NULL); tmp = w64Mul(h4, r0); + d[4] = w64Add(d[4], tmp, NULL); + } +#else d0 = ((word64)h0 * r0) + ((word64)h1 * s4) + ((word64)h2 * s3) + ((word64)h3 * s2) + ((word64)h4 * s1); d1 = ((word64)h0 * r1) + ((word64)h1 * r0) + ((word64)h2 * s4) + @@ -372,13 +429,31 @@ static int poly1305_blocks(Poly1305* ctx, const unsigned char *m, ((word64)h3 * r0) + ((word64)h4 * s4); d4 = ((word64)h0 * r4) + ((word64)h1 * r3) + ((word64)h2 * r2) + ((word64)h3 * r1) + ((word64)h4 * r0); +#endif /* (partial) h %= p */ +#ifdef WOLFSSL_W64_WRAPPER + c = w64GetLow32(w64ShiftRight(d[0], 26)); + h0 = w64GetLow32(d[0]) & 0x3ffffff; + d[1] = w64Add32(d[1], c, NULL); + c = w64GetLow32(w64ShiftRight(d[1], 26)); + h1 = w64GetLow32(d[1]) & 0x3ffffff; + d[2] = w64Add32(d[2], c, NULL); + c = w64GetLow32(w64ShiftRight(d[2], 26)); + h2 = w64GetLow32(d[2]) & 0x3ffffff; + d[3] = w64Add32(d[3], c, NULL); + c = w64GetLow32(w64ShiftRight(d[3], 26)); + h3 = w64GetLow32(d[3]) & 0x3ffffff; + d[4] = w64Add32(d[4], c, NULL); + c = w64GetLow32(w64ShiftRight(d[4], 26)); + h4 = w64GetLow32(d[4]) & 0x3ffffff; +#else c = (word32)(d0 >> 26); h0 = (word32)d0 & 0x3ffffff; d1 += c; c = (word32)(d1 >> 26); h1 = (word32)d1 & 0x3ffffff; d2 += c; c = (word32)(d2 >> 26); h2 = (word32)d2 & 0x3ffffff; d3 += c; c = (word32)(d3 >> 26); h3 = (word32)d3 & 0x3ffffff; d4 += c; c = (word32)(d4 >> 26); h4 = (word32)d4 & 0x3ffffff; +#endif h0 += c * 5; c = (h0 >> 26); h0 = h0 & 0x3ffffff; h1 += c; @@ -392,6 +467,10 @@ static int poly1305_blocks(Poly1305* ctx, const unsigned char *m, ctx->h[3] = h3; ctx->h[4] = h4; +#if defined(WOLFSSL_W64_WRAPPER) && defined(WOLFSSL_SMALL_STACK) + XFREE(d, NULL, DYNAMIC_TYPE_TMP_BUFFER); +#endif + return 0; #endif /* end of 64 bit cpu blocks or 32 bit cpu */ @@ -413,9 +492,7 @@ static int poly1305_block(Poly1305* ctx, const unsigned char *m) return poly1305_blocks(ctx, m, POLY1305_BLOCK_SIZE); #endif } -#endif /* !defined(WOLFSSL_ARMASM) || !defined(__aarch64__) */ -#if !defined(WOLFSSL_ARMASM) || !defined(__aarch64__) int wc_Poly1305SetKey(Poly1305* ctx, const byte* key, word32 keySz) { #if defined(POLY130564) && !defined(USE_INTEL_POLY1305_SPEEDUP) @@ -517,7 +594,11 @@ int wc_Poly1305Final(Poly1305* ctx, byte* mac) word32 h0,h1,h2,h3,h4,c; word32 g0,g1,g2,g3,g4; +#ifdef WOLFSSL_W64_WRAPPER + w64wrapper f; +#else word64 f; +#endif word32 mask; #endif @@ -656,10 +737,31 @@ int wc_Poly1305Final(Poly1305* ctx, byte* mac) h3 = ((h3 >> 18) | (h4 << 8)) & 0xffffffff; /* mac = (h + pad) % (2^128) */ +#ifdef WOLFSSL_W64_WRAPPER + f = w64From32(0, h0); + f = w64Add32(f, ctx->pad[0], NULL); + h0 = w64GetLow32(f); + + f = w64ShiftRight(f, 32); + f = w64Add32(f, h1, NULL); + f = w64Add32(f, ctx->pad[1], NULL); + h1 = w64GetLow32(f); + + f = w64ShiftRight(f, 32); + f = w64Add32(f, h2, NULL); + f = w64Add32(f, ctx->pad[2], NULL); + h2 = w64GetLow32(f); + + f = w64ShiftRight(f, 32); + f = w64Add32(f, h3, NULL); + f = w64Add32(f, ctx->pad[3], NULL); + h3 = w64GetLow32(f); +#else f = (word64)h0 + ctx->pad[0] ; h0 = (word32)f; f = (word64)h1 + ctx->pad[1] + (f >> 32); h1 = (word32)f; f = (word64)h2 + ctx->pad[2] + (f >> 32); h2 = (word32)f; f = (word64)h3 + ctx->pad[3] + (f >> 32); h3 = (word32)f; +#endif U32TO8(mac + 0, h0); U32TO8(mac + 4, h1); @@ -686,7 +788,7 @@ int wc_Poly1305Final(Poly1305* ctx, byte* mac) return 0; } -#endif /* !defined(WOLFSSL_ARMASM) || !defined(__aarch64__) */ +#endif /* (!WOLFSSL_ARMASM || !__aarch64__) && !WOLFSSL_RISCV_ASM */ int wc_Poly1305Update(Poly1305* ctx, const byte* m, word32 bytes) @@ -781,7 +883,8 @@ int wc_Poly1305Update(Poly1305* ctx, const byte* m, word32 bytes) /* process full blocks */ if (bytes >= POLY1305_BLOCK_SIZE) { size_t want = ((size_t)bytes & ~((size_t)POLY1305_BLOCK_SIZE - 1)); -#if !defined(WOLFSSL_ARMASM) || !defined(__aarch64__) +#if (!defined(WOLFSSL_ARMASM) || !defined(__aarch64__)) && \ + !defined(WOLFSSL_RISCV_ASM) int ret; ret = poly1305_blocks(ctx, m, want); if (ret != 0) diff --git a/wolfcrypt/src/poly1305_asm.asm b/wolfcrypt/src/poly1305_asm.asm index 1182da509b..972a62c63e 100644 --- a/wolfcrypt/src/poly1305_asm.asm +++ b/wolfcrypt/src/poly1305_asm.asm @@ -1,6 +1,6 @@ ; /* poly1305_asm.asm */ ; /* -; * Copyright (C) 2006-2024 wolfSSL Inc. +; * Copyright (C) 2006-2024 wolfSSL Inc. ; * ; * This file is part of wolfSSL. ; * diff --git a/wolfcrypt/src/port/Renesas/renesas_common.c b/wolfcrypt/src/port/Renesas/renesas_common.c index a55a01ad01..6924b31ebf 100644 --- a/wolfcrypt/src/port/Renesas/renesas_common.c +++ b/wolfcrypt/src/port/Renesas/renesas_common.c @@ -19,6 +19,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ +#ifdef HAVE_CONFIG_H + #include +#endif + #include #if defined(WOLFSSL_RENESAS_FSPSM_TLS) || \ diff --git a/wolfcrypt/src/port/Renesas/renesas_fspsm_sha.c b/wolfcrypt/src/port/Renesas/renesas_fspsm_sha.c index 9820f28d95..3ea643892d 100644 --- a/wolfcrypt/src/port/Renesas/renesas_fspsm_sha.c +++ b/wolfcrypt/src/port/Renesas/renesas_fspsm_sha.c @@ -100,10 +100,8 @@ static void FSPSM_HashFree(wolfssl_FSPSM_Hash* hash) return; #if defined(WOLFSSL_RENESAS_SCEPROTECT) - if (hash->msg != NULL) { - XFREE(hash->msg, hash->heap, DYNAMIC_TYPE_TMP_BUFFER); - hash->msg = NULL; - } + XFREE(hash->msg, hash->heap, DYNAMIC_TYPE_TMP_BUFFER); + hash->msg = NULL; #endif } diff --git a/wolfcrypt/src/port/Renesas/renesas_fspsm_util.c b/wolfcrypt/src/port/Renesas/renesas_fspsm_util.c index c955b571c6..e3f1547bec 100644 --- a/wolfcrypt/src/port/Renesas/renesas_fspsm_util.c +++ b/wolfcrypt/src/port/Renesas/renesas_fspsm_util.c @@ -18,8 +18,12 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ -#include +#ifdef HAVE_CONFIG_H + #include +#endif + +#include #if defined(WOLFSSL_RENESAS_RSIP) || \ defined(WOLFSSL_RENESAS_SCEPROTECT) @@ -367,8 +371,7 @@ WOLFSSL_LOCAL int wc_fspsm_EccVerifyTLS(WOLFSSL* ssl, const uint8_t* sig, ret = fspsm_ServerKeyExVerify(2, ssl, sigforSCE, 64, ctx); - if (sigforSCE) - XFREE(sigforSCE, NULL, DYNAMIC_TYPE_TEMP); + XFREE(sigforSCE, NULL, DYNAMIC_TYPE_TEMP); if (ret == WOLFSSL_SUCCESS) { *result = 1; @@ -854,10 +857,8 @@ WOLFSSL_LOCAL int wc_fspsm_generateSessionKey(WOLFSSL *ssl, cbInfo->keyflgs_tls.bits.session_key_set = 1; } - if (key_client_aes) - XFREE(key_client_aes, aes->heap, DYNAMIC_TYPE_AES); - if (key_server_aes) - XFREE(key_server_aes, aes->heap, DYNAMIC_TYPE_AES); + XFREE(key_client_aes, aes->heap, DYNAMIC_TYPE_AES); + XFREE(key_server_aes, aes->heap, DYNAMIC_TYPE_AES); /* unlock hw */ wc_fspsm_hw_unlock(); @@ -1070,9 +1071,7 @@ WOLFSSL_LOCAL int wc_fspsm_tls_CertVerify( if (ret != FSP_SUCCESS) { WOLFSSL_MSG(" R_XXX_TlsCertificateVerification() failed"); } - if (sigforSCE) { - XFREE(sigforSCE, NULL, DYNAMIC_TYPE_TEMP); - } + XFREE(sigforSCE, NULL, DYNAMIC_TYPE_TEMP); wc_fspsm_hw_unlock(); } else { diff --git a/wolfcrypt/src/port/Renesas/renesas_rx64_hw_sha.c b/wolfcrypt/src/port/Renesas/renesas_rx64_hw_sha.c index 8cbd192c72..caee3c2a3e 100644 --- a/wolfcrypt/src/port/Renesas/renesas_rx64_hw_sha.c +++ b/wolfcrypt/src/port/Renesas/renesas_rx64_hw_sha.c @@ -159,10 +159,8 @@ static void RX64_HashFree(wolfssl_RX64_HW_Hash* hash) if (hash == NULL) return; - if (hash->msg != NULL) { - XFREE(hash->msg, hash->heap, DYNAMIC_TYPE_TMP_BUFFER); - hash->msg = NULL; - } + XFREE(hash->msg, hash->heap, DYNAMIC_TYPE_TMP_BUFFER); + hash->msg = NULL; } /** diff --git a/wolfcrypt/src/port/Renesas/renesas_tsip_rsa.c b/wolfcrypt/src/port/Renesas/renesas_tsip_rsa.c index 22664f836d..13db2dba12 100644 --- a/wolfcrypt/src/port/Renesas/renesas_tsip_rsa.c +++ b/wolfcrypt/src/port/Renesas/renesas_tsip_rsa.c @@ -88,13 +88,8 @@ WOLFSSL_LOCAL int wc_tsip_MakeRsaKey(int size, void* ctx) if (ret == TSIP_SUCCESS) { if (size == 1024) { - if (info->rsa1024pri_keyIdx != NULL) { - XFREE(info->rsa1024pri_keyIdx, NULL, - DYNAMIC_TYPE_RSA_BUFFER); - } - if (info->rsa1024pub_keyIdx != NULL) { - XFREE(info->rsa1024pub_keyIdx, NULL, DYNAMIC_TYPE_RSA_BUFFER); - } + XFREE(info->rsa1024pri_keyIdx, NULL, DYNAMIC_TYPE_RSA_BUFFER); + XFREE(info->rsa1024pub_keyIdx, NULL, DYNAMIC_TYPE_RSA_BUFFER); info->rsa1024pri_keyIdx = (tsip_rsa1024_private_key_index_t*)XMALLOC( sizeof(tsip_rsa1024_private_key_index_t), NULL, @@ -128,14 +123,8 @@ WOLFSSL_LOCAL int wc_tsip_MakeRsaKey(int size, void* ctx) info->keyflgs_crypt.bits.rsapub1024_key_set = 1; } else if (size == 2048) { - if (info->rsa2048pri_keyIdx != NULL) { - XFREE(info->rsa2048pri_keyIdx, NULL, - DYNAMIC_TYPE_RSA_BUFFER); - } - if (info->rsa2048pub_keyIdx != NULL) { - XFREE(info->rsa2048pub_keyIdx, NULL, - DYNAMIC_TYPE_RSA_BUFFER); - } + XFREE(info->rsa2048pri_keyIdx, NULL, DYNAMIC_TYPE_RSA_BUFFER); + XFREE(info->rsa2048pub_keyIdx, NULL, DYNAMIC_TYPE_RSA_BUFFER); info->rsa2048pri_keyIdx = (tsip_rsa2048_private_key_index_t*)XMALLOC( sizeof(tsip_rsa2048_private_key_index_t), NULL, diff --git a/wolfcrypt/src/port/Renesas/renesas_tsip_sha.c b/wolfcrypt/src/port/Renesas/renesas_tsip_sha.c index d4303839d6..a12c1ebcf8 100644 --- a/wolfcrypt/src/port/Renesas/renesas_tsip_sha.c +++ b/wolfcrypt/src/port/Renesas/renesas_tsip_sha.c @@ -287,10 +287,8 @@ static void TSIPHashFree(wolfssl_TSIP_Hash* hash) if (hash == NULL) return; - if (hash->msg != NULL) { - XFREE(hash->msg, hash->heap, DYNAMIC_TYPE_TMP_BUFFER); - hash->msg = NULL; - } + XFREE(hash->msg, hash->heap, DYNAMIC_TYPE_TMP_BUFFER); + hash->msg = NULL; } static int TSIPHashInit(wolfssl_TSIP_Hash* hash, void* heap, int devId, diff --git a/wolfcrypt/src/port/Renesas/renesas_tsip_util.c b/wolfcrypt/src/port/Renesas/renesas_tsip_util.c index 6097eb0e16..579e7333f4 100644 --- a/wolfcrypt/src/port/Renesas/renesas_tsip_util.c +++ b/wolfcrypt/src/port/Renesas/renesas_tsip_util.c @@ -18,6 +18,11 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ + +#ifdef HAVE_CONFIG_H + #include +#endif + #include #if defined(WOLFSSL_RENESAS_TSIP) @@ -417,14 +422,10 @@ WOLFSSL_LOCAL int tsip_Tls13GenEccKeyPair(WOLFSSL* ssl, KeyShareEntry* kse) } if ((ret != 0) && (ret != CRYPTOCB_UNAVAILABLE)) { - if (kse->key != NULL) { - XFREE(kse->key, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); - kse->key = NULL; - } - if (kse->pubKey != NULL) { - XFREE(kse->pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); - kse->pubKey = NULL; - } + XFREE(kse->key, ssl->heap, DYNAMIC_TYPE_PRIVATE_KEY); + kse->key = NULL; + XFREE(kse->pubKey, ssl->heap, DYNAMIC_TYPE_PUBLIC_KEY); + kse->pubKey = NULL; } WOLFSSL_LEAVE("tsip_Tls13GenEccKeyPair", ret); return ret; @@ -2428,10 +2429,7 @@ WOLFSSL_LOCAL int tsipImportPublicKey(TsipUserCtx* tuc, int keyType) #if defined(WOLFSSL_RENESAS_TSIP_TLS) tuc->ClientRsa2048PubKey_set = 0; #elif defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY) - if (tuc->rsa2048pub_keyIdx != NULL) { - XFREE(tuc->rsa2048pub_keyIdx, NULL, - DYNAMIC_TYPE_RSA_BUFFER); - } + XFREE(tuc->rsa2048pub_keyIdx, NULL, DYNAMIC_TYPE_RSA_BUFFER); tuc->keyflgs_crypt.bits.rsapub2048_key_set = 0; tuc->rsa2048pub_keyIdx = (tsip_rsa2048_public_key_index_t*)XMALLOC( @@ -3548,9 +3546,7 @@ int wc_tsip_tls_CertVerify( if (ret != TSIP_SUCCESS) { WOLFSSL_MSG(" R_TSIP_TlsCertificateVerification failed"); } - if (sigforSCE) { - XFREE(sigforSCE, NULL, DYNAMIC_TYPE_ECC); - } + XFREE(sigforSCE, NULL, DYNAMIC_TYPE_ECC); tsip_hw_unlock(); } else { diff --git a/wolfcrypt/src/port/af_alg/afalg_hash.c b/wolfcrypt/src/port/af_alg/afalg_hash.c index 33a7ad3efb..c14dfb0ee7 100644 --- a/wolfcrypt/src/port/af_alg/afalg_hash.c +++ b/wolfcrypt/src/port/af_alg/afalg_hash.c @@ -53,10 +53,8 @@ static void AfalgHashFree(wolfssl_AFALG_Hash* hash) } #if defined(WOLFSSL_AFALG_HASH_KEEP) - if (hash->msg != NULL) { - XFREE(hash->msg, hash->heap, DYNAMIC_TYPE_TMP_BUFFER); - hash->msg = NULL; - } + XFREE(hash->msg, hash->heap, DYNAMIC_TYPE_TMP_BUFFER); + hash->msg = NULL; #endif } diff --git a/wolfcrypt/src/port/arm/armv8-poly1305.c b/wolfcrypt/src/port/arm/armv8-poly1305.c index 49eec4d04c..4d838c7036 100644 --- a/wolfcrypt/src/port/arm/armv8-poly1305.c +++ b/wolfcrypt/src/port/arm/armv8-poly1305.c @@ -53,137 +53,112 @@ static WC_INLINE void poly1305_blocks_aarch64_16(Poly1305* ctx, const unsigned char *m, size_t bytes) { __asm__ __volatile__ ( + /* Check for zero bytes to do. */ "CMP %[bytes], %[POLY1305_BLOCK_SIZE] \n\t" - "BLO L_poly1305_aarch64_16_64_done_%= \n\t" - /* Load r and h */ - "LDP x21, x23, %[ctx_r] \n\t" - "LDR w25, %[ctx_r_4] \n\t" - "LDP x2, x4, %[ctx_h] \n\t" - "LDR w6, %[ctx_h_4] \n\t" - "LSR x22, x21, #32 \n\t" - "LSR x24, x23, #32 \n\t" - "LSR x3, x2, #32 \n\t" - "LSR x5, x4, #32 \n\t" - "AND x21, x21, #0x3ffffff \n\t" - "AND x23, x23, #0x3ffffff \n\t" - "AND x2, x2, #0x3ffffff \n\t" - "AND x4, x4, #0x3ffffff \n\t" - /* s1 = r1 * 5; */ - /* s2 = r2 * 5; */ - /* s3 = r3 * 5; */ - /* s4 = r4 * 5; */ - "MOV x15, #5 \n\t" - "CMP %[finished], #0 \n\t" - "MUL w7, w22, w15 \n\t" - "CSET %[finished], EQ \n\t" - "MUL w8, w23, w15 \n\t" - "LSL %[finished], %[finished], #24 \n\t" - "MUL w9, w24, w15 \n\t" - "MOV x14, #0x3ffffff \n\t" - "MUL w10, w25, w15 \n\t" + "BLO L_poly1305_aarch64_16_done_%= \n\t" + + "MOV x12, #1 \n\t" + /* Load h */ + "LDP w4, w5, [%[ctx_h], #0] \n\t" + "LDP w6, w7, [%[ctx_h], #8] \n\t" + "LDR w8, [%[ctx_h], #16] \n\t" + /* Base 26 -> Base 64 */ + "ORR x4, x4, x5, LSL #26\n\t" + "ORR x4, x4, x6, LSL #52\n\t" + "LSR x5, x6, #12\n\t" + "ORR x5, x5, x7, LSL #14\n\t" + "ORR x5, x5, x8, LSL #40\n\t" + "LSR x6, x8, #24\n\t" + /* Load r */ + "LDP x8, x9, %[ctx_r64] \n\t" + "SUB %[finished], x12, %[finished]\n\t" "\n" ".align 2 \n\t" - "L_poly1305_aarch64_16_64_loop_%=: \n\t" - /* t0 = U8TO64(&m[0]); */ - /* t1 = U8TO64(&m[8]); */ - "LDP x16, x17, [%[m]], #16 \n\t" - /* h0 += (U8TO32(m + 0)) & 0x3ffffff; */ - "AND x26, x16, #0x3ffffff \n\t" - "ADD x2, x2, x26 \n\t" - /* h1 += (U8TO32(m + 3) >> 2) & 0x3ffffff; */ - "AND x26, x14, x16, LSR #26 \n\t" - "ADD x3, x3, x26 \n\t" - /* h2 += (U8TO32(m + 6) >> 4) & 0x3ffffff; */ - "EXTR x26, x17, x16, #52 \n\t" - "AND x26, x26, #0x3ffffff \n\t" - "ADD x4, x4, x26 \n\t" - /* h3 += (U8TO32(m + 9) >> 6) & 0x3ffffff; */ - "AND x26, x14, x17, LSR #14 \n\t" - "ADD x5, x5, x26 \n\t" - /* h4 += (U8TO32(m + 12) >> 8) | hibit; */ - "ORR x17, %[finished], x17, LSR #40 \n\t" - "ADD x6, x6, x17 \n\t" - /* d0 = h0 * r0 + h1 * s4 + h2 * s3 + h3 * s2 + h4 * s1 */ - /* d1 = h0 * r1 + h1 * r0 + h2 * s4 + h3 * s3 + h4 * s2 */ - /* d2 = h0 * r2 + h1 * r1 + h2 * r0 + h3 * s4 + h4 * s3 */ - /* d3 = h0 * r3 + h1 * r2 + h2 * r1 + h3 * r0 + h4 * s4 */ - /* d4 = h0 * r4 + h1 * r3 + h2 * r2 + h3 * r1 + h4 * r0 */ - "MUL x16, x2, x21 \n\t" - "MUL x17, x2, x22 \n\t" - "MUL x26, x2, x23 \n\t" - "MUL x19, x2, x24 \n\t" - "MUL x20, x2, x25 \n\t" - "MADD x16, x3, x10, x16 \n\t" - "MADD x17, x3, x21, x17 \n\t" - "MADD x26, x3, x22, x26 \n\t" - "MADD x19, x3, x23, x19 \n\t" - "MADD x20, x3, x24, x20 \n\t" - "MADD x16, x4, x9, x16 \n\t" - "MADD x17, x4, x10, x17 \n\t" - "MADD x26, x4, x21, x26 \n\t" - "MADD x19, x4, x22, x19 \n\t" - "MADD x20, x4, x23, x20 \n\t" - "MADD x16, x5, x8, x16 \n\t" - "MADD x17, x5, x9, x17 \n\t" - "MADD x26, x5, x10, x26 \n\t" - "MADD x19, x5, x21, x19 \n\t" - "MADD x20, x5, x22, x20 \n\t" - "MADD x16, x6, x7, x16 \n\t" - "MADD x17, x6, x8, x17 \n\t" - "MADD x26, x6, x9, x26 \n\t" - "MADD x19, x6, x10, x19 \n\t" - "MADD x20, x6, x21, x20 \n\t" - /* d1 = d1 + d0 >> 26 */ - /* d2 = d2 + d1 >> 26 */ - /* d3 = d3 + d2 >> 26 */ - /* d4 = d4 + d3 >> 26 */ - /* h0 = d0 & 0x3ffffff */ - /* h1 = d1 & 0x3ffffff */ - /* h2 = d2 & 0x3ffffff */ - /* h0 = h0 + (d4 >> 26) * 5 */ - /* h1 = h1 + h0 >> 26 */ - /* h3 = d3 & 0x3ffffff */ - /* h4 = d4 & 0x3ffffff */ - /* h0 = h0 & 0x3ffffff */ - "ADD x17, x17, x16, LSR #26 \n\t" - "ADD x20, x20, x19, LSR #26 \n\t" - "AND x16, x16, #0x3ffffff \n\t" - "LSR x2, x20, #26 \n\t" - "AND x19, x19, #0x3ffffff \n\t" - "MADD x16, x2, x15, x16 \n\t" - "ADD x26, x26, x17, LSR #26 \n\t" - "AND x17, x17, #0x3ffffff \n\t" - "AND x20, x20, #0x3ffffff \n\t" - "ADD x19, x19, x26, LSR #26 \n\t" - "AND x4, x26, #0x3ffffff \n\t" - "ADD x3, x17, x16, LSR #26 \n\t" - "AND x2, x16, #0x3ffffff \n\t" - "ADD x6, x20, x19, LSR #26 \n\t" - "AND x5, x19, #0x3ffffff \n\t" - "SUB %[bytes], %[bytes], %[POLY1305_BLOCK_SIZE] \n\t" - "CMP %[bytes], %[POLY1305_BLOCK_SIZE] \n\t" - "BHS L_poly1305_aarch64_16_64_loop_%= \n\t" - /* Store h */ - "ORR x2, x2, x3, LSL #32 \n\t" - "ORR x4, x4, x5, LSL #32 \n\t" - "STP x2, x4, %[ctx_h] \n\t" - "STR w6, %[ctx_h_4] \n\t" + "L_poly1305_aarch64_16_loop_%=: \n\t" + /* Load m */ + "LDR x10, [%[m]] \n\t" + "LDR x11, [%[m], 8] \n\t" + /* Add m and !finished at bit 128. */ + "ADDS x4, x4, x10 \n\t" + "ADCS x5, x5, x11 \n\t" + "ADC x6, x6, %[finished] \n\t" + + /* r * h */ + /* r0 * h0 */ + "MUL x12, x8, x4\n\t" + "UMULH x13, x8, x4\n\t" + /* r0 * h1 */ + "MUL x16, x8, x5\n\t" + "UMULH x14, x8, x5\n\t" + /* r1 * h0 */ + "MUL x15, x9, x4\n\t" + "ADDS x13, x13, x16\n\t" + "UMULH x17, x9, x4\n\t" + "ADC x14, x14, xzr\n\t" + "ADDS x13, x13, x15\n\t" + /* r0 * h2 */ + "MUL x16, x8, x6\n\t" + "ADCS x14, x14, x17\n\t" + "UMULH x17, x8, x6\n\t" + "ADC x15, xzr, xzr\n\t" + "ADDS x14, x14, x16\n\t" + /* r1 * h1 */ + "MUL x16, x9, x5\n\t" + "ADC x15, x15, x17\n\t" + "UMULH x19, x9, x5\n\t" + "ADDS x14, x14, x16\n\t" + /* r1 * h2 */ + "MUL x17, x9, x6\n\t" + "ADCS x15, x15, x19\n\t" + "UMULH x19, x9, x6\n\t" + "ADC x16, xzr, xzr\n\t" + "ADDS x15, x15, x17\n\t" + "ADC x16, x16, x19\n\t" + /* h' = x12, x13, x14, x15, x16 */ + + /* h' mod 2^130 - 5 */ + /* Get top two bits from h[2]. */ + "AND x6, x14, 3\n\t" + /* Get high bits from h[2]. */ + "AND x14, x14, -4\n\t" + /* Add top bits * 4. */ + "ADDS x4, x12, x14\n\t" + "ADCS x5, x13, x15\n\t" + "ADC x6, x6, x16\n\t" + /* Move down 2 bits. */ + "EXTR x14, x15, x14, 2\n\t" + "EXTR x15, x16, x15, 2\n\t" + /* Add top bits. */ + "ADDS x4, x4, x14\n\t" + "ADCS x5, x5, x15\n\t" + "ADC x6, x6, xzr\n\t" + + "SUBS %[bytes], %[bytes], %[POLY1305_BLOCK_SIZE]\n\t" + "ADD %[m], %[m], %[POLY1305_BLOCK_SIZE]\n\t" + "BGT L_poly1305_aarch64_16_loop_%=\n\t" + + /* Base 64 -> Base 26 */ + "MOV x10, #0x3ffffff\n\t" + "EXTR x8, x6, x5, #40\n\t" + "AND x7, x10, x5, LSR #14\n\t" + "EXTR x6, x5, x4, #52\n\t" + "AND x5, x10, x4, LSR #26\n\t" + "AND x4, x4, x10\n\t" + "AND x6, x6, x10\n\t" + "AND x8, x8, x10\n\t" + "STP w4, w5, [%[ctx_h], #0] \n\t" + "STP w6, w7, [%[ctx_h], #8] \n\t" + "STR w8, [%[ctx_h], #16] \n\t" "\n" ".align 2 \n\t" - "L_poly1305_aarch64_16_64_done_%=: \n\t" - : [ctx_h] "+m" (ctx->h[0]), - [ctx_h_4] "+m" (ctx->h[4]), - [bytes] "+r" (bytes), - [m] "+r" (m) + "L_poly1305_aarch64_16_done_%=: \n\t" + : [bytes] "+r" (bytes), [m] "+r" (m) : [POLY1305_BLOCK_SIZE] "I" (POLY1305_BLOCK_SIZE), - [ctx_r] "m" (ctx->r[0]), - [ctx_r_4] "m" (ctx->r[4]), + [ctx_r64] "m" (ctx->r64[0]), [ctx_h] "r" (ctx->h), [finished] "r" ((word64)ctx->finished) : "memory", "cc", - "w2", "w3", "w4", "w5", "w6", "w7", "w8", "w9", "w10", "w15", - "w21", "w22", "w23", "w24", "w25", "x2", "x3", "x4", "x5", "x6", - "x7", "x8", "x9", "x10", "x14", "x15", "x16", "x17", "x19", "x20", - "x21", "x22", "x23", "x24", "x25", "x26" + "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", + "x15", "x16", "x17", "x19" ); } @@ -910,151 +885,147 @@ int wc_Poly1305SetKey(Poly1305* ctx, const byte* key, word32 keySz) "LDP x10, x11, [%[key], #16] \n\t" /* Load clamp */ "LDP x12, x13, [%[clamp]] \n\t" + /* Save pad for later */ + "STP x10, x11, [%[ctx_pad]] \n\t" /* Apply clamp */ /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */ "AND x8, x8, x12 \n\t" "AND x9, x9, x13 \n\t" - "MOV x19, xzr \n\t" - "MOV x20, xzr \n\t" - "MOV x21, xzr \n\t" - "MOV x22, xzr \n\t" - "MOV x23, xzr \n\t" - "BFI x19, x8, #0, #26 \n\t" - "LSR x8, x8, #26 \n\t" - "BFI x20, x8, #0, #26 \n\t" - "LSR x8, x8, #26 \n\t" - "BFI x21, x8, #0, #12 \n\t" - "BFI x21, x9, #12, #14 \n\t" - "LSR x9, x9, #14 \n\t" - "BFI x22, x9, #0, #26 \n\t" - "LSR x9, x9, #26 \n\t" - "BFI x23, x9, #0, #24 \n\t" + "STP x8, x9, [%[ctx_r64]] \n\t" + /* 128-bits: Base 64 -> Base 26 */ + "MOV x20, #0x3ffffff\n\t" + "LSR x15, x9, #40\n\t" + "AND x14, x20, x9, LSR #14\n\t" + "EXTR x13, x9, x8, #52\n\t" + "AND x12, x20, x8, LSR #26\n\t" + "AND x11, x8, x20\n\t" + "AND x13, x13, x20\n\t" + "AND x15, x15, x20\n\t" + "STP w11, w12, [%[ctx_r], #0] \n\t" + "STP w13, w14, [%[ctx_r], #8] \n\t" + "STR w15, [%[ctx_r], #16] \n\t" + /* Compute r^2 */ - /* r*5 */ - "MOV x8, #5 \n\t" - "MUL x24, x20, x8 \n\t" - "MUL x25, x21, x8 \n\t" - "MUL x26, x22, x8 \n\t" - "MUL x27, x23, x8 \n\t" - /* d = r*r */ - /* d0 = h0 * r0 + h1 * s4 + h2 * s3 + h3 * s2 + h4 * s1 */ - /* d1 = h0 * r1 + h1 * r0 + h2 * s4 + h3 * s3 + h4 * s2 */ - /* d2 = h0 * r2 + h1 * r1 + h2 * r0 + h3 * s4 + h4 * s3 */ - /* d3 = h0 * r3 + h1 * r2 + h2 * r1 + h3 * r0 + h4 * s4 */ - /* d4 = h0 * r4 + h1 * r3 + h2 * r2 + h3 * r1 + h4 * r0 */ - "MUL x14, x19, x19 \n\t" - "MUL x15, x19, x20 \n\t" - "MUL x16, x19, x21 \n\t" - "MUL x17, x19, x22 \n\t" - "MUL x7, x19, x23 \n\t" - "MADD x14, x20, x27, x14 \n\t" - "MADD x15, x20, x19, x15 \n\t" - "MADD x16, x20, x20, x16 \n\t" - "MADD x17, x20, x21, x17 \n\t" - "MADD x7, x20, x22, x7 \n\t" - "MADD x14, x21, x26, x14 \n\t" - "MADD x15, x21, x27, x15 \n\t" - "MADD x16, x21, x19, x16 \n\t" - "MADD x17, x21, x20, x17 \n\t" - "MADD x7, x21, x21, x7 \n\t" - "MADD x14, x22, x25, x14 \n\t" - "MADD x15, x22, x26, x15 \n\t" - "MADD x16, x22, x27, x16 \n\t" - "MADD x17, x22, x19, x17 \n\t" - "MADD x7, x22, x20, x7 \n\t" - "MADD x14, x23, x24, x14 \n\t" - "MADD x15, x23, x25, x15 \n\t" - "MADD x16, x23, x26, x16 \n\t" - "MADD x17, x23, x27, x17 \n\t" - "MADD x7, x23, x19, x7 \n\t" + /* r0 * r0 */ + "MUL x12, x8, x8\n\t" + "UMULH x13, x8, x8\n\t" + /* 2 * r0 * r1 */ + "MUL x15, x8, x9\n\t" + "UMULH x16, x8, x9\n\t" + "ADDS x13, x13, x15\n\t" + "ADC x14, xzr, x16\n\t" + "ADDS x13, x13, x15\n\t" + "ADCS x14, x14, x16\n\t" + "ADC x15, xzr, xzr\n\t" + /* r1 * r1 */ + "MUL x16, x9, x9\n\t" + "UMULH x17, x9, x9\n\t" + "ADDS x14, x14, x16\n\t" + "ADC x15, x15, x17\n\t" /* r_2 = r^2 % P */ - "ADD x15, x15, x14, LSR #26 \n\t" - "ADD x7, x7, x17, LSR #26 \n\t" - "AND x14, x14, #0x3ffffff \n\t" - "LSR x9, x7, #26 \n\t" - "AND x17, x17, #0x3ffffff \n\t" - "MADD x14, x9, x8, x14 \n\t" - "ADD x16, x16, x15, LSR #26 \n\t" - "AND x15, x15, #0x3ffffff \n\t" - "AND x7, x7, #0x3ffffff \n\t" - "ADD x17, x17, x16, LSR #26 \n\t" - "AND x16, x16, #0x3ffffff \n\t" - "ADD x15, x15, x14, LSR #26 \n\t" - "AND x14, x14, #0x3ffffff \n\t" - "ADD x7, x7, x17, LSR #26 \n\t" - "AND x17, x17, #0x3ffffff \n\t" - /* Store r */ - "ORR x19, x19, x20, LSL #32 \n\t" - "ORR x21, x21, x22, LSL #32 \n\t" - "STP x19, x21, [%[ctx_r]] \n\t" - "STR w23, [%[ctx_r], #16] \n\t" - "MOV x8, #5 \n\t" - "MUL x24, x15, x8 \n\t" - "MUL x25, x16, x8 \n\t" - "MUL x26, x17, x8 \n\t" - "MUL x27, x7, x8 \n\t" - /* Compute r^4 */ - /* d0 = h0 * r0 + h1 * s4 + h2 * s3 + h3 * s2 + h4 * s1 */ - /* d1 = h0 * r1 + h1 * r0 + h2 * s4 + h3 * s3 + h4 * s2 */ - /* d2 = h0 * r2 + h1 * r1 + h2 * r0 + h3 * s4 + h4 * s3 */ - /* d3 = h0 * r3 + h1 * r2 + h2 * r1 + h3 * r0 + h4 * s4 */ - /* d4 = h0 * r4 + h1 * r3 + h2 * r2 + h3 * r1 + h4 * r0 */ - "MUL x19, x14, x14 \n\t" - "MUL x20, x14, x15 \n\t" - "MUL x21, x14, x16 \n\t" - "MUL x22, x14, x17 \n\t" - "MUL x23, x14, x7 \n\t" - "MADD x19, x15, x27, x19 \n\t" - "MADD x20, x15, x14, x20 \n\t" - "MADD x21, x15, x15, x21 \n\t" - "MADD x22, x15, x16, x22 \n\t" - "MADD x23, x15, x17, x23 \n\t" - "MADD x19, x16, x26, x19 \n\t" - "MADD x20, x16, x27, x20 \n\t" - "MADD x21, x16, x14, x21 \n\t" - "MADD x22, x16, x15, x22 \n\t" - "MADD x23, x16, x16, x23 \n\t" - "MADD x19, x17, x25, x19 \n\t" - "MADD x20, x17, x26, x20 \n\t" - "MADD x21, x17, x27, x21 \n\t" - "MADD x22, x17, x14, x22 \n\t" - "MADD x23, x17, x15, x23 \n\t" - "MADD x19, x7, x24, x19 \n\t" - "MADD x20, x7, x25, x20 \n\t" - "MADD x21, x7, x26, x21 \n\t" - "MADD x22, x7, x27, x22 \n\t" - "MADD x23, x7, x14, x23 \n\t" - /* r^4 % P */ - "ADD x20, x20, x19, LSR #26 \n\t" - "ADD x23, x23, x22, LSR #26 \n\t" - "AND x19, x19, #0x3ffffff \n\t" - "LSR x9, x23, #26 \n\t" - "AND x22, x22, #0x3ffffff \n\t" - "MADD x19, x9, x8, x19 \n\t" - "ADD x21, x21, x20, LSR #26 \n\t" - "AND x20, x20, #0x3ffffff \n\t" - "AND x23, x23, #0x3ffffff \n\t" - "ADD x22, x22, x21, LSR #26 \n\t" - "AND x21, x21, #0x3ffffff \n\t" - "ADD x20, x20, x19, LSR #26 \n\t" - "AND x19, x19, #0x3ffffff \n\t" - "ADD x23, x23, x22, LSR #26 \n\t" - "AND x22, x22, #0x3ffffff \n\t" + /* Get top two bits from r^2[2]. */ + "AND x10, x14, 3\n\t" + /* Get high bits from r^2[2]. */ + "AND x14, x14, -4\n\t" + /* Add top bits * 4. */ + "ADDS x8, x12, x14\n\t" + "ADCS x9, x13, x15\n\t" + "ADC x10, x10, xzr\n\t" + /* Move down 2 bits. */ + "EXTR x14, x15, x14, 2\n\t" + "LSR x15, x15, 2\n\t" + /* Add top bits. */ + "ADDS x8, x8, x14\n\t" + "ADCS x9, x9, x15\n\t" + "ADC x10, x10, xzr\n\t" + /* 130-bits: Base 64 -> Base 26 */ + "EXTR x15, x10, x9, #40\n\t" + "AND x14, x20, x9, LSR #14\n\t" + "EXTR x13, x9, x8, #52\n\t" + "AND x12, x20, x8, LSR #26\n\t" + "AND x11, x8, x20\n\t" + "AND x13, x13, x20\n\t" + "AND x15, x15, x20\n\t" /* Store r^2 */ - "ORR x14, x14, x15, LSL #32 \n\t" - "ORR x16, x16, x17, LSL #32 \n\t" - "STP x14, x16, [%[ctx_r_2]] \n\t" - "STR w7, [%[ctx_r_2], #16] \n\t" + "STP w11, w12, [%[ctx_r_2], #0] \n\t" + "STP w13, w14, [%[ctx_r_2], #8] \n\t" + "STR w15, [%[ctx_r_2], #16] \n\t" + + /* Compute r^4 */ + /* r0 * r0 */ + "MUL x12, x8, x8\n\t" + "UMULH x13, x8, x8\n\t" + /* 2 * r0 * r1 */ + "MUL x15, x8, x9\n\t" + "UMULH x16, x8, x9\n\t" + "ADDS x13, x13, x15\n\t" + "ADC x14, xzr, x16\n\t" + "ADDS x13, x13, x15\n\t" + "ADCS x14, x14, x16\n\t" + "ADC x15, xzr, xzr\n\t" + /* 2 * r0 * r2 */ + "MUL x16, x8, x10\n\t" + "UMULH x17, x8, x10\n\t" + "ADDS x14, x14, x16\n\t" + "ADC x15, x15, x17\n\t" + "ADDS x14, x14, x16\n\t" + "ADC x15, x15, x17\n\t" + /* r1 * r1 */ + "MUL x16, x9, x9\n\t" + "UMULH x17, x9, x9\n\t" + "ADDS x14, x14, x16\n\t" + "ADCS x15, x15, x17\n\t" + "ADC x16, xzr, xzr\n\t" + /* 2 * r1 * r2 */ + "MUL x17, x9, x10\n\t" + "UMULH x19, x9, x10\n\t" + "ADDS x15, x15, x17\n\t" + "ADC x16, x16, x19\n\t" + "ADDS x15, x15, x17\n\t" + "ADC x16, x16, x19\n\t" + /* r2 * r2 */ + "MUL x17, x10, x10\n\t" + "ADD x16, x16, x17\n\t" + /* r_4 = r^4 % P */ + /* Get top two bits from r^4[2]. */ + "AND x10, x14, 3\n\t" + /* Get high bits from r^4[2]. */ + "AND x14, x14, -4\n\t" + /* Add top bits * 4. */ + "ADDS x8, x12, x14\n\t" + "ADCS x9, x13, x15\n\t" + "ADC x10, x10, x16\n\t" + /* Move down 2 bits. */ + "EXTR x14, x15, x14, 2\n\t" + "EXTR x15, x16, x15, 2\n\t" + "LSR x16, x16, 2\n\t" + /* Add top bits. */ + "ADDS x8, x8, x14\n\t" + "ADCS x9, x9, x15\n\t" + "ADC x10, x10, x16\n\t" + /* Top again as it was 260 bits mod less than 130 bits. */ + "AND x11, x10, -4\n\t" + "AND x10, x10, 3\n\t" + "ADD x11, x11, x11, LSR #2\n\t" + "ADDS x8, x8, x11\n\t" + "ADCS x9, x9, xzr\n\t" + "ADC x10, x10, xzr\n\t" + /* 130-bits: Base 64 -> Base 26 */ + "EXTR x15, x10, x9, #40\n\t" + "AND x14, x20, x9, LSR #14\n\t" + "EXTR x13, x9, x8, #52\n\t" + "AND x12, x20, x8, LSR #26\n\t" + "AND x11, x8, x20\n\t" + "AND x13, x13, x20\n\t" + "AND x15, x15, x20\n\t" /* Store r^4 */ - "ORR x19, x19, x20, LSL #32 \n\t" - "ORR x21, x21, x22, LSL #32 \n\t" - "STP x19, x21, [%[ctx_r_4]] \n\t" - "STR w23, [%[ctx_r_4], #16] \n\t" + "STP w11, w12, [%[ctx_r_4], #0] \n\t" + "STP w13, w14, [%[ctx_r_4], #8] \n\t" + "STR w15, [%[ctx_r_4], #16] \n\t" + /* h (accumulator) = 0 */ "STP xzr, xzr, [%[ctx_h_0]] \n\t" "STR wzr, [%[ctx_h_0], #16] \n\t" - /* Save pad for later */ - "STP x10, x11, [%[ctx_pad]] \n\t" /* Zero leftover */ "STR xzr, [%[ctx_leftover]] \n\t" /* Zero finished */ @@ -1062,6 +1033,7 @@ int wc_Poly1305SetKey(Poly1305* ctx, const byte* key, word32 keySz) : : [clamp] "r" (clamp), [key] "r" (key), + [ctx_r64] "r" (ctx->r64), [ctx_r] "r" (ctx->r), [ctx_r_2] "r" (ctx->r_2), [ctx_r_4] "r" (ctx->r_4), @@ -1070,9 +1042,8 @@ int wc_Poly1305SetKey(Poly1305* ctx, const byte* key, word32 keySz) [ctx_leftover] "r" (&ctx->leftover), [ctx_finished] "r" (&ctx->finished) : "memory", "cc", - "w7", "w14", "w15", "w16", "w17", "w19", "w20", "w21", "w22", "w23", - "x7", "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", - "x17", "x19", "x20", "x21", "x22", "x23", "x24", "x25", "x26", "x27" + "x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", + "x19", "x20" ); return 0; @@ -1081,7 +1052,6 @@ int wc_Poly1305SetKey(Poly1305* ctx, const byte* key, word32 keySz) int wc_Poly1305Final(Poly1305* ctx, byte* mac) { - if (ctx == NULL) return BAD_FUNC_ARG; @@ -1096,68 +1066,55 @@ int wc_Poly1305Final(Poly1305* ctx, byte* mac) } __asm__ __volatile__ ( - /* Load raw h and zero h registers */ - "LDP x2, x3, %[h_addr] \n\t" - "MOV x5, xzr \n\t" - "LDR w4, %[h_4_addr] \n\t" - "MOV x6, xzr \n\t" - "LDP x16, x17, %[pad_addr] \n\t" + "LDP x9, x10, %[ctx_pad] \n\t" + /* Load h */ + "LDP w4, w5, [%[ctx_h], #0] \n\t" + "LDP w6, w7, [%[ctx_h], #8] \n\t" + "LDR w8, [%[ctx_h], #16] \n\t" /* Base 26 -> Base 64 */ - "MOV w5, w2 \n\t" - "LSR x2, x2, #32 \n\t" - "ORR x5, x5, x2, LSL #26 \n\t" - "ORR x5, x5, x3, LSL #52 \n\t" - "LSR w6, w3, #12 \n\t" - "LSR x3, x3, #32 \n\t" - "ORR x6, x6, x3, LSL #14 \n\t" - "ORR x6, x6, x4, LSL #40 \n\t" - "LSR x7, x4, #24 \n\t" + "ORR x4, x4, x5, LSL #26\n\t" + "ORR x4, x4, x6, LSL #52\n\t" + "LSR x5, x6, #12\n\t" + "ORR x5, x5, x7, LSL #14\n\t" + "ORR x5, x5, x8, LSL #40\n\t" + "LSR x6, x8, #24\n\t" /* Check if h is larger than p */ - "ADDS x2, x5, #5 \n\t" - "ADCS x3, x6, xzr \n\t" - "ADC x4, x7, xzr \n\t" + "ADDS x1, x4, #5 \n\t" + "ADCS x2, x5, xzr \n\t" + "ADC x3, x6, xzr \n\t" /* Check if h+5 is larger than 2^130 */ - "CMP x4, #3 \n\t" + "CMP x3, #3 \n\t" + "CSEL x4, x1, x4, HI \n\t" "CSEL x5, x2, x5, HI \n\t" - "CSEL x6, x3, x6, HI \n\t" - "ADDS x5, x5, x16 \n\t" - "ADC x6, x6, x17 \n\t" - "STP x5, x6, [%[mac]] \n\t" - : [mac] "+r" (mac) - : [pad_addr] "m" (ctx->pad), - [h_addr] "m" (ctx->h), - [h_4_addr] "m" (ctx->h[4]) + "ADDS x4, x4, x9 \n\t" + "ADC x5, x5, x10 \n\t" + "STP x4, x5, [%[mac]] \n\t" + + /* Zero out h */ + "STP xzr, xzr, [%[ctx_h]] \n\t" + "STR wzr, [%[ctx_h], #16] \n\t" + /* Zero out r64 */ + "STP xzr, xzr, [%[ctx_r64]] \n\t" + /* Zero out r */ + "STP xzr, xzr, [%[ctx_r]] \n\t" + "STR wzr, [%[ctx_r], #16] \n\t" + /* Zero out r_2 */ + "STP xzr, xzr, [%[ctx_r_2]] \n\t" + "STR wzr, [%[ctx_r_2], #16] \n\t" + /* Zero out r_4 */ + "STP xzr, xzr, [%[ctx_r_4]] \n\t" + "STR wzr, [%[ctx_r_4], #16] \n\t" + /* Zero out pad */ + "STP xzr, xzr, %[ctx_pad] \n\t" + : + : [ctx_pad] "m" (ctx->pad), [ctx_h] "r" (ctx->h), [mac] "r" (mac), + [ctx_r64] "r" (ctx->r64), [ctx_r] "r" (ctx->r), + [ctx_r_2] "r" (ctx->r_2), [ctx_r_4] "r" (ctx->r_4) : "memory", "cc", - "w2", "w3", "w4", "w5", "w6", "w7", "x2", "x3", "x4", "x5", - "x6", "x7", "x16", "x17" + "w4", "w5", "w6", "w7", "w8", + "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10" ); - /* zero out the state */ - ctx->h[0] = 0; - ctx->h[1] = 0; - ctx->h[2] = 0; - ctx->h[3] = 0; - ctx->h[4] = 0; - ctx->r[0] = 0; - ctx->r[1] = 0; - ctx->r[2] = 0; - ctx->r[3] = 0; - ctx->r[4] = 0; - ctx->r_2[0] = 0; - ctx->r_2[1] = 0; - ctx->r_2[2] = 0; - ctx->r_2[3] = 0; - ctx->r_2[4] = 0; - ctx->r_4[0] = 0; - ctx->r_4[1] = 0; - ctx->r_4[2] = 0; - ctx->r_4[3] = 0; - ctx->r_4[4] = 0; - ctx->pad[0] = 0; - ctx->pad[1] = 0; - ctx->pad[2] = 0; - ctx->pad[3] = 0; - return 0; } diff --git a/wolfcrypt/src/port/arm/armv8-sha512.c b/wolfcrypt/src/port/arm/armv8-sha512.c index 7ac9eb9833..145f6b5ebb 100644 --- a/wolfcrypt/src/port/arm/armv8-sha512.c +++ b/wolfcrypt/src/port/arm/armv8-sha512.c @@ -670,10 +670,8 @@ void wc_Sha512Free(wc_Sha512* sha512) return; #ifdef WOLFSSL_SMALL_STACK_CACHE - if (sha512->W != NULL) { - XFREE(sha512->W, NULL, DYNAMIC_TYPE_TMP_BUFFER); - sha512->W = NULL; - } + XFREE(sha512->W, NULL, DYNAMIC_TYPE_TMP_BUFFER); + sha512->W = NULL; #endif } @@ -801,10 +799,8 @@ void wc_Sha384Free(wc_Sha384* sha384) return; #ifdef WOLFSSL_SMALL_STACK_CACHE - if (sha384->W != NULL) { - XFREE(sha384->W, NULL, DYNAMIC_TYPE_TMP_BUFFER); - sha384->W = NULL; - } + XFREE(sha384->W, NULL, DYNAMIC_TYPE_TMP_BUFFER); + sha384->W = NULL; #endif } diff --git a/wolfcrypt/src/port/caam/caam_driver.c b/wolfcrypt/src/port/caam/caam_driver.c index c0c212fb91..d98574f688 100644 --- a/wolfcrypt/src/port/caam/caam_driver.c +++ b/wolfcrypt/src/port/caam/caam_driver.c @@ -19,6 +19,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ +#ifdef HAVE_CONFIG_H + #include +#endif + #if (defined(__INTEGRITY) || defined(INTEGRITY)) || \ (defined(__QNX__) || defined(__QNXNTO__)) diff --git a/wolfcrypt/src/port/caam/caam_error.c b/wolfcrypt/src/port/caam/caam_error.c index d1ae990614..ba52aa5778 100644 --- a/wolfcrypt/src/port/caam/caam_error.c +++ b/wolfcrypt/src/port/caam/caam_error.c @@ -19,6 +19,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ +#ifdef HAVE_CONFIG_H + #include +#endif + #if (defined(__INTEGRITY) || defined(INTEGRITY)) || \ (defined(__QNX__) || defined(__QNXNTO__)) diff --git a/wolfcrypt/src/port/caam/wolfcaam_fsl_nxp.c b/wolfcrypt/src/port/caam/wolfcaam_fsl_nxp.c index a9f574559e..b0bf50d72c 100644 --- a/wolfcrypt/src/port/caam/wolfcaam_fsl_nxp.c +++ b/wolfcrypt/src/port/caam/wolfcaam_fsl_nxp.c @@ -160,9 +160,7 @@ static int wc_CAAM_CommonHash(caam_handle_t* hndl, caam_hash_ctx_t *ctx, } status = CAAM_HASH_Update(ctx, alignedIn, inSz); - if (tmpIn != NULL) { - XFREE(tmpIn, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(tmpIn, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (status != kStatus_Success) { return WC_HW_E; } @@ -339,9 +337,7 @@ static int DoAesCTR(unsigned int args[4], CAAM_BUFFER *buf, int sz) XMEMCPY((byte*)buf[3].TheAddress, alignedOut, buf[3].Length); XFREE(tmpOut, NULL, DYNAMIC_TYPE_TMP_BUFFER); } - if (tmpIn != NULL) { - XFREE(tmpIn, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(tmpIn, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (status != kStatus_Success) { return -1; } @@ -491,9 +487,7 @@ int wc_CAAM_EccSign(const byte* in, int inlen, byte* out, word32* outlen, status = CAAM_ECC_Sign(CAAM, &hndl, k, kSz, alignedIn, inlen, r, rSz, s, sSz, ecdsel, enc); - if (tmpIn != NULL) { - XFREE(tmpIn, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(tmpIn, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (status != kStatus_Success) { ret = -1; @@ -604,9 +598,7 @@ static int wc_CAAM_EccVerify_ex(mp_int* r, mp_int *s, const byte* hash, status = CAAM_ECC_Verify(CAAM, &hndl, qxy, qxLen+qyLen, rbuf, keySz, sbuf, keySz, alignedIn, hashlen, ecdsel); - if (tmpIn != NULL) { - XFREE(tmpIn, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(tmpIn, NULL, DYNAMIC_TYPE_TMP_BUFFER); *res = 0; if (status == kStatus_Success) { *res = 1; diff --git a/wolfcrypt/src/port/caam/wolfcaam_seco.c b/wolfcrypt/src/port/caam/wolfcaam_seco.c index 995826c238..d7abc55da3 100644 --- a/wolfcrypt/src/port/caam/wolfcaam_seco.c +++ b/wolfcrypt/src/port/caam/wolfcaam_seco.c @@ -1215,9 +1215,7 @@ word32 wc_SECO_WrapKey(word32 keyId, byte* in, word32 inSz, byte* iv, } } - if (wrappedKey != NULL) { - XFREE(wrappedKey, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(wrappedKey, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (wc_TranslateHSMError(0, err) != Success) { return 0; diff --git a/wolfcrypt/src/port/devcrypto/devcrypto_rsa.c b/wolfcrypt/src/port/devcrypto/devcrypto_rsa.c index 0fdfd015e0..0949c74a0b 100644 --- a/wolfcrypt/src/port/devcrypto/devcrypto_rsa.c +++ b/wolfcrypt/src/port/devcrypto/devcrypto_rsa.c @@ -244,20 +244,13 @@ static int _PrivateOperation(const byte* in, word32 inlen, byte* out, } } - if (d != NULL) - XFREE(d, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (q != NULL) - XFREE(q, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (dp != NULL) - XFREE(dp, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (dq != NULL) - XFREE(dq, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (u != NULL) - XFREE(u, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (n != NULL) - XFREE(n, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(d, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(p, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(q, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(dp, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(dq, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(u, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(n, NULL, DYNAMIC_TYPE_TMP_BUFFER); wc_DevCryptoFree(dev); return ret; @@ -311,10 +304,8 @@ static int _PublicOperation(const byte* in, word32 inlen, byte* out, } wc_DevCryptoFree(&key->ctx); - if (m != NULL) - XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (e != NULL) - XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -556,21 +547,13 @@ int wc_DevCrypto_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng) #endif } - if (p != NULL) - XFREE(p, key->heap, DYNAMIC_TYPE_TMP_BUFFER); - if (q != NULL) - XFREE(q, key->heap, DYNAMIC_TYPE_TMP_BUFFER); - if (dp != NULL) - XFREE(dp, key->heap, DYNAMIC_TYPE_TMP_BUFFER); - if (dq != NULL) - XFREE(dq, key->heap, DYNAMIC_TYPE_TMP_BUFFER); - if (c != NULL) - XFREE(c, key->heap, DYNAMIC_TYPE_TMP_BUFFER); - if (n != NULL) - XFREE(n, key->heap, DYNAMIC_TYPE_TMP_BUFFER); - if (d != NULL) { - XFREE(d, key->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(p, key->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(q, key->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(dp, key->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(dq, key->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(c, key->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(n, key->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(d, key->heap, DYNAMIC_TYPE_TMP_BUFFER); (void)rng; return ret; diff --git a/wolfcrypt/src/port/intel/quickassist_sync.c b/wolfcrypt/src/port/intel/quickassist_sync.c index c8b5c4191d..e92dde6323 100644 --- a/wolfcrypt/src/port/intel/quickassist_sync.c +++ b/wolfcrypt/src/port/intel/quickassist_sync.c @@ -359,21 +359,15 @@ void IntelQaHardwareStop(void) status); } - if (g_cyInstMap) { - XFREE(g_cyInstMap, NULL, DYNAMIC_TYPE_ASYNC); - g_cyInstMap = NULL; - } + XFREE(g_cyInstMap, NULL, DYNAMIC_TYPE_ASYNC); + g_cyInstMap = NULL; - if (g_cyInstanceInfo) { - XFREE(g_cyInstanceInfo, NULL, DYNAMIC_TYPE_ASYNC); - g_cyInstanceInfo = NULL; - } + XFREE(g_cyInstanceInfo, NULL, DYNAMIC_TYPE_ASYNC); + g_cyInstanceInfo = NULL; #ifdef QAT_USE_POLLING_CHECK - if (g_cyPolling) { - XFREE(g_cyPolling, NULL, DYNAMIC_TYPE_ASYNC); - g_cyPolling = NULL; - } + XFREE(g_cyPolling, NULL, DYNAMIC_TYPE_ASYNC); + g_cyPolling = NULL; if (g_PollLock) { for (i=0; iop.cipher.bufferList; if (opData) { - if (opData->pAdditionalAuthData) { - XFREE(opData->pAdditionalAuthData, dev->heap, - DYNAMIC_TYPE_ASYNC_NUMA); - opData->pAdditionalAuthData = NULL; - } - if (opData->pIv) { - XFREE(opData->pIv, dev->heap, DYNAMIC_TYPE_ASYNC_NUMA); - opData->pIv = NULL; - } + XFREE(opData->pAdditionalAuthData, dev->heap, DYNAMIC_TYPE_ASYNC_NUMA); + opData->pAdditionalAuthData = NULL; + XFREE(opData->pIv, dev->heap, DYNAMIC_TYPE_ASYNC_NUMA); + opData->pIv = NULL; XMEMSET(opData, 0, sizeof(CpaCySymOpData)); } if (pDstBuffer) { if (pDstBuffer->pBuffers) { - if (pDstBuffer->pBuffers->pData) { - XFREE(pDstBuffer->pBuffers->pData, dev->heap, - DYNAMIC_TYPE_ASYNC_NUMA); - pDstBuffer->pBuffers->pData = NULL; - } + XFREE(pDstBuffer->pBuffers->pData, dev->heap, DYNAMIC_TYPE_ASYNC_NUMA); + pDstBuffer->pBuffers->pData = NULL; XMEMSET(pDstBuffer->pBuffers, 0, sizeof(CpaFlatBuffer)); } - if (pDstBuffer->pPrivateMetaData) { - XFREE(pDstBuffer->pPrivateMetaData, dev->heap, - DYNAMIC_TYPE_ASYNC_NUMA); - pDstBuffer->pPrivateMetaData = NULL; - } + XFREE(pDstBuffer->pPrivateMetaData, dev->heap, DYNAMIC_TYPE_ASYNC_NUMA); + pDstBuffer->pPrivateMetaData = NULL; XMEMSET(pDstBuffer, 0, sizeof(CpaBufferList)); } diff --git a/wolfcrypt/src/port/kcapi/kcapi_dh.c b/wolfcrypt/src/port/kcapi/kcapi_dh.c index 65f592a385..9b69abc193 100644 --- a/wolfcrypt/src/port/kcapi/kcapi_dh.c +++ b/wolfcrypt/src/port/kcapi/kcapi_dh.c @@ -70,9 +70,7 @@ static int KcapiDh_SetParams(DhKey* key) } } - if (pkcs3 != NULL) { - XFREE(pkcs3, key->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(pkcs3, key->heap, DYNAMIC_TYPE_TMP_BUFFER); return ret; } diff --git a/wolfcrypt/src/port/kcapi/kcapi_hash.c b/wolfcrypt/src/port/kcapi/kcapi_hash.c index 1c88f356f3..c6fca932aa 100644 --- a/wolfcrypt/src/port/kcapi/kcapi_hash.c +++ b/wolfcrypt/src/port/kcapi/kcapi_hash.c @@ -51,10 +51,8 @@ void KcapiHashFree(wolfssl_KCAPI_Hash* hash) } #if defined(WOLFSSL_KCAPI_HASH_KEEP) - if (hash->msg != NULL) { - XFREE(hash->msg, hash->heap, DYNAMIC_TYPE_TMP_BUFFER); - hash->msg = NULL; - } + XFREE(hash->msg, hash->heap, DYNAMIC_TYPE_TMP_BUFFER); + hash->msg = NULL; #endif } } diff --git a/wolfcrypt/src/port/kcapi/kcapi_rsa.c b/wolfcrypt/src/port/kcapi/kcapi_rsa.c index 19436aec1e..a989141354 100644 --- a/wolfcrypt/src/port/kcapi/kcapi_rsa.c +++ b/wolfcrypt/src/port/kcapi/kcapi_rsa.c @@ -76,9 +76,7 @@ static int KcapiRsa_SetPrivKey(RsaKey* key) } } - if (priv != NULL) { - XFREE(priv, key->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(priv, key->heap, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -167,9 +165,7 @@ static int KcapiRsa_SetPubKey(RsaKey* key) } } - if (pub != NULL) { - XFREE(pub, key->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(pub, key->heap, DYNAMIC_TYPE_TMP_BUFFER); return ret; } diff --git a/wolfcrypt/src/port/maxim/maxq10xx.c b/wolfcrypt/src/port/maxim/maxq10xx.c index 7d69a72331..370a170a8d 100644 --- a/wolfcrypt/src/port/maxim/maxq10xx.c +++ b/wolfcrypt/src/port/maxim/maxq10xx.c @@ -41,7 +41,11 @@ #include #include #include +#ifdef USS_API +#include +#else #include +#endif #ifndef WOLFSSL_HAVE_ECC_KEY_GET_PRIV /* FIPS build has replaced ecc.h. */ @@ -72,9 +76,17 @@ void dbg_dumphex(const char *identifier, const uint8_t* pdata, uint32_t plen); #endif #define PUBKEY_IMPORT_OBJID 0x1000 + +#if defined (TEST_SETUP) +#define ROOT_CA_CERT_OBJ_ID 0x1006 +#define DEVICE_CERT_OBJ_ID 0x1005 +#define DEVICE_KEY_PAIR_OBJ_ID 0x1007 +#else #define ROOT_CA_CERT_OBJ_ID 0x1003 #define DEVICE_CERT_OBJ_ID 0x1002 #define DEVICE_KEY_PAIR_OBJ_ID 0x1004 +#endif + #define PSK_OBJ_ID 0x1236 #define K_CHUNKSIZE 2032 #define K_CIPHER_BLOCKSIZE 16 @@ -120,7 +132,7 @@ static int tls13_server_key_len = -1; /* Please define MAXQ10XX_PRODUCTION_KEY in your build scripts once you have a * production key. */ -#if defined(MAXQ10XX_PRODUCTION_KEY) || !defined(DEBUG_WOLFSSL) +#if defined(MAXQ10XX_PRODUCTION_KEY) #include "maxq10xx_key.h" #else /* TEST KEY. This must be changed for production environments!! */ @@ -568,12 +580,14 @@ static int aes_set_key(Aes* aes, const byte* userKey, word32 keylen) return BAD_FUNC_ARG; } + #if defined(MAXQ10XX_MUTEX) rc = maxq_CryptHwMutexTryLock(); if (rc != 0) { WOLFSSL_ERROR_MSG("MAXQ: aes_set_key() lock could not be acquired"); rc = NOT_COMPILED_IN; return rc; } + #endif if (aes->maxq_ctx.key_obj_id) { wc_MAXQ10XX_AesFree(aes); @@ -694,12 +708,14 @@ static int ecc_set_key(ecc_key* key, const byte* userKey, word32 keycomplen) objtype = MXQ_OBJTYPE_KEYPAIR; } + #if defined(MAXQ10XX_MUTEX) rc = maxq_CryptHwMutexTryLock(); if (rc != 0) { WOLFSSL_ERROR_MSG("MAXQ: ecc_set_key() lock could not be acquired"); rc = NOT_COMPILED_IN; return rc; } + #endif if (key->maxq_ctx.key_obj_id) { wc_MAXQ10XX_EccFree(key); @@ -1074,24 +1090,20 @@ static int maxq10xx_ecc_verify_local( #endif /* MAXQ_ECC */ #ifdef MAXQ_RNG -static int maxq10xx_random(byte* output, unsigned short sz) +int maxq10xx_random(byte* output, unsigned short sz) { -#if defined(WOLFSSL_MAXQ108X) - if (!tls13active) { - return NOT_COMPILED_IN; - } -#endif - if (output == NULL) { return BUFFER_E; } + #if defined(MAXQ10XX_MUTEX) int ret = maxq_CryptHwMutexTryLock(); if (ret != 0) { WOLFSSL_ERROR_MSG("MAXQ: maxq10xx_random() lock could not be acquired"); ret = NOT_COMPILED_IN; return ret; } + #endif if (MXQ_Get_Random_Ext(output, sz, 0)) { WOLFSSL_ERROR_MSG("MAXQ: MXQ_Get_Random_Ext() failed"); @@ -1222,6 +1234,7 @@ static int do_sha256(wc_CryptoInfo* info) return WC_HW_E; } + #if defined(MAXQ10XX_MUTEX) if (info->hash.sha256->maxq_ctx.hash_running == 0) { rc = maxq_CryptHwMutexTryLock(); if (rc != 0) { @@ -1229,6 +1242,7 @@ static int do_sha256(wc_CryptoInfo* info) return CRYPTOCB_UNAVAILABLE; } } + #endif if (info->hash.in != NULL) { /* wc_Sha256Update */ @@ -1981,12 +1995,14 @@ int maxq10xx_port_init(void) } #endif + #if defined(MAXQ10XX_MUTEX) ret = maxq_CryptHwMutexTryLock(); if (ret) { WOLFSSL_ERROR_MSG("MAXQ: maxq10xx_port_init() -> device is busy " "(switching to soft mode)"); return 0; } + #endif mxq_rc = MXQ_Module_Init(); if (mxq_rc) { @@ -3290,7 +3306,7 @@ static int maxq10xx_perform_tls13_record_processing(WOLFSSL* ssl, { int rc; mxq_err_t mxq_rc; - mxq_u2 key_id; + mxq_u2 key_id = 0xFFFF; if (!tls13active) { return NOT_COMPILED_IN; diff --git a/wolfcrypt/src/port/mynewt/mynewt_port.c b/wolfcrypt/src/port/mynewt/mynewt_port.c index 06d28ddc9c..736098df6f 100644 --- a/wolfcrypt/src/port/mynewt/mynewt_port.c +++ b/wolfcrypt/src/port/mynewt/mynewt_port.c @@ -19,8 +19,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ -#if defined(WOLFSSL_APACHE_MYNEWT) +#ifdef HAVE_CONFIG_H + #include +#endif + +#ifdef WOLFSSL_APACHE_MYNEWT + #ifndef NO_FILESYSTEM + #include "fs/fs.h" #define FILE struct fs_file @@ -142,5 +148,5 @@ int mynewt_fclose(FILE *stream) return 0; } -#endif /* NO_FILESYSTEM*/ -#endif /* if defined(WOLFSSL_APACHE_MYNEWT) */ +#endif /* !NO_FILESYSTEM */ +#endif /* WOLFSSL_APACHE_MYNEWT */ diff --git a/wolfcrypt/src/port/nxp/ksdk_port.c b/wolfcrypt/src/port/nxp/ksdk_port.c index a3bdbaa74f..f8460488da 100644 --- a/wolfcrypt/src/port/nxp/ksdk_port.c +++ b/wolfcrypt/src/port/nxp/ksdk_port.c @@ -186,18 +186,10 @@ int mp_mul(mp_int *A, mp_int *B, mp_int *C) } } - if (ptrA) { - XFREE(ptrA, NULL, DYNAMIC_TYPE_BIGINT); - } - if (ptrB) { - XFREE(ptrB, NULL, DYNAMIC_TYPE_BIGINT); - } - if (ptrN) { - XFREE(ptrN, NULL, DYNAMIC_TYPE_BIGINT); - } - if (ptrC) { - XFREE(ptrC, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(ptrA, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(ptrB, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(ptrN, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(ptrC, NULL, DYNAMIC_TYPE_BIGINT); } else { #ifdef WOLFSSL_SP_MATH @@ -280,15 +272,9 @@ int mp_mod(mp_int *a, mp_int *b, mp_int *c) res = MP_MEM; } - if (ptrA) { - XFREE(ptrA, NULL, DYNAMIC_TYPE_BIGINT); - } - if (ptrB) { - XFREE(ptrB, NULL, DYNAMIC_TYPE_BIGINT); - } - if (ptrC) { - XFREE(ptrC, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(ptrA, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(ptrB, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(ptrC, NULL, DYNAMIC_TYPE_BIGINT); } else { #if defined(FREESCALE_LTC_TFM_RSA_4096_ENABLE) @@ -372,15 +358,9 @@ int mp_invmod(mp_int *a, mp_int *b, mp_int *c) res = MP_MEM; } - if (ptrA) { - XFREE(ptrA, NULL, DYNAMIC_TYPE_BIGINT); - } - if (ptrB) { - XFREE(ptrB, NULL, DYNAMIC_TYPE_BIGINT); - } - if (ptrC) { - XFREE(ptrC, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(ptrA, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(ptrB, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(ptrC, NULL, DYNAMIC_TYPE_BIGINT); } else { #if defined(FREESCALE_LTC_TFM_RSA_4096_ENABLE) @@ -491,18 +471,10 @@ int mp_mulmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d) res = MP_MEM; } - if (ptrA) { - XFREE(ptrA, NULL, DYNAMIC_TYPE_BIGINT); - } - if (ptrB) { - XFREE(ptrB, NULL, DYNAMIC_TYPE_BIGINT); - } - if (ptrC) { - XFREE(ptrC, NULL, DYNAMIC_TYPE_BIGINT); - } - if (ptrD) { - XFREE(ptrD, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(ptrA, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(ptrB, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(ptrC, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(ptrD, NULL, DYNAMIC_TYPE_BIGINT); } else { #if defined(FREESCALE_LTC_TFM_RSA_4096_ENABLE) @@ -591,18 +563,10 @@ int ltc_mp_exptmod(mp_int *G, mp_int *X, mp_int *P, mp_int *Y, int useConstTime) res = MP_MEM; } - if (ptrY) { - XFREE(ptrY, NULL, DYNAMIC_TYPE_BIGINT); - } - if (ptrP) { - XFREE(ptrP, NULL, DYNAMIC_TYPE_BIGINT); - } - if (ptrX) { - XFREE(ptrX, NULL, DYNAMIC_TYPE_BIGINT); - } - if (ptrG) { - XFREE(ptrG, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(ptrY, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(ptrP, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(ptrX, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(ptrG, NULL, DYNAMIC_TYPE_BIGINT); } else { #if defined(FREESCALE_LTC_TFM_RSA_4096_ENABLE) @@ -687,12 +651,8 @@ int mp_prime_is_prime_ex(mp_int* a, int t, int* result, WC_RNG* rng) } } - if (ptrB) { - XFREE(ptrB, NULL, DYNAMIC_TYPE_BIGINT); - } - if (ptrA) { - XFREE(ptrA, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(ptrB, NULL, DYNAMIC_TYPE_BIGINT); + XFREE(ptrA, NULL, DYNAMIC_TYPE_BIGINT); } else { #if defined(FREESCALE_LTC_TFM_RSA_4096_ENABLE) diff --git a/wolfcrypt/src/port/nxp/se050_port.c b/wolfcrypt/src/port/nxp/se050_port.c index e54014bfb0..a514ecce7f 100644 --- a/wolfcrypt/src/port/nxp/se050_port.c +++ b/wolfcrypt/src/port/nxp/se050_port.c @@ -738,9 +738,7 @@ int se050_rsa_use_key_id(struct RsaKey* key, word32 keyId) status = kStatus_SSS_Fail; } } - if (derBuf != NULL) { - XFREE(derBuf, key->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(derBuf, key->heap, DYNAMIC_TYPE_TMP_BUFFER); if (status == kStatus_SSS_Success) { key->keyId = keyId; @@ -884,9 +882,7 @@ int se050_rsa_create_key(struct RsaKey* key, int size, long e) status = kStatus_SSS_Fail; } } - if (derBuf != NULL) { - XFREE(derBuf, key->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(derBuf, key->heap, DYNAMIC_TYPE_TMP_BUFFER); if (status == kStatus_SSS_Success) { key->keyId = keyId; @@ -1228,9 +1224,7 @@ int se050_rsa_sign(const byte* in, word32 inLen, byte* out, derSz, (keySz * 8), NULL, 0); } - if (derBuf != NULL) { - XFREE(derBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(derBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); } else { status = sss_key_object_get_handle(&newKey, keyId); @@ -1392,9 +1386,7 @@ int se050_rsa_verify(const byte* in, word32 inLen, byte* out, word32 outLen, derSz, (keySz * 8), NULL, 0); } - if (derBuf != NULL) { - XFREE(derBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(derBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); } else { status = sss_key_object_get_handle(&newKey, keyId); @@ -1579,9 +1571,7 @@ int se050_rsa_public_encrypt(const byte* in, word32 inLen, byte* out, status = sss_key_object_get_handle(&newKey, keyId); } - if (derBuf != NULL) { - XFREE(derBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(derBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); } if (status == kStatus_SSS_Success) { @@ -1746,9 +1736,7 @@ int se050_rsa_private_decrypt(const byte* in, word32 inLen, byte* out, status = sss_key_object_get_handle(&newKey, keyId); } - if (derBuf != NULL) { - XFREE(derBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(derBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); } if (status == kStatus_SSS_Success) { diff --git a/wolfcrypt/src/port/riscv/riscv-64-poly1305.c b/wolfcrypt/src/port/riscv/riscv-64-poly1305.c new file mode 100644 index 0000000000..22d6f408ed --- /dev/null +++ b/wolfcrypt/src/port/riscv/riscv-64-poly1305.c @@ -0,0 +1,669 @@ +/* riscv-64-poly1305.c + * + * Copyright (C) 2006-2024 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + +/* + * Based off the public domain implementations by Andrew Moon + * and Daniel J. Bernstein + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include +#include +#include + +#ifdef WOLFSSL_RISCV_ASM + +#ifdef HAVE_POLY1305 +#include +#include +#include +#include +#ifdef NO_INLINE + #include +#else + #define WOLFSSL_MISC_INCLUDED + #include +#endif +#ifdef CHACHA_AEAD_TEST + #include +#endif + + +#ifndef WOLFSSL_RISCV_BIT_MANIPULATION_TERNARY + +#define SPLIT_130(r0, r1, r2, a0, a1, a2, t) \ + "srli " #r1 ", " #a0 ", (64-12)\n\t" \ + "and " #r0 ", " #a0 ", a6\n\t" \ + "slli " #t ", " #a1 ", (2*12)\n\t" \ + "slli " #r2 ", " #a2 ", (2*12)\n\t" \ + "srli " #a1 ", " #a1 ", (64-2*12)\n\t" \ + "srli " #t ", " #t ", 12\n\t" \ + "or " #r2 ", " #a1 ", " #r2 "\n\t" \ + "or " #r1 ", " #r1 ", " #t "\n\t" + +#define SPLIT_128(r0, r1, r2, a0, a1, t) \ + "slli " #t ", " #a1 ", (2*12)\n\t" \ + "srli " #r1 ", " #a0 ", (64-12)\n\t" \ + "and " #r0 ", " #a0 ", a6\n\t" \ + "srli " #t ", " #t ", 12\n\t" \ + "srli " #r2 ", " #a1 ", (64-2*12)\n\t" \ + "or " #r1 ", " #r1 ", " #t "\n\t" + +#define REDIST(l, h, t) \ + "srli " #t ", " #l ", 52\n\t" \ + "slli " #h ", " #h ", 12\n\t" \ + "and " #l ", " #l ", a6\n\t" \ + "or " #h ", " #h ", " #t "\n\t" + +#define REDIST_HI(l, h, h2, t) \ + "srli " #h2 ", " #h ", 28\n\t" \ + "slli " #h ", " #h ", 24\n\t" \ + "srli " #t ", " #l ", 40\n\t" \ + "slli " #l ", " #l ", 12\n\t" \ + "and " #h ", " #h ", a6\n\t" \ + "and " #l ", " #l ", a6\n\t" \ + "or " #h ", " #h ", " #t "\n\t" + +#define REDIST_HI_26(l, h, t) \ + "srli " #t ", " #l ", 40\n\t" \ + "slli " #l ", " #l ", 12\n\t" \ + "slli " #h ", " #h ", 24\n\t" \ + "and " #l ", " #l ", a6\n\t" \ + "or " #h ", " #h ", " #t "\n\t" + +#else + +#define SPLIT_130(r0, r1, r2, a0, a1, a2, t) \ + "and " #r0 ", " #a0 ", a6\n\t" \ + FSRI(r1, a1, a0, 52) \ + FSRI(r2, a2, a1, 40) \ + "and " #r1 ", " #r1 ", a6\n\t" \ + "and " #r2 ", " #r2 ", a6\n\t" + +#define SPLIT_128(r0, r1, r2, a0, a1, t) \ + "srli " #r2 ", " #a1 ", 40\n\t" \ + FSRI(r1, a1, a0, 52) \ + "and " #r0 ", " #a0 ", a6\n\t" \ + "and " #r1 ", " #r1 ", a6\n\t" + +#define REDIST(l, h, t) \ + FSRI(h, h, l, 52) \ + "and " #l ", " #l ", a4\n\t" + +#define REDIST_HI(l, h, h2, t) \ + "srli " #h2 ", " #h ", 28\n\t" \ + FSRI(h, h, l, 40) \ + "slli " #l ", " #l ", 12\n\t" \ + "and " #h ", " #h ", a6\n\t" \ + "and " #l ", " #l ", a6\n\t" + +#define REDIST_HI_26(l, h, t) \ + FSRI(h, h, l, 40) \ + "slli " #l ", " #l ", 12\n\t" \ + "and " #l ", " #l ", a6\n\t" + +#endif + +#define RECALC(l, h, t) \ + "srli " #t ", " #l ", 52\n\t" \ + "and " #l ", " #l ", a6\n\t" \ + "add " #h ", " #h ", " #t "\n\t" + +static WC_INLINE void poly1305_blocks_riscv64_16(Poly1305* ctx, + const unsigned char *m, size_t bytes, int notLast) +{ + __asm__ __volatile__ ( + "addi %[bytes], %[bytes], -16\n\t" + "bltz %[bytes], L_poly1305_riscv64_16_64_done_%=\n\t" + + "li a4, 0xffffffc000000\n\t" + "li a5, 0x3ffffff\n\t" + "li a6, 0xfffffffffffff\n\t" + + /* Load r and h */ + "ld s8, %[ctx_r_0]\n\t" + "ld s9, %[ctx_r_1]\n\t" + + "ld s3, %[ctx_h_0]\n\t" + "ld s4, %[ctx_h_1]\n\t" + "ld s5, %[ctx_h_2]\n\t" + + "L_poly1305_riscv64_16_64_loop_%=:\n\t" + /* Load m */ + "ld t0, (%[m])\n\t" + "ld t1, 8(%[m])\n\t" + /* Split m into 26, 52, 52 */ + SPLIT_130(t2, t3, t4, t0, t1, %[notLast], t5) + + "add s3, s3, t2\n\t" + "add s4, s4, t3\n\t" + "add s5, s5, t4\n\t" + + /* r[0] * h[0] = [0, 1] */ + "mul t0, s8, s3\n\t" + "mulhu t1, s8, s3\n\t" + REDIST(t0, t1, s6) + /* r[0] * h[1] = [1, 2] */ + "mul t3, s8, s4\n\t" + "mulhu t2, s8, s4\n\t" + REDIST(t3, t2, s6) + "add t1, t1, t3\n\t" + /* r[1] * h[0] = [1, 2] */ + "mul t4, s9, s3\n\t" + "mulhu t5, s9, s3\n\t" + REDIST_HI(t4, t5, t3, s6) + "add t1, t1, t4\n\t" + "add t2, t2, t5\n\t" + /* r[0] * h[2] = [2, 3] */ + "mul t4, s8, s5\n\t" + "mulhu t5, s8, s5\n\t" + REDIST(t4, t5, s6) + "add t2, t2, t4\n\t" + "add t3, t3, t5\n\t" + /* r[1] * h[1] = [2, 3] */ + "mul t5, s9, s4\n\t" + "mulhu t6, s9, s4\n\t" + REDIST_HI(t5, t6, t4, s6) + "add t2, t2, t5\n\t" + "add t3, t3, t6\n\t" + /* r[1] * h[2] = [3, 4] */ + "mul t5, s9, s5\n\t" + "mulhu t6, s9, s5\n\t" + REDIST_HI_26(t5, t6, s6) + "add t3, t3, t5\n\t" + "add t4, t4, t6\n\t" + + RECALC(t1, t2, s6) + RECALC(t2, t3, s6) + RECALC(t3, t4, s6) + + /* h[0..4] % (2^130 - 5) */ + "slli s3, t3, 26\n\t" + "slli s4, t4, 26\n\t" + "and s3, s3, a4\n\t" + "and s4, s4, a4\n\t" + "srli t5, t2, 26\n\t" + "and t2, t2, a5\n\t" + "srli t3, t3, 26\n\t" + "srli t4, t4, 26\n\t" + "add t5, t5, s3\n\t" + "add t3, t3, s4\n\t" + + "slli s5, t5, 2\n\t" + "slli s3, t3, 2\n\t" + "slli s4, t4, 2\n\t" + "add t5, t5, s5\n\t" + "add t3, t3, s3\n\t" + "add t4, t4, s4\n\t" + + "add s3, t0, t5\n\t" + "add s4, t1, t3\n\t" + "add s5, t2, t4\n\t" + + /* h[0..2] % (2^130 - 5) */ + "and t5, s5, a4\n\t" + "and s5, s5, a5\n\t" + "srli t6, t5, 24\n\t" + "srli t5, t5, 26\n\t" + "add t5, t5, t6\n\t" + "add s3, s3, t5\n\t" + + "addi %[bytes], %[bytes], -16\n\t" + "addi %[m], %[m], 16\n\t" + "bgez %[bytes], L_poly1305_riscv64_16_64_loop_%=\n\t" + + "sd s3, %[ctx_h_0]\n\t" + "sd s4, %[ctx_h_1]\n\t" + "sd s5, %[ctx_h_2]\n\t" + "\n" + "L_poly1305_riscv64_16_64_done_%=:\n\t" + : [bytes] "+r" (bytes), [m] "+r" (m) + : [ctx_h_0] "m" (ctx->h[0]), [ctx_h_1] "m" (ctx->h[1]), + [ctx_h_2] "m" (ctx->h[2]), [ctx_r_0] "m" (ctx->r[0]), + [ctx_r_1] "m" (ctx->r[1]), [notLast] "r" ((word64)notLast) + : "memory", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "s6", + "a4", "a5", "a6", /* Constants */ + "s3", "s4", "s5", /* h */ + "s8", "s9" /* r */ + ); +} + +#ifdef WOLFSSL_RISCV_VECTOR + +#define MUL_RES_REDIS(l, h, t) \ + VSRL_VX(t, l, REG_A7) \ + VSLL_VI(h, h, 12) \ + VAND_VX(l, l, REG_A6) \ + VOR_VV(h, h, t) + +#endif + +void poly1305_blocks_riscv64(Poly1305* ctx, const unsigned char *m, + size_t bytes) +{ +#ifdef WOLFSSL_RISCV_VECTOR + __asm__ __volatile__ ( + "addi %[bytes], %[bytes], -32\n\t" + "bltz %[bytes], L_poly1305_riscv64_vec_done_%=\n\t" + + VSETIVLI(REG_ZERO, 2, 1, 1, 0b011, 0b000) + + "li a4, 0xffffffc000000\n\t" + "li a5, 0x3ffffff\n\t" + "li a6, 0xfffffffffffff\n\t" + "li a7, 52\n\t" + + /* Load r and r^2 */ + "mv t0, %[r2]\n\t" + VL2RE64_V(REG_V2, REG_T0) + "addi t0, %[r2], 32\n\t" + VL1RE64_V(REG_V4, REG_T0) + + /* Load h */ + "ld t0, 0(%[h])\n\t" + "ld t1, 8(%[h])\n\t" + "ld t2, 16(%[h])\n\t" + + VMV_S_X(REG_V8, REG_T0) + VMV_S_X(REG_V9, REG_T1) + VMV_S_X(REG_V10, REG_T2) + + "L_poly1305_riscv64_vec_loop_%=:\n\t" + /* m0 + nfin */ + "ld t0, 0(%[m])\n\t" + "ld t1, 8(%[m])\n\t" + "li t6, 1\n\t" + /* Split m into 24, 52, 52 */ + SPLIT_130(t2, t3, t4, t0, t1, t6, t5) + VMV_S_X(REG_V11, REG_T2) + VMV_S_X(REG_V12, REG_T3) + VMV_S_X(REG_V13, REG_T4) + /* m1+ nfin */ + "ld t0, 16(%[m])\n\t" + "ld t1, 24(%[m])\n\t" + /* Split m into 24, 52, 52 */ + SPLIT_130(t2, t3, t4, t0, t1, t6, t5) + VMV_S_X(REG_V14, REG_T2) + VMV_S_X(REG_V15, REG_T3) + VMV_S_X(REG_V16, REG_T4) + /* h += m0 + nfin */ + VADD_VV(REG_V8, REG_V8, REG_V11) + VADD_VV(REG_V9, REG_V9, REG_V12) + VADD_VV(REG_V10, REG_V10, REG_V13) + /* h[0]|m1[0], h[1]|m1[1], h[2]|m1[2] */ + VSLIDEUP_VI(REG_V8, REG_V14, 1) + VSLIDEUP_VI(REG_V9, REG_V15, 1) + VSLIDEUP_VI(REG_V10, REG_V16, 1) + + /* hm[0] * r2r[0] */ + VMUL_VV(REG_V11, REG_V8, REG_V2) + VMULHU_VV(REG_V12, REG_V8, REG_V2) + MUL_RES_REDIS(REG_V11, REG_V12, REG_V18) + + /* + hm[0] * r2r[1] */ + VMUL_VV(REG_V14, REG_V8, REG_V3) + VMULHU_VV(REG_V13, REG_V8, REG_V3) + MUL_RES_REDIS(REG_V14, REG_V13, REG_V18) + VADD_VV(REG_V12, REG_V12, REG_V14) + /* + hm[1] * r2r[0] */ + VMUL_VV(REG_V14, REG_V9, REG_V2) + VMULHU_VV(REG_V15, REG_V9, REG_V2) + MUL_RES_REDIS(REG_V14, REG_V15, REG_V18) + VADD_VV(REG_V12, REG_V12, REG_V14) + VADD_VV(REG_V13, REG_V13, REG_V15) + + /* + hm[0] * r2r[2] */ + VMUL_VV(REG_V15, REG_V8, REG_V4) + VMULHU_VV(REG_V14, REG_V8, REG_V4) + MUL_RES_REDIS(REG_V15, REG_V14, REG_V18) + VADD_VV(REG_V13, REG_V13, REG_V15) + /* + hm[1] * r2r[1] */ + VMUL_VV(REG_V15, REG_V9, REG_V3) + VMULHU_VV(REG_V16, REG_V9, REG_V3) + MUL_RES_REDIS(REG_V15, REG_V16, REG_V18) + VADD_VV(REG_V13, REG_V13, REG_V15) + VADD_VV(REG_V14, REG_V14, REG_V16) + /* + hm[2] * r2r[0] */ + VMUL_VV(REG_V15, REG_V10, REG_V2) + VMULHU_VV(REG_V16, REG_V10, REG_V2) + MUL_RES_REDIS(REG_V15, REG_V16, REG_V18) + VADD_VV(REG_V13, REG_V13, REG_V15) + VADD_VV(REG_V14, REG_V14, REG_V16) + + /* + hm[1] * r2r[2] */ + VMUL_VV(REG_V16, REG_V9, REG_V4) + VMULHU_VV(REG_V15, REG_V9, REG_V4) + MUL_RES_REDIS(REG_V16, REG_V15, REG_V18) + VADD_VV(REG_V14, REG_V14, REG_V16) + /* + hm[2] * r2r[1] */ + VMUL_VV(REG_V16, REG_V10, REG_V3) + VMULHU_VV(REG_V17, REG_V10, REG_V3) + MUL_RES_REDIS(REG_V16, REG_V17, REG_V18) + VADD_VV(REG_V14, REG_V14, REG_V16) + VADD_VV(REG_V15, REG_V15, REG_V17) + + /* + hm[2] * r2r[2] */ + VMUL_VV(REG_V17, REG_V10, REG_V4) + VADD_VV(REG_V15, REG_V15, REG_V17) + + /* Get m1 * r down */ + VSLIDEDOWN_VI(REG_V18, REG_V11, 1) + VSLIDEDOWN_VI(REG_V19, REG_V12, 1) + VSLIDEDOWN_VI(REG_V20, REG_V13, 1) + VSLIDEDOWN_VI(REG_V21, REG_V14, 1) + VSLIDEDOWN_VI(REG_V22, REG_V15, 1) + + /* Add (h + m0) * r^2 + m1 * r */ + VADD_VV(REG_V11, REG_V11, REG_V18) + VADD_VV(REG_V12, REG_V12, REG_V19) + VADD_VV(REG_V13, REG_V13, REG_V20) + VADD_VV(REG_V14, REG_V14, REG_V21) + VADD_VV(REG_V15, REG_V15, REG_V22) + + /* h' % 2^130-5 */ + VSLL_VI(REG_V8, REG_V14, 26) + VSLL_VI(REG_V9, REG_V15, 26) + VAND_VX(REG_V8, REG_V8, REG_A4) + VAND_VX(REG_V9, REG_V9, REG_A4) + VSRL_VI(REG_V10, REG_V13, 26) + VAND_VX(REG_V13, REG_V13, REG_A5) + VSRL_VI(REG_V14, REG_V14, 26) + VSRL_VI(REG_V15, REG_V15, 26) + VADD_VV(REG_V10, REG_V10, REG_V8) + VADD_VV(REG_V14, REG_V14, REG_V9) + + VSLL_VI(REG_V16, REG_V10, 2) + VSLL_VI(REG_V17, REG_V14, 2) + VSLL_VI(REG_V18, REG_V15, 2) + VADD_VV(REG_V10, REG_V10, REG_V16) + VADD_VV(REG_V14, REG_V14, REG_V17) + VADD_VV(REG_V15, REG_V15, REG_V18) + + VADD_VV(REG_V8, REG_V11, REG_V10) + VADD_VV(REG_V9, REG_V12, REG_V14) + VADD_VV(REG_V10, REG_V13, REG_V15) + + /* h'' % 2^130-5 */ + VAND_VX(REG_V11, REG_V10, REG_A4) + VAND_VX(REG_V10, REG_V10, REG_A5) + VSRL_VI(REG_V12, REG_V11, 24) + VSRL_VI(REG_V11, REG_V11, 26) + VADD_VV(REG_V11, REG_V11, REG_V12) + VADD_VV(REG_V8, REG_V8, REG_V11) + + "addi %[bytes], %[bytes], -32\n\t" + "addi %[m], %[m], 32\n\t" + "bgez %[bytes], L_poly1305_riscv64_vec_loop_%=\n\t" + + VMV_X_S(REG_S3, REG_V8) + VMV_X_S(REG_S4, REG_V9) + VMV_X_S(REG_S5, REG_V10) + + "sd s3, 0(%[h])\n\t" + "sd s4, 8(%[h])\n\t" + "sd s5, 16(%[h])\n\t" + + "\n" + "L_poly1305_riscv64_vec_done_%=:\n\t" + "addi %[bytes], %[bytes], 32\n\t" + : [bytes] "+r" (bytes), [m] "+r" (m) + : [r2] "r" (ctx->r2), [h] "r" (ctx->h) + : "memory", "t0", "t1", "t2", "t3", "t4", "t5", "t6", + "s3", "s4", "s5", "a4", "a5", "a6", "a7" + ); +#endif + poly1305_blocks_riscv64_16(ctx, m, bytes, 1); +} + +void poly1305_block_riscv64(Poly1305* ctx, const unsigned char *m) +{ + poly1305_blocks_riscv64_16(ctx, m, POLY1305_BLOCK_SIZE, 1); +} + +#if defined(POLY130564) +static word64 clamp[] = { + 0x0ffffffc0fffffff, + 0x0ffffffc0ffffffc, +}; +#endif /* POLY130564 */ + + +int wc_Poly1305SetKey(Poly1305* ctx, const byte* key, word32 keySz) +{ + if (key == NULL) + return BAD_FUNC_ARG; + +#ifdef CHACHA_AEAD_TEST + word32 k; + printf("Poly key used:\n"); + for (k = 0; k < keySz; k++) { + printf("%02x", key[k]); + if ((k+1) % 8 == 0) + printf("\n"); + } + printf("\n"); +#endif + + if (keySz != 32 || ctx == NULL) + return BAD_FUNC_ARG; + + __asm__ __volatile__ ( + /* Load key material */ + "ld t0, 0(%[key])\n\t" + "ld t1, 8(%[key])\n\t" + "ld t2, 16(%[key])\n\t" + "ld t3, 24(%[key])\n\t" + /* Load clamp */ + "ld t4, 0(%[clamp])\n\t" + "ld t5, 8(%[clamp])\n\t" + /* Save pad for later */ + "sd t2, 0(%[ctx_pad])\n\t" + "sd t3, 8(%[ctx_pad])\n\t" + /* Apply clamp */ + /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */ + "and t0, t0, t4\n\t" + "and t1, t1, t5\n\t" + /* Store r */ + "sd t0, 0(%[ctx_r])\n\t" + "sd t1, 8(%[ctx_r])\n\t" + +#ifdef WOLFSSL_RISCV_VECTOR + "li a6, 0xfffffffffffff\n\t" + /* Split r into parts less than 64 */ + SPLIT_128(t2, t3, t4, t0, t1, t5) + /* Store r */ + "sd t2, 8(%[ctx_r2])\n\t" + "sd t3, 24(%[ctx_r2])\n\t" + "sd t4, 40(%[ctx_r2])\n\t" + + /* r * r */ + /* r[0] * r[0] - 0, 1 */ + "mul t2, t0, t0\n\t" + "mulhu t3, t0, t0\n\t" + /* + r[0] * r[1] - 1, 2 */ + "mul t5, t1, t0\n\t" + "mulhu t6, t1, t0\n\t" + "add t3, t3, t5\n\t" + "sltu s1, t3, t5\n\t" + "add t4, t6, s1\n\t" + /* + r[1] * r[0] - 1, 2 */ + "add t3, t3, t5\n\t" + "sltu s1, t3, t5\n\t" + "add t4, t4, s1\n\t" + "add t4, t4, t6\n\t" + "sltu t5, t4, t6\n\t" + /* + r[1] * r[1] - 2, 3 */ + "mul s1, t1, t1\n\t" + "mulhu t6, t1, t1\n\t" + "add t4, t4, s1\n\t" + "sltu s1, t4, s1\n\t" + "add t5, t5, t6\n\t" + "add t5, t5, s1\n\t" + /* (r * r) % (2 ^ 130 - 5) */ + "andi t6, t4, -4\n\t" + "andi t4, t4, 3\n\t" + /* r[0..129] + r[130-191] * 4 */ + "add t2, t2, t6\n\t" + "sltu s1, t2, t6\n\t" + "add t3, t3, s1\n\t" + "sltu s1, t3, s1\n\t" + "add t4, t4, s1\n\t" + /* r[0..129] + r[130-193] */ + "srli t6, t6, 2\n\t" + "slli s1, t5, 62\n\t" + "or t6, t6, s1\n\t" + "add t2, t2, t6\n\t" + "sltu s1, t2, t6\n\t" + "add t3, t3, s1\n\t" + "sltu s1, t3, s1\n\t" + "add t4, t4, s1\n\t" + /* r[64..129] + r[194-253] * 4 */ + "add t3, t3, t5\n\t" + "sltu s1, t3, t5\n\t" + "add t4, t4, s1\n\t" + /* r[64..129] + r[194-253] */ + "srli t5, t5, 2\n\t" + "add t3, t3, t5\n\t" + "sltu s1, t3, t5\n\t" + "add t4, t4, s1\n\t" + /* Split r^2 into parts less than 64 */ + SPLIT_130(t0, t1, t2, t2, t3, t4, t5) + /* Store r^2 */ + "sd t0, 0(%[ctx_r2])\n\t" + "sd t1, 16(%[ctx_r2])\n\t" + "sd t2, 32(%[ctx_r2])\n\t" +#endif + + /* h (accumulator) = 0 */ + "sd x0, 0(%[ctx_h])\n\t" + "sd x0, 8(%[ctx_h])\n\t" + "sd x0, 16(%[ctx_h])\n\t" + /* Zero leftover */ + "sd x0, (%[ctx_leftover])\n\t" + : + : [clamp] "r" (clamp), [key] "r" (key), [ctx_r] "r" (ctx->r), +#ifdef WOLFSSL_RISCV_VECTOR + [ctx_r2] "r" (ctx->r2), +#endif + [ctx_h] "r" (ctx->h), [ctx_pad] "r" (ctx->pad), + [ctx_leftover] "r" (&ctx->leftover) + : "memory", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "s1" +#ifdef WOLFSSL_RISCV_VECTOR + , "a6" +#endif + ); + + return 0; +} + + +int wc_Poly1305Final(Poly1305* ctx, byte* mac) +{ + + if (ctx == NULL) + return BAD_FUNC_ARG; + + /* process the remaining block */ + if (ctx->leftover) { + size_t i = ctx->leftover; + ctx->buffer[i++] = 1; + for (; i < POLY1305_BLOCK_SIZE; i++) + ctx->buffer[i] = 0; + poly1305_blocks_riscv64_16(ctx, ctx->buffer, POLY1305_BLOCK_SIZE, 0); + } + + __asm__ __volatile__ ( + /* Load raw h and padding. */ + "ld t0, %[ctx_h_0]\n\t" + "ld t1, %[ctx_h_1]\n\t" + "ld t2, %[ctx_h_2]\n\t" + "ld t3, %[ctx_pad_0]\n\t" + "ld t4, %[ctx_pad_1]\n\t" + + /* Shrink h to 2,64,64. */ + "slli t5, t1, 52\n\t" + "slli t6, t2, 40\n\t" + "srli t1, t1, 12\n\t" + "srli t2, t2, 24\n\t" + "add t1, t1, t6\n\t" + "sltu t6, t1, t6\n\t" + "add t2, t2, t6\n\t" + "add t0, t0, t5\n\t" + "sltu t5, t0, t5\n\t" + "add t1, t1, t5\n\t" + "sltu t5, t1, t5\n\t" + "add t2, t2, t5\n\t" + + /* Add padding to h */ + "add t0, t0, t3\n\t" + "sltu t3, t0, t3\n\t" + "add t1, t1, t3\n\t" + "sltu t3, t1, t3\n\t" + "add t2, t2, t3\n\t" + "add t1, t1, t4\n\t" + "sltu t4, t1, t4\n\t" + "add t2, t2, t4\n\t" + + /* Check if h is larger than p */ + "addi t3, t0, 5\n\t" + "sltiu t3, t3, 5\n\t" + "add t4, t1, t3\n\t" + "sltu t3, t4, t3\n\t" + "add t4, t2, t3\n\t" + /* Check if h+5 is larger than 2^130 */ + "addi t4, t4, -4\n\t" + "srli t4, t4, 63\n\t" + "addi t4, t4, -1\n\t" + "andi t4, t4, 5\n\t" + "add t0, t0, t4\n\t" + "sltu t3, t0, t4\n\t" + "add t1, t1, t3\n\t" + "sltu t3, t1, t3\n\t" + "add t2, t2, t3\n\t" + "andi t2, t2, 3\n\t" + "sd t0, 0(%[mac])\n\t" + "sd t1, 8(%[mac])\n\t" + /* Zero out h. */ + "sd x0, %[ctx_h_0]\n\t" + "sd x0, %[ctx_h_1]\n\t" + "sd x0, %[ctx_h_2]\n\t" + /* Zero out r. */ + "sd x0, %[ctx_r_0]\n\t" + "sd x0, %[ctx_r_1]\n\t" + /* Zero out pad. */ + "ld t3, %[ctx_pad_0]\n\t" + "ld t4, %[ctx_pad_1]\n\t" + : [mac] "+r" (mac) + : [ctx_pad_0] "m" (ctx->pad[0]), [ctx_pad_1] "m" (ctx->pad[1]), + [ctx_h_0] "m" (ctx->h[0]), [ctx_h_1] "m" (ctx->h[1]), + [ctx_h_2] "m" (ctx->h[2]), + [ctx_r_0] "m" (ctx->r[0]), [ctx_r_1] "m" (ctx->r[1]) + : "memory", "t0", "t1", "t2", "t3", "t4", "t5", "t6" + ); + + return 0; +} + +#endif /* HAVE_POLY1305 */ +#endif /* WOLFSSL_RISCV_ASM */ diff --git a/wolfcrypt/src/port/riscv/riscv-64-sha3.c b/wolfcrypt/src/port/riscv/riscv-64-sha3.c new file mode 100644 index 0000000000..45722269fd --- /dev/null +++ b/wolfcrypt/src/port/riscv/riscv-64-sha3.c @@ -0,0 +1,863 @@ +/* riscv-64-sha3.c + * + * Copyright (C) 2006-2024 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include +#include + +#if defined(WOLFSSL_SHA3) && !defined(WOLFSSL_XILINX_CRYPT) && \ + !defined(WOLFSSL_AFALG_XILINX_SHA3) + +#if FIPS_VERSION3_GE(2,0,0) + /* set NO_WRAPPERS before headers, use direct internal f()s not wrappers */ + #define FIPS_NO_WRAPPERS + + #ifdef USE_WINDOWS_API + #pragma code_seg(".fipsA$n") + #pragma const_seg(".fipsB$n") + #endif +#endif + +#include + +static const word64 hash_keccak_r[24] = +{ + 0x0000000000000001UL, 0x0000000000008082UL, + 0x800000000000808aUL, 0x8000000080008000UL, + 0x000000000000808bUL, 0x0000000080000001UL, + 0x8000000080008081UL, 0x8000000000008009UL, + 0x000000000000008aUL, 0x0000000000000088UL, + 0x0000000080008009UL, 0x000000008000000aUL, + 0x000000008000808bUL, 0x800000000000008bUL, + 0x8000000000008089UL, 0x8000000000008003UL, + 0x8000000000008002UL, 0x8000000000000080UL, + 0x000000000000800aUL, 0x800000008000000aUL, + 0x8000000080008081UL, 0x8000000000008080UL, + 0x0000000080000001UL, 0x8000000080008008UL +}; + +#ifndef WOLFSSL_RISCV_VECTOR + +#define S0_0 "a1" +#define S0_1 "a2" +#define S0_2 "a3" +#define S0_3 "a4" +#define S0_4 "a5" +#define S1_0 "s1" +#define S1_1 "s2" +#define S1_2 "s3" +#define S1_3 "s4" +#define S1_4 "s5" +#define S2_0 "s6" +#define S2_1 "s7" +#define S2_2 "s8" +#define S2_3 "s9" +#define S2_4 "s10" +#define S3_0 "t0" +#define S3_1 "t1" +#define S3_2 "t2" +#define S3_3 "t3" +#define S3_4 "t4" + +#define T_0 "a6" +#define T_1 "a7" +#define T_2 "t5" +#define T_3 "t6" +#define T_4 "s11" + +#define SR0_0 REG_A1 +#define SR0_1 REG_A2 +#define SR0_2 REG_A3 +#define SR0_3 REG_A4 +#define SR0_4 REG_A5 +#define SR1_0 REG_S1 +#define SR1_1 REG_S2 +#define SR1_2 REG_S3 +#define SR1_3 REG_S4 +#define SR1_4 REG_S5 +#define SR2_0 REG_S6 +#define SR2_1 REG_S7 +#define SR2_2 REG_S8 +#define SR2_3 REG_S9 +#define SR2_4 REG_S10 +#define SR3_0 REG_T0 +#define SR3_1 REG_T1 +#define SR3_2 REG_T2 +#define SR3_3 REG_T3 +#define SR3_4 REG_T4 + +#define TR_0 REG_A6 +#define TR_1 REG_A7 +#define TR_2 REG_T5 +#define TR_3 REG_T6 +#define TR_4 REG_S11 + +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + +#define SWAP_ROTL(t0, tr0, t1, s, sr, rr, rl) \ + "mv " t1 ", " s "\n\t" \ + "srli " s ", " t0 ", " #rr "\n\t" \ + "slli " t0 ", " t0 ", " #rl "\n\t" \ + "or " s ", " s ", " t0 "\n\t" + +#define SWAP_ROTL_MEM(t0, tr0, t1, t2, s, rr, rl) \ + "ld " t1 ", " #s "(%[s])\n\t" \ + "srli " t2 ", " t0 ", " #rr "\n\t" \ + "slli " t0 ", " t0 ", " #rl "\n\t" \ + "or " t0 ", " t0 ", " t2 "\n\t" \ + "sd " t0 ", " #s "(%[s])\n\t" + +#else + +#define SWAP_ROTL(t0, tr0, t1, s, sr, rr, rl) \ + "mv " t1 ", " s "\n\t" \ + RORI(sr, tr0, rr) + +#define SWAP_ROTL_MEM(t0, tr0, t1, t2, s, rr, rl) \ + "ld " t1 ", " #s "(%[s])\n\t" \ + RORI(tr0, tr0, rr) \ + "sd " t0 ", " #s "(%[s])\n\t" + +#endif + +void BlockSha3(word64* s) +{ + const word64* r = hash_keccak_r; + + __asm__ __volatile__ ( + "addi sp, sp, -24\n\t" + "li " T_4 ", 24\n\t" + "ld " S0_0 ", 0(%[s])\n\t" + "ld " S0_1 ", 8(%[s])\n\t" + "ld " S0_2 ", 16(%[s])\n\t" + "ld " S0_3 ", 24(%[s])\n\t" + "ld " S0_4 ", 32(%[s])\n\t" + "ld " S1_0 ", 40(%[s])\n\t" + "ld " S1_1 ", 48(%[s])\n\t" + "ld " S1_2 ", 56(%[s])\n\t" + "ld " S1_3 ", 64(%[s])\n\t" + "ld " S1_4 ", 72(%[s])\n\t" + "ld " S2_0 ", 80(%[s])\n\t" + "ld " S2_1 ", 88(%[s])\n\t" + "ld " S2_2 ", 96(%[s])\n\t" + "ld " S2_3 ", 104(%[s])\n\t" + "ld " S2_4 ", 112(%[s])\n\t" + "ld " S3_0 ", 120(%[s])\n\t" + "ld " S3_1 ", 128(%[s])\n\t" + "ld " S3_2 ", 136(%[s])\n\t" + "ld " S3_3 ", 144(%[s])\n\t" + "ld " S3_4 ", 152(%[s])\n\t" + "ld " T_0 ", 160(%[s])\n\t" + "ld " T_1 ", 168(%[s])\n\t" + "ld " T_2 ", 176(%[s])\n\t" + "\n" + "L_riscv_64_block_sha3_loop:\n\t" + "sd " T_4 ", 16(sp)\n\t" + + /* COLUMN MIX */ + /* Calc b[0], b[1], b[2], b[3], b[4] */ + "ld " T_3 ", 184(%[s])\n\t" + "ld " T_4 ", 192(%[s])\n\t" + "xor " T_0 ", " T_0 ", " S0_0 "\n\t" + "xor " T_1 ", " T_1 ", " S0_1 "\n\t" + "xor " T_2 ", " T_2 ", " S0_2 "\n\t" + "xor " T_3 ", " T_3 ", " S0_3 "\n\t" + "xor " T_4 ", " T_4 ", " S0_4 "\n\t" + "xor " T_0 ", " T_0 ", " S1_0 "\n\t" + "xor " T_1 ", " T_1 ", " S1_1 "\n\t" + "xor " T_2 ", " T_2 ", " S1_2 "\n\t" + "xor " T_3 ", " T_3 ", " S1_3 "\n\t" + "xor " T_4 ", " T_4 ", " S1_4 "\n\t" + "xor " T_0 ", " T_0 ", " S2_0 "\n\t" + "xor " T_1 ", " T_1 ", " S2_1 "\n\t" + "xor " T_2 ", " T_2 ", " S2_2 "\n\t" + "xor " T_3 ", " T_3 ", " S2_3 "\n\t" + "xor " T_4 ", " T_4 ", " S2_4 "\n\t" + "xor " T_0 ", " T_0 ", " S3_0 "\n\t" + "xor " T_1 ", " T_1 ", " S3_1 "\n\t" + "xor " T_2 ", " T_2 ", " S3_2 "\n\t" + "xor " T_3 ", " T_3 ", " S3_3 "\n\t" + "xor " T_4 ", " T_4 ", " S3_4 "\n\t" + "sd " T_1 ", 0(sp)\n\t" + "sd " T_3 ", 8(sp)\n\t" + /* T_0, T_1, T_2, T_3, T_4 */ + + /* s[0],s[5],s[10],s[15],s[20] ^= b[4] ^ ROTL(b[1], 1) */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "srli " T_3 ", " T_1 ", 63\n\t" + "slli " T_1 ", " T_1 ", 1\n\t" + "or " T_1 ", " T_1 ", " T_3 "\n\t" +#else + RORI(TR_1, TR_1, 63) +#endif + "ld " T_3 ", 160(%[s])\n\t" + "xor " T_1 ", " T_1 ", " T_4 "\n\t" + "xor " S0_0 ", " S0_0 ", " T_1 "\n\t" + "xor " S1_0 ", " S1_0 ", " T_1 "\n\t" + "xor " T_3 ", " T_3 ", " T_1 "\n\t" + "xor " S2_0 ", " S2_0 ", " T_1 "\n\t" + "xor " S3_0 ", " S3_0 ", " T_1 "\n\t" + "sd " T_3 ", 160(%[s])\n\t" + /* T_0, T_2, T_4 */ + + /* s[1],s[6],s[11],s[16],s[21] ^= b[0] ^ ROTL(b[2], 1)*/ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "srli " T_3 ", " T_2 ", 63\n\t" + "slli " T_1 ", " T_2 ", 1\n\t" + "or " T_1 ", " T_1 ", " T_3 "\n\t" +#else + RORI(TR_1, TR_2, 63) +#endif + "ld " T_3 ", 168(%[s])\n\t" + "xor " T_1 ", " T_1 ", " T_0 "\n\t" + "xor " S0_1 ", " S0_1 ", " T_1 "\n\t" + "xor " S1_1 ", " S1_1 ", " T_1 "\n\t" + "xor " T_3 ", " T_3 ", " T_1 "\n\t" + "xor " S2_1 ", " S2_1 ", " T_1 "\n\t" + "xor " S3_1 ", " S3_1 ", " T_1 "\n\t" + "sd " T_3 ", 168(%[s])\n\t" + /* T_0, T_2, T_4 */ + + /* s[3],s[8],s[13],s[18],s[23] ^= b[2] ^ ROTL(b[4], 1) */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "srli " T_3 ", " T_4 ", 63\n\t" + "slli " T_4 ", " T_4 ", 1\n\t" + "or " T_4 ", " T_4 ", " T_3 "\n\t" +#else + RORI(TR_4, TR_4, 63) +#endif + "ld " T_3 ", 184(%[s])\n\t" + "xor " T_4 ", " T_4 ", " T_2 "\n\t" + "xor " S0_3 ", " S0_3 ", " T_4 "\n\t" + "xor " S1_3 ", " S1_3 ", " T_4 "\n\t" + "xor " T_3 ", " T_3 ", " T_4 "\n\t" + "xor " S2_3 ", " S2_3 ", " T_4 "\n\t" + "xor " S3_3 ", " S3_3 ", " T_4 "\n\t" + "sd " T_3 ", 184(%[s])\n\t" + /* T_0, T_2 */ + + "ld " T_3 ", 8(sp)\n\t" + /* s[4],s[9],s[14],s[19],s[24] ^= b[3] ^ ROTL(b[0], 1) */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "srli " T_2 ", " T_0 ", 63\n\t" + "slli " T_0 ", " T_0 ", 1\n\t" + "or " T_0 ", " T_0 ", " T_2 "\n\t" +#else + RORI(TR_0, TR_0, 63) +#endif + "ld " T_4 ", 192(%[s])\n\t" + "xor " T_0 ", " T_0 ", " T_3 "\n\t" + "xor " S0_4 ", " S0_4 ", " T_0 "\n\t" + "xor " S1_4 ", " S1_4 ", " T_0 "\n\t" + "xor " T_4 ", " T_4 ", " T_0 "\n\t" + "xor " S2_4 ", " S2_4 ", " T_0 "\n\t" + "xor " S3_4 ", " S3_4 ", " T_0 "\n\t" + /* T_3 */ + + "ld " T_1 ", 0(sp)\n\t" + /* s[2],s[7],s[12],s[17],s[22] ^= b[1] ^ ROTL(b[3], 1) */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "srli " T_2 ", " T_3 ", 63\n\t" + "slli " T_3 ", " T_3 ", 1\n\t" + "or " T_3 ", " T_3 ", " T_2 "\n\t" +#else + RORI(TR_3, TR_3, 63) +#endif + "ld " T_2 ", 176(%[s])\n\t" + "xor " T_3 ", " T_3 ", " T_1 "\n\t" + "xor " S0_2 ", " S0_2 ", " T_3 "\n\t" + "xor " S1_2 ", " S1_2 ", " T_3 "\n\t" + "xor " T_2 ", " T_2 ", " T_3 "\n\t" + "xor " S2_2 ", " S2_2 ", " T_3 "\n\t" + "xor " S3_2 ", " S3_2 ", " T_3 "\n\t" + + /* SWAP ROTL */ + /* t0 = s[10], s[10] = s[1] >>> 63 */ + "mv " T_0 ", " S2_0 "\n\t" +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "srli " T_1 ", " S0_1 ", 63\n\t" + "slli " S2_0 ", " S0_1 ", 1\n\t" + "or " S2_0 ", " S2_0 ", " T_1 "\n\t" +#else + RORI(SR2_0, SR0_1, 63) +#endif + /* t1 = s[ 7], s[ 7] = t0 >>> 61 */ + SWAP_ROTL(T_0, TR_0, T_1, S1_2, SR1_2, 61, 3) + /* t0 = s[11], s[11] = t1 >>> 58 */ + SWAP_ROTL(T_1, TR_1, T_0, S2_1, SR2_1, 58, 6) + /* t1 = s[17], s[17] = t0 >>> 54 */ + SWAP_ROTL(T_0, TR_0, T_1, S3_2, SR3_2, 54, 10) + /* t0 = s[18], s[18] = t1 >>> 49 */ + SWAP_ROTL(T_1, TR_1, T_0, S3_3, SR3_3, 49, 15) + /* t1 = s[ 3], s[ 3] = t0 >>> 43 */ + SWAP_ROTL(T_0, TR_0, T_1, S0_3, SR0_3, 43, 21) + /* t0 = s[ 5], s[ 5] = t1 >>> 36 */ + SWAP_ROTL(T_1, TR_1, T_0, S1_0, SR1_0, 36, 28) + /* t1 = s[16], s[16] = t0 >>> 28 */ + SWAP_ROTL(T_0, TR_0, T_1, S3_1, SR3_1, 28, 36) + /* t0 = s[ 8], s[ 8] = t1 >>> 19 */ + SWAP_ROTL(T_1, TR_1, T_0, S1_3, SR1_3, 19, 45) + /* t1 = s[21], s[21] = t0 >>> 9 */ + SWAP_ROTL_MEM(T_0, TR_0, T_1, T_3, 168, 9, 55) + /* t0 = s[24], s[24] = t1 >>> 62 */ + SWAP_ROTL(T_1, TR_1, T_0, T_4, TR_4, 62, 2) + /* t1 = s[ 4], s[ 4] = t0 >>> 50 */ + SWAP_ROTL(T_0, TR_0, T_1, S0_4, SR0_4, 50, 14) + /* t0 = s[15], s[15] = t1 >>> 37 */ + SWAP_ROTL(T_1, TR_1, T_0, S3_0, SR3_0, 37, 27) + /* t1 = s[23], s[23] = t0 >>> 23 */ + SWAP_ROTL_MEM(T_0, TR_0, T_1, T_3, 184, 23, 41) + /* t0 = s[19], s[19] = t1 >>> 8 */ + SWAP_ROTL(T_1, TR_1, T_0, S3_4, SR3_4, 8, 56) + /* t1 = s[13], s[13] = t0 >>> 56 */ + SWAP_ROTL(T_0, TR_0, T_1, S2_3, SR2_3, 56, 8) + /* t0 = s[12], s[12] = t1 >>> 39 */ + SWAP_ROTL(T_1, TR_1, T_0, S2_2, SR2_2, 39, 25) + /* t1 = s[ 2], s[ 2] = t0 >>> 21 */ + SWAP_ROTL(T_0, TR_0, T_1, S0_2, SR0_2, 21, 43) + /* t0 = s[20], s[20] = t1 >>> 2 */ + SWAP_ROTL_MEM(T_1, TR_1, T_0, T_3, 160, 2, 62) + /* t1 = s[14], s[14] = t0 >>> 46 */ + SWAP_ROTL(T_0, TR_0, T_1, S2_4, SR2_4, 46, 18) + /* t0 = s[22], s[22] = t1 >>> 25 */ + SWAP_ROTL(T_1, TR_1, T_0, T_2, TR_2, 25, 39) + /* t1 = s[ 9], s[ 9] = t0 >>> 3 */ + SWAP_ROTL(T_0, TR_0, T_1, S1_4, SR1_4, 3, 61) + /* t0 = s[ 6], s[ 6] = t1 >>> 44 */ + SWAP_ROTL(T_1, TR_1, T_0, S1_1, SR1_1, 44, 20) + /* s[ 1] = t0 >>> 20 */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "srli " S0_1 ", " T_0 ", 20\n\t" + "slli " T_0 ", " T_0 ", 44\n\t" + "or " S0_1 ", " S0_1 ", " T_0 "\n\t" +#else + RORI(SR0_1, TR_0, 20) +#endif + + /* ROW MIX */ + /* s[0] */ + "mv " T_0 ", " S0_0 "\n\t" +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S0_1 "\n\t" + "and " T_3 ", " T_3 ", " S0_2 "\n\t" +#else + ANDN(TR_3, SR0_2, SR0_1) +#endif + "xor " S0_0 ", " S0_0 ", " T_3 "\n\t" + /* s[1] */ + "mv " T_1 ", " S0_1 "\n\t" +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S0_2 "\n\t" + "and " T_3 ", " T_3 ", " S0_3 "\n\t" +#else + ANDN(TR_3, SR0_3, SR0_2) +#endif + "xor " S0_1 ", " S0_1 ", " T_3 "\n\t" + /* s[2] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S0_3 "\n\t" + "and " T_3 ", " T_3 ", " S0_4 "\n\t" +#else + ANDN(TR_3, SR0_4, SR0_3) +#endif + "xor " S0_2 ", " S0_2 ", " T_3 "\n\t" + /* s[3] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S0_4 "\n\t" + "and " T_3 ", " T_3 ", " T_0 "\n\t" +#else + ANDN(TR_3, TR_0, SR0_4) +#endif + "xor " S0_3 ", " S0_3 ", " T_3 "\n\t" + /* s[4] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " T_0 "\n\t" + "and " T_3 ", " T_3 ", " T_1 "\n\t" +#else + ANDN(TR_3, TR_1, TR_0) +#endif + "xor " S0_4 ", " S0_4 ", " T_3 "\n\t" + + /* s[5] */ + "mv " T_0 ", " S1_0 "\n\t" +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S1_1 "\n\t" + "and " T_3 ", " T_3 ", " S1_2 "\n\t" +#else + ANDN(TR_3, SR1_2, SR1_1) +#endif + "xor " S1_0 ", " S1_0 ", " T_3 "\n\t" + /* s[6] */ + "mv " T_1 ", " S1_1 "\n\t" +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S1_2 "\n\t" + "and " T_3 ", " T_3 ", " S1_3 "\n\t" +#else + ANDN(TR_3, SR1_3, SR1_2) +#endif + "xor " S1_1 ", " S1_1 ", " T_3 "\n\t" + /* s[7] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S1_3 "\n\t" + "and " T_3 ", " T_3 ", " S1_4 "\n\t" +#else + ANDN(TR_3, SR1_4, SR1_3) +#endif + "xor " S1_2 ", " S1_2 ", " T_3 "\n\t" + /* s[8] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S1_4 "\n\t" + "and " T_3 ", " T_3 ", " T_0 "\n\t" +#else + ANDN(TR_3, TR_0, SR1_4) +#endif + "xor " S1_3 ", " S1_3 ", " T_3 "\n\t" + /* s[9] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " T_0 "\n\t" + "and " T_3 ", " T_3 ", " T_1 "\n\t" +#else + ANDN(TR_3, TR_1, TR_0) +#endif + "xor " S1_4 ", " S1_4 ", " T_3 "\n\t" + + /* s[10] */ + "mv " T_0 ", " S2_0 "\n\t" +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S2_1 "\n\t" + "and " T_3 ", " T_3 ", " S2_2 "\n\t" +#else + ANDN(TR_3, SR2_2, SR2_1) +#endif + "xor " S2_0 ", " S2_0 ", " T_3 "\n\t" + /* s[11] */ + "mv " T_1 ", " S2_1 "\n\t" +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S2_2 "\n\t" + "and " T_3 ", " T_3 ", " S2_3 "\n\t" +#else + ANDN(TR_3, SR2_3, SR2_2) +#endif + "xor " S2_1 ", " S2_1 ", " T_3 "\n\t" + /* s[12] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S2_3 "\n\t" + "and " T_3 ", " T_3 ", " S2_4 "\n\t" +#else + ANDN(TR_3, SR2_4, SR2_3) +#endif + "xor " S2_2 ", " S2_2 ", " T_3 "\n\t" + /* s[13] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S2_4 "\n\t" + "and " T_3 ", " T_3 ", " T_0 "\n\t" +#else + ANDN(TR_3, TR_0, SR2_4) +#endif + "xor " S2_3 ", " S2_3 ", " T_3 "\n\t" + /* s[14] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " T_0 "\n\t" + "and " T_3 ", " T_3 ", " T_1 "\n\t" +#else + ANDN(TR_3, TR_1, TR_0) +#endif + "xor " S2_4 ", " S2_4 ", " T_3 "\n\t" + + /* s[15] */ + "mv " T_0 ", " S3_0 "\n\t" +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S3_1 "\n\t" + "and " T_3 ", " T_3 ", " S3_2 "\n\t" +#else + ANDN(TR_3, SR3_2, SR3_1) +#endif + "xor " S3_0 ", " S3_0 ", " T_3 "\n\t" + /* s[16] */ + "mv " T_1 ", " S3_1 "\n\t" +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S3_2 "\n\t" + "and " T_3 ", " T_3 ", " S3_3 "\n\t" +#else + ANDN(TR_3, SR3_3, SR3_2) +#endif + "xor " S3_1 ", " S3_1 ", " T_3 "\n\t" + /* s[17] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S3_3 "\n\t" + "and " T_3 ", " T_3 ", " S3_4 "\n\t" +#else + ANDN(TR_3, SR3_4, SR3_3) +#endif + "xor " S3_2 ", " S3_2 ", " T_3 "\n\t" + /* s[18] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " S3_4 "\n\t" + "and " T_3 ", " T_3 ", " T_0 "\n\t" +#else + ANDN(TR_3, TR_0, SR3_4) +#endif + "xor " S3_3 ", " S3_3 ", " T_3 "\n\t" + /* s[19] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " T_3 ", " T_0 "\n\t" + "and " T_3 ", " T_3 ", " T_1 "\n\t" +#else + ANDN(TR_3, TR_1, TR_0) +#endif + "xor " S3_4 ", " S3_4 ", " T_3 "\n\t" + + "sd " S3_0 ", 120(%[s])\n\t" + "sd " S3_1 ", 128(%[s])\n\t" + "sd " S3_2 ", 136(%[s])\n\t" + "ld " T_0 ", 160(%[s])\n\t" + "ld " T_1 ", 168(%[s])\n\t" + "ld " T_3 ", 184(%[s])\n\t" + + /* s[20] */ + "mv " S3_0 ", " T_0 "\n\t" +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " S3_2 ", " T_1 "\n\t" + "and " S3_2 ", " S3_2 ", " T_2 "\n\t" +#else + ANDN(SR3_2, TR_2, TR_1) +#endif + "xor " T_0 ", " T_0 ", " S3_2 "\n\t" + /* s[21] */ + "mv " S3_1 ", " T_1 "\n\t" +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " S3_2 ", " T_2 "\n\t" + "and " S3_2 ", " S3_2 ", " T_3 "\n\t" +#else + ANDN(SR3_2, TR_3, TR_2) +#endif + "xor " T_1 ", " T_1 ", " S3_2 "\n\t" + /* s[22] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " S3_2 ", " T_3 "\n\t" + "and " S3_2 ", " S3_2 ", " T_4 "\n\t" +#else + ANDN(SR3_2, TR_4, TR_3) +#endif + "xor " T_2 ", " T_2 ", " S3_2 "\n\t" + /* s[23] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " S3_2 ", " T_4 "\n\t" + "and " S3_2 ", " S3_2 ", " S3_0 "\n\t" +#else + ANDN(SR3_2, SR3_0, TR_4) +#endif + "xor " T_3 ", " T_3 ", " S3_2 "\n\t" + /* s[24] */ +#ifndef WOLFSSL_RISCV_BASE_BIT_MANIPULATION + "not " S3_2 ", " S3_0 "\n\t" + "and " S3_2 ", " S3_2 ", " S3_1 "\n\t" +#else + ANDN(SR3_2, SR3_1, SR3_0) +#endif + "xor " T_4 ", " T_4 ", " S3_2 "\n\t" + + "ld " S3_0 ", 120(%[s])\n\t" + "ld " S3_1 ", 128(%[s])\n\t" + "ld " S3_2 ", 136(%[s])\n\t" + "sd " T_0 ", 160(%[s])\n\t" + "sd " T_1 ", 168(%[s])\n\t" + "sd " T_2 ", 176(%[s])\n\t" + "sd " T_3 ", 184(%[s])\n\t" + "sd " T_4 ", 192(%[s])\n\t" + + "ld " T_4 ", 16(sp)\n\t" + "ld " T_3 ", 0(%[r])\n\t" + "addi %[r], %[r], 8\n\t" + "addi " T_4 ", " T_4 ", -1\n\t" + "xor " S0_0 ", " S0_0 ", " T_3 "\n\t" + "bnez " T_4 ", L_riscv_64_block_sha3_loop\n\t" + + "sd " S0_0 ", 0(%[s])\n\t" + "sd " S0_1 ", 8(%[s])\n\t" + "sd " S0_2 ", 16(%[s])\n\t" + "sd " S0_3 ", 24(%[s])\n\t" + "sd " S0_4 ", 32(%[s])\n\t" + "sd " S1_0 ", 40(%[s])\n\t" + "sd " S1_1 ", 48(%[s])\n\t" + "sd " S1_2 ", 56(%[s])\n\t" + "sd " S1_3 ", 64(%[s])\n\t" + "sd " S1_4 ", 72(%[s])\n\t" + "sd " S2_0 ", 80(%[s])\n\t" + "sd " S2_1 ", 88(%[s])\n\t" + "sd " S2_2 ", 96(%[s])\n\t" + "sd " S2_3 ", 104(%[s])\n\t" + "sd " S2_4 ", 112(%[s])\n\t" + "sd " S3_0 ", 120(%[s])\n\t" + "sd " S3_1 ", 128(%[s])\n\t" + "sd " S3_2 ", 136(%[s])\n\t" + "sd " S3_3 ", 144(%[s])\n\t" + "sd " S3_4 ", 152(%[s])\n\t" + + "addi sp, sp, 24\n\t" + + : [r] "+r" (r) + : [s] "r" (s) + : "memory", "t0", "t1", "t2", "t3", "t4", "t5", "t6", + "a1", "a2", "a3", "a4", "a5", "a6", "a7", + "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10", "s11" + ); +} + +#else + +#ifndef WOLFSSL_RISCV_VECTOR_BASE_BIT_MANIPULATION + +#define COL_MIX(r, b1, b4) \ + VSLL_VI(REG_V31, b1, 1) \ + VSRL_VX(REG_V30, b1, REG_T1) \ + VXOR_VV(REG_V31, REG_V31, b4) \ + VXOR_VV(REG_V31, REG_V31, REG_V30) \ + VXOR_VV((r + 0), (r + 0), REG_V31) \ + VXOR_VV((r + 5), (r + 5), REG_V31) \ + VXOR_VV((r + 10), (r + 10), REG_V31) \ + VXOR_VV((r + 15), (r + 15), REG_V31) \ + VXOR_VV((r + 20), (r + 20), REG_V31) + +#define SWAP_ROTL_LO(vr, vt0, vt1, sl) \ + VMV_V_V(vt0, vr) \ + "li t1, 64 - " #sl "\n\t" \ + VSLL_VI(vr, vt1, sl) \ + VSRL_VX(vt1, vt1, REG_T1) \ + VOR_VV(vr, vr, vt1) + +#define SWAP_ROTL_HI(vr, vt0, vt1, sl) \ + VMV_V_V(vt0, vr) \ + "li t1, " #sl "\n\t" \ + VSRL_VI(vr, vt1, (64 - sl)) \ + VSLL_VX(vt1, vt1, REG_T1) \ + VOR_VV(vr, vr, vt1) + +#define ROW_MIX(r) \ + VMV_V_V(REG_V25, (r + 0)) \ + VMV_V_V(REG_V26, (r + 1)) \ + VNOT_V(REG_V30, (r + 1)) \ + VNOT_V(REG_V31, (r + 2)) \ + VAND_VV(REG_V30, REG_V30, (r + 2)) \ + VAND_VV(REG_V31, REG_V31, (r + 3)) \ + VXOR_VV((r + 0), REG_V30, (r + 0)) \ + VXOR_VV((r + 1), REG_V31, (r + 1)) \ + VNOT_V(REG_V30, (r + 3)) \ + VNOT_V(REG_V31, (r + 4)) \ + VAND_VV(REG_V30, REG_V30, (r + 4)) \ + VAND_VV(REG_V31, REG_V31, REG_V25) \ + VNOT_V(REG_V25, REG_V25) \ + VXOR_VV((r + 2), REG_V30, (r + 2)) \ + VAND_VV(REG_V25, REG_V25, REG_V26) \ + VXOR_VV((r + 3), REG_V31, (r + 3)) \ + VXOR_VV((r + 4), REG_V25, (r + 4)) + +#else + +#define COL_MIX(r, t) \ + VXOR_VV((r + 0), (r + 0), t) \ + VXOR_VV((r + 5), (r + 5), t) \ + VXOR_VV((r + 10), (r + 10), t) \ + VXOR_VV((r + 15), (r + 15), t) \ + VXOR_VV((r + 20), (r + 20), t) + +#define SWAP_ROTL(vr, vt0, vt1, sl) \ + VMV_V_V(vt0, vr) \ + VROR_VI(vr, (64 - sl), vt1) + +#define SWAP_ROTL_LO SWAP_ROTL +#define SWAP_ROTL_HI SWAP_ROTL + +#define ROW_MIX(r) \ + VMV_V_V(REG_V25, (r + 0)) \ + VMV_V_V(REG_V26, (r + 1)) \ + VANDN_VV(REG_V30, (r + 1), (r + 2)) \ + VANDN_VV(REG_V31, (r + 2), (r + 3)) \ + VXOR_VV((r + 0), REG_V30, (r + 0)) \ + VXOR_VV((r + 1), REG_V31, (r + 1)) \ + VANDN_VV(REG_V30, (r + 3), (r + 4)) \ + VANDN_VV(REG_V31, (r + 4), REG_V25) \ + VANDN_VV(REG_V25, REG_V25, REG_V26) \ + VXOR_VV((r + 2), REG_V30, (r + 2)) \ + VXOR_VV((r + 3), REG_V31, (r + 3)) \ + VXOR_VV((r + 4), REG_V25, (r + 4)) + +#endif + + +void BlockSha3(word64* s) +{ + __asm__ __volatile__ ( + /* 1 x 64-bit */ + VSETIVLI(REG_X0, 1, 0, 1, 0b011, 0b000) + + "li t2, 24\n\t" + "mv t0, %[r]\n\t" + "mv t1, %[s]\n\t" + VLSEG8E64_V(REG_V0, REG_T1) + "addi t1, %[s], 64\n\t" + VLSEG8E64_V(REG_V8, REG_T1) + "addi t1, %[s], 128\n\t" + VLSEG8E64_V(REG_V16, REG_T1) + "addi t1, %[s], 192\n\t" + VLSEG1E64_V(REG_V24, REG_T1) + + "\n" + "L_riscv_64_block_sha3_loop:\n\t" + + /* COLUMN MIX */ + VXOR_VV(REG_V25, REG_V0, REG_V5) + VXOR_VV(REG_V26, REG_V1, REG_V6) + VXOR_VV(REG_V27, REG_V2, REG_V7) + VXOR_VV(REG_V28, REG_V3, REG_V8) + VXOR_VV(REG_V29, REG_V4, REG_V9) + VXOR_VV(REG_V25, REG_V25, REG_V10) + VXOR_VV(REG_V26, REG_V26, REG_V11) + VXOR_VV(REG_V27, REG_V27, REG_V12) + VXOR_VV(REG_V28, REG_V28, REG_V13) + VXOR_VV(REG_V29, REG_V29, REG_V14) + VXOR_VV(REG_V25, REG_V25, REG_V15) + VXOR_VV(REG_V26, REG_V26, REG_V16) + VXOR_VV(REG_V27, REG_V27, REG_V17) + VXOR_VV(REG_V28, REG_V28, REG_V18) + VXOR_VV(REG_V29, REG_V29, REG_V19) + VXOR_VV(REG_V25, REG_V25, REG_V20) + VXOR_VV(REG_V26, REG_V26, REG_V21) + VXOR_VV(REG_V27, REG_V27, REG_V22) + VXOR_VV(REG_V28, REG_V28, REG_V23) + VXOR_VV(REG_V29, REG_V29, REG_V24) + +#ifndef WOLFSSL_RISCV_VECTOR_BASE_BIT_MANIPULATION + "li t1, 63\n\t" + COL_MIX(REG_V0, REG_V26, REG_V29) + COL_MIX(REG_V1, REG_V27, REG_V25) + COL_MIX(REG_V2, REG_V28, REG_V26) + COL_MIX(REG_V3, REG_V29, REG_V27) + COL_MIX(REG_V4, REG_V25, REG_V28) +#else + VROR_VI(REG_V30, 63, REG_V26) + VROR_VI(REG_V31, 63, REG_V27) + VXOR_VV(REG_V30, REG_V30, REG_V29) + VXOR_VV(REG_V31, REG_V31, REG_V25) + COL_MIX(REG_V0, REG_V30) + COL_MIX(REG_V1, REG_V31) + + VROR_VI(REG_V30, 63, REG_V28) + VROR_VI(REG_V31, 63, REG_V29) + VROR_VI(REG_V25, 63, REG_V25) + VXOR_VV(REG_V30, REG_V30, REG_V26) + VXOR_VV(REG_V31, REG_V31, REG_V27) + VXOR_VV(REG_V25, REG_V25, REG_V28) + COL_MIX(REG_V2, REG_V30) + COL_MIX(REG_V3, REG_V31) + COL_MIX(REG_V4, REG_V25) +#endif + /* SWAP ROTL */ + /* t1 = s[ 1] */ + VMV_V_V(REG_V26, REG_V1) + /* t0 = s[10], s[10] = t1 <<< 1 */ + SWAP_ROTL_LO(REG_V10, REG_V25, REG_V26, 1) + /* t1 = s[ 7], s[ 7] = t0 <<< 3 */ + SWAP_ROTL_LO(REG_V7 , REG_V26, REG_V25, 3) + /* t0 = s[11], s[11] = t1 <<< 6 */ + SWAP_ROTL_LO(REG_V11, REG_V25, REG_V26, 6) + /* t1 = s[17], s[17] = t0 <<< 10 */ + SWAP_ROTL_LO(REG_V17, REG_V26, REG_V25, 10) + /* t0 = s[18], s[18] = t1 <<< 15 */ + SWAP_ROTL_LO(REG_V18, REG_V25, REG_V26, 15) + /* t1 = s[ 3], s[ 3] = t0 <<< 21 */ + SWAP_ROTL_LO(REG_V3 , REG_V26, REG_V25, 21) + /* t0 = s[ 5], s[ 5] = t1 <<< 28 */ + SWAP_ROTL_LO(REG_V5 , REG_V25, REG_V26, 28) + /* t1 = s[16], s[16] = t0 <<< 36 */ + SWAP_ROTL_HI(REG_V16, REG_V26, REG_V25, 36) + /* t0 = s[ 8], s[ 8] = t1 <<< 45 */ + SWAP_ROTL_HI(REG_V8 , REG_V25, REG_V26, 45) + /* t1 = s[21], s[21] = t0 <<< 55 */ + SWAP_ROTL_HI(REG_V21, REG_V26, REG_V25, 55) + /* t0 = s[24], s[24] = t1 <<< 2 */ + SWAP_ROTL_LO(REG_V24, REG_V25, REG_V26, 2) + /* t1 = s[ 4], s[ 4] = t0 <<< 14 */ + SWAP_ROTL_LO(REG_V4 , REG_V26, REG_V25, 14) + /* t0 = s[15], s[15] = t1 <<< 27 */ + SWAP_ROTL_LO(REG_V15, REG_V25, REG_V26, 27) + /* t1 = s[23], s[23] = t0 <<< 41 */ + SWAP_ROTL_HI(REG_V23, REG_V26, REG_V25, 41) + /* t0 = s[19], s[19] = t1 <<< 56 */ + SWAP_ROTL_HI(REG_V19, REG_V25, REG_V26, 56) + /* t1 = s[13], s[13] = t0 <<< 8 */ + SWAP_ROTL_LO(REG_V13, REG_V26, REG_V25, 8) + /* t0 = s[12], s[12] = t1 <<< 25 */ + SWAP_ROTL_LO(REG_V12, REG_V25, REG_V26, 25) + /* t1 = s[ 2], s[ 2] = t0 <<< 43 */ + SWAP_ROTL_HI(REG_V2 , REG_V26, REG_V25, 43) + /* t0 = s[20], s[20] = t1 <<< 62 */ + SWAP_ROTL_HI(REG_V20, REG_V25, REG_V26, 62) + /* t1 = s[14], s[14] = t0 <<< 18 */ + SWAP_ROTL_LO(REG_V14, REG_V26, REG_V25, 18) + /* t0 = s[22], s[22] = t1 <<< 39 */ + SWAP_ROTL_HI(REG_V22, REG_V25, REG_V26, 39) + /* t1 = s[ 9], s[ 9] = t0 <<< 61 */ + SWAP_ROTL_HI(REG_V9 , REG_V26, REG_V25, 61) + /* t0 = s[ 6], s[ 6] = t1 <<< 20 */ + SWAP_ROTL_LO(REG_V6 , REG_V25, REG_V26, 20) + /* s[ 1] = t0 <<< 44 */ + "li t1, 44\n\t" + VSRL_VI(REG_V1, REG_V25, (64 - 44)) + VSLL_VX(REG_V25, REG_V25, REG_T1) + VOR_VV(REG_V1, REG_V1, REG_V25) + + /* ROW MIX */ + ROW_MIX(REG_V0) + ROW_MIX(REG_V5) + ROW_MIX(REG_V10) + ROW_MIX(REG_V15) + ROW_MIX(REG_V20) + + VL1RE64_V(REG_V25, REG_T0) + "addi t0, t0, 8\n\t" + "addi t2, t2, -1\n\t" + VXOR_VV(REG_V0, REG_V0, REG_V25) + "bnez t2, L_riscv_64_block_sha3_loop\n\t" + + "mv t1, %[s]\n\t" + VSSEG8E64_V(REG_V0, REG_T1) + "addi t1, %[s], 64\n\t" + VSSEG8E64_V(REG_V8, REG_T1) + "addi t1, %[s], 128\n\t" + VSSEG8E64_V(REG_V16, REG_T1) + "addi t1, %[s], 192\n\t" + VSSEG1E64_V(REG_V24, REG_T1) + + : + : [s] "r" (s), [r] "r" (hash_keccak_r) + : "memory", "t0", "t1", "t2" + ); +} + +#endif + +#endif + diff --git a/wolfcrypt/src/port/riscv/riscv-64-sha512.c b/wolfcrypt/src/port/riscv/riscv-64-sha512.c index b5b7f213d5..143dcc4a69 100644 --- a/wolfcrypt/src/port/riscv/riscv-64-sha512.c +++ b/wolfcrypt/src/port/riscv/riscv-64-sha512.c @@ -1216,7 +1216,7 @@ int wc_Sha512Transform(wc_Sha512* sha512, const unsigned char* data) ret = BAD_FUNC_ARG; } else { - ByteReverseWords(sha512->buffer, (word32*)data, WC_SHA512_BLOCK_SIZE); + ByteReverseWords((word32*)sha512->buffer, (word32*)data, WC_SHA512_BLOCK_SIZE); Sha512Transform(sha512, (byte*)sha512->buffer, 1); } diff --git a/wolfcrypt/src/port/st/stsafe.c b/wolfcrypt/src/port/st/stsafe.c index fad4e8ee5c..be291f0363 100644 --- a/wolfcrypt/src/port/st/stsafe.c +++ b/wolfcrypt/src/port/st/stsafe.c @@ -19,6 +19,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ +#ifdef HAVE_CONFIG_H + #include +#endif + #include #include #include diff --git a/wolfcrypt/src/port/ti/ti-aes.c b/wolfcrypt/src/port/ti/ti-aes.c index 8021710487..8dcd10abce 100644 --- a/wolfcrypt/src/port/ti/ti-aes.c +++ b/wolfcrypt/src/port/ti/ti-aes.c @@ -545,9 +545,9 @@ static int AesAuthEncrypt(Aes* aes, byte* out, const byte* in, word32 inSz, } exit: - if (in_save) XFREE(in_save, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (out_save) XFREE(out_save, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (authIn_save)XFREE(authIn_save, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(in_save, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(out_save, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(authIn_save, NULL, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -645,9 +645,9 @@ static int AesAuthDecrypt(Aes* aes, byte* out, const byte* in, word32 inSz, } exit: - if (in_save) XFREE(in_save, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (out_save) XFREE(out_save, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (authIn_save)XFREE(authIn_save, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(in_save, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(out_save, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(authIn_save, NULL, DYNAMIC_TYPE_TMP_BUFFER); return ret; } diff --git a/wolfcrypt/src/pwdbased.c b/wolfcrypt/src/pwdbased.c index 022d9f80c2..fb06dcef6e 100644 --- a/wolfcrypt/src/pwdbased.c +++ b/wolfcrypt/src/pwdbased.c @@ -218,7 +218,7 @@ int wc_PBKDF2_ex(byte* output, const byte* passwd, int pLen, const byte* salt, * length", ensure the returned bits for the derived master key are at a * minimum 14-bytes or 112-bits after stretching and strengthening * (iterations) */ - if (kLen < HMAC_FIPS_MIN_KEY/8) + if (kLen < HMAC_FIPS_MIN_KEY) return BAD_LENGTH_E; #endif @@ -588,16 +588,11 @@ int wc_PKCS12_PBKDF_ex(byte* output, const byte* passwd, int passLen, #ifdef WOLFSSL_SMALL_STACK out: - if (Ai != NULL) - XFREE(Ai, heap, DYNAMIC_TYPE_TMP_BUFFER); - if (B != NULL) - XFREE(B, heap, DYNAMIC_TYPE_TMP_BUFFER); - if (B1 != NULL) - XFREE(B1, heap, DYNAMIC_TYPE_TMP_BUFFER); - if (i1 != NULL) - XFREE(i1, heap, DYNAMIC_TYPE_TMP_BUFFER); - if (res != NULL) - XFREE(res, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(Ai, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(B, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(B1, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(i1, heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(res, heap, DYNAMIC_TYPE_TMP_BUFFER); #endif if (dynamic) @@ -859,12 +854,9 @@ int wc_scrypt(byte* output, const byte* passwd, int passLen, ret = wc_PBKDF2(output, passwd, passLen, blocks, (int)blocksSz, 1, dkLen, WC_SHA256); end: - if (blocks != NULL) - XFREE(blocks, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (v != NULL) - XFREE(v, NULL, DYNAMIC_TYPE_TMP_BUFFER); - if (y != NULL) - XFREE(y, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(blocks, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(v, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(y, NULL, DYNAMIC_TYPE_TMP_BUFFER); return ret; } diff --git a/wolfcrypt/src/random.c b/wolfcrypt/src/random.c index 822f069f7f..f1022edea4 100644 --- a/wolfcrypt/src/random.c +++ b/wolfcrypt/src/random.c @@ -4055,7 +4055,7 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz) { word32 i; for (i = 0; i < sz; i++ ) - output[i] = i; + output[i] = (byte)i; (void)os; diff --git a/wolfcrypt/src/rsa.c b/wolfcrypt/src/rsa.c index 71745bcbfd..ce5b677376 100644 --- a/wolfcrypt/src/rsa.c +++ b/wolfcrypt/src/rsa.c @@ -373,9 +373,7 @@ int wc_InitRsaHw(RsaKey* key) } /* check for existing mod buffer to avoid memory leak */ - if (key->mod != NULL) { - XFREE(key->mod, key->heap, DYNAMIC_TYPE_KEY); - } + XFREE(key->mod, key->heap, DYNAMIC_TYPE_KEY); key->pubExp = e; key->mod = m; @@ -2144,9 +2142,7 @@ static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out, #endif } - if (d != NULL) { - XFREE(d, key->heap, DYNAMIC_TYPE_PRIVATE_KEY); - } + XFREE(d, key->heap, DYNAMIC_TYPE_PRIVATE_KEY); } #endif break; @@ -2396,7 +2392,10 @@ static int RsaFunction_SP(const byte* in, word32 inLen, byte* out, #endif #ifndef RSA_LOW_MEM if ((mp_count_bits(&key->p) == 1024) && - (mp_count_bits(&key->q) == 1024)) { + (mp_count_bits(&key->q) == 1024) && + (mp_count_bits(&key->dP) > 0) && + (mp_count_bits(&key->dQ) > 0) && + (mp_count_bits(&key->u) > 0)) { return sp_RsaPrivate_2048(in, inLen, &key->d, &key->p, &key->q, &key->dP, &key->dQ, &key->u, &key->n, out, outLen); @@ -2427,7 +2426,10 @@ static int RsaFunction_SP(const byte* in, word32 inLen, byte* out, #endif #ifndef RSA_LOW_MEM if ((mp_count_bits(&key->p) == 1536) && - (mp_count_bits(&key->q) == 1536)) { + (mp_count_bits(&key->q) == 1536) && + (mp_count_bits(&key->dP) > 0) && + (mp_count_bits(&key->dQ) > 0) && + (mp_count_bits(&key->u) > 0)) { return sp_RsaPrivate_3072(in, inLen, &key->d, &key->p, &key->q, &key->dP, &key->dQ, &key->u, &key->n, out, outLen); @@ -2458,7 +2460,10 @@ static int RsaFunction_SP(const byte* in, word32 inLen, byte* out, #endif #ifndef RSA_LOW_MEM if ((mp_count_bits(&key->p) == 2048) && - (mp_count_bits(&key->q) == 2048)) { + (mp_count_bits(&key->q) == 2048) && + (mp_count_bits(&key->dP) > 0) && + (mp_count_bits(&key->dQ) > 0) && + (mp_count_bits(&key->u) > 0)) { return sp_RsaPrivate_4096(in, inLen, &key->d, &key->p, &key->q, &key->dP, &key->dQ, &key->u, &key->n, out, outLen); @@ -2555,7 +2560,13 @@ static int RsaFunctionPrivate(mp_int* tmp, RsaKey* key, WC_RNG* rng) } } #else - if (ret == 0) { + if (ret == 0 && (mp_iszero(&key->p) || mp_iszero(&key->q) || + mp_iszero(&key->dP) || mp_iszero(&key->dQ))) { + if (mp_exptmod(tmp, &key->d, &key->n, tmp) != MP_OKAY) { + ret = MP_EXPTMOD_E; + } + } + else if (ret == 0) { mp_int* tmpa = tmp; #if defined(WC_RSA_BLINDING) && !defined(WC_NO_RNG) mp_int* tmpb = rnd; @@ -2952,7 +2963,7 @@ int wc_RsaDirect(byte* in, word32 inLen, byte* out, word32* outSz, } /* if async pending then skip cleanup*/ - if (ret == WC_PENDING_E + if (ret == WC_NO_ERR_TRACE(WC_PENDING_E) #ifdef WC_RSA_NONBLOCK || ret == FP_WOULDBLOCK #endif @@ -3181,7 +3192,7 @@ static int wc_RsaFunction_ex(const byte* in, word32 inLen, byte* out, RESTORE_VECTOR_REGISTERS(); /* handle error */ - if (ret < 0 && ret != WC_PENDING_E + if (ret < 0 && ret != WC_NO_ERR_TRACE(WC_PENDING_E) #ifdef WC_RSA_NONBLOCK && ret != FP_WOULDBLOCK #endif @@ -3367,7 +3378,7 @@ static int RsaPublicEncryptEx(const byte* in, word32 inLen, byte* out, } /* if async pending then return and skip done cleanup below */ - if (ret == WC_PENDING_E + if (ret == WC_NO_ERR_TRACE(WC_PENDING_E) #ifdef WC_RSA_NONBLOCK || ret == FP_WOULDBLOCK #endif @@ -3583,9 +3594,11 @@ static int RsaPrivateDecryptEx(const byte* in, word32 inLen, byte* out, } #if !defined(WOLFSSL_RSA_VERIFY_ONLY) - ret = ctMaskSelInt(ctMaskLTE(ret, (int)outLen), ret, RSA_BUFFER_E); + ret = ctMaskSelInt(ctMaskLTE(ret, (int)outLen), ret, + WC_NO_ERR_TRACE(RSA_BUFFER_E)); #ifndef WOLFSSL_RSA_DECRYPT_TO_0_LEN - ret = ctMaskSelInt(ctMaskNotEq(ret, 0), ret, RSA_BUFFER_E); + ret = ctMaskSelInt(ctMaskNotEq(ret, 0), ret, + WC_NO_ERR_TRACE(RSA_BUFFER_E)); #endif #else if (outLen < (word32)ret) @@ -3620,7 +3633,7 @@ static int RsaPrivateDecryptEx(const byte* in, word32 inLen, byte* out, } /* if async pending then return and skip done cleanup below */ - if (ret == WC_PENDING_E + if (ret == WC_NO_ERR_TRACE(WC_PENDING_E) #ifdef WC_RSA_NONBLOCK || ret == FP_WOULDBLOCK #endif @@ -5085,16 +5098,13 @@ int wc_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng) #if !defined(WOLFSSL_CRYPTOCELL) && !defined(WOLFSSL_SE050) #ifdef WOLFSSL_SMALL_STACK - if (p) + if (key != NULL) { XFREE(p, key->heap, DYNAMIC_TYPE_RSA); - if (q) XFREE(q, key->heap, DYNAMIC_TYPE_RSA); - if (tmp1) XFREE(tmp1, key->heap, DYNAMIC_TYPE_RSA); - if (tmp2) XFREE(tmp2, key->heap, DYNAMIC_TYPE_RSA); - if (tmp3) XFREE(tmp3, key->heap, DYNAMIC_TYPE_RSA); + } #elif defined(WOLFSSL_CHECK_MEM_ZERO) mp_memzero_check(p); mp_memzero_check(q); @@ -5250,7 +5260,7 @@ int wc_RsaPrivateKeyDecodeRaw(const byte* n, word32 nSz, if (err == MP_OKAY) { key->type = RSA_PRIVATE; } - else { + else if (key != NULL) { mp_clear(&key->n); mp_clear(&key->e); mp_clear(&key->d); diff --git a/wolfcrypt/src/sha.c b/wolfcrypt/src/sha.c index bed2c4c0b6..44db748225 100644 --- a/wolfcrypt/src/sha.c +++ b/wolfcrypt/src/sha.c @@ -1058,10 +1058,8 @@ void wc_ShaFree(wc_Sha* sha) defined(WOLFSSL_RENESAS_TSIP_CRYPTONLY)) && \ !defined(NO_WOLFSSL_RENESAS_TSIP_CRYPT_HASH) || \ defined(WOLFSSL_RENESAS_RX64_HASH) - if (sha->msg != NULL) { - XFREE(sha->msg, sha->heap, DYNAMIC_TYPE_TMP_BUFFER); - sha->msg = NULL; - } + XFREE(sha->msg, sha->heap, DYNAMIC_TYPE_TMP_BUFFER); + sha->msg = NULL; #endif #ifdef WOLFSSL_IMXRT_DCP DCPShaFree(sha); diff --git a/wolfcrypt/src/sha256.c b/wolfcrypt/src/sha256.c index 180a6c044b..2ba9ca62d1 100644 --- a/wolfcrypt/src/sha256.c +++ b/wolfcrypt/src/sha256.c @@ -408,6 +408,10 @@ static int InitSha256(wc_Sha256* sha256) SHA256_SSE2, SHA256_C }; #ifndef WC_C_DYNAMIC_FALLBACK + /* note that all write access to this static variable must be idempotent, + * as arranged by Sha256_SetTransform(), else it will be susceptible to + * data races. + */ static enum sha_methods sha_method = SHA256_UNSET; #endif diff --git a/wolfcrypt/src/sha3.c b/wolfcrypt/src/sha3.c index 6346173199..2bba29bcef 100644 --- a/wolfcrypt/src/sha3.c +++ b/wolfcrypt/src/sha3.c @@ -62,8 +62,8 @@ } #endif -#if !defined(WOLFSSL_ARMASM) || (!defined(__arm__) && \ - !defined(WOLFSSL_ARMASM_CRYPTO_SHA3)) +#if (!defined(WOLFSSL_ARMASM) || (!defined(__arm__) && \ + !defined(WOLFSSL_ARMASM_CRYPTO_SHA3))) && !defined(WOLFSSL_RISCV_ASM) #ifdef USE_INTEL_SPEEDUP #include @@ -250,7 +250,7 @@ while (0) #ifndef USE_INTEL_SPEEDUP static #endif -void BlockSha3(word64 *s) +void BlockSha3(word64* s) { byte i, x, y; word64 t0, t1; @@ -541,7 +541,7 @@ while (0) #ifndef USE_INTEL_SPEEDUP static #endif -void BlockSha3(word64 *s) +void BlockSha3(word64* s) { word64 n[25]; word64 b[5]; @@ -563,7 +563,7 @@ void BlockSha3(word64 *s) } } #endif /* WOLFSSL_SHA3_SMALL */ -#endif /* !WOLFSSL_ARMASM */ +#endif /* !WOLFSSL_ARMASM && !WOLFSSL_RISCV_ASM */ static WC_INLINE word64 Load64Unaligned(const unsigned char *a) { diff --git a/wolfcrypt/src/sha512.c b/wolfcrypt/src/sha512.c index 203267163a..77313f7a2a 100644 --- a/wolfcrypt/src/sha512.c +++ b/wolfcrypt/src/sha512.c @@ -489,6 +489,10 @@ static int InitSha512_256(wc_Sha512* sha512) SHA512_AVX1_RORX, SHA512_AVX2_RORX, SHA512_C }; #ifndef WC_C_DYNAMIC_FALLBACK + /* note that all write access to this static variable must be idempotent, + * as arranged by Sha512_SetTransform(), else it will be susceptible to + * data races. + */ static enum sha_methods sha_method = SHA512_UNSET; #endif diff --git a/wolfcrypt/src/signature.c b/wolfcrypt/src/signature.c index 4c4f47ee8a..09ae526b61 100644 --- a/wolfcrypt/src/signature.c +++ b/wolfcrypt/src/signature.c @@ -80,7 +80,7 @@ static int wc_SignatureDerEncode(enum wc_HashType hash_type, byte* hash_data, int wc_SignatureGetSize(enum wc_SignatureType sig_type, const void* key, word32 key_len) { - int sig_len = BAD_FUNC_ARG; + int sig_len = WC_NO_ERR_TRACE(BAD_FUNC_ARG); /* Suppress possible unused args if all signature types are disabled */ (void)key; diff --git a/wolfcrypt/src/sp_arm32.c b/wolfcrypt/src/sp_arm32.c index 73f4103d4f..34e771b6ea 100644 --- a/wolfcrypt/src/sp_arm32.c +++ b/wolfcrypt/src/sp_arm32.c @@ -12027,8 +12027,7 @@ static int sp_2048_mod_exp_32(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -12196,8 +12195,7 @@ static int sp_2048_mod_exp_32(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -16788,8 +16786,7 @@ static int sp_2048_mod_exp_64(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -16940,8 +16937,7 @@ static int sp_2048_mod_exp_64(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -17104,8 +17100,7 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -18122,8 +18117,7 @@ static int sp_2048_mod_exp_2_64(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -37404,8 +37398,7 @@ static int sp_3072_mod_exp_48(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -37573,8 +37566,7 @@ static int sp_3072_mod_exp_48(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -44035,8 +44027,7 @@ static int sp_3072_mod_exp_96(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -44187,8 +44178,7 @@ static int sp_3072_mod_exp_96(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -44351,8 +44341,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -45617,8 +45606,7 @@ static int sp_3072_mod_exp_2_96(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -59454,8 +59442,7 @@ static int sp_4096_mod_exp_128(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -59606,8 +59593,7 @@ static int sp_4096_mod_exp_128(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -59770,8 +59756,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -61284,8 +61269,7 @@ static int sp_4096_mod_exp_2_128(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -73563,15 +73547,15 @@ static int sp_256_ecc_mulmod_fast_8(sp_point_256* r, const sp_point_256* g, cons #endif } #ifndef WC_NO_CACHE_RESISTANT - #ifdef WOLFSSL_SP_SMALL_STACK +#ifdef WOLFSSL_SP_SMALL_STACK if (p != NULL) +#endif + { + ForceZero(p, sizeof(sp_point_256)); + #ifdef WOLFSSL_SP_SMALL_STACK + XFREE(p, heap, DYNAMIC_TYPE_ECC); #endif - { - ForceZero(p, sizeof(sp_point_256)); - #ifdef WOLFSSL_SP_SMALL_STACK - XFREE(p, heap, DYNAMIC_TYPE_ECC); - #endif - } + } #endif /* !WC_NO_CACHE_RESISTANT */ #ifdef WOLFSSL_SP_SMALL_STACK if (t != NULL) @@ -73875,8 +73859,7 @@ static int sp_256_gen_stripe_table_8(const sp_point_256* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -74040,10 +74023,8 @@ static int sp_256_ecc_mulmod_stripe_8(sp_point_256* r, const sp_point_256* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -74299,8 +74280,7 @@ static int sp_256_gen_stripe_table_8(const sp_point_256* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -74464,10 +74444,8 @@ static int sp_256_ecc_mulmod_stripe_8(sp_point_256* r, const sp_point_256* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -74685,10 +74663,8 @@ int sp_ecc_mulmod_256(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -74765,10 +74741,8 @@ int sp_ecc_mulmod_add_256(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -76235,10 +76209,8 @@ int sp_ecc_mulmod_base_256(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -76313,10 +76285,8 @@ int sp_ecc_mulmod_base_add_256(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -76399,6 +76369,7 @@ static void sp_256_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_256_ecc_gen_k_8(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[32]; @@ -76415,6 +76386,11 @@ static int sp_256_ecc_gen_k_8(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -76493,12 +76469,9 @@ int sp_ecc_make_key_256(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -76656,10 +76629,8 @@ int sp_ecc_secret_gen_256(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -78976,10 +78947,8 @@ int sp_ecc_verify_256(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -79186,8 +79155,7 @@ static int sp_256_ecc_is_point_8(const sp_point_256* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -79226,8 +79194,7 @@ int sp_ecc_is_point_256(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -79335,10 +79302,8 @@ int sp_ecc_check_key_256(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -79417,10 +79382,8 @@ int sp_ecc_proj_add_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -79485,10 +79448,8 @@ int sp_ecc_proj_dbl_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -79549,10 +79510,8 @@ int sp_ecc_map_256(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -79618,8 +79577,7 @@ static int sp_256_mont_sqrt_8(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_ECC); + XFREE(t1, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -79684,8 +79642,7 @@ int sp_ecc_uncompress_256(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -88876,8 +88833,7 @@ static int sp_384_mod_mul_norm_12(sp_digit* r, const sp_digit* a, const sp_digit } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -91316,15 +91272,15 @@ static int sp_384_ecc_mulmod_fast_12(sp_point_384* r, const sp_point_384* g, con #endif } #ifndef WC_NO_CACHE_RESISTANT - #ifdef WOLFSSL_SP_SMALL_STACK +#ifdef WOLFSSL_SP_SMALL_STACK if (p != NULL) +#endif + { + ForceZero(p, sizeof(sp_point_384)); + #ifdef WOLFSSL_SP_SMALL_STACK + XFREE(p, heap, DYNAMIC_TYPE_ECC); #endif - { - ForceZero(p, sizeof(sp_point_384)); - #ifdef WOLFSSL_SP_SMALL_STACK - XFREE(p, heap, DYNAMIC_TYPE_ECC); - #endif - } + } #endif /* !WC_NO_CACHE_RESISTANT */ #ifdef WOLFSSL_SP_SMALL_STACK if (t != NULL) @@ -91628,8 +91584,7 @@ static int sp_384_gen_stripe_table_12(const sp_point_384* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -91809,10 +91764,8 @@ static int sp_384_ecc_mulmod_stripe_12(sp_point_384* r, const sp_point_384* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -92068,8 +92021,7 @@ static int sp_384_gen_stripe_table_12(const sp_point_384* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -92249,10 +92201,8 @@ static int sp_384_ecc_mulmod_stripe_12(sp_point_384* r, const sp_point_384* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -92470,10 +92420,8 @@ int sp_ecc_mulmod_384(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -92550,10 +92498,8 @@ int sp_ecc_mulmod_add_384(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -94020,10 +93966,8 @@ int sp_ecc_mulmod_base_384(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -94098,10 +94042,8 @@ int sp_ecc_mulmod_base_add_384(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -94190,6 +94132,7 @@ static void sp_384_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_384_ecc_gen_k_12(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[48]; @@ -94206,6 +94149,11 @@ static int sp_384_ecc_gen_k_12(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -94284,12 +94232,9 @@ int sp_ecc_make_key_384(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -94447,10 +94392,8 @@ int sp_ecc_secret_gen_384(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -97060,10 +97003,8 @@ int sp_ecc_verify_384(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -97270,8 +97211,7 @@ static int sp_384_ecc_is_point_12(const sp_point_384* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -97310,8 +97250,7 @@ int sp_ecc_is_point_384(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -97419,10 +97358,8 @@ int sp_ecc_check_key_384(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -97501,10 +97438,8 @@ int sp_ecc_proj_add_point_384(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -97569,10 +97504,8 @@ int sp_ecc_proj_dbl_point_384(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -97633,10 +97566,8 @@ int sp_ecc_map_384(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -97732,8 +97663,7 @@ static int sp_384_mont_sqrt_12(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_ECC); + XFREE(t1, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -97798,8 +97728,7 @@ int sp_ecc_uncompress_384(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -118499,15 +118428,15 @@ static int sp_521_ecc_mulmod_fast_17(sp_point_521* r, const sp_point_521* g, con #endif } #ifndef WC_NO_CACHE_RESISTANT - #ifdef WOLFSSL_SP_SMALL_STACK +#ifdef WOLFSSL_SP_SMALL_STACK if (p != NULL) +#endif + { + ForceZero(p, sizeof(sp_point_521)); + #ifdef WOLFSSL_SP_SMALL_STACK + XFREE(p, heap, DYNAMIC_TYPE_ECC); #endif - { - ForceZero(p, sizeof(sp_point_521)); - #ifdef WOLFSSL_SP_SMALL_STACK - XFREE(p, heap, DYNAMIC_TYPE_ECC); - #endif - } + } #endif /* !WC_NO_CACHE_RESISTANT */ #ifdef WOLFSSL_SP_SMALL_STACK if (t != NULL) @@ -118811,8 +118740,7 @@ static int sp_521_gen_stripe_table_17(const sp_point_521* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -119012,10 +118940,8 @@ static int sp_521_ecc_mulmod_stripe_17(sp_point_521* r, const sp_point_521* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -119271,8 +119197,7 @@ static int sp_521_gen_stripe_table_17(const sp_point_521* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -119472,10 +119397,8 @@ static int sp_521_ecc_mulmod_stripe_17(sp_point_521* r, const sp_point_521* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -119693,10 +119616,8 @@ int sp_ecc_mulmod_521(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -119773,10 +119694,8 @@ int sp_ecc_mulmod_add_521(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -121787,10 +121706,8 @@ int sp_ecc_mulmod_base_521(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -121865,10 +121782,8 @@ int sp_ecc_mulmod_base_add_521(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -121966,6 +121881,7 @@ static void sp_521_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_521_ecc_gen_k_17(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[66]; @@ -121983,6 +121899,11 @@ static int sp_521_ecc_gen_k_17(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -122061,12 +121982,9 @@ int sp_ecc_make_key_521(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -122226,10 +122144,8 @@ int sp_ecc_secret_gen_521(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -126015,10 +125931,8 @@ int sp_ecc_verify_521(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -126228,8 +126142,7 @@ static int sp_521_ecc_is_point_17(const sp_point_521* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -126268,8 +126181,7 @@ int sp_ecc_is_point_521(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -126377,10 +126289,8 @@ int sp_ecc_check_key_521(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -126459,10 +126369,8 @@ int sp_ecc_proj_add_point_521(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -126527,10 +126435,8 @@ int sp_ecc_proj_dbl_point_521(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -126591,10 +126497,8 @@ int sp_ecc_map_521(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -126644,8 +126548,7 @@ static int sp_521_mont_sqrt_17(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -126710,8 +126613,7 @@ int sp_ecc_uncompress_521(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -144661,16 +144563,16 @@ static void sp_1024_point_free_32(sp_point_1024* p, int clear, void* heap) { #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) -/* If valid pointer then clear point data if requested and free data. */ + /* If valid pointer then clear point data if requested and free data. */ if (p != NULL) { - if (clear != 0) { + if (clear) { XMEMSET(p, 0, sizeof(*p)); } XFREE(p, heap, DYNAMIC_TYPE_ECC); } #else -/* Clear point data if requested. */ - if ((p != NULL) && (clear != 0)) { + /* Clear point data if requested. */ + if ((p != NULL) && clear) { XMEMSET(p, 0, sizeof(*p)); } #endif @@ -148604,8 +148506,7 @@ static int sp_1024_gen_stripe_table_32(const sp_point_1024* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -148704,10 +148605,8 @@ static int sp_1024_ecc_mulmod_stripe_32(sp_point_1024* r, const sp_point_1024* g } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -148963,8 +148862,7 @@ static int sp_1024_gen_stripe_table_32(const sp_point_1024* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -149063,10 +148961,8 @@ static int sp_1024_ecc_mulmod_stripe_32(sp_point_1024* r, const sp_point_1024* g } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -149284,10 +149180,8 @@ int sp_ecc_mulmod_1024(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -152922,10 +152816,8 @@ int sp_ecc_mulmod_base_1024(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -153000,10 +152892,8 @@ int sp_ecc_mulmod_base_add_1024(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -153068,10 +152958,8 @@ int sp_ecc_gen_table_1024(const ecc_point* gm, byte* table, word32* len, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -153164,10 +153052,8 @@ int sp_ecc_mulmod_table_1024(const mp_int* km, const ecc_point* gm, byte* table, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -153314,9 +153200,7 @@ int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -155212,9 +155096,7 @@ int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -155582,9 +155464,7 @@ int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_32(c, 1, NULL); sp_1024_point_free_32(q, 1, NULL); @@ -156009,9 +155889,7 @@ int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_32(c, 1, NULL); sp_1024_point_free_32(q, 1, NULL); @@ -156377,9 +156255,7 @@ int sp_Pairing_gen_precomp_1024(const ecc_point* pm, byte* table, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_32(neg, 1, NULL); sp_1024_point_free_32(c, 1, NULL); @@ -156572,9 +156448,7 @@ int sp_Pairing_precomp_1024(const ecc_point* pm, const ecc_point* qm, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_32(c, 1, NULL); sp_1024_point_free_32(q, 1, NULL); @@ -156675,8 +156549,7 @@ static int sp_1024_ecc_is_point_32(const sp_point_1024* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -156715,8 +156588,7 @@ int sp_ecc_is_point_1024(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -156824,10 +156696,8 @@ int sp_ecc_check_key_1024(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; diff --git a/wolfcrypt/src/sp_arm64.c b/wolfcrypt/src/sp_arm64.c index c51a730e04..196146c163 100644 --- a/wolfcrypt/src/sp_arm64.c +++ b/wolfcrypt/src/sp_arm64.c @@ -4169,8 +4169,7 @@ static int sp_2048_mod_exp_16(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -4338,8 +4337,7 @@ static int sp_2048_mod_exp_16(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -5795,8 +5793,7 @@ static int sp_2048_mod_exp_32(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -5997,8 +5994,7 @@ static int sp_2048_mod_exp_32(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -6161,8 +6157,7 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -6842,8 +6837,7 @@ static int sp_2048_mod_exp_2_32(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -13360,8 +13354,7 @@ static int sp_3072_mod_exp_24(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -13529,8 +13522,7 @@ static int sp_3072_mod_exp_24(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -15352,8 +15344,7 @@ static int sp_3072_mod_exp_48(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -15504,8 +15495,7 @@ static int sp_3072_mod_exp_48(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -15668,8 +15658,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -16445,8 +16434,7 @@ static int sp_3072_mod_exp_2_48(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -20463,8 +20451,7 @@ static int sp_4096_mod_exp_64(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -20615,8 +20602,7 @@ static int sp_4096_mod_exp_64(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -20779,8 +20765,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -21652,8 +21637,7 @@ static int sp_4096_mod_exp_2_64(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -24486,10 +24470,8 @@ static int sp_256_ecc_mulmod_win_add_sub_4(sp_point_256* r, const sp_point_256* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -24731,8 +24713,7 @@ static int sp_256_gen_stripe_table_4(const sp_point_256* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -24902,10 +24883,8 @@ static int sp_256_ecc_mulmod_stripe_4(sp_point_256* r, const sp_point_256* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -25164,8 +25143,7 @@ static int sp_256_gen_stripe_table_4(const sp_point_256* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -25335,10 +25313,8 @@ static int sp_256_ecc_mulmod_stripe_4(sp_point_256* r, const sp_point_256* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -25557,10 +25533,8 @@ int sp_ecc_mulmod_256(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -25637,10 +25611,8 @@ int sp_ecc_mulmod_add_256(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -39494,8 +39466,7 @@ static int sp_256_ecc_mulmod_add_only_4(sp_point_256* r, const sp_point_256* g, #endif } #ifdef WOLFSSL_SP_SMALL_STACK - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -39562,10 +39533,8 @@ int sp_ecc_mulmod_base_256(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -39640,10 +39609,8 @@ int sp_ecc_mulmod_base_add_256(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -39796,6 +39763,7 @@ static void sp_256_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_256_ecc_gen_k_4(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[32]; @@ -39812,6 +39780,11 @@ static int sp_256_ecc_gen_k_4(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -39890,12 +39863,9 @@ int sp_ecc_make_key_256(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -40059,10 +40029,8 @@ int sp_ecc_secret_gen_256(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -41930,10 +41898,8 @@ int sp_ecc_verify_256(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -42184,8 +42150,7 @@ static int sp_256_ecc_is_point_4(const sp_point_256* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -42224,8 +42189,7 @@ int sp_ecc_is_point_256(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42333,10 +42297,8 @@ int sp_ecc_check_key_256(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -42415,10 +42377,8 @@ int sp_ecc_proj_add_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42483,10 +42443,8 @@ int sp_ecc_proj_dbl_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42547,10 +42505,8 @@ int sp_ecc_map_256(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42616,8 +42572,7 @@ static int sp_256_mont_sqrt_4(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_ECC); + XFREE(t1, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42682,8 +42637,7 @@ int sp_ecc_uncompress_256(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -43465,8 +43419,7 @@ static int sp_384_mod_mul_norm_6(sp_digit* r, const sp_digit* a, const sp_digit* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -45483,10 +45436,8 @@ static int sp_384_ecc_mulmod_win_add_sub_6(sp_point_384* r, const sp_point_384* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -45688,8 +45639,7 @@ static int sp_384_gen_stripe_table_6(const sp_point_384* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -45859,10 +45809,8 @@ static int sp_384_ecc_mulmod_stripe_6(sp_point_384* r, const sp_point_384* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -46121,8 +46069,7 @@ static int sp_384_gen_stripe_table_6(const sp_point_384* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -46292,10 +46239,8 @@ static int sp_384_ecc_mulmod_stripe_6(sp_point_384* r, const sp_point_384* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -46514,10 +46459,8 @@ int sp_ecc_mulmod_384(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -46594,10 +46537,8 @@ int sp_ecc_mulmod_add_384(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -66265,8 +66206,7 @@ static int sp_384_ecc_mulmod_add_only_6(sp_point_384* r, const sp_point_384* g, #endif } #ifdef WOLFSSL_SP_SMALL_STACK - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -66333,10 +66273,8 @@ int sp_ecc_mulmod_base_384(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -66411,10 +66349,8 @@ int sp_ecc_mulmod_base_add_384(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -66571,6 +66507,7 @@ static void sp_384_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_384_ecc_gen_k_6(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[48]; @@ -66587,6 +66524,11 @@ static int sp_384_ecc_gen_k_6(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -66665,12 +66607,9 @@ int sp_ecc_make_key_384(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -66834,10 +66773,8 @@ int sp_ecc_secret_gen_384(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -68062,10 +67999,8 @@ int sp_ecc_verify_384(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -68272,8 +68207,7 @@ static int sp_384_ecc_is_point_6(const sp_point_384* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -68312,8 +68246,7 @@ int sp_ecc_is_point_384(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -68421,10 +68354,8 @@ int sp_ecc_check_key_384(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -68503,10 +68434,8 @@ int sp_ecc_proj_add_point_384(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -68571,10 +68500,8 @@ int sp_ecc_proj_dbl_point_384(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -68635,10 +68562,8 @@ int sp_ecc_map_384(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -68734,8 +68659,7 @@ static int sp_384_mont_sqrt_6(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_ECC); + XFREE(t1, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -68800,8 +68724,7 @@ int sp_ecc_uncompress_384(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -73897,10 +73820,8 @@ static int sp_521_ecc_mulmod_win_add_sub_9(sp_point_521* r, const sp_point_521* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -74102,8 +74023,7 @@ static int sp_521_gen_stripe_table_9(const sp_point_521* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -74291,10 +74211,8 @@ static int sp_521_ecc_mulmod_stripe_9(sp_point_521* r, const sp_point_521* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -74553,8 +74471,7 @@ static int sp_521_gen_stripe_table_9(const sp_point_521* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -74742,10 +74659,8 @@ static int sp_521_ecc_mulmod_stripe_9(sp_point_521* r, const sp_point_521* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -74964,10 +74879,8 @@ int sp_ecc_mulmod_521(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -75044,10 +74957,8 @@ int sp_ecc_mulmod_add_521(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -111429,8 +111340,7 @@ static int sp_521_ecc_mulmod_add_only_9(sp_point_521* r, const sp_point_521* g, #endif } #ifdef WOLFSSL_SP_SMALL_STACK - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -111497,10 +111407,8 @@ int sp_ecc_mulmod_base_521(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -111575,10 +111483,8 @@ int sp_ecc_mulmod_base_add_521(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -111743,6 +111649,7 @@ static void sp_521_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_521_ecc_gen_k_9(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[66]; @@ -111760,6 +111667,11 @@ static int sp_521_ecc_gen_k_9(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -111838,12 +111750,9 @@ int sp_ecc_make_key_521(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -112009,10 +111918,8 @@ int sp_ecc_secret_gen_521(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -113011,10 +112918,8 @@ int sp_ecc_verify_521(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -113224,8 +113129,7 @@ static int sp_521_ecc_is_point_9(const sp_point_521* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -113264,8 +113168,7 @@ int sp_ecc_is_point_521(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -113373,10 +113276,8 @@ int sp_ecc_check_key_521(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -113455,10 +113356,8 @@ int sp_ecc_proj_add_point_521(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -113523,10 +113422,8 @@ int sp_ecc_proj_dbl_point_521(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -113587,10 +113484,8 @@ int sp_ecc_map_521(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -113640,8 +113535,7 @@ static int sp_521_mont_sqrt_9(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -113706,8 +113600,7 @@ int sp_ecc_uncompress_521(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -115642,16 +115535,16 @@ static void sp_1024_point_free_16(sp_point_1024* p, int clear, void* heap) { #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) -/* If valid pointer then clear point data if requested and free data. */ + /* If valid pointer then clear point data if requested and free data. */ if (p != NULL) { - if (clear != 0) { + if (clear) { XMEMSET(p, 0, sizeof(*p)); } XFREE(p, heap, DYNAMIC_TYPE_ECC); } #else -/* Clear point data if requested. */ - if ((p != NULL) && (clear != 0)) { + /* Clear point data if requested. */ + if ((p != NULL) && clear) { XMEMSET(p, 0, sizeof(*p)); } #endif @@ -117918,10 +117811,8 @@ static int sp_1024_ecc_mulmod_win_add_sub_16(sp_point_1024* r, const sp_point_10 } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -118122,8 +118013,7 @@ static int sp_1024_gen_stripe_table_16(const sp_point_1024* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -118222,10 +118112,8 @@ static int sp_1024_ecc_mulmod_stripe_16(sp_point_1024* r, const sp_point_1024* g } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -118442,10 +118330,8 @@ int sp_ecc_mulmod_1024(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -121843,10 +121729,8 @@ int sp_ecc_mulmod_base_1024(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -121921,10 +121805,8 @@ int sp_ecc_mulmod_base_add_1024(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -121989,10 +121871,8 @@ int sp_ecc_gen_table_1024(const ecc_point* gm, byte* table, word32* len, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -122085,10 +121965,8 @@ int sp_ecc_mulmod_table_1024(const mp_int* km, const ecc_point* gm, byte* table, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -122235,9 +122113,7 @@ int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -123877,9 +123753,7 @@ int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -124247,9 +124121,7 @@ int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_16(c, 1, NULL); sp_1024_point_free_16(q, 1, NULL); @@ -124674,9 +124546,7 @@ int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_16(c, 1, NULL); sp_1024_point_free_16(q, 1, NULL); @@ -125042,9 +124912,7 @@ int sp_Pairing_gen_precomp_1024(const ecc_point* pm, byte* table, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_16(neg, 1, NULL); sp_1024_point_free_16(c, 1, NULL); @@ -125237,9 +125105,7 @@ int sp_Pairing_precomp_1024(const ecc_point* pm, const ecc_point* qm, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_16(c, 1, NULL); sp_1024_point_free_16(q, 1, NULL); @@ -125415,8 +125281,7 @@ static int sp_1024_ecc_is_point_16(const sp_point_1024* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -125455,8 +125320,7 @@ int sp_ecc_is_point_1024(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -125564,10 +125428,8 @@ int sp_ecc_check_key_1024(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; diff --git a/wolfcrypt/src/sp_armthumb.c b/wolfcrypt/src/sp_armthumb.c index f10b944e13..48831471d6 100644 --- a/wolfcrypt/src/sp_armthumb.c +++ b/wolfcrypt/src/sp_armthumb.c @@ -24139,8 +24139,7 @@ static int sp_2048_mod_exp_32(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -24308,8 +24307,7 @@ static int sp_2048_mod_exp_32(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -27720,8 +27718,7 @@ static int sp_2048_mod_exp_64(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -27872,8 +27869,7 @@ static int sp_2048_mod_exp_64(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -28036,8 +28032,7 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -30137,8 +30132,7 @@ static int sp_2048_mod_exp_2_64(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -75601,8 +75595,7 @@ static int sp_3072_mod_exp_48(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -75770,8 +75763,7 @@ static int sp_3072_mod_exp_48(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -80013,8 +80005,7 @@ static int sp_3072_mod_exp_96(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -80165,8 +80156,7 @@ static int sp_3072_mod_exp_96(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -80329,8 +80319,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -83228,8 +83217,7 @@ static int sp_3072_mod_exp_2_96(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -92562,8 +92550,7 @@ static int sp_4096_mod_exp_128(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -92714,8 +92701,7 @@ static int sp_4096_mod_exp_128(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -92878,8 +92864,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -96570,8 +96555,7 @@ static int sp_4096_mod_exp_2_128(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -101065,15 +101049,15 @@ static int sp_256_ecc_mulmod_fast_8(sp_point_256* r, const sp_point_256* g, cons #endif } #ifndef WC_NO_CACHE_RESISTANT - #ifdef WOLFSSL_SP_SMALL_STACK +#ifdef WOLFSSL_SP_SMALL_STACK if (p != NULL) +#endif + { + ForceZero(p, sizeof(sp_point_256)); + #ifdef WOLFSSL_SP_SMALL_STACK + XFREE(p, heap, DYNAMIC_TYPE_ECC); #endif - { - ForceZero(p, sizeof(sp_point_256)); - #ifdef WOLFSSL_SP_SMALL_STACK - XFREE(p, heap, DYNAMIC_TYPE_ECC); - #endif - } + } #endif /* !WC_NO_CACHE_RESISTANT */ #ifdef WOLFSSL_SP_SMALL_STACK if (t != NULL) @@ -101377,8 +101361,7 @@ static int sp_256_gen_stripe_table_8(const sp_point_256* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -101542,10 +101525,8 @@ static int sp_256_ecc_mulmod_stripe_8(sp_point_256* r, const sp_point_256* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -101801,8 +101782,7 @@ static int sp_256_gen_stripe_table_8(const sp_point_256* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -101966,10 +101946,8 @@ static int sp_256_ecc_mulmod_stripe_8(sp_point_256* r, const sp_point_256* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -102187,10 +102165,8 @@ int sp_ecc_mulmod_256(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -102267,10 +102243,8 @@ int sp_ecc_mulmod_add_256(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -103737,10 +103711,8 @@ int sp_ecc_mulmod_base_256(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -103815,10 +103787,8 @@ int sp_ecc_mulmod_base_add_256(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -103959,6 +103929,7 @@ static void sp_256_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_256_ecc_gen_k_8(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[32]; @@ -103975,6 +103946,11 @@ static int sp_256_ecc_gen_k_8(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -104053,12 +104029,9 @@ int sp_ecc_make_key_256(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -104216,10 +104189,8 @@ int sp_ecc_secret_gen_256(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -107521,10 +107492,8 @@ int sp_ecc_verify_256(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -107731,8 +107700,7 @@ static int sp_256_ecc_is_point_8(const sp_point_256* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -107771,8 +107739,7 @@ int sp_ecc_is_point_256(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -107880,10 +107847,8 @@ int sp_ecc_check_key_256(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -107962,10 +107927,8 @@ int sp_ecc_proj_add_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -108030,10 +107993,8 @@ int sp_ecc_proj_dbl_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -108094,10 +108055,8 @@ int sp_ecc_map_256(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -108163,8 +108122,7 @@ static int sp_256_mont_sqrt_8(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_ECC); + XFREE(t1, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -108229,8 +108187,7 @@ int sp_ecc_uncompress_256(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -109286,8 +109243,7 @@ static int sp_384_mod_mul_norm_12(sp_digit* r, const sp_digit* a, const sp_digit } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -111925,15 +111881,15 @@ static int sp_384_ecc_mulmod_fast_12(sp_point_384* r, const sp_point_384* g, con #endif } #ifndef WC_NO_CACHE_RESISTANT - #ifdef WOLFSSL_SP_SMALL_STACK +#ifdef WOLFSSL_SP_SMALL_STACK if (p != NULL) +#endif + { + ForceZero(p, sizeof(sp_point_384)); + #ifdef WOLFSSL_SP_SMALL_STACK + XFREE(p, heap, DYNAMIC_TYPE_ECC); #endif - { - ForceZero(p, sizeof(sp_point_384)); - #ifdef WOLFSSL_SP_SMALL_STACK - XFREE(p, heap, DYNAMIC_TYPE_ECC); - #endif - } + } #endif /* !WC_NO_CACHE_RESISTANT */ #ifdef WOLFSSL_SP_SMALL_STACK if (t != NULL) @@ -112237,8 +112193,7 @@ static int sp_384_gen_stripe_table_12(const sp_point_384* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -112418,10 +112373,8 @@ static int sp_384_ecc_mulmod_stripe_12(sp_point_384* r, const sp_point_384* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -112677,8 +112630,7 @@ static int sp_384_gen_stripe_table_12(const sp_point_384* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -112858,10 +112810,8 @@ static int sp_384_ecc_mulmod_stripe_12(sp_point_384* r, const sp_point_384* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -113079,10 +113029,8 @@ int sp_ecc_mulmod_384(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -113159,10 +113107,8 @@ int sp_ecc_mulmod_add_384(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -114629,10 +114575,8 @@ int sp_ecc_mulmod_base_384(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -114707,10 +114651,8 @@ int sp_ecc_mulmod_base_add_384(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -114887,6 +114829,7 @@ static void sp_384_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_384_ecc_gen_k_12(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[48]; @@ -114903,6 +114846,11 @@ static int sp_384_ecc_gen_k_12(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -114981,12 +114929,9 @@ int sp_ecc_make_key_384(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -115144,10 +115089,8 @@ int sp_ecc_secret_gen_384(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -118725,10 +118668,8 @@ int sp_ecc_verify_384(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -118935,8 +118876,7 @@ static int sp_384_ecc_is_point_12(const sp_point_384* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -118975,8 +118915,7 @@ int sp_ecc_is_point_384(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -119084,10 +119023,8 @@ int sp_ecc_check_key_384(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -119166,10 +119103,8 @@ int sp_ecc_proj_add_point_384(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -119234,10 +119169,8 @@ int sp_ecc_proj_dbl_point_384(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -119298,10 +119231,8 @@ int sp_ecc_map_384(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -119397,8 +119328,7 @@ static int sp_384_mont_sqrt_12(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_ECC); + XFREE(t1, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -119463,8 +119393,7 @@ int sp_ecc_uncompress_384(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -125556,15 +125485,15 @@ static int sp_521_ecc_mulmod_fast_17(sp_point_521* r, const sp_point_521* g, con #endif } #ifndef WC_NO_CACHE_RESISTANT - #ifdef WOLFSSL_SP_SMALL_STACK +#ifdef WOLFSSL_SP_SMALL_STACK if (p != NULL) +#endif + { + ForceZero(p, sizeof(sp_point_521)); + #ifdef WOLFSSL_SP_SMALL_STACK + XFREE(p, heap, DYNAMIC_TYPE_ECC); #endif - { - ForceZero(p, sizeof(sp_point_521)); - #ifdef WOLFSSL_SP_SMALL_STACK - XFREE(p, heap, DYNAMIC_TYPE_ECC); - #endif - } + } #endif /* !WC_NO_CACHE_RESISTANT */ #ifdef WOLFSSL_SP_SMALL_STACK if (t != NULL) @@ -125868,8 +125797,7 @@ static int sp_521_gen_stripe_table_17(const sp_point_521* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -126069,10 +125997,8 @@ static int sp_521_ecc_mulmod_stripe_17(sp_point_521* r, const sp_point_521* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -126328,8 +126254,7 @@ static int sp_521_gen_stripe_table_17(const sp_point_521* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -126529,10 +126454,8 @@ static int sp_521_ecc_mulmod_stripe_17(sp_point_521* r, const sp_point_521* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -126750,10 +126673,8 @@ int sp_ecc_mulmod_521(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -126830,10 +126751,8 @@ int sp_ecc_mulmod_add_521(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -128844,10 +128763,8 @@ int sp_ecc_mulmod_base_521(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -128922,10 +128839,8 @@ int sp_ecc_mulmod_base_add_521(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -129147,6 +129062,7 @@ static void sp_521_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_521_ecc_gen_k_17(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[66]; @@ -129164,6 +129080,11 @@ static int sp_521_ecc_gen_k_17(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -129242,12 +129163,9 @@ int sp_ecc_make_key_521(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -129407,10 +129325,8 @@ int sp_ecc_secret_gen_521(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -135672,10 +135588,8 @@ int sp_ecc_verify_521(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -135885,8 +135799,7 @@ static int sp_521_ecc_is_point_17(const sp_point_521* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -135925,8 +135838,7 @@ int sp_ecc_is_point_521(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -136034,10 +135946,8 @@ int sp_ecc_check_key_521(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -136116,10 +136026,8 @@ int sp_ecc_proj_add_point_521(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -136184,10 +136092,8 @@ int sp_ecc_proj_dbl_point_521(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -136248,10 +136154,8 @@ int sp_ecc_map_521(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -136301,8 +136205,7 @@ static int sp_521_mont_sqrt_17(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -136367,8 +136270,7 @@ int sp_ecc_uncompress_521(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -202512,16 +202414,16 @@ static void sp_1024_point_free_32(sp_point_1024* p, int clear, void* heap) { #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) -/* If valid pointer then clear point data if requested and free data. */ + /* If valid pointer then clear point data if requested and free data. */ if (p != NULL) { - if (clear != 0) { + if (clear) { XMEMSET(p, 0, sizeof(*p)); } XFREE(p, heap, DYNAMIC_TYPE_ECC); } #else -/* Clear point data if requested. */ - if ((p != NULL) && (clear != 0)) { + /* Clear point data if requested. */ + if ((p != NULL) && clear) { XMEMSET(p, 0, sizeof(*p)); } #endif @@ -210595,8 +210497,7 @@ static int sp_1024_gen_stripe_table_32(const sp_point_1024* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -210695,10 +210596,8 @@ static int sp_1024_ecc_mulmod_stripe_32(sp_point_1024* r, const sp_point_1024* g } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -210954,8 +210853,7 @@ static int sp_1024_gen_stripe_table_32(const sp_point_1024* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -211054,10 +210952,8 @@ static int sp_1024_ecc_mulmod_stripe_32(sp_point_1024* r, const sp_point_1024* g } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -211275,10 +211171,8 @@ int sp_ecc_mulmod_1024(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -214913,10 +214807,8 @@ int sp_ecc_mulmod_base_1024(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -214991,10 +214883,8 @@ int sp_ecc_mulmod_base_add_1024(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -215059,10 +214949,8 @@ int sp_ecc_gen_table_1024(const ecc_point* gm, byte* table, word32* len, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -215155,10 +215043,8 @@ int sp_ecc_mulmod_table_1024(const mp_int* km, const ecc_point* gm, byte* table, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -215305,9 +215191,7 @@ int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -217203,9 +217087,7 @@ int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -217573,9 +217455,7 @@ int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_32(c, 1, NULL); sp_1024_point_free_32(q, 1, NULL); @@ -218000,9 +217880,7 @@ int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_32(c, 1, NULL); sp_1024_point_free_32(q, 1, NULL); @@ -218368,9 +218246,7 @@ int sp_Pairing_gen_precomp_1024(const ecc_point* pm, byte* table, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_32(neg, 1, NULL); sp_1024_point_free_32(c, 1, NULL); @@ -218563,9 +218439,7 @@ int sp_Pairing_precomp_1024(const ecc_point* pm, const ecc_point* qm, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_32(c, 1, NULL); sp_1024_point_free_32(q, 1, NULL); @@ -218666,8 +218540,7 @@ static int sp_1024_ecc_is_point_32(const sp_point_1024* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -218706,8 +218579,7 @@ int sp_ecc_is_point_1024(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -218815,10 +218687,8 @@ int sp_ecc_check_key_1024(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; diff --git a/wolfcrypt/src/sp_c32.c b/wolfcrypt/src/sp_c32.c index b89c7419cb..557ded06d6 100644 --- a/wolfcrypt/src/sp_c32.c +++ b/wolfcrypt/src/sp_c32.c @@ -2105,8 +2105,7 @@ static int sp_2048_div_36(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -2224,8 +2223,7 @@ static int sp_2048_mod_exp_36(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -2314,8 +2312,7 @@ static int sp_2048_mod_exp_36(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -2460,8 +2457,7 @@ static int sp_2048_mod_exp_36(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -3167,8 +3163,7 @@ static int sp_2048_div_72(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -3289,8 +3284,7 @@ static int sp_2048_mod_exp_72(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -3379,8 +3373,7 @@ static int sp_2048_mod_exp_72(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -3508,8 +3501,7 @@ static int sp_2048_mod_exp_72(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -3630,8 +3622,7 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -3742,8 +3733,7 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (d != NULL) - XFREE(d, NULL, DYNAMIC_TYPE_RSA); + XFREE(d, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -4113,7 +4103,7 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, const mp_int* dm, } #ifdef WOLFSSL_SP_SMALL_STACK -if (a != NULL) + if (a != NULL) #endif { ForceZero(a, sizeof(sp_digit) * 36 * 13); @@ -4615,8 +4605,7 @@ static int sp_2048_mod_exp_2_72(sp_digit* r, const sp_digit* e, int bits, const } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -5790,8 +5779,7 @@ static int sp_3072_div_53(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -5909,8 +5897,7 @@ static int sp_3072_mod_exp_53(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -5999,8 +5986,7 @@ static int sp_3072_mod_exp_53(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -6145,8 +6131,7 @@ static int sp_3072_mod_exp_53(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -6629,8 +6614,7 @@ static int sp_3072_div_106(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -6749,8 +6733,7 @@ static int sp_3072_mod_exp_106(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -6839,8 +6822,7 @@ static int sp_3072_mod_exp_106(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -6968,8 +6950,7 @@ static int sp_3072_mod_exp_106(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -7088,8 +7069,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -7200,8 +7180,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (d != NULL) - XFREE(d, NULL, DYNAMIC_TYPE_RSA); + XFREE(d, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -7571,7 +7550,7 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm, } #ifdef WOLFSSL_SP_SMALL_STACK -if (a != NULL) + if (a != NULL) #endif { ForceZero(a, sizeof(sp_digit) * 53 * 13); @@ -7923,8 +7902,7 @@ static int sp_3072_mod_exp_2_106(sp_digit* r, const sp_digit* e, int bits, const } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -9824,8 +9802,7 @@ static int sp_3072_div_56(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -9943,8 +9920,7 @@ static int sp_3072_mod_exp_56(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -10033,8 +10009,7 @@ static int sp_3072_mod_exp_56(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -10179,8 +10154,7 @@ static int sp_3072_mod_exp_56(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -10743,8 +10717,7 @@ static int sp_3072_div_112(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -10865,8 +10838,7 @@ static int sp_3072_mod_exp_112(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -10955,8 +10927,7 @@ static int sp_3072_mod_exp_112(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -11084,8 +11055,7 @@ static int sp_3072_mod_exp_112(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -11206,8 +11176,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -11318,8 +11287,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (d != NULL) - XFREE(d, NULL, DYNAMIC_TYPE_RSA); + XFREE(d, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -11689,7 +11657,7 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm, } #ifdef WOLFSSL_SP_SMALL_STACK -if (a != NULL) + if (a != NULL) #endif { ForceZero(a, sizeof(sp_digit) * 56 * 13); @@ -12262,8 +12230,7 @@ static int sp_3072_mod_exp_2_112(sp_digit* r, const sp_digit* e, int bits, const } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -13447,8 +13414,7 @@ static int sp_4096_div_71(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -13566,8 +13532,7 @@ static int sp_4096_mod_exp_71(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -13656,8 +13621,7 @@ static int sp_4096_mod_exp_71(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -13802,8 +13766,7 @@ static int sp_4096_mod_exp_71(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -14287,8 +14250,7 @@ static int sp_4096_div_142(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -14407,8 +14369,7 @@ static int sp_4096_mod_exp_142(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -14497,8 +14458,7 @@ static int sp_4096_mod_exp_142(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -14626,8 +14586,7 @@ static int sp_4096_mod_exp_142(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -14746,8 +14705,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -14858,8 +14816,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (d != NULL) - XFREE(d, NULL, DYNAMIC_TYPE_RSA); + XFREE(d, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -15229,7 +15186,7 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm, } #ifdef WOLFSSL_SP_SMALL_STACK -if (a != NULL) + if (a != NULL) #endif { ForceZero(a, sizeof(sp_digit) * 71 * 13); @@ -15581,8 +15538,7 @@ static int sp_4096_mod_exp_2_142(sp_digit* r, const sp_digit* e, int bits, const } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -17362,8 +17318,7 @@ static int sp_4096_div_81(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -17481,8 +17436,7 @@ static int sp_4096_mod_exp_81(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -17571,8 +17525,7 @@ static int sp_4096_mod_exp_81(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -17717,8 +17670,7 @@ static int sp_4096_mod_exp_81(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -18268,8 +18220,7 @@ static int sp_4096_div_162(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -18390,8 +18341,7 @@ static int sp_4096_mod_exp_162(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -18480,8 +18430,7 @@ static int sp_4096_mod_exp_162(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -18609,8 +18558,7 @@ static int sp_4096_mod_exp_162(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -18731,8 +18679,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -18843,8 +18790,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (d != NULL) - XFREE(d, NULL, DYNAMIC_TYPE_RSA); + XFREE(d, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -19214,7 +19160,7 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm, } #ifdef WOLFSSL_SP_SMALL_STACK -if (a != NULL) + if (a != NULL) #endif { ForceZero(a, sizeof(sp_digit) * 81 * 13); @@ -19887,8 +19833,7 @@ static int sp_4096_mod_exp_2_162(sp_digit* r, const sp_digit* e, int bits, const } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -21907,8 +21852,7 @@ static int sp_256_mod_mul_norm_9(sp_digit* r, const sp_digit* a, const sp_digit* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -22717,10 +22661,8 @@ static int sp_256_ecc_mulmod_win_add_sub_9(sp_point_256* r, const sp_point_256* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -22915,8 +22857,7 @@ static int sp_256_gen_stripe_table_9(const sp_point_256* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -23084,10 +23025,8 @@ static int sp_256_ecc_mulmod_stripe_9(sp_point_256* r, const sp_point_256* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -23305,10 +23244,8 @@ int sp_ecc_mulmod_256(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -23385,10 +23322,8 @@ int sp_ecc_mulmod_add_256(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -24774,10 +24709,8 @@ int sp_ecc_mulmod_base_256(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -24852,10 +24785,8 @@ int sp_ecc_mulmod_base_add_256(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -24919,6 +24850,7 @@ static void sp_256_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_256_ecc_gen_k_9(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[32]; @@ -24935,6 +24867,11 @@ static int sp_256_ecc_gen_k_9(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -25013,12 +24950,9 @@ int sp_ecc_make_key_256(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -25201,10 +25135,8 @@ int sp_ecc_secret_gen_256(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -25449,8 +25381,7 @@ static int sp_256_div_9(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -26175,8 +26106,7 @@ static int sp_256_mod_inv_9(sp_digit* r, const sp_digit* a, const sp_digit* m) XMEMCPY(r, d, sizeof(sp_digit) * 9); } #ifdef WOLFSSL_SP_SMALL_STACK - if (u != NULL) - XFREE(u, NULL, DYNAMIC_TYPE_ECC); + XFREE(u, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -26384,10 +26314,8 @@ int sp_ecc_verify_256(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -26594,8 +26522,7 @@ static int sp_256_ecc_is_point_9(const sp_point_256* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -26634,8 +26561,7 @@ int sp_ecc_is_point_256(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -26743,10 +26669,8 @@ int sp_ecc_check_key_256(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -26825,10 +26749,8 @@ int sp_ecc_proj_add_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -26893,10 +26815,8 @@ int sp_ecc_proj_dbl_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -26957,10 +26877,8 @@ int sp_ecc_map_256(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -27026,8 +26944,7 @@ static int sp_256_mont_sqrt_9(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_ECC); + XFREE(t1, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -27092,8 +27009,7 @@ int sp_ecc_uncompress_256(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -29393,8 +29309,7 @@ static int sp_384_mod_mul_norm_15(sp_digit* r, const sp_digit* a, const sp_digit } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -30251,10 +30166,8 @@ static int sp_384_ecc_mulmod_win_add_sub_15(sp_point_384* r, const sp_point_384* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -30449,8 +30362,7 @@ static int sp_384_gen_stripe_table_15(const sp_point_384* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -30642,10 +30554,8 @@ static int sp_384_ecc_mulmod_stripe_15(sp_point_384* r, const sp_point_384* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -30863,10 +30773,8 @@ int sp_ecc_mulmod_384(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -30943,10 +30851,8 @@ int sp_ecc_mulmod_add_384(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -32844,10 +32750,8 @@ int sp_ecc_mulmod_base_384(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -32922,10 +32826,8 @@ int sp_ecc_mulmod_base_add_384(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -32989,6 +32891,7 @@ static void sp_384_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_384_ecc_gen_k_15(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[48]; @@ -33005,6 +32908,11 @@ static int sp_384_ecc_gen_k_15(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -33083,12 +32991,9 @@ int sp_ecc_make_key_384(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -33271,10 +33176,8 @@ int sp_ecc_secret_gen_384(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -33561,8 +33464,7 @@ static int sp_384_div_15(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -34254,8 +34156,7 @@ static int sp_384_mod_inv_15(sp_digit* r, const sp_digit* a, const sp_digit* m) XMEMCPY(r, d, sizeof(sp_digit) * 15); } #ifdef WOLFSSL_SP_SMALL_STACK - if (u != NULL) - XFREE(u, NULL, DYNAMIC_TYPE_ECC); + XFREE(u, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -34469,10 +34370,8 @@ int sp_ecc_verify_384(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -34679,8 +34578,7 @@ static int sp_384_ecc_is_point_15(const sp_point_384* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -34719,8 +34617,7 @@ int sp_ecc_is_point_384(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -34828,10 +34725,8 @@ int sp_ecc_check_key_384(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -34910,10 +34805,8 @@ int sp_ecc_proj_add_point_384(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -34978,10 +34871,8 @@ int sp_ecc_proj_dbl_point_384(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -35042,10 +34933,8 @@ int sp_ecc_map_384(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -35141,8 +35030,7 @@ static int sp_384_mont_sqrt_15(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_ECC); + XFREE(t1, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -35207,8 +35095,7 @@ int sp_ecc_uncompress_384(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -37834,10 +37721,8 @@ static int sp_521_ecc_mulmod_win_add_sub_21(sp_point_521* r, const sp_point_521* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -38032,8 +37917,7 @@ static int sp_521_gen_stripe_table_21(const sp_point_521* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -38249,10 +38133,8 @@ static int sp_521_ecc_mulmod_stripe_21(sp_point_521* r, const sp_point_521* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -38470,10 +38352,8 @@ int sp_ecc_mulmod_521(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -38550,10 +38430,8 @@ int sp_ecc_mulmod_add_521(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -40961,10 +40839,8 @@ int sp_ecc_mulmod_base_521(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -41039,10 +40915,8 @@ int sp_ecc_mulmod_base_add_521(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -41106,6 +40980,7 @@ static void sp_521_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_521_ecc_gen_k_21(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[66]; @@ -41123,6 +40998,11 @@ static int sp_521_ecc_gen_k_21(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -41201,12 +41081,9 @@ int sp_ecc_make_key_521(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -41389,10 +41266,8 @@ int sp_ecc_secret_gen_521(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -41699,8 +41574,7 @@ static int sp_521_div_21(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -42417,8 +42291,7 @@ static int sp_521_mod_inv_21(sp_digit* r, const sp_digit* a, const sp_digit* m) XMEMCPY(r, d, sizeof(sp_digit) * 21); } #ifdef WOLFSSL_SP_SMALL_STACK - if (u != NULL) - XFREE(u, NULL, DYNAMIC_TYPE_ECC); + XFREE(u, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42643,10 +42516,8 @@ int sp_ecc_verify_521(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -42857,8 +42728,7 @@ static int sp_521_ecc_is_point_21(const sp_point_521* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -42897,8 +42767,7 @@ int sp_ecc_is_point_521(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -43006,10 +42875,8 @@ int sp_ecc_check_key_521(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -43088,10 +42955,8 @@ int sp_ecc_proj_add_point_521(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -43156,10 +43021,8 @@ int sp_ecc_proj_dbl_point_521(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -43220,10 +43083,8 @@ int sp_ecc_map_521(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -43273,8 +43134,7 @@ static int sp_521_mont_sqrt_21(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -43339,8 +43199,7 @@ int sp_ecc_uncompress_521(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -44382,8 +44241,7 @@ static int sp_1024_div_42(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -44462,16 +44320,16 @@ static void sp_1024_point_free_42(sp_point_1024* p, int clear, void* heap) { #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) -/* If valid pointer then clear point data if requested and free data. */ + /* If valid pointer then clear point data if requested and free data. */ if (p != NULL) { - if (clear != 0) { + if (clear) { XMEMSET(p, 0, sizeof(*p)); } XFREE(p, heap, DYNAMIC_TYPE_ECC); } #else -/* Clear point data if requested. */ - if ((p != NULL) && (clear != 0)) { + /* Clear point data if requested. */ + if ((p != NULL) && clear) { XMEMSET(p, 0, sizeof(*p)); } #endif @@ -46540,10 +46398,8 @@ static int sp_1024_ecc_mulmod_win_add_sub_42(sp_point_1024* r, const sp_point_10 } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -46738,8 +46594,7 @@ static int sp_1024_gen_stripe_table_42(const sp_point_1024* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -46838,10 +46693,8 @@ static int sp_1024_ecc_mulmod_stripe_42(sp_point_1024* r, const sp_point_1024* g } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -47059,10 +46912,8 @@ int sp_ecc_mulmod_1024(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -51004,10 +50855,8 @@ int sp_ecc_mulmod_base_1024(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -51082,10 +50931,8 @@ int sp_ecc_mulmod_base_add_1024(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -51150,10 +50997,8 @@ int sp_ecc_gen_table_1024(const ecc_point* gm, byte* table, word32* len, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -51246,10 +51091,8 @@ int sp_ecc_mulmod_table_1024(const mp_int* km, const ecc_point* gm, byte* table, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -51396,9 +51239,7 @@ int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -53294,9 +53135,7 @@ int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -53664,9 +53503,7 @@ int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_42(c, 1, NULL); sp_1024_point_free_42(q, 1, NULL); @@ -54091,9 +53928,7 @@ int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_42(c, 1, NULL); sp_1024_point_free_42(q, 1, NULL); @@ -54459,9 +54294,7 @@ int sp_Pairing_gen_precomp_1024(const ecc_point* pm, byte* table, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_42(neg, 1, NULL); sp_1024_point_free_42(c, 1, NULL); @@ -54654,9 +54487,7 @@ int sp_Pairing_precomp_1024(const ecc_point* pm, const ecc_point* qm, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_42(c, 1, NULL); sp_1024_point_free_42(q, 1, NULL); @@ -54754,8 +54585,7 @@ static int sp_1024_ecc_is_point_42(const sp_point_1024* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -54794,8 +54624,7 @@ int sp_ecc_is_point_1024(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -54903,10 +54732,8 @@ int sp_ecc_check_key_1024(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; diff --git a/wolfcrypt/src/sp_c64.c b/wolfcrypt/src/sp_c64.c index c1fadc5b09..cd55ca3aed 100644 --- a/wolfcrypt/src/sp_c64.c +++ b/wolfcrypt/src/sp_c64.c @@ -1017,8 +1017,7 @@ static int sp_2048_div_17(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -1136,8 +1135,7 @@ static int sp_2048_mod_exp_17(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -1226,8 +1224,7 @@ static int sp_2048_mod_exp_17(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -1372,8 +1369,7 @@ static int sp_2048_mod_exp_17(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -1842,8 +1838,7 @@ static int sp_2048_div_34(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -1962,8 +1957,7 @@ static int sp_2048_mod_exp_34(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -2052,8 +2046,7 @@ static int sp_2048_mod_exp_34(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -2181,8 +2174,7 @@ static int sp_2048_mod_exp_34(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -2301,8 +2293,7 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -2413,8 +2404,7 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (d != NULL) - XFREE(d, NULL, DYNAMIC_TYPE_RSA); + XFREE(d, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -2784,7 +2774,7 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, const mp_int* dm, } #ifdef WOLFSSL_SP_SMALL_STACK -if (a != NULL) + if (a != NULL) #endif { ForceZero(a, sizeof(sp_digit) * 17 * 13); @@ -3137,8 +3127,7 @@ static int sp_2048_mod_exp_2_34(sp_digit* r, const sp_digit* e, int bits, const } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -4552,8 +4541,7 @@ static int sp_2048_div_18(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -4671,8 +4659,7 @@ static int sp_2048_mod_exp_18(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -4761,8 +4748,7 @@ static int sp_2048_mod_exp_18(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -4907,8 +4893,7 @@ static int sp_2048_mod_exp_18(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -5438,8 +5423,7 @@ static int sp_2048_div_36(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -5560,8 +5544,7 @@ static int sp_2048_mod_exp_36(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -5650,8 +5633,7 @@ static int sp_2048_mod_exp_36(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -5779,8 +5761,7 @@ static int sp_2048_mod_exp_36(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -5901,8 +5882,7 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -6013,8 +5993,7 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (d != NULL) - XFREE(d, NULL, DYNAMIC_TYPE_RSA); + XFREE(d, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -6384,7 +6363,7 @@ int sp_RsaPrivate_2048(const byte* in, word32 inLen, const mp_int* dm, } #ifdef WOLFSSL_SP_SMALL_STACK -if (a != NULL) + if (a != NULL) #endif { ForceZero(a, sizeof(sp_digit) * 18 * 13); @@ -6806,8 +6785,7 @@ static int sp_2048_mod_exp_2_36(sp_digit* r, const sp_digit* e, int bits, const } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -7894,8 +7872,7 @@ static int sp_3072_div_26(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -8013,8 +7990,7 @@ static int sp_3072_mod_exp_26(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -8103,8 +8079,7 @@ static int sp_3072_mod_exp_26(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -8249,8 +8224,7 @@ static int sp_3072_mod_exp_26(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -8725,8 +8699,7 @@ static int sp_3072_div_52(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -8845,8 +8818,7 @@ static int sp_3072_mod_exp_52(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -8935,8 +8907,7 @@ static int sp_3072_mod_exp_52(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -9064,8 +9035,7 @@ static int sp_3072_mod_exp_52(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -9184,8 +9154,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -9296,8 +9265,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (d != NULL) - XFREE(d, NULL, DYNAMIC_TYPE_RSA); + XFREE(d, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -9667,7 +9635,7 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm, } #ifdef WOLFSSL_SP_SMALL_STACK -if (a != NULL) + if (a != NULL) #endif { ForceZero(a, sizeof(sp_digit) * 26 * 13); @@ -10020,8 +9988,7 @@ static int sp_3072_mod_exp_2_52(sp_digit* r, const sp_digit* e, int bits, const } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -11573,8 +11540,7 @@ static int sp_3072_div_27(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -11692,8 +11658,7 @@ static int sp_3072_mod_exp_27(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -11782,8 +11747,7 @@ static int sp_3072_mod_exp_27(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -11928,8 +11892,7 @@ static int sp_3072_mod_exp_27(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -12470,8 +12433,7 @@ static int sp_3072_div_54(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -12592,8 +12554,7 @@ static int sp_3072_mod_exp_54(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -12682,8 +12643,7 @@ static int sp_3072_mod_exp_54(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -12811,8 +12771,7 @@ static int sp_3072_mod_exp_54(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -12933,8 +12892,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -13045,8 +13003,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (d != NULL) - XFREE(d, NULL, DYNAMIC_TYPE_RSA); + XFREE(d, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -13416,7 +13373,7 @@ int sp_RsaPrivate_3072(const byte* in, word32 inLen, const mp_int* dm, } #ifdef WOLFSSL_SP_SMALL_STACK -if (a != NULL) + if (a != NULL) #endif { ForceZero(a, sizeof(sp_digit) * 27 * 13); @@ -13874,8 +13831,7 @@ static int sp_3072_mod_exp_2_54(sp_digit* r, const sp_digit* e, int bits, const } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -14968,8 +14924,7 @@ static int sp_4096_div_35(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -15087,8 +15042,7 @@ static int sp_4096_mod_exp_35(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -15177,8 +15131,7 @@ static int sp_4096_mod_exp_35(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -15323,8 +15276,7 @@ static int sp_4096_mod_exp_35(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -15794,8 +15746,7 @@ static int sp_4096_div_70(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -15914,8 +15865,7 @@ static int sp_4096_mod_exp_70(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -16004,8 +15954,7 @@ static int sp_4096_mod_exp_70(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -16133,8 +16082,7 @@ static int sp_4096_mod_exp_70(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -16253,8 +16201,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -16365,8 +16312,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (d != NULL) - XFREE(d, NULL, DYNAMIC_TYPE_RSA); + XFREE(d, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -16736,7 +16682,7 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm, } #ifdef WOLFSSL_SP_SMALL_STACK -if (a != NULL) + if (a != NULL) #endif { ForceZero(a, sizeof(sp_digit) * 35 * 13); @@ -17089,8 +17035,7 @@ static int sp_4096_mod_exp_2_70(sp_digit* r, const sp_digit* e, int bits, const } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -18697,8 +18642,7 @@ static int sp_4096_div_39(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -18816,8 +18760,7 @@ static int sp_4096_mod_exp_39(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -18906,8 +18849,7 @@ static int sp_4096_mod_exp_39(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -19052,8 +18994,7 @@ static int sp_4096_mod_exp_39(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -19595,8 +19536,7 @@ static int sp_4096_div_78(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -19717,8 +19657,7 @@ static int sp_4096_mod_exp_78(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -19807,8 +19746,7 @@ static int sp_4096_mod_exp_78(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -19936,8 +19874,7 @@ static int sp_4096_mod_exp_78(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -20058,8 +19995,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -20170,8 +20106,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (d != NULL) - XFREE(d, NULL, DYNAMIC_TYPE_RSA); + XFREE(d, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -20541,7 +20476,7 @@ int sp_RsaPrivate_4096(const byte* in, word32 inLen, const mp_int* dm, } #ifdef WOLFSSL_SP_SMALL_STACK -if (a != NULL) + if (a != NULL) #endif { ForceZero(a, sizeof(sp_digit) * 39 * 13); @@ -21047,8 +20982,7 @@ static int sp_4096_mod_exp_2_78(sp_digit* r, const sp_digit* e, int bits, const } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -22862,8 +22796,7 @@ static int sp_256_mod_mul_norm_5(sp_digit* r, const sp_digit* a, const sp_digit* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -23640,10 +23573,8 @@ static int sp_256_ecc_mulmod_win_add_sub_5(sp_point_256* r, const sp_point_256* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -23838,8 +23769,7 @@ static int sp_256_gen_stripe_table_5(const sp_point_256* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -23991,10 +23921,8 @@ static int sp_256_ecc_mulmod_stripe_5(sp_point_256* r, const sp_point_256* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -24212,10 +24140,8 @@ int sp_ecc_mulmod_256(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -24292,10 +24218,8 @@ int sp_ecc_mulmod_add_256(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -25681,10 +25605,8 @@ int sp_ecc_mulmod_base_256(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -25759,10 +25681,8 @@ int sp_ecc_mulmod_base_add_256(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -25826,6 +25746,7 @@ static void sp_256_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_256_ecc_gen_k_5(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[32]; @@ -25842,6 +25763,11 @@ static int sp_256_ecc_gen_k_5(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -25920,12 +25846,9 @@ int sp_ecc_make_key_256(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -26108,10 +26031,8 @@ int sp_ecc_secret_gen_256(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -26342,8 +26263,7 @@ static int sp_256_div_5(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -27073,8 +26993,7 @@ static int sp_256_mod_inv_5(sp_digit* r, const sp_digit* a, const sp_digit* m) XMEMCPY(r, d, sizeof(sp_digit) * 5); } #ifdef WOLFSSL_SP_SMALL_STACK - if (u != NULL) - XFREE(u, NULL, DYNAMIC_TYPE_ECC); + XFREE(u, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -27278,10 +27197,8 @@ int sp_ecc_verify_256(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -27488,8 +27405,7 @@ static int sp_256_ecc_is_point_5(const sp_point_256* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -27528,8 +27444,7 @@ int sp_ecc_is_point_256(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -27637,10 +27552,8 @@ int sp_ecc_check_key_256(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -27719,10 +27632,8 @@ int sp_ecc_proj_add_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -27787,10 +27698,8 @@ int sp_ecc_proj_dbl_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -27851,10 +27760,8 @@ int sp_ecc_map_256(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -27920,8 +27827,7 @@ static int sp_256_mont_sqrt_5(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_ECC); + XFREE(t1, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -27986,8 +27892,7 @@ int sp_ecc_uncompress_256(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -29823,8 +29728,7 @@ static int sp_384_mod_mul_norm_7(sp_digit* r, const sp_digit* a, const sp_digit* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -30617,10 +30521,8 @@ static int sp_384_ecc_mulmod_win_add_sub_7(sp_point_384* r, const sp_point_384* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -30815,8 +30717,7 @@ static int sp_384_gen_stripe_table_7(const sp_point_384* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -30976,10 +30877,8 @@ static int sp_384_ecc_mulmod_stripe_7(sp_point_384* r, const sp_point_384* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -31197,10 +31096,8 @@ int sp_ecc_mulmod_384(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -31277,10 +31174,8 @@ int sp_ecc_mulmod_add_384(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -33176,10 +33071,8 @@ int sp_ecc_mulmod_base_384(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -33254,10 +33147,8 @@ int sp_ecc_mulmod_base_add_384(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -33321,6 +33212,7 @@ static void sp_384_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_384_ecc_gen_k_7(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[48]; @@ -33337,6 +33229,11 @@ static int sp_384_ecc_gen_k_7(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -33415,12 +33312,9 @@ int sp_ecc_make_key_384(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -33603,10 +33497,8 @@ int sp_ecc_secret_gen_384(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -33845,8 +33737,7 @@ static int sp_384_div_7(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -34543,8 +34434,7 @@ static int sp_384_mod_inv_7(sp_digit* r, const sp_digit* a, const sp_digit* m) XMEMCPY(r, d, sizeof(sp_digit) * 7); } #ifdef WOLFSSL_SP_SMALL_STACK - if (u != NULL) - XFREE(u, NULL, DYNAMIC_TYPE_ECC); + XFREE(u, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -34750,10 +34640,8 @@ int sp_ecc_verify_384(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -34960,8 +34848,7 @@ static int sp_384_ecc_is_point_7(const sp_point_384* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -35000,8 +34887,7 @@ int sp_ecc_is_point_384(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -35109,10 +34995,8 @@ int sp_ecc_check_key_384(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -35191,10 +35075,8 @@ int sp_ecc_proj_add_point_384(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -35259,10 +35141,8 @@ int sp_ecc_proj_dbl_point_384(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -35323,10 +35203,8 @@ int sp_ecc_map_384(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -35422,8 +35300,7 @@ static int sp_384_mont_sqrt_7(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_ECC); + XFREE(t1, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -35488,8 +35365,7 @@ int sp_ecc_uncompress_384(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -38054,10 +37930,8 @@ static int sp_521_ecc_mulmod_win_add_sub_9(sp_point_521* r, const sp_point_521* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -38252,8 +38126,7 @@ static int sp_521_gen_stripe_table_9(const sp_point_521* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -38421,10 +38294,8 @@ static int sp_521_ecc_mulmod_stripe_9(sp_point_521* r, const sp_point_521* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -38642,10 +38513,8 @@ int sp_ecc_mulmod_521(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -38722,10 +38591,8 @@ int sp_ecc_mulmod_add_521(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -40621,10 +40488,8 @@ int sp_ecc_mulmod_base_521(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -40699,10 +40564,8 @@ int sp_ecc_mulmod_base_add_521(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -40766,6 +40629,7 @@ static void sp_521_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_521_ecc_gen_k_9(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[66]; @@ -40783,6 +40647,11 @@ static int sp_521_ecc_gen_k_9(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -40861,12 +40730,9 @@ int sp_ecc_make_key_521(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -41049,10 +40915,8 @@ int sp_ecc_secret_gen_521(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -41297,8 +41161,7 @@ static int sp_521_div_9(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -42020,8 +41883,7 @@ static int sp_521_mod_inv_9(sp_digit* r, const sp_digit* a, const sp_digit* m) XMEMCPY(r, d, sizeof(sp_digit) * 9); } #ifdef WOLFSSL_SP_SMALL_STACK - if (u != NULL) - XFREE(u, NULL, DYNAMIC_TYPE_ECC); + XFREE(u, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42234,10 +42096,8 @@ int sp_ecc_verify_521(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -42448,8 +42308,7 @@ static int sp_521_ecc_is_point_9(const sp_point_521* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -42488,8 +42347,7 @@ int sp_ecc_is_point_521(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42597,10 +42455,8 @@ int sp_ecc_check_key_521(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -42679,10 +42535,8 @@ int sp_ecc_proj_add_point_521(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42747,10 +42601,8 @@ int sp_ecc_proj_dbl_point_521(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42811,10 +42663,8 @@ int sp_ecc_map_521(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42864,8 +42714,7 @@ static int sp_521_mont_sqrt_9(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42930,8 +42779,7 @@ int sp_ecc_uncompress_521(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -43847,8 +43695,7 @@ static int sp_1024_div_18(const sp_digit* a, const sp_digit* d, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(t1, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -43927,16 +43774,16 @@ static void sp_1024_point_free_18(sp_point_1024* p, int clear, void* heap) { #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) -/* If valid pointer then clear point data if requested and free data. */ + /* If valid pointer then clear point data if requested and free data. */ if (p != NULL) { - if (clear != 0) { + if (clear) { XMEMSET(p, 0, sizeof(*p)); } XFREE(p, heap, DYNAMIC_TYPE_ECC); } #else -/* Clear point data if requested. */ - if ((p != NULL) && (clear != 0)) { + /* Clear point data if requested. */ + if ((p != NULL) && clear) { XMEMSET(p, 0, sizeof(*p)); } #endif @@ -45894,10 +45741,8 @@ static int sp_1024_ecc_mulmod_win_add_sub_18(sp_point_1024* r, const sp_point_10 } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -46092,8 +45937,7 @@ static int sp_1024_gen_stripe_table_18(const sp_point_1024* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -46192,10 +46036,8 @@ static int sp_1024_ecc_mulmod_stripe_18(sp_point_1024* r, const sp_point_1024* g } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -46413,10 +46255,8 @@ int sp_ecc_mulmod_1024(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -49844,10 +49684,8 @@ int sp_ecc_mulmod_base_1024(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -49922,10 +49760,8 @@ int sp_ecc_mulmod_base_add_1024(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -49990,10 +49826,8 @@ int sp_ecc_gen_table_1024(const ecc_point* gm, byte* table, word32* len, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -50086,10 +49920,8 @@ int sp_ecc_mulmod_table_1024(const mp_int* km, const ecc_point* gm, byte* table, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -50236,9 +50068,7 @@ int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -51878,9 +51708,7 @@ int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -52248,9 +52076,7 @@ int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_18(c, 1, NULL); sp_1024_point_free_18(q, 1, NULL); @@ -52675,9 +52501,7 @@ int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_18(c, 1, NULL); sp_1024_point_free_18(q, 1, NULL); @@ -53043,9 +52867,7 @@ int sp_Pairing_gen_precomp_1024(const ecc_point* pm, byte* table, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_18(neg, 1, NULL); sp_1024_point_free_18(c, 1, NULL); @@ -53238,9 +53060,7 @@ int sp_Pairing_precomp_1024(const ecc_point* pm, const ecc_point* qm, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_18(c, 1, NULL); sp_1024_point_free_18(q, 1, NULL); @@ -53338,8 +53158,7 @@ static int sp_1024_ecc_is_point_18(const sp_point_1024* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -53378,8 +53197,7 @@ int sp_ecc_is_point_1024(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -53487,10 +53305,8 @@ int sp_ecc_check_key_1024(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; diff --git a/wolfcrypt/src/sp_cortexm.c b/wolfcrypt/src/sp_cortexm.c index a9151f483f..f664cf2d30 100644 --- a/wolfcrypt/src/sp_cortexm.c +++ b/wolfcrypt/src/sp_cortexm.c @@ -4780,7 +4780,11 @@ static sp_int32 sp_2048_cmp_32(const sp_digit* a, const sp_digit* b) "IT ne\n\t" "movne r3, r7\n\t" "SUBS r6, r6, #0x4\n\t" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) "bcs L_sp_2048_cmp_32_words\n\t" +#else + "bcs L_sp_2048_cmp_32_words_%=\n\t" +#endif "EOR r2, r2, r3\n\t" #else "LDR r4, [%[a], #124]\n\t" @@ -5346,8 +5350,7 @@ static int sp_2048_mod_exp_32(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -5515,8 +5518,7 @@ static int sp_2048_mod_exp_32(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -7549,7 +7551,11 @@ static sp_int32 sp_2048_cmp_64(const sp_digit* a, const sp_digit* b) "IT ne\n\t" "movne r3, r7\n\t" "SUBS r6, r6, #0x4\n\t" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) "bcs L_sp_2048_cmp_64_words\n\t" +#else + "bcs L_sp_2048_cmp_64_words_%=\n\t" +#endif "EOR r2, r2, r3\n\t" #else "LDR r4, [%[a], #252]\n\t" @@ -8461,8 +8467,7 @@ static int sp_2048_mod_exp_64(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -8613,8 +8618,7 @@ static int sp_2048_mod_exp_64(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -8777,8 +8781,7 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -9823,8 +9826,7 @@ static int sp_2048_mod_exp_2_64(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -16277,7 +16279,11 @@ static sp_int32 sp_3072_cmp_48(const sp_digit* a, const sp_digit* b) "IT ne\n\t" "movne r3, r7\n\t" "SUBS r6, r6, #0x4\n\t" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) "bcs L_sp_3072_cmp_48_words\n\t" +#else + "bcs L_sp_3072_cmp_48_words_%=\n\t" +#endif "EOR r2, r2, r3\n\t" #else "LDR r4, [%[a], #188]\n\t" @@ -17019,8 +17025,7 @@ static int sp_3072_mod_exp_48(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -17188,8 +17193,7 @@ static int sp_3072_mod_exp_48(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -19806,7 +19810,11 @@ static sp_int32 sp_3072_cmp_96(const sp_digit* a, const sp_digit* b) "IT ne\n\t" "movne r3, r7\n\t" "SUBS r6, r6, #0x4\n\t" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) "bcs L_sp_3072_cmp_96_words\n\t" +#else + "bcs L_sp_3072_cmp_96_words_%=\n\t" +#endif "EOR r2, r2, r3\n\t" #else "LDR r4, [%[a], #380]\n\t" @@ -21070,8 +21078,7 @@ static int sp_3072_mod_exp_96(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -21222,8 +21229,7 @@ static int sp_3072_mod_exp_96(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -21386,8 +21392,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -22680,8 +22685,7 @@ static int sp_3072_mod_exp_2_96(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -27837,7 +27841,11 @@ static sp_int32 sp_4096_cmp_128(const sp_digit* a, const sp_digit* b) "IT ne\n\t" "movne r3, r7\n\t" "SUBS r6, r6, #0x4\n\t" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) "bcs L_sp_4096_cmp_128_words\n\t" +#else + "bcs L_sp_4096_cmp_128_words_%=\n\t" +#endif "EOR r2, r2, r3\n\t" #else "LDR r4, [%[a], #508]\n\t" @@ -29453,8 +29461,7 @@ static int sp_4096_mod_exp_128(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -29605,8 +29612,7 @@ static int sp_4096_mod_exp_128(sp_digit* r, const sp_digit* a, const sp_digit* e } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -29769,8 +29775,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -31311,8 +31316,7 @@ static int sp_4096_mod_exp_2_128(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -34655,7 +34659,11 @@ static sp_int32 sp_256_cmp_8(const sp_digit* a, const sp_digit* b) "IT ne\n\t" "movne r3, r7\n\t" "SUBS r6, r6, #0x4\n\t" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) "bcs L_sp_256_cmp_8_words\n\t" +#else + "bcs L_sp_256_cmp_8_words_%=\n\t" +#endif "EOR r2, r2, r3\n\t" #else "LDR r4, [%[a], #28]\n\t" @@ -36624,15 +36632,15 @@ static int sp_256_ecc_mulmod_fast_8(sp_point_256* r, const sp_point_256* g, cons #endif } #ifndef WC_NO_CACHE_RESISTANT - #ifdef WOLFSSL_SP_SMALL_STACK +#ifdef WOLFSSL_SP_SMALL_STACK if (p != NULL) +#endif + { + ForceZero(p, sizeof(sp_point_256)); + #ifdef WOLFSSL_SP_SMALL_STACK + XFREE(p, heap, DYNAMIC_TYPE_ECC); #endif - { - ForceZero(p, sizeof(sp_point_256)); - #ifdef WOLFSSL_SP_SMALL_STACK - XFREE(p, heap, DYNAMIC_TYPE_ECC); - #endif - } + } #endif /* !WC_NO_CACHE_RESISTANT */ #ifdef WOLFSSL_SP_SMALL_STACK if (t != NULL) @@ -36936,8 +36944,7 @@ static int sp_256_gen_stripe_table_8(const sp_point_256* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -37101,10 +37108,8 @@ static int sp_256_ecc_mulmod_stripe_8(sp_point_256* r, const sp_point_256* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -37360,8 +37365,7 @@ static int sp_256_gen_stripe_table_8(const sp_point_256* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -37525,10 +37529,8 @@ static int sp_256_ecc_mulmod_stripe_8(sp_point_256* r, const sp_point_256* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -37746,10 +37748,8 @@ int sp_ecc_mulmod_256(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -37826,10 +37826,8 @@ int sp_ecc_mulmod_add_256(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -39296,10 +39294,8 @@ int sp_ecc_mulmod_base_256(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -39374,10 +39370,8 @@ int sp_ecc_mulmod_base_add_256(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -39466,6 +39460,7 @@ static void sp_256_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_256_ecc_gen_k_8(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[32]; @@ -39482,6 +39477,11 @@ static int sp_256_ecc_gen_k_8(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -39560,12 +39560,9 @@ int sp_ecc_make_key_256(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -39723,10 +39720,8 @@ int sp_ecc_secret_gen_256(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -41518,10 +41513,8 @@ int sp_ecc_verify_256(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -41728,8 +41721,7 @@ static int sp_256_ecc_is_point_8(const sp_point_256* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -41768,8 +41760,7 @@ int sp_ecc_is_point_256(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -41877,10 +41868,8 @@ int sp_ecc_check_key_256(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -41959,10 +41948,8 @@ int sp_ecc_proj_add_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42027,10 +42014,8 @@ int sp_ecc_proj_dbl_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42091,10 +42076,8 @@ int sp_ecc_map_256(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42160,8 +42143,7 @@ static int sp_256_mont_sqrt_8(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_ECC); + XFREE(t1, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -42226,8 +42208,7 @@ int sp_ecc_uncompress_256(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -44495,8 +44476,7 @@ static int sp_384_mod_mul_norm_12(sp_digit* r, const sp_digit* a, const sp_digit } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -45288,7 +45268,11 @@ static sp_int32 sp_384_cmp_12(const sp_digit* a, const sp_digit* b) "IT ne\n\t" "movne r3, r7\n\t" "SUBS r6, r6, #0x4\n\t" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) "bcs L_sp_384_cmp_12_words\n\t" +#else + "bcs L_sp_384_cmp_12_words_%=\n\t" +#endif "EOR r2, r2, r3\n\t" #else "LDR r4, [%[a], #44]\n\t" @@ -46673,15 +46657,15 @@ static int sp_384_ecc_mulmod_fast_12(sp_point_384* r, const sp_point_384* g, con #endif } #ifndef WC_NO_CACHE_RESISTANT - #ifdef WOLFSSL_SP_SMALL_STACK +#ifdef WOLFSSL_SP_SMALL_STACK if (p != NULL) +#endif + { + ForceZero(p, sizeof(sp_point_384)); + #ifdef WOLFSSL_SP_SMALL_STACK + XFREE(p, heap, DYNAMIC_TYPE_ECC); #endif - { - ForceZero(p, sizeof(sp_point_384)); - #ifdef WOLFSSL_SP_SMALL_STACK - XFREE(p, heap, DYNAMIC_TYPE_ECC); - #endif - } + } #endif /* !WC_NO_CACHE_RESISTANT */ #ifdef WOLFSSL_SP_SMALL_STACK if (t != NULL) @@ -46985,8 +46969,7 @@ static int sp_384_gen_stripe_table_12(const sp_point_384* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -47166,10 +47149,8 @@ static int sp_384_ecc_mulmod_stripe_12(sp_point_384* r, const sp_point_384* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -47425,8 +47406,7 @@ static int sp_384_gen_stripe_table_12(const sp_point_384* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -47606,10 +47586,8 @@ static int sp_384_ecc_mulmod_stripe_12(sp_point_384* r, const sp_point_384* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -47827,10 +47805,8 @@ int sp_ecc_mulmod_384(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -47907,10 +47883,8 @@ int sp_ecc_mulmod_add_384(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -49377,10 +49351,8 @@ int sp_ecc_mulmod_base_384(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -49455,10 +49427,8 @@ int sp_ecc_mulmod_base_add_384(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -49553,6 +49523,7 @@ static void sp_384_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_384_ecc_gen_k_12(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[48]; @@ -49569,6 +49540,11 @@ static int sp_384_ecc_gen_k_12(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -49647,12 +49623,9 @@ int sp_ecc_make_key_384(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -49810,10 +49783,8 @@ int sp_ecc_secret_gen_384(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -51605,10 +51576,8 @@ int sp_ecc_verify_384(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -51815,8 +51784,7 @@ static int sp_384_ecc_is_point_12(const sp_point_384* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -51855,8 +51823,7 @@ int sp_ecc_is_point_384(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -51964,10 +51931,8 @@ int sp_ecc_check_key_384(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -52046,10 +52011,8 @@ int sp_ecc_proj_add_point_384(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -52114,10 +52077,8 @@ int sp_ecc_proj_dbl_point_384(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -52178,10 +52139,8 @@ int sp_ecc_map_384(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -52277,8 +52236,7 @@ static int sp_384_mont_sqrt_12(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_ECC); + XFREE(t1, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -52343,8 +52301,7 @@ int sp_ecc_uncompress_384(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -57343,7 +57300,11 @@ static sp_int32 sp_521_cmp_17(const sp_digit* a, const sp_digit* b) "IT ne\n\t" "movne r3, r7\n\t" "SUBS r6, r6, #0x4\n\t" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) "bcs L_sp_521_cmp_17_words\n\t" +#else + "bcs L_sp_521_cmp_17_words_%=\n\t" +#endif "EOR r2, r2, r3\n\t" #else "LDR r4, [%[a], #64]\n\t" @@ -58865,15 +58826,15 @@ static int sp_521_ecc_mulmod_fast_17(sp_point_521* r, const sp_point_521* g, con #endif } #ifndef WC_NO_CACHE_RESISTANT - #ifdef WOLFSSL_SP_SMALL_STACK +#ifdef WOLFSSL_SP_SMALL_STACK if (p != NULL) +#endif + { + ForceZero(p, sizeof(sp_point_521)); + #ifdef WOLFSSL_SP_SMALL_STACK + XFREE(p, heap, DYNAMIC_TYPE_ECC); #endif - { - ForceZero(p, sizeof(sp_point_521)); - #ifdef WOLFSSL_SP_SMALL_STACK - XFREE(p, heap, DYNAMIC_TYPE_ECC); - #endif - } + } #endif /* !WC_NO_CACHE_RESISTANT */ #ifdef WOLFSSL_SP_SMALL_STACK if (t != NULL) @@ -59177,8 +59138,7 @@ static int sp_521_gen_stripe_table_17(const sp_point_521* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -59378,10 +59338,8 @@ static int sp_521_ecc_mulmod_stripe_17(sp_point_521* r, const sp_point_521* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -59637,8 +59595,7 @@ static int sp_521_gen_stripe_table_17(const sp_point_521* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -59838,10 +59795,8 @@ static int sp_521_ecc_mulmod_stripe_17(sp_point_521* r, const sp_point_521* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -60059,10 +60014,8 @@ int sp_ecc_mulmod_521(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -60139,10 +60092,8 @@ int sp_ecc_mulmod_add_521(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -62153,10 +62104,8 @@ int sp_ecc_mulmod_base_521(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -62231,10 +62180,8 @@ int sp_ecc_mulmod_base_add_521(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -62338,6 +62285,7 @@ static void sp_521_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_521_ecc_gen_k_17(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[66]; @@ -62355,6 +62303,11 @@ static int sp_521_ecc_gen_k_17(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -62433,12 +62386,9 @@ int sp_ecc_make_key_521(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -62598,10 +62548,8 @@ int sp_ecc_secret_gen_521(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -65199,10 +65147,8 @@ int sp_ecc_verify_521(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -65412,8 +65358,7 @@ static int sp_521_ecc_is_point_17(const sp_point_521* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -65452,8 +65397,7 @@ int sp_ecc_is_point_521(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -65561,10 +65505,8 @@ int sp_ecc_check_key_521(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -65643,10 +65585,8 @@ int sp_ecc_proj_add_point_521(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -65711,10 +65651,8 @@ int sp_ecc_proj_dbl_point_521(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -65775,10 +65713,8 @@ int sp_ecc_map_521(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -65828,8 +65764,7 @@ static int sp_521_mont_sqrt_17(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -65894,8 +65829,7 @@ int sp_ecc_uncompress_521(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -70364,7 +70298,11 @@ static sp_int32 sp_1024_cmp_32(const sp_digit* a, const sp_digit* b) "IT ne\n\t" "movne r3, r7\n\t" "SUBS r6, r6, #0x4\n\t" +#if defined(__IAR_SYSTEMS_ICC__) && (__VER__ < 9000000) "bcs L_sp_1024_cmp_32_words\n\t" +#else + "bcs L_sp_1024_cmp_32_words_%=\n\t" +#endif "EOR r2, r2, r3\n\t" #else "LDR r4, [%[a], #124]\n\t" @@ -70845,16 +70783,16 @@ static void sp_1024_point_free_32(sp_point_1024* p, int clear, void* heap) { #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) -/* If valid pointer then clear point data if requested and free data. */ + /* If valid pointer then clear point data if requested and free data. */ if (p != NULL) { - if (clear != 0) { + if (clear) { XMEMSET(p, 0, sizeof(*p)); } XFREE(p, heap, DYNAMIC_TYPE_ECC); } #else -/* Clear point data if requested. */ - if ((p != NULL) && (clear != 0)) { + /* Clear point data if requested. */ + if ((p != NULL) && clear) { XMEMSET(p, 0, sizeof(*p)); } #endif @@ -73887,8 +73825,7 @@ static int sp_1024_gen_stripe_table_32(const sp_point_1024* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -73987,10 +73924,8 @@ static int sp_1024_ecc_mulmod_stripe_32(sp_point_1024* r, const sp_point_1024* g } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -74246,8 +74181,7 @@ static int sp_1024_gen_stripe_table_32(const sp_point_1024* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -74346,10 +74280,8 @@ static int sp_1024_ecc_mulmod_stripe_32(sp_point_1024* r, const sp_point_1024* g } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -74567,10 +74499,8 @@ int sp_ecc_mulmod_1024(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -78205,10 +78135,8 @@ int sp_ecc_mulmod_base_1024(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -78283,10 +78211,8 @@ int sp_ecc_mulmod_base_add_1024(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -78351,10 +78277,8 @@ int sp_ecc_gen_table_1024(const ecc_point* gm, byte* table, word32* len, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -78447,10 +78371,8 @@ int sp_ecc_mulmod_table_1024(const mp_int* km, const ecc_point* gm, byte* table, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -78597,9 +78519,7 @@ int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -80495,9 +80415,7 @@ int sp_ModExp_Fp_star_1024(const mp_int* base, mp_int* exp, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -80865,9 +80783,7 @@ int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_32(c, 1, NULL); sp_1024_point_free_32(q, 1, NULL); @@ -81292,9 +81208,7 @@ int sp_Pairing_1024(const ecc_point* pm, const ecc_point* qm, mp_int* res) #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_32(c, 1, NULL); sp_1024_point_free_32(q, 1, NULL); @@ -81660,9 +81574,7 @@ int sp_Pairing_gen_precomp_1024(const ecc_point* pm, byte* table, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_32(neg, 1, NULL); sp_1024_point_free_32(c, 1, NULL); @@ -81855,9 +81767,7 @@ int sp_Pairing_precomp_1024(const ecc_point* pm, const ecc_point* qm, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_32(c, 1, NULL); sp_1024_point_free_32(q, 1, NULL); @@ -81958,8 +81868,7 @@ static int sp_1024_ecc_is_point_32(const sp_point_1024* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -81998,8 +81907,7 @@ int sp_ecc_is_point_1024(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -82107,10 +82015,8 @@ int sp_ecc_check_key_1024(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; diff --git a/wolfcrypt/src/sp_dsp32.c b/wolfcrypt/src/sp_dsp32.c index 8522fdaeab..f14e1ab37f 100644 --- a/wolfcrypt/src/sp_dsp32.c +++ b/wolfcrypt/src/sp_dsp32.c @@ -296,9 +296,7 @@ static int sp_256_mod_mul_norm_10(sp_digit* r, const sp_digit* a, const sp_digit } #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_ECC); - } + XFREE(td, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -2592,9 +2590,7 @@ static int sp_256_ecc_mulmod_stripe_10(sp_point* r, const sp_point* g, } #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK) - if (t != NULL) { - XFREE(t, heap, DYNAMIC_TYPE_ECC); - } + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif sp_ecc_point_free(p, 0, heap); sp_ecc_point_free(rt, 0, heap); @@ -4233,9 +4229,7 @@ static int sp_256_div_10(const sp_digit* a, const sp_digit* d, sp_digit* m, } #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -4530,8 +4524,7 @@ int wolfSSL_DSP_ECC_Verify_256(remote_handle64 h, int32 *u1, int hashLen, int32* } #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK) - if (d != NULL) - XFREE(d, heap, DYNAMIC_TYPE_ECC); + XFREE(d, heap, DYNAMIC_TYPE_ECC); #endif sp_ecc_point_free(p1, 0, heap); sp_ecc_point_free(p2, 0, heap); @@ -4631,9 +4624,7 @@ int sp_ecc_proj_add_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK) - if (tmp != NULL) { - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - } + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); #endif sp_ecc_point_free(q, 0, NULL); sp_ecc_point_free(p, 0, NULL); @@ -4696,9 +4687,7 @@ int sp_ecc_proj_dbl_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK) - if (tmp != NULL) { - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - } + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); #endif sp_ecc_point_free(p, 0, NULL); @@ -4754,9 +4743,7 @@ int sp_ecc_map_256(mp_int* pX, mp_int* pY, mp_int* pZ) } #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK) - if (tmp != NULL) { - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - } + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); #endif sp_ecc_point_free(p, 0, NULL); @@ -4831,9 +4818,7 @@ static int sp_256_mont_sqrt_10(sp_digit* y) } #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK) - if (d != NULL) { - XFREE(d, NULL, DYNAMIC_TYPE_ECC); - } + XFREE(d, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -4906,9 +4891,7 @@ int sp_ecc_uncompress_256(mp_int* xm, int odd, mp_int* ym) } #if defined(WOLFSSL_SP_SMALL) || defined(WOLFSSL_SMALL_STACK) - if (d != NULL) { - XFREE(d, NULL, DYNAMIC_TYPE_ECC); - } + XFREE(d, NULL, DYNAMIC_TYPE_ECC); #endif return err; diff --git a/wolfcrypt/src/sp_int.c b/wolfcrypt/src/sp_int.c index b1d18d5549..8c727d738f 100644 --- a/wolfcrypt/src/sp_int.c +++ b/wolfcrypt/src/sp_int.c @@ -31,6 +31,7 @@ This library provides single precision (SP) integer math functions. #endif #include +#include #if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL) @@ -8964,9 +8965,7 @@ static int _sp_mul_nxn(const sp_int* a, const sp_int* b, sp_int* r) } #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) - if (t != NULL) { - XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); #endif return err; } @@ -9042,9 +9041,7 @@ static int _sp_mul(const sp_int* a, const sp_int* b, sp_int* r) } #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) - if (t != NULL) { - XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); #endif return err; } @@ -9126,9 +9123,7 @@ static int _sp_mul(const sp_int* a, const sp_int* b, sp_int* r) } #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) - if (t != NULL) { - XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); #endif return err; } @@ -9252,9 +9247,7 @@ static int _sp_mul_4(const sp_int* a, const sp_int* b, sp_int* r) } #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) - if (w != NULL) { - XFREE(w, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(w, NULL, DYNAMIC_TYPE_BIGINT); #endif return err; } @@ -10251,9 +10244,7 @@ static int _sp_mul_16(const sp_int* a, const sp_int* b, sp_int* r) } #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) - if (t != NULL) { - XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); #endif return err; } @@ -11059,9 +11050,7 @@ static int _sp_mul_24(const sp_int* a, const sp_int* b, sp_int* r) } #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) - if (t != NULL) { - XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); #endif return err; } @@ -13666,7 +13655,7 @@ static int _sp_exptmod_base_2(const sp_int* e, int digits, const sp_int* m, #ifndef WC_NO_HARDEN FREE_SP_INT_ARRAY(d, NULL); #else - FREE_SP_INT(tr, m->used * 2 + 1); + FREE_SP_INT(tr, NULL); #endif return err; } @@ -14707,9 +14696,7 @@ static int _sp_sqr(const sp_int* a, sp_int* r) } #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) - if (t != NULL) { - XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); #endif return err; } @@ -14814,9 +14801,7 @@ static int _sp_sqr(const sp_int* a, sp_int* r) } #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) - if (t != NULL) { - XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); #endif return err; } @@ -14928,9 +14913,7 @@ static int _sp_sqr_4(const sp_int* a, sp_int* r) } #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) - if (w != NULL) { - XFREE(w, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(w, NULL, DYNAMIC_TYPE_BIGINT); #endif return err; } @@ -15755,9 +15738,7 @@ static int _sp_sqr_16(const sp_int* a, sp_int* r) } #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) - if (t != NULL) { - XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); #endif return err; } @@ -16330,9 +16311,7 @@ static int _sp_sqr_24(const sp_int* a, sp_int* r) } #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) - if (t != NULL) { - XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); - } + XFREE(t, NULL, DYNAMIC_TYPE_BIGINT); #endif return err; } diff --git a/wolfcrypt/src/sp_x86_64.c b/wolfcrypt/src/sp_x86_64.c index ea1b9635c0..cef7ffb54e 100644 --- a/wolfcrypt/src/sp_x86_64.c +++ b/wolfcrypt/src/sp_x86_64.c @@ -811,8 +811,7 @@ static int sp_2048_mod_exp_16(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -1052,8 +1051,7 @@ static int sp_2048_mod_exp_avx2_16(sp_digit* r, const sp_digit* a, const sp_digi } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -1623,8 +1621,7 @@ static int sp_2048_mod_exp_32(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -1899,8 +1896,7 @@ static int sp_2048_mod_exp_avx2_32(sp_digit* r, const sp_digit* a, const sp_digi } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -2105,8 +2101,7 @@ int sp_RsaPublic_2048(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -2531,14 +2526,12 @@ int sp_ModExp_2048(const mp_int* base, const mp_int* exp, const mp_int* mod, } #ifdef WOLFSSL_SP_SMALL_STACK - if (b != NULL) - XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (e != NULL) { XMEMSET(e, 0, 32); XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER); } - if (m != NULL) - XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); #else XMEMSET(e, 0, sizeof(e)); #endif @@ -2687,8 +2680,7 @@ static int sp_2048_mod_exp_2_avx2_32(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -2826,8 +2818,7 @@ static int sp_2048_mod_exp_2_32(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -2932,14 +2923,12 @@ int sp_DhExp_2048(const mp_int* base, const byte* exp, word32 expLen, } #ifdef WOLFSSL_SP_SMALL_STACK - if (b != NULL) - XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (e != NULL) { XMEMSET(e, 0, 32); XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER); } - if (m != NULL) - XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); #else XMEMSET(e, 0, sizeof(e)); #endif @@ -3023,14 +3012,12 @@ int sp_ModExp_1024(const mp_int* base, const mp_int* exp, const mp_int* mod, } #ifdef WOLFSSL_SP_SMALL_STACK - if (b != NULL) - XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (e != NULL) { XMEMSET(e, 0, 16); XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER); } - if (m != NULL) - XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); #else XMEMSET(e, 0, sizeof(e)); #endif @@ -3813,8 +3800,7 @@ static int sp_3072_mod_exp_24(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -4054,8 +4040,7 @@ static int sp_3072_mod_exp_avx2_24(sp_digit* r, const sp_digit* a, const sp_digi } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -4573,8 +4558,7 @@ static int sp_3072_mod_exp_48(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -4797,8 +4781,7 @@ static int sp_3072_mod_exp_avx2_48(sp_digit* r, const sp_digit* a, const sp_digi } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -5003,8 +4986,7 @@ int sp_RsaPublic_3072(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -5429,14 +5411,12 @@ int sp_ModExp_3072(const mp_int* base, const mp_int* exp, const mp_int* mod, } #ifdef WOLFSSL_SP_SMALL_STACK - if (b != NULL) - XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (e != NULL) { XMEMSET(e, 0, 48); XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER); } - if (m != NULL) - XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); #else XMEMSET(e, 0, sizeof(e)); #endif @@ -5585,8 +5565,7 @@ static int sp_3072_mod_exp_2_avx2_48(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -5724,8 +5703,7 @@ static int sp_3072_mod_exp_2_48(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -5830,14 +5808,12 @@ int sp_DhExp_3072(const mp_int* base, const byte* exp, word32 expLen, } #ifdef WOLFSSL_SP_SMALL_STACK - if (b != NULL) - XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (e != NULL) { XMEMSET(e, 0, 48); XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER); } - if (m != NULL) - XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); #else XMEMSET(e, 0, sizeof(e)); #endif @@ -5921,14 +5897,12 @@ int sp_ModExp_1536(const mp_int* base, const mp_int* exp, const mp_int* mod, } #ifdef WOLFSSL_SP_SMALL_STACK - if (b != NULL) - XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (e != NULL) { XMEMSET(e, 0, 24); XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER); } - if (m != NULL) - XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); #else XMEMSET(e, 0, sizeof(e)); #endif @@ -6697,8 +6671,7 @@ static int sp_4096_mod_exp_64(sp_digit* r, const sp_digit* a, const sp_digit* e, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -6921,8 +6894,7 @@ static int sp_4096_mod_exp_avx2_64(sp_digit* r, const sp_digit* a, const sp_digi } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -7127,8 +7099,7 @@ int sp_RsaPublic_4096(const byte* in, word32 inLen, const mp_int* em, } #ifdef WOLFSSL_SP_SMALL_STACK - if (a != NULL) - XFREE(a, NULL, DYNAMIC_TYPE_RSA); + XFREE(a, NULL, DYNAMIC_TYPE_RSA); #endif return err; @@ -7553,14 +7524,12 @@ int sp_ModExp_4096(const mp_int* base, const mp_int* exp, const mp_int* mod, } #ifdef WOLFSSL_SP_SMALL_STACK - if (b != NULL) - XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (e != NULL) { XMEMSET(e, 0, 64); XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER); } - if (m != NULL) - XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); #else XMEMSET(e, 0, sizeof(e)); #endif @@ -7709,8 +7678,7 @@ static int sp_4096_mod_exp_2_avx2_64(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -7848,8 +7816,7 @@ static int sp_4096_mod_exp_2_64(sp_digit* r, const sp_digit* e, int bits, } #ifdef WOLFSSL_SP_SMALL_STACK - if (td != NULL) - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; @@ -7954,14 +7921,12 @@ int sp_DhExp_4096(const mp_int* base, const byte* exp, word32 expLen, } #ifdef WOLFSSL_SP_SMALL_STACK - if (b != NULL) - XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(b, NULL, DYNAMIC_TYPE_TMP_BUFFER); if (e != NULL) { XMEMSET(e, 0, 64); XFREE(e, NULL, DYNAMIC_TYPE_TMP_BUFFER); } - if (m != NULL) - XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(m, NULL, DYNAMIC_TYPE_TMP_BUFFER); #else XMEMSET(e, 0, sizeof(e)); #endif @@ -9575,10 +9540,8 @@ static int sp_256_ecc_mulmod_win_add_sub_4(sp_point_256* r, const sp_point_256* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -10610,10 +10573,8 @@ static int sp_256_ecc_mulmod_win_add_sub_avx2_4(sp_point_256* r, const sp_point_ } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -10812,8 +10773,7 @@ static int sp_256_gen_stripe_table_4(const sp_point_256* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -10942,10 +10902,8 @@ static int sp_256_ecc_mulmod_stripe_4(sp_point_256* r, const sp_point_256* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -11304,8 +11262,7 @@ static int sp_256_gen_stripe_table_avx2_4(const sp_point_256* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -11420,10 +11377,8 @@ static int sp_256_ecc_mulmod_stripe_avx2_4(sp_point_256* r, const sp_point_256* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -11555,10 +11510,8 @@ int sp_ecc_mulmod_256(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -11653,10 +11606,8 @@ int sp_ecc_mulmod_add_256(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -24183,8 +24134,7 @@ static int sp_256_ecc_mulmod_add_only_4(sp_point_256* r, const sp_point_256* g, #endif } #ifdef WOLFSSL_SP_SMALL_STACK - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -24317,8 +24267,7 @@ static int sp_256_ecc_mulmod_add_only_avx2_4(sp_point_256* r, const sp_point_256 #endif } #ifdef WOLFSSL_SP_SMALL_STACK - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -24394,10 +24343,8 @@ int sp_ecc_mulmod_base_256(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -24490,10 +24437,8 @@ int sp_ecc_mulmod_base_add_256(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -24554,6 +24499,7 @@ static void sp_256_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_256_ecc_gen_k_4(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[32]; @@ -24570,6 +24516,11 @@ static int sp_256_ecc_gen_k_4(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -24663,12 +24614,9 @@ int sp_ecc_make_key_256(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -24850,10 +24798,8 @@ int sp_ecc_secret_gen_256(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -26237,10 +26183,8 @@ int sp_ecc_verify_256(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -26447,8 +26391,7 @@ static int sp_256_ecc_is_point_4(const sp_point_256* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -26487,8 +26430,7 @@ int sp_ecc_is_point_256(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -26609,10 +26551,8 @@ int sp_ecc_check_key_256(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -26699,10 +26639,8 @@ int sp_ecc_proj_add_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -26775,10 +26713,8 @@ int sp_ecc_proj_dbl_point_256(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -26847,10 +26783,8 @@ int sp_ecc_map_256(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -26953,8 +26887,7 @@ static int sp_256_mont_sqrt_4(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_ECC); + XFREE(t1, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -27029,8 +26962,7 @@ int sp_ecc_uncompress_256(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -27272,8 +27204,7 @@ static int sp_384_mod_mul_norm_6(sp_digit* r, const sp_digit* a, const sp_digit* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -28713,10 +28644,8 @@ static int sp_384_ecc_mulmod_win_add_sub_6(sp_point_384* r, const sp_point_384* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -29801,10 +29730,8 @@ static int sp_384_ecc_mulmod_win_add_sub_avx2_6(sp_point_384* r, const sp_point_ } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -30006,8 +29933,7 @@ static int sp_384_gen_stripe_table_6(const sp_point_384* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -30136,10 +30062,8 @@ static int sp_384_ecc_mulmod_stripe_6(sp_point_384* r, const sp_point_384* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -30501,8 +30425,7 @@ static int sp_384_gen_stripe_table_avx2_6(const sp_point_384* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -30617,10 +30540,8 @@ static int sp_384_ecc_mulmod_stripe_avx2_6(sp_point_384* r, const sp_point_384* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -30752,10 +30673,8 @@ int sp_ecc_mulmod_384(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -30850,10 +30769,8 @@ int sp_ecc_mulmod_add_384(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -49194,8 +49111,7 @@ static int sp_384_ecc_mulmod_add_only_6(sp_point_384* r, const sp_point_384* g, #endif } #ifdef WOLFSSL_SP_SMALL_STACK - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -49328,8 +49244,7 @@ static int sp_384_ecc_mulmod_add_only_avx2_6(sp_point_384* r, const sp_point_384 #endif } #ifdef WOLFSSL_SP_SMALL_STACK - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -49405,10 +49320,8 @@ int sp_ecc_mulmod_base_384(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -49501,10 +49414,8 @@ int sp_ecc_mulmod_base_add_384(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -49565,6 +49476,7 @@ static void sp_384_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_384_ecc_gen_k_6(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[48]; @@ -49581,6 +49493,11 @@ static int sp_384_ecc_gen_k_6(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -49674,12 +49591,9 @@ int sp_ecc_make_key_384(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -49861,10 +49775,8 @@ int sp_ecc_secret_gen_384(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -51190,10 +51102,8 @@ int sp_ecc_verify_384(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -51400,8 +51310,7 @@ static int sp_384_ecc_is_point_6(const sp_point_384* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -51440,8 +51349,7 @@ int sp_ecc_is_point_384(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -51562,10 +51470,8 @@ int sp_ecc_check_key_384(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -51652,10 +51558,8 @@ int sp_ecc_proj_add_point_384(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -51728,10 +51632,8 @@ int sp_ecc_proj_dbl_point_384(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -51800,10 +51702,8 @@ int sp_ecc_map_384(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -51961,8 +51861,7 @@ static int sp_384_mont_sqrt_6(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, NULL, DYNAMIC_TYPE_ECC); + XFREE(t1, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -52037,8 +51936,7 @@ int sp_ecc_uncompress_384(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -53620,10 +53518,8 @@ static int sp_521_ecc_mulmod_win_add_sub_9(sp_point_521* r, const sp_point_521* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -54685,10 +54581,8 @@ static int sp_521_ecc_mulmod_win_add_sub_avx2_9(sp_point_521* r, const sp_point_ } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -54890,8 +54784,7 @@ static int sp_521_gen_stripe_table_9(const sp_point_521* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -55020,10 +54913,8 @@ static int sp_521_ecc_mulmod_stripe_9(sp_point_521* r, const sp_point_521* g, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -55385,8 +55276,7 @@ static int sp_521_gen_stripe_table_avx2_9(const sp_point_521* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -55501,10 +55391,8 @@ static int sp_521_ecc_mulmod_stripe_avx2_9(sp_point_521* r, const sp_point_521* } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -55636,10 +55524,8 @@ int sp_ecc_mulmod_521(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -55734,10 +55620,8 @@ int sp_ecc_mulmod_add_521(const mp_int* km, const ecc_point* gm, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -90264,8 +90148,7 @@ static int sp_521_ecc_mulmod_add_only_9(sp_point_521* r, const sp_point_521* g, #endif } #ifdef WOLFSSL_SP_SMALL_STACK - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -90398,8 +90281,7 @@ static int sp_521_ecc_mulmod_add_only_avx2_9(sp_point_521* r, const sp_point_521 #endif } #ifdef WOLFSSL_SP_SMALL_STACK - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -90475,10 +90357,8 @@ int sp_ecc_mulmod_base_521(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -90571,10 +90451,8 @@ int sp_ecc_mulmod_base_add_521(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -90635,6 +90513,7 @@ static void sp_521_from_bin(sp_digit* r, int size, const byte* a, int n) */ static int sp_521_ecc_gen_k_9(WC_RNG* rng, sp_digit* k) { +#ifndef WC_NO_RNG int err; byte buf[66]; @@ -90652,6 +90531,11 @@ static int sp_521_ecc_gen_k_9(WC_RNG* rng, sp_digit* k) while (err == 0); return err; +#else + (void)rng; + (void)k; + return NOT_COMPILED_IN; +#endif } /* Makes a random EC key pair. @@ -90745,12 +90629,9 @@ int sp_ecc_make_key_521(WC_RNG* rng, mp_int* priv, ecc_point* pub, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) { - /* point is not sensitive, so no need to zeroize */ - XFREE(point, heap, DYNAMIC_TYPE_ECC); - } + XFREE(k, heap, DYNAMIC_TYPE_ECC); + /* point is not sensitive, so no need to zeroize */ + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -90932,10 +90813,8 @@ int sp_ecc_secret_gen_521(const mp_int* priv, const ecc_point* pub, byte* out, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -92331,10 +92210,8 @@ int sp_ecc_verify_521(const byte* hash, word32 hashLen, const mp_int* pX, } #ifdef WOLFSSL_SP_SMALL_STACK - if (u1 != NULL) - XFREE(u1, heap, DYNAMIC_TYPE_ECC); - if (p1 != NULL) - XFREE(p1, heap, DYNAMIC_TYPE_ECC); + XFREE(u1, heap, DYNAMIC_TYPE_ECC); + XFREE(p1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -92544,8 +92421,7 @@ static int sp_521_ecc_is_point_9(const sp_point_521* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -92584,8 +92460,7 @@ int sp_ecc_is_point_521(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -92706,10 +92581,8 @@ int sp_ecc_check_key_521(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -92796,10 +92669,8 @@ int sp_ecc_proj_add_point_521(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -92872,10 +92743,8 @@ int sp_ecc_proj_dbl_point_521(mp_int* pX, mp_int* pY, mp_int* pZ, } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -92944,10 +92813,8 @@ int sp_ecc_map_521(mp_int* pX, mp_int* pY, mp_int* pZ) } #ifdef WOLFSSL_SP_SMALL_STACK - if (tmp != NULL) - XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); - if (p != NULL) - XFREE(p, NULL, DYNAMIC_TYPE_ECC); + XFREE(tmp, NULL, DYNAMIC_TYPE_ECC); + XFREE(p, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -93014,8 +92881,7 @@ static int sp_521_mont_sqrt_9(sp_digit* y) } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, NULL, DYNAMIC_TYPE_ECC); + XFREE(t, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -93090,8 +92956,7 @@ int sp_ecc_uncompress_521(mp_int* xm, int odd, mp_int* ym) } #ifdef WOLFSSL_SP_SMALL_STACK - if (x != NULL) - XFREE(x, NULL, DYNAMIC_TYPE_ECC); + XFREE(x, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -93499,16 +93364,16 @@ static void sp_1024_point_free_16(sp_point_1024* p, int clear, void* heap) { #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) -/* If valid pointer then clear point data if requested and free data. */ + /* If valid pointer then clear point data if requested and free data. */ if (p != NULL) { - if (clear != 0) { + if (clear) { XMEMSET(p, 0, sizeof(*p)); } XFREE(p, heap, DYNAMIC_TYPE_ECC); } #else -/* Clear point data if requested. */ - if ((p != NULL) && (clear != 0)) { + /* Clear point data if requested. */ + if ((p != NULL) && clear) { XMEMSET(p, 0, sizeof(*p)); } #endif @@ -94881,10 +94746,8 @@ static int sp_1024_ecc_mulmod_win_add_sub_16(sp_point_1024* r, const sp_point_10 } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -95922,10 +95785,8 @@ static int sp_1024_ecc_mulmod_win_add_sub_avx2_16(sp_point_1024* r, const sp_poi } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (tmp != NULL) - XFREE(tmp, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(tmp, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -96127,8 +95988,7 @@ static int sp_1024_gen_stripe_table_16(const sp_point_1024* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -96227,10 +96087,8 @@ static int sp_1024_ecc_mulmod_stripe_16(sp_point_1024* r, const sp_point_1024* g } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -96591,8 +96449,7 @@ static int sp_1024_gen_stripe_table_avx2_16(const sp_point_1024* a, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -96691,10 +96548,8 @@ static int sp_1024_ecc_mulmod_stripe_avx2_16(sp_point_1024* r, const sp_point_10 } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (rt != NULL) - XFREE(rt, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(rt, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -96825,10 +96680,8 @@ int sp_ecc_mulmod_1024(const mp_int* km, const ecc_point* gm, ecc_point* r, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -100258,10 +100111,8 @@ int sp_ecc_mulmod_base_1024(const mp_int* km, ecc_point* r, int map, void* heap) } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -100354,10 +100205,8 @@ int sp_ecc_mulmod_base_add_1024(const mp_int* km, const ecc_point* am, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -100431,10 +100280,8 @@ int sp_ecc_gen_table_1024(const ecc_point* gm, byte* table, word32* len, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t != NULL) - XFREE(t, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(t, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -100536,10 +100383,8 @@ int sp_ecc_mulmod_table_1024(const mp_int* km, const ecc_point* gm, byte* table, } #ifdef WOLFSSL_SP_SMALL_STACK - if (k != NULL) - XFREE(k, heap, DYNAMIC_TYPE_ECC); - if (point != NULL) - XFREE(point, heap, DYNAMIC_TYPE_ECC); + XFREE(k, heap, DYNAMIC_TYPE_ECC); + XFREE(point, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -100686,9 +100531,7 @@ static int sp_ModExp_Fp_star_x64_1024(const mp_int* base, mp_int* exp, mp_int* r #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -102328,9 +102171,7 @@ static int sp_ModExp_Fp_star_x64_1024(const mp_int* base, mp_int* exp, mp_int* r #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -102478,9 +102319,7 @@ static int sp_ModExp_Fp_star_avx2_1024(const mp_int* base, mp_int* exp, mp_int* #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -102577,9 +102416,7 @@ static int sp_ModExp_Fp_star_avx2_1024(const mp_int* base, mp_int* exp, mp_int* #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return err; } @@ -102978,9 +102815,7 @@ static int sp_Pairing_x64_1024(const ecc_point* pm, const ecc_point* qm, mp_int* #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_16(c, 1, NULL); sp_1024_point_free_16(q, 1, NULL); @@ -103405,9 +103240,7 @@ static int sp_Pairing_x64_1024(const ecc_point* pm, const ecc_point* qm, mp_int* #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_16(c, 1, NULL); sp_1024_point_free_16(q, 1, NULL); @@ -103779,9 +103612,7 @@ static int sp_Pairing_avx2_1024(const ecc_point* pm, const ecc_point* qm, mp_int #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_16(c, 1, NULL); sp_1024_point_free_16(q, 1, NULL); @@ -104179,9 +104010,7 @@ static int sp_Pairing_avx2_1024(const ecc_point* pm, const ecc_point* qm, mp_int #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_16(c, 1, NULL); sp_1024_point_free_16(q, 1, NULL); @@ -104583,9 +104412,7 @@ static int sp_Pairing_gen_precomp_x64_1024(const ecc_point* pm, byte* table, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_16(neg, 1, NULL); sp_1024_point_free_16(c, 1, NULL); @@ -104778,9 +104605,7 @@ static int sp_Pairing_precomp_x64_1024(const ecc_point* pm, const ecc_point* qm, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_16(c, 1, NULL); sp_1024_point_free_16(q, 1, NULL); @@ -105120,9 +104945,7 @@ static int sp_Pairing_gen_precomp_avx2_1024(const ecc_point* pm, byte* table, #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_16(neg, 1, NULL); sp_1024_point_free_16(c, 1, NULL); @@ -105315,9 +105138,7 @@ static int sp_Pairing_precomp_avx2_1024(const ecc_point* pm, const ecc_point* qm #if (defined(WOLFSSL_SP_SMALL) && !defined(WOLFSSL_SP_NO_MALLOC)) || \ defined(WOLFSSL_SP_SMALL_STACK) - if (td != NULL) { - XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(td, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif sp_1024_point_free_16(c, 1, NULL); sp_1024_point_free_16(q, 1, NULL); @@ -105485,8 +105306,7 @@ static int sp_1024_ecc_is_point_16(const sp_point_1024* point, } #ifdef WOLFSSL_SP_SMALL_STACK - if (t1 != NULL) - XFREE(t1, heap, DYNAMIC_TYPE_ECC); + XFREE(t1, heap, DYNAMIC_TYPE_ECC); #endif return err; @@ -105525,8 +105345,7 @@ int sp_ecc_is_point_1024(const mp_int* pX, const mp_int* pY) } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return err; @@ -105647,10 +105466,8 @@ int sp_ecc_check_key_1024(const mp_int* pX, const mp_int* pY, } #ifdef WOLFSSL_SP_SMALL_STACK - if (pub != NULL) - XFREE(pub, heap, DYNAMIC_TYPE_ECC); - if (priv != NULL) - XFREE(priv, heap, DYNAMIC_TYPE_ECC); + XFREE(pub, heap, DYNAMIC_TYPE_ECC); + XFREE(priv, heap, DYNAMIC_TYPE_ECC); #endif return err; diff --git a/wolfcrypt/src/sp_x86_64_asm.asm b/wolfcrypt/src/sp_x86_64_asm.asm index 3eabea3f1a..784bf9c5f5 100644 --- a/wolfcrypt/src/sp_x86_64_asm.asm +++ b/wolfcrypt/src/sp_x86_64_asm.asm @@ -1,6 +1,6 @@ ; /* sp_x86_64_asm.asm */ ; /* -; * Copyright (C) 2006-2024 wolfSSL Inc. +; * Copyright (C) 2006-2024 wolfSSL Inc. ; * ; * This file is part of wolfSSL. ; * diff --git a/wolfcrypt/src/srp.c b/wolfcrypt/src/srp.c index 5216fecf3f..b06f62a808 100644 --- a/wolfcrypt/src/srp.c +++ b/wolfcrypt/src/srp.c @@ -656,7 +656,7 @@ static int wc_SrpSetKey(Srp* srp, byte* secret, word32 size) byte digest[SRP_MAX_DIGEST_SIZE]; word32 i, j, digestSz = SrpHashSize(srp->type); byte counter[4]; - int r = BAD_FUNC_ARG; + int r = WC_NO_ERR_TRACE(BAD_FUNC_ARG); XMEMSET(digest, 0, SRP_MAX_DIGEST_SIZE); @@ -903,10 +903,8 @@ int wc_SrpComputeKey(Srp* srp, byte* clientPubKey, word32 clientPubKeySz, } #ifdef WOLFSSL_SMALL_STACK - if (hash) - XFREE(hash, srp->heap, DYNAMIC_TYPE_SRP); - if (digest) - XFREE(digest, srp->heap, DYNAMIC_TYPE_SRP); + XFREE(hash, srp->heap, DYNAMIC_TYPE_SRP); + XFREE(digest, srp->heap, DYNAMIC_TYPE_SRP); if (u) { if (r != WC_NO_ERR_TRACE(MP_INIT_E)) mp_clear(u); diff --git a/wolfcrypt/src/tfm.c b/wolfcrypt/src/tfm.c index ccf15a5f43..753c747bee 100644 --- a/wolfcrypt/src/tfm.c +++ b/wolfcrypt/src/tfm.c @@ -5685,9 +5685,9 @@ int mp_rand_prime(mp_int* a, int len, WC_RNG* rng, void* heap) err = fp_randprime(a, len, rng, heap); switch(err) { - case FP_VAL: + case WC_NO_ERR_TRACE(MP_VAL): return MP_VAL; - case FP_MEM: + case WC_NO_ERR_TRACE(MP_MEM): return MP_MEM; default: break; diff --git a/wolfcrypt/src/wc_kyber.c b/wolfcrypt/src/wc_kyber.c index a99cd6c1e9..8e56bcc0e0 100644 --- a/wolfcrypt/src/wc_kyber.c +++ b/wolfcrypt/src/wc_kyber.c @@ -47,9 +47,9 @@ /******************************************************************************/ /* Use SHA3-256 to generate 32-bytes of hash. */ -#define KYBER_HASH_H wc_Sha3_256Hash +#define KYBER_HASH_H kyber_hash256 /* Use SHA3-512 to generate 64-bytes of hash. */ -#define KYBER_HASH_G wc_Sha3_512Hash +#define KYBER_HASH_G kyber_hash512 /* Use SHAKE-256 as a key derivation function (KDF). */ #ifdef USE_INTEL_SPEEDUP #define KYBER_KDF kyber_kdf @@ -123,6 +123,10 @@ int wc_KyberKey_Init(int type, KyberKey* key, void* heap, int devId) key->devId = devId; #endif + /* Initialize the hash algorithm object. */ + ret = kyber_hash_new(&key->hash, heap, devId); + } + if (ret == 0) { /* Initialize the PRF algorithm object. */ ret = kyber_prf_new(&key->prf, heap, devId); } @@ -145,6 +149,8 @@ void wc_KyberKey_Free(KyberKey* key) if (key != NULL) { /* Dispose of PRF object. */ kyber_prf_free(&key->prf); + /* Dispose of hash object. */ + kyber_hash_free(&key->hash); /* Ensure all private data is zeroed. */ ForceZero(key, sizeof(*key)); } @@ -254,18 +260,28 @@ int wc_KyberKey_MakeKeyWithRandom(KyberKey* key, const unsigned char* rand, } } if (ret == 0) { + const byte* d = rand; + /* Error vector allocated at end of a. */ e = a + (kp * kp * KYBER_N); - /* Expand 16 bytes of random to 32. */ - ret = KYBER_HASH_G(rand, KYBER_SYM_SZ, buf); +#ifdef WOLFSSL_KYBER_ORIGINAL + /* Expand 32 bytes of random to 32. */ + ret = KYBER_HASH_G(&key->hash, d, KYBER_SYM_SZ, NULL, 0, buf); +#else + buf[0] = kp; + /* Expand 33 bytes of random to 32. */ + ret = KYBER_HASH_G(&key->hash, d, KYBER_SYM_SZ, buf, 1, buf); +#endif } if (ret == 0) { + const byte* z = rand + KYBER_SYM_SZ; + /* Cache the public seed for use in encapsulation and encoding public * key. */ XMEMCPY(key->pubSeed, pubSeed, KYBER_SYM_SZ); /* Cache the z value for decapsulation and encoding private key. */ - XMEMCPY(key->z, rand + KYBER_SYM_SZ, sizeof(key->z)); + XMEMCPY(key->z, z, sizeof(key->z)); /* Generate the matrix A. */ ret = kyber_gen_matrix(&key->prf, a, kp, pubSeed, 0); @@ -286,7 +302,7 @@ int wc_KyberKey_MakeKeyWithRandom(KyberKey* key, const unsigned char* rand, } /* Free dynamic memory allocated in function. */ - if (a != NULL) { + if (key != NULL) { XFREE(a, key->heap, DYNAMIC_TYPE_TMP_BUFFER); } @@ -377,11 +393,7 @@ static int kyberkey_encapsulate(KyberKey* key, const byte* msg, byte* coins, sword16* epp = NULL; unsigned int kp = 0; unsigned int compVecSz = 0; -#ifndef USE_INTEL_SPEEDUP sword16* at = NULL; -#else - sword16 at[((KYBER_MAX_K + 3) * KYBER_MAX_K + 3) * KYBER_N]; -#endif /* Establish parameters based on key type. */ switch (key->type) { @@ -409,7 +421,6 @@ static int kyberkey_encapsulate(KyberKey* key, const byte* msg, byte* coins, break; } -#ifndef USE_INTEL_SPEEDUP if (ret == 0) { /* Allocate dynamic memory for all matrices, vectors and polynomials. */ at = (sword16*)XMALLOC(((kp + 3) * kp + 3) * KYBER_N * sizeof(sword16), @@ -418,7 +429,6 @@ static int kyberkey_encapsulate(KyberKey* key, const byte* msg, byte* coins, ret = MEMORY_E; } } -#endif if (ret == 0) { /* Assign allocated dynamic memory to pointers. @@ -472,10 +482,8 @@ static int kyberkey_encapsulate(KyberKey* key, const byte* msg, byte* coins, #endif } -#ifndef USE_INTEL_SPEEDUP /* Dispose of dynamic memory allocated in function. */ XFREE(at, key->heap, DYNAMIC_TYPE_TMP_BUFFER); -#endif return ret; } @@ -532,10 +540,12 @@ int wc_KyberKey_Encapsulate(KyberKey* key, unsigned char* ct, unsigned char* ss, int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, unsigned char* ct, unsigned char* ss, const unsigned char* rand, int len) { - byte msg[2 * KYBER_SYM_SZ]; +#ifdef WOLFSSL_KYBER_ORIGINAL + byte msg[KYBER_SYM_SZ]; +#endif byte kr[2 * KYBER_SYM_SZ + 1]; int ret = 0; -#ifndef WOLFSSL_ML_KEM +#ifdef WOLFSSL_KYBER_ORIGINAL unsigned int ctSz = 0; #endif @@ -547,7 +557,7 @@ int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, unsigned char* ct, ret = BUFFER_E; } -#ifndef WOLFSSL_ML_KEM +#ifdef WOLFSSL_KYBER_ORIGINAL if (ret == 0) { /* Establish parameters based on key type. */ switch (key->type) { @@ -601,31 +611,32 @@ int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, unsigned char* ct, ret = BAD_STATE_E; } +#ifdef WOLFSSL_KYBER_ORIGINAL if (ret == 0) { -#ifndef WOLFSSL_ML_KEM /* Hash random to anonymize as seed data. */ - ret = KYBER_HASH_H(rand, KYBER_SYM_SZ, msg); -#else - XMEMCPY(msg, rand, KYBER_SYM_SZ); -#endif + ret = KYBER_HASH_H(&key->hash, rand, KYBER_SYM_SZ, msg); } +#endif if (ret == 0) { - /* Copy the hash of the public key into msg. */ - XMEMCPY(msg + KYBER_SYM_SZ, key->h, KYBER_SYM_SZ); - /* Hash message into seed buffer. */ - ret = KYBER_HASH_G(msg, 2 * KYBER_SYM_SZ, kr); +#ifdef WOLFSSL_KYBER_ORIGINAL + ret = KYBER_HASH_G(&key->hash, msg, KYBER_SYM_SZ, key->h, KYBER_SYM_SZ, + kr); +#else + ret = KYBER_HASH_G(&key->hash, rand, KYBER_SYM_SZ, key->h, KYBER_SYM_SZ, + kr); +#endif } if (ret == 0) { /* Encapsulate the message using the key and the seed (coins). */ - ret = kyberkey_encapsulate(key, msg, kr + KYBER_SYM_SZ, ct); + ret = kyberkey_encapsulate(key, rand, kr + KYBER_SYM_SZ, ct); } -#ifndef WOLFSSL_ML_KEM +#ifdef WOLFSSL_KYBER_ORIGINAL if (ret == 0) { /* Hash the cipher text after the seed. */ - ret = KYBER_HASH_H(ct, ctSz, kr + KYBER_SYM_SZ); + ret = KYBER_HASH_H(&key->hash, ct, ctSz, kr + KYBER_SYM_SZ); } if (ret == 0) { /* Derive the secret from the seed and hash of cipher text. */ @@ -741,7 +752,7 @@ static KYBER_NOINLINE int kyberkey_decapsulate(KyberKey* key, return ret; } -#ifdef WOLFSSL_ML_KEM +#ifndef WOLFSSL_KYBER_ORIGINAL /* Derive the secret from z and cipher text. * * @param [in] z Implicit rejection value. @@ -792,7 +803,7 @@ static int kyber_derive_secret(const byte* z, const byte* ct, word32 ctSz, int wc_KyberKey_Decapsulate(KyberKey* key, unsigned char* ss, const unsigned char* ct, word32 len) { - byte msg[2 * KYBER_SYM_SZ]; + byte msg[KYBER_SYM_SZ]; byte kr[2 * KYBER_SYM_SZ + 1]; int ret = 0; unsigned int ctSz = 0; @@ -854,10 +865,9 @@ int wc_KyberKey_Decapsulate(KyberKey* key, unsigned char* ss, ret = kyberkey_decapsulate(key, msg, ct); } if (ret == 0) { - /* Copy public hash over after the seed. */ - XMEMCPY(msg + KYBER_SYM_SZ, key->h, KYBER_SYM_SZ); /* Hash message into seed buffer. */ - ret = KYBER_HASH_G(msg, 2 * KYBER_SYM_SZ, kr); + ret = KYBER_HASH_G(&key->hash, msg, KYBER_SYM_SZ, key->h, KYBER_SYM_SZ, + kr); } if (ret == 0) { /* Encapsulate the message. */ @@ -867,9 +877,9 @@ int wc_KyberKey_Decapsulate(KyberKey* key, unsigned char* ss, /* Compare generated cipher text with that passed in. */ fail = kyber_cmp(ct, cmp, ctSz); -#ifndef WOLFSSL_ML_KEM +#ifdef WOLFSSL_KYBER_ORIGINAL /* Hash the cipher text after the seed. */ - ret = KYBER_HASH_H(ct, ctSz, kr + KYBER_SYM_SZ); + ret = KYBER_HASH_H(&key->hash, ct, ctSz, kr + KYBER_SYM_SZ); } if (ret == 0) { /* Change seed to z on comparison failure. */ @@ -892,7 +902,7 @@ int wc_KyberKey_Decapsulate(KyberKey* key, unsigned char* ss, #ifndef USE_INTEL_SPEEDUP /* Dispose of dynamic memory allocated in function. */ - if (cmp != NULL) { + if (key != NULL) { XFREE(cmp, key->heap, DYNAMIC_TYPE_TMP_BUFFER); } #endif @@ -1056,7 +1066,7 @@ int wc_KyberKey_DecodePublicKey(KyberKey* key, const unsigned char* in, key->pubSeed[i] = p[i]; } /* Calculate public hash. */ - ret = KYBER_HASH_H(in, len, key->h); + ret = KYBER_HASH_H(&key->hash, in, len, key->h); } if (ret == 0) { /* Record public key and public hash set. */ @@ -1234,7 +1244,7 @@ int wc_KyberKey_EncodePrivateKey(KyberKey* key, unsigned char* out, word32 len) } /* Ensure hash of public key is available. */ if ((ret == 0) && ((key->flags & KYBER_FLAG_H_SET) == 0)) { - ret = KYBER_HASH_H(p - pubLen, pubLen, key->h); + ret = KYBER_HASH_H(&key->hash, p - pubLen, pubLen, key->h); } if (ret == 0) { /* Public hash is available. */ @@ -1321,7 +1331,7 @@ int wc_KyberKey_EncodePublicKey(KyberKey* key, unsigned char* out, word32 len) /* Make sure public hash is set. */ if ((key->flags & KYBER_FLAG_H_SET) == 0) { - ret = KYBER_HASH_H(out, len, key->h); + ret = KYBER_HASH_H(&key->hash, out, len, key->h); } } if (ret == 0) { diff --git a/wolfcrypt/src/wc_kyber_asm.S b/wolfcrypt/src/wc_kyber_asm.S index 9dff0f7bd1..59eb8333b9 100644 --- a/wolfcrypt/src/wc_kyber_asm.S +++ b/wolfcrypt/src/wc_kyber_asm.S @@ -1581,7 +1581,7 @@ _kyber_keygen_avx2: #endif /* __APPLE__ */ vmovdqu kyber_q(%rip), %ymm14 vmovdqu kyber_v(%rip), %ymm15 - movq %r8, %r9 + movslq %r8d, %r9 movq %rdi, %r10 L_kyber_keygen_avx2_priv: # ntt @@ -2242,11 +2242,11 @@ L_kyber_keygen_avx2_priv: subq $0x01, %r9 jg L_kyber_keygen_avx2_priv vmovdqu kyber_qinv(%rip), %ymm13 - movq %r8, %rax + movslq %r8d, %rax movq %rsi, %r10 L_kyber_keygen_avx2_acc: # Pointwise acc mont - movq %r8, %r9 + movslq %r8d, %r9 # Base mul mont leaq L_kyber_avx2_zetas_basemul(%rip), %r11 vmovdqu (%rcx), %ymm2 @@ -3417,16 +3417,16 @@ L_pointwise_acc_mont_end_keygen: vmovdqu %ymm1, 480(%r10) addq $0x200, %rcx addq $0x200, %rdi - movq %r8, %r9 + movslq %r8d, %r9 shl $9, %r9d subq %r9, %rdi addq $0x200, %r10 subq $0x01, %rax jg L_kyber_keygen_avx2_acc - movq %r8, %rax + movslq %r8d, %rax vmovdqu kyber_f(%rip), %ymm12 vmovdqu kyber_f_qinv(%rip), %ymm13 - movq %r8, %rax + movslq %r8d, %rax movq %rsi, %r10 L_kyber_keygen_avx2_to_mont: # To Mont @@ -3529,7 +3529,7 @@ L_kyber_keygen_avx2_to_mont: addq $0x200, %r10 subq $0x01, %rax jg L_kyber_keygen_avx2_to_mont - movq %r8, %rax + movslq %r8d, %rax L_kyber_keygen_avx2_to_mont_ntt_err: # ntt leaq L_kyber_avx2_zetas(%rip), %r11 @@ -4281,7 +4281,7 @@ _kyber_encapsulate_avx2: subq $48, %rsp vmovdqu kyber_q(%rip), %ymm14 vmovdqu kyber_v(%rip), %ymm15 - movq %r11, %r13 + movslq %r11d, %r13 movq %r8, %r14 L_kyber_encapsulate_avx2_trans: # ntt @@ -4877,11 +4877,11 @@ L_kyber_encapsulate_avx2_trans: addq $0x200, %r14 subq $0x01, %r13 jg L_kyber_encapsulate_avx2_trans - movq %r11, %r12 + movslq %r11d, %r12 L_kyber_encapsulate_avx2_calc: vmovdqu kyber_qinv(%rip), %ymm12 # Pointwise acc mont - movq %r11, %r13 + movslq %r11d, %r13 # Base mul mont leaq L_kyber_avx2_zetas_basemul(%rip), %r15 vmovdqu (%rcx), %ymm2 @@ -6052,7 +6052,7 @@ L_pointwise_acc_mont_end_encap_bp: vmovdqu %ymm1, 480(%rsi) addq $0x200, %rcx addq $0x200, %r8 - movq %r11, %r13 + movslq %r11d, %r13 shl $9, %r13d subq %r13, %r8 # invntt @@ -6911,7 +6911,7 @@ L_pointwise_acc_mont_end_encap_bp: jg L_kyber_encapsulate_avx2_calc vmovdqu kyber_qinv(%rip), %ymm12 # Pointwise acc mont - movq %r11, %r13 + movslq %r11d, %r13 # Base mul mont leaq L_kyber_avx2_zetas_basemul(%rip), %r15 vmovdqu (%rdi), %ymm2 @@ -8082,7 +8082,7 @@ L_pointwise_acc_mont_end_encap_v: vmovdqu %ymm1, 480(%rdx) addq $0x200, %rdi addq $0x200, %r8 - movq %r11, %r13 + movslq %r11d, %r13 shl $9, %r13d subq %r13, %r8 # invntt @@ -9024,7 +9024,7 @@ _kyber_decapsulate_avx2: #endif /* __APPLE__ */ vmovdqu kyber_q(%rip), %ymm14 vmovdqu kyber_v(%rip), %ymm15 - movq %r8, %rax + movslq %r8d, %rax movq %rdx, %r9 L_kyber_decapsulate_avx2_trans: # ntt @@ -9686,7 +9686,7 @@ L_kyber_decapsulate_avx2_trans: jg L_kyber_decapsulate_avx2_trans vmovdqu kyber_qinv(%rip), %ymm12 # Pointwise acc mont - movq %r8, %rax + movslq %r8d, %rax # Base mul mont leaq L_kyber_avx2_zetas_basemul(%rip), %r10 vmovdqu (%rdi), %ymm2 @@ -10857,7 +10857,7 @@ L_pointwise_acc_mont_end_decap: vmovdqu %ymm1, 480(%rsi) addq $0x200, %rdi addq $0x200, %rdx - movq %r8, %rax + movslq %r8d, %rax shl $9, %eax subq %rax, %rdx # invntt diff --git a/wolfcrypt/src/wc_kyber_poly.c b/wolfcrypt/src/wc_kyber_poly.c index aed437c29f..cf8a5b03e5 100644 --- a/wolfcrypt/src/wc_kyber_poly.c +++ b/wolfcrypt/src/wc_kyber_poly.c @@ -57,6 +57,10 @@ * some platforms and is smaller in code size. */ +#ifdef HAVE_CONFIG_H + #include +#endif + #include #include #include @@ -1607,6 +1611,55 @@ static int kyber_xof_squeezeblocks(wc_Shake* shake128, byte* out, int blocks) return wc_Shake128_SqueezeBlocks(shake128, out, blocks); } +/* New/Initialize SHA-3 object. + * + * @param [in, out] hash SHA-3 object. + * @param [in] heap Dynamic memory allocator hint. + * @param [in] devId Device id. + * @return 0 on success always. + */ +int kyber_hash_new(wc_Sha3* hash, void* heap, int devId) +{ + return wc_InitSha3_256(hash, heap, devId); +} + +/* Free SHA-3 object. + * + * @param [in, out] hash SHA-3 object. + */ +void kyber_hash_free(wc_Sha3* hash) +{ + wc_Sha3_256_Free(hash); +} + +int kyber_hash256(wc_Sha3* hash, const byte* data, word32 dataLen, byte* out) +{ + int ret; + + ret = wc_Sha3_256_Update(hash, data, dataLen); + if (ret == 0) { + ret = wc_Sha3_256_Final(hash, out); + } + + return ret; +} + +int kyber_hash512(wc_Sha3* hash, const byte* data1, word32 data1Len, + const byte* data2, word32 data2Len, byte* out) +{ + int ret; + + ret = wc_Sha3_512_Update(hash, data1, data1Len); + if ((ret == 0) && (data2Len > 0)) { + ret = wc_Sha3_512_Update(hash, data2, data2Len); + } + if (ret == 0) { + ret = wc_Sha3_512_Final(hash, out); + } + + return ret; +} + /* Initialize SHAKE-256 object. * * @param [in, out] shake256 SHAKE-256 object. diff --git a/wolfcrypt/src/wc_lms_impl.c b/wolfcrypt/src/wc_lms_impl.c index 3f48420b4a..86037d4646 100644 --- a/wolfcrypt/src/wc_lms_impl.c +++ b/wolfcrypt/src/wc_lms_impl.c @@ -37,6 +37,10 @@ * Enable when memory is limited. */ +#ifdef HAVE_CONFIG_H + #include +#endif + #include #include diff --git a/wolfcrypt/src/wc_pkcs11.c b/wolfcrypt/src/wc_pkcs11.c index a7b00f8ade..78d78dc1a9 100644 --- a/wolfcrypt/src/wc_pkcs11.c +++ b/wolfcrypt/src/wc_pkcs11.c @@ -559,9 +559,7 @@ static int Pkcs11Slot_FindByTokenName(Pkcs11Dev* dev, } out: - if (slot != NULL) { - XFREE(slot, dev->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(slot, dev->heap, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -629,9 +627,7 @@ static int Pkcs11Token_Init(Pkcs11Token* token, Pkcs11Dev* dev, int slotId, token->userPinLogin = 0; } - if (slot != NULL) { - XFREE(slot, dev->heap, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(slot, dev->heap, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -1154,8 +1150,7 @@ static int Pkcs11CreateEccPublicKey(CK_OBJECT_HANDLE* publicKey, } } - if (ecPoint != NULL) - XFREE(ecPoint, public_key->heap, DYNAMIC_TYPE_ECC); + XFREE(ecPoint, public_key->heap, DYNAMIC_TYPE_ECC); return ret; } @@ -1732,10 +1727,8 @@ static int Pkcs11GetRsaPublicKey(RsaKey* key, Pkcs11Session* session, if (ret == 0) ret = wc_RsaPublicKeyDecodeRaw(mod, modSz, exp, expSz, key); - if (exp != NULL) - XFREE(exp, key->heap, DYNAMIC_TYPE_TMP_BUFFER); - if (mod != NULL) - XFREE(mod, key->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(exp, key->heap, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(mod, key->heap, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -2238,8 +2231,7 @@ static int Pkcs11FindEccKey(CK_OBJECT_HANDLE* key, CK_OBJECT_CLASS keyClass, } } - if (ecPoint != NULL) - XFREE(ecPoint, eccKey->heap, DYNAMIC_TYPE_ECC); + XFREE(ecPoint, eccKey->heap, DYNAMIC_TYPE_ECC); return ret; } @@ -2322,8 +2314,7 @@ static int Pkcs11GetEccPublicKey(ecc_key* key, Pkcs11Session* session, key->type = ECC_PUBLICKEY; } - if (point != NULL) - XFREE(point, key->heap, DYNAMIC_TYPE_ECC); + XFREE(point, key->heap, DYNAMIC_TYPE_ECC); return ret; } @@ -3008,9 +2999,7 @@ static int wc_Pkcs11CheckPrivKey_Rsa(RsaKey* priv, wc_FreeRsaKey(pub); } #ifdef WOLFSSL_SMALL_STACK - if (pub != NULL) { - XFREE(pub, NULL, DYNAMIC_TYPE_RSA); - } + XFREE(pub, NULL, DYNAMIC_TYPE_RSA); #endif return ret; @@ -3155,9 +3144,7 @@ static int wc_Pkcs11CheckPrivKey_Ecc(ecc_key* priv, wc_ecc_free(pub); } #ifdef WOLFSSL_SMALL_STACK - if (pub != NULL) { - XFREE(pub, NULL, DYNAMIC_TYPE_ECC); - } + XFREE(pub, NULL, DYNAMIC_TYPE_ECC); #endif return ret; diff --git a/wolfcrypt/src/wc_port.c b/wolfcrypt/src/wc_port.c index 32571585ec..294bc415c6 100644 --- a/wolfcrypt/src/wc_port.c +++ b/wolfcrypt/src/wc_port.c @@ -1183,7 +1183,7 @@ char* wc_strdup_ex(const char *src, int memType) { word32 len = 0; if (src) { - len = (word32)XSTRLEN(src); + len = (word32)XSTRLEN(src) + 1; /* Add one for null terminator */ ret = (char*)XMALLOC(len, NULL, memType); if (ret != NULL) { XMEMCPY(ret, src, len); diff --git a/wolfcrypt/src/wolfmath.c b/wolfcrypt/src/wolfmath.c index eb5f5419cf..b7853dd8fd 100644 --- a/wolfcrypt/src/wolfmath.c +++ b/wolfcrypt/src/wolfmath.c @@ -358,9 +358,7 @@ void wc_bigint_zero(WC_BIGINT* a) void wc_bigint_free(WC_BIGINT* a) { if (a) { - if (a->buf) { - XFREE(a->buf, a->heap, DYNAMIC_TYPE_WOLF_BIGINT); - } + XFREE(a->buf, a->heap, DYNAMIC_TYPE_WOLF_BIGINT); a->buf = NULL; a->len = 0; } diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index 59d415883e..31504cff9f 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -37,6 +37,10 @@ #endif #include +#ifdef WOLFSSL_DEBUG_TRACE_ERROR_CODES + #define WOLFSSL_DEBUG_TRACE_ERROR_CODES_ALWAYS +#endif + #ifndef NO_CRYPT_TEST #include @@ -735,7 +739,7 @@ void printOutput(const char *strName, unsigned char *data, unsigned int dataSz); WOLFSSL_TEST_SUBROUTINE int ariagcm_test(MC_ALGID); #endif -#ifdef WOLF_CRYPTO_CB +#if defined(WOLF_CRYPTO_CB) && !defined(WC_TEST_NO_CRYPTOCB_SW_TEST) WOLFSSL_TEST_SUBROUTINE wc_test_ret_t cryptocb_test(void); #endif #ifdef WOLFSSL_CERT_PIV @@ -891,7 +895,7 @@ static void myFipsCb(int ok, int err, const char* hash) printf("message = %s\n", wc_GetErrorString(err)); printf("hash = %s\n", hash); - if (err == IN_CORE_FIPS_E) { + if (err == WC_NO_ERR_TRACE(IN_CORE_FIPS_E)) { printf("In core integrity hash check failure, copy above hash\n"); printf("into verifyCore[] in fips_test.c and rebuild\n"); } @@ -936,7 +940,7 @@ static int wolfssl_pb_print(const char* msg, ...) /* Enable support for RNG with crypto callback */ static int rng_crypto_cb(int thisDevId, wc_CryptoInfo* info, void* ctx) { - int rc = CRYPTOCB_UNAVAILABLE; + int rc = WC_NO_ERR_TRACE(CRYPTOCB_UNAVAILABLE); if (info->algo_type == WC_ALGO_TYPE_RNG) { rc = wc_GenerateSeed(&info->rng.rng->seed, info->rng.out, info->rng.sz); } @@ -1263,11 +1267,11 @@ static WOLFSSL_TEST_SUBROUTINE wc_test_ret_t nist_sp80056c_kdf_test(void) /* negative tests */ ret = wc_KDA_KDF_onestep(NULL, 0, (byte*)"fixed_info", sizeof("fixed_info"), 16, WC_HASH_TYPE_SHA256, output, 16); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_NC; ret = wc_KDA_KDF_onestep((byte*)"secret", sizeof("secret"), NULL, 1, 16, WC_HASH_TYPE_SHA256, output, 16); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_NC; /* allow empty FixedInfo */ @@ -2321,7 +2325,7 @@ options: [-s max_relative_stack_bytes] [-m max_relative_heap_memory_bytes]\n\ TEST_PASS("blob test passed!\n"); #endif -#if defined(WOLF_CRYPTO_CB) && \ +#if defined(WOLF_CRYPTO_CB) && !defined(WC_TEST_NO_CRYPTOCB_SW_TEST) && \ !(defined(HAVE_INTEL_QAT_SYNC) || defined(HAVE_CAVIUM_OCTEON_SYNC) || \ defined(WOLFSSL_QNX_CAAM) || defined(HAVE_RENESAS_SYNC)) if ( (ret = cryptocb_test()) != 0) @@ -2559,7 +2563,7 @@ static wc_test_ret_t _SaveDerAndPem(const byte* der, int derSz, return WC_TEST_RET_ENC(calling_line, 2, WC_TEST_RET_TAG_I); } #ifndef WOLFSSL_NO_MALLOC - pem = (byte*)XMALLOC(pemSz, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + pem = (byte*)XMALLOC((word32)pemSz, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); if (pem == NULL) { return WC_TEST_RET_ENC(calling_line, 3, WC_TEST_RET_TAG_I); } @@ -2568,7 +2572,7 @@ static wc_test_ret_t _SaveDerAndPem(const byte* der, int derSz, return BAD_FUNC_ARG; #endif /* Convert to PEM */ - pemSz = wc_DerToPem(der, (word32)derSz, pem, pemSz, pemType); + pemSz = wc_DerToPem(der, (word32)derSz, pem, (word32)pemSz, pemType); if (pemSz < 0) { XFREE(pem, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); return WC_TEST_RET_ENC(calling_line, 4, WC_TEST_RET_TAG_I); @@ -2623,40 +2627,53 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t error_test(void) int i; int j = 0; /* Values that are not or no longer error codes. */ - int missing[] = { -124, -166, -167, -168, -169, 0 }; + static const struct { + int first; + int last; + } missing[] = { + { -124, -124 }, + { -166, -169 } + }; /* Check that all errors have a string and it's the same through the two * APIs. Check that the values that are not errors map to the unknown * string. */ - for (i = MAX_CODE_E-1; i >= WC_LAST_E; i--) { + for (i = WC_FIRST_E; i >= WC_LAST_E; i--) { + int this_missing = 0; + for (j = 0; j < (int)XELEM_CNT(missing); ++j) { + if ((i <= missing[j].first) && (i >= missing[j].last)) { + this_missing = 1; + break; + } + } errStr = wc_GetErrorString(i); wc_ErrorString(i, out); - if (i != missing[j]) { + if (! this_missing) { if (XSTRCMP(errStr, unknownStr) == 0) { WOLFSSL_MSG("errStr unknown"); - return WC_TEST_RET_ENC_NC; + return WC_TEST_RET_ENC_I(-i); } if (XSTRCMP(out, unknownStr) == 0) { WOLFSSL_MSG("out unknown"); - return WC_TEST_RET_ENC_NC; + return WC_TEST_RET_ENC_I(-i); } if (XSTRCMP(errStr, out) != 0) { WOLFSSL_MSG("errStr does not match output"); - return WC_TEST_RET_ENC_NC; + return WC_TEST_RET_ENC_I(-i); } if (XSTRLEN(errStr) >= WOLFSSL_MAX_ERROR_SZ) { WOLFSSL_MSG("errStr too long"); - return WC_TEST_RET_ENC_NC; + return WC_TEST_RET_ENC_I(-i); } } else { j++; if (XSTRCMP(errStr, unknownStr) != 0) - return WC_TEST_RET_ENC_NC; + return WC_TEST_RET_ENC_I(-i); if (XSTRCMP(out, unknownStr) != 0) - return WC_TEST_RET_ENC_NC; + return WC_TEST_RET_ENC_I(-i); } } @@ -2724,25 +2741,25 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t base64_test(void) /* Bad parameters. */ outLen = 1; ret = Base64_Decode(good, sizeof(good), out, &outLen); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); outLen = sizeof(out); ret = Base64_Decode(badEOL, sizeof(badEOL), out, &outLen); - if (ret != ASN_INPUT_E) + if (ret != WC_NO_ERR_TRACE(ASN_INPUT_E)) return WC_TEST_RET_ENC_EC(ret); outLen = sizeof(out); ret = Base64_Decode(badPadding, sizeof(badPadding), out, &outLen); - if (ret != ASN_INPUT_E) + if (ret != WC_NO_ERR_TRACE(ASN_INPUT_E)) return WC_TEST_RET_ENC_EC(ret); /* Bad character at each offset 0-3. */ for (i = 0; i < 4; i++) { outLen = sizeof(out); ret = Base64_Decode(badSmall + i, 4, out, &outLen); - if (ret != ASN_INPUT_E) + if (ret != WC_NO_ERR_TRACE(ASN_INPUT_E)) return WC_TEST_RET_ENC_I(i); ret = Base64_Decode(badLarge + i, 4, out, &outLen); - if (ret != ASN_INPUT_E) + if (ret != WC_NO_ERR_TRACE(ASN_INPUT_E)) return WC_TEST_RET_ENC_I(i); } /* Invalid character less than 0x2b */ @@ -2750,7 +2767,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t base64_test(void) outLen = sizeof(out); charTest[0] = (byte)i; ret = Base64_Decode(charTest, sizeof(charTest), out, &outLen); - if (ret != ASN_INPUT_E) + if (ret != WC_NO_ERR_TRACE(ASN_INPUT_E)) return WC_TEST_RET_ENC_I(i); } /* Bad characters in range 0x2b - 0x7a. */ @@ -2758,7 +2775,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t base64_test(void) outLen = sizeof(out); charTest[0] = badChar[i]; ret = Base64_Decode(charTest, sizeof(charTest), out, &outLen); - if (ret != ASN_INPUT_E) + if (ret != WC_NO_ERR_TRACE(ASN_INPUT_E)) return WC_TEST_RET_ENC_I(i); } /* Invalid character greater than 0x7a */ @@ -2766,7 +2783,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t base64_test(void) outLen = sizeof(out); charTest[0] = (byte)i; ret = Base64_Decode(charTest, sizeof(charTest), out, &outLen); - if (ret != ASN_INPUT_E) + if (ret != WC_NO_ERR_TRACE(ASN_INPUT_E)) return WC_TEST_RET_ENC_I(i); } @@ -2779,7 +2796,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t base64_test(void) return WC_TEST_RET_ENC_EC(ret); outLen = sizeof(out); ret = Base64_Encode(data, dataLen, NULL, &outLen); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); outLen = sizeof(out); ret = Base64_Encode(data, dataLen, out, &outLen); @@ -2787,11 +2804,11 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t base64_test(void) return WC_TEST_RET_ENC_EC(ret); outLen = 7; ret = Base64_EncodeEsc(data, dataLen, out, &outLen); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); outLen = sizeof(out); ret = Base64_EncodeEsc(data, dataLen, NULL, &outLen); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); outLen = sizeof(out); ret = Base64_EncodeEsc(data, dataLen, out, &outLen); @@ -2886,9 +2903,9 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t asn_test(void) #ifndef NO_ASN_TIME /* Parameter Validation tests. */ - if ((ret = wc_GetTime(NULL, sizeof(now))) != BAD_FUNC_ARG) + if ((ret = wc_GetTime(NULL, sizeof(now))) != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); - if ((ret = wc_GetTime(&now, 0)) != BUFFER_E) + if ((ret = wc_GetTime(&now, 0)) != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); now = 0; @@ -5336,8 +5353,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t shake128_test(void) wc_Shake128_Free(&sha); #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (large_input != NULL) - XFREE(large_input, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(large_input, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; @@ -5675,8 +5691,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t shake256_test(void) wc_Shake256_Free(&sha); #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (large_input != NULL) - XFREE(large_input, NULL, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(large_input, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; @@ -5909,37 +5924,37 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hash_test(void) /* Parameter Validation testing. */ ret = wc_HashInit(NULL, WC_HASH_TYPE_SHA256); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashUpdate(NULL, WC_HASH_TYPE_SHA256, NULL, sizeof(data)); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashUpdate(&hash, WC_HASH_TYPE_SHA256, NULL, sizeof(data)); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashUpdate(NULL, WC_HASH_TYPE_SHA256, data, sizeof(data)); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashFinal(NULL, WC_HASH_TYPE_SHA256, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashFinal(&hash, WC_HASH_TYPE_SHA256, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashFinal(NULL, WC_HASH_TYPE_SHA256, out); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); /* Try invalid hash algorithms. */ for (i = 0; i < (int)(sizeof(typesBad)/sizeof(*typesBad)); i++) { ret = wc_HashInit(&hash, typesBad[i]); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_I(i); ret = wc_HashUpdate(&hash, typesBad[i], data, sizeof(data)); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_I(i); ret = wc_HashFinal(&hash, typesBad[i], out); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_I(i); wc_HashFree(&hash, typesBad[i]); } @@ -5971,7 +5986,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hash_test(void) if (exp_ret == 0) { ret = wc_Hash(typesGood[i], data, sizeof(data), hashOut, digestSz - 1); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_I(i); } ret = wc_Hash(typesGood[i], data, sizeof(data), hashOut, (word32)digestSz); @@ -5988,9 +6003,9 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hash_test(void) #if !defined(NO_ASN) || !defined(NO_DH) || defined(HAVE_ECC) ret = wc_HashGetOID(typesGood[i]); - if (ret == BAD_FUNC_ARG || - (exp_ret == 0 && ret == HASH_TYPE_E) || - (exp_ret != 0 && ret != HASH_TYPE_E)) { + if (ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG) || + (exp_ret == 0 && ret == WC_NO_ERR_TRACE(HASH_TYPE_E)) || + (exp_ret != 0 && ret != WC_NO_ERR_TRACE(HASH_TYPE_E))) { return WC_TEST_RET_ENC_I(i); } @@ -6002,17 +6017,24 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hash_test(void) for (i = 0; i < (int)(sizeof(typesHashBad)/sizeof(*typesHashBad)); i++) { ret = wc_Hash(typesHashBad[i], data, sizeof(data), out, sizeof(out)); - if ((ret != BAD_FUNC_ARG) && (ret != BUFFER_E) && (ret != HASH_TYPE_E)) + if ((ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) && + (ret != WC_NO_ERR_TRACE(BUFFER_E)) && + (ret != WC_NO_ERR_TRACE(HASH_TYPE_E))) + { return WC_TEST_RET_ENC_I(i); + } } #if !defined(NO_ASN) || !defined(NO_DH) || defined(HAVE_ECC) ret = wc_HashGetOID(WC_HASH_TYPE_MD2); #ifdef WOLFSSL_MD2 - if (ret == HASH_TYPE_E || ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(HASH_TYPE_E) || + ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) + { return WC_TEST_RET_ENC_EC(ret); + } #else - if (ret != HASH_TYPE_E) + if (ret != WC_NO_ERR_TRACE(HASH_TYPE_E)) return WC_TEST_RET_ENC_EC(ret); #endif hashType = wc_OidGetHash(646); /* Md2h */ @@ -6026,17 +6048,20 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hash_test(void) ret = wc_HashGetOID(WC_HASH_TYPE_MD5_SHA); #ifndef NO_MD5 - if (ret == HASH_TYPE_E || ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(HASH_TYPE_E) || + ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) + { return WC_TEST_RET_ENC_EC(ret); + } #else - if (ret != HASH_TYPE_E) + if (ret != WC_NO_ERR_TRACE(HASH_TYPE_E)) return WC_TEST_RET_ENC_EC(ret); #endif ret = wc_HashGetOID(WC_HASH_TYPE_MD4); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashGetOID(WC_HASH_TYPE_NONE); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); hashType = wc_OidGetHash(0); @@ -6046,68 +6071,89 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hash_test(void) ret = wc_HashGetBlockSize(WC_HASH_TYPE_MD2); #ifdef WOLFSSL_MD2 - if (ret == HASH_TYPE_E || ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(HASH_TYPE_E) || + ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) + { return WC_TEST_RET_ENC_EC(ret); + } #else - if (ret != HASH_TYPE_E) + if (ret != WC_NO_ERR_TRACE(HASH_TYPE_E)) return WC_TEST_RET_ENC_EC(ret); #endif ret = wc_HashGetDigestSize(WC_HASH_TYPE_MD2); #ifdef WOLFSSL_MD2 - if (ret == HASH_TYPE_E || ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(HASH_TYPE_E) || + ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) + { return WC_TEST_RET_ENC_EC(ret); + } #else - if (ret != HASH_TYPE_E) + if (ret != WC_NO_ERR_TRACE(HASH_TYPE_E)) return WC_TEST_RET_ENC_EC(ret); #endif ret = wc_HashGetBlockSize(WC_HASH_TYPE_MD4); #ifndef NO_MD4 - if (ret == HASH_TYPE_E || ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(HASH_TYPE_E) || + ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) + { return WC_TEST_RET_ENC_EC(ret); + } #else - if (ret != HASH_TYPE_E) + if (ret != WC_NO_ERR_TRACE(HASH_TYPE_E)) return WC_TEST_RET_ENC_EC(ret); #endif ret = wc_HashGetDigestSize(WC_HASH_TYPE_MD4); #ifndef NO_MD4 - if (ret == HASH_TYPE_E || ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(HASH_TYPE_E) || + ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) + { return WC_TEST_RET_ENC_EC(ret); + } #else - if (ret != HASH_TYPE_E) + if (ret != WC_NO_ERR_TRACE(HASH_TYPE_E)) return WC_TEST_RET_ENC_EC(ret); #endif ret = wc_HashGetBlockSize(WC_HASH_TYPE_MD5_SHA); #if !defined(NO_MD5) && !defined(NO_SHA) - if (ret == HASH_TYPE_E || ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(HASH_TYPE_E) || + ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) + { return WC_TEST_RET_ENC_EC(ret); + } #else - if (ret != HASH_TYPE_E) + if (ret != WC_NO_ERR_TRACE(HASH_TYPE_E)) return WC_TEST_RET_ENC_EC(ret); #endif ret = wc_HashGetBlockSize(WC_HASH_TYPE_BLAKE2B); #if defined(HAVE_BLAKE2) || defined(HAVE_BLAKE2S) - if (ret == HASH_TYPE_E || ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(HASH_TYPE_E) || + ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) + { return WC_TEST_RET_ENC_EC(ret); + } #else - if (ret != HASH_TYPE_E) + if (ret != WC_NO_ERR_TRACE(HASH_TYPE_E)) return WC_TEST_RET_ENC_EC(ret); #endif ret = wc_HashGetDigestSize(WC_HASH_TYPE_BLAKE2B); #if defined(HAVE_BLAKE2) || defined(HAVE_BLAKE2S) - if (ret == HASH_TYPE_E || ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(HASH_TYPE_E) || + ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) + { return WC_TEST_RET_ENC_EC(ret); + } #else - if (ret != HASH_TYPE_E) + if (ret != WC_NO_ERR_TRACE(HASH_TYPE_E)) return WC_TEST_RET_ENC_EC(ret); #endif ret = wc_HashGetBlockSize(WC_HASH_TYPE_NONE); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashGetDigestSize(WC_HASH_TYPE_NONE); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); #if !defined(NO_CERTS) && !defined(NO_ASN) @@ -6330,7 +6376,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hmac_sha_test(void) (word32)XSTRLEN(keys[i])); #if FIPS_VERSION3_GE(6,0,0) if (i == 1) { - if (ret != HMAC_MIN_KEYLEN_E) + if (ret != WC_NO_ERR_TRACE(HMAC_MIN_KEYLEN_E)) return WC_TEST_RET_ENC_EC(ret); /* Now use the ex and allow short keys with FIPS option */ ret = wc_HmacSetKey_ex(&hmac, WC_SHA, (byte*) keys[i], @@ -6578,9 +6624,9 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hmac_sha256_test(void) if ((ret = wc_HmacSizeByType(WC_SHA256)) != WC_SHA256_DIGEST_SIZE) return WC_TEST_RET_ENC_EC(ret); #if FIPS_VERSION3_GE(6,0,0) - if ((ret = wc_HmacSizeByType(21)) != HMAC_KAT_FIPS_E) + if ((ret = wc_HmacSizeByType(21)) != WC_NO_ERR_TRACE(HMAC_KAT_FIPS_E)) #else - if ((ret = wc_HmacSizeByType(21)) != BAD_FUNC_ARG) + if ((ret = wc_HmacSizeByType(21)) != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) #endif { return WC_TEST_RET_ENC_EC(ret); @@ -8207,53 +8253,53 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t chacha20_poly1305_aead_test(void) /* Encrypt */ err = wc_ChaCha20Poly1305_Encrypt(NULL, iv1, aad1, sizeof(aad1), plaintext1, sizeof(plaintext1), generatedCiphertext, generatedAuthTag); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_Encrypt(key1, NULL, aad1, sizeof(aad1), plaintext1, sizeof(plaintext1), generatedCiphertext, generatedAuthTag); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_Encrypt(key1, iv1, aad1, sizeof(aad1), NULL, sizeof(plaintext1), generatedCiphertext, generatedAuthTag); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_Encrypt(key1, iv1, aad1, sizeof(aad1), plaintext1, sizeof(plaintext1), NULL, generatedAuthTag); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_Encrypt(key1, iv1, aad1, sizeof(aad1), plaintext1, sizeof(plaintext1), generatedCiphertext, NULL); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_Encrypt(key1, iv1, aad1, sizeof(aad1), NULL, sizeof(plaintext1), generatedCiphertext, generatedAuthTag); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); /* Decrypt */ err = wc_ChaCha20Poly1305_Decrypt(NULL, iv2, aad2, sizeof(aad2), cipher2, sizeof(cipher2), authTag2, generatedPlaintext); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_Decrypt(key2, NULL, aad2, sizeof(aad2), cipher2, sizeof(cipher2), authTag2, generatedPlaintext); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_Decrypt(key2, iv2, aad2, sizeof(aad2), NULL, sizeof(cipher2), authTag2, generatedPlaintext); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_Decrypt(key2, iv2, aad2, sizeof(aad2), cipher2, sizeof(cipher2), NULL, generatedPlaintext); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_Decrypt(key2, iv2, aad2, sizeof(aad2), cipher2, sizeof(cipher2), authTag2, NULL); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_Decrypt(key2, iv2, aad2, sizeof(aad2), NULL, sizeof(cipher2), authTag2, generatedPlaintext); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); @@ -8325,39 +8371,39 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t chacha20_poly1305_aead_test(void) /* AEAD init/update/final - bad argument tests */ err = wc_ChaCha20Poly1305_Init(NULL, key1, iv1, CHACHA20_POLY1305_AEAD_DECRYPT); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_Init(&aead, NULL, iv1, CHACHA20_POLY1305_AEAD_DECRYPT); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_Init(&aead, key1, NULL, CHACHA20_POLY1305_AEAD_DECRYPT); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_UpdateAad(NULL, aad1, sizeof(aad1)); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_UpdateAad(&aead, NULL, sizeof(aad1)); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_UpdateData(NULL, generatedPlaintext, generatedPlaintext, sizeof(plaintext1)); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_UpdateData(&aead, generatedPlaintext, NULL, sizeof(plaintext1)); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_UpdateData(&aead, NULL, generatedPlaintext, sizeof(plaintext1)); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_Final(NULL, generatedAuthTag); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); err = wc_ChaCha20Poly1305_Final(&aead, NULL); - if (err != BAD_FUNC_ARG) + if (err != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(err); /* AEAD init/update/final - bad state tests */ @@ -8368,24 +8414,24 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t chacha20_poly1305_aead_test(void) XMEMSET(&aead, 0, sizeof(aead)); aead.state = CHACHA20_POLY1305_STATE_INIT; err = wc_ChaCha20Poly1305_UpdateAad(&aead, aad1, sizeof(aad1)); - if (err != BAD_STATE_E) + if (err != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(err); aead.state = CHACHA20_POLY1305_STATE_DATA; err = wc_ChaCha20Poly1305_UpdateAad(&aead, aad1, sizeof(aad1)); - if (err != BAD_STATE_E) + if (err != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(err); aead.state = CHACHA20_POLY1305_STATE_INIT; err = wc_ChaCha20Poly1305_UpdateData(&aead, generatedPlaintext, generatedPlaintext, sizeof(plaintext1)); - if (err != BAD_STATE_E) + if (err != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(err); aead.state = CHACHA20_POLY1305_STATE_INIT; err = wc_ChaCha20Poly1305_Final(&aead, generatedAuthTag); - if (err != BAD_STATE_E) + if (err != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(err); aead.state = CHACHA20_POLY1305_STATE_READY; err = wc_ChaCha20Poly1305_Final(&aead, generatedAuthTag); - if (err != BAD_STATE_E) + if (err != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(err); XMEMSET(generatedCiphertext, 0, sizeof(generatedCiphertext)); @@ -8617,7 +8663,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t des_test(void) /* Test invalid info ptr */ ret = wc_BufferKeyEncrypt(NULL, cipher, sizeof(cipher), key, sizeof(key), WC_HASH_TYPE_SHA); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); #ifndef NO_PWDBASED @@ -8871,8 +8917,7 @@ static wc_test_ret_t EVP_test(const WOLFSSL_EVP_CIPHER* type, const byte* key, } EVP_TEST_END: - if (cipher) - XFREE(cipher, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(cipher, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); (void)cipherSz; if (ctx_inited) { @@ -9257,11 +9302,9 @@ static wc_test_ret_t EVP_test(const WOLFSSL_EVP_CIPHER* type, const byte* key, wc_AesFree(dec); #endif #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (enc) - XFREE(enc, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(enc, HEAP_HINT, DYNAMIC_TYPE_AES); #ifdef HAVE_AES_DECRYPT - if (dec) - XFREE(dec, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(dec, HEAP_HINT, DYNAMIC_TYPE_AES); #endif #endif @@ -9590,11 +9633,9 @@ static wc_test_ret_t EVP_test(const WOLFSSL_EVP_CIPHER* type, const byte* key, #endif #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (enc) - XFREE(enc, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(enc, HEAP_HINT, DYNAMIC_TYPE_AES); #ifdef HAVE_AES_DECRYPT - if (dec) - XFREE(dec, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(dec, HEAP_HINT, DYNAMIC_TYPE_AES); #endif #endif @@ -9855,11 +9896,9 @@ static wc_test_ret_t EVP_test(const WOLFSSL_EVP_CIPHER* type, const byte* key, #endif #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (enc) - XFREE(enc, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(enc, HEAP_HINT, DYNAMIC_TYPE_AES); #ifdef HAVE_AES_DECRYPT - if (dec) - XFREE(dec, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(dec, HEAP_HINT, DYNAMIC_TYPE_AES); #endif #endif @@ -10070,11 +10109,9 @@ static wc_test_ret_t EVP_test(const WOLFSSL_EVP_CIPHER* type, const byte* key, #endif #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (enc) - XFREE(enc, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(enc, HEAP_HINT, DYNAMIC_TYPE_AES); #ifdef HAVE_AES_DECRYPT - if (dec) - XFREE(dec, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(dec, HEAP_HINT, DYNAMIC_TYPE_AES); #endif #endif @@ -10118,7 +10155,7 @@ static wc_test_ret_t aes_key_size_test(void) /* w/ FIPS v1 (cert 2425) wc_AesInit just returns 0 always as it's not * supported with that FIPS version */ ret = wc_AesInit(NULL, HEAP_HINT, devId); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); #endif @@ -10130,17 +10167,17 @@ static wc_test_ret_t aes_key_size_test(void) #ifndef HAVE_FIPS /* Parameter Validation testing. */ ret = wc_AesGetKeySize(NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); ret = wc_AesGetKeySize(aes, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); ret = wc_AesGetKeySize(NULL, &keySize); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); /* Crashes in FIPS */ ret = wc_AesSetKey(NULL, key16, sizeof(key16), iv, AES_ENCRYPTION); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); #endif /* NULL IV indicates to use all zeros IV. */ @@ -10148,11 +10185,11 @@ static wc_test_ret_t aes_key_size_test(void) #ifdef WOLFSSL_AES_128 if (ret != 0) #else - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) #endif ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); ret = wc_AesSetKey(aes, key32, sizeof(key32) - 1, iv, AES_ENCRYPTION); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); /* CryptoCell handles rounds internally */ #if !defined(HAVE_FIPS) && !defined(WOLFSSL_CRYPTOCELL) @@ -10161,7 +10198,7 @@ static wc_test_ret_t aes_key_size_test(void) /* Force invalid rounds */ aes->rounds = 16; ret = wc_AesGetKeySize(aes, &keySize); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); #endif #endif @@ -10170,7 +10207,7 @@ static wc_test_ret_t aes_key_size_test(void) #ifdef WOLFSSL_AES_128 if (ret != 0) #else - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) #endif ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); #if !defined(HAVE_FIPS) && defined(WOLFSSL_AES_128) @@ -10184,7 +10221,7 @@ static wc_test_ret_t aes_key_size_test(void) #ifdef WOLFSSL_AES_192 if (ret != 0) #else - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) #endif ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); #if !defined(HAVE_FIPS) && defined(WOLFSSL_AES_192) @@ -10197,7 +10234,7 @@ static wc_test_ret_t aes_key_size_test(void) #ifdef WOLFSSL_AES_256 if (ret != 0) #else - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) #endif ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); #if !defined(HAVE_FIPS) && defined(WOLFSSL_AES_256) @@ -10910,16 +10947,14 @@ static wc_test_ret_t aes_xts_128_test(void) #if !defined(BENCH_EMBEDDED) && !defined(HAVE_CAVIUM) && \ !defined(WOLFSSL_AFALG) && defined(WOLFSSL_SMALL_STACK) && \ !defined(WOLFSSL_NO_MALLOC) - if (large_input) - XFREE(large_input, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(large_input, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif if (aes_inited) wc_AesXtsFree(aes); #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (aes) - XFREE(aes, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(aes, HEAP_HINT, DYNAMIC_TYPE_AES); #endif return ret; @@ -11612,16 +11647,14 @@ static wc_test_ret_t aes_xts_192_test(void) #if !defined(BENCH_EMBEDDED) && !defined(HAVE_CAVIUM) && \ !defined(WOLFSSL_AFALG) && defined(WOLFSSL_SMALL_STACK) && \ !defined(WOLFSSL_NO_MALLOC) - if (large_input) - XFREE(large_input, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(large_input, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif if (aes_inited) wc_AesXtsFree(aes); #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (aes) - XFREE(aes, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(aes, HEAP_HINT, DYNAMIC_TYPE_AES); #endif return ret; @@ -12069,16 +12102,14 @@ static wc_test_ret_t aes_xts_256_test(void) #if !defined(BENCH_EMBEDDED) && !defined(HAVE_CAVIUM) && \ !defined(WOLFSSL_AFALG) && defined(WOLFSSL_SMALL_STACK) && \ !defined(WOLFSSL_NO_MALLOC) - if (large_input) - XFREE(large_input, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(large_input, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif if (aes_inited) wc_AesXtsFree(aes); #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (aes) - XFREE(aes, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(aes, HEAP_HINT, DYNAMIC_TYPE_AES); #endif return ret; @@ -12382,8 +12413,7 @@ static wc_test_ret_t aes_xts_sector_test(void) wc_AesXtsFree(aes); #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (aes) - XFREE(aes, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(aes, HEAP_HINT, DYNAMIC_TYPE_AES); #endif return ret; @@ -12492,8 +12522,7 @@ static wc_test_ret_t aes_xts_args_test(void) wc_AesXtsFree(aes); #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (aes) - XFREE(aes, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(aes, HEAP_HINT, DYNAMIC_TYPE_AES); #endif return ret; @@ -12520,11 +12549,11 @@ static wc_test_ret_t aes_cbc_test(void) /* Parameter Validation testing. */ ret = wc_AesCbcEncryptWithKey(cipher, msg, AES_BLOCK_SIZE, key, 17, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); #ifdef HAVE_AES_DECRYPT ret = wc_AesCbcDecryptWithKey(plain, cipher, AES_BLOCK_SIZE, key, 17, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); #endif @@ -13663,8 +13692,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t aes_test(void) if ((bigCipher == NULL) || (bigPlain == NULL)) { - if (bigCipher != NULL) - XFREE(bigCipher, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(bigCipher, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); ERROR_OUT(WC_TEST_RET_ENC_NC, out); } #else @@ -15450,20 +15478,15 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t aesgcm_test(void) #if !defined(BENCH_EMBEDDED) && !defined(HAVE_CAVIUM) && \ !defined(WOLFSSL_NO_MALLOC) - if (large_input) - XFREE(large_input, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (large_output) - XFREE(large_output, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (large_outdec) - XFREE(large_outdec, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(large_input, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(large_output, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(large_outdec, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (enc) - XFREE(enc, HEAP_HINT, DYNAMIC_TYPE_AES); - if (dec) - XFREE(dec, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(enc, HEAP_HINT, DYNAMIC_TYPE_AES); + XFREE(dec, HEAP_HINT, DYNAMIC_TYPE_AES); #endif return ret; @@ -15579,7 +15602,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t gmac_test(void) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); ret = wc_GmacVerify(k1, sizeof(k1), iv1, sizeof(iv1), a1, sizeof(a1), badT, sizeof(badT)); - if (ret != AES_GCM_AUTH_E) + if (ret != WC_NO_ERR_TRACE(AES_GCM_AUTH_E)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); ret = wc_GmacVerify(k2, sizeof(k2), iv2, sizeof(iv2), a2, sizeof(a2), t2, sizeof(t2)); @@ -15914,23 +15937,23 @@ static wc_test_ret_t aesccm_128_test(void) ret = wc_AesCcmEncrypt(enc, pl2 /* out */, NULL /* in */, 1 /* inSz */, iv, sizeof(iv), t_empty2, sizeof(t_empty2), a, sizeof(a)); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); ret = wc_AesCcmEncrypt(enc, NULL /* out */, (const byte *)"" /* in */, 1 /* inSz */, iv, sizeof(iv), t_empty2, sizeof(t_empty2), a, sizeof(a)); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); #ifdef HAVE_AES_DECRYPT ret = wc_AesCcmDecrypt(enc, pl2, NULL /* in */, 1 /* inSz */, iv, sizeof(iv), t_empty2, sizeof(t_empty2), a, sizeof(a)); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); ret = wc_AesCcmDecrypt(enc, NULL /* out */, (const byte *)"" /* in */, 1 /* inSz */, iv, sizeof(iv), t_empty2, sizeof(t_empty2), a, sizeof(a)); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); #endif @@ -15940,7 +15963,7 @@ static wc_test_ret_t aesccm_128_test(void) ret = wc_AesCcmEncrypt(enc, NULL /* out */, NULL /* in */, 0 /* inSz */, iv, sizeof(iv), t_empty2, sizeof(t_empty2), a, sizeof(a)); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); if (XMEMCMP(t_empty, t_empty2, sizeof(t_empty2))) @@ -17284,12 +17307,9 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t XChaCha_test(void) { out: #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (chacha) - XFREE(chacha, HEAP_HINT, DYNAMIC_TYPE_CIPHER); - if (buf1) - XFREE(buf1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (buf2) - XFREE(buf2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(chacha, HEAP_HINT, DYNAMIC_TYPE_CIPHER); + XFREE(buf1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(buf2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; @@ -17380,10 +17400,8 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t XChaCha20Poly1305_test(void) { out: #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (buf1 != NULL) - XFREE(buf1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (buf2 != NULL) - XFREE(buf2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(buf1, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(buf2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; @@ -17391,7 +17409,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t XChaCha20Poly1305_test(void) { #endif /* defined(HAVE_XCHACHA) && defined(HAVE_POLY1305) */ #ifndef WC_NO_RNG -static wc_test_ret_t _rng_test(WC_RNG* rng, int errorOffset) +static wc_test_ret_t _rng_test(WC_RNG* rng) { byte block[32]; wc_test_ret_t ret; @@ -17401,8 +17419,7 @@ static wc_test_ret_t _rng_test(WC_RNG* rng, int errorOffset) ret = wc_RNG_GenerateBlock(rng, block, sizeof(block)); if (ret != 0) { - ret = 1; - goto exit; + return WC_TEST_RET_ENC_EC(ret); } /* Check for 0's */ @@ -17413,49 +17430,36 @@ static wc_test_ret_t _rng_test(WC_RNG* rng, int errorOffset) } /* All zeros count check */ if (ret >= (int)sizeof(block)) { - ret = 2; - goto exit; + return WC_TEST_RET_ENC_NC; } ret = wc_RNG_GenerateByte(rng, block); if (ret != 0) { - ret = 3; - goto exit; + return WC_TEST_RET_ENC_EC(ret); } /* Parameter validation testing. */ ret = wc_RNG_GenerateBlock(NULL, block, sizeof(block)); - if (ret != BAD_FUNC_ARG) { - ret = 4; - goto exit; + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { + return WC_TEST_RET_ENC_EC(ret); } ret = wc_RNG_GenerateBlock(rng, NULL, sizeof(block)); - if (ret != BAD_FUNC_ARG) { - ret = 5; - goto exit; + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { + return WC_TEST_RET_ENC_EC(ret); } ret = wc_RNG_GenerateByte(NULL, block); - if (ret != BAD_FUNC_ARG) { - ret = 6; - goto exit; + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { + return WC_TEST_RET_ENC_EC(ret); } ret = wc_RNG_GenerateByte(rng, NULL); - if (ret != BAD_FUNC_ARG) { - ret = 7; - goto exit; + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { + return WC_TEST_RET_ENC_EC(ret); } - ret = 0; - -exit: - if (ret != 0) - ret = errorOffset - (ret * 1000000); - - return ret; + return 0; } - static wc_test_ret_t random_rng_test(void) { WC_RNG localRng; @@ -17472,7 +17476,7 @@ static wc_test_ret_t random_rng_test(void) if (ret != 0) return WC_TEST_RET_ENC_EC(ret); - ret = _rng_test(rng, WC_TEST_RET_ENC_NC); + ret = _rng_test(rng); /* Make sure and free RNG */ wc_FreeRng(rng); @@ -17489,7 +17493,7 @@ static wc_test_ret_t random_rng_test(void) if (rng == NULL) return WC_TEST_RET_ENC_ERRNO; - ret = _rng_test(rng, WC_TEST_RET_ENC_NC); + ret = _rng_test(rng); wc_rng_free(rng); rng = NULL; @@ -17502,7 +17506,7 @@ static wc_test_ret_t random_rng_test(void) if (ret != 0) return WC_TEST_RET_ENC_EC(ret); - ret = _rng_test(rng, WC_TEST_RET_ENC_NC); + ret = _rng_test(rng); wc_rng_free(rng); if (ret != 0) @@ -17918,8 +17922,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t memory_test(void) b = c; } #endif - if (b) - XFREE(b, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(b, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); if (b == NULL #ifndef WOLFSSL_NO_REALLOC || c == NULL @@ -18316,7 +18319,7 @@ static wc_test_ret_t cert_asn1_test(void) InitDecodedCert(&cert, badCert, len[0], 0); ret = ParseCert(&cert, CERT_TYPE, NO_VERIFY, NULL); FreeDecodedCert(&cert); - if (ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); } XFREE(badCert, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -18324,8 +18327,7 @@ static wc_test_ret_t cert_asn1_test(void) ret = 0; done: - if (badCert != NULL) - XFREE(badCert, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(badCert, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -18454,7 +18456,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t cert_test(void) if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #else - if (ret != ASN_CRIT_EXT_E) { + if (ret != WC_NO_ERR_TRACE(ASN_CRIT_EXT_E)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); } ret = 0; @@ -18533,11 +18535,13 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t certext_test(void) return WC_TEST_RET_ENC_EC(ret); /* check the SKID from a RSA certificate */ - if (XMEMCMP(skid_rsa, cert.extSubjKeyId, sizeof(cert.extSubjKeyId))) + if ((sizeof(skid_rsa) - 1 != cert.extSubjKeyIdSz) || + (XMEMCMP(skid_rsa, cert.extSubjKeyId, cert.extSubjKeyIdSz))) return WC_TEST_RET_ENC_NC; /* check the AKID from an RSA certificate */ - if (XMEMCMP(akid_rsa, cert.extAuthKeyId, sizeof(cert.extAuthKeyId))) + if ((sizeof(akid_rsa) - 1 != cert.extAuthKeyIdSz) || + (XMEMCMP(akid_rsa, cert.extAuthKeyId, cert.extAuthKeyIdSz))) return WC_TEST_RET_ENC_NC; /* check the Key Usage from an RSA certificate */ @@ -18584,7 +18588,8 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t certext_test(void) /* check the SKID from a ECC certificate - generated dynamically */ /* check the AKID from an ECC certificate */ - if (XMEMCMP(akid_ecc, cert.extAuthKeyId, sizeof(cert.extAuthKeyId))) + if ((sizeof(akid_ecc) - 1 != cert.extAuthKeyIdSz) || + (XMEMCMP(akid_ecc, cert.extAuthKeyId, cert.extAuthKeyIdSz))) return WC_TEST_RET_ENC_NC; /* check the Key Usage from an ECC certificate */ @@ -18632,11 +18637,13 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t certext_test(void) return WC_TEST_RET_ENC_EC(ret); /* check the SKID from a CA certificate */ - if (XMEMCMP(kid_ca, cert.extSubjKeyId, sizeof(cert.extSubjKeyId))) + if ((sizeof(kid_ca) - 1 != cert.extSubjKeyIdSz) || + (XMEMCMP(kid_ca, cert.extSubjKeyId, cert.extSubjKeyIdSz))) return WC_TEST_RET_ENC_NC; /* check the AKID from an CA certificate */ - if (XMEMCMP(kid_ca, cert.extAuthKeyId, sizeof(cert.extAuthKeyId))) + if ((sizeof(kid_ca) - 1 != cert.extAuthKeyIdSz) || + (XMEMCMP(kid_ca, cert.extAuthKeyId, cert.extAuthKeyIdSz))) return WC_TEST_RET_ENC_NC; /* check the Key Usage from CA certificate */ @@ -18714,7 +18721,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t decodedCertCache_test(void) if (ret == 0) { ret = wc_SetSubjectBuffer(NULL, der, derSz); - if (ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ret = 0; else ret = WC_TEST_RET_ENC_EC(ret); @@ -18728,7 +18735,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t decodedCertCache_test(void) if (ret == 0) { ret = wc_SetSubjectRaw(NULL, der, derSz); - if (ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ret = 0; else ret = WC_TEST_RET_ENC_EC(ret); @@ -18742,7 +18749,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t decodedCertCache_test(void) if (ret == 0) { ret = wc_SetIssuerBuffer(NULL, der, derSz); - if (ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ret = 0; else ret = WC_TEST_RET_ENC_EC(ret); @@ -18756,7 +18763,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t decodedCertCache_test(void) if (ret == 0) { ret = wc_SetIssuerRaw(NULL, der, derSz); - if (ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ret = 0; else ret = WC_TEST_RET_ENC_EC(ret); @@ -18771,7 +18778,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t decodedCertCache_test(void) if (ret == 0) { ret = wc_SetAltNamesBuffer(NULL, der, derSz); - if (ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ret = 0; else ret = WC_TEST_RET_ENC_EC(ret); @@ -18785,7 +18792,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t decodedCertCache_test(void) if (ret == 0) { ret = wc_SetDatesBuffer(NULL, der, derSz); - if (ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ret = 0; else ret = WC_TEST_RET_ENC_EC(ret); @@ -18800,7 +18807,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t decodedCertCache_test(void) if (ret == 0) { ret = wc_SetAuthKeyIdFromCert(NULL, der, derSz); - if (ret == BAD_FUNC_ARG) + if (ret == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ret = 0; else ret = WC_TEST_RET_ENC_NC; @@ -18833,23 +18840,23 @@ static wc_test_ret_t rsa_flatten_test(RsaKey* key) /* Parameter Validation testing. */ ret = wc_RsaFlattenPublicKey(NULL, e, &eSz, n, &nSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaFlattenPublicKey(key, NULL, &eSz, n, &nSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaFlattenPublicKey(key, e, NULL, n, &nSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaFlattenPublicKey(key, e, &eSz, NULL, &nSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaFlattenPublicKey(key, e, &eSz, n, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaFlattenPublicKey(key, e, &eSz, n, &nSz); @@ -18858,13 +18865,13 @@ static wc_test_ret_t rsa_flatten_test(RsaKey* key) eSz = 0; ret = wc_RsaFlattenPublicKey(key, e, &eSz, n, &nSz); - if (ret != RSA_BUFFER_E) + if (ret != WC_NO_ERR_TRACE(RSA_BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); eSz = sizeof(e); nSz = 0; ret = wc_RsaFlattenPublicKey(key, e, &eSz, n, &nSz); - if (ret != RSA_BUFFER_E) + if (ret != WC_NO_ERR_TRACE(RSA_BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); return 0; @@ -18889,54 +18896,54 @@ static wc_test_ret_t rsa_export_key_test(RsaKey* key) word32 zero = 0; ret = wc_RsaExportKey(NULL, e, &eSz, n, &nSz, d, &dSz, p, &pSz, q, &qSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaExportKey(key, NULL, &eSz, n, &nSz, d, &dSz, p, &pSz, q, &qSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaExportKey(key, e, NULL, n, &nSz, d, &dSz, p, &pSz, q, &qSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaExportKey(key, e, &eSz, NULL, &nSz, d, &dSz, p, &pSz, q, &qSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaExportKey(key, e, &eSz, n, NULL, d, &dSz, p, &pSz, q, &qSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaExportKey(key, e, &eSz, n, &nSz, NULL, &dSz, p, &pSz, q, &qSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaExportKey(key, e, &eSz, n, &nSz, d, NULL, p, &pSz, q, &qSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaExportKey(key, e, &eSz, n, &nSz, d, &dSz, NULL, &pSz, q, &qSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaExportKey(key, e, &eSz, n, &nSz, d, &dSz, p, NULL, q, &qSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaExportKey(key, e, &eSz, n, &nSz, d, &dSz, p, &pSz, NULL, &qSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaExportKey(key, e, &eSz, n, &nSz, d, &dSz, p, &pSz, q, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaExportKey(key, e, &zero, n, &nSz, d, &dSz, p, &pSz, q, &qSz); - if (ret != RSA_BUFFER_E) + if (ret != WC_NO_ERR_TRACE(RSA_BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaExportKey(key, e, &eSz, n, &zero, d, &dSz, p, &pSz, q, &qSz); - if (ret != RSA_BUFFER_E) + if (ret != WC_NO_ERR_TRACE(RSA_BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); #ifndef WOLFSSL_RSA_PUBLIC_ONLY ret = wc_RsaExportKey(key, e, &eSz, n, &nSz, d, &zero, p, &pSz, q, &qSz); - if (ret != RSA_BUFFER_E) + if (ret != WC_NO_ERR_TRACE(RSA_BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaExportKey(key, e, &eSz, n, &nSz, d, &dSz, p, &zero, q, &qSz); - if (ret != RSA_BUFFER_E) + if (ret != WC_NO_ERR_TRACE(RSA_BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_RsaExportKey(key, e, &eSz, n, &nSz, d, &dSz, p, &pSz, q, &zero); - if (ret != RSA_BUFFER_E) + if (ret != WC_NO_ERR_TRACE(RSA_BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ @@ -18975,36 +18982,36 @@ static wc_test_ret_t rsa_sig_test(RsaKey* key, word32 keyLen, int modLen, WC_RNG /* Parameter Validation testing. */ ret = wc_SignatureGetSize(WC_SIGNATURE_TYPE_NONE, key, keyLen); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignatureGetSize(WC_SIGNATURE_TYPE_RSA, key, 0); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); sigSz = (word32)modLen; ret = wc_SignatureGenerate(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, NULL, inLen, out, &sigSz, key, keyLen, rng); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignatureGenerate(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, in, 0, out, &sigSz, key, keyLen, rng); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignatureGenerate(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, in, inLen, NULL, &sigSz, key, keyLen, rng); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignatureGenerate(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, in, inLen, out, NULL, key, keyLen, rng); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignatureGenerate(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, in, inLen, out, &sigSz, NULL, keyLen, rng); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignatureGenerate(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, in, inLen, out, &sigSz, key, 0, rng); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignatureGenerate(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, in, inLen, out, &sigSz, key, keyLen, NULL); @@ -19014,56 +19021,56 @@ static wc_test_ret_t rsa_sig_test(RsaKey* key, word32 keyLen, int modLen, WC_RNG #elif defined(WOLFSSL_ASYNC_CRYPT) || defined(WOLF_CRYPTO_CB) /* async may not require RNG */ #if defined(WOLF_CRYPTO_CB_ONLY_RSA) - if (ret != NO_VALID_DEVID) + if (ret != WC_NO_ERR_TRACE(NO_VALID_DEVID)) #else - if (ret != 0 && ret != MISSING_RNG_E) + if (ret != 0 && ret != WC_NO_ERR_TRACE(MISSING_RNG_E)) #endif #elif defined(HAVE_FIPS) || !defined(WC_RSA_BLINDING) /* FIPS140 implementation does not do blinding */ if (ret != 0) #elif defined(WOLFSSL_RSA_PUBLIC_ONLY) || defined(WOLFSSL_RSA_VERIFY_ONLY) - if (ret != SIG_TYPE_E) + if (ret != WC_NO_ERR_TRACE(SIG_TYPE_E)) #elif defined(WOLFSSL_CRYPTOCELL) || defined(WOLFSSL_SE050) /* RNG is handled by hardware */ if (ret != 0) #else - if (ret != MISSING_RNG_E) + if (ret != WC_NO_ERR_TRACE(MISSING_RNG_E)) #endif return WC_TEST_RET_ENC_EC(ret); sigSz = 0; ret = wc_SignatureGenerate(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, in, inLen, out, &sigSz, key, keyLen, rng); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignatureVerify(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, NULL, inLen, out, (word32)modLen, key, keyLen); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignatureVerify(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, in, 0, out, (word32)modLen, key, keyLen); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignatureVerify(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, in, inLen, NULL, (word32)modLen, key, keyLen); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignatureVerify(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, in, inLen, out, 0, key, keyLen); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignatureVerify(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, in, inLen, out, (word32)modLen, NULL, keyLen); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignatureVerify(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, in, inLen, out, (word32)modLen, key, 0); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); #ifndef HAVE_ECC ret = wc_SignatureGetSize(WC_SIGNATURE_TYPE_ECC, key, keyLen); - if (ret != SIG_TYPE_E) + if (ret != WC_NO_ERR_TRACE(SIG_TYPE_E)) return WC_TEST_RET_ENC_EC(ret); #endif #if defined(WOLF_CRYPTO_CB_ONLY_RSA) @@ -19282,17 +19289,17 @@ static wc_test_ret_t rsa_decode_test(RsaKey* keyPub) /* Parameter Validation testing. */ ret = wc_RsaPublicKeyDecodeRaw(NULL, sizeof(n), e, sizeof(e), keyPub); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_RsaPublicKeyDecodeRaw(n, sizeof(n), NULL, sizeof(e), keyPub); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_RsaPublicKeyDecodeRaw(n, sizeof(n), e, sizeof(e), NULL); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } @@ -19300,7 +19307,7 @@ static wc_test_ret_t rsa_decode_test(RsaKey* keyPub) #if defined(USE_INTEGER_HEAP_MATH) if (ret != 0) #else - if (ret != ASN_GETINT_E) + if (ret != WC_NO_ERR_TRACE(ASN_GETINT_E)) #endif { ret = WC_TEST_RET_ENC_EC(ret); @@ -19314,7 +19321,7 @@ static wc_test_ret_t rsa_decode_test(RsaKey* keyPub) #if defined(USE_INTEGER_HEAP_MATH) if (ret != 0) #else - if (ret != ASN_GETINT_E) + if (ret != WC_NO_ERR_TRACE(ASN_GETINT_E)) #endif { ret = WC_TEST_RET_ENC_EC(ret); @@ -19339,17 +19346,17 @@ static wc_test_ret_t rsa_decode_test(RsaKey* keyPub) /* Parameter Validation testing. */ inSz = sizeof(good); ret = wc_RsaPublicKeyDecode(NULL, &inOutIdx, keyPub, inSz); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_RsaPublicKeyDecode(good, NULL, keyPub, inSz); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_RsaPublicKeyDecode(good, &inOutIdx, NULL, inSz); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } @@ -19358,14 +19365,14 @@ static wc_test_ret_t rsa_decode_test(RsaKey* keyPub) inOutIdx = 2; inSz = sizeof(good) - inOutIdx; ret = wc_RsaPublicKeyDecode(good, &inOutIdx, keyPub, inSz); - if (ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inOutIdx = 2; inSz = sizeof(goodAlgId) - inOutIdx; ret = wc_RsaPublicKeyDecode(goodAlgId, &inOutIdx, keyPub, inSz); - if (ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } @@ -19373,9 +19380,9 @@ static wc_test_ret_t rsa_decode_test(RsaKey* keyPub) inSz = sizeof(goodAlgId); ret = wc_RsaPublicKeyDecode(goodAlgId, &inOutIdx, keyPub, inSz); #ifndef WOLFSSL_NO_DECODE_EXTRA - if (ret != ASN_PARSE_E) + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) #else - if (ret != ASN_RSA_KEY_E) + if (ret != WC_NO_ERR_TRACE(ASN_RSA_KEY_E)) #endif { ret = WC_TEST_RET_ENC_EC(ret); @@ -19385,49 +19392,55 @@ static wc_test_ret_t rsa_decode_test(RsaKey* keyPub) inSz = sizeof(badAlgIdNull); inOutIdx = 0; ret = wc_RsaPublicKeyDecode(badAlgIdNull, &inOutIdx, keyPub, inSz); - if (ret != ASN_EXPECT_0_E) { + if (ret != WC_NO_ERR_TRACE(ASN_EXPECT_0_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inSz = sizeof(badNotBitString); inOutIdx = 0; ret = wc_RsaPublicKeyDecode(badNotBitString, &inOutIdx, keyPub, inSz); - if (ret != ASN_BITSTR_E) { + if (ret != WC_NO_ERR_TRACE(ASN_BITSTR_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inSz = sizeof(badBitStringLen); inOutIdx = 0; ret = wc_RsaPublicKeyDecode(badBitStringLen, &inOutIdx, keyPub, inSz); - if (ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inSz = sizeof(badNoSeq); inOutIdx = 0; ret = wc_RsaPublicKeyDecode(badNoSeq, &inOutIdx, keyPub, inSz); - if (ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inSz = sizeof(badNoObj); inOutIdx = 0; ret = wc_RsaPublicKeyDecode(badNoObj, &inOutIdx, keyPub, inSz); - if (ret != ASN_PARSE_E && ret != ASN_OBJECT_ID_E) { + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E) && + ret != WC_NO_ERR_TRACE(ASN_OBJECT_ID_E)) + { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inSz = sizeof(badIntN); inOutIdx = 0; ret = wc_RsaPublicKeyDecode(badIntN, &inOutIdx, keyPub, inSz); - if (ret != ASN_RSA_KEY_E && ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_RSA_KEY_E) && + ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) + { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inSz = sizeof(badNotIntE); inOutIdx = 0; ret = wc_RsaPublicKeyDecode(badNotIntE, &inOutIdx, keyPub, inSz); - if (ret != ASN_RSA_KEY_E && ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_RSA_KEY_E) && + ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) + { ret = WC_TEST_RET_ENC_EC(ret); goto done; } @@ -19438,7 +19451,7 @@ static wc_test_ret_t rsa_decode_test(RsaKey* keyPub) #ifndef WOLFSSL_ASN_TEMPLATE if (ret != 0) #else - if (ret != ASN_PARSE_E) + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) #endif { ret = WC_TEST_RET_ENC_EC(ret); @@ -19453,7 +19466,9 @@ static wc_test_ret_t rsa_decode_test(RsaKey* keyPub) inSz = sizeof(badBitStrNoZero); inOutIdx = 0; ret = wc_RsaPublicKeyDecode(badBitStrNoZero, &inOutIdx, keyPub, inSz); - if (ret != ASN_EXPECT_0_E && ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_EXPECT_0_E) && + ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) + { ret = WC_TEST_RET_ENC_EC(ret); goto done; } @@ -19603,7 +19618,7 @@ static wc_test_ret_t rsa_pss_test(WC_RNG* rng, RsaKey* key) ret = wc_RsaPSS_Sign_ex(digest, digestSz, out, outSz, hash[j], mgf[i], -1, key, rng); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret <= 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); outSz = (word32)ret; @@ -19621,7 +19636,7 @@ static wc_test_ret_t rsa_pss_test(WC_RNG* rng, RsaKey* key) ret = wc_RsaPSS_VerifyInline_ex(sig, outSz, &plain, hash[j], mgf[i], -1, key); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret <= 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); plainSz = (word32)ret; @@ -19658,7 +19673,7 @@ static wc_test_ret_t rsa_pss_test(WC_RNG* rng, RsaKey* key) ret = wc_RsaPSS_VerifyInline_ex(sig, outSz, (byte**)&plain, hash[l], mgf[k], -1, key); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret >= 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); } @@ -19683,7 +19698,7 @@ static wc_test_ret_t rsa_pss_test(WC_RNG* rng, RsaKey* key) ret = wc_RsaPSS_Sign_ex(digest, digestSz, out, outSz, hash[0], mgf[0], 0, key, rng); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret <= 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); outSz = (word32)ret; @@ -19698,7 +19713,7 @@ static wc_test_ret_t rsa_pss_test(WC_RNG* rng, RsaKey* key) ret = wc_RsaPSS_Verify_ex(out, outSz, sig, outSz, hash[0], mgf[0], 0, key); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret <= 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); plainSz = (word32)ret; @@ -19722,7 +19737,7 @@ static wc_test_ret_t rsa_pss_test(WC_RNG* rng, RsaKey* key) hash[0], 0, 0, HEAP_HINT); #endif } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); @@ -19737,7 +19752,7 @@ static wc_test_ret_t rsa_pss_test(WC_RNG* rng, RsaKey* key) ret = wc_RsaPSS_VerifyInline_ex(sig, outSz, &plain, hash[0], mgf[0], 0, key); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret <= 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); plainSz = (word32)ret; @@ -19774,8 +19789,8 @@ static wc_test_ret_t rsa_pss_test(WC_RNG* rng, RsaKey* key) ret = wc_RsaPSS_Sign_ex(digest, digestSz, out, outSz, hash[0], mgf[0], len, key, rng); } - } while (ret == WC_PENDING_E); - if (ret != PSS_SALTLEN_E) + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); + if (ret != WC_NO_ERR_TRACE(PSS_SALTLEN_E)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); do { @@ -19787,8 +19802,8 @@ static wc_test_ret_t rsa_pss_test(WC_RNG* rng, RsaKey* key) ret = wc_RsaPSS_Sign_ex(digest, digestSz, out, outSz, hash[0], mgf[0], digestSz + 1, key, rng); } - } while (ret == WC_PENDING_E); - if (ret != PSS_SALTLEN_E) + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); + if (ret != WC_NO_ERR_TRACE(PSS_SALTLEN_E)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); TEST_SLEEP(); @@ -19801,8 +19816,8 @@ static wc_test_ret_t rsa_pss_test(WC_RNG* rng, RsaKey* key) ret = wc_RsaPSS_VerifyInline_ex(sig, outSz, &plain, hash[0], mgf[0], -2, key); } - } while (ret == WC_PENDING_E); - if (ret != PSS_SALTLEN_E) + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); + if (ret != WC_NO_ERR_TRACE(PSS_SALTLEN_E)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); TEST_SLEEP(); @@ -19815,8 +19830,8 @@ static wc_test_ret_t rsa_pss_test(WC_RNG* rng, RsaKey* key) ret = wc_RsaPSS_VerifyInline_ex(sig, outSz, &plain, hash[0], mgf[0], digestSz + 1, key); } - } while (ret == WC_PENDING_E); - if (ret != PSS_SALTLEN_E) + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); + if (ret != WC_NO_ERR_TRACE(PSS_SALTLEN_E)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); TEST_SLEEP(); @@ -19836,7 +19851,7 @@ static wc_test_ret_t rsa_pss_test(WC_RNG* rng, RsaKey* key) ret = wc_RsaPSS_CheckPadding_ex2(digest, digestSz, plain, plainSz, hash[0], len, 0, HEAP_HINT); #endif - if (ret != PSS_SALTLEN_E) + if (ret != WC_NO_ERR_TRACE(PSS_SALTLEN_E)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); #ifndef WOLFSSL_PSS_LONG_SALT len = (int)(digestSz + 1); @@ -19847,17 +19862,17 @@ static wc_test_ret_t rsa_pss_test(WC_RNG* rng, RsaKey* key) (!defined(HAVE_SELFTEST_VERSION) || (HAVE_SELFTEST_VERSION < 2)) ret = wc_RsaPSS_CheckPadding_ex(digest, digestSz, plain, plainSz, hash[0], len); - if (ret != PSS_SALTLEN_E) + if (ret != WC_NO_ERR_TRACE(PSS_SALTLEN_E)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); #elif defined(HAVE_SELFTEST) && (HAVE_SELFTEST_VERSION == 2) ret = wc_RsaPSS_CheckPadding_ex(digest, digestSz, plain, plainSz, hash[0], len, 0); - if (ret != BAD_PADDING_E) + if (ret != WC_NO_ERR_TRACE(BAD_PADDING_E)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); #else ret = wc_RsaPSS_CheckPadding_ex2(digest, digestSz, plain, plainSz, hash[0], len, 0, HEAP_HINT); - if (ret != PSS_SALTLEN_E) + if (ret != WC_NO_ERR_TRACE(PSS_SALTLEN_E)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_pss); #endif @@ -19985,7 +20000,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t rsa_no_pad_test(void) ret = wc_RsaDirect(tmp, inLen, out, &outSz, key, RSA_PRIVATE_ENCRYPT, &rng); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret <= 0) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_nopadding); } @@ -20005,7 +20020,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t rsa_no_pad_test(void) ret = wc_RsaDirect(out, outSz, plain, &plainSz, key, RSA_PUBLIC_DECRYPT, &rng); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret <= 0) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_nopadding); } @@ -20018,7 +20033,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t rsa_no_pad_test(void) #ifdef WC_RSA_BLINDING ret = wc_RsaSetRNG(NULL, &rng); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_nopadding); } @@ -20038,7 +20053,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t rsa_no_pad_test(void) ret = wc_RsaPublicEncrypt_ex(tmp, inLen, out, outSz, key, &rng, WC_RSA_NO_PAD, WC_HASH_TYPE_NONE, WC_MGF1NONE, NULL, 0); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_nopadding); } @@ -20054,7 +20069,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t rsa_no_pad_test(void) ret = wc_RsaPrivateDecrypt_ex(out, outSz, plain, plainSz, key, WC_RSA_NO_PAD, WC_HASH_TYPE_NONE, WC_MGF1NONE, NULL, 0); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_nopadding); } @@ -20068,25 +20083,25 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t rsa_no_pad_test(void) /* test some bad arguments */ ret = wc_RsaDirect(out, outSz, plain, &plainSz, key, -1, &rng); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_nopadding); } ret = wc_RsaDirect(out, outSz, plain, &plainSz, NULL, RSA_PUBLIC_DECRYPT, &rng); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_nopadding); } ret = wc_RsaDirect(out, outSz, NULL, &plainSz, key, RSA_PUBLIC_DECRYPT, &rng); - if (ret != LENGTH_ONLY_E || plainSz != inLen) { + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E) || plainSz != inLen) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_nopadding); } ret = wc_RsaDirect(out, outSz - 10, plain, &plainSz, key, RSA_PUBLIC_DECRYPT, &rng); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_nopadding); } @@ -20225,12 +20240,17 @@ static wc_test_ret_t rsa_even_mod_test(WC_RNG* rng, RsaKey* key) outSz = wc_RsaEncryptSize(key); XMEMSET(tmp, 7, plainSz); ret = wc_RsaSSL_Sign(tmp, inLen, out, outSz, key, rng); - if (ret != MP_VAL && ret != MP_EXPTMOD_E && ret != MP_INVMOD_E) { + if (ret != WC_NO_ERR_TRACE(MP_VAL) && + ret != WC_NO_ERR_TRACE(MP_EXPTMOD_E) && + ret != WC_NO_ERR_TRACE(MP_INVMOD_E)) + { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_even_mod); } ret = wc_RsaSSL_Verify(out, outSz, tmp, inLen, key); - if (ret != MP_VAL && ret != MP_EXPTMOD_E) { + if (ret != WC_NO_ERR_TRACE(MP_VAL) && + ret != WC_NO_ERR_TRACE(MP_EXPTMOD_E)) + { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_even_mod); } #endif @@ -20245,14 +20265,19 @@ static wc_test_ret_t rsa_even_mod_test(WC_RNG* rng, RsaKey* key) /* test encrypt and decrypt using WC_RSA_NO_PAD */ #if !defined(WOLFSSL_RSA_VERIFY_ONLY) && !defined(WOLFSSL_RSA_PUBLIC_ONLY) ret = wc_RsaPublicEncrypt(tmp, inLen, out, (int)outSz, key, rng); - if (ret != MP_VAL && ret != MP_EXPTMOD_E) { + if (ret != WC_NO_ERR_TRACE(MP_VAL) && + ret != WC_NO_ERR_TRACE(MP_EXPTMOD_E)) + { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_even_mod); } #endif /* WOLFSSL_RSA_VERIFY_ONLY */ #ifndef WOLFSSL_RSA_PUBLIC_ONLY ret = wc_RsaPrivateDecrypt(out, outSz, plain, (int)plainSz, key); - if (ret != MP_VAL && ret != MP_EXPTMOD_E && ret != MP_INVMOD_E) { + if (ret != WC_NO_ERR_TRACE(MP_VAL) && + ret != WC_NO_ERR_TRACE(MP_EXPTMOD_E) && + ret != WC_NO_ERR_TRACE(MP_INVMOD_E)) + { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa_even_mod); } #endif /* WOLFSSL_RSA_PUBLIC_ONLY */ @@ -20393,7 +20418,7 @@ static wc_test_ret_t rsa_certgen_test(RsaKey* key, RsaKey* keypub, WC_RNG* rng, if (ret >= 0) { ret = wc_MakeSelfCert(myCert, der, FOURK_BUF, key, rng); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); } @@ -20554,7 +20579,7 @@ static wc_test_ret_t rsa_certgen_test(RsaKey* key, RsaKey* keypub, WC_RNG* rng, ret = wc_SignCert(myCert->bodySz, myCert->sigType, der, FOURK_BUF, caKey, NULL, rng); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); certSz = (int)ret; @@ -20583,8 +20608,7 @@ static wc_test_ret_t rsa_certgen_test(RsaKey* key, RsaKey* keypub, WC_RNG* rng, XFREE(caKey, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); } #ifdef WOLFSSL_TEST_CERT - if (decode != NULL) - XFREE(decode, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(decode, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif #else wc_FreeRsaKey(caKey); @@ -20783,7 +20807,7 @@ static wc_test_ret_t rsa_ecc_certgen_test(WC_RNG* rng, byte* tmp) ret = wc_SignCert(myCert->bodySz, myCert->sigType, der, FOURK_BUF, caKey, NULL, rng); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); certSz = (int)ret; @@ -20820,8 +20844,7 @@ static wc_test_ret_t rsa_ecc_certgen_test(WC_RNG* rng, byte* tmp) XFREE(caEccKeyPub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); } #ifdef WOLFSSL_TEST_CERT - if (decode != NULL) - XFREE(decode, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(decode, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif #else wc_FreeRsaKey(caKey); @@ -20883,7 +20906,7 @@ static wc_test_ret_t rsa_keygen_test(WC_RNG* rng) ret = wc_AsyncWait(ret, &genKey->asyncDev, WC_ASYNC_FLAG_NONE); #endif #ifdef HAVE_FIPS - if (ret == PRIME_GEN_E) + if (ret == WC_NO_ERR_TRACE(PRIME_GEN_E)) continue; break; } @@ -20940,10 +20963,8 @@ static wc_test_ret_t rsa_keygen_test(WC_RNG* rng) #endif #ifndef WOLFSSL_NO_MALLOC - if (der != NULL) { - XFREE(der, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - der = NULL; - } + XFREE(der, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + der = NULL; #endif return ret; @@ -20990,7 +21011,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) ret = wc_RsaPublicEncrypt_ex(in, inLen, out, outSz, key, rng, WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA, WC_MGF1SHA1, NULL, 0); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); TEST_SLEEP(); @@ -21005,7 +21026,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) ret = wc_RsaPrivateDecrypt_ex(out, idx, plain, plainSz, key, WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA, WC_MGF1SHA1, NULL, 0); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); @@ -21026,7 +21047,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) ret = wc_RsaPublicEncrypt_ex(in, inLen, out, outSz, key, rng, WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, NULL, 0); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); TEST_SLEEP(); @@ -21041,7 +21062,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) ret = wc_RsaPrivateDecrypt_ex(out, idx, plain, plainSz, key, WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, NULL, 0); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); @@ -21060,7 +21081,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) ret = wc_RsaPrivateDecryptInline_ex(out, idx, &res, key, WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, NULL, 0); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); if (ret != (int)inLen) { @@ -21082,7 +21103,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) ret = wc_RsaPublicEncrypt_ex(in, inLen, out, outSz, key, rng, WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, NULL, 0); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); TEST_SLEEP(); @@ -21101,7 +21122,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) ret = wc_RsaPrivateDecrypt_ex(out, idx, plain, plainSz, key, WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, in, inLen); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret > 0) { /* in this case decrypt should fail */ ERROR_OUT(WC_TEST_RET_ENC_NC, exit_rsa); } @@ -21119,7 +21140,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) ret = wc_RsaPublicEncrypt_ex(in, inLen, out, outSz, key, rng, WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, in, inLen); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); TEST_SLEEP(); @@ -21134,7 +21155,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) ret = wc_RsaPrivateDecrypt_ex(out, idx, plain, plainSz, key, WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, in, inLen); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); @@ -21155,7 +21176,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) ret = wc_RsaPublicEncrypt_ex(in, inLen, out, outSz, key, rng, WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA, WC_MGF1SHA1, in, inLen); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); TEST_SLEEP(); @@ -21173,7 +21194,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA256, WC_MGF1SHA256, in, inLen); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret > 0) { /* should fail */ ERROR_OUT(WC_TEST_RET_ENC_NC, exit_rsa); } @@ -21198,7 +21219,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) ret = wc_RsaPublicEncrypt_ex(in, inLen, out, outSz, key, rng, WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA512, WC_MGF1SHA512, NULL, 0); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); TEST_SLEEP(); @@ -21213,7 +21234,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) ret = wc_RsaPrivateDecrypt_ex(out, idx, plain, plainSz, key, WC_RSA_OAEP_PAD, WC_HASH_TYPE_SHA512, WC_MGF1SHA512, NULL, 0); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); @@ -21235,7 +21256,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) ret = wc_RsaPublicEncrypt_ex(in, inLen, out, outSz, key, rng, WC_RSA_PKCSV15_PAD, WC_HASH_TYPE_NONE, 0, NULL, 0); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); TEST_SLEEP(); @@ -21250,7 +21271,7 @@ static wc_test_ret_t rsa_oaep_padding_test(RsaKey* key, WC_RNG* rng) ret = wc_RsaPrivateDecrypt_ex(out, idx, plain, plainSz, key, WC_RSA_PKCSV15_PAD, WC_HASH_TYPE_NONE, 0, NULL, 0); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); @@ -21479,7 +21500,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t rsa_test(void) if (ret >= 0) { ret = wc_RsaPublicEncrypt(in, inLen, out, outSz, key, &rng); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); TEST_SLEEP(); @@ -21502,7 +21523,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t rsa_test(void) if (ret >= 0) { ret = wc_RsaPrivateDecrypt(out, idx, plain, plainSz, key); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); @@ -21518,7 +21539,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t rsa_test(void) if (ret >= 0) { ret = wc_RsaPrivateDecryptInline(out, idx, &res, key); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); if (ret != (int)inLen) { @@ -21536,7 +21557,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t rsa_test(void) if (ret >= 0) { ret = wc_RsaSSL_Sign(in, inLen, out, outSz, key, &rng); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); TEST_SLEEP(); @@ -21617,7 +21638,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t rsa_test(void) } #endif } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); @@ -21861,7 +21882,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t rsa_test(void) ret = wc_SignCert(req->bodySz, req->sigType, der, FOURK_BUF, key, NULL, &rng); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_rsa); derSz = (int)ret; @@ -21925,8 +21946,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t rsa_test(void) } #endif #ifdef WOLFSSL_TEST_CERT - if (cert != NULL) - XFREE(cert, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(cert, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif XFREE(der, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -22071,22 +22091,22 @@ static wc_test_ret_t dh_fips_generate_test(WC_RNG *rng) /* Parameter Validation testing. */ ret = wc_DhGenerateKeyPair(NULL, rng, priv, &privSz, pub, &pubSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_gen_test); ret = wc_DhGenerateKeyPair(key, NULL, priv, &privSz, pub, &pubSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_gen_test); ret = wc_DhGenerateKeyPair(key, rng, NULL, &privSz, pub, &pubSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_gen_test); ret = wc_DhGenerateKeyPair(key, rng, priv, NULL, pub, &pubSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_gen_test); ret = wc_DhGenerateKeyPair(key, rng, priv, &privSz, NULL, &pubSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_gen_test); ret = wc_DhGenerateKeyPair(key, rng, priv, &privSz, pub, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_gen_test); ret = wc_InitDhKey_ex(key, HEAP_HINT, devId); @@ -22140,7 +22160,7 @@ static wc_test_ret_t dh_fips_generate_test(WC_RNG *rng) /* Taint the public key so the check fails. */ pub[0]++; ret = wc_DhCheckKeyPair(key, pub, pubSz, priv, privSz); - if (ret != MP_CMP_E) { + if (ret != WC_NO_ERR_TRACE(MP_CMP_E)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_gen_test); } @@ -22218,28 +22238,28 @@ static wc_test_ret_t dh_generate_test(WC_RNG *rng) /* Parameter Validation testing. */ ret = wc_InitDhKey_ex(NULL, HEAP_HINT, devId); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); wc_FreeDhKey(NULL); ret = wc_DhSetKey(NULL, p, sizeof(p), g, sizeof(g)); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_gen_test); } ret = wc_DhSetKey(smallKey, NULL, sizeof(p), g, sizeof(g)); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_gen_test); } ret = wc_DhSetKey(smallKey, p, 0, g, sizeof(g)); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_gen_test); } ret = wc_DhSetKey(smallKey, p, sizeof(p), NULL, sizeof(g)); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_gen_test); } ret = wc_DhSetKey(smallKey, p, sizeof(p), g, 0); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_gen_test); } ret = wc_DhSetKey(smallKey, p, sizeof(p), g, sizeof(g)); @@ -22301,8 +22321,7 @@ static wc_test_ret_t dh_generate_test(WC_RNG *rng) wc_FreeDhKey(smallKey); #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (smallKey != NULL) - XFREE(smallKey, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(smallKey, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; @@ -22358,7 +22377,7 @@ static wc_test_ret_t dh_test_check_pubvalue(void) for (i = 0; i < sizeof(dh_pubval_fail) / sizeof(*dh_pubval_fail); i++) { ret = wc_DhCheckPubValue(prime, sizeof(prime), dh_pubval_fail[i].data, dh_pubval_fail[i].len); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_I(i); } @@ -22513,7 +22532,9 @@ static wc_test_ret_t dh_ffdhe_test(WC_RNG *rng, int name) #if defined(WOLFSSL_ASYNC_CRYPT) ret = wc_AsyncWait(ret, &key->asyncDev, WC_ASYNC_FLAG_NONE); #endif - if (ret != MP_VAL && ret != MP_EXPTMOD_E) { + if (ret != WC_NO_ERR_TRACE(MP_VAL) && + ret != WC_NO_ERR_TRACE(MP_EXPTMOD_E)) + { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); } @@ -22521,14 +22542,20 @@ static wc_test_ret_t dh_ffdhe_test(WC_RNG *rng, int name) #if defined(WOLFSSL_ASYNC_CRYPT) ret = wc_AsyncWait(ret, &key->asyncDev, WC_ASYNC_FLAG_NONE); #endif - if (ret != MP_VAL && ret != MP_EXPTMOD_E && ret != ASYNC_OP_E) { + if (ret != WC_NO_ERR_TRACE(MP_VAL) && + ret != WC_NO_ERR_TRACE(MP_EXPTMOD_E) && + ret != WC_NO_ERR_TRACE(ASYNC_OP_E)) + { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); } #ifndef HAVE_SELFTEST ret = wc_DhCheckKeyPair(key, pub, pubSz, priv, privSz); - if (ret != MP_VAL && ret != MP_EXPTMOD_E && ret != MP_CMP_E && - ret != ASYNC_OP_E) { + if (ret != WC_NO_ERR_TRACE(MP_VAL) && + ret != WC_NO_ERR_TRACE(MP_EXPTMOD_E) && + ret != WC_NO_ERR_TRACE(MP_CMP_E) && + ret != WC_NO_ERR_TRACE(ASYNC_OP_E)) + { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); } #endif @@ -22541,18 +22568,12 @@ static wc_test_ret_t dh_ffdhe_test(WC_RNG *rng, int name) #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) && \ !defined(WC_NO_RNG) - if (priv) - XFREE(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (pub) - XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (priv2) - XFREE(priv2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (pub2) - XFREE(pub2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (agree) - XFREE(agree, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (agree2) - XFREE(agree2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(priv2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(pub2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(agree, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(agree2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); if (key) { wc_FreeDhKey(key); XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -22768,7 +22789,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dh_test(void) #if defined(WOLFSSL_KEY_GEN) && !defined(HAVE_FIPS) && !defined(HAVE_SELFTEST) ret = wc_DhCheckPrivKey(NULL, NULL, 0); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_DhCheckPrivKey(key, priv, privSz); @@ -22776,12 +22797,12 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dh_test(void) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_DhExportParamsRaw(NULL, NULL, NULL, NULL, NULL, NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); { word32 pSz, qSz, gSz; ret = wc_DhExportParamsRaw(key, NULL, &pSz, NULL, &qSz, NULL, &gSz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); } #endif @@ -22975,20 +22996,13 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dh_test(void) wc_FreeDhKey(key2); XFREE(key2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); } - if (tmp) - XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (priv) - XFREE(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (pub) - XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (priv2) - XFREE(priv2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (pub2) - XFREE(pub2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (agree) - XFREE(agree, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (agree2) - XFREE(agree2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(priv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(priv2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(pub2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(agree, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(agree2, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #else if (keyInit) wc_FreeDhKey(key); @@ -23165,13 +23179,11 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dsa_test(void) out: #ifdef WOLFSSL_KEY_GEN - if (der) - XFREE(der, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(der, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (tmp) - XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); if (key) { if (key_inited) wc_FreeDsaKey(key); @@ -23362,14 +23374,10 @@ static wc_test_ret_t srp_test_digest(SrpType dgstType) #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) out: - if (cli) - XFREE(cli, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (srv) - XFREE(srv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (clientProof) - XFREE(clientProof, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (serverProof) - XFREE(serverProof, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(cli, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(srv, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(clientProof, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(serverProof, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif return r; @@ -25504,11 +25512,17 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t openssl_test(void) (unsigned char*)key, (unsigned char*)iv) == 0) return WC_TEST_RET_ENC_NC; - if (wolfSSL_EVP_EncryptFinal_ex(NULL, NULL, NULL) != WOLFSSL_FAILURE) + if (wolfSSL_EVP_EncryptFinal_ex(NULL, NULL, NULL) + != WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) + { return WC_TEST_RET_ENC_NC; + } - if (wolfSSL_EVP_EncryptFinal(NULL, NULL, NULL) != WOLFSSL_FAILURE) + if (wolfSSL_EVP_EncryptFinal(NULL, NULL, NULL) + != WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) + { return WC_TEST_RET_ENC_NC; + } if (wolfSSL_EVP_CIPHER_CTX_cleanup(de) != WOLFSSL_SUCCESS) return WC_TEST_RET_ENC_NC; @@ -25520,13 +25534,19 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t openssl_test(void) (unsigned char*)key, (unsigned char*)iv) == 0) return WC_TEST_RET_ENC_NC; - if (wolfSSL_EVP_DecryptFinal(NULL, NULL, NULL) != WOLFSSL_FAILURE) + if (wolfSSL_EVP_DecryptFinal(NULL, NULL, NULL) + != WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) + { return WC_TEST_RET_ENC_NC; + } - if (wolfSSL_EVP_DecryptFinal_ex(NULL, NULL, NULL) != WOLFSSL_FAILURE) + if (wolfSSL_EVP_DecryptFinal_ex(NULL, NULL, NULL) + != WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) + { return WC_TEST_RET_ENC_NC; + } - if (EVP_CIPHER_CTX_block_size(NULL) != BAD_FUNC_ARG) + if (EVP_CIPHER_CTX_block_size(NULL) != WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) return WC_TEST_RET_ENC_NC; if (wolfSSL_EVP_CIPHER_CTX_cleanup(en) != WOLFSSL_SUCCESS) @@ -25537,7 +25557,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t openssl_test(void) if (EVP_CIPHER_CTX_block_size(en) != en->block_size) return WC_TEST_RET_ENC_NC; - if (EVP_CIPHER_block_size(NULL) != BAD_FUNC_ARG) + if (EVP_CIPHER_block_size(NULL) != WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) return WC_TEST_RET_ENC_NC; if (EVP_CIPHER_block_size(EVP_aes_128_cbc()) != AES_BLOCK_SIZE) @@ -25554,7 +25574,8 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t openssl_test(void) if (en->flags != 42) return WC_TEST_RET_ENC_NC; - if (EVP_CIPHER_CTX_set_padding(NULL, 0) != BAD_FUNC_ARG) + if (EVP_CIPHER_CTX_set_padding(NULL, 0) != + WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) return WC_TEST_RET_ENC_NC; if (EVP_CIPHER_CTX_set_padding(en, 0) != WOLFSSL_SUCCESS) return WC_TEST_RET_ENC_NC; @@ -26085,12 +26106,9 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t openssl_pkey1_test(void) } #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (tmp != NULL) - XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (cipher != NULL) - XFREE(cipher, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (plain != NULL) - XFREE(plain, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(cipher, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(plain, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif #endif @@ -26376,7 +26394,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t scrypt_test(void) /* Test case with parallel overflowing */ ret = wc_scrypt(derived, (byte*)"password", 16, (byte*)"NaCl", 16, 2, 4, 8388608, sizeof(verify1)); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); /* Don't run these test on embedded, since they use large mallocs */ @@ -26601,7 +26619,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t pkcs12_test(void) } ret = wc_i2d_PKCS12(pkcs12, NULL, &pkcs12derSz); - if (ret != LENGTH_ONLY_E) { + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) { if (ret == 0) ret = WC_TEST_RET_ENC_NC; else @@ -27036,7 +27054,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t tls12_kdf_test(void) (const byte*)label, (word32)XSTRLEN(label), seed, seedSz, 1, sha256_mac, NULL, INVALID_DEVID); if (ret != 0) { - if (ret == FIPS_PRIVATE_KEY_LOCKED_E) { + if (ret == WC_NO_ERR_TRACE(FIPS_PRIVATE_KEY_LOCKED_E)) { printf(" wc_PRF_TLSv12: Private key locked.\n"); } return WC_TEST_RET_ENC_NC; @@ -27621,7 +27639,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t tls13_kdf_test(void) XMEMSET(zeroes, 0, sizeof zeroes); hashAlgSz = wc_HashGetDigestSize(tv->hashAlg); - if (hashAlgSz == BAD_FUNC_ARG) break; + if (hashAlgSz == WC_NO_ERR_TRACE(BAD_FUNC_ARG)) break; ret = wc_Hash(tv->hashAlg, NULL, 0, hashZero, (word32)hashAlgSz); if (ret != 0) break; @@ -27980,7 +27998,7 @@ static wc_test_ret_t hpke_test_single(Hpke* hpke) /* Negative test case with NULL argument */ if (ret == 0) { ret = wc_HpkeGenerateKeyPair(NULL, &receiverKey, rng); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ret = WC_TEST_RET_ENC_EC(ret); else ret = 0; @@ -27988,7 +28006,7 @@ static wc_test_ret_t hpke_test_single(Hpke* hpke) if (ret == 0) { ret = wc_HpkeGenerateKeyPair(hpke, NULL, rng); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ret = WC_TEST_RET_ENC_EC(ret); else ret = 0; @@ -27996,7 +28014,7 @@ static wc_test_ret_t hpke_test_single(Hpke* hpke) if (ret == 0) { ret = wc_HpkeGenerateKeyPair(hpke, &receiverKey, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ret = WC_TEST_RET_ENC_EC(ret); else ret = 0; @@ -28009,8 +28027,7 @@ static wc_test_ret_t hpke_test_single(Hpke* hpke) wc_HpkeFreeKey(hpke, hpke->kem, receiverKey, hpke->heap); #ifdef WOLFSSL_SMALL_STACK - if (pubKey != NULL) - XFREE(pubKey, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(pubKey, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif if (rngRet == 0) @@ -28093,13 +28110,13 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t hpke_test(void) HPKE_AES_256_GCM, NULL); /* HPKE does not support X448 yet, so expect failure */ - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = hpke_test_single(hpke); /* HPKE does not support X448 yet, so expect failure */ - if (WC_TEST_RET_DEC_EC(ret) != BAD_FUNC_ARG) + if (WC_TEST_RET_DEC_EC(ret) != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return ret; ret = 0; /* reset error code */ #endif @@ -28483,78 +28500,78 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t srtpkdf_test(void) ret = wc_SRTP_KDF(tv[i].key, 33, tv[i].salt, tv[i].saltSz, tv[i].kdfIdx, tv[i].index, keyE, tv[i].keSz, keyA, tv[i].kaSz, keyS, tv[i].ksSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SRTCP_KDF(tv[i].key, 33, tv[i].salt, tv[i].saltSz, tv[i].kdfIdx, tv[i].index_c, keyE, tv[i].keSz, keyA, tv[i].kaSz, keyS, tv[i].ksSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SRTP_KDF(tv[i].key, 15, tv[i].salt, tv[i].saltSz, tv[i].kdfIdx, tv[i].index, keyE, tv[i].keSz, keyA, tv[i].kaSz, keyS, tv[i].ksSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SRTCP_KDF(tv[i].key, 15, tv[i].salt, tv[i].saltSz, tv[i].kdfIdx, tv[i].index_c, keyE, tv[i].keSz, keyA, tv[i].kaSz, keyS, tv[i].ksSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SRTP_KDF(tv[i].key, tv[i].keySz, tv[i].salt, 15, tv[i].kdfIdx, tv[i].index, keyE, tv[i].keSz, keyA, tv[i].kaSz, keyS, tv[i].ksSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SRTCP_KDF(tv[i].key, tv[i].keySz, tv[i].salt, 15, tv[i].kdfIdx, tv[i].index_c, keyE, tv[i].keSz, keyA, tv[i].kaSz, keyS, tv[i].ksSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SRTP_KDF(NULL, tv[i].keySz, tv[i].salt, tv[i].saltSz, tv[i].kdfIdx, tv[i].index, keyE, tv[i].keSz, keyA, tv[i].kaSz, keyS, tv[i].ksSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SRTCP_KDF(NULL, tv[i].keySz, tv[i].salt, tv[i].saltSz, tv[i].kdfIdx, tv[i].index_c, keyE, tv[i].keSz, keyA, tv[i].kaSz, keyS, tv[i].ksSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SRTP_KDF(tv[i].key, tv[i].keySz, NULL, tv[i].saltSz, tv[i].kdfIdx, tv[i].index, keyE, tv[i].keSz, keyA, tv[i].kaSz, keyS, tv[i].ksSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SRTCP_KDF(tv[i].key, tv[i].keySz, NULL, tv[i].saltSz, tv[i].kdfIdx, tv[i].index_c, keyE, tv[i].keSz, keyA, tv[i].kaSz, keyS, tv[i].ksSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SRTP_KDF(tv[i].key, tv[i].keySz, tv[i].salt, tv[i].saltSz, 25, tv[i].index, keyE, tv[i].keSz, keyA, tv[i].kaSz, keyS, tv[i].ksSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SRTCP_KDF(tv[i].key, tv[i].keySz, tv[i].salt, tv[i].saltSz, 25, tv[i].index_c, keyE, tv[i].keSz, keyA, tv[i].kaSz, keyS, tv[i].ksSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SRTP_KDF(tv[i].key, tv[i].keySz, tv[i].salt, tv[i].saltSz, -2, tv[i].index, keyE, tv[i].keSz, keyA, tv[i].kaSz, keyS, tv[i].ksSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SRTCP_KDF(tv[i].key, tv[i].keySz, tv[i].salt, tv[i].saltSz, -2, tv[i].index_c, keyE, tv[i].keSz, keyA, tv[i].kaSz, keyS, tv[i].ksSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SRTP_KDF(tv[i].key, tv[i].keySz, tv[i].salt, tv[i].saltSz, @@ -28735,12 +28752,12 @@ static wc_test_ret_t ecc_test_vector_item(const eccVector* vector) ret = wc_ecc_init_ex(userA, HEAP_HINT, devId); if (ret != 0) - goto done; + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_ecc_import_raw(userA, vector->Qx, vector->Qy, vector->d, vector->curveName); if (ret != 0) - goto done; + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #if !defined(NO_ASN) XMEMSET(sig, 0, ECC_SIG_SIZE); @@ -28755,7 +28772,7 @@ static wc_test_ret_t ecc_test_vector_item(const eccVector* vector) ret = wc_ecc_rs_raw_to_sig(vector->r, vector->rSz, vector->s, vector->sSz, sigRaw, &sigRawSz); if (ret != 0) - goto done; + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); if (sigSz != sigRawSz || XMEMCMP(sig, sigRaw, sigSz) != 0) { ret = WC_TEST_RET_ENC_NC; goto done; @@ -28763,7 +28780,7 @@ static wc_test_ret_t ecc_test_vector_item(const eccVector* vector) ret = wc_ecc_sig_to_rs(sig, sigSz, r, &rSz, s, &sSz); if (ret != 0) - goto done; + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); if (rSz != vector->rSz || XMEMCMP(r, vector->r, rSz) != 0 || sSz != vector->sSz || XMEMCMP(s, vector->s, sSz) != 0) { ret = WC_TEST_RET_ENC_NC; @@ -28789,9 +28806,9 @@ static wc_test_ret_t ecc_test_vector_item(const eccVector* vector) if (ret == 0) ret = wc_ecc_verify_hash(sig, sigSz, (byte*)vector->msg, vector->msgLen, &verify, userA); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) - goto done; + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); TEST_SLEEP(); if (verify != 1) @@ -29043,7 +29060,9 @@ static wc_test_ret_t ecc_test_vector(int keySize) break; #endif /* HAVE_ECC521 */ default: - return NOT_COMPILED_IN; /* Invalid key size / Not supported */ + return WC_TEST_RET_ENC_EC(NOT_COMPILED_IN); /* Invalid key size / + * Not supported + */ }; /* Switch */ ret = ecc_test_vector_item(&vec); @@ -29074,9 +29093,8 @@ static wc_test_ret_t ecdsa_test_deterministic_k_sig(ecc_key *key, ret = wc_Hash(hashType, (byte*)msg, (word32)XSTRLEN(msg), hash, sizeof(hash)); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); /* Sign test */ sigSz = sizeof(sig); @@ -29087,10 +29105,9 @@ static wc_test_ret_t ecdsa_test_deterministic_k_sig(ecc_key *key, if (ret == 0) ret = wc_ecc_sign_hash(hash, wc_HashGetDigestSize(hashType), sig, &sigSz, rng, key); - } while (ret == WC_PENDING_E); - if (ret != 0) { - goto done; - } + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); TEST_SLEEP(); /* Compare test vector */ @@ -29112,10 +29129,9 @@ static wc_test_ret_t ecdsa_test_deterministic_k_sig(ecc_key *key, if (ret == 0) ret = wc_ecc_verify_hash(sig, sigSz, hash, wc_HashGetDigestSize(hashType), &verify, key); - } while (ret == WC_PENDING_E); - if (ret != 0) { - goto done; - } + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); if (verify != 1) { ERROR_OUT(WC_TEST_RET_ENC_NC, done); } @@ -29195,45 +29211,39 @@ static wc_test_ret_t ecc_test_deterministic_k(WC_RNG* rng) #endif ret = wc_ecc_init_ex(key, HEAP_HINT, devId); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); key_inited = 1; ret = wc_ecc_import_raw(key, QIUTx, QIUTy, dIUT, "SECP256R1"); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_ecc_set_deterministic(key, 1); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #ifndef NO_SHA256 /* Test for SHA2-256 */ ret = ecdsa_test_deterministic_k_sig(key, WC_HASH_TYPE_SHA256, msg, rng, expSig256, sizeof(expSig256)); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #endif /* !NO_SHA256 */ #ifdef WOLFSSL_SHA384 /* Test for SHA2-384 */ ret = ecdsa_test_deterministic_k_sig(key, WC_HASH_TYPE_SHA384, msg, rng, expSig384, sizeof(expSig384)); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #endif /* WOLFSSL_SHA384 */ #ifdef WOLFSSL_SHA512 /* Test for SHA2-512 */ ret = ecdsa_test_deterministic_k_sig(key, WC_HASH_TYPE_SHA512, msg, rng, expSig512, sizeof(expSig512)); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #endif /* WOLFSSL_SHA512 */ done: @@ -29261,18 +29271,16 @@ static wc_test_ret_t ecdsa_test_deterministic_k_rs(ecc_key *key, ret = wc_Hash(hashType, (byte*)msg, (word32)XSTRLEN(msg), hash, sizeof(hash)); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_ecc_sign_hash_ex(hash, wc_HashGetDigestSize(hashType), rng, key, r, s); #if defined(WOLFSSL_ASYNC_CRYPT) ret = wc_AsyncWait(ret, &key->asyncDev, WC_ASYNC_FLAG_NONE); #endif - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); TEST_SLEEP(); if (mp_cmp(r, expR) != MP_EQ && mp_cmp(s, expS) != MP_EQ) { @@ -29286,9 +29294,8 @@ static wc_test_ret_t ecdsa_test_deterministic_k_rs(ecc_key *key, #if defined(WOLFSSL_ASYNC_CRYPT) ret = wc_AsyncWait(ret, &key->asyncDev, WC_ASYNC_FLAG_NONE); #endif - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); if (verify != 1) { ERROR_OUT(WC_TEST_RET_ENC_NC, done); } @@ -29359,31 +29366,26 @@ static wc_test_ret_t ecc384_test_deterministic_k(WC_RNG* rng) (expR == NULL) || (expS == NULL)) { - ret = MEMORY_E; - goto done; + ERROR_OUT(WC_TEST_RET_ENC_EC(MEMORY_E), done); } #endif ret = mp_init_multi(r, s, expR, expS, NULL, NULL); - if (ret != MP_OKAY) { - goto done; - } + if (ret != MP_OKAY) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); tmp_mp_ints_inited = 1; ret = wc_ecc_init_ex(key, HEAP_HINT, devId); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); key_inited = 1; ret = wc_ecc_import_raw(key, QIUTx, QIUTy, dIUT, "SECP384R1"); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_ecc_set_deterministic(key, 1); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #ifndef NO_SHA256 /* Test for SHA2-256 */ @@ -29391,9 +29393,8 @@ static wc_test_ret_t ecc384_test_deterministic_k(WC_RNG* rng) mp_read_radix(expS, expSstr256, MP_RADIX_HEX); ret = ecdsa_test_deterministic_k_rs(key, WC_HASH_TYPE_SHA256, msg, rng, r, s, expR, expS); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #endif /* NO_SHA256 */ #ifdef WOLFSSL_SHA384 @@ -29402,9 +29403,8 @@ static wc_test_ret_t ecc384_test_deterministic_k(WC_RNG* rng) mp_read_radix(expS, expSstr384, MP_RADIX_HEX); ret = ecdsa_test_deterministic_k_rs(key, WC_HASH_TYPE_SHA384, msg, rng, r, s, expR, expS); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #endif /* WOLFSSL_SHA384 */ #ifdef WOLFSSL_SHA512 @@ -29413,9 +29413,8 @@ static wc_test_ret_t ecc384_test_deterministic_k(WC_RNG* rng) mp_read_radix(expS, expSstr512, MP_RADIX_HEX); ret = ecdsa_test_deterministic_k_rs(key, WC_HASH_TYPE_SHA512, msg, rng, r, s, expR, expS); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #endif /* WOLFSSL_SHA512 */ done: @@ -29428,16 +29427,11 @@ static wc_test_ret_t ecc384_test_deterministic_k(WC_RNG* rng) mp_free(expS); } #ifdef WOLFSSL_SMALL_STACK - if (key != NULL) - XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (r != NULL) - XFREE(r, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (s != NULL) - XFREE(s, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (expR != NULL) - XFREE(expR, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (expS != NULL) - XFREE(expS, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(r, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(s, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(expR, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(expS, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; @@ -29515,31 +29509,27 @@ static wc_test_ret_t ecc521_test_deterministic_k(WC_RNG* rng) (expR == NULL) || (expS == NULL)) { - ret = MEMORY_E; + ret = WC_TEST_RET_ENC_EC(MEMORY_E); goto done; } #endif ret = mp_init_multi(r, s, expR, expS, NULL, NULL); - if (ret != MP_OKAY) { - goto done; - } + if (ret != MP_OKAY) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); tmp_mp_ints_inited = 1; ret = wc_ecc_init_ex(key, HEAP_HINT, devId); - if (ret != 0) { - return WC_TEST_RET_ENC_EC(ret); - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); key_inited = 1; ret = wc_ecc_import_raw(key, QIUTx, QIUTy, dIUT, "SECP521R1"); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_ecc_set_deterministic(key, 1); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #ifndef NO_SHA256 /* Test for SHA2-256 */ @@ -29547,9 +29537,8 @@ static wc_test_ret_t ecc521_test_deterministic_k(WC_RNG* rng) mp_read_radix(expS, expSstr256, MP_RADIX_HEX); ret = ecdsa_test_deterministic_k_rs(key, WC_HASH_TYPE_SHA256, msg, rng, r, s, expR, expS); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #endif /* NO_SHA256 */ #ifdef WOLFSSL_SHA384 @@ -29558,9 +29547,8 @@ static wc_test_ret_t ecc521_test_deterministic_k(WC_RNG* rng) mp_read_radix(expS, expSstr384, MP_RADIX_HEX); ret = ecdsa_test_deterministic_k_rs(key, WC_HASH_TYPE_SHA384, msg, rng, r, s, expR, expS); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #endif /* WOLFSSL_SHA384 */ #ifdef WOLFSSL_SHA512 @@ -29569,9 +29557,8 @@ static wc_test_ret_t ecc521_test_deterministic_k(WC_RNG* rng) mp_read_radix(expS, expSstr512, MP_RADIX_HEX); ret = ecdsa_test_deterministic_k_rs(key, WC_HASH_TYPE_SHA512, msg, rng, r, s, expR, expS); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #endif /* WOLFSSL_SHA512 */ done: @@ -29584,16 +29571,11 @@ static wc_test_ret_t ecc521_test_deterministic_k(WC_RNG* rng) mp_free(expS); } #ifdef WOLFSSL_SMALL_STACK - if (key != NULL) - XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (r != NULL) - XFREE(r, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (s != NULL) - XFREE(s, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (expR != NULL) - XFREE(expR, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (expS != NULL) - XFREE(expS, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(r, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(s, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(expR, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(expS, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; @@ -29641,24 +29623,21 @@ static wc_test_ret_t ecc_test_sign_vectors(WC_RNG* rng) #endif ret = wc_ecc_init_ex(key, HEAP_HINT, devId); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); key_inited = 1; ret = wc_ecc_import_raw(key, QIUTx, QIUTy, dIUT, "SECP256R1"); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #if (!defined(HAVE_FIPS) || (defined(HAVE_FIPS_VERSION) \ && (HAVE_FIPS_VERSION > 2))) wc_ecc_set_flags(key, WC_ECC_FLAG_DEC_SIGN); #endif ret = wc_ecc_sign_set_k(k, sizeof(k), key); - if (ret != 0) { - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); sigSz = sizeof(sig); do { @@ -29667,10 +29646,9 @@ static wc_test_ret_t ecc_test_sign_vectors(WC_RNG* rng) #endif if (ret == 0) ret = wc_ecc_sign_hash(hash, sizeof(hash), sig, &sigSz, rng, key); - } while (ret == WC_PENDING_E); - if (ret != 0) { - goto done; - } + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); TEST_SLEEP(); if (sigSz != sizeof(expSig)) { @@ -29689,10 +29667,9 @@ static wc_test_ret_t ecc_test_sign_vectors(WC_RNG* rng) #endif if (ret == 0) ret = wc_ecc_sign_hash(hash, sizeof(hash), sig, &sigSz, rng, key); - } while (ret == WC_PENDING_E); - if (ret != 0) { - goto done; - } + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); TEST_SLEEP(); done: @@ -29729,7 +29706,7 @@ static wc_test_ret_t ecc_test_cdh_vectors(WC_RNG* rng) #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) if ((pub_key == NULL) || (priv_key == NULL)) { - ret = MEMORY_E; + ret = WC_TEST_RET_ENC_EC(MEMORY_E); goto done; } #endif @@ -29740,25 +29717,25 @@ static wc_test_ret_t ecc_test_cdh_vectors(WC_RNG* rng) /* setup private and public keys */ ret = wc_ecc_init_ex(pub_key, HEAP_HINT, devId); if (ret != 0) - goto done; + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_ecc_init_ex(priv_key, HEAP_HINT, devId); if (ret != 0) - goto done; + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); wc_ecc_set_flags(pub_key, WC_ECC_FLAG_COFACTOR); wc_ecc_set_flags(priv_key, WC_ECC_FLAG_COFACTOR); ret = wc_ecc_import_raw(pub_key, QCAVSx, QCAVSy, NULL, "SECP256R1"); if (ret != 0) - goto done; + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_ecc_import_raw(priv_key, QIUTx, QIUTy, dIUT, "SECP256R1"); if (ret != 0) - goto done; + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #if defined(ECC_TIMING_RESISTANT) && (!defined(HAVE_FIPS) || \ (!defined(HAVE_FIPS_VERSION) || (HAVE_FIPS_VERSION != 2))) && \ !defined(HAVE_SELFTEST) ret = wc_ecc_set_rng(priv_key, rng); if (ret != 0) - goto done; + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #else (void)rng; #endif @@ -29771,17 +29748,16 @@ static wc_test_ret_t ecc_test_cdh_vectors(WC_RNG* rng) #endif if (ret == 0) ret = wc_ecc_shared_secret(priv_key, pub_key, sharedA, &x); - } while (ret == WC_PENDING_E); - if (ret != 0) { - goto done; - } + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); TEST_SLEEP(); /* read in expected Z */ z = sizeof(sharedB); ret = Base16_Decode((const byte*)ZIUT, (word32)XSTRLEN(ZIUT), sharedB, &z); if (ret != 0) - goto done; + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); /* compare results */ if (x != z || XMEMCMP(sharedA, sharedB, x)) { @@ -29985,7 +29961,7 @@ static wc_test_ret_t ecc_test_make_pub(WC_RNG* rng) ret = wc_ecc_sign_hash(msg, (word32)XSTRLEN((const char* )msg), tmp, &tmpSz, rng, key); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); TEST_SLEEP(); @@ -30001,7 +29977,7 @@ static wc_test_ret_t ecc_test_make_pub(WC_RNG* rng) ret = wc_ecc_verify_hash(tmp, tmpSz, msg, (word32)XSTRLEN((const char*)msg), &verify, key); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); @@ -30073,7 +30049,7 @@ static wc_test_ret_t ecc_test_make_pub(WC_RNG* rng) if (ret == 0) { ret = wc_ecc_shared_secret(key, pub, exportBuf, &x); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); wc_ecc_free(pub); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); @@ -30092,13 +30068,10 @@ static wc_test_ret_t ecc_test_make_pub(WC_RNG* rng) XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); } #if defined(HAVE_ECC_DHE) && defined(HAVE_ECC_KEY_EXPORT) - if (pub != NULL) - XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif - if (exportBuf != NULL) - XFREE(exportBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (tmp != NULL) - XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(exportBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #else wc_ecc_free(key); #endif @@ -30177,8 +30150,7 @@ static wc_test_ret_t ecc_test_key_decode(WC_RNG* rng, int keySize) wc_ecc_free(eccKey); XFREE(eccKey, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); } - if (tmpBuf != NULL) - XFREE(tmpBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(tmpBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #else wc_ecc_free(eccKey); #endif @@ -30282,8 +30254,7 @@ static wc_test_ret_t ecc_test_key_gen(WC_RNG* rng, int keySize) done: #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (der != NULL) - XFREE(der, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(der, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); if (userA != NULL) { wc_ecc_free(userA); XFREE(userA, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -30411,12 +30382,12 @@ static wc_test_ret_t ecc_test_curve_size(WC_RNG* rng, int keySize, int testVerif ret = wc_AsyncWait(ret, &userA->asyncDev, WC_ASYNC_FLAG_NONE); #endif #ifdef WOLF_CRYPTO_CB_ONLY_ECC - if (ret == NO_VALID_DEVID) { + if (ret == WC_NO_ERR_TRACE(NO_VALID_DEVID)) { ret = 0; goto done; /* no software case */ } #endif - if (ret == ECC_CURVE_OID_E) + if (ret == WC_NO_ERR_TRACE(ECC_CURVE_OID_E)) goto done; /* catch case, where curve is not supported */ if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); @@ -30468,7 +30439,7 @@ static wc_test_ret_t ecc_test_curve_size(WC_RNG* rng, int keySize, int testVerif #endif if (ret == 0) ret = wc_ecc_shared_secret(userA, userB, sharedA, &x); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); TEST_SLEEP(); @@ -30480,7 +30451,7 @@ static wc_test_ret_t ecc_test_curve_size(WC_RNG* rng, int keySize, int testVerif #endif if (ret == 0) ret = wc_ecc_shared_secret(userB, userA, sharedB, &y); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); @@ -30503,7 +30474,7 @@ static wc_test_ret_t ecc_test_curve_size(WC_RNG* rng, int keySize, int testVerif #endif if (ret == 0) ret = wc_ecc_shared_secret(userA, userB, sharedA, &x); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); TEST_SLEEP(); @@ -30515,7 +30486,7 @@ static wc_test_ret_t ecc_test_curve_size(WC_RNG* rng, int keySize, int testVerif #endif if (ret == 0) ret = wc_ecc_shared_secret(userB, userA, sharedB, &y); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); @@ -30560,7 +30531,7 @@ static wc_test_ret_t ecc_test_curve_size(WC_RNG* rng, int keySize, int testVerif #endif if (ret == 0) ret = wc_ecc_shared_secret(userB, pubKey, sharedB, &y); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); @@ -30599,7 +30570,7 @@ static wc_test_ret_t ecc_test_curve_size(WC_RNG* rng, int keySize, int testVerif #endif if (ret == 0) ret = wc_ecc_shared_secret(userB, pubKey, sharedB, &y); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); @@ -30637,7 +30608,7 @@ static wc_test_ret_t ecc_test_curve_size(WC_RNG* rng, int keySize, int testVerif if (ret == 0) ret = wc_ecc_sign_hash(digest, ECC_DIGEST_SIZE, sig, &x, rng, userA); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); TEST_SLEEP(); @@ -30652,7 +30623,7 @@ static wc_test_ret_t ecc_test_curve_size(WC_RNG* rng, int keySize, int testVerif if (ret == 0) ret = wc_ecc_verify_hash(sig, x, digest, ECC_DIGEST_SIZE, &verify, userA); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); if (verify != 1) @@ -30674,7 +30645,7 @@ static wc_test_ret_t ecc_test_curve_size(WC_RNG* rng, int keySize, int testVerif #endif if (ret == 0) ret = wc_ecc_sign_hash(digest, ECC_DIGEST_SIZE, sig, &x, rng, userA); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); TEST_SLEEP(); @@ -30688,7 +30659,7 @@ static wc_test_ret_t ecc_test_curve_size(WC_RNG* rng, int keySize, int testVerif #endif if (ret == 0) ret = wc_ecc_verify_hash(sig, x, digest, ECC_DIGEST_SIZE, &verify, userA); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); if (verify != 1) @@ -30770,7 +30741,7 @@ static wc_test_ret_t ecc_test_curve(WC_RNG* rng, int keySize, int curve_id) ret = ecc_test_curve_size(rng, keySize, ECC_TEST_VERIFY_COUNT, curve_id, NULL); if (ret < 0) { - if (ret == ECC_CURVE_OID_E) { + if (ret == WC_NO_ERR_TRACE(ECC_CURVE_OID_E)) { /* ignore error for curves not found */ /* some curve sizes are only available with: HAVE_ECC_SECPR2, HAVE_ECC_SECPR3, HAVE_ECC_BRAINPOOL @@ -30803,7 +30774,7 @@ static wc_test_ret_t ecc_test_curve(WC_RNG* rng, int keySize, int curve_id) !defined(NO_ASN_CRYPT) && !defined(WC_NO_RNG) ret = ecc_test_key_decode(rng, keySize); if (ret < 0) { - if (ret == ECC_CURVE_OID_E) { + if (ret == WC_NO_ERR_TRACE(ECC_CURVE_OID_E)) { /* ignore error for curves not found */ } else { @@ -30816,7 +30787,7 @@ static wc_test_ret_t ecc_test_curve(WC_RNG* rng, int keySize, int curve_id) #if defined(HAVE_ECC_KEY_EXPORT) && !defined(NO_ASN_CRYPT) && !defined(WC_NO_RNG) ret = ecc_test_key_gen(rng, keySize); if (ret < 0) { - if (ret == ECC_CURVE_OID_E) { + if (ret == WC_NO_ERR_TRACE(ECC_CURVE_OID_E)) { /* ignore error for curves not found */ } else { @@ -30912,90 +30883,86 @@ static wc_test_ret_t ecc_point_test(void) /* Parameter Validation testing. */ wc_ecc_del_point(NULL); ret = wc_ecc_import_point_der(NULL, sizeof(der), curve_idx, point); - if (ret != ECC_BAD_ARG_E) { + if (ret != WC_NO_ERR_TRACE(ECC_BAD_ARG_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_ecc_import_point_der(der, sizeof(der), ECC_CURVE_INVALID, point); - if (ret != ECC_BAD_ARG_E) { + if (ret != WC_NO_ERR_TRACE(ECC_BAD_ARG_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_ecc_import_point_der(der, sizeof(der), curve_idx, NULL); - if (ret != ECC_BAD_ARG_E) { + if (ret != WC_NO_ERR_TRACE(ECC_BAD_ARG_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_ecc_export_point_der(-1, point, out, &outLen); - if (ret != ECC_BAD_ARG_E) { + if (ret != WC_NO_ERR_TRACE(ECC_BAD_ARG_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_ecc_export_point_der(curve_idx, NULL, out, &outLen); - if (ret != ECC_BAD_ARG_E) { + if (ret != WC_NO_ERR_TRACE(ECC_BAD_ARG_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_ecc_export_point_der(curve_idx, point, NULL, &outLen); - if (ret != LENGTH_ONLY_E || outLen != sizeof(out)) { + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E) || outLen != sizeof(out)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_ecc_export_point_der(curve_idx, point, out, NULL); - if (ret != ECC_BAD_ARG_E) { + if (ret != WC_NO_ERR_TRACE(ECC_BAD_ARG_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } outLen = 0; ret = wc_ecc_export_point_der(curve_idx, point, out, &outLen); - if (ret != BUFFER_E) { + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_ecc_copy_point(NULL, NULL); - if (ret != ECC_BAD_ARG_E) { + if (ret != WC_NO_ERR_TRACE(ECC_BAD_ARG_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_ecc_copy_point(NULL, point2); - if (ret != ECC_BAD_ARG_E) { + if (ret != WC_NO_ERR_TRACE(ECC_BAD_ARG_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_ecc_copy_point(point, NULL); - if (ret != ECC_BAD_ARG_E) { + if (ret != WC_NO_ERR_TRACE(ECC_BAD_ARG_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_ecc_cmp_point(NULL, NULL); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_ecc_cmp_point(NULL, point2); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_ecc_cmp_point(point, NULL); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } /* Use API. */ ret = wc_ecc_import_point_der(der, sizeof(der), curve_idx, point); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); outLen = sizeof(out); ret = wc_ecc_export_point_der(curve_idx, point, out, &outLen); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); if (outLen != sizeof(der)) { ret = WC_TEST_RET_ENC_NC; goto done; @@ -31017,10 +30984,8 @@ static wc_test_ret_t ecc_point_test(void) } ret = wc_ecc_import_point_der(altDer, sizeof(altDer), curve_idx, point2); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_ecc_cmp_point(point2, point); if (ret != MP_GT) { ret = WC_TEST_RET_ENC_EC(ret); @@ -31030,16 +30995,12 @@ static wc_test_ret_t ecc_point_test(void) #if defined(HAVE_COMP_KEY) && (!defined(HAVE_FIPS) && !defined(HAVE_SELFTEST) || \ (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION > 2))) ret = wc_ecc_import_point_der(derComp0, sizeof(derComp0)*2-1, curve_idx, point3); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_ecc_import_point_der_ex(derComp0, sizeof(derComp0), curve_idx, point4, 0); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_ecc_cmp_point(point3, point4); if (ret != MP_EQ) { @@ -31048,16 +31009,12 @@ static wc_test_ret_t ecc_point_test(void) } ret = wc_ecc_import_point_der(derComp1, sizeof(derComp1)*2-1, curve_idx, point3); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_ecc_import_point_der_ex(derComp1, sizeof(derComp1), curve_idx, point4, 0); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_ecc_cmp_point(point3, point4); if (ret != MP_EQ) { @@ -31162,31 +31119,23 @@ static wc_test_ret_t ecc_exp_imp_test(ecc_key* key) privLen = sizeof(priv); ret = wc_ecc_export_private_only(key, priv, &privLen); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); pubLen = sizeof(pub); ret = wc_ecc_export_point_der(key->idx, &key->pubkey, pub, &pubLen); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); ret = wc_ecc_import_private_key(priv, privLen, pub, pubLen, keyImp); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); wc_ecc_free(keyImp); wc_ecc_init_ex(keyImp, HEAP_HINT, devId); ret = wc_ecc_import_raw_ex(keyImp, qx, qy, d, ECC_SECP256R1); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); wc_ecc_free(keyImp); wc_ecc_init_ex(keyImp, HEAP_HINT, devId); @@ -31200,10 +31149,8 @@ static wc_test_ret_t ecc_exp_imp_test(ecc_key* key) /* test import private only */ ret = wc_ecc_import_private_key_ex(priv, privLen, NULL, 0, keyImp, curve_id); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); wc_ecc_free(keyImp); wc_ecc_init_ex(keyImp, HEAP_HINT, devId); @@ -31211,18 +31158,14 @@ static wc_test_ret_t ecc_exp_imp_test(ecc_key* key) /* test export public raw */ pubLenX = pubLenY = 32; ret = wc_ecc_export_public_raw(key, pub, &pubLenX, &pub[32], &pubLenY); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #ifndef HAVE_SELFTEST /* test import of public */ ret = wc_ecc_import_unsigned(keyImp, pub, &pub[32], NULL, ECC_SECP256R1); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #endif wc_ecc_free(keyImp); @@ -31232,18 +31175,14 @@ static wc_test_ret_t ecc_exp_imp_test(ecc_key* key) pubLenX = pubLenY = privLen = 32; ret = wc_ecc_export_private_raw(key, pub, &pubLenX, &pub[32], &pubLenY, priv, &privLen); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #ifndef HAVE_SELFTEST /* test import of private and public */ ret = wc_ecc_import_unsigned(keyImp, pub, &pub[32], priv, ECC_SECP256R1); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #endif done: @@ -31305,10 +31244,8 @@ static wc_test_ret_t ecc_mulmod_test(ecc_key* key1) ret = wc_ecc_mulmod(wc_ecc_key_get_priv(key1), &key2->pubkey, &key3->pubkey, wc_ecc_key_get_priv(key2), wc_ecc_key_get_priv(key3), 1); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #ifdef WOLFSSL_PUBLIC_MP priv = wc_ecc_key_get_priv(key1); @@ -31316,10 +31253,8 @@ static wc_test_ret_t ecc_mulmod_test(ecc_key* key1) ret = wc_ecc_mulmod(wc_ecc_key_get_priv(key1), &key2->pubkey, &key3->pubkey, wc_ecc_key_get_priv(key2), wc_ecc_key_get_priv(key3), 1); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); if (!wc_ecc_point_is_at_infinity(&key3->pubkey)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; @@ -31362,16 +31297,16 @@ static wc_test_ret_t ecc_ssh_test(ecc_key* key, WC_RNG* rng) /* Parameter Validation testing. */ ret = wc_ecc_shared_secret_ssh(NULL, &key->pubkey, out, &outLen); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ecc_shared_secret_ssh(key, NULL, out, &outLen); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ecc_shared_secret_ssh(key, &key->pubkey, NULL, &outLen); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ecc_shared_secret_ssh(key, &key->pubkey, out, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); #if defined(ECC_TIMING_RESISTANT) && (!defined(HAVE_FIPS) || \ @@ -31392,7 +31327,7 @@ static wc_test_ret_t ecc_ssh_test(ecc_key* key, WC_RNG* rng) #endif if (ret == 0) ret = wc_ecc_shared_secret_ssh(key, &key->pubkey, out, &outLen); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret != 0) return WC_TEST_RET_ENC_EC(ret); @@ -31424,15 +31359,13 @@ static wc_test_ret_t ecc_def_curve_test(WC_RNG *rng) /* Use API */ ret = wc_ecc_set_flags(NULL, 0); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_ecc_set_flags(key, 0); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #ifndef WOLF_CRYPTO_CB_ONLY_ECC #ifndef WC_NO_RNG ret = wc_ecc_make_key(rng, ECC_KEYGEN_SIZE, key); @@ -31516,9 +31449,7 @@ static wc_test_ret_t ecc_def_curve_test(WC_RNG *rng) wc_ecc_free(key); #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (key != NULL) { - XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; @@ -31583,22 +31514,22 @@ static wc_test_ret_t ecc_decode_test(void) inSz = sizeof(good); ret = wc_EccPublicKeyDecode(NULL, &inOutIdx, key, inSz); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_EccPublicKeyDecode(good, NULL, key, inSz); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_EccPublicKeyDecode(good, &inOutIdx, NULL, inSz); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } ret = wc_EccPublicKeyDecode(good, &inOutIdx, key, 0); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } @@ -31607,14 +31538,14 @@ static wc_test_ret_t ecc_decode_test(void) inOutIdx = 2; inSz = sizeof(good) - inOutIdx; ret = wc_EccPublicKeyDecode(good, &inOutIdx, key, inSz); - if (ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inOutIdx = 4; inSz = sizeof(good) - inOutIdx; ret = wc_EccPublicKeyDecode(good, &inOutIdx, key, inSz); - if (ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } @@ -31622,56 +31553,66 @@ static wc_test_ret_t ecc_decode_test(void) inSz = sizeof(badNoObjId); inOutIdx = 0; ret = wc_EccPublicKeyDecode(badNoObjId, &inOutIdx, key, inSz); - if (ret != ASN_OBJECT_ID_E && ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_OBJECT_ID_E) && + ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) + { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inSz = sizeof(badOneObjId); inOutIdx = 0; ret = wc_EccPublicKeyDecode(badOneObjId, &inOutIdx, key, inSz); - if (ret != ASN_OBJECT_ID_E && ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_OBJECT_ID_E) && + ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) + { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inSz = sizeof(badObjId1Len); inOutIdx = 0; ret = wc_EccPublicKeyDecode(badObjId1Len, &inOutIdx, key, inSz); - if (ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inSz = sizeof(badObj2d1Len); inOutIdx = 0; ret = wc_EccPublicKeyDecode(badObj2d1Len, &inOutIdx, key, inSz); - if (ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inSz = sizeof(badNotBitStr); inOutIdx = 0; ret = wc_EccPublicKeyDecode(badNotBitStr, &inOutIdx, key, inSz); - if (ret != ASN_BITSTR_E && ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_BITSTR_E) && + ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) + { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inSz = sizeof(badBitStrLen); inOutIdx = 0; ret = wc_EccPublicKeyDecode(badBitStrLen, &inOutIdx, key, inSz); - if (ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inSz = sizeof(badNoBitStrZero); inOutIdx = 0; ret = wc_EccPublicKeyDecode(badNoBitStrZero, &inOutIdx, key, inSz); - if (ret != ASN_EXPECT_0_E && ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_EXPECT_0_E) && + ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) + { ret = WC_TEST_RET_ENC_EC(ret); goto done; } inSz = sizeof(badPoint); inOutIdx = 0; ret = wc_EccPublicKeyDecode(badPoint, &inOutIdx, key, inSz); - if (ret != ASN_ECC_KEY_E && ret != ASN_PARSE_E) { + if (ret != WC_NO_ERR_TRACE(ASN_ECC_KEY_E) && + ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) + { ret = WC_TEST_RET_ENC_EC(ret); goto done; } @@ -31679,10 +31620,8 @@ static wc_test_ret_t ecc_decode_test(void) inSz = sizeof(good); inOutIdx = 0; ret = wc_EccPublicKeyDecode(good, &inOutIdx, key, inSz); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); done: @@ -31813,10 +31752,8 @@ static wc_test_ret_t ecc_test_custom_curves(WC_RNG* rng) #endif ret = wc_ecc_init_ex(key, HEAP_HINT, devId); - if (ret != 0) { - ret = WC_TEST_RET_ENC_EC(ret); - goto done; - } + if (ret != 0) + ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); inOutIdx = 0; ret = wc_EccPublicKeyDecode(eccKeyExplicitCurve, &inOutIdx, key, @@ -32105,7 +32042,7 @@ static int ecc_sm2_test_curve(WC_RNG* rng, int testVerifyCount) #ifndef WC_NO_RNG ret = wc_ecc_sm2_make_key(rng, userA, WC_ECC_FLAG_NONE); - if (ret == ECC_CURVE_OID_E) + if (ret == WC_NO_ERR_TRACE(ECC_CURVE_OID_E)) goto done; /* catch case, where curve is not supported */ if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); @@ -32610,7 +32547,7 @@ static wc_test_ret_t ecc_test_cert_gen(WC_RNG* rng) ret = wc_SignCert(myCert->bodySz, myCert->sigType, der, FOURK_BUF, NULL, caEccKey, rng); } - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit); certSz = (int)ret; @@ -32639,11 +32576,9 @@ static wc_test_ret_t ecc_test_cert_gen(WC_RNG* rng) #endif #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (myCert != NULL) - XFREE(myCert, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(myCert, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #ifdef WOLFSSL_TEST_CERT - if (decode != NULL) - XFREE(decode, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(decode, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif if (caEccKey != NULL) { wc_ecc_free(caEccKey); @@ -33117,9 +33052,7 @@ static wc_test_ret_t ecc_test_nonblock_ecdsa(int curveId, word32 curveSz, sigSz, curveSz, curveId); } - if (sig != NULL) { - XFREE(sig, HEAP_HINT, DYNAMIC_TYPE_SIGNATURE); - } + XFREE(sig, HEAP_HINT, DYNAMIC_TYPE_SIGNATURE); return ret; } @@ -33838,13 +33771,9 @@ static wc_test_ret_t ecc_encrypt_kat(WC_RNG *rng) wc_ecc_free(userA); #endif #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (userB != NULL) { - XFREE(userB, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(userB, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #ifdef WOLFSSL_ECIES_OLD - if (userA != NULL) { - XFREE(userA, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(userA, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif #endif @@ -34394,7 +34323,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t ecc_test_buffers(void) #endif if (ret == 0) ret = wc_ecc_sign_hash(in, inLen, out, &x, &rng, cliKey); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); TEST_SLEEP(); @@ -34408,7 +34337,7 @@ TEST_SLEEP(); if (ret == 0) ret = wc_ecc_verify_hash(out, x, in, inLen, &verify, cliKey); - } while (ret == WC_PENDING_E); + } while (ret == WC_NO_ERR_TRACE(WC_PENDING_E)); if (ret < 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); if (verify != 1) @@ -34668,19 +34597,19 @@ static wc_test_ret_t curve25519_check_public_test(void) /* Parameter checks */ /* NULL pointer */ ret = wc_curve25519_check_public(NULL, 0, EC25519_LITTLE_ENDIAN); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { return WC_TEST_RET_ENC_EC(ret); } ret = wc_curve25519_check_public(NULL, 0, EC25519_BIG_ENDIAN); - if (ret != BAD_FUNC_ARG) { + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) { return WC_TEST_RET_ENC_EC(ret); } /* Length of 0 treated differently to other invalid lengths for TLS */ ret = wc_curve25519_check_public(good, 0, EC25519_LITTLE_ENDIAN); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_curve25519_check_public(good, 0, EC25519_BIG_ENDIAN); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); /* Length not CURVE25519_KEYSIZE */ @@ -34688,11 +34617,11 @@ static wc_test_ret_t curve25519_check_public_test(void) if (i == CURVE25519_KEYSIZE) continue; if (wc_curve25519_check_public(good, (word32)i, EC25519_LITTLE_ENDIAN) != - ECC_BAD_ARG_E) { + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)) { return WC_TEST_RET_ENC_I(i); } if (wc_curve25519_check_public(good, (word32)i, EC25519_BIG_ENDIAN) != - ECC_BAD_ARG_E) { + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)) { return WC_TEST_RET_ENC_I(i); } } @@ -35120,8 +35049,7 @@ static wc_test_ret_t ed25519_test_cert(void) #endif /* HAVE_ED25519_VERIFY */ done: - if (tmp != NULL) - XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #ifdef HAVE_ED25519_VERIFY wc_ed25519_free(pubKey); #endif /* HAVE_ED25519_VERIFY */ @@ -35194,8 +35122,7 @@ static wc_test_ret_t ed25519_test_make_cert(void) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); done: - if (tmp != NULL) - XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); wc_ed25519_free(privKey); wc_FreeRng(&rng); return ret; @@ -35249,14 +35176,14 @@ static wc_test_ret_t ed25519_test_check_key(void) /* Load bad public key only and perform checks. */ ret = wc_ed25519_import_public(key_bad_y, ED25519_PUB_KEY_SIZE + 1, &key); - if (ret != PUBLIC_KEY_E) { + if (ret != WC_NO_ERR_TRACE(PUBLIC_KEY_E)) { res = WC_TEST_RET_ENC_NC; } if (res == 0) { /* Load bad public key only and perform checks. */ ret = wc_ed25519_import_public(key_bad_y_max, ED25519_PUB_KEY_SIZE + 1, &key); - if (ret != PUBLIC_KEY_E) { + if (ret != WC_NO_ERR_TRACE(PUBLIC_KEY_E)) { res = WC_TEST_RET_ENC_NC; } } @@ -35264,7 +35191,7 @@ static wc_test_ret_t ed25519_test_check_key(void) /* Load bad public key only and perform checks. */ ret = wc_ed25519_import_public(key_bad_y_is_p, ED25519_PUB_KEY_SIZE + 1, &key); - if (ret != PUBLIC_KEY_E) { + if (ret != WC_NO_ERR_TRACE(PUBLIC_KEY_E)) { res = WC_TEST_RET_ENC_NC; } } @@ -36087,22 +36014,22 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t ed25519_test(void) ret = wc_ed25519_verify_msg(rareEd1, sizeof(rareEd1), msgs[0], msgSz[0], &verify, &key); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return ret; ret = wc_ed25519_verify_msg(rareEd2, sizeof(rareEd2), msgs[0], msgSz[0], &verify, &key); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return ret; ret = wc_ed25519_verify_msg(rareEd3, sizeof(rareEd3), msgs[0], msgSz[0], &verify, &key); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return ret; ret = wc_ed25519_verify_msg(rareEd4, sizeof(rareEd4), msgs[0], msgSz[0], &verify, &key); - if (ret != SIG_VERIFY_E) + if (ret != WC_NO_ERR_TRACE(SIG_VERIFY_E)) return ret; } @@ -36128,7 +36055,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t ed25519_test(void) return WC_TEST_RET_ENC_NC; ret = wc_ed25519_sign_msg(msgs[0], msgSz[0], out, &outlen, &key3); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); /* try with a buffer size that is too large */ @@ -36275,17 +36202,17 @@ static wc_test_ret_t curve448_check_public_test(void) /* Parameter checks */ /* NULL pointer */ ret = wc_curve448_check_public(NULL, 0, EC448_LITTLE_ENDIAN); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_curve448_check_public(NULL, 0, EC448_BIG_ENDIAN); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); /* Length of 0 treated differently to other invalid lengths for TLS */ ret = wc_curve448_check_public(good, 0, EC448_LITTLE_ENDIAN); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_curve448_check_public(good, 0, EC448_BIG_ENDIAN); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); /* Length not CURVE448_KEY_SIZE */ @@ -36293,11 +36220,11 @@ static wc_test_ret_t curve448_check_public_test(void) if (i == CURVE448_KEY_SIZE) continue; if (wc_curve448_check_public(good, (word32)i, EC448_LITTLE_ENDIAN) != - ECC_BAD_ARG_E) { + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)) { return WC_TEST_RET_ENC_I(i); } if (wc_curve448_check_public(good, (word32)i, EC448_BIG_ENDIAN) != - ECC_BAD_ARG_E) { + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)) { return WC_TEST_RET_ENC_I(i); } } @@ -36636,8 +36563,7 @@ static wc_test_ret_t ed448_test_cert(void) #endif /* HAVE_ED448_VERIFY */ done: - if (tmp != NULL) - XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #ifdef HAVE_ED448_VERIFY wc_ed448_free(pubKey); #endif /* HAVE_ED448_VERIFY */ @@ -36710,8 +36636,7 @@ static wc_test_ret_t ed448_test_make_cert(void) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); done: - if (tmp != NULL) - XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); wc_ed448_free(privKey); wc_FreeRng(&rng); return ret; @@ -36781,14 +36706,14 @@ static wc_test_ret_t ed448_test_check_key(void) /* Load bad public key only and perform checks. */ ret = wc_ed448_import_public(key_bad_y, ED448_PUB_KEY_SIZE + 1, &key); - if (ret != PUBLIC_KEY_E) { + if (ret != WC_NO_ERR_TRACE(PUBLIC_KEY_E)) { res = WC_TEST_RET_ENC_NC; } if (ret == 0) { /* Load bad public key only and perform checks. */ ret = wc_ed448_import_public(key_bad_y_max, ED448_PUB_KEY_SIZE + 1, &key); - if (ret != PUBLIC_KEY_E) { + if (ret != WC_NO_ERR_TRACE(PUBLIC_KEY_E)) { res = WC_TEST_RET_ENC_NC; } } @@ -36796,7 +36721,7 @@ static wc_test_ret_t ed448_test_check_key(void) /* Load bad public key only and perform checks. */ ret = wc_ed448_import_public(key_bad_y_is_p, ED448_PUB_KEY_SIZE + 1, &key); - if (ret != PUBLIC_KEY_E) { + if (ret != WC_NO_ERR_TRACE(PUBLIC_KEY_E)) { res = WC_TEST_RET_ENC_NC; } } @@ -37733,7 +37658,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t ed448_test(void) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); ret = wc_ed448_sign_msg(msgs[0], msgSz[0], out, &outlen, key3, NULL, 0); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); idx = 0; @@ -37871,6 +37796,7 @@ static wc_test_ret_t kyber512_kat(void) 0xcc, 0x09, 0xfe, 0x76, 0xf6, 0x99, 0x76, 0x15 }; WOLFSSL_SMALL_STACK_STATIC const byte kyber512_pk[] = { +#ifdef WOLFSSL_KYBER_ORIGINAL 0x11, 0x5A, 0xCE, 0x0E, 0x64, 0x67, 0x7C, 0xBB, 0x7D, 0xCF, 0xC9, 0x3C, 0x16, 0xD3, 0xA3, 0x05, 0xF6, 0x76, 0x15, 0xA4, 0x88, 0xD7, 0x11, 0xAA, @@ -37971,8 +37897,111 @@ static wc_test_ret_t kyber512_kat(void) 0x5F, 0x8F, 0x3F, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9D, 0x59, 0xA5, 0x43, 0xD8, 0x20, 0x8C, 0x54, 0xA3, 0x16, 0x65, 0x29, 0xB5, 0x39, 0x22 +#else + 0x40, 0x08, 0x65, 0xed, 0x10, 0xb6, 0x19, 0xaa, + 0x58, 0x11, 0x13, 0x9b, 0xc0, 0x86, 0x82, 0x57, + 0x82, 0xb2, 0xb7, 0x12, 0x4f, 0x75, 0x7c, 0x83, + 0xae, 0x79, 0x44, 0x44, 0xbc, 0x78, 0xa4, 0x78, + 0x96, 0xac, 0xf1, 0x26, 0x2c, 0x81, 0x35, 0x10, + 0x77, 0x89, 0x3b, 0xfc, 0x56, 0xf9, 0x04, 0x49, + 0xc2, 0xfa, 0x5f, 0x6e, 0x58, 0x6d, 0xd3, 0x7c, + 0x0b, 0x9b, 0x58, 0x19, 0x92, 0x63, 0x8c, 0xb7, + 0xe7, 0xbc, 0xbb, 0xb9, 0x9a, 0xfe, 0x47, 0x81, + 0xd8, 0x0a, 0x50, 0xe6, 0x94, 0x63, 0xfb, 0xd9, + 0x88, 0x72, 0x2c, 0x36, 0x35, 0x42, 0x3e, 0x27, + 0x46, 0x6c, 0x71, 0xdc, 0xc6, 0x74, 0x52, 0x7c, + 0xcd, 0x72, 0x89, 0x68, 0xcb, 0xcd, 0xc0, 0x0c, + 0x5c, 0x90, 0x35, 0xbb, 0x0a, 0xf2, 0xc9, 0x92, + 0x2c, 0x78, 0x81, 0xa4, 0x1d, 0xd2, 0x87, 0x52, + 0x73, 0x92, 0x51, 0x31, 0x23, 0x0f, 0x6c, 0xa5, + 0x9e, 0x91, 0x36, 0xb3, 0x9f, 0x95, 0x6c, 0x93, + 0xb3, 0xb2, 0xd1, 0x4c, 0x64, 0x1b, 0x08, 0x9e, + 0x07, 0xd0, 0xa8, 0x40, 0xc8, 0x93, 0xec, 0xd7, + 0x6b, 0xbf, 0x92, 0xc8, 0x05, 0x45, 0x66, 0x68, + 0xd0, 0x7c, 0x62, 0x14, 0x91, 0xc5, 0xc0, 0x54, + 0x99, 0x1a, 0x65, 0x6f, 0x51, 0x16, 0x19, 0x55, + 0x6e, 0xb9, 0x77, 0x82, 0xe2, 0x7a, 0x3c, 0x78, + 0x51, 0x24, 0xc7, 0x0b, 0x0d, 0xab, 0xa6, 0xc6, + 0x24, 0xd1, 0x8e, 0x0f, 0x97, 0x93, 0xf9, 0x6b, + 0xa9, 0xe1, 0x59, 0x9b, 0x17, 0xb3, 0x0d, 0xcc, + 0xc0, 0xb4, 0xf3, 0x76, 0x6a, 0x07, 0xb2, 0x3b, + 0x25, 0x73, 0x09, 0xcd, 0x76, 0xab, 0xa0, 0x72, + 0xc2, 0xb9, 0xc9, 0x74, 0x43, 0x94, 0xc6, 0xab, + 0x9c, 0xb6, 0xc5, 0x4a, 0x97, 0xb5, 0xc5, 0x78, + 0x61, 0xa5, 0x8d, 0xc0, 0xa0, 0x35, 0x19, 0x83, + 0x2e, 0xe3, 0x2a, 0x07, 0x65, 0x4a, 0x07, 0x0c, + 0x0c, 0x8c, 0x4e, 0x86, 0x48, 0xad, 0xdc, 0x35, + 0x5f, 0x27, 0x4f, 0xc6, 0xb9, 0x2a, 0x08, 0x7b, + 0x3f, 0x97, 0x51, 0x92, 0x3e, 0x44, 0x27, 0x4f, + 0x85, 0x8c, 0x49, 0xca, 0xba, 0x72, 0xb6, 0x58, + 0x51, 0xb3, 0xad, 0xc4, 0x89, 0x36, 0x95, 0x50, + 0x97, 0xca, 0xd9, 0x55, 0x3f, 0x5a, 0x26, 0x3f, + 0x18, 0x44, 0xb5, 0x2a, 0x02, 0x0f, 0xf7, 0xca, + 0x89, 0xe8, 0x81, 0xa0, 0x1b, 0x95, 0xd9, 0x57, + 0xa3, 0x15, 0x3c, 0x0a, 0x5e, 0x0a, 0x1c, 0xcd, + 0x66, 0xb1, 0x82, 0x1a, 0x2b, 0x86, 0x32, 0x54, + 0x6e, 0x24, 0xc7, 0xcb, 0xbc, 0x4c, 0xb0, 0x88, + 0x08, 0xca, 0xc3, 0x7f, 0x7d, 0xa6, 0xb1, 0x6f, + 0x8a, 0xce, 0xd0, 0x52, 0xcd, 0xb2, 0x56, 0x49, + 0x48, 0xf1, 0xab, 0x0f, 0x76, 0x8a, 0x0d, 0x32, + 0x86, 0xcc, 0xc7, 0xc3, 0x74, 0x9c, 0x63, 0xc7, + 0x81, 0x53, 0x0f, 0xa1, 0xae, 0x67, 0x05, 0x42, + 0x85, 0x50, 0x04, 0xa6, 0x45, 0xb5, 0x22, 0x88, + 0x1e, 0xc1, 0x41, 0x2b, 0xda, 0xe3, 0x42, 0x08, + 0x5a, 0x9d, 0xd5, 0xf8, 0x12, 0x6a, 0xf9, 0x6b, + 0xbd, 0xb0, 0xc1, 0xaf, 0x69, 0xa1, 0x55, 0x62, + 0xcb, 0x2a, 0x15, 0x5a, 0x10, 0x03, 0x09, 0xd1, + 0xb6, 0x41, 0xd0, 0x8b, 0x2d, 0x4e, 0xd1, 0x7b, + 0xfb, 0xf0, 0xbc, 0x04, 0x26, 0x5f, 0x9b, 0x10, + 0xc1, 0x08, 0xf8, 0x50, 0x30, 0x95, 0x04, 0xd7, + 0x72, 0x81, 0x1b, 0xba, 0x8e, 0x2b, 0xe1, 0x62, + 0x49, 0xaa, 0x73, 0x7d, 0x87, 0x9f, 0xc7, 0xfb, + 0x25, 0x5e, 0xe7, 0xa6, 0xa0, 0xa7, 0x53, 0xbd, + 0x93, 0x74, 0x1c, 0x61, 0x65, 0x8e, 0xc0, 0x74, + 0xf6, 0xe0, 0x02, 0xb0, 0x19, 0x34, 0x57, 0x69, + 0x11, 0x3c, 0xc0, 0x13, 0xff, 0x74, 0x94, 0xba, + 0x83, 0x78, 0xb1, 0x1a, 0x17, 0x22, 0x60, 0xaa, + 0xa5, 0x34, 0x21, 0xbd, 0xe0, 0x3a, 0x35, 0x58, + 0x9d, 0x57, 0xe3, 0x22, 0xfe, 0xfa, 0x41, 0x00, + 0xa4, 0x74, 0x39, 0x26, 0xab, 0x7d, 0x62, 0x25, + 0x8b, 0x87, 0xb3, 0x1c, 0xcb, 0xb5, 0xe6, 0xb8, + 0x9c, 0xb1, 0x0b, 0x27, 0x1a, 0xa0, 0x5d, 0x99, + 0x4b, 0xb5, 0x70, 0x8b, 0x23, 0xab, 0x32, 0x7e, + 0xcb, 0x93, 0xc0, 0xf3, 0x15, 0x68, 0x69, 0xf0, + 0x88, 0x3d, 0xa2, 0x06, 0x4f, 0x79, 0x5e, 0x0e, + 0x2a, 0xb7, 0xd3, 0xc6, 0x4d, 0x61, 0xd2, 0x30, + 0x3f, 0xc3, 0xa2, 0x9e, 0x16, 0x19, 0x92, 0x3c, + 0xa8, 0x01, 0xe5, 0x9f, 0xd7, 0x52, 0xca, 0x6e, + 0x76, 0x49, 0xd3, 0x03, 0xc9, 0xd2, 0x07, 0x88, + 0xe1, 0x21, 0x46, 0x51, 0xb0, 0x69, 0x95, 0xeb, + 0x26, 0x0c, 0x92, 0x9a, 0x13, 0x44, 0xa8, 0x49, + 0xb2, 0x5c, 0xa0, 0xa0, 0x1f, 0x1e, 0xb5, 0x29, + 0x13, 0x68, 0x6b, 0xba, 0x61, 0x9e, 0x23, 0x71, + 0x44, 0x64, 0x03, 0x1a, 0x78, 0x43, 0x92, 0x87, + 0xfc, 0xa7, 0x8f, 0x4c, 0x04, 0x76, 0x22, 0x3e, + 0xea, 0x61, 0xb7, 0xf2, 0x5a, 0x7c, 0xe4, 0x2c, + 0xca, 0x90, 0x1b, 0x2a, 0xea, 0x12, 0x98, 0x17, + 0x89, 0x4b, 0xa3, 0x47, 0x08, 0x23, 0x85, 0x4f, + 0x3e, 0x5b, 0x28, 0xd8, 0x6b, 0xa9, 0x79, 0xe5, + 0x46, 0x71, 0x86, 0x2d, 0x90, 0x47, 0x0b, 0x1e, + 0x78, 0x38, 0x97, 0x2a, 0x81, 0xa4, 0x81, 0x07, + 0xd6, 0xac, 0x06, 0x11, 0x40, 0x6b, 0x21, 0xfb, + 0xcc, 0xe1, 0xdb, 0x77, 0x02, 0xea, 0x9d, 0xd6, + 0xba, 0x6e, 0x40, 0x52, 0x7b, 0x9d, 0xc6, 0x63, + 0xf3, 0xc9, 0x3b, 0xad, 0x05, 0x6d, 0xc2, 0x85, + 0x11, 0xf6, 0x6c, 0x3e, 0x0b, 0x92, 0x8d, 0xb8, + 0x87, 0x9d, 0x22, 0xc5, 0x92, 0x68, 0x5c, 0xc7, + 0x75, 0xa6, 0xcd, 0x57, 0x4a, 0xc3, 0xbc, 0xe3, + 0xb2, 0x75, 0x91, 0xc8, 0x21, 0x92, 0x90, 0x76, + 0x35, 0x8a, 0x22, 0x00, 0xb3, 0x77, 0x36, 0x5f, + 0x7e, 0xfb, 0x9e, 0x40, 0xc3, 0xbf, 0x0f, 0xf0, + 0x43, 0x29, 0x86, 0xae, 0x4b, 0xc1, 0xa2, 0x42, + 0xce, 0x99, 0x21, 0xaa, 0x9e, 0x22, 0x44, 0x88, + 0x19, 0x58, 0x5d, 0xea, 0x30, 0x8e, 0xb0, 0x39 +#endif }; WOLFSSL_SMALL_STACK_STATIC const byte kyber512_sk[] = { +#ifdef WOLFSSL_KYBER_ORIGINAL 0x6C, 0x89, 0x2B, 0x02, 0x97, 0xA9, 0xC7, 0x64, 0x14, 0x93, 0xF8, 0x7D, 0xAF, 0x35, 0x33, 0xEE, 0xD6, 0x1F, 0x07, 0xF4, 0x65, 0x20, 0x66, 0x33, @@ -38177,9 +38206,215 @@ static wc_test_ret_t kyber512_kat(void) 0x00, 0xE0, 0x3B, 0x59, 0xB9, 0x56, 0xF8, 0x21, 0x0E, 0x55, 0x60, 0x67, 0x40, 0x7D, 0x13, 0xDC, 0x90, 0xFA, 0x9E, 0x8B, 0x87, 0x2B, 0xFB, 0x8F +#else + 0x9c, 0xda, 0x16, 0x86, 0xa3, 0x39, 0x6a, 0x7c, + 0x10, 0x9b, 0x41, 0x52, 0x89, 0xf5, 0x6a, 0x9e, + 0xc4, 0x4c, 0xd5, 0xb9, 0xb6, 0x74, 0xc3, 0x8a, + 0x3b, 0xba, 0xb3, 0x0a, 0x2c, 0x90, 0xf0, 0x04, + 0x37, 0xa2, 0x64, 0xb0, 0xbe, 0x9a, 0x1e, 0x8b, + 0xa8, 0x87, 0xd3, 0xc3, 0xb1, 0x00, 0x89, 0x80, + 0x54, 0x27, 0x2f, 0x94, 0x1c, 0x88, 0xa1, 0xf2, + 0x08, 0xf1, 0xc9, 0x14, 0xf9, 0x64, 0xc1, 0xaa, + 0xd6, 0x13, 0xa6, 0xa8, 0x4f, 0x88, 0xe4, 0x2d, + 0x35, 0x56, 0x83, 0x5f, 0xb1, 0x61, 0xfd, 0xc5, + 0xcd, 0x15, 0xa3, 0xbc, 0x7e, 0x74, 0xb6, 0xf2, + 0x61, 0x2f, 0xa8, 0x27, 0x1c, 0x7e, 0xa1, 0x12, + 0xb0, 0x5c, 0x2a, 0x36, 0xcc, 0x70, 0x7c, 0xe3, + 0x8d, 0x5d, 0x1a, 0xcc, 0x51, 0x15, 0x46, 0x2a, + 0x8c, 0x1a, 0xab, 0xf0, 0x72, 0x76, 0xc7, 0x23, + 0x18, 0x33, 0x7f, 0x74, 0xb5, 0xcb, 0xef, 0xea, + 0x7a, 0x80, 0x37, 0x90, 0xbc, 0x03, 0x93, 0xf3, + 0xa5, 0x4c, 0x72, 0x4a, 0x57, 0x65, 0xa4, 0x8f, + 0x29, 0x6b, 0x03, 0xf4, 0x84, 0x37, 0x60, 0x23, + 0x62, 0x69, 0x30, 0x22, 0x27, 0x04, 0xc0, 0x8f, + 0xd3, 0xbc, 0x72, 0x93, 0x15, 0xd1, 0xfc, 0x70, + 0xeb, 0x79, 0x75, 0xa9, 0x7b, 0x9d, 0xee, 0xd1, + 0x62, 0xf4, 0x86, 0xbb, 0xc6, 0x4a, 0x09, 0x71, + 0x11, 0x95, 0x2d, 0x89, 0xb5, 0x7d, 0x76, 0x5e, + 0x8a, 0x99, 0x1a, 0x2e, 0x56, 0x42, 0x06, 0xea, + 0x7b, 0xf5, 0xe4, 0x00, 0x7a, 0x66, 0x35, 0x88, + 0x31, 0xca, 0x0e, 0x34, 0xb2, 0xf6, 0xa8, 0x4d, + 0x10, 0xf7, 0x9c, 0x47, 0x7c, 0xb6, 0x6a, 0x8a, + 0x95, 0x25, 0x69, 0x36, 0x73, 0x88, 0x13, 0x0d, + 0x7b, 0x97, 0x4a, 0x63, 0xaa, 0x51, 0x99, 0x6c, + 0x97, 0x70, 0x9b, 0xb8, 0xea, 0xbc, 0x94, 0xe6, + 0xa5, 0x35, 0xd7, 0x92, 0xd2, 0x90, 0x54, 0x74, + 0x95, 0x2d, 0x6b, 0x8c, 0x22, 0x22, 0xb2, 0xae, + 0x56, 0xdc, 0x66, 0xfb, 0x04, 0x61, 0x19, 0x20, + 0x66, 0xcd, 0xdb, 0x43, 0xec, 0x05, 0x98, 0x4f, + 0xb4, 0x98, 0x26, 0x49, 0x77, 0x13, 0x97, 0xc6, + 0xa8, 0x37, 0x9f, 0x3b, 0x56, 0x43, 0x06, 0x98, + 0x48, 0x87, 0x59, 0x19, 0xe8, 0x9c, 0xc4, 0x39, + 0xa3, 0xbe, 0x2f, 0x08, 0x14, 0x90, 0xf3, 0x41, + 0xbd, 0x12, 0x40, 0xad, 0xd8, 0x0d, 0xdb, 0x8c, + 0x99, 0x63, 0xb4, 0x7a, 0x2a, 0x09, 0x92, 0x29, + 0x03, 0x38, 0xda, 0x9c, 0x3b, 0x72, 0x5c, 0x6d, + 0xa4, 0x47, 0x18, 0xc0, 0x10, 0x46, 0x81, 0x25, + 0x62, 0xaf, 0xb0, 0x84, 0x83, 0x7a, 0xcb, 0x3c, + 0x57, 0x5e, 0x4f, 0x93, 0x93, 0x6c, 0x35, 0x2a, + 0xc0, 0xe7, 0x0a, 0xa3, 0x84, 0x5e, 0xe4, 0x85, + 0x29, 0x6e, 0x6b, 0x02, 0xde, 0x0b, 0x47, 0xb5, + 0xc4, 0xc9, 0x6b, 0x0b, 0x7c, 0xf9, 0x4c, 0x4a, + 0xbe, 0x95, 0x48, 0x61, 0x53, 0x11, 0x8e, 0x43, + 0xc2, 0xb9, 0xc8, 0x4d, 0x9d, 0xa9, 0x1c, 0x6c, + 0x5a, 0xcd, 0x5a, 0x57, 0x00, 0x2d, 0x05, 0x84, + 0x97, 0x99, 0x27, 0x99, 0xe5, 0xba, 0x1c, 0xe6, + 0xc2, 0x5e, 0xb2, 0x98, 0x44, 0xd8, 0x58, 0xba, + 0x1c, 0x37, 0x85, 0x0c, 0x0c, 0x2f, 0x57, 0xc6, + 0x0d, 0xe3, 0x7f, 0x77, 0xc0, 0x82, 0xec, 0x14, + 0x49, 0x4e, 0xba, 0x28, 0x8a, 0x65, 0x91, 0x51, + 0x16, 0xc2, 0x0a, 0x32, 0x5d, 0xe3, 0x1a, 0xaa, + 0xdd, 0x68, 0x0d, 0xb1, 0x9c, 0x0c, 0xfc, 0xc3, + 0x46, 0x0f, 0x0a, 0xa0, 0x1a, 0x87, 0xa6, 0xa5, + 0x80, 0xc6, 0xca, 0x29, 0x1f, 0xae, 0xf0, 0xcc, + 0xc4, 0x9b, 0x76, 0xa8, 0xda, 0xc4, 0xf9, 0xd4, + 0x16, 0x40, 0x50, 0x9d, 0xbd, 0x0b, 0x40, 0x45, + 0xc1, 0x53, 0x0e, 0xd3, 0x47, 0x55, 0xd4, 0x74, + 0x62, 0x70, 0x0f, 0x2a, 0x8c, 0xaf, 0x96, 0x80, + 0xa6, 0xd7, 0xe3, 0x8a, 0x7e, 0x2a, 0x63, 0xe9, + 0x37, 0x65, 0x0a, 0x23, 0x30, 0x6d, 0x85, 0x5d, + 0xa2, 0xa2, 0xb7, 0xef, 0x50, 0x5c, 0xa5, 0x96, + 0xab, 0x04, 0x85, 0x01, 0x3e, 0xa9, 0x27, 0xc7, + 0x34, 0x23, 0x43, 0x61, 0x36, 0x43, 0xba, 0x40, + 0x07, 0xd6, 0xc8, 0x74, 0xb9, 0x80, 0xc7, 0x9c, + 0x3a, 0xa1, 0xc7, 0x4f, 0x85, 0x81, 0xc3, 0x48, + 0x49, 0xb3, 0x6e, 0xa7, 0x98, 0x15, 0xfb, 0xb4, + 0xcc, 0xf9, 0x61, 0x05, 0x83, 0x08, 0x1d, 0x7c, + 0x5b, 0x44, 0x09, 0xb8, 0xd0, 0x53, 0x1c, 0x04, + 0xbc, 0xaf, 0x7c, 0xc7, 0x51, 0x10, 0x3a, 0x5f, + 0xd1, 0xba, 0x44, 0x70, 0x83, 0x3e, 0x89, 0x77, + 0x5a, 0xde, 0xd9, 0x70, 0xb5, 0x47, 0x18, 0x59, + 0x25, 0x0f, 0xe7, 0x26, 0x71, 0x05, 0x83, 0x5f, + 0x39, 0x00, 0x30, 0xc5, 0xe7, 0xcd, 0x3f, 0x96, + 0x10, 0x19, 0xea, 0xae, 0xa2, 0x37, 0x77, 0xd3, + 0x47, 0xbb, 0x2a, 0xdc, 0xb6, 0x73, 0xc0, 0x20, + 0x34, 0xf3, 0x94, 0x34, 0x22, 0x71, 0xbc, 0xea, + 0x64, 0x14, 0xe5, 0x46, 0xc3, 0xb2, 0x0b, 0xd5, + 0x74, 0x81, 0xc7, 0xea, 0x14, 0xc7, 0x7c, 0x38, + 0x8c, 0xc8, 0x62, 0x51, 0xc1, 0x25, 0x58, 0xb1, + 0x00, 0xf8, 0xc5, 0xb3, 0xd0, 0x3c, 0xa2, 0xc7, + 0x07, 0x13, 0x90, 0x96, 0x59, 0xc8, 0xba, 0x26, + 0xd0, 0xd1, 0x76, 0x5e, 0x0b, 0xc8, 0x23, 0xd6, + 0x8c, 0xa5, 0x57, 0x0d, 0xe6, 0x00, 0xcd, 0x09, + 0x41, 0x72, 0x5d, 0x38, 0x6e, 0x14, 0xc1, 0x01, + 0x2d, 0xf5, 0x95, 0x1b, 0xeb, 0x8d, 0x82, 0x81, + 0xa4, 0xf6, 0x81, 0x5d, 0x37, 0x60, 0xb7, 0x64, + 0x29, 0x5a, 0xd0, 0x40, 0x6c, 0x2b, 0xf7, 0x92, + 0x8a, 0xd6, 0x50, 0x32, 0xb6, 0x5f, 0x14, 0xb7, + 0x7c, 0xcb, 0x89, 0x17, 0xc9, 0x3a, 0x29, 0xd6, + 0x28, 0x7d, 0x8a, 0x60, 0x62, 0x39, 0x9c, 0xb6, + 0x40, 0x08, 0x65, 0xed, 0x10, 0xb6, 0x19, 0xaa, + 0x58, 0x11, 0x13, 0x9b, 0xc0, 0x86, 0x82, 0x57, + 0x82, 0xb2, 0xb7, 0x12, 0x4f, 0x75, 0x7c, 0x83, + 0xae, 0x79, 0x44, 0x44, 0xbc, 0x78, 0xa4, 0x78, + 0x96, 0xac, 0xf1, 0x26, 0x2c, 0x81, 0x35, 0x10, + 0x77, 0x89, 0x3b, 0xfc, 0x56, 0xf9, 0x04, 0x49, + 0xc2, 0xfa, 0x5f, 0x6e, 0x58, 0x6d, 0xd3, 0x7c, + 0x0b, 0x9b, 0x58, 0x19, 0x92, 0x63, 0x8c, 0xb7, + 0xe7, 0xbc, 0xbb, 0xb9, 0x9a, 0xfe, 0x47, 0x81, + 0xd8, 0x0a, 0x50, 0xe6, 0x94, 0x63, 0xfb, 0xd9, + 0x88, 0x72, 0x2c, 0x36, 0x35, 0x42, 0x3e, 0x27, + 0x46, 0x6c, 0x71, 0xdc, 0xc6, 0x74, 0x52, 0x7c, + 0xcd, 0x72, 0x89, 0x68, 0xcb, 0xcd, 0xc0, 0x0c, + 0x5c, 0x90, 0x35, 0xbb, 0x0a, 0xf2, 0xc9, 0x92, + 0x2c, 0x78, 0x81, 0xa4, 0x1d, 0xd2, 0x87, 0x52, + 0x73, 0x92, 0x51, 0x31, 0x23, 0x0f, 0x6c, 0xa5, + 0x9e, 0x91, 0x36, 0xb3, 0x9f, 0x95, 0x6c, 0x93, + 0xb3, 0xb2, 0xd1, 0x4c, 0x64, 0x1b, 0x08, 0x9e, + 0x07, 0xd0, 0xa8, 0x40, 0xc8, 0x93, 0xec, 0xd7, + 0x6b, 0xbf, 0x92, 0xc8, 0x05, 0x45, 0x66, 0x68, + 0xd0, 0x7c, 0x62, 0x14, 0x91, 0xc5, 0xc0, 0x54, + 0x99, 0x1a, 0x65, 0x6f, 0x51, 0x16, 0x19, 0x55, + 0x6e, 0xb9, 0x77, 0x82, 0xe2, 0x7a, 0x3c, 0x78, + 0x51, 0x24, 0xc7, 0x0b, 0x0d, 0xab, 0xa6, 0xc6, + 0x24, 0xd1, 0x8e, 0x0f, 0x97, 0x93, 0xf9, 0x6b, + 0xa9, 0xe1, 0x59, 0x9b, 0x17, 0xb3, 0x0d, 0xcc, + 0xc0, 0xb4, 0xf3, 0x76, 0x6a, 0x07, 0xb2, 0x3b, + 0x25, 0x73, 0x09, 0xcd, 0x76, 0xab, 0xa0, 0x72, + 0xc2, 0xb9, 0xc9, 0x74, 0x43, 0x94, 0xc6, 0xab, + 0x9c, 0xb6, 0xc5, 0x4a, 0x97, 0xb5, 0xc5, 0x78, + 0x61, 0xa5, 0x8d, 0xc0, 0xa0, 0x35, 0x19, 0x83, + 0x2e, 0xe3, 0x2a, 0x07, 0x65, 0x4a, 0x07, 0x0c, + 0x0c, 0x8c, 0x4e, 0x86, 0x48, 0xad, 0xdc, 0x35, + 0x5f, 0x27, 0x4f, 0xc6, 0xb9, 0x2a, 0x08, 0x7b, + 0x3f, 0x97, 0x51, 0x92, 0x3e, 0x44, 0x27, 0x4f, + 0x85, 0x8c, 0x49, 0xca, 0xba, 0x72, 0xb6, 0x58, + 0x51, 0xb3, 0xad, 0xc4, 0x89, 0x36, 0x95, 0x50, + 0x97, 0xca, 0xd9, 0x55, 0x3f, 0x5a, 0x26, 0x3f, + 0x18, 0x44, 0xb5, 0x2a, 0x02, 0x0f, 0xf7, 0xca, + 0x89, 0xe8, 0x81, 0xa0, 0x1b, 0x95, 0xd9, 0x57, + 0xa3, 0x15, 0x3c, 0x0a, 0x5e, 0x0a, 0x1c, 0xcd, + 0x66, 0xb1, 0x82, 0x1a, 0x2b, 0x86, 0x32, 0x54, + 0x6e, 0x24, 0xc7, 0xcb, 0xbc, 0x4c, 0xb0, 0x88, + 0x08, 0xca, 0xc3, 0x7f, 0x7d, 0xa6, 0xb1, 0x6f, + 0x8a, 0xce, 0xd0, 0x52, 0xcd, 0xb2, 0x56, 0x49, + 0x48, 0xf1, 0xab, 0x0f, 0x76, 0x8a, 0x0d, 0x32, + 0x86, 0xcc, 0xc7, 0xc3, 0x74, 0x9c, 0x63, 0xc7, + 0x81, 0x53, 0x0f, 0xa1, 0xae, 0x67, 0x05, 0x42, + 0x85, 0x50, 0x04, 0xa6, 0x45, 0xb5, 0x22, 0x88, + 0x1e, 0xc1, 0x41, 0x2b, 0xda, 0xe3, 0x42, 0x08, + 0x5a, 0x9d, 0xd5, 0xf8, 0x12, 0x6a, 0xf9, 0x6b, + 0xbd, 0xb0, 0xc1, 0xaf, 0x69, 0xa1, 0x55, 0x62, + 0xcb, 0x2a, 0x15, 0x5a, 0x10, 0x03, 0x09, 0xd1, + 0xb6, 0x41, 0xd0, 0x8b, 0x2d, 0x4e, 0xd1, 0x7b, + 0xfb, 0xf0, 0xbc, 0x04, 0x26, 0x5f, 0x9b, 0x10, + 0xc1, 0x08, 0xf8, 0x50, 0x30, 0x95, 0x04, 0xd7, + 0x72, 0x81, 0x1b, 0xba, 0x8e, 0x2b, 0xe1, 0x62, + 0x49, 0xaa, 0x73, 0x7d, 0x87, 0x9f, 0xc7, 0xfb, + 0x25, 0x5e, 0xe7, 0xa6, 0xa0, 0xa7, 0x53, 0xbd, + 0x93, 0x74, 0x1c, 0x61, 0x65, 0x8e, 0xc0, 0x74, + 0xf6, 0xe0, 0x02, 0xb0, 0x19, 0x34, 0x57, 0x69, + 0x11, 0x3c, 0xc0, 0x13, 0xff, 0x74, 0x94, 0xba, + 0x83, 0x78, 0xb1, 0x1a, 0x17, 0x22, 0x60, 0xaa, + 0xa5, 0x34, 0x21, 0xbd, 0xe0, 0x3a, 0x35, 0x58, + 0x9d, 0x57, 0xe3, 0x22, 0xfe, 0xfa, 0x41, 0x00, + 0xa4, 0x74, 0x39, 0x26, 0xab, 0x7d, 0x62, 0x25, + 0x8b, 0x87, 0xb3, 0x1c, 0xcb, 0xb5, 0xe6, 0xb8, + 0x9c, 0xb1, 0x0b, 0x27, 0x1a, 0xa0, 0x5d, 0x99, + 0x4b, 0xb5, 0x70, 0x8b, 0x23, 0xab, 0x32, 0x7e, + 0xcb, 0x93, 0xc0, 0xf3, 0x15, 0x68, 0x69, 0xf0, + 0x88, 0x3d, 0xa2, 0x06, 0x4f, 0x79, 0x5e, 0x0e, + 0x2a, 0xb7, 0xd3, 0xc6, 0x4d, 0x61, 0xd2, 0x30, + 0x3f, 0xc3, 0xa2, 0x9e, 0x16, 0x19, 0x92, 0x3c, + 0xa8, 0x01, 0xe5, 0x9f, 0xd7, 0x52, 0xca, 0x6e, + 0x76, 0x49, 0xd3, 0x03, 0xc9, 0xd2, 0x07, 0x88, + 0xe1, 0x21, 0x46, 0x51, 0xb0, 0x69, 0x95, 0xeb, + 0x26, 0x0c, 0x92, 0x9a, 0x13, 0x44, 0xa8, 0x49, + 0xb2, 0x5c, 0xa0, 0xa0, 0x1f, 0x1e, 0xb5, 0x29, + 0x13, 0x68, 0x6b, 0xba, 0x61, 0x9e, 0x23, 0x71, + 0x44, 0x64, 0x03, 0x1a, 0x78, 0x43, 0x92, 0x87, + 0xfc, 0xa7, 0x8f, 0x4c, 0x04, 0x76, 0x22, 0x3e, + 0xea, 0x61, 0xb7, 0xf2, 0x5a, 0x7c, 0xe4, 0x2c, + 0xca, 0x90, 0x1b, 0x2a, 0xea, 0x12, 0x98, 0x17, + 0x89, 0x4b, 0xa3, 0x47, 0x08, 0x23, 0x85, 0x4f, + 0x3e, 0x5b, 0x28, 0xd8, 0x6b, 0xa9, 0x79, 0xe5, + 0x46, 0x71, 0x86, 0x2d, 0x90, 0x47, 0x0b, 0x1e, + 0x78, 0x38, 0x97, 0x2a, 0x81, 0xa4, 0x81, 0x07, + 0xd6, 0xac, 0x06, 0x11, 0x40, 0x6b, 0x21, 0xfb, + 0xcc, 0xe1, 0xdb, 0x77, 0x02, 0xea, 0x9d, 0xd6, + 0xba, 0x6e, 0x40, 0x52, 0x7b, 0x9d, 0xc6, 0x63, + 0xf3, 0xc9, 0x3b, 0xad, 0x05, 0x6d, 0xc2, 0x85, + 0x11, 0xf6, 0x6c, 0x3e, 0x0b, 0x92, 0x8d, 0xb8, + 0x87, 0x9d, 0x22, 0xc5, 0x92, 0x68, 0x5c, 0xc7, + 0x75, 0xa6, 0xcd, 0x57, 0x4a, 0xc3, 0xbc, 0xe3, + 0xb2, 0x75, 0x91, 0xc8, 0x21, 0x92, 0x90, 0x76, + 0x35, 0x8a, 0x22, 0x00, 0xb3, 0x77, 0x36, 0x5f, + 0x7e, 0xfb, 0x9e, 0x40, 0xc3, 0xbf, 0x0f, 0xf0, + 0x43, 0x29, 0x86, 0xae, 0x4b, 0xc1, 0xa2, 0x42, + 0xce, 0x99, 0x21, 0xaa, 0x9e, 0x22, 0x44, 0x88, + 0x19, 0x58, 0x5d, 0xea, 0x30, 0x8e, 0xb0, 0x39, + 0x50, 0xc8, 0xdd, 0x15, 0x2a, 0x45, 0x31, 0xaa, + 0xb5, 0x60, 0xd2, 0xfc, 0x7c, 0xa9, 0xa4, 0x0a, + 0xd8, 0xaf, 0x25, 0xad, 0x1d, 0xd0, 0x8c, 0x6d, + 0x79, 0xaf, 0xe4, 0xdd, 0x4d, 0x1e, 0xee, 0x5a, + 0x86, 0x26, 0xed, 0x79, 0xd4, 0x51, 0x14, 0x08, + 0x00, 0xe0, 0x3b, 0x59, 0xb9, 0x56, 0xf8, 0x21, + 0x0e, 0x55, 0x60, 0x67, 0x40, 0x7d, 0x13, 0xdc, + 0x90, 0xfa, 0x9e, 0x8b, 0x87, 0x2b, 0xfb, 0x8f +#endif }; WOLFSSL_SMALL_STACK_STATIC const byte kyber512_ct[] = { -#ifndef WOLFSSL_ML_KEM +#ifdef WOLFSSL_KYBER_ORIGINAL 0xED, 0xF2, 0x41, 0x45, 0xE4, 0x3B, 0x4F, 0x6D, 0xC6, 0xBF, 0x83, 0x32, 0xF5, 0x4E, 0x02, 0xCA, 0xB0, 0x2D, 0xBF, 0x3B, 0x56, 0x05, 0xDD, 0xC9, @@ -38277,115 +38512,115 @@ static wc_test_ret_t kyber512_kat(void) 0x7C, 0x80, 0xF9, 0x67, 0x87, 0xCD, 0x92, 0x81, 0xCC, 0xF2, 0x70, 0xC1, 0xAF, 0xC0, 0x67, 0x0D #else - 0x75, 0x49, 0x99, 0x8d, 0x46, 0x9e, 0x2e, 0x47, - 0x90, 0x02, 0x30, 0x5b, 0x09, 0xb4, 0x4d, 0xba, - 0xdb, 0xc2, 0x45, 0x7f, 0xfd, 0x31, 0x25, 0xf6, - 0xd3, 0x1b, 0x0f, 0x27, 0xb8, 0x03, 0xd5, 0x81, - 0x07, 0x1c, 0x1d, 0xc6, 0x18, 0x11, 0x96, 0xfe, - 0x76, 0xdf, 0x78, 0xde, 0x20, 0xdd, 0xa6, 0x09, - 0xcf, 0x1b, 0x7c, 0xb7, 0xa3, 0x52, 0xc4, 0xdd, - 0x9c, 0x2c, 0xfc, 0x18, 0x80, 0x1f, 0x03, 0x6f, - 0xe4, 0x0f, 0x8f, 0x7e, 0x6f, 0x3d, 0xd7, 0x3f, - 0x38, 0x71, 0x30, 0xbe, 0x38, 0x7b, 0x17, 0x13, - 0x41, 0x8f, 0x83, 0xd9, 0x3d, 0xc7, 0xf8, 0x07, - 0x4a, 0x03, 0x24, 0x55, 0xc4, 0x6f, 0x85, 0x7c, - 0x6b, 0x6b, 0x35, 0x42, 0x9c, 0x79, 0x00, 0x65, - 0x42, 0x0d, 0x74, 0x22, 0x52, 0xee, 0x53, 0xf5, - 0x3f, 0x6e, 0x64, 0xa9, 0xb7, 0x8a, 0x49, 0xbc, - 0x29, 0xb8, 0xce, 0x84, 0x83, 0x1a, 0x01, 0xc3, - 0x42, 0x9e, 0x34, 0x69, 0x60, 0xdc, 0x55, 0x95, - 0x26, 0xd9, 0x78, 0x53, 0xc3, 0x66, 0x31, 0xb4, - 0x77, 0x32, 0x85, 0xfa, 0xfe, 0x8e, 0x3c, 0xa4, - 0x25, 0x5a, 0x87, 0x23, 0xae, 0x4f, 0x02, 0xdd, - 0xd8, 0x5a, 0x47, 0x81, 0xb9, 0xf4, 0x18, 0x6d, - 0x67, 0xa8, 0x3b, 0x5d, 0x9e, 0xdd, 0xc3, 0xae, - 0x7c, 0xd4, 0x09, 0x6c, 0x33, 0xf4, 0xd9, 0x7f, - 0xe0, 0x20, 0x30, 0xec, 0xb6, 0xa1, 0xa8, 0xad, - 0x9b, 0x19, 0xd3, 0xeb, 0x32, 0xf1, 0xb8, 0xf2, - 0x71, 0xb3, 0x03, 0x53, 0xe9, 0xe1, 0x9d, 0xd1, - 0x83, 0xf0, 0x6b, 0x54, 0xc3, 0xcb, 0x02, 0xef, - 0x16, 0x62, 0x82, 0x75, 0x2a, 0xa1, 0x1c, 0x81, - 0x58, 0xe4, 0x8b, 0xbc, 0x68, 0x30, 0x17, 0x1c, - 0xa7, 0xdd, 0xb7, 0x5a, 0x35, 0xe4, 0x6c, 0x35, - 0x32, 0x1a, 0xbe, 0x6a, 0x74, 0x20, 0x32, 0xc7, - 0x72, 0xa1, 0x6b, 0x3d, 0x1c, 0xdd, 0xfc, 0x6f, - 0x28, 0x01, 0xe2, 0xb8, 0x17, 0x30, 0x2d, 0xbc, - 0x94, 0xf3, 0x33, 0xc0, 0xcb, 0x91, 0xe1, 0xce, - 0xbd, 0x5e, 0xc6, 0x1e, 0x49, 0xfa, 0x5a, 0x14, - 0xaa, 0xa3, 0x93, 0x75, 0x5f, 0xc3, 0xe6, 0xf4, - 0xb8, 0xc5, 0xc4, 0xfa, 0x4b, 0xaa, 0x07, 0xa0, - 0x8c, 0x4f, 0x33, 0x94, 0x62, 0x63, 0x58, 0xa1, - 0x5e, 0x69, 0x0e, 0xe1, 0xe4, 0x82, 0x9b, 0x11, - 0x1c, 0x17, 0x24, 0x1a, 0xee, 0x37, 0xd5, 0xc8, - 0x32, 0xf4, 0x84, 0x76, 0x88, 0xfe, 0x5b, 0x5d, - 0x1b, 0x19, 0xe8, 0xe0, 0x4d, 0x9d, 0x19, 0x37, - 0x00, 0x19, 0x87, 0xf3, 0xb4, 0xb8, 0x35, 0x49, - 0xc3, 0xe5, 0x30, 0xe4, 0x11, 0x9d, 0x16, 0x4b, - 0x20, 0xef, 0x9d, 0x3a, 0x72, 0xf7, 0x4c, 0x04, - 0x4a, 0x97, 0x45, 0x91, 0x22, 0x8b, 0x41, 0xe6, - 0x80, 0xec, 0x56, 0x40, 0xa9, 0x72, 0x34, 0xc2, - 0xc6, 0x01, 0x7c, 0x95, 0xe9, 0x1b, 0xe2, 0xbd, - 0x49, 0x85, 0x47, 0xd5, 0x7a, 0x52, 0x22, 0xb8, - 0x16, 0x2a, 0x35, 0x46, 0x65, 0x6d, 0x59, 0x98, - 0x0d, 0x51, 0xaf, 0x59, 0x5b, 0xf5, 0xf2, 0x3a, - 0x63, 0x2f, 0x6d, 0x85, 0x44, 0xb8, 0x10, 0x74, - 0xae, 0xd3, 0x4c, 0x03, 0x52, 0xba, 0x56, 0x0d, - 0xea, 0xfb, 0x07, 0x44, 0x1a, 0x55, 0xa9, 0x37, - 0x63, 0x42, 0xe5, 0x0a, 0x0e, 0xc2, 0x53, 0x72, - 0x28, 0x25, 0x5a, 0x4b, 0x5d, 0x03, 0xc9, 0x29, - 0x57, 0xf4, 0xea, 0x35, 0x07, 0xb4, 0xba, 0xad, - 0xce, 0x53, 0xcc, 0xdf, 0xb7, 0x36, 0x4f, 0xfc, - 0x18, 0x17, 0xb5, 0x8c, 0x50, 0xef, 0x28, 0xe3, - 0x22, 0xe1, 0xb9, 0x45, 0xe0, 0xeb, 0x9b, 0x12, - 0x33, 0x97, 0x5c, 0x30, 0xa5, 0x54, 0x53, 0x68, - 0x68, 0x27, 0x14, 0xbf, 0x50, 0x2b, 0x61, 0xe1, - 0xd0, 0x45, 0x7a, 0x97, 0x53, 0xe1, 0x0d, 0xe0, - 0xf1, 0xbf, 0x35, 0xec, 0x3a, 0x3f, 0x47, 0x0a, - 0x3c, 0x69, 0xcc, 0xb0, 0x4d, 0x2d, 0x98, 0xfa, - 0xb3, 0xa0, 0xb6, 0x72, 0x9a, 0x98, 0x75, 0xe1, - 0xdb, 0x53, 0x3c, 0x96, 0xb4, 0x1e, 0x3d, 0x98, - 0x62, 0x8a, 0x6f, 0x8c, 0xf6, 0x68, 0x40, 0x6c, - 0x5f, 0x03, 0x8e, 0x6b, 0x7b, 0x24, 0x2f, 0xdf, - 0x86, 0xa7, 0xf1, 0xe6, 0x97, 0xae, 0xb1, 0x36, - 0x11, 0x41, 0x67, 0xb1, 0x3f, 0x89, 0xf2, 0x31, - 0xbc, 0xec, 0x7a, 0x41, 0x66, 0xb3, 0x9e, 0xab, - 0x4a, 0x37, 0x09, 0x23, 0x78, 0x22, 0x05, 0x0c, - 0x49, 0xc9, 0x25, 0x95, 0xa2, 0x37, 0xf2, 0xeb, - 0x48, 0x3b, 0x9e, 0x1d, 0xd6, 0x12, 0x4b, 0xed, - 0x5e, 0xb9, 0xb7, 0xb5, 0x12, 0x12, 0x96, 0x37, - 0x6b, 0x7d, 0x20, 0x14, 0xa7, 0x75, 0x60, 0xca, - 0x65, 0x83, 0x3d, 0x8b, 0xeb, 0x4d, 0x6a, 0xe6, - 0x8e, 0xfd, 0x7a, 0x11, 0xac, 0xc7, 0xde, 0x87, - 0xd8, 0x2b, 0xe1, 0xad, 0x57, 0x3a, 0xe9, 0xf6, - 0xf0, 0x76, 0x6f, 0xd7, 0x86, 0x38, 0x7d, 0x1a, - 0x8c, 0x12, 0xd1, 0xc8, 0xa2, 0x96, 0xb4, 0xf7, - 0x26, 0x34, 0xf7, 0x05, 0x77, 0x68, 0x88, 0x48, - 0xe5, 0x76, 0x85, 0x1f, 0x13, 0xbe, 0x48, 0xdf, - 0x33, 0x5d, 0x4a, 0xcd, 0x89, 0x79, 0x3a, 0x6c, - 0x6c, 0x06, 0x55, 0xfc, 0x39, 0xbc, 0x9e, 0x1e, - 0x27, 0xb4, 0xa5, 0x00, 0xf7, 0x08, 0xcd, 0x4a, - 0x9f, 0x2e, 0xc6, 0x72, 0xba, 0x5b, 0xf8, 0xad, - 0x23, 0x99, 0x8d, 0x4c, 0x0c, 0x95, 0x8f, 0x29, - 0x0f, 0x2a, 0x6c, 0x4e, 0x6c, 0xd8, 0xc0, 0xcd, - 0xc8, 0x5f, 0x57, 0x16, 0xec, 0x98, 0xa4, 0xc8, - 0x99, 0x5d, 0x37, 0x8c, 0xc6, 0xe2, 0xa1, 0xe8, - 0xb8, 0x28, 0x00, 0xdd, 0xf0, 0x3b, 0x32, 0x26, - 0xa2, 0xe7, 0x81, 0x77, 0x71, 0xe5, 0x09, 0xb4, - 0x95, 0x5e, 0xe2, 0xbe, 0xd4, 0x21, 0x7b, 0xdf, - 0x06, 0x30, 0xb5, 0x84, 0x0f, 0x25, 0x24, 0xab + 0x11, 0x3d, 0xb2, 0xdd, 0x06, 0x87, 0x12, 0x35, + 0xe7, 0xbc, 0x36, 0xc9, 0xdc, 0xaa, 0x52, 0x8f, + 0xc2, 0x6c, 0xe5, 0xdb, 0x9e, 0xcc, 0x1d, 0xc3, + 0x2e, 0x95, 0x7d, 0x7f, 0xfb, 0x3c, 0x74, 0x29, + 0xd5, 0x0c, 0x3c, 0x35, 0x77, 0xa5, 0x15, 0xd3, + 0x18, 0x3a, 0x1b, 0x9d, 0x26, 0x7b, 0x93, 0x6b, + 0x7e, 0xb8, 0xf5, 0x43, 0xa3, 0xaf, 0xb7, 0x77, + 0x65, 0xca, 0x79, 0x38, 0xf7, 0x8a, 0xa6, 0x43, + 0x8c, 0xe8, 0x0a, 0x06, 0xa6, 0x96, 0x6d, 0x0d, + 0x06, 0xaf, 0x75, 0xba, 0x3e, 0x0d, 0x4f, 0x37, + 0xba, 0xc7, 0x33, 0x69, 0xf5, 0xa7, 0x29, 0xf7, + 0x3e, 0x85, 0x72, 0x9e, 0xdd, 0x97, 0xc8, 0xc2, + 0xa8, 0xcc, 0x26, 0x19, 0xe4, 0xcf, 0x7b, 0x60, + 0x91, 0x86, 0x9e, 0x90, 0x9f, 0xd4, 0x7d, 0x97, + 0x09, 0x14, 0x92, 0x04, 0xb0, 0x83, 0x7d, 0x8d, + 0x6f, 0x25, 0xd2, 0x67, 0x97, 0x2b, 0xe6, 0x3b, + 0xad, 0x34, 0xb5, 0x44, 0x52, 0x3c, 0x01, 0xc0, + 0x9d, 0xe3, 0xb1, 0xfa, 0x1d, 0x6b, 0x7b, 0x05, + 0x9e, 0xee, 0x9e, 0x65, 0x20, 0x62, 0xfe, 0x87, + 0x0f, 0x68, 0xc6, 0x80, 0x05, 0x33, 0x9e, 0xa1, + 0x81, 0xe1, 0xd0, 0x76, 0x7c, 0x15, 0x2a, 0xeb, + 0x38, 0xfa, 0xf0, 0xf9, 0x24, 0x5a, 0xe5, 0x9d, + 0x5c, 0xb0, 0xd2, 0xb7, 0xf2, 0x01, 0x22, 0x9e, + 0xd9, 0x70, 0x20, 0xd0, 0x62, 0x3a, 0x46, 0x10, + 0x0d, 0x09, 0x7b, 0x0c, 0xe1, 0x15, 0x4e, 0x02, + 0x8a, 0xe6, 0x19, 0x4d, 0xe0, 0x5d, 0xe9, 0x7d, + 0xd9, 0xae, 0x2e, 0x85, 0xff, 0xd2, 0x5d, 0x95, + 0xeb, 0x22, 0xef, 0xfe, 0x5b, 0xa1, 0x9c, 0xd8, + 0x07, 0xc5, 0x30, 0xeb, 0xaa, 0x9f, 0xe9, 0xf6, + 0x42, 0xcc, 0xac, 0xff, 0x47, 0xed, 0x15, 0xc2, + 0x2b, 0xfe, 0x30, 0x36, 0xeb, 0xf8, 0xad, 0x9c, + 0x8e, 0xd2, 0x32, 0x40, 0xae, 0xeb, 0xaa, 0x24, + 0xd1, 0x35, 0x75, 0x51, 0x00, 0xb8, 0x5e, 0xce, + 0xe3, 0x17, 0x49, 0x06, 0xe4, 0x63, 0x12, 0x06, + 0x2c, 0xee, 0xca, 0xc7, 0x5d, 0xe5, 0x27, 0x52, + 0x56, 0xc2, 0xc1, 0xa6, 0x53, 0xfd, 0x69, 0x15, + 0xb1, 0xb3, 0x0c, 0x8e, 0xcb, 0xb6, 0xfd, 0x42, + 0x80, 0x43, 0x74, 0x53, 0x17, 0x3a, 0x96, 0x23, + 0x8b, 0xc7, 0xd1, 0x08, 0x89, 0x23, 0x43, 0xe0, + 0x33, 0xbc, 0xd9, 0x8e, 0x43, 0x7e, 0x78, 0x9f, + 0xc5, 0xbe, 0xba, 0xa1, 0x2b, 0x26, 0x34, 0xb5, + 0x1e, 0xd0, 0xd5, 0x89, 0xf1, 0x11, 0x43, 0xa0, + 0x21, 0xd8, 0xec, 0xce, 0x59, 0x4f, 0xdd, 0x48, + 0xda, 0xe8, 0x4c, 0x80, 0x63, 0xef, 0x35, 0x81, + 0xbc, 0x37, 0x8a, 0x48, 0xda, 0x4e, 0x51, 0xbb, + 0x17, 0x5b, 0x0d, 0xb4, 0x7f, 0x9d, 0xcf, 0x99, + 0x31, 0x8c, 0x30, 0x22, 0x5c, 0xa7, 0xfa, 0x79, + 0xc8, 0x79, 0xbf, 0x1c, 0x93, 0x97, 0xb5, 0xcc, + 0xc5, 0xef, 0xad, 0x94, 0xc5, 0x00, 0xed, 0x7f, + 0x9f, 0x38, 0x5d, 0x08, 0x8e, 0x34, 0x93, 0x22, + 0x21, 0xfc, 0x0f, 0xc9, 0xaf, 0xe5, 0x1f, 0x68, + 0x75, 0x54, 0x81, 0x31, 0x69, 0x76, 0x95, 0x47, + 0x8a, 0xbd, 0xc8, 0x73, 0x6f, 0x10, 0x09, 0x5a, + 0x6b, 0x92, 0xec, 0x67, 0x9f, 0xe0, 0xe2, 0xae, + 0x5d, 0x8b, 0x33, 0x53, 0x55, 0xd5, 0x8d, 0xae, + 0x4d, 0x4f, 0x0b, 0x17, 0xaa, 0x5d, 0x1e, 0x52, + 0xf1, 0xd4, 0x55, 0x84, 0xa8, 0x92, 0xc3, 0x4c, + 0xe4, 0xb0, 0x4f, 0xcd, 0x00, 0x98, 0x1d, 0x51, + 0xca, 0xa1, 0x60, 0x64, 0xba, 0xd9, 0x2d, 0x01, + 0x9d, 0xc3, 0xad, 0xed, 0x91, 0x96, 0x84, 0x11, + 0x2b, 0x29, 0xda, 0xa2, 0x8b, 0x9d, 0xae, 0x09, + 0xb8, 0x6b, 0x21, 0xa9, 0x33, 0x10, 0xd5, 0xfb, + 0xc6, 0x52, 0x7b, 0x22, 0x4b, 0x9c, 0xe8, 0x7d, + 0x27, 0x82, 0xbb, 0x29, 0x46, 0x73, 0xf0, 0xec, + 0x06, 0xf2, 0x6b, 0x08, 0x76, 0x52, 0xa1, 0x8d, + 0x6a, 0xd7, 0xb1, 0xc9, 0x33, 0x03, 0xef, 0x05, + 0x61, 0xc0, 0xfc, 0x9c, 0xd4, 0xf6, 0x78, 0xf6, + 0x06, 0xf1, 0x92, 0xcf, 0x5d, 0xf9, 0x2b, 0x15, + 0x48, 0xf5, 0xdd, 0x26, 0x87, 0xed, 0xbe, 0xcc, + 0xfc, 0x6d, 0x4e, 0x9d, 0xe4, 0xbd, 0x50, 0xd3, + 0xc7, 0x4f, 0xb2, 0x75, 0xab, 0xd9, 0xb3, 0xe9, + 0x02, 0x77, 0xdb, 0x4a, 0x00, 0x69, 0xc0, 0xa2, + 0xa7, 0x13, 0x6f, 0x50, 0xce, 0xad, 0x4b, 0x2f, + 0x19, 0x95, 0xfa, 0xaf, 0x16, 0x80, 0x40, 0xe9, + 0xe4, 0xbe, 0xb7, 0xc5, 0x72, 0x20, 0x49, 0xd6, + 0xda, 0x64, 0x02, 0x99, 0x2f, 0xce, 0xa4, 0x50, + 0x97, 0xdf, 0x7c, 0x1c, 0x20, 0xfb, 0x06, 0x82, + 0x22, 0x00, 0x05, 0x76, 0x93, 0x5a, 0x08, 0x06, + 0x77, 0x34, 0x51, 0x92, 0x1f, 0x54, 0xc5, 0x5f, + 0xbf, 0x59, 0x3a, 0x4f, 0x14, 0x7c, 0x1f, 0xef, + 0x3a, 0xca, 0xf0, 0xcf, 0xa9, 0x07, 0xae, 0x48, + 0xc8, 0xc0, 0x63, 0x12, 0xcf, 0xdf, 0x51, 0x86, + 0x90, 0x4b, 0xec, 0x7f, 0xed, 0x4e, 0xd9, 0x33, + 0xc9, 0x25, 0x6a, 0xb0, 0x4c, 0xbf, 0xa0, 0x3a, + 0x96, 0x7c, 0x1f, 0x7e, 0xad, 0x4a, 0xb4, 0x0d, + 0xf1, 0x16, 0xbe, 0x66, 0x0e, 0x27, 0xca, 0x2b, + 0x54, 0x35, 0x26, 0xd4, 0xb9, 0x68, 0x4c, 0x31, + 0xe1, 0xe4, 0x23, 0x83, 0xb9, 0x69, 0xf8, 0x96, + 0x29, 0x9d, 0x71, 0x39, 0x0c, 0xc8, 0x5b, 0x70, + 0x32, 0x02, 0xac, 0xad, 0xec, 0xfa, 0x8c, 0x40, + 0x96, 0x5c, 0x08, 0xc5, 0x3b, 0x56, 0x71, 0xe0, + 0xd5, 0x94, 0x55, 0xbc, 0x5a, 0x85, 0x86, 0xc6, + 0x55, 0xdb, 0x8c, 0x2a, 0xde, 0x4b, 0xa8, 0x87, + 0x7f, 0x19, 0xb6, 0x00, 0x0e, 0x18, 0xf8, 0xfe, + 0xad, 0xda, 0x7e, 0xde, 0x8f, 0xe8, 0x0a, 0xa6, + 0x62, 0xd6, 0x94, 0xc6, 0xd8, 0xc3, 0x3b, 0x52 #endif }; WOLFSSL_SMALL_STACK_STATIC const byte kyber512_ss[] = { -#ifndef WOLFSSL_ML_KEM +#ifdef WOLFSSL_KYBER_ORIGINAL 0x0A, 0x69, 0x25, 0x67, 0x6F, 0x24, 0xB2, 0x2C, 0x28, 0x6F, 0x4C, 0x81, 0xA4, 0x22, 0x4C, 0xEC, 0x50, 0x6C, 0x9B, 0x25, 0x7D, 0x48, 0x0E, 0x02, 0xE3, 0xB4, 0x9F, 0x44, 0xCA, 0xA3, 0x23, 0x7F #else - 0xc6, 0x08, 0x77, 0x70, 0x86, 0xed, 0x9f, 0xfd, - 0xf9, 0x2c, 0xd4, 0xf1, 0xc9, 0x99, 0xae, 0xdd, - 0x0b, 0x42, 0xe5, 0xe8, 0xef, 0x67, 0x32, 0xf4, - 0x11, 0x12, 0x46, 0x48, 0x1e, 0x26, 0x04, 0x63 + 0x31, 0x98, 0x39, 0xe8, 0x2a, 0xb6, 0xb2, 0x22, + 0xde, 0x7b, 0x61, 0x9e, 0x80, 0xda, 0x83, 0x91, + 0x52, 0x2b, 0xbb, 0x37, 0x67, 0x70, 0x18, 0x49, + 0x4a, 0x47, 0x42, 0xc5, 0x3f, 0x9a, 0xbf, 0xdf #endif }; @@ -38506,6 +38741,7 @@ static wc_test_ret_t kyber768_kat(void) }; WOLFSSL_SMALL_STACK_STATIC const byte kyber768_pk[] = { +#ifdef WOLFSSL_KYBER_ORIGINAL 0xA7, 0x2C, 0x2D, 0x9C, 0x84, 0x3E, 0xE9, 0xF8, 0x31, 0x3E, 0xCC, 0x7F, 0x86, 0xD6, 0x29, 0x4D, 0x59, 0x15, 0x9D, 0x9A, 0x87, 0x9A, 0x54, 0x2E, @@ -38654,8 +38890,159 @@ static wc_test_ret_t kyber768_kat(void) 0x5F, 0x8F, 0x3F, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9D, 0x59, 0xA5, 0x43, 0xD8, 0x20, 0x8C, 0x54, 0xA3, 0x16, 0x65, 0x29, 0xB5, 0x39, 0x22 +#else + 0xa8, 0xe6, 0x51, 0xa1, 0xe6, 0x85, 0xf2, 0x24, + 0x78, 0xa8, 0x95, 0x4f, 0x00, 0x7b, 0xc7, 0x71, + 0x1b, 0x93, 0x07, 0x72, 0xc7, 0x8f, 0x09, 0x2e, + 0x82, 0x87, 0x8e, 0x3e, 0x93, 0x7f, 0x36, 0x79, + 0x67, 0x53, 0x29, 0x13, 0xa8, 0xd5, 0x3d, 0xfd, + 0xf4, 0xbf, 0xb1, 0xf8, 0x84, 0x67, 0x46, 0x59, + 0x67, 0x05, 0xcf, 0x34, 0x51, 0x42, 0xb9, 0x72, + 0xa3, 0xf1, 0x63, 0x25, 0xc4, 0x0c, 0x29, 0x52, + 0xa3, 0x7b, 0x25, 0x89, 0x7e, 0x5e, 0xf3, 0x5f, + 0xba, 0xeb, 0x73, 0xa4, 0xac, 0xbe, 0xb6, 0xa0, + 0xb8, 0x99, 0x42, 0xce, 0xb1, 0x95, 0x53, 0x1c, + 0xfc, 0x0a, 0x07, 0x99, 0x39, 0x54, 0x48, 0x3e, + 0x6c, 0xbc, 0x87, 0xc0, 0x6a, 0xa7, 0x4f, 0xf0, + 0xca, 0xc5, 0x20, 0x7e, 0x53, 0x5b, 0x26, 0x0a, + 0xa9, 0x8d, 0x11, 0x98, 0xc0, 0x7d, 0xa6, 0x05, + 0xc4, 0xd1, 0x10, 0x20, 0xf6, 0xc9, 0xf7, 0xbb, + 0x68, 0xbb, 0x34, 0x56, 0xc7, 0x3a, 0x01, 0xb7, + 0x10, 0xbc, 0x99, 0xd1, 0x77, 0x39, 0xa5, 0x17, + 0x16, 0xaa, 0x01, 0x66, 0x0c, 0x8b, 0x62, 0x8b, + 0x2f, 0x56, 0x02, 0xba, 0x65, 0xf0, 0x7e, 0xa9, + 0x93, 0x33, 0x6e, 0x89, 0x6e, 0x83, 0xf2, 0xc5, + 0x73, 0x1b, 0xbf, 0x03, 0x46, 0x0c, 0x5b, 0x6c, + 0x8a, 0xfe, 0xcb, 0x74, 0x8e, 0xe3, 0x91, 0xe9, + 0x89, 0x34, 0xa2, 0xc5, 0x7d, 0x4d, 0x06, 0x9f, + 0x50, 0xd8, 0x8b, 0x30, 0xd6, 0x96, 0x6f, 0x38, + 0xc3, 0x7b, 0xc6, 0x49, 0xb8, 0x26, 0x34, 0xce, + 0x77, 0x22, 0x64, 0x5c, 0xcd, 0x62, 0x50, 0x63, + 0x36, 0x46, 0x46, 0xd6, 0xd6, 0x99, 0xdb, 0x57, + 0xb4, 0x5e, 0xb6, 0x74, 0x65, 0xe1, 0x6d, 0xe4, + 0xd4, 0x06, 0xa8, 0x18, 0xb9, 0xea, 0xe1, 0xca, + 0x91, 0x6a, 0x25, 0x94, 0x48, 0x97, 0x08, 0xa4, + 0x3c, 0xea, 0x88, 0xb0, 0x2a, 0x4c, 0x03, 0xd0, + 0x9b, 0x44, 0x81, 0x5c, 0x97, 0x10, 0x1c, 0xaf, + 0x50, 0x48, 0xbb, 0xcb, 0x24, 0x7a, 0xe2, 0x36, + 0x6c, 0xdc, 0x25, 0x4b, 0xa2, 0x21, 0x29, 0xf4, + 0x5b, 0x3b, 0x0e, 0xb3, 0x99, 0xca, 0x91, 0xa3, + 0x03, 0x40, 0x28, 0x30, 0xec, 0x01, 0xdb, 0x7b, + 0x2c, 0xa4, 0x80, 0xcf, 0x35, 0x04, 0x09, 0xb2, + 0x16, 0x09, 0x4b, 0x7b, 0x0c, 0x3a, 0xe3, 0x3c, + 0xe1, 0x0a, 0x91, 0x24, 0xe8, 0x96, 0x51, 0xab, + 0x90, 0x1e, 0xa2, 0x53, 0xc8, 0x41, 0x5b, 0xd7, + 0x82, 0x5f, 0x02, 0xbb, 0x22, 0x93, 0x69, 0xaf, + 0x97, 0x20, 0x28, 0xf2, 0x28, 0x75, 0xea, 0x55, + 0xaf, 0x16, 0xd3, 0xbc, 0x69, 0xf7, 0x0c, 0x2e, + 0xe8, 0xb7, 0x5f, 0x28, 0xb4, 0x7d, 0xd3, 0x91, + 0xf9, 0x89, 0xad, 0xe3, 0x14, 0x72, 0x9c, 0x33, + 0x1f, 0xa0, 0x4c, 0x19, 0x17, 0xb2, 0x78, 0xc3, + 0xeb, 0x60, 0x28, 0x68, 0x51, 0x28, 0x21, 0xad, + 0xc8, 0x25, 0xc6, 0x45, 0x77, 0xce, 0x1e, 0x63, + 0xb1, 0xd9, 0x64, 0x4a, 0x61, 0x29, 0x48, 0xa3, + 0x48, 0x3c, 0x7f, 0x1b, 0x9a, 0x25, 0x80, 0x00, + 0xe3, 0x01, 0x96, 0x94, 0x4a, 0x40, 0x36, 0x27, + 0x60, 0x9c, 0x76, 0xc7, 0xea, 0x6b, 0x5d, 0xe0, + 0x17, 0x64, 0xd2, 0x43, 0x79, 0x11, 0x7b, 0x9e, + 0xa2, 0x98, 0x48, 0xdc, 0x55, 0x5c, 0x45, 0x4b, + 0xce, 0xae, 0x1b, 0xa5, 0xcc, 0x72, 0xc7, 0x4a, + 0xb9, 0x6b, 0x9c, 0x91, 0xb9, 0x10, 0xd2, 0x6b, + 0x88, 0xb2, 0x56, 0x39, 0xd4, 0x77, 0x8a, 0xe2, + 0x6c, 0x7c, 0x61, 0x51, 0xa1, 0x9c, 0x6c, 0xd7, + 0x93, 0x84, 0x54, 0x37, 0x24, 0x65, 0xe4, 0xc5, + 0xec, 0x29, 0x24, 0x5a, 0xcb, 0x3d, 0xb5, 0x37, + 0x9d, 0xe3, 0xda, 0xbf, 0xa6, 0x29, 0xa7, 0xc0, + 0x4a, 0x83, 0x53, 0xa8, 0x53, 0x0c, 0x95, 0xac, + 0xb7, 0x32, 0xbb, 0x4b, 0xb8, 0x19, 0x32, 0xbb, + 0x2c, 0xa7, 0xa8, 0x48, 0xcd, 0x36, 0x68, 0x01, + 0x44, 0x4a, 0xbe, 0x23, 0xc8, 0x3b, 0x36, 0x6a, + 0x87, 0xd6, 0xa3, 0xcf, 0x36, 0x09, 0x24, 0xc0, + 0x02, 0xba, 0xe9, 0x0a, 0xf6, 0x5c, 0x48, 0x06, + 0x0b, 0x37, 0x52, 0xf2, 0xba, 0xdf, 0x1a, 0xb2, + 0x72, 0x20, 0x72, 0x55, 0x4a, 0x50, 0x59, 0x75, + 0x35, 0x94, 0xe6, 0xa7, 0x02, 0x76, 0x1f, 0xc9, + 0x76, 0x84, 0xc8, 0xc4, 0xa7, 0x54, 0x0a, 0x6b, + 0x07, 0xfb, 0xc9, 0xde, 0x87, 0xc9, 0x74, 0xaa, + 0x88, 0x09, 0xd9, 0x28, 0xc7, 0xf4, 0xcb, 0xbf, + 0x80, 0x45, 0xae, 0xa5, 0xbc, 0x66, 0x78, 0x25, + 0xfd, 0x05, 0xa5, 0x21, 0xf1, 0xa4, 0xbf, 0x53, + 0x92, 0x10, 0xc7, 0x11, 0x3b, 0xc3, 0x7b, 0x3e, + 0x58, 0xb0, 0xcb, 0xfc, 0x53, 0xc8, 0x41, 0xcb, + 0xb0, 0x37, 0x1d, 0xe2, 0xe5, 0x11, 0xb9, 0x89, + 0xcb, 0x7c, 0x70, 0xc0, 0x23, 0x36, 0x6d, 0x78, + 0xf9, 0xc3, 0x7e, 0xf0, 0x47, 0xf8, 0x72, 0x0b, + 0xe1, 0xc7, 0x59, 0xa8, 0xd9, 0x6b, 0x93, 0xf6, + 0x5a, 0x94, 0x11, 0x4f, 0xfa, 0xf6, 0x0d, 0x9a, + 0x81, 0x79, 0x5e, 0x99, 0x5c, 0x71, 0x15, 0x2a, + 0x46, 0x91, 0xa5, 0xa6, 0x02, 0xa9, 0xe1, 0xf3, + 0x59, 0x9e, 0x37, 0xc7, 0x68, 0xc7, 0xbc, 0x10, + 0x89, 0x94, 0xc0, 0x66, 0x9f, 0x3a, 0xdc, 0x95, + 0x7d, 0x46, 0xb4, 0xb6, 0x25, 0x69, 0x68, 0xe2, + 0x90, 0xd7, 0x89, 0x2e, 0xa8, 0x54, 0x64, 0xee, + 0x7a, 0x75, 0x0f, 0x39, 0xc5, 0xe3, 0x15, 0x2c, + 0x2d, 0xfc, 0x56, 0xd8, 0xb0, 0xc9, 0x24, 0xba, + 0x8a, 0x95, 0x9a, 0x68, 0x09, 0x65, 0x47, 0xf6, + 0x64, 0x23, 0xc8, 0x38, 0x98, 0x2a, 0x57, 0x94, + 0xb9, 0xe1, 0x53, 0x37, 0x71, 0x33, 0x1a, 0x9a, + 0x65, 0x6c, 0x28, 0x82, 0x8b, 0xeb, 0x91, 0x26, + 0xa6, 0x0e, 0x95, 0xe8, 0xc5, 0xd9, 0x06, 0x83, + 0x2c, 0x77, 0x10, 0x70, 0x55, 0x76, 0xb1, 0xfb, + 0x95, 0x07, 0x26, 0x9d, 0xda, 0xf8, 0xc9, 0x5c, + 0xe9, 0x71, 0x9b, 0x2c, 0xa8, 0xdd, 0x11, 0x2b, + 0xe1, 0x0b, 0xcc, 0x9f, 0x4a, 0x37, 0xbd, 0x1b, + 0x1e, 0xee, 0xb3, 0x3e, 0xcd, 0xa7, 0x6a, 0xe9, + 0xf6, 0x9a, 0x5d, 0x4b, 0x29, 0x23, 0xa8, 0x69, + 0x57, 0x67, 0x1d, 0x61, 0x93, 0x35, 0xbe, 0x1c, + 0x4c, 0x2c, 0x77, 0xce, 0x87, 0xc4, 0x1f, 0x98, + 0xa8, 0xcc, 0x46, 0x64, 0x60, 0xfa, 0x30, 0x0a, + 0xaf, 0x5b, 0x30, 0x1f, 0x0a, 0x1d, 0x09, 0xc8, + 0x8e, 0x65, 0xda, 0x4d, 0x8e, 0xe6, 0x4f, 0x68, + 0xc0, 0x21, 0x89, 0xbb, 0xb3, 0x58, 0x4b, 0xaf, + 0xf7, 0x16, 0xc8, 0x5d, 0xb6, 0x54, 0x04, 0x8a, + 0x00, 0x43, 0x33, 0x48, 0x93, 0x93, 0xa0, 0x74, + 0x27, 0xcd, 0x3e, 0x21, 0x7e, 0x6a, 0x34, 0x5f, + 0x6c, 0x2c, 0x2b, 0x13, 0xc2, 0x7b, 0x33, 0x72, + 0x71, 0xc0, 0xb2, 0x7b, 0x2d, 0xba, 0xa0, 0x0d, + 0x23, 0x76, 0x00, 0xb5, 0xb5, 0x94, 0xe8, 0xcf, + 0x2d, 0xd6, 0x25, 0xea, 0x76, 0xcf, 0x0e, 0xd8, + 0x99, 0x12, 0x2c, 0x97, 0x96, 0xb4, 0xb0, 0x18, + 0x70, 0x04, 0x25, 0x80, 0x49, 0xa4, 0x77, 0xcd, + 0x11, 0xd6, 0x8c, 0x49, 0xb9, 0xa0, 0xe7, 0xb0, + 0x0b, 0xce, 0x8c, 0xac, 0x78, 0x64, 0xcb, 0xb3, + 0x75, 0x14, 0x00, 0x84, 0x74, 0x4c, 0x93, 0x06, + 0x26, 0x94, 0xca, 0x79, 0x5c, 0x4f, 0x40, 0xe7, + 0xac, 0xc9, 0xc5, 0xa1, 0x88, 0x40, 0x72, 0xd8, + 0xc3, 0x8d, 0xaf, 0xb5, 0x01, 0xee, 0x41, 0x84, + 0xdd, 0x5a, 0x81, 0x9e, 0xc2, 0x4e, 0xc1, 0x65, + 0x12, 0x61, 0xf9, 0x62, 0xb1, 0x7a, 0x72, 0x15, + 0xaa, 0x4a, 0x74, 0x8c, 0x15, 0x83, 0x6c, 0x38, + 0x91, 0x37, 0x67, 0x82, 0x04, 0x83, 0x8d, 0x71, + 0x95, 0xa8, 0x5b, 0x4f, 0x98, 0xa1, 0xb5, 0x74, + 0xc4, 0xcd, 0x79, 0x09, 0xcd, 0x1f, 0x83, 0x3e, + 0xff, 0xd1, 0x48, 0x55, 0x43, 0x22, 0x9d, 0x37, + 0x48, 0xd9, 0xb5, 0xcd, 0x6c, 0x17, 0xb9, 0xb3, + 0xb8, 0x4a, 0xef, 0x8b, 0xce, 0x13, 0xe6, 0x83, + 0x73, 0x36, 0x59, 0xc7, 0x95, 0x42, 0xd6, 0x15, + 0x78, 0x2a, 0x71, 0xcd, 0xee, 0xe7, 0x92, 0xba, + 0xb5, 0x1b, 0xdc, 0x4b, 0xbf, 0xe8, 0x30, 0x8e, + 0x66, 0x31, 0x44, 0xed, 0xe8, 0x49, 0x18, 0x30, + 0xad, 0x98, 0xb4, 0x63, 0x4f, 0x64, 0xab, 0xa8, + 0xb9, 0xc0, 0x42, 0x27, 0x26, 0x53, 0x92, 0x0f, + 0x38, 0x0c, 0x1a, 0x17, 0xca, 0x87, 0xce, 0xd7, + 0xaa, 0xc4, 0x1c, 0x82, 0x88, 0x87, 0x93, 0x18, + 0x1a, 0x6f, 0x76, 0xe1, 0x97, 0xb7, 0xb9, 0x0e, + 0xf9, 0x09, 0x43, 0xbb, 0x38, 0x44, 0x91, 0x29, + 0x11, 0xd8, 0x55, 0x1e, 0x54, 0x66, 0xc5, 0x76, + 0x7a, 0xb0, 0xbc, 0x61, 0xa1, 0xa3, 0xf7, 0x36, + 0x16, 0x2e, 0xc0, 0x98, 0xa9, 0x00, 0xb1, 0x2d, + 0xd8, 0xfa, 0xbb, 0xfb, 0x3f, 0xe8, 0xcb, 0x1d, + 0xc4, 0xe8, 0x31, 0x5f, 0x2a, 0xf0, 0xd3, 0x2f, + 0x00, 0x17, 0xae, 0x13, 0x6e, 0x19, 0xf0, 0x28 +#endif }; WOLFSSL_SMALL_STACK_STATIC const byte kyber768_sk[] = { +#ifdef WOLFSSL_KYBER_ORIGINAL 0x07, 0x63, 0x8F, 0xB6, 0x98, 0x68, 0xF3, 0xD3, 0x20, 0xE5, 0x86, 0x2B, 0xD9, 0x69, 0x33, 0xFE, 0xB3, 0x11, 0xB3, 0x62, 0x09, 0x3C, 0x9B, 0x5D, @@ -38956,9 +39343,311 @@ static wc_test_ret_t kyber768_kat(void) 0x00, 0xE0, 0x3B, 0x59, 0xB9, 0x56, 0xF8, 0x21, 0x0E, 0x55, 0x60, 0x67, 0x40, 0x7D, 0x13, 0xDC, 0x90, 0xFA, 0x9E, 0x8B, 0x87, 0x2B, 0xFB, 0x8F +#else + 0xda, 0x0a, 0xc7, 0xb6, 0x60, 0x40, 0x4e, 0x61, + 0x3a, 0xa1, 0xf9, 0x80, 0x38, 0x0c, 0xb3, 0x6d, + 0xba, 0x18, 0xd2, 0x32, 0x56, 0xc7, 0x26, 0x7a, + 0x00, 0xa6, 0x7b, 0xa6, 0xc2, 0xa2, 0xb1, 0x4c, + 0x41, 0x42, 0x39, 0x66, 0x2f, 0x68, 0xbd, 0x44, + 0x6c, 0x8e, 0xfd, 0xf3, 0x66, 0x56, 0xa0, 0x89, + 0x1a, 0x3c, 0xc6, 0x23, 0xfc, 0x68, 0xb6, 0x57, + 0x2f, 0x7b, 0x29, 0xa6, 0xde, 0x12, 0x80, 0x14, + 0x41, 0x1e, 0xe4, 0x19, 0x06, 0xd0, 0x80, 0x71, + 0xf9, 0x48, 0x56, 0xe3, 0x6a, 0x83, 0x2b, 0x40, + 0x33, 0x8d, 0x74, 0x35, 0x16, 0x65, 0x9b, 0xd2, + 0x58, 0x79, 0xc0, 0x07, 0xa5, 0x2b, 0xc9, 0x58, + 0x6f, 0x79, 0x87, 0x6a, 0xfa, 0xc6, 0xc9, 0xa3, + 0x0d, 0x8f, 0xac, 0x24, 0x3b, 0xd2, 0x24, 0x25, + 0xd6, 0xad, 0xce, 0x42, 0xab, 0x7e, 0xd3, 0x90, + 0x14, 0x75, 0x7a, 0x95, 0x8b, 0xc8, 0xa7, 0x45, + 0x65, 0xf0, 0x19, 0x23, 0x4f, 0xf0, 0x4b, 0x34, + 0x89, 0x3e, 0xd6, 0xd0, 0x55, 0x01, 0xc3, 0x72, + 0x55, 0x23, 0x9a, 0xae, 0x2a, 0xc1, 0x9f, 0x8c, + 0x75, 0xac, 0x59, 0x00, 0xda, 0xe8, 0x30, 0x0d, + 0xbb, 0xa7, 0x10, 0xdc, 0x2c, 0xaa, 0xe1, 0xbc, + 0xa3, 0xa3, 0x8c, 0x58, 0x34, 0x2b, 0x28, 0x6b, + 0x85, 0x18, 0xf1, 0x36, 0xad, 0x15, 0xb9, 0xf7, + 0xbc, 0xbb, 0x06, 0xa5, 0x60, 0x7d, 0xb3, 0x75, + 0xdb, 0xe9, 0x76, 0x45, 0x7c, 0x26, 0xc6, 0x59, + 0x82, 0x57, 0x53, 0x1b, 0x2c, 0xfb, 0x6e, 0xe7, + 0xf5, 0x15, 0x91, 0x84, 0x08, 0x04, 0xc3, 0x83, + 0x88, 0x37, 0x6c, 0x27, 0x14, 0x84, 0x13, 0xda, + 0x9e, 0x92, 0x92, 0x0b, 0xfd, 0x9a, 0x06, 0x9e, + 0x01, 0x8b, 0xd2, 0x72, 0x05, 0x3d, 0xa8, 0x77, + 0x5c, 0x0b, 0x73, 0x9f, 0x76, 0x1d, 0xb2, 0x10, + 0x7c, 0xf3, 0x5a, 0x43, 0x4d, 0x69, 0xb0, 0x7e, + 0x5b, 0xcd, 0xb8, 0x74, 0x34, 0x13, 0x8b, 0x0c, + 0xb5, 0x56, 0x76, 0x1b, 0xa5, 0x22, 0xa5, 0x74, + 0x7b, 0x28, 0x74, 0x7d, 0x80, 0xeb, 0x9d, 0x6c, + 0xc6, 0x73, 0xbe, 0xe5, 0x76, 0x93, 0x77, 0xb9, + 0x96, 0xd3, 0x6c, 0xeb, 0x0c, 0x0c, 0x7e, 0xd9, + 0xa6, 0x58, 0x53, 0x33, 0x24, 0x86, 0x9c, 0x18, + 0xa1, 0xa3, 0x6f, 0x31, 0x47, 0x0f, 0x14, 0xc5, + 0xae, 0x49, 0xab, 0x07, 0x05, 0x07, 0xf8, 0x24, + 0x9c, 0xe4, 0x04, 0xb4, 0x9c, 0x0a, 0x8c, 0x3e, + 0xe4, 0x2f, 0xea, 0x96, 0x31, 0xfa, 0x1a, 0x0d, + 0x10, 0xd8, 0x6b, 0x93, 0xf9, 0x86, 0xe0, 0xe3, + 0xa8, 0x2e, 0x70, 0x3b, 0x74, 0xe5, 0xae, 0x61, + 0x01, 0x24, 0x24, 0x21, 0xa8, 0x9a, 0xa0, 0x7f, + 0xe6, 0x85, 0x88, 0x46, 0x0b, 0xaa, 0x36, 0x87, + 0x86, 0x48, 0x6a, 0x72, 0xe4, 0xf2, 0x4d, 0x2d, + 0xd7, 0x6c, 0xfc, 0x03, 0xb6, 0x94, 0xa5, 0xba, + 0x91, 0xa7, 0x55, 0xa0, 0xb9, 0x8f, 0x3b, 0xf9, + 0x33, 0x07, 0xc0, 0xab, 0x64, 0x63, 0x9a, 0xea, + 0x7a, 0x64, 0x98, 0xa3, 0xc3, 0xdd, 0xc5, 0x71, + 0x14, 0x1a, 0xbc, 0xa4, 0x67, 0x8c, 0xd2, 0xe2, + 0xb8, 0x57, 0xfb, 0x88, 0xf6, 0x00, 0xca, 0xa5, + 0x96, 0xb4, 0x4b, 0xc4, 0x22, 0x25, 0x0b, 0x28, + 0x19, 0xe0, 0x51, 0x5f, 0x04, 0x72, 0x39, 0x18, + 0x53, 0x70, 0x0b, 0x01, 0xef, 0xf9, 0x45, 0x3f, + 0xd1, 0x18, 0x76, 0xb7, 0xc7, 0x59, 0xa0, 0x7d, + 0xd8, 0x45, 0xca, 0xba, 0x45, 0x55, 0x26, 0x4a, + 0x82, 0x76, 0x51, 0x93, 0xfd, 0xf8, 0x1b, 0x62, + 0x0a, 0x1e, 0x1f, 0x92, 0x3f, 0xb2, 0x44, 0x42, + 0xcd, 0x1c, 0xbe, 0x94, 0x17, 0x50, 0x03, 0xec, + 0x06, 0xce, 0x77, 0xa3, 0xc6, 0x44, 0x93, 0xc1, + 0x99, 0x98, 0x7a, 0x30, 0x0c, 0x95, 0xc5, 0x3c, + 0x00, 0x89, 0xb5, 0xd6, 0x5c, 0x92, 0xea, 0x97, + 0x1b, 0x2f, 0xfa, 0x93, 0xb5, 0x2a, 0x46, 0x1e, + 0xa2, 0xac, 0x8c, 0x19, 0x9c, 0x2f, 0x4c, 0x2b, + 0x70, 0x42, 0x97, 0xce, 0x3c, 0x39, 0x49, 0xe0, + 0x73, 0x5e, 0xa8, 0xa1, 0x4a, 0xa5, 0x9e, 0x8d, + 0xec, 0x0c, 0x87, 0x83, 0x99, 0xff, 0x70, 0x74, + 0x7a, 0xb2, 0x44, 0xce, 0x46, 0xb5, 0xf2, 0x23, + 0x04, 0x73, 0x32, 0x3d, 0x25, 0xc6, 0x6f, 0xe6, + 0xb4, 0x19, 0xb1, 0xf4, 0xa1, 0x12, 0xe5, 0x21, + 0x40, 0x35, 0x25, 0x6b, 0xc4, 0x3f, 0xfd, 0x2b, + 0x6b, 0x7b, 0x37, 0x87, 0x69, 0xa6, 0xb4, 0x70, + 0x00, 0xbf, 0xb6, 0x35, 0x7d, 0x45, 0x81, 0x4b, + 0xae, 0xf3, 0x85, 0x7d, 0x37, 0x9e, 0x2f, 0xb8, + 0xb5, 0xe5, 0x20, 0x1a, 0xb2, 0x62, 0x74, 0xbb, + 0x1b, 0x70, 0xad, 0x32, 0x2c, 0xd0, 0x43, 0x9b, + 0x2d, 0xb1, 0x09, 0xcf, 0xf0, 0xa2, 0xf8, 0xe6, + 0x00, 0x99, 0x55, 0x71, 0xff, 0xc3, 0x8c, 0x59, + 0x0b, 0xc4, 0xc7, 0x61, 0x5c, 0x69, 0xd0, 0xc9, + 0x8e, 0xf4, 0x30, 0xf3, 0x08, 0x61, 0xa7, 0x72, + 0x38, 0xff, 0xc0, 0x70, 0x61, 0xe4, 0x75, 0xd6, + 0xa3, 0x0a, 0xd1, 0xb4, 0x7f, 0xd0, 0x39, 0xc3, + 0xa4, 0x47, 0x76, 0x2d, 0xb2, 0x21, 0x1d, 0xc3, + 0x1d, 0x0a, 0xca, 0xcf, 0xd5, 0x58, 0x90, 0xa5, + 0x82, 0x47, 0x98, 0xf9, 0xae, 0xad, 0x74, 0x13, + 0xdf, 0xe0, 0x28, 0xb1, 0x01, 0x2b, 0xe8, 0xb6, + 0xca, 0x10, 0x26, 0x66, 0x6a, 0xc6, 0xbc, 0x94, + 0x40, 0xa4, 0x49, 0xb5, 0x1a, 0xd8, 0xbb, 0xa7, + 0xb0, 0x92, 0x1d, 0xd4, 0xd8, 0xb4, 0xa5, 0x78, + 0x13, 0x6d, 0x1a, 0x05, 0xdb, 0x38, 0xcc, 0x85, + 0x84, 0x37, 0xb2, 0x51, 0x61, 0xd1, 0xc3, 0xc2, + 0x8e, 0xe0, 0x7b, 0xbc, 0xf2, 0xb2, 0x49, 0x11, + 0x0d, 0x22, 0x78, 0x1d, 0xc3, 0x05, 0x0d, 0x8c, + 0xc0, 0x09, 0x00, 0x96, 0xb3, 0x8a, 0x85, 0x06, + 0x96, 0xf8, 0x6e, 0x9e, 0x6b, 0xab, 0x32, 0x52, + 0x71, 0xb2, 0x24, 0x86, 0x75, 0x01, 0x19, 0x68, + 0x50, 0x28, 0x81, 0x09, 0x04, 0x97, 0xfa, 0xc0, + 0xaf, 0x84, 0x3c, 0x1a, 0xea, 0x76, 0xdd, 0x81, + 0xcf, 0x29, 0xc0, 0x12, 0xc6, 0x62, 0x27, 0xb7, + 0xf0, 0x6d, 0x99, 0x61, 0x30, 0x9b, 0x02, 0x62, + 0xf7, 0x32, 0xc9, 0xa4, 0xd0, 0xbb, 0xd0, 0x67, + 0x27, 0xab, 0xb8, 0x37, 0x1f, 0xf2, 0xc1, 0x18, + 0x99, 0xa0, 0x98, 0x37, 0x5c, 0x46, 0x05, 0x16, + 0xb2, 0xcc, 0x88, 0xbc, 0xf6, 0x28, 0xed, 0xe3, + 0x7d, 0x8f, 0x3b, 0x33, 0x42, 0xe4, 0x49, 0x0a, + 0x85, 0x60, 0x6e, 0xc0, 0x3d, 0xa2, 0x9b, 0x02, + 0x56, 0x27, 0x53, 0x82, 0xa3, 0x31, 0x3d, 0xc0, + 0x41, 0x11, 0x48, 0x01, 0x03, 0x2c, 0x51, 0x9f, + 0x35, 0x0c, 0x3e, 0x6a, 0xba, 0xc3, 0xe3, 0x3b, + 0x93, 0xb4, 0xa1, 0x9f, 0x7c, 0x54, 0x66, 0xe5, + 0x8c, 0xb1, 0xdc, 0x14, 0xb4, 0xa9, 0x6c, 0x47, + 0x57, 0x29, 0xf9, 0x71, 0xbd, 0xf1, 0x73, 0xcd, + 0xf3, 0x54, 0x82, 0x4d, 0x01, 0x94, 0x27, 0xf9, + 0x5b, 0x3b, 0x4a, 0x4a, 0x4a, 0x95, 0x8e, 0x47, + 0x6a, 0x6e, 0x69, 0x91, 0xce, 0x6f, 0x06, 0xcb, + 0x5d, 0xfc, 0xa7, 0xd4, 0x38, 0x0c, 0x3d, 0x92, + 0x0b, 0x57, 0x11, 0xac, 0x1f, 0xcb, 0xaf, 0x4b, + 0x9a, 0xc8, 0x00, 0xb9, 0x76, 0xd1, 0xec, 0x76, + 0x6a, 0x62, 0x6c, 0xc1, 0x90, 0x0b, 0x66, 0xb3, + 0xa9, 0xdc, 0x62, 0xc5, 0xc1, 0x44, 0x52, 0x7a, + 0x29, 0x6b, 0xaf, 0x70, 0x43, 0x3b, 0xf6, 0x57, + 0xc0, 0x43, 0x7f, 0x87, 0x59, 0x7b, 0xd7, 0xc8, + 0xbb, 0xbe, 0x9a, 0xbc, 0x37, 0x05, 0x09, 0x31, + 0xa4, 0xa8, 0x69, 0x82, 0xa2, 0x02, 0x8a, 0x74, + 0x45, 0x4c, 0x9b, 0x81, 0x0c, 0x88, 0xd1, 0x70, + 0x1c, 0x8c, 0xc9, 0x8a, 0x1d, 0x4c, 0xa1, 0x07, + 0xa6, 0xb2, 0x5e, 0x96, 0x2f, 0xe4, 0xb6, 0xb0, + 0x3c, 0x95, 0x45, 0x32, 0x60, 0xb8, 0x07, 0x22, + 0x86, 0x37, 0xcc, 0x9e, 0xb1, 0x2a, 0xcc, 0x09, + 0x54, 0x95, 0x9a, 0x52, 0xae, 0x54, 0xd1, 0x97, + 0x73, 0x00, 0xab, 0xa0, 0xba, 0x2c, 0x14, 0x60, + 0x9b, 0xb2, 0x8c, 0x11, 0xd5, 0xfa, 0xc5, 0xca, + 0xc8, 0x82, 0x97, 0x60, 0x32, 0x83, 0xe8, 0x67, + 0xa3, 0x64, 0x83, 0x66, 0xc7, 0x24, 0xd9, 0x35, + 0x4c, 0xd7, 0xa1, 0x96, 0xdb, 0xd9, 0x80, 0x2f, + 0x7b, 0x88, 0xd3, 0xfa, 0x00, 0x1f, 0x9c, 0x97, + 0x73, 0x22, 0x54, 0x62, 0x23, 0x5e, 0x91, 0x35, + 0x2a, 0x20, 0x79, 0x1f, 0xd8, 0xb8, 0x7f, 0xe3, + 0x37, 0x7e, 0xc6, 0xa3, 0x94, 0x0b, 0x11, 0x30, + 0xa0, 0xbb, 0x04, 0xe7, 0x41, 0x0a, 0x34, 0xe2, + 0x58, 0x0d, 0x07, 0x1d, 0x6c, 0x56, 0x20, 0x20, + 0x86, 0x78, 0x7a, 0x65, 0x90, 0xf8, 0x43, 0x93, + 0xa8, 0xe6, 0x51, 0xa1, 0xe6, 0x85, 0xf2, 0x24, + 0x78, 0xa8, 0x95, 0x4f, 0x00, 0x7b, 0xc7, 0x71, + 0x1b, 0x93, 0x07, 0x72, 0xc7, 0x8f, 0x09, 0x2e, + 0x82, 0x87, 0x8e, 0x3e, 0x93, 0x7f, 0x36, 0x79, + 0x67, 0x53, 0x29, 0x13, 0xa8, 0xd5, 0x3d, 0xfd, + 0xf4, 0xbf, 0xb1, 0xf8, 0x84, 0x67, 0x46, 0x59, + 0x67, 0x05, 0xcf, 0x34, 0x51, 0x42, 0xb9, 0x72, + 0xa3, 0xf1, 0x63, 0x25, 0xc4, 0x0c, 0x29, 0x52, + 0xa3, 0x7b, 0x25, 0x89, 0x7e, 0x5e, 0xf3, 0x5f, + 0xba, 0xeb, 0x73, 0xa4, 0xac, 0xbe, 0xb6, 0xa0, + 0xb8, 0x99, 0x42, 0xce, 0xb1, 0x95, 0x53, 0x1c, + 0xfc, 0x0a, 0x07, 0x99, 0x39, 0x54, 0x48, 0x3e, + 0x6c, 0xbc, 0x87, 0xc0, 0x6a, 0xa7, 0x4f, 0xf0, + 0xca, 0xc5, 0x20, 0x7e, 0x53, 0x5b, 0x26, 0x0a, + 0xa9, 0x8d, 0x11, 0x98, 0xc0, 0x7d, 0xa6, 0x05, + 0xc4, 0xd1, 0x10, 0x20, 0xf6, 0xc9, 0xf7, 0xbb, + 0x68, 0xbb, 0x34, 0x56, 0xc7, 0x3a, 0x01, 0xb7, + 0x10, 0xbc, 0x99, 0xd1, 0x77, 0x39, 0xa5, 0x17, + 0x16, 0xaa, 0x01, 0x66, 0x0c, 0x8b, 0x62, 0x8b, + 0x2f, 0x56, 0x02, 0xba, 0x65, 0xf0, 0x7e, 0xa9, + 0x93, 0x33, 0x6e, 0x89, 0x6e, 0x83, 0xf2, 0xc5, + 0x73, 0x1b, 0xbf, 0x03, 0x46, 0x0c, 0x5b, 0x6c, + 0x8a, 0xfe, 0xcb, 0x74, 0x8e, 0xe3, 0x91, 0xe9, + 0x89, 0x34, 0xa2, 0xc5, 0x7d, 0x4d, 0x06, 0x9f, + 0x50, 0xd8, 0x8b, 0x30, 0xd6, 0x96, 0x6f, 0x38, + 0xc3, 0x7b, 0xc6, 0x49, 0xb8, 0x26, 0x34, 0xce, + 0x77, 0x22, 0x64, 0x5c, 0xcd, 0x62, 0x50, 0x63, + 0x36, 0x46, 0x46, 0xd6, 0xd6, 0x99, 0xdb, 0x57, + 0xb4, 0x5e, 0xb6, 0x74, 0x65, 0xe1, 0x6d, 0xe4, + 0xd4, 0x06, 0xa8, 0x18, 0xb9, 0xea, 0xe1, 0xca, + 0x91, 0x6a, 0x25, 0x94, 0x48, 0x97, 0x08, 0xa4, + 0x3c, 0xea, 0x88, 0xb0, 0x2a, 0x4c, 0x03, 0xd0, + 0x9b, 0x44, 0x81, 0x5c, 0x97, 0x10, 0x1c, 0xaf, + 0x50, 0x48, 0xbb, 0xcb, 0x24, 0x7a, 0xe2, 0x36, + 0x6c, 0xdc, 0x25, 0x4b, 0xa2, 0x21, 0x29, 0xf4, + 0x5b, 0x3b, 0x0e, 0xb3, 0x99, 0xca, 0x91, 0xa3, + 0x03, 0x40, 0x28, 0x30, 0xec, 0x01, 0xdb, 0x7b, + 0x2c, 0xa4, 0x80, 0xcf, 0x35, 0x04, 0x09, 0xb2, + 0x16, 0x09, 0x4b, 0x7b, 0x0c, 0x3a, 0xe3, 0x3c, + 0xe1, 0x0a, 0x91, 0x24, 0xe8, 0x96, 0x51, 0xab, + 0x90, 0x1e, 0xa2, 0x53, 0xc8, 0x41, 0x5b, 0xd7, + 0x82, 0x5f, 0x02, 0xbb, 0x22, 0x93, 0x69, 0xaf, + 0x97, 0x20, 0x28, 0xf2, 0x28, 0x75, 0xea, 0x55, + 0xaf, 0x16, 0xd3, 0xbc, 0x69, 0xf7, 0x0c, 0x2e, + 0xe8, 0xb7, 0x5f, 0x28, 0xb4, 0x7d, 0xd3, 0x91, + 0xf9, 0x89, 0xad, 0xe3, 0x14, 0x72, 0x9c, 0x33, + 0x1f, 0xa0, 0x4c, 0x19, 0x17, 0xb2, 0x78, 0xc3, + 0xeb, 0x60, 0x28, 0x68, 0x51, 0x28, 0x21, 0xad, + 0xc8, 0x25, 0xc6, 0x45, 0x77, 0xce, 0x1e, 0x63, + 0xb1, 0xd9, 0x64, 0x4a, 0x61, 0x29, 0x48, 0xa3, + 0x48, 0x3c, 0x7f, 0x1b, 0x9a, 0x25, 0x80, 0x00, + 0xe3, 0x01, 0x96, 0x94, 0x4a, 0x40, 0x36, 0x27, + 0x60, 0x9c, 0x76, 0xc7, 0xea, 0x6b, 0x5d, 0xe0, + 0x17, 0x64, 0xd2, 0x43, 0x79, 0x11, 0x7b, 0x9e, + 0xa2, 0x98, 0x48, 0xdc, 0x55, 0x5c, 0x45, 0x4b, + 0xce, 0xae, 0x1b, 0xa5, 0xcc, 0x72, 0xc7, 0x4a, + 0xb9, 0x6b, 0x9c, 0x91, 0xb9, 0x10, 0xd2, 0x6b, + 0x88, 0xb2, 0x56, 0x39, 0xd4, 0x77, 0x8a, 0xe2, + 0x6c, 0x7c, 0x61, 0x51, 0xa1, 0x9c, 0x6c, 0xd7, + 0x93, 0x84, 0x54, 0x37, 0x24, 0x65, 0xe4, 0xc5, + 0xec, 0x29, 0x24, 0x5a, 0xcb, 0x3d, 0xb5, 0x37, + 0x9d, 0xe3, 0xda, 0xbf, 0xa6, 0x29, 0xa7, 0xc0, + 0x4a, 0x83, 0x53, 0xa8, 0x53, 0x0c, 0x95, 0xac, + 0xb7, 0x32, 0xbb, 0x4b, 0xb8, 0x19, 0x32, 0xbb, + 0x2c, 0xa7, 0xa8, 0x48, 0xcd, 0x36, 0x68, 0x01, + 0x44, 0x4a, 0xbe, 0x23, 0xc8, 0x3b, 0x36, 0x6a, + 0x87, 0xd6, 0xa3, 0xcf, 0x36, 0x09, 0x24, 0xc0, + 0x02, 0xba, 0xe9, 0x0a, 0xf6, 0x5c, 0x48, 0x06, + 0x0b, 0x37, 0x52, 0xf2, 0xba, 0xdf, 0x1a, 0xb2, + 0x72, 0x20, 0x72, 0x55, 0x4a, 0x50, 0x59, 0x75, + 0x35, 0x94, 0xe6, 0xa7, 0x02, 0x76, 0x1f, 0xc9, + 0x76, 0x84, 0xc8, 0xc4, 0xa7, 0x54, 0x0a, 0x6b, + 0x07, 0xfb, 0xc9, 0xde, 0x87, 0xc9, 0x74, 0xaa, + 0x88, 0x09, 0xd9, 0x28, 0xc7, 0xf4, 0xcb, 0xbf, + 0x80, 0x45, 0xae, 0xa5, 0xbc, 0x66, 0x78, 0x25, + 0xfd, 0x05, 0xa5, 0x21, 0xf1, 0xa4, 0xbf, 0x53, + 0x92, 0x10, 0xc7, 0x11, 0x3b, 0xc3, 0x7b, 0x3e, + 0x58, 0xb0, 0xcb, 0xfc, 0x53, 0xc8, 0x41, 0xcb, + 0xb0, 0x37, 0x1d, 0xe2, 0xe5, 0x11, 0xb9, 0x89, + 0xcb, 0x7c, 0x70, 0xc0, 0x23, 0x36, 0x6d, 0x78, + 0xf9, 0xc3, 0x7e, 0xf0, 0x47, 0xf8, 0x72, 0x0b, + 0xe1, 0xc7, 0x59, 0xa8, 0xd9, 0x6b, 0x93, 0xf6, + 0x5a, 0x94, 0x11, 0x4f, 0xfa, 0xf6, 0x0d, 0x9a, + 0x81, 0x79, 0x5e, 0x99, 0x5c, 0x71, 0x15, 0x2a, + 0x46, 0x91, 0xa5, 0xa6, 0x02, 0xa9, 0xe1, 0xf3, + 0x59, 0x9e, 0x37, 0xc7, 0x68, 0xc7, 0xbc, 0x10, + 0x89, 0x94, 0xc0, 0x66, 0x9f, 0x3a, 0xdc, 0x95, + 0x7d, 0x46, 0xb4, 0xb6, 0x25, 0x69, 0x68, 0xe2, + 0x90, 0xd7, 0x89, 0x2e, 0xa8, 0x54, 0x64, 0xee, + 0x7a, 0x75, 0x0f, 0x39, 0xc5, 0xe3, 0x15, 0x2c, + 0x2d, 0xfc, 0x56, 0xd8, 0xb0, 0xc9, 0x24, 0xba, + 0x8a, 0x95, 0x9a, 0x68, 0x09, 0x65, 0x47, 0xf6, + 0x64, 0x23, 0xc8, 0x38, 0x98, 0x2a, 0x57, 0x94, + 0xb9, 0xe1, 0x53, 0x37, 0x71, 0x33, 0x1a, 0x9a, + 0x65, 0x6c, 0x28, 0x82, 0x8b, 0xeb, 0x91, 0x26, + 0xa6, 0x0e, 0x95, 0xe8, 0xc5, 0xd9, 0x06, 0x83, + 0x2c, 0x77, 0x10, 0x70, 0x55, 0x76, 0xb1, 0xfb, + 0x95, 0x07, 0x26, 0x9d, 0xda, 0xf8, 0xc9, 0x5c, + 0xe9, 0x71, 0x9b, 0x2c, 0xa8, 0xdd, 0x11, 0x2b, + 0xe1, 0x0b, 0xcc, 0x9f, 0x4a, 0x37, 0xbd, 0x1b, + 0x1e, 0xee, 0xb3, 0x3e, 0xcd, 0xa7, 0x6a, 0xe9, + 0xf6, 0x9a, 0x5d, 0x4b, 0x29, 0x23, 0xa8, 0x69, + 0x57, 0x67, 0x1d, 0x61, 0x93, 0x35, 0xbe, 0x1c, + 0x4c, 0x2c, 0x77, 0xce, 0x87, 0xc4, 0x1f, 0x98, + 0xa8, 0xcc, 0x46, 0x64, 0x60, 0xfa, 0x30, 0x0a, + 0xaf, 0x5b, 0x30, 0x1f, 0x0a, 0x1d, 0x09, 0xc8, + 0x8e, 0x65, 0xda, 0x4d, 0x8e, 0xe6, 0x4f, 0x68, + 0xc0, 0x21, 0x89, 0xbb, 0xb3, 0x58, 0x4b, 0xaf, + 0xf7, 0x16, 0xc8, 0x5d, 0xb6, 0x54, 0x04, 0x8a, + 0x00, 0x43, 0x33, 0x48, 0x93, 0x93, 0xa0, 0x74, + 0x27, 0xcd, 0x3e, 0x21, 0x7e, 0x6a, 0x34, 0x5f, + 0x6c, 0x2c, 0x2b, 0x13, 0xc2, 0x7b, 0x33, 0x72, + 0x71, 0xc0, 0xb2, 0x7b, 0x2d, 0xba, 0xa0, 0x0d, + 0x23, 0x76, 0x00, 0xb5, 0xb5, 0x94, 0xe8, 0xcf, + 0x2d, 0xd6, 0x25, 0xea, 0x76, 0xcf, 0x0e, 0xd8, + 0x99, 0x12, 0x2c, 0x97, 0x96, 0xb4, 0xb0, 0x18, + 0x70, 0x04, 0x25, 0x80, 0x49, 0xa4, 0x77, 0xcd, + 0x11, 0xd6, 0x8c, 0x49, 0xb9, 0xa0, 0xe7, 0xb0, + 0x0b, 0xce, 0x8c, 0xac, 0x78, 0x64, 0xcb, 0xb3, + 0x75, 0x14, 0x00, 0x84, 0x74, 0x4c, 0x93, 0x06, + 0x26, 0x94, 0xca, 0x79, 0x5c, 0x4f, 0x40, 0xe7, + 0xac, 0xc9, 0xc5, 0xa1, 0x88, 0x40, 0x72, 0xd8, + 0xc3, 0x8d, 0xaf, 0xb5, 0x01, 0xee, 0x41, 0x84, + 0xdd, 0x5a, 0x81, 0x9e, 0xc2, 0x4e, 0xc1, 0x65, + 0x12, 0x61, 0xf9, 0x62, 0xb1, 0x7a, 0x72, 0x15, + 0xaa, 0x4a, 0x74, 0x8c, 0x15, 0x83, 0x6c, 0x38, + 0x91, 0x37, 0x67, 0x82, 0x04, 0x83, 0x8d, 0x71, + 0x95, 0xa8, 0x5b, 0x4f, 0x98, 0xa1, 0xb5, 0x74, + 0xc4, 0xcd, 0x79, 0x09, 0xcd, 0x1f, 0x83, 0x3e, + 0xff, 0xd1, 0x48, 0x55, 0x43, 0x22, 0x9d, 0x37, + 0x48, 0xd9, 0xb5, 0xcd, 0x6c, 0x17, 0xb9, 0xb3, + 0xb8, 0x4a, 0xef, 0x8b, 0xce, 0x13, 0xe6, 0x83, + 0x73, 0x36, 0x59, 0xc7, 0x95, 0x42, 0xd6, 0x15, + 0x78, 0x2a, 0x71, 0xcd, 0xee, 0xe7, 0x92, 0xba, + 0xb5, 0x1b, 0xdc, 0x4b, 0xbf, 0xe8, 0x30, 0x8e, + 0x66, 0x31, 0x44, 0xed, 0xe8, 0x49, 0x18, 0x30, + 0xad, 0x98, 0xb4, 0x63, 0x4f, 0x64, 0xab, 0xa8, + 0xb9, 0xc0, 0x42, 0x27, 0x26, 0x53, 0x92, 0x0f, + 0x38, 0x0c, 0x1a, 0x17, 0xca, 0x87, 0xce, 0xd7, + 0xaa, 0xc4, 0x1c, 0x82, 0x88, 0x87, 0x93, 0x18, + 0x1a, 0x6f, 0x76, 0xe1, 0x97, 0xb7, 0xb9, 0x0e, + 0xf9, 0x09, 0x43, 0xbb, 0x38, 0x44, 0x91, 0x29, + 0x11, 0xd8, 0x55, 0x1e, 0x54, 0x66, 0xc5, 0x76, + 0x7a, 0xb0, 0xbc, 0x61, 0xa1, 0xa3, 0xf7, 0x36, + 0x16, 0x2e, 0xc0, 0x98, 0xa9, 0x00, 0xb1, 0x2d, + 0xd8, 0xfa, 0xbb, 0xfb, 0x3f, 0xe8, 0xcb, 0x1d, + 0xc4, 0xe8, 0x31, 0x5f, 0x2a, 0xf0, 0xd3, 0x2f, + 0x00, 0x17, 0xae, 0x13, 0x6e, 0x19, 0xf0, 0x28, + 0xf5, 0x72, 0x62, 0x66, 0x13, 0x58, 0xcd, 0xe8, + 0xd3, 0xeb, 0xf9, 0x90, 0xe5, 0xfd, 0x1d, 0x5b, + 0x89, 0x6c, 0x99, 0x2c, 0xcf, 0xaa, 0xdb, 0x52, + 0x56, 0xb6, 0x8b, 0xbf, 0x59, 0x43, 0xb1, 0x32, + 0x86, 0x26, 0xed, 0x79, 0xd4, 0x51, 0x14, 0x08, + 0x00, 0xe0, 0x3b, 0x59, 0xb9, 0x56, 0xf8, 0x21, + 0x0e, 0x55, 0x60, 0x67, 0x40, 0x7d, 0x13, 0xdc, + 0x90, 0xfa, 0x9e, 0x8b, 0x87, 0x2b, 0xfb, 0x8f +#endif }; WOLFSSL_SMALL_STACK_STATIC const byte kyber768_ct[] = { -#ifndef WOLFSSL_ML_KEM +#ifdef WOLFSSL_KYBER_ORIGINAL 0xB5, 0x2C, 0x56, 0xB9, 0x2A, 0x4B, 0x7C, 0xE9, 0xE4, 0xCB, 0x7C, 0x5B, 0x1B, 0x16, 0x31, 0x67, 0xA8, 0xA1, 0x67, 0x5B, 0x2F, 0xDE, 0xF8, 0x4A, @@ -39096,155 +39785,155 @@ static wc_test_ret_t kyber768_kat(void) 0x24, 0x82, 0xA8, 0xED, 0x9E, 0x4E, 0x96, 0x4D, 0x56, 0x83, 0xE5, 0xD4, 0x5D, 0x0C, 0x82, 0x69 #else - 0xa4, 0x13, 0xbe, 0x81, 0x04, 0x72, 0x59, 0x20, - 0x24, 0x01, 0xee, 0x35, 0x98, 0x9d, 0x25, 0xa3, - 0x85, 0x6c, 0xd1, 0xc0, 0x26, 0x0c, 0xe2, 0x39, - 0x1d, 0xe3, 0x23, 0x73, 0x6b, 0x67, 0x8f, 0x32, - 0x80, 0x05, 0xc8, 0x21, 0xad, 0x09, 0x21, 0x80, - 0xb4, 0x49, 0x6f, 0x21, 0x29, 0x28, 0x0f, 0x4f, - 0x29, 0x94, 0x04, 0x36, 0x2b, 0x9d, 0x14, 0x19, - 0x48, 0xb6, 0xbb, 0x02, 0xac, 0xd5, 0x73, 0x65, - 0x59, 0xfc, 0x90, 0x39, 0x01, 0x8c, 0x96, 0x1d, - 0xdd, 0xd9, 0x4e, 0xe5, 0x59, 0x19, 0x84, 0x71, - 0xd4, 0xa0, 0x49, 0xe5, 0x47, 0xb5, 0x63, 0x6c, - 0xf8, 0xbb, 0xf7, 0xdb, 0x1a, 0x90, 0xc7, 0x2b, - 0x87, 0x09, 0x23, 0xdc, 0xd5, 0x4b, 0x14, 0x8c, - 0x60, 0xc9, 0xc8, 0xee, 0x60, 0x4d, 0x30, 0xee, - 0xbb, 0x69, 0x01, 0xe6, 0xdf, 0x25, 0x96, 0x12, - 0x18, 0x26, 0x05, 0x8d, 0x25, 0x02, 0x9a, 0xe3, - 0x99, 0xc9, 0x5f, 0x6a, 0xac, 0xba, 0xaf, 0xe3, - 0x4f, 0x11, 0x8d, 0xdb, 0xa7, 0xa6, 0x9d, 0x7c, - 0xd8, 0x99, 0xb5, 0xf4, 0xd5, 0x8d, 0x3d, 0xf2, - 0xa8, 0x89, 0xb0, 0x30, 0xce, 0x9a, 0x7e, 0xa6, - 0x44, 0x6d, 0x41, 0xa6, 0x0a, 0x17, 0x5f, 0x12, - 0x7d, 0xa9, 0x4c, 0x27, 0x6b, 0xaa, 0x1e, 0xdf, - 0xb3, 0x57, 0xd4, 0x1b, 0x28, 0x57, 0xad, 0x46, - 0x2c, 0x83, 0xd8, 0xff, 0x00, 0x23, 0x6d, 0x9b, - 0xac, 0x59, 0x32, 0x5e, 0x0c, 0x3b, 0xdd, 0xcb, - 0x37, 0xbf, 0xe0, 0xfd, 0xa4, 0xe1, 0x67, 0xfc, - 0xf6, 0xae, 0xc1, 0x49, 0xfe, 0x5f, 0x9f, 0x63, - 0x93, 0xfc, 0x47, 0x15, 0xc6, 0x99, 0x5d, 0x67, - 0xf2, 0xb4, 0xdd, 0xb0, 0xc7, 0x67, 0x8e, 0xe1, - 0x40, 0xbc, 0xfd, 0xd2, 0x36, 0x5e, 0x81, 0x22, - 0xca, 0x92, 0xcb, 0xba, 0x1a, 0xc7, 0x03, 0x35, - 0x7e, 0xdf, 0x15, 0x21, 0x0c, 0x68, 0x92, 0x66, - 0x9f, 0x1a, 0x2b, 0x88, 0xd7, 0x92, 0xbe, 0x7d, - 0x9a, 0xa5, 0x6c, 0x5e, 0x8d, 0xf7, 0x58, 0xab, - 0xb4, 0xbb, 0xae, 0x83, 0x14, 0x1d, 0x27, 0x59, - 0xdf, 0xc4, 0xea, 0x8f, 0x2c, 0xf0, 0x0d, 0xd8, - 0x6a, 0x73, 0x12, 0xfb, 0xae, 0xa9, 0xcf, 0xe6, - 0xd7, 0xfd, 0x3f, 0x13, 0xfc, 0x8c, 0xb7, 0x5d, - 0x25, 0x2c, 0xb3, 0xec, 0x7e, 0x7b, 0x37, 0xcd, - 0x81, 0xd8, 0x8f, 0x38, 0xae, 0x59, 0x3e, 0xde, - 0x6f, 0x8a, 0x81, 0xd5, 0x11, 0x83, 0xd7, 0xdc, - 0x7f, 0x57, 0xab, 0xb2, 0x1c, 0xe2, 0xc5, 0x93, - 0xdb, 0x72, 0xf0, 0xbf, 0x77, 0x9c, 0xcc, 0xc8, - 0x24, 0x20, 0xf5, 0x3c, 0x2f, 0xe3, 0x64, 0xb1, - 0xfd, 0x3c, 0xd2, 0xec, 0x54, 0xb9, 0x24, 0xa6, - 0x2a, 0xfa, 0x4c, 0x31, 0x95, 0x57, 0x8e, 0x48, - 0xaa, 0x5f, 0x50, 0x7e, 0x79, 0x28, 0xd7, 0x52, - 0x7d, 0x65, 0x77, 0xd3, 0xfc, 0xa8, 0x7e, 0x7b, - 0x7b, 0x19, 0xa8, 0x9f, 0x69, 0xf0, 0x01, 0x8e, - 0xeb, 0x36, 0x87, 0x1b, 0xaa, 0xdf, 0xcc, 0x70, - 0x94, 0xe3, 0x44, 0xfb, 0x36, 0x48, 0x1f, 0xb1, - 0x4a, 0x5c, 0x53, 0xc3, 0x08, 0x67, 0xcf, 0x1c, - 0x5c, 0x02, 0xcf, 0x62, 0x27, 0xf9, 0xaa, 0xe8, - 0xd8, 0xa1, 0x2b, 0x24, 0xc5, 0xac, 0x2b, 0x8e, - 0xb9, 0x12, 0xb8, 0x7d, 0xe8, 0x32, 0x54, 0x09, - 0xe4, 0x40, 0xa4, 0x7b, 0x5c, 0x74, 0x23, 0x71, - 0x79, 0xa6, 0xce, 0x55, 0x58, 0xee, 0x09, 0x10, - 0x1c, 0xa4, 0xe6, 0x45, 0xe2, 0x4b, 0xdc, 0x28, - 0x77, 0x87, 0x35, 0xab, 0xf9, 0x8b, 0x06, 0x88, - 0xf6, 0x28, 0x9d, 0x50, 0x32, 0x51, 0x58, 0x2a, - 0xab, 0x6e, 0x81, 0xce, 0xd0, 0x17, 0x98, 0x29, - 0xf7, 0x31, 0x17, 0x31, 0xd0, 0x61, 0x5d, 0x0a, - 0x0d, 0x95, 0x59, 0x78, 0xaa, 0xfb, 0xf8, 0xaa, - 0x44, 0x0a, 0x5c, 0x85, 0x87, 0x0c, 0x58, 0xb3, - 0xe5, 0xc1, 0xff, 0x92, 0x67, 0xf0, 0x94, 0xb7, - 0x42, 0xf5, 0x16, 0xe8, 0xe9, 0x75, 0x9d, 0x0f, - 0x88, 0x02, 0x1d, 0x99, 0xa7, 0xfd, 0x65, 0xbb, - 0xee, 0x80, 0x12, 0x17, 0x27, 0x66, 0x56, 0xd2, - 0x1f, 0x37, 0x34, 0xde, 0x0a, 0x55, 0x89, 0xb3, - 0x3f, 0xe9, 0x96, 0xec, 0xb9, 0x9c, 0x0d, 0x8a, - 0x52, 0xd5, 0x4b, 0x39, 0xdc, 0xfe, 0x70, 0x7f, - 0xc1, 0x1e, 0x35, 0x63, 0x8a, 0x69, 0xd9, 0x08, - 0xcc, 0xb0, 0xed, 0xac, 0xfb, 0x2a, 0xa4, 0x35, - 0xe3, 0xbe, 0xb9, 0x81, 0xd3, 0xfd, 0xef, 0x59, - 0xca, 0xde, 0x6f, 0x63, 0xcd, 0xa0, 0x56, 0xc5, - 0x26, 0xcd, 0xc5, 0x5b, 0x87, 0xa3, 0xef, 0x26, - 0x38, 0xbc, 0xae, 0xed, 0xf4, 0x06, 0x71, 0x10, - 0x53, 0xa0, 0x9d, 0x31, 0x06, 0x99, 0xdc, 0x8e, - 0x3d, 0x07, 0xac, 0xc1, 0x0e, 0x1e, 0xa8, 0xec, - 0x8d, 0x51, 0xab, 0x31, 0xc0, 0x4c, 0xa8, 0x8c, - 0x21, 0x77, 0xa5, 0x11, 0x93, 0xb4, 0x18, 0xcc, - 0xc4, 0xb2, 0x54, 0x8e, 0xcd, 0xa8, 0x61, 0x59, - 0x8f, 0xfa, 0xa8, 0xb1, 0x6e, 0xaf, 0x89, 0xd5, - 0x9c, 0x84, 0x03, 0xc3, 0x9c, 0x8d, 0x94, 0xc4, - 0x28, 0xcf, 0x19, 0x18, 0x0e, 0x14, 0x20, 0x28, - 0x7b, 0x45, 0x5f, 0xb6, 0xe4, 0xe5, 0xbf, 0xbd, - 0x38, 0x3a, 0xef, 0x18, 0xca, 0x99, 0xf8, 0x10, - 0xf6, 0xce, 0xa7, 0x03, 0xbe, 0x4b, 0x9b, 0xf0, - 0xcb, 0x6f, 0x0c, 0x53, 0x83, 0xe8, 0x3e, 0xd3, - 0xa7, 0x23, 0xa2, 0x7d, 0x8e, 0x39, 0x91, 0x06, - 0x76, 0x56, 0x72, 0x69, 0x25, 0xb2, 0x0f, 0xb7, - 0x35, 0xb1, 0x27, 0x52, 0xfa, 0xcf, 0x68, 0x4e, - 0x5c, 0x03, 0xdc, 0x5b, 0xe7, 0xa6, 0x3a, 0xf4, - 0xbd, 0x93, 0x07, 0x54, 0xfd, 0xb5, 0xf7, 0x49, - 0x30, 0x6c, 0x2c, 0xfa, 0x6e, 0x39, 0x89, 0x25, - 0xc3, 0x46, 0xd9, 0xd5, 0x72, 0x92, 0x4b, 0x15, - 0x3b, 0x76, 0x73, 0xb7, 0xa5, 0x02, 0x21, 0x40, - 0x26, 0x4f, 0xd5, 0xa0, 0xab, 0xe0, 0x0b, 0x5d, - 0x85, 0xc6, 0x86, 0xf2, 0x96, 0xfb, 0xc4, 0x9d, - 0xd3, 0x15, 0x5a, 0xd2, 0xf7, 0x48, 0x25, 0x55, - 0x06, 0x90, 0x9b, 0x35, 0x5c, 0x70, 0x60, 0xdd, - 0xed, 0x4d, 0xd2, 0xfa, 0x21, 0xc7, 0xbf, 0x68, - 0x12, 0x51, 0xe7, 0xd6, 0x32, 0x89, 0xe1, 0x5f, - 0x85, 0x85, 0x4a, 0x25, 0xb4, 0xfb, 0x08, 0x5e, - 0xf0, 0x3a, 0x03, 0xcd, 0x05, 0x0f, 0x4f, 0x50, - 0x21, 0xd1, 0x12, 0xf3, 0x29, 0x1a, 0x9f, 0xd6, - 0x0a, 0xd0, 0x1e, 0x0b, 0x57, 0x97, 0xe7, 0x8d, - 0x9b, 0x94, 0xbe, 0xfe, 0x97, 0x46, 0xd7, 0x54, - 0xe6, 0xce, 0x41, 0xda, 0x34, 0xc5, 0x7d, 0xa3, - 0xd7, 0xde, 0xda, 0x6b, 0x23, 0x30, 0x82, 0xc4, - 0x13, 0x76, 0x14, 0xe9, 0x64, 0xff, 0xf0, 0xe3, - 0x84, 0x72, 0xe3, 0x6e, 0x49, 0x5f, 0x54, 0xe2, - 0xd2, 0x37, 0x1a, 0x75, 0x81, 0xb6, 0x94, 0xcb, - 0x26, 0x3d, 0xdf, 0x80, 0xbd, 0xd4, 0x3f, 0x63, - 0x83, 0x57, 0x8b, 0x5e, 0x18, 0x24, 0x4a, 0x69, - 0xca, 0xc9, 0xcd, 0xab, 0xea, 0x3d, 0x05, 0x71, - 0x8f, 0x5c, 0x23, 0xb1, 0xd4, 0xce, 0x66, 0x84, - 0x45, 0x75, 0x97, 0xd0, 0x12, 0x84, 0xb3, 0x8b, - 0x9d, 0x3e, 0xb1, 0xeb, 0xa4, 0xf5, 0xbe, 0xff, - 0x99, 0x0b, 0xb7, 0x49, 0xf0, 0x96, 0xa3, 0x0f, - 0x1b, 0xde, 0x72, 0x4a, 0xde, 0x37, 0x89, 0xde, - 0x5e, 0xf1, 0x83, 0xa6, 0x01, 0x63, 0xe2, 0x8f, - 0x15, 0x84, 0x50, 0x09, 0x84, 0xca, 0x51, 0x53, - 0x55, 0x5c, 0x38, 0xc6, 0x16, 0x49, 0x68, 0x3a, - 0x72, 0x79, 0x21, 0xff, 0xcc, 0xe3, 0x00, 0x7c, - 0x26, 0x77, 0x83, 0xbd, 0xdb, 0xdb, 0x9d, 0xe4, - 0x88, 0x80, 0xc4, 0xe8, 0x45, 0x2d, 0xab, 0x29, - 0xe7, 0xc4, 0xf8, 0xd1, 0xd5, 0xdf, 0xd3, 0x03, - 0xa9, 0x08, 0xb1, 0xce, 0x08, 0xbe, 0x0b, 0x9f, - 0xae, 0x98, 0x89, 0x4d, 0xcb, 0x26, 0x92, 0xd0, - 0xb3, 0x2f, 0xa3, 0x9d, 0xa9, 0x8b, 0xd4, 0xff, - 0x0e, 0xa1, 0x0f, 0x0b, 0x43, 0x8a, 0x49, 0x71, - 0xa7, 0xfc, 0x47, 0x18, 0x2f, 0xbe, 0x52, 0xd6, - 0xde, 0x71, 0xfe, 0xe3, 0xe8, 0x24, 0xa3, 0x9f, - 0x19, 0xc2, 0x7f, 0x51, 0xae, 0xc6, 0xd9, 0x2b, - 0xc7, 0xf8, 0xb8, 0xf0, 0x71, 0x84, 0x7b, 0xca + 0xc8, 0x39, 0x10, 0x85, 0xb8, 0xd3, 0xea, 0x97, + 0x94, 0x21, 0x25, 0x41, 0xb2, 0x91, 0x4f, 0x08, + 0x96, 0x4d, 0x33, 0x52, 0x1d, 0x3f, 0x67, 0xad, + 0x66, 0x09, 0x6e, 0xbf, 0xb1, 0xf7, 0x06, 0x42, + 0x4b, 0x49, 0x55, 0x8f, 0x75, 0x5b, 0x56, 0x25, + 0xba, 0xe2, 0x36, 0xf2, 0xe0, 0x07, 0x96, 0x01, + 0xc7, 0x66, 0xf7, 0xd9, 0x60, 0x80, 0x8f, 0x7e, + 0x2b, 0xb0, 0xc7, 0xa5, 0xe0, 0x66, 0xed, 0x34, + 0x6d, 0xe6, 0x28, 0xf8, 0xc5, 0x7e, 0xeb, 0xab, + 0xbb, 0x0c, 0x22, 0xd9, 0x11, 0x54, 0x84, 0x63, + 0x69, 0x3e, 0xf3, 0xce, 0x52, 0xa5, 0x3f, 0x7f, + 0xf4, 0x15, 0xf0, 0x0e, 0x65, 0x7a, 0xe1, 0xc5, + 0xa4, 0x8f, 0xa5, 0xec, 0x6e, 0x4b, 0xe5, 0xcf, + 0x46, 0x2d, 0xaf, 0xfc, 0x84, 0xd2, 0xf6, 0xd5, + 0xff, 0x55, 0xdc, 0x9b, 0xbe, 0x8b, 0xb0, 0xd7, + 0x25, 0xec, 0x64, 0xfd, 0x4c, 0xd4, 0xbd, 0x8d, + 0xba, 0x0a, 0x84, 0x4e, 0x8b, 0x5c, 0xe4, 0xb6, + 0xa2, 0x89, 0x34, 0xd7, 0xf7, 0xa0, 0x50, 0x99, + 0x1f, 0xe1, 0x85, 0xb5, 0x06, 0xb4, 0x51, 0xda, + 0xbf, 0xad, 0x52, 0xd5, 0x2c, 0xb2, 0x11, 0x4c, + 0xa7, 0xd9, 0xa5, 0xcf, 0x98, 0x6c, 0x8f, 0xdc, + 0x1b, 0xc1, 0x0e, 0xc0, 0xc1, 0x86, 0x9e, 0x50, + 0xc0, 0x3c, 0x55, 0xa7, 0x61, 0x92, 0xa1, 0x04, + 0x9a, 0xca, 0x63, 0x6b, 0xa9, 0x02, 0x0b, 0xda, + 0xa8, 0xd0, 0xf5, 0x8c, 0x76, 0x3b, 0x0b, 0x89, + 0x84, 0x5c, 0xa0, 0x6d, 0x4c, 0x4d, 0xdc, 0x21, + 0x43, 0x3e, 0x16, 0xb9, 0xc6, 0x2e, 0x44, 0x87, + 0x1f, 0xdb, 0xc0, 0x5b, 0xa2, 0x18, 0xaf, 0x87, + 0x1f, 0xdd, 0x7d, 0xcf, 0xa4, 0x64, 0xe6, 0x0f, + 0xaa, 0x52, 0x65, 0x26, 0x4c, 0xe1, 0x39, 0x1b, + 0xd9, 0xa8, 0xc5, 0xfa, 0xa7, 0x62, 0x6d, 0x5f, + 0x15, 0x9b, 0x98, 0x05, 0xb9, 0x75, 0x71, 0x0a, + 0x35, 0x03, 0xa0, 0xb8, 0x58, 0xa1, 0x1c, 0x6a, + 0x64, 0x7c, 0xc0, 0xe1, 0x9a, 0xc8, 0x8b, 0x1b, + 0xe9, 0x05, 0x6c, 0x95, 0xb4, 0xd2, 0x08, 0x7d, + 0x09, 0x51, 0xd1, 0xd2, 0xf4, 0x99, 0x24, 0x91, + 0x11, 0x7e, 0x63, 0x47, 0x79, 0x4b, 0xa5, 0x45, + 0x71, 0xec, 0x49, 0xbb, 0xa7, 0x1a, 0xf3, 0x41, + 0x3d, 0x38, 0xa3, 0x0b, 0xf5, 0x87, 0x22, 0x48, + 0xd1, 0xf6, 0xd0, 0x7c, 0x86, 0xba, 0xf7, 0x82, + 0xe7, 0x3d, 0x26, 0x37, 0xf0, 0x43, 0xd3, 0x41, + 0xa0, 0x09, 0x21, 0x85, 0x7d, 0x8b, 0x21, 0xdd, + 0xf3, 0xe1, 0xd6, 0x31, 0x00, 0x36, 0xed, 0x27, + 0xaf, 0x49, 0xe5, 0xde, 0x1b, 0x90, 0x0f, 0xe4, + 0xde, 0x79, 0x80, 0x8f, 0xf2, 0x9f, 0x95, 0x70, + 0x85, 0x96, 0x12, 0xb1, 0x5a, 0xdc, 0x01, 0xfb, + 0xb2, 0x65, 0xb3, 0x05, 0xb1, 0xe3, 0xa1, 0x2a, + 0xe4, 0x19, 0xda, 0x5b, 0x74, 0x26, 0x1f, 0xa2, + 0x84, 0xc1, 0x01, 0xda, 0x3d, 0x8d, 0xca, 0x8b, + 0x2e, 0x45, 0x21, 0xac, 0xa5, 0x71, 0xef, 0x44, + 0xa0, 0x58, 0xe8, 0x44, 0xff, 0x32, 0xb1, 0x6d, + 0x5a, 0xae, 0xa0, 0x5f, 0x7f, 0x3a, 0xf8, 0xe2, + 0xab, 0x16, 0x22, 0x2e, 0x34, 0x76, 0x62, 0xed, + 0xdf, 0xb8, 0x91, 0xd0, 0xec, 0xc2, 0xa5, 0x5c, + 0x56, 0x38, 0xf9, 0xdd, 0xe9, 0x2d, 0x9a, 0x3d, + 0x54, 0x4a, 0x5f, 0x90, 0x1a, 0xc5, 0x01, 0xac, + 0xd1, 0xea, 0x6a, 0x01, 0x02, 0x01, 0xfc, 0xb1, + 0x0a, 0xd7, 0x02, 0xc4, 0x25, 0xa9, 0x4b, 0xdf, + 0x58, 0x90, 0xd5, 0x00, 0xa2, 0xa1, 0x47, 0xee, + 0xe1, 0xd1, 0xfc, 0xba, 0x8c, 0x3a, 0xbe, 0x7c, + 0x2d, 0xfe, 0x70, 0xf3, 0x46, 0xf0, 0x33, 0xd8, + 0x16, 0xa0, 0xb2, 0x79, 0x1b, 0x4f, 0x0b, 0x2d, + 0x95, 0x6d, 0x9e, 0xe5, 0x97, 0x17, 0x15, 0x39, + 0x9a, 0x56, 0x88, 0x30, 0x24, 0x95, 0xe2, 0xe0, + 0x7c, 0x1c, 0x8c, 0x01, 0x52, 0x71, 0x84, 0xbc, + 0xd0, 0xc2, 0x08, 0xbc, 0x15, 0x9f, 0x2e, 0x13, + 0x31, 0x8c, 0x0b, 0xb3, 0xdd, 0x24, 0xa6, 0xa7, + 0xfc, 0x84, 0x9f, 0x83, 0x38, 0x5e, 0xd4, 0xdb, + 0xa0, 0x7f, 0xe1, 0xd7, 0xbd, 0x56, 0x40, 0xcc, + 0x9e, 0xd5, 0xcc, 0xfd, 0xd6, 0x87, 0x63, 0xcb, + 0x0d, 0x0e, 0xdf, 0x61, 0xb2, 0x92, 0x17, 0x7f, + 0xc1, 0xd2, 0xd3, 0xc1, 0x1d, 0xd0, 0x49, 0x50, + 0x56, 0xbc, 0xb1, 0x25, 0x58, 0xae, 0xbc, 0xfd, + 0xde, 0xf9, 0xfe, 0xb4, 0xae, 0xbc, 0x57, 0xaf, + 0xd9, 0x02, 0x3c, 0x65, 0xcf, 0xe6, 0x5a, 0x24, + 0xe3, 0x3f, 0x1b, 0x00, 0x11, 0x1e, 0x92, 0xe6, + 0x3e, 0x01, 0x1e, 0xaf, 0x0b, 0x21, 0x2c, 0xf9, + 0x57, 0x43, 0xcd, 0x07, 0xf5, 0x18, 0x9e, 0xce, + 0x1f, 0x20, 0x5b, 0x7f, 0x6f, 0xcb, 0x2e, 0x6b, + 0x19, 0x61, 0xb5, 0x40, 0x4c, 0xeb, 0xe4, 0x7c, + 0x8c, 0xd1, 0x3b, 0x85, 0x99, 0xd5, 0xb4, 0x9e, + 0x6d, 0x87, 0xee, 0xda, 0x36, 0xe9, 0xb8, 0xfc, + 0x4c, 0x00, 0x63, 0x58, 0x96, 0xaa, 0x2b, 0x75, + 0x89, 0x6e, 0x33, 0x6d, 0x1b, 0x61, 0x2e, 0xe1, + 0x3d, 0xb8, 0x11, 0xe1, 0xf0, 0x7e, 0x61, 0x74, + 0x8d, 0x92, 0x0f, 0x48, 0x65, 0xf3, 0xf1, 0x17, + 0x41, 0x39, 0x9d, 0xc6, 0x16, 0x2c, 0x91, 0xca, + 0x16, 0x8a, 0x02, 0x32, 0x9d, 0xff, 0x82, 0x1d, + 0x58, 0x19, 0x87, 0x12, 0xdd, 0x55, 0x8a, 0xbb, + 0x09, 0x9b, 0x3a, 0x0b, 0xaf, 0x9d, 0xa1, 0xb7, + 0x30, 0xb2, 0xaa, 0x73, 0xbc, 0xf5, 0x8d, 0x74, + 0xf3, 0x57, 0xb0, 0x6f, 0x72, 0x11, 0xc8, 0x04, + 0xb6, 0xc8, 0xaf, 0x16, 0xff, 0x35, 0x09, 0xfa, + 0xd1, 0xd3, 0x5b, 0x14, 0xbf, 0xdc, 0xed, 0x7d, + 0xb8, 0xa6, 0xa2, 0x5c, 0x48, 0xe5, 0x95, 0x64, + 0x80, 0x72, 0x4d, 0xaa, 0x05, 0x7c, 0xd6, 0x60, + 0xb6, 0x7e, 0xe3, 0xe4, 0x72, 0x57, 0x41, 0x82, + 0x67, 0x9d, 0x48, 0x58, 0x38, 0xa6, 0x47, 0x6e, + 0xac, 0x02, 0x14, 0x10, 0x75, 0xc8, 0x12, 0xaf, + 0x79, 0x67, 0xba, 0x7c, 0x91, 0x85, 0xcc, 0x2a, + 0xbd, 0x2a, 0x45, 0x45, 0xb8, 0x0f, 0x3d, 0x31, + 0x04, 0xd5, 0x8d, 0x65, 0x4a, 0x57, 0x79, 0x2d, + 0xcf, 0xab, 0xbe, 0x9c, 0x07, 0x15, 0xe8, 0xde, + 0x2e, 0xf8, 0x1e, 0xf4, 0x04, 0xc8, 0x16, 0x8f, + 0xd7, 0xa4, 0x3e, 0xfa, 0xb3, 0xd4, 0x48, 0xe6, + 0x86, 0xa0, 0x88, 0xef, 0xd2, 0x6a, 0x26, 0x15, + 0x99, 0x48, 0x92, 0x67, 0x23, 0xd7, 0xec, 0xcc, + 0x39, 0xe3, 0xc1, 0xb7, 0x19, 0xcf, 0x8b, 0xec, + 0xb7, 0xbe, 0x7e, 0x96, 0x4f, 0x22, 0xcd, 0x8c, + 0xb1, 0xb7, 0xe2, 0x5e, 0x80, 0x0e, 0xa9, 0x7d, + 0x60, 0xa6, 0x4c, 0xc0, 0xbb, 0xd9, 0xcb, 0x40, + 0x7a, 0x3a, 0xb9, 0xf8, 0x8f, 0x5e, 0x29, 0x16, + 0x9e, 0xea, 0xfd, 0x4e, 0x03, 0x22, 0xfd, 0xe6, + 0x59, 0x0a, 0xe0, 0x93, 0xce, 0x8f, 0xee, 0xae, + 0x98, 0xb6, 0x22, 0xca, 0xa7, 0x55, 0x6f, 0xf4, + 0x26, 0xc9, 0xe7, 0xa4, 0x04, 0xce, 0x69, 0x35, + 0x58, 0x30, 0xa7, 0xa6, 0x77, 0x67, 0xa7, 0x6c, + 0x7d, 0x9a, 0x97, 0xb8, 0x4b, 0xfc, 0xf5, 0x0a, + 0x02, 0xf7, 0x5c, 0x23, 0x5d, 0x2f, 0x9c, 0x67, + 0x11, 0x38, 0x04, 0x9f, 0xfc, 0x7c, 0x80, 0x55, + 0x92, 0x6c, 0x03, 0xeb, 0x3f, 0xb8, 0x7f, 0x96, + 0x95, 0x18, 0x5a, 0x42, 0xec, 0xa9, 0xa4, 0x16, + 0x55, 0x87, 0x3d, 0x30, 0xa6, 0xb3, 0xbf, 0x42, + 0x8b, 0x24, 0x62, 0x23, 0x48, 0x4a, 0x8f, 0xf6, + 0x1e, 0xe3, 0xee, 0xaf, 0xff, 0x10, 0xe9, 0x9c, + 0x2c, 0x13, 0xa7, 0x62, 0x84, 0xd0, 0x63, 0xe5, + 0x6a, 0xb7, 0x11, 0xa3, 0x5a, 0x85, 0xb5, 0x38, + 0x3d, 0xf8, 0x1d, 0xa2, 0x34, 0x90, 0xf6, 0x6e, + 0x8e, 0xa3, 0xfc, 0xba, 0x06, 0x7f, 0x55, 0x30, + 0xc6, 0x54, 0x1c, 0x2b, 0x8f, 0x74, 0x71, 0x7c, + 0x35, 0x02, 0x3e, 0x7b, 0x9b, 0x39, 0x56, 0xc3, + 0xee, 0x2f, 0xf8, 0x4b, 0xa0, 0x3c, 0xcf, 0x4b, + 0x4b, 0x53, 0x21, 0xb9, 0x24, 0x08, 0x95, 0x48, + 0x1b, 0xc6, 0xd6, 0x3c, 0x16, 0x93, 0xc1, 0x84, + 0x78, 0x52, 0xf8, 0xe9, 0x7f, 0x50, 0xa1, 0x33, + 0x53, 0x2a, 0xc3, 0xee, 0x1e, 0x52, 0xd4, 0x64 #endif }; WOLFSSL_SMALL_STACK_STATIC const byte kyber768_ss[] = { -#ifndef WOLFSSL_ML_KEM +#ifdef WOLFSSL_KYBER_ORIGINAL 0x91, 0x4C, 0xB6, 0x7F, 0xE5, 0xC3, 0x8E, 0x73, 0xBF, 0x74, 0x18, 0x1C, 0x0A, 0xC5, 0x04, 0x28, 0xDE, 0xDF, 0x77, 0x50, 0xA9, 0x80, 0x58, 0xF7, 0xD5, 0x36, 0x70, 0x87, 0x74, 0x53, 0x5B, 0x29 #else - 0x72, 0x9f, 0xa0, 0x6a, 0xc9, 0x3c, 0x5e, 0xfd, - 0xfb, 0xf1, 0x27, 0x2a, 0x96, 0xce, 0xf1, 0x67, - 0xa3, 0x93, 0x94, 0x7a, 0xb7, 0xdc, 0x2d, 0x11, - 0xed, 0x7d, 0xe8, 0xac, 0x3c, 0x94, 0x7f, 0xa8 + 0xe7, 0x18, 0x4a, 0x09, 0x75, 0xee, 0x34, 0x70, + 0x87, 0x8d, 0x2d, 0x15, 0x9e, 0xc8, 0x31, 0x29, + 0xc8, 0xae, 0xc2, 0x53, 0xd4, 0xee, 0x17, 0xb4, + 0x81, 0x03, 0x11, 0xd1, 0x98, 0xcd, 0x03, 0x68 #endif }; @@ -39364,6 +40053,7 @@ static wc_test_ret_t kyber1024_kat(void) 0xcc, 0x09, 0xfe, 0x76, 0xf6, 0x99, 0x76, 0x15 }; WOLFSSL_SMALL_STACK_STATIC const byte kyber1024_pk[] = { +#ifdef WOLFSSL_KYBER_ORIGINAL 0xD2, 0x23, 0x02, 0xCB, 0xD3, 0x39, 0x9F, 0xAC, 0xC6, 0x30, 0x99, 0x1F, 0xC8, 0xF2, 0x8B, 0xDB, 0x43, 0x54, 0x76, 0x25, 0x41, 0x52, 0x76, 0x78, @@ -39560,8 +40250,207 @@ static wc_test_ret_t kyber1024_kat(void) 0x5F, 0x8F, 0x3F, 0x90, 0x03, 0x48, 0x94, 0x15, 0x89, 0x9D, 0x59, 0xA5, 0x43, 0xD8, 0x20, 0x8C, 0x54, 0xA3, 0x16, 0x65, 0x29, 0xB5, 0x39, 0x22 +#else + 0x53, 0x79, 0x11, 0x95, 0x7c, 0x12, 0x51, 0x48, + 0xa8, 0x7f, 0x41, 0x58, 0x9c, 0xb2, 0x22, 0xd0, + 0xd1, 0x92, 0x29, 0xe2, 0xcb, 0x55, 0xe1, 0xa0, + 0x44, 0x79, 0x1e, 0x7c, 0xa6, 0x11, 0x92, 0xa4, + 0x64, 0x60, 0xc3, 0x18, 0x3d, 0x2b, 0xcd, 0x6d, + 0xe0, 0x8a, 0x5e, 0x76, 0x51, 0x60, 0x3a, 0xcc, + 0x34, 0x9c, 0xa1, 0x6c, 0xba, 0x18, 0xab, 0xb2, + 0x3a, 0x3e, 0x8c, 0x33, 0x0d, 0x74, 0x21, 0x59, + 0x8a, 0x62, 0x78, 0xec, 0x7e, 0xbf, 0xab, 0xca, + 0x0e, 0xf4, 0x88, 0xb2, 0x29, 0x05, 0x54, 0x75, + 0x34, 0x99, 0xc0, 0x45, 0x2e, 0x45, 0x38, 0x15, + 0x30, 0x99, 0x55, 0xb8, 0x15, 0x0f, 0xa1, 0xa1, + 0xe3, 0x93, 0x38, 0x6d, 0xc1, 0x2f, 0xdb, 0x27, + 0xb3, 0x8c, 0x67, 0x45, 0xf2, 0x94, 0x40, 0x16, + 0xec, 0x45, 0x7f, 0x39, 0xb1, 0x8d, 0x60, 0x4a, + 0x07, 0xa1, 0xab, 0xe0, 0x7b, 0xc8, 0x44, 0x05, + 0x0f, 0xfa, 0x8a, 0x06, 0xfa, 0x15, 0x4a, 0x49, + 0xd8, 0x8f, 0xac, 0x77, 0x54, 0x52, 0xd6, 0xa7, + 0xc0, 0xe5, 0x89, 0xbf, 0xb5, 0xc3, 0x70, 0xc2, + 0xc4, 0xb6, 0x20, 0x1d, 0xda, 0x80, 0xc9, 0xab, + 0x20, 0x76, 0xec, 0xc0, 0x8b, 0x44, 0x52, 0x2f, + 0xda, 0x33, 0x26, 0xf0, 0x33, 0x80, 0x6d, 0xd2, + 0x69, 0x3f, 0x31, 0x97, 0x39, 0xf4, 0x0c, 0x4f, + 0x42, 0xb2, 0x4a, 0xca, 0x70, 0x98, 0xfb, 0x8f, + 0xf5, 0xf9, 0xac, 0x20, 0x29, 0x2d, 0x02, 0xb5, + 0x6a, 0xc7, 0x46, 0x80, 0x1a, 0xcc, 0xcc, 0x84, + 0x86, 0x3d, 0xee, 0x32, 0x87, 0x84, 0x97, 0xb6, + 0x94, 0x38, 0xbf, 0x99, 0x17, 0x76, 0x28, 0x66, + 0x50, 0x48, 0x2c, 0x8d, 0x9d, 0x95, 0x87, 0xbc, + 0x6a, 0x55, 0xb8, 0x5c, 0x4d, 0x7f, 0xa7, 0x4d, + 0x02, 0x65, 0x6b, 0x42, 0x1c, 0x9e, 0x23, 0xe0, + 0x3a, 0x48, 0xd4, 0xb7, 0x44, 0x25, 0xc2, 0x6e, + 0x4a, 0x20, 0xdd, 0x95, 0x62, 0xa4, 0xda, 0x07, + 0x93, 0xf3, 0xa3, 0x52, 0xcc, 0xc0, 0xf1, 0x82, + 0x17, 0xd8, 0x68, 0xc7, 0xf5, 0x00, 0x2a, 0xbe, + 0x76, 0x8b, 0x1f, 0xc7, 0x3f, 0x05, 0x74, 0x4e, + 0x7c, 0xc2, 0x8f, 0x10, 0x34, 0x40, 0x62, 0xc1, + 0x0e, 0x08, 0xec, 0xcc, 0xed, 0x3c, 0x1f, 0x7d, + 0x39, 0x2c, 0x01, 0xd9, 0x79, 0xdd, 0x71, 0x8d, + 0x83, 0x98, 0x37, 0x46, 0x65, 0xa1, 0x6a, 0x98, + 0x70, 0x58, 0x5c, 0x39, 0xd5, 0x58, 0x9a, 0x50, + 0xe1, 0x33, 0x38, 0x9c, 0x9b, 0x9a, 0x27, 0x6c, + 0x02, 0x42, 0x60, 0xd9, 0xfc, 0x77, 0x11, 0xc8, + 0x1b, 0x63, 0x37, 0xb5, 0x7d, 0xa3, 0xc3, 0x76, + 0xd0, 0xcd, 0x74, 0xe1, 0x4c, 0x73, 0x72, 0x7b, + 0x27, 0x66, 0x56, 0xb9, 0xd8, 0xa4, 0xeb, 0x71, + 0x89, 0x6f, 0xf5, 0x89, 0xd4, 0xb8, 0x93, 0xe7, + 0x11, 0x0f, 0x3b, 0xb9, 0x48, 0xec, 0xe2, 0x91, + 0xdd, 0x86, 0xc0, 0xb7, 0x46, 0x8a, 0x67, 0x8c, + 0x74, 0x69, 0x80, 0xc1, 0x2a, 0xa6, 0xb9, 0x5e, + 0x2b, 0x0c, 0xbe, 0x43, 0x31, 0xbb, 0x24, 0xa3, + 0x3a, 0x27, 0x01, 0x53, 0xaa, 0x47, 0x2c, 0x47, + 0x31, 0x23, 0x82, 0xca, 0x36, 0x5c, 0x5f, 0x35, + 0x25, 0x9d, 0x02, 0x57, 0x46, 0xfc, 0x65, 0x95, + 0xfe, 0x63, 0x6c, 0x76, 0x75, 0x10, 0xa6, 0x9c, + 0x1e, 0x8a, 0x17, 0x6b, 0x79, 0x49, 0x95, 0x8f, + 0x26, 0x97, 0x39, 0x94, 0x97, 0xa2, 0xfc, 0x73, + 0x64, 0xa1, 0x2c, 0x81, 0x98, 0x29, 0x52, 0x39, + 0xc8, 0x26, 0xcb, 0x50, 0x82, 0x08, 0x60, 0x77, + 0x28, 0x2e, 0xd6, 0x28, 0x65, 0x1f, 0xc0, 0x4c, + 0x63, 0x9b, 0x43, 0x85, 0x22, 0xa9, 0xde, 0x30, + 0x9b, 0x14, 0xb0, 0x86, 0xd6, 0xe9, 0x23, 0xc5, + 0x51, 0x62, 0x3b, 0xd7, 0x2a, 0x73, 0x3c, 0xb0, + 0xda, 0xbc, 0x54, 0xa9, 0x41, 0x6a, 0x99, 0xe7, + 0x2c, 0x9f, 0xda, 0x1c, 0xb3, 0xfb, 0x9b, 0xa0, + 0x6b, 0x8a, 0xdb, 0x24, 0x22, 0xd6, 0x8c, 0xad, + 0xc5, 0x53, 0xc9, 0x82, 0x02, 0xa1, 0x76, 0x56, + 0x47, 0x8a, 0xc0, 0x44, 0xef, 0x34, 0x56, 0x37, + 0x8a, 0xbc, 0xe9, 0x99, 0x1e, 0x01, 0x41, 0xba, + 0x79, 0x09, 0x4f, 0xa8, 0xf7, 0x7a, 0x30, 0x08, + 0x05, 0xd2, 0xd3, 0x2f, 0xfc, 0x62, 0xbf, 0x0c, + 0xa4, 0x55, 0x4c, 0x33, 0x0c, 0x2b, 0xb7, 0x04, + 0x2d, 0xb3, 0x51, 0x02, 0xf6, 0x8b, 0x1a, 0x00, + 0x62, 0x58, 0x38, 0x65, 0x38, 0x1c, 0x74, 0xdd, + 0x91, 0x3a, 0xf7, 0x0b, 0x26, 0xcf, 0x09, 0x23, + 0xd0, 0xc4, 0xcb, 0x97, 0x16, 0x92, 0x22, 0x25, + 0x52, 0xa8, 0xf4, 0xb7, 0x88, 0xb4, 0xaf, 0xd1, + 0x34, 0x1a, 0x9d, 0xf4, 0x15, 0xcf, 0x20, 0x39, + 0x00, 0xf5, 0xcc, 0xf7, 0xf6, 0x59, 0x88, 0x94, + 0x9a, 0x75, 0x58, 0x0d, 0x04, 0x96, 0x39, 0x85, + 0x31, 0x00, 0x85, 0x4b, 0x21, 0xf4, 0x01, 0x80, + 0x03, 0x50, 0x2b, 0xb1, 0xba, 0x95, 0xf5, 0x56, + 0xa5, 0xd6, 0x7c, 0x7e, 0xb5, 0x24, 0x10, 0xeb, + 0xa2, 0x88, 0xa6, 0xd0, 0x63, 0x5c, 0xa8, 0xa4, + 0xf6, 0xd6, 0x96, 0xd0, 0xa0, 0x20, 0xc8, 0x26, + 0x93, 0x8d, 0x34, 0x94, 0x3c, 0x38, 0x08, 0xc7, + 0x9c, 0xc0, 0x07, 0x76, 0x85, 0x33, 0x21, 0x6b, + 0xc1, 0xb2, 0x9d, 0xa6, 0xc8, 0x12, 0xef, 0xf3, + 0x34, 0x0b, 0xaa, 0x8d, 0x2e, 0x65, 0x34, 0x4f, + 0x09, 0xbd, 0x47, 0x89, 0x4f, 0x5a, 0x3a, 0x41, + 0x18, 0x71, 0x5b, 0x3c, 0x50, 0x20, 0x67, 0x93, + 0x27, 0xf9, 0x18, 0x9f, 0x7e, 0x10, 0x85, 0x6b, + 0x23, 0x8b, 0xb9, 0xb0, 0xab, 0x4c, 0xa8, 0x5a, + 0xbf, 0x4b, 0x21, 0xf5, 0xc7, 0x6b, 0xcc, 0xd7, + 0x18, 0x50, 0xb2, 0x2e, 0x04, 0x59, 0x28, 0x27, + 0x6a, 0x0f, 0x2e, 0x95, 0x1d, 0xb0, 0x70, 0x7c, + 0x6a, 0x11, 0x6d, 0xc1, 0x91, 0x13, 0xfa, 0x76, + 0x2d, 0xc5, 0xf2, 0x0b, 0xd5, 0xd2, 0xab, 0x5b, + 0xe7, 0x17, 0x44, 0xdc, 0x9c, 0xbd, 0xb5, 0x1e, + 0xa7, 0x57, 0x96, 0x3a, 0xac, 0x56, 0xa9, 0x0a, + 0x0d, 0x80, 0x23, 0xbe, 0xd1, 0xf5, 0xca, 0xe8, + 0xa6, 0x4d, 0xa0, 0x47, 0x27, 0x9b, 0x35, 0x3a, + 0x09, 0x6a, 0x83, 0x5b, 0x0b, 0x2b, 0x02, 0x3b, + 0x6a, 0xa0, 0x48, 0x98, 0x92, 0x33, 0x07, 0x9a, + 0xeb, 0x46, 0x7e, 0x52, 0x2f, 0xa2, 0x7a, 0x58, + 0x22, 0x92, 0x1e, 0x5c, 0x55, 0x1b, 0x4f, 0x53, + 0x75, 0x36, 0xe4, 0x6f, 0x3a, 0x6a, 0x97, 0xe7, + 0x2c, 0x3b, 0x06, 0x31, 0x04, 0xe0, 0x9a, 0x04, + 0x05, 0x98, 0x94, 0x0d, 0x87, 0x2f, 0x6d, 0x87, + 0x1f, 0x5e, 0xf9, 0xb4, 0x35, 0x50, 0x73, 0xb5, + 0x47, 0x69, 0xe4, 0x54, 0x54, 0xe6, 0xa0, 0x81, + 0x95, 0x99, 0x40, 0x86, 0x21, 0xab, 0x44, 0x13, + 0xb3, 0x55, 0x07, 0xb0, 0xdf, 0x57, 0x8c, 0xe2, + 0xd5, 0x11, 0xd5, 0x20, 0x58, 0xd5, 0x74, 0x9d, + 0xf3, 0x8b, 0x29, 0xd6, 0xcc, 0x58, 0x87, 0x0c, + 0xaf, 0x92, 0xf6, 0x9a, 0x75, 0x16, 0x14, 0x06, + 0xe7, 0x1c, 0x5f, 0xf9, 0x24, 0x51, 0xa7, 0x75, + 0x22, 0xb8, 0xb2, 0x96, 0x7a, 0x2d, 0x58, 0xa4, + 0x9a, 0x81, 0x66, 0x1a, 0xa6, 0x5a, 0xc0, 0x9b, + 0x08, 0xc9, 0xfe, 0x45, 0xab, 0xc3, 0x85, 0x1f, + 0x99, 0xc7, 0x30, 0xc4, 0x50, 0x03, 0xac, 0xa2, + 0xbf, 0x0f, 0x84, 0x24, 0xa1, 0x9b, 0x74, 0x08, + 0xa5, 0x37, 0xd5, 0x41, 0xc1, 0x6f, 0x56, 0x82, + 0xbf, 0xe3, 0xa7, 0xfa, 0xea, 0x56, 0x4f, 0x12, + 0x98, 0x61, 0x1a, 0x7f, 0x5f, 0x60, 0x92, 0x2b, + 0xa1, 0x9d, 0xe7, 0x3b, 0x19, 0x17, 0xf1, 0x85, + 0x32, 0x73, 0x55, 0x51, 0x99, 0xa6, 0x49, 0x31, + 0x8b, 0x50, 0x77, 0x33, 0x45, 0xc9, 0x97, 0x46, + 0x08, 0x56, 0x97, 0x2a, 0xcb, 0x43, 0xfc, 0x81, + 0xab, 0x63, 0x21, 0xb1, 0xc3, 0x3c, 0x2b, 0xb5, + 0x09, 0x8b, 0xd4, 0x89, 0xd6, 0x96, 0xa0, 0xf7, + 0x06, 0x79, 0xc1, 0x21, 0x38, 0x73, 0xd0, 0x8b, + 0xda, 0xd4, 0x28, 0x44, 0x92, 0x72, 0x16, 0x04, + 0x72, 0x05, 0x63, 0x32, 0x12, 0x31, 0x0e, 0xe9, + 0xa0, 0x6c, 0xb1, 0x00, 0x16, 0xc8, 0x05, 0x50, + 0x3c, 0x34, 0x1a, 0x36, 0xd8, 0x7e, 0x56, 0x07, + 0x2e, 0xab, 0xe2, 0x37, 0x31, 0xe3, 0x4a, 0xf7, + 0xe2, 0x32, 0x8f, 0x85, 0xcd, 0xb3, 0x70, 0xcc, + 0xaf, 0x00, 0x51, 0x5b, 0x64, 0xc9, 0xc5, 0x4b, + 0xc8, 0x37, 0x57, 0x84, 0x47, 0xaa, 0xcf, 0xae, + 0xd5, 0x96, 0x9a, 0xa3, 0x51, 0xe7, 0xda, 0x4e, + 0xfa, 0x7b, 0x11, 0x5c, 0x4c, 0x51, 0xf4, 0xa6, + 0x99, 0x77, 0x98, 0x50, 0x29, 0x5c, 0xa7, 0x2d, + 0x78, 0x1a, 0xd4, 0x1b, 0xc6, 0x80, 0x53, 0x2b, + 0x89, 0xe7, 0x10, 0xe2, 0x18, 0x9e, 0xb3, 0xc5, + 0x08, 0x17, 0xba, 0x25, 0x5c, 0x74, 0x74, 0xc9, + 0x5c, 0xa9, 0x11, 0x0c, 0xc4, 0x3b, 0x8b, 0xa8, + 0xe6, 0x82, 0xc7, 0xfb, 0x7b, 0x0f, 0xdc, 0x26, + 0x5c, 0x04, 0x83, 0xa6, 0x5c, 0xa4, 0x51, 0x4e, + 0xe4, 0xb8, 0x32, 0xaa, 0xc5, 0x80, 0x0c, 0x3b, + 0x08, 0xe7, 0x4f, 0x56, 0x39, 0x51, 0xc1, 0xfb, + 0xb2, 0x10, 0x35, 0x3e, 0xfa, 0x1a, 0xa8, 0x66, + 0x85, 0x6b, 0xc1, 0xe0, 0x34, 0x73, 0x3b, 0x04, + 0x85, 0xda, 0xb1, 0xd0, 0x20, 0xc6, 0xbf, 0x76, + 0x5f, 0xf6, 0x0b, 0x3b, 0x80, 0x19, 0x84, 0xa9, + 0x0c, 0x2f, 0xe9, 0x70, 0xbf, 0x1d, 0xe9, 0x70, + 0x04, 0xa6, 0xcf, 0x44, 0xb4, 0x98, 0x4a, 0xb5, + 0x82, 0x58, 0xb4, 0xaf, 0x71, 0x22, 0x1c, 0xd1, + 0x75, 0x30, 0xa7, 0x00, 0xc3, 0x29, 0x59, 0xc9, + 0x43, 0x63, 0x44, 0xb5, 0x31, 0x6f, 0x09, 0xcc, + 0xca, 0x70, 0x29, 0xa2, 0x30, 0xd6, 0x39, 0xdc, + 0xb0, 0x22, 0xd8, 0xba, 0x79, 0xba, 0x91, 0xcd, + 0x6a, 0xb1, 0x2a, 0xe1, 0x57, 0x9c, 0x50, 0xc7, + 0xbb, 0x10, 0xe3, 0x03, 0x01, 0xa6, 0x5c, 0xae, + 0x31, 0x01, 0xd4, 0x0c, 0x7b, 0xa9, 0x27, 0xbb, + 0x55, 0x31, 0x48, 0xd1, 0x64, 0x70, 0x24, 0xd4, + 0xa0, 0x6c, 0x81, 0x66, 0xd0, 0xb0, 0xb8, 0x12, + 0x69, 0xb7, 0xd5, 0xf4, 0xb3, 0x4f, 0xb0, 0x22, + 0xf6, 0x91, 0x52, 0xf5, 0x14, 0x00, 0x4a, 0x7c, + 0x68, 0x53, 0x68, 0x55, 0x23, 0x43, 0xbb, 0x60, + 0x36, 0x0f, 0xbb, 0x99, 0x45, 0xed, 0xf4, 0x46, + 0xd3, 0x45, 0xbd, 0xca, 0xa7, 0x45, 0x5c, 0x74, + 0xba, 0x0a, 0x55, 0x1e, 0x18, 0x46, 0x20, 0xfe, + 0xf9, 0x76, 0x88, 0x77, 0x3d, 0x50, 0xb6, 0x43, + 0x3c, 0xa7, 0xa7, 0xac, 0x5c, 0xb6, 0xb7, 0xf6, + 0x71, 0xa1, 0x53, 0x76, 0xe5, 0xa6, 0x74, 0x7a, + 0x62, 0x3f, 0xa7, 0xbc, 0x66, 0x30, 0x37, 0x3f, + 0x5b, 0x1b, 0x51, 0x26, 0x90, 0xa6, 0x61, 0x37, + 0x78, 0x70, 0xa6, 0x0a, 0x7a, 0x18, 0x96, 0x83, + 0xf9, 0xb0, 0xcf, 0x04, 0x66, 0xe1, 0xf7, 0x50, + 0x76, 0x26, 0x31, 0xc4, 0xab, 0x09, 0xf5, 0x05, + 0xc4, 0x2d, 0xd2, 0x86, 0x33, 0x56, 0x94, 0x72, + 0x73, 0x54, 0x42, 0x85, 0x1e, 0x32, 0x16, 0x16, + 0xd4, 0x00, 0x98, 0x10, 0x77, 0x7b, 0x6b, 0xd4, + 0x6f, 0xa7, 0x22, 0x44, 0x61, 0xa5, 0xcc, 0x27, + 0x40, 0x5d, 0xfb, 0xac, 0x0d, 0x39, 0xb0, 0x02, + 0xca, 0xb3, 0x34, 0x33, 0xf2, 0xa8, 0x6e, 0xb8, + 0xce, 0x91, 0xc1, 0x34, 0xa6, 0x38, 0x6f, 0x86, + 0x0a, 0x19, 0x94, 0xeb, 0x4b, 0x68, 0x75, 0xa4, + 0x6d, 0x19, 0x55, 0x81, 0xd1, 0x73, 0x85, 0x4b, + 0x53, 0xd2, 0x29, 0x3d, 0xf3, 0xe9, 0xa8, 0x22, + 0x75, 0x6c, 0xd8, 0xf2, 0x12, 0xb3, 0x25, 0xca, + 0x29, 0xb4, 0xf9, 0xf8, 0xcf, 0xba, 0xdf, 0x2e, + 0x41, 0x86, 0x9a, 0xbf, 0xba, 0xd1, 0x07, 0x38, + 0xad, 0x04, 0xcc, 0x75, 0x2b, 0xc2, 0x0c, 0x39, + 0x47, 0x46, 0x85, 0x0e, 0x0c, 0x48, 0x47, 0xdb +#endif }; WOLFSSL_SMALL_STACK_STATIC const byte kyber1024_sk[] = { +#ifdef WOLFSSL_KYBER_ORIGINAL 0x07, 0x63, 0x8F, 0xB6, 0x98, 0x68, 0xF3, 0xD3, 0x20, 0xE5, 0x86, 0x2B, 0xD9, 0x69, 0x33, 0xFE, 0xB3, 0x11, 0xB3, 0x62, 0x09, 0x3C, 0x9B, 0x5D, @@ -39958,9 +40847,407 @@ static wc_test_ret_t kyber1024_kat(void) 0x00, 0xE0, 0x3B, 0x59, 0xB9, 0x56, 0xF8, 0x21, 0x0E, 0x55, 0x60, 0x67, 0x40, 0x7D, 0x13, 0xDC, 0x90, 0xFA, 0x9E, 0x8B, 0x87, 0x2B, 0xFB, 0x8F +#else + 0x43, 0x3a, 0x70, 0xee, 0x69, 0x50, 0xf9, 0x88, + 0x2a, 0xcd, 0xd5, 0xa4, 0x78, 0x20, 0xa6, 0xa8, + 0x16, 0x37, 0x08, 0xf0, 0x4d, 0x45, 0x7c, 0x77, + 0x99, 0x79, 0xb8, 0x3f, 0xe1, 0x17, 0x22, 0x47, + 0x01, 0x49, 0x08, 0x30, 0x38, 0x66, 0x37, 0xda, + 0x33, 0x2e, 0x74, 0xb1, 0xae, 0xda, 0x0b, 0x2f, + 0x81, 0xca, 0x4f, 0x9b, 0xb2, 0xc2, 0xb0, 0x2b, + 0x0c, 0xfd, 0x68, 0x0c, 0x11, 0x48, 0x2f, 0x33, + 0x5a, 0xcf, 0x7b, 0x91, 0x39, 0xb5, 0xb8, 0x8a, + 0x34, 0xe3, 0x54, 0x2c, 0x68, 0x61, 0x37, 0x75, + 0x45, 0x98, 0x33, 0x43, 0xcd, 0x82, 0x94, 0x14, + 0xe4, 0x78, 0x64, 0x21, 0x2e, 0x78, 0xf8, 0x55, + 0xf5, 0x23, 0x90, 0x37, 0x9a, 0xcc, 0x3a, 0x62, + 0x95, 0x31, 0x31, 0xb6, 0x3e, 0xe8, 0x32, 0xad, + 0xb3, 0xbf, 0x4b, 0xf5, 0x8e, 0x24, 0x73, 0x49, + 0xb5, 0xe0, 0x97, 0xe5, 0x5a, 0xbe, 0x49, 0x7b, + 0x15, 0x98, 0x23, 0x73, 0xae, 0x73, 0x2e, 0x04, + 0x39, 0xac, 0x67, 0xd0, 0x5c, 0x7f, 0x03, 0x7c, + 0x8a, 0x73, 0x9b, 0x18, 0x14, 0x0e, 0x14, 0x4c, + 0x85, 0x1d, 0xc9, 0x61, 0x1f, 0x4b, 0xcf, 0x04, + 0xf3, 0xa2, 0x09, 0x3c, 0x19, 0x7b, 0xd6, 0x3b, + 0xb5, 0xe6, 0x19, 0x01, 0x00, 0x54, 0x5f, 0xf8, + 0x1d, 0xb7, 0xfc, 0xcd, 0xdd, 0x9a, 0x32, 0x4b, + 0x0b, 0xac, 0x3c, 0x2c, 0x23, 0x82, 0x28, 0x40, + 0x58, 0xf0, 0x8b, 0x96, 0x19, 0x52, 0xc0, 0x94, + 0x01, 0x9c, 0x10, 0xbe, 0x37, 0xa5, 0x3d, 0x5a, + 0xc7, 0x94, 0xc0, 0x10, 0xa9, 0xd0, 0x82, 0x1f, + 0x15, 0x02, 0x7a, 0x1c, 0x41, 0x9c, 0x3c, 0x71, + 0xc9, 0xa1, 0xd2, 0x8a, 0xed, 0x02, 0x59, 0x7a, + 0xb7, 0x9b, 0x87, 0x53, 0x94, 0x62, 0x6b, 0xa3, + 0x9a, 0xdc, 0x09, 0x0c, 0x3a, 0x90, 0xcf, 0x75, + 0x87, 0x1a, 0x65, 0x27, 0x5e, 0xb1, 0xc5, 0xb0, + 0x33, 0x72, 0xe1, 0x3a, 0x1a, 0x23, 0xd0, 0xcf, + 0x93, 0x74, 0x11, 0x1f, 0x80, 0xcc, 0x83, 0xa9, + 0x05, 0x62, 0x2b, 0x83, 0xfc, 0x51, 0x39, 0x71, + 0xec, 0x84, 0x19, 0xf0, 0x88, 0x0c, 0x30, 0x67, + 0x63, 0x36, 0x71, 0xb0, 0x9b, 0x54, 0x56, 0xab, + 0x60, 0x57, 0x93, 0x6d, 0x19, 0xa4, 0xa2, 0xa2, + 0x67, 0x91, 0x1b, 0x00, 0x0a, 0x13, 0x95, 0x6f, + 0xbd, 0x49, 0x38, 0x21, 0xda, 0x07, 0x2c, 0x04, + 0x64, 0x2b, 0x0c, 0x20, 0xda, 0x6c, 0xc0, 0xd9, + 0xd8, 0x64, 0xa3, 0x93, 0x65, 0xdf, 0xd6, 0x4f, + 0x10, 0x18, 0x78, 0x25, 0xfa, 0x33, 0x25, 0x07, + 0x49, 0xcb, 0xc0, 0xc9, 0x05, 0xd7, 0xb1, 0xff, + 0x3c, 0xae, 0x24, 0x12, 0xbf, 0x86, 0xb8, 0x1a, + 0x81, 0x7b, 0x86, 0xba, 0xa3, 0x0e, 0xdf, 0x78, + 0x62, 0xe5, 0xf6, 0xba, 0xc9, 0x87, 0x26, 0xe5, + 0x6b, 0x3c, 0xec, 0x60, 0x66, 0x4c, 0xaa, 0x2a, + 0x7d, 0xf6, 0x70, 0xc5, 0xe2, 0x07, 0xdf, 0xac, + 0x03, 0x82, 0x4c, 0x89, 0x89, 0x7c, 0xb4, 0x90, + 0xea, 0xa7, 0x65, 0x21, 0x22, 0x2c, 0x86, 0x20, + 0x51, 0x69, 0xc9, 0x1c, 0x32, 0x9c, 0x4a, 0x18, + 0x4d, 0x78, 0x72, 0x1a, 0xf8, 0x36, 0xad, 0x4d, + 0xb0, 0xca, 0x78, 0x46, 0x4d, 0x41, 0x71, 0x47, + 0x30, 0x12, 0xb7, 0xd1, 0x83, 0xba, 0xfa, 0x62, + 0x75, 0x85, 0xc6, 0x4b, 0xe3, 0x80, 0x9d, 0x7e, + 0x60, 0x04, 0xcb, 0xdc, 0x79, 0xa5, 0x46, 0x0f, + 0x0a, 0xd6, 0x77, 0xcb, 0x71, 0x65, 0x12, 0x40, + 0x7d, 0x3a, 0x61, 0x9a, 0xd0, 0x95, 0x43, 0xb7, + 0x39, 0x54, 0x74, 0x72, 0xa7, 0x06, 0xb3, 0x17, + 0xa5, 0x09, 0xbe, 0x5d, 0x86, 0x1f, 0xd6, 0x6c, + 0x7d, 0x0e, 0xd9, 0x4c, 0xd5, 0x00, 0x47, 0x95, + 0xc1, 0x81, 0x59, 0xe3, 0xa3, 0x3d, 0x79, 0x87, + 0x11, 0x52, 0x5f, 0x16, 0x35, 0xa6, 0x84, 0x28, + 0x17, 0x29, 0x23, 0x24, 0x96, 0x35, 0xaa, 0xd0, + 0x32, 0xb9, 0xe5, 0x66, 0x64, 0xbd, 0xd4, 0x8e, + 0xd2, 0x4a, 0xc7, 0x5c, 0x64, 0x68, 0xd1, 0x90, + 0x3e, 0x47, 0x10, 0x86, 0xc5, 0xf1, 0x56, 0x7e, + 0x83, 0x1a, 0x05, 0x08, 0xc5, 0x39, 0x63, 0x25, + 0x91, 0xab, 0x57, 0x7d, 0x32, 0x4a, 0x82, 0x42, + 0x97, 0x25, 0x80, 0x99, 0x50, 0x76, 0x1d, 0x84, + 0x34, 0x28, 0x8c, 0x14, 0x03, 0x4f, 0x1c, 0x06, + 0xc1, 0xd0, 0xaa, 0xe0, 0x9a, 0x71, 0xc7, 0x40, + 0xa5, 0x57, 0x01, 0xc2, 0x8f, 0xf8, 0x44, 0x99, + 0xf2, 0xbb, 0x18, 0xb6, 0x62, 0x8c, 0xaa, 0xa3, + 0xfe, 0x75, 0xac, 0x4d, 0xe0, 0x4c, 0x6f, 0x91, + 0x39, 0x00, 0xd8, 0x6c, 0x88, 0x12, 0x62, 0x52, + 0xa1, 0x7c, 0x4d, 0x30, 0x39, 0x91, 0xdb, 0x02, + 0x87, 0x12, 0x08, 0x81, 0xbb, 0x88, 0x47, 0x8a, + 0xaa, 0x9a, 0xf9, 0xbc, 0x53, 0xd3, 0x72, 0x98, + 0x43, 0x85, 0x8f, 0xdb, 0x46, 0x48, 0x05, 0x9c, + 0xac, 0x82, 0xc1, 0xa1, 0x08, 0x78, 0xba, 0x39, + 0x82, 0x3b, 0x04, 0x1b, 0xd0, 0xe2, 0x58, 0x48, + 0x7b, 0x56, 0xcc, 0x8a, 0x32, 0x20, 0xc1, 0xa5, + 0x8b, 0xf6, 0x6a, 0x17, 0x2b, 0x5b, 0x9a, 0x0c, + 0x63, 0x2d, 0x67, 0x4e, 0xae, 0x88, 0x5a, 0x01, + 0x5c, 0x4e, 0x37, 0xba, 0x07, 0x36, 0x80, 0xbe, + 0xde, 0x75, 0x34, 0xf3, 0xe3, 0x4b, 0x60, 0x50, + 0xc8, 0x6b, 0x21, 0xc3, 0xc0, 0x90, 0x94, 0x1f, + 0x23, 0xb7, 0xf6, 0x73, 0x1e, 0x2b, 0xda, 0x0e, + 0x6e, 0xa4, 0x64, 0x67, 0x71, 0xce, 0xc5, 0x72, + 0xb9, 0x8c, 0xa0, 0xa1, 0x58, 0x91, 0x9a, 0xdb, + 0xeb, 0x84, 0xce, 0x58, 0x5f, 0xf9, 0xf2, 0x5e, + 0xbd, 0xda, 0x6c, 0xb6, 0xf0, 0x7a, 0x8f, 0x81, + 0x12, 0x32, 0x60, 0x7e, 0x72, 0x17, 0xbb, 0x03, + 0x9b, 0xab, 0xd0, 0xd9, 0x19, 0x34, 0xa8, 0x59, + 0x40, 0x59, 0xc9, 0x68, 0x77, 0x23, 0xc0, 0x43, + 0x81, 0xbf, 0xd6, 0x27, 0xa1, 0x05, 0x17, 0xf5, + 0xf4, 0xbf, 0xc7, 0x77, 0x77, 0xaa, 0x26, 0x71, + 0xae, 0x12, 0x4f, 0x2b, 0x7a, 0x5f, 0x4d, 0x56, + 0x14, 0x02, 0x91, 0x97, 0xe6, 0x58, 0x6f, 0xa8, + 0xc1, 0x7e, 0x0a, 0xd9, 0x07, 0x81, 0xbc, 0x7b, + 0xb1, 0x9a, 0x77, 0x2d, 0x5a, 0x4e, 0xfe, 0x32, + 0xca, 0xc8, 0x9b, 0x76, 0xc4, 0x2a, 0x5e, 0xde, + 0x9b, 0xcc, 0x20, 0xc1, 0x89, 0x8c, 0x08, 0xa5, + 0xb0, 0xc0, 0x7e, 0x47, 0x8b, 0x1b, 0xbc, 0x22, + 0x6e, 0xfa, 0xd1, 0x5f, 0x2a, 0xc7, 0x37, 0x51, + 0x4b, 0x8c, 0x61, 0x49, 0x81, 0x07, 0x79, 0x22, + 0x24, 0x16, 0x53, 0x7e, 0xd0, 0x0d, 0xae, 0xab, + 0x17, 0x7e, 0x90, 0x3e, 0xad, 0x6b, 0x4a, 0xc4, + 0x23, 0x70, 0xaf, 0x1b, 0x1f, 0x50, 0xeb, 0xaf, + 0xaa, 0x1c, 0x6e, 0x64, 0x7b, 0xba, 0xcc, 0xe7, + 0x2c, 0x7d, 0x0b, 0x88, 0xae, 0xb0, 0xb0, 0x6f, + 0xc1, 0xa4, 0x54, 0x57, 0xa9, 0xc1, 0x87, 0x57, + 0x9b, 0xf1, 0x84, 0x57, 0x9c, 0xc3, 0x51, 0xc4, + 0x3d, 0xff, 0x94, 0x26, 0x05, 0xaa, 0x56, 0x04, + 0xfc, 0x85, 0xfc, 0x55, 0x83, 0xf6, 0xf1, 0x49, + 0x6f, 0xe6, 0x1d, 0x70, 0xd6, 0xcd, 0xe2, 0x32, + 0x7f, 0xee, 0x71, 0x3d, 0x86, 0xf2, 0x9b, 0x3a, + 0xfc, 0xbb, 0x54, 0xe9, 0xa9, 0x2a, 0x33, 0xa6, + 0xc1, 0xea, 0x6f, 0xfa, 0x30, 0x95, 0x66, 0xb0, + 0x68, 0x62, 0x33, 0xc0, 0xf3, 0xb1, 0xc3, 0x14, + 0x48, 0x90, 0xe4, 0xf0, 0x82, 0x9a, 0x60, 0x99, + 0xc5, 0x74, 0x9c, 0xde, 0xc8, 0x43, 0x28, 0xec, + 0x2c, 0xb6, 0x4a, 0x73, 0x85, 0xa7, 0x61, 0xd6, + 0x4b, 0x3a, 0x23, 0xc4, 0x89, 0x34, 0x33, 0x43, + 0xb9, 0x77, 0x23, 0xae, 0x78, 0xc7, 0xd8, 0x05, + 0x45, 0x8e, 0x16, 0x20, 0xf0, 0x29, 0x28, 0x97, + 0x69, 0x17, 0x04, 0xcb, 0x76, 0xe3, 0xb0, 0xb2, + 0x81, 0xa8, 0x3c, 0xf6, 0x44, 0x90, 0x49, 0x8c, + 0xbc, 0xaf, 0x04, 0x80, 0x24, 0x16, 0xb3, 0x3c, + 0x56, 0x51, 0x71, 0xd7, 0x72, 0xd3, 0xb9, 0x35, + 0x40, 0x37, 0x58, 0x76, 0x29, 0xae, 0x14, 0xa5, + 0xc5, 0x03, 0x1a, 0xc3, 0x66, 0x71, 0xa0, 0xd0, + 0xc9, 0x1c, 0xc0, 0xb4, 0xcd, 0x69, 0xd8, 0x40, + 0x2e, 0x33, 0xb9, 0xbc, 0xc2, 0xbb, 0xaf, 0x6b, + 0x97, 0x1e, 0x30, 0x3f, 0xa1, 0x37, 0xbe, 0x23, + 0x25, 0x98, 0xa4, 0x99, 0x9b, 0xc0, 0x12, 0x57, + 0x4c, 0x81, 0x65, 0x1b, 0x38, 0xb3, 0x83, 0x96, + 0xc1, 0xc3, 0x65, 0x30, 0x3a, 0xd2, 0x5d, 0x49, + 0xfc, 0x6b, 0x68, 0x99, 0x51, 0xa1, 0xcc, 0x4c, + 0x60, 0x07, 0x61, 0x30, 0x65, 0x49, 0x5f, 0x97, + 0x91, 0x0f, 0x97, 0x35, 0xd4, 0xea, 0x4e, 0x44, + 0x2a, 0xcb, 0x2f, 0xab, 0xae, 0xcf, 0xe1, 0xad, + 0xef, 0x06, 0x67, 0xba, 0x42, 0x2c, 0x95, 0x4a, + 0x05, 0xd1, 0xb6, 0x16, 0x7a, 0x26, 0x3e, 0x12, + 0x75, 0xc6, 0xad, 0xa8, 0x38, 0x59, 0x65, 0x30, + 0x4b, 0x30, 0x32, 0x40, 0x40, 0x54, 0x2c, 0xf5, + 0xa4, 0x51, 0xbc, 0xaf, 0xc7, 0x47, 0x88, 0xbe, + 0x3b, 0x9b, 0x9f, 0xcc, 0x45, 0xd4, 0x79, 0x0e, + 0x2d, 0x73, 0x35, 0xc6, 0x0a, 0x14, 0xf0, 0xa4, + 0x9d, 0x13, 0x05, 0x3f, 0x26, 0x26, 0xa6, 0x27, + 0xca, 0x19, 0x55, 0x3c, 0xb3, 0x36, 0xa2, 0xcb, + 0x4a, 0x45, 0x5d, 0x8e, 0xf3, 0x98, 0x94, 0x91, + 0x47, 0x2b, 0xa0, 0x05, 0x1e, 0xf7, 0x41, 0x6e, + 0x0b, 0xbf, 0x1a, 0x61, 0x08, 0xfa, 0x07, 0xc1, + 0x61, 0x54, 0x8e, 0x7c, 0x62, 0x33, 0x1a, 0xe5, + 0xa2, 0xb4, 0xe4, 0xa1, 0x08, 0xa5, 0x10, 0x93, + 0xd3, 0x15, 0x08, 0x21, 0xa2, 0xfb, 0x54, 0x71, + 0x70, 0xa1, 0xb7, 0x3c, 0x43, 0xc5, 0x50, 0xc6, + 0x55, 0x7a, 0x40, 0x48, 0xa5, 0x8a, 0x2c, 0xd7, + 0x7a, 0x24, 0x42, 0x34, 0xb2, 0x23, 0x51, 0x75, + 0xa0, 0x89, 0x7d, 0x50, 0x61, 0xb4, 0x61, 0x34, + 0x82, 0xdc, 0x13, 0x64, 0x14, 0x04, 0x8c, 0x11, + 0xdb, 0x37, 0xea, 0xe0, 0xa5, 0xdf, 0x87, 0xc1, + 0x93, 0x14, 0xb0, 0xe8, 0x23, 0x97, 0xa0, 0xd3, + 0x38, 0xdc, 0x21, 0x53, 0x8a, 0xf3, 0x61, 0x49, + 0xd9, 0x3f, 0x8b, 0x1a, 0x11, 0xc5, 0x3b, 0xb5, + 0xde, 0xf8, 0xb7, 0xa2, 0xcc, 0xa3, 0x36, 0x2b, + 0x7f, 0xe3, 0xa1, 0x40, 0x8a, 0x25, 0x47, 0xe2, + 0x09, 0x05, 0x8c, 0x67, 0x3a, 0x75, 0x66, 0xc2, + 0x61, 0x23, 0xa6, 0xd8, 0xb6, 0x92, 0xa5, 0xf3, + 0x3e, 0xbd, 0xcb, 0x26, 0x24, 0xb7, 0x9d, 0x87, + 0x7b, 0xce, 0x5f, 0xa1, 0x4e, 0x42, 0xe8, 0x3f, + 0xaa, 0xd8, 0x2e, 0x99, 0x00, 0x55, 0x3a, 0x3c, + 0x60, 0x45, 0xca, 0x32, 0x9f, 0xea, 0x4a, 0x50, + 0x65, 0x58, 0xc4, 0x91, 0xb6, 0xa6, 0x16, 0xc6, + 0xfd, 0x40, 0x0b, 0x42, 0x13, 0x6f, 0x44, 0xcb, + 0x0d, 0x02, 0x57, 0x65, 0x08, 0x19, 0x01, 0x8d, + 0x3c, 0x56, 0x8e, 0xf6, 0xc6, 0x0c, 0x6c, 0x40, + 0x9e, 0x70, 0xa8, 0x29, 0x28, 0x71, 0x08, 0xc1, + 0xb6, 0xa4, 0xd3, 0x2f, 0x76, 0xe5, 0xcc, 0x4d, + 0x10, 0x4b, 0x02, 0x43, 0x8e, 0xf7, 0xa4, 0x67, + 0x91, 0x23, 0x98, 0xea, 0x9c, 0x7c, 0xbd, 0x99, + 0x81, 0x58, 0x9a, 0x34, 0x18, 0x97, 0x68, 0x7b, + 0x51, 0x6a, 0x13, 0x30, 0x7d, 0x66, 0xc0, 0x68, + 0xc4, 0x44, 0xb4, 0xb9, 0x49, 0xa1, 0x74, 0x12, + 0x41, 0x33, 0x15, 0xcc, 0xf4, 0x9b, 0x99, 0x98, + 0x00, 0x34, 0xb5, 0xb8, 0xcf, 0xde, 0xc4, 0xa6, + 0x0b, 0x9c, 0x1e, 0x74, 0x55, 0xaa, 0xfb, 0xf3, + 0xa7, 0x57, 0x34, 0x69, 0x90, 0xcc, 0x32, 0xb0, + 0x59, 0x9b, 0xa2, 0x17, 0xa6, 0xc5, 0xfc, 0x39, + 0x53, 0x79, 0x11, 0x95, 0x7c, 0x12, 0x51, 0x48, + 0xa8, 0x7f, 0x41, 0x58, 0x9c, 0xb2, 0x22, 0xd0, + 0xd1, 0x92, 0x29, 0xe2, 0xcb, 0x55, 0xe1, 0xa0, + 0x44, 0x79, 0x1e, 0x7c, 0xa6, 0x11, 0x92, 0xa4, + 0x64, 0x60, 0xc3, 0x18, 0x3d, 0x2b, 0xcd, 0x6d, + 0xe0, 0x8a, 0x5e, 0x76, 0x51, 0x60, 0x3a, 0xcc, + 0x34, 0x9c, 0xa1, 0x6c, 0xba, 0x18, 0xab, 0xb2, + 0x3a, 0x3e, 0x8c, 0x33, 0x0d, 0x74, 0x21, 0x59, + 0x8a, 0x62, 0x78, 0xec, 0x7e, 0xbf, 0xab, 0xca, + 0x0e, 0xf4, 0x88, 0xb2, 0x29, 0x05, 0x54, 0x75, + 0x34, 0x99, 0xc0, 0x45, 0x2e, 0x45, 0x38, 0x15, + 0x30, 0x99, 0x55, 0xb8, 0x15, 0x0f, 0xa1, 0xa1, + 0xe3, 0x93, 0x38, 0x6d, 0xc1, 0x2f, 0xdb, 0x27, + 0xb3, 0x8c, 0x67, 0x45, 0xf2, 0x94, 0x40, 0x16, + 0xec, 0x45, 0x7f, 0x39, 0xb1, 0x8d, 0x60, 0x4a, + 0x07, 0xa1, 0xab, 0xe0, 0x7b, 0xc8, 0x44, 0x05, + 0x0f, 0xfa, 0x8a, 0x06, 0xfa, 0x15, 0x4a, 0x49, + 0xd8, 0x8f, 0xac, 0x77, 0x54, 0x52, 0xd6, 0xa7, + 0xc0, 0xe5, 0x89, 0xbf, 0xb5, 0xc3, 0x70, 0xc2, + 0xc4, 0xb6, 0x20, 0x1d, 0xda, 0x80, 0xc9, 0xab, + 0x20, 0x76, 0xec, 0xc0, 0x8b, 0x44, 0x52, 0x2f, + 0xda, 0x33, 0x26, 0xf0, 0x33, 0x80, 0x6d, 0xd2, + 0x69, 0x3f, 0x31, 0x97, 0x39, 0xf4, 0x0c, 0x4f, + 0x42, 0xb2, 0x4a, 0xca, 0x70, 0x98, 0xfb, 0x8f, + 0xf5, 0xf9, 0xac, 0x20, 0x29, 0x2d, 0x02, 0xb5, + 0x6a, 0xc7, 0x46, 0x80, 0x1a, 0xcc, 0xcc, 0x84, + 0x86, 0x3d, 0xee, 0x32, 0x87, 0x84, 0x97, 0xb6, + 0x94, 0x38, 0xbf, 0x99, 0x17, 0x76, 0x28, 0x66, + 0x50, 0x48, 0x2c, 0x8d, 0x9d, 0x95, 0x87, 0xbc, + 0x6a, 0x55, 0xb8, 0x5c, 0x4d, 0x7f, 0xa7, 0x4d, + 0x02, 0x65, 0x6b, 0x42, 0x1c, 0x9e, 0x23, 0xe0, + 0x3a, 0x48, 0xd4, 0xb7, 0x44, 0x25, 0xc2, 0x6e, + 0x4a, 0x20, 0xdd, 0x95, 0x62, 0xa4, 0xda, 0x07, + 0x93, 0xf3, 0xa3, 0x52, 0xcc, 0xc0, 0xf1, 0x82, + 0x17, 0xd8, 0x68, 0xc7, 0xf5, 0x00, 0x2a, 0xbe, + 0x76, 0x8b, 0x1f, 0xc7, 0x3f, 0x05, 0x74, 0x4e, + 0x7c, 0xc2, 0x8f, 0x10, 0x34, 0x40, 0x62, 0xc1, + 0x0e, 0x08, 0xec, 0xcc, 0xed, 0x3c, 0x1f, 0x7d, + 0x39, 0x2c, 0x01, 0xd9, 0x79, 0xdd, 0x71, 0x8d, + 0x83, 0x98, 0x37, 0x46, 0x65, 0xa1, 0x6a, 0x98, + 0x70, 0x58, 0x5c, 0x39, 0xd5, 0x58, 0x9a, 0x50, + 0xe1, 0x33, 0x38, 0x9c, 0x9b, 0x9a, 0x27, 0x6c, + 0x02, 0x42, 0x60, 0xd9, 0xfc, 0x77, 0x11, 0xc8, + 0x1b, 0x63, 0x37, 0xb5, 0x7d, 0xa3, 0xc3, 0x76, + 0xd0, 0xcd, 0x74, 0xe1, 0x4c, 0x73, 0x72, 0x7b, + 0x27, 0x66, 0x56, 0xb9, 0xd8, 0xa4, 0xeb, 0x71, + 0x89, 0x6f, 0xf5, 0x89, 0xd4, 0xb8, 0x93, 0xe7, + 0x11, 0x0f, 0x3b, 0xb9, 0x48, 0xec, 0xe2, 0x91, + 0xdd, 0x86, 0xc0, 0xb7, 0x46, 0x8a, 0x67, 0x8c, + 0x74, 0x69, 0x80, 0xc1, 0x2a, 0xa6, 0xb9, 0x5e, + 0x2b, 0x0c, 0xbe, 0x43, 0x31, 0xbb, 0x24, 0xa3, + 0x3a, 0x27, 0x01, 0x53, 0xaa, 0x47, 0x2c, 0x47, + 0x31, 0x23, 0x82, 0xca, 0x36, 0x5c, 0x5f, 0x35, + 0x25, 0x9d, 0x02, 0x57, 0x46, 0xfc, 0x65, 0x95, + 0xfe, 0x63, 0x6c, 0x76, 0x75, 0x10, 0xa6, 0x9c, + 0x1e, 0x8a, 0x17, 0x6b, 0x79, 0x49, 0x95, 0x8f, + 0x26, 0x97, 0x39, 0x94, 0x97, 0xa2, 0xfc, 0x73, + 0x64, 0xa1, 0x2c, 0x81, 0x98, 0x29, 0x52, 0x39, + 0xc8, 0x26, 0xcb, 0x50, 0x82, 0x08, 0x60, 0x77, + 0x28, 0x2e, 0xd6, 0x28, 0x65, 0x1f, 0xc0, 0x4c, + 0x63, 0x9b, 0x43, 0x85, 0x22, 0xa9, 0xde, 0x30, + 0x9b, 0x14, 0xb0, 0x86, 0xd6, 0xe9, 0x23, 0xc5, + 0x51, 0x62, 0x3b, 0xd7, 0x2a, 0x73, 0x3c, 0xb0, + 0xda, 0xbc, 0x54, 0xa9, 0x41, 0x6a, 0x99, 0xe7, + 0x2c, 0x9f, 0xda, 0x1c, 0xb3, 0xfb, 0x9b, 0xa0, + 0x6b, 0x8a, 0xdb, 0x24, 0x22, 0xd6, 0x8c, 0xad, + 0xc5, 0x53, 0xc9, 0x82, 0x02, 0xa1, 0x76, 0x56, + 0x47, 0x8a, 0xc0, 0x44, 0xef, 0x34, 0x56, 0x37, + 0x8a, 0xbc, 0xe9, 0x99, 0x1e, 0x01, 0x41, 0xba, + 0x79, 0x09, 0x4f, 0xa8, 0xf7, 0x7a, 0x30, 0x08, + 0x05, 0xd2, 0xd3, 0x2f, 0xfc, 0x62, 0xbf, 0x0c, + 0xa4, 0x55, 0x4c, 0x33, 0x0c, 0x2b, 0xb7, 0x04, + 0x2d, 0xb3, 0x51, 0x02, 0xf6, 0x8b, 0x1a, 0x00, + 0x62, 0x58, 0x38, 0x65, 0x38, 0x1c, 0x74, 0xdd, + 0x91, 0x3a, 0xf7, 0x0b, 0x26, 0xcf, 0x09, 0x23, + 0xd0, 0xc4, 0xcb, 0x97, 0x16, 0x92, 0x22, 0x25, + 0x52, 0xa8, 0xf4, 0xb7, 0x88, 0xb4, 0xaf, 0xd1, + 0x34, 0x1a, 0x9d, 0xf4, 0x15, 0xcf, 0x20, 0x39, + 0x00, 0xf5, 0xcc, 0xf7, 0xf6, 0x59, 0x88, 0x94, + 0x9a, 0x75, 0x58, 0x0d, 0x04, 0x96, 0x39, 0x85, + 0x31, 0x00, 0x85, 0x4b, 0x21, 0xf4, 0x01, 0x80, + 0x03, 0x50, 0x2b, 0xb1, 0xba, 0x95, 0xf5, 0x56, + 0xa5, 0xd6, 0x7c, 0x7e, 0xb5, 0x24, 0x10, 0xeb, + 0xa2, 0x88, 0xa6, 0xd0, 0x63, 0x5c, 0xa8, 0xa4, + 0xf6, 0xd6, 0x96, 0xd0, 0xa0, 0x20, 0xc8, 0x26, + 0x93, 0x8d, 0x34, 0x94, 0x3c, 0x38, 0x08, 0xc7, + 0x9c, 0xc0, 0x07, 0x76, 0x85, 0x33, 0x21, 0x6b, + 0xc1, 0xb2, 0x9d, 0xa6, 0xc8, 0x12, 0xef, 0xf3, + 0x34, 0x0b, 0xaa, 0x8d, 0x2e, 0x65, 0x34, 0x4f, + 0x09, 0xbd, 0x47, 0x89, 0x4f, 0x5a, 0x3a, 0x41, + 0x18, 0x71, 0x5b, 0x3c, 0x50, 0x20, 0x67, 0x93, + 0x27, 0xf9, 0x18, 0x9f, 0x7e, 0x10, 0x85, 0x6b, + 0x23, 0x8b, 0xb9, 0xb0, 0xab, 0x4c, 0xa8, 0x5a, + 0xbf, 0x4b, 0x21, 0xf5, 0xc7, 0x6b, 0xcc, 0xd7, + 0x18, 0x50, 0xb2, 0x2e, 0x04, 0x59, 0x28, 0x27, + 0x6a, 0x0f, 0x2e, 0x95, 0x1d, 0xb0, 0x70, 0x7c, + 0x6a, 0x11, 0x6d, 0xc1, 0x91, 0x13, 0xfa, 0x76, + 0x2d, 0xc5, 0xf2, 0x0b, 0xd5, 0xd2, 0xab, 0x5b, + 0xe7, 0x17, 0x44, 0xdc, 0x9c, 0xbd, 0xb5, 0x1e, + 0xa7, 0x57, 0x96, 0x3a, 0xac, 0x56, 0xa9, 0x0a, + 0x0d, 0x80, 0x23, 0xbe, 0xd1, 0xf5, 0xca, 0xe8, + 0xa6, 0x4d, 0xa0, 0x47, 0x27, 0x9b, 0x35, 0x3a, + 0x09, 0x6a, 0x83, 0x5b, 0x0b, 0x2b, 0x02, 0x3b, + 0x6a, 0xa0, 0x48, 0x98, 0x92, 0x33, 0x07, 0x9a, + 0xeb, 0x46, 0x7e, 0x52, 0x2f, 0xa2, 0x7a, 0x58, + 0x22, 0x92, 0x1e, 0x5c, 0x55, 0x1b, 0x4f, 0x53, + 0x75, 0x36, 0xe4, 0x6f, 0x3a, 0x6a, 0x97, 0xe7, + 0x2c, 0x3b, 0x06, 0x31, 0x04, 0xe0, 0x9a, 0x04, + 0x05, 0x98, 0x94, 0x0d, 0x87, 0x2f, 0x6d, 0x87, + 0x1f, 0x5e, 0xf9, 0xb4, 0x35, 0x50, 0x73, 0xb5, + 0x47, 0x69, 0xe4, 0x54, 0x54, 0xe6, 0xa0, 0x81, + 0x95, 0x99, 0x40, 0x86, 0x21, 0xab, 0x44, 0x13, + 0xb3, 0x55, 0x07, 0xb0, 0xdf, 0x57, 0x8c, 0xe2, + 0xd5, 0x11, 0xd5, 0x20, 0x58, 0xd5, 0x74, 0x9d, + 0xf3, 0x8b, 0x29, 0xd6, 0xcc, 0x58, 0x87, 0x0c, + 0xaf, 0x92, 0xf6, 0x9a, 0x75, 0x16, 0x14, 0x06, + 0xe7, 0x1c, 0x5f, 0xf9, 0x24, 0x51, 0xa7, 0x75, + 0x22, 0xb8, 0xb2, 0x96, 0x7a, 0x2d, 0x58, 0xa4, + 0x9a, 0x81, 0x66, 0x1a, 0xa6, 0x5a, 0xc0, 0x9b, + 0x08, 0xc9, 0xfe, 0x45, 0xab, 0xc3, 0x85, 0x1f, + 0x99, 0xc7, 0x30, 0xc4, 0x50, 0x03, 0xac, 0xa2, + 0xbf, 0x0f, 0x84, 0x24, 0xa1, 0x9b, 0x74, 0x08, + 0xa5, 0x37, 0xd5, 0x41, 0xc1, 0x6f, 0x56, 0x82, + 0xbf, 0xe3, 0xa7, 0xfa, 0xea, 0x56, 0x4f, 0x12, + 0x98, 0x61, 0x1a, 0x7f, 0x5f, 0x60, 0x92, 0x2b, + 0xa1, 0x9d, 0xe7, 0x3b, 0x19, 0x17, 0xf1, 0x85, + 0x32, 0x73, 0x55, 0x51, 0x99, 0xa6, 0x49, 0x31, + 0x8b, 0x50, 0x77, 0x33, 0x45, 0xc9, 0x97, 0x46, + 0x08, 0x56, 0x97, 0x2a, 0xcb, 0x43, 0xfc, 0x81, + 0xab, 0x63, 0x21, 0xb1, 0xc3, 0x3c, 0x2b, 0xb5, + 0x09, 0x8b, 0xd4, 0x89, 0xd6, 0x96, 0xa0, 0xf7, + 0x06, 0x79, 0xc1, 0x21, 0x38, 0x73, 0xd0, 0x8b, + 0xda, 0xd4, 0x28, 0x44, 0x92, 0x72, 0x16, 0x04, + 0x72, 0x05, 0x63, 0x32, 0x12, 0x31, 0x0e, 0xe9, + 0xa0, 0x6c, 0xb1, 0x00, 0x16, 0xc8, 0x05, 0x50, + 0x3c, 0x34, 0x1a, 0x36, 0xd8, 0x7e, 0x56, 0x07, + 0x2e, 0xab, 0xe2, 0x37, 0x31, 0xe3, 0x4a, 0xf7, + 0xe2, 0x32, 0x8f, 0x85, 0xcd, 0xb3, 0x70, 0xcc, + 0xaf, 0x00, 0x51, 0x5b, 0x64, 0xc9, 0xc5, 0x4b, + 0xc8, 0x37, 0x57, 0x84, 0x47, 0xaa, 0xcf, 0xae, + 0xd5, 0x96, 0x9a, 0xa3, 0x51, 0xe7, 0xda, 0x4e, + 0xfa, 0x7b, 0x11, 0x5c, 0x4c, 0x51, 0xf4, 0xa6, + 0x99, 0x77, 0x98, 0x50, 0x29, 0x5c, 0xa7, 0x2d, + 0x78, 0x1a, 0xd4, 0x1b, 0xc6, 0x80, 0x53, 0x2b, + 0x89, 0xe7, 0x10, 0xe2, 0x18, 0x9e, 0xb3, 0xc5, + 0x08, 0x17, 0xba, 0x25, 0x5c, 0x74, 0x74, 0xc9, + 0x5c, 0xa9, 0x11, 0x0c, 0xc4, 0x3b, 0x8b, 0xa8, + 0xe6, 0x82, 0xc7, 0xfb, 0x7b, 0x0f, 0xdc, 0x26, + 0x5c, 0x04, 0x83, 0xa6, 0x5c, 0xa4, 0x51, 0x4e, + 0xe4, 0xb8, 0x32, 0xaa, 0xc5, 0x80, 0x0c, 0x3b, + 0x08, 0xe7, 0x4f, 0x56, 0x39, 0x51, 0xc1, 0xfb, + 0xb2, 0x10, 0x35, 0x3e, 0xfa, 0x1a, 0xa8, 0x66, + 0x85, 0x6b, 0xc1, 0xe0, 0x34, 0x73, 0x3b, 0x04, + 0x85, 0xda, 0xb1, 0xd0, 0x20, 0xc6, 0xbf, 0x76, + 0x5f, 0xf6, 0x0b, 0x3b, 0x80, 0x19, 0x84, 0xa9, + 0x0c, 0x2f, 0xe9, 0x70, 0xbf, 0x1d, 0xe9, 0x70, + 0x04, 0xa6, 0xcf, 0x44, 0xb4, 0x98, 0x4a, 0xb5, + 0x82, 0x58, 0xb4, 0xaf, 0x71, 0x22, 0x1c, 0xd1, + 0x75, 0x30, 0xa7, 0x00, 0xc3, 0x29, 0x59, 0xc9, + 0x43, 0x63, 0x44, 0xb5, 0x31, 0x6f, 0x09, 0xcc, + 0xca, 0x70, 0x29, 0xa2, 0x30, 0xd6, 0x39, 0xdc, + 0xb0, 0x22, 0xd8, 0xba, 0x79, 0xba, 0x91, 0xcd, + 0x6a, 0xb1, 0x2a, 0xe1, 0x57, 0x9c, 0x50, 0xc7, + 0xbb, 0x10, 0xe3, 0x03, 0x01, 0xa6, 0x5c, 0xae, + 0x31, 0x01, 0xd4, 0x0c, 0x7b, 0xa9, 0x27, 0xbb, + 0x55, 0x31, 0x48, 0xd1, 0x64, 0x70, 0x24, 0xd4, + 0xa0, 0x6c, 0x81, 0x66, 0xd0, 0xb0, 0xb8, 0x12, + 0x69, 0xb7, 0xd5, 0xf4, 0xb3, 0x4f, 0xb0, 0x22, + 0xf6, 0x91, 0x52, 0xf5, 0x14, 0x00, 0x4a, 0x7c, + 0x68, 0x53, 0x68, 0x55, 0x23, 0x43, 0xbb, 0x60, + 0x36, 0x0f, 0xbb, 0x99, 0x45, 0xed, 0xf4, 0x46, + 0xd3, 0x45, 0xbd, 0xca, 0xa7, 0x45, 0x5c, 0x74, + 0xba, 0x0a, 0x55, 0x1e, 0x18, 0x46, 0x20, 0xfe, + 0xf9, 0x76, 0x88, 0x77, 0x3d, 0x50, 0xb6, 0x43, + 0x3c, 0xa7, 0xa7, 0xac, 0x5c, 0xb6, 0xb7, 0xf6, + 0x71, 0xa1, 0x53, 0x76, 0xe5, 0xa6, 0x74, 0x7a, + 0x62, 0x3f, 0xa7, 0xbc, 0x66, 0x30, 0x37, 0x3f, + 0x5b, 0x1b, 0x51, 0x26, 0x90, 0xa6, 0x61, 0x37, + 0x78, 0x70, 0xa6, 0x0a, 0x7a, 0x18, 0x96, 0x83, + 0xf9, 0xb0, 0xcf, 0x04, 0x66, 0xe1, 0xf7, 0x50, + 0x76, 0x26, 0x31, 0xc4, 0xab, 0x09, 0xf5, 0x05, + 0xc4, 0x2d, 0xd2, 0x86, 0x33, 0x56, 0x94, 0x72, + 0x73, 0x54, 0x42, 0x85, 0x1e, 0x32, 0x16, 0x16, + 0xd4, 0x00, 0x98, 0x10, 0x77, 0x7b, 0x6b, 0xd4, + 0x6f, 0xa7, 0x22, 0x44, 0x61, 0xa5, 0xcc, 0x27, + 0x40, 0x5d, 0xfb, 0xac, 0x0d, 0x39, 0xb0, 0x02, + 0xca, 0xb3, 0x34, 0x33, 0xf2, 0xa8, 0x6e, 0xb8, + 0xce, 0x91, 0xc1, 0x34, 0xa6, 0x38, 0x6f, 0x86, + 0x0a, 0x19, 0x94, 0xeb, 0x4b, 0x68, 0x75, 0xa4, + 0x6d, 0x19, 0x55, 0x81, 0xd1, 0x73, 0x85, 0x4b, + 0x53, 0xd2, 0x29, 0x3d, 0xf3, 0xe9, 0xa8, 0x22, + 0x75, 0x6c, 0xd8, 0xf2, 0x12, 0xb3, 0x25, 0xca, + 0x29, 0xb4, 0xf9, 0xf8, 0xcf, 0xba, 0xdf, 0x2e, + 0x41, 0x86, 0x9a, 0xbf, 0xba, 0xd1, 0x07, 0x38, + 0xad, 0x04, 0xcc, 0x75, 0x2b, 0xc2, 0x0c, 0x39, + 0x47, 0x46, 0x85, 0x0e, 0x0c, 0x48, 0x47, 0xdb, + 0xeb, 0xbe, 0x41, 0xcd, 0x4d, 0xea, 0x48, 0x9d, + 0xed, 0xd0, 0x0e, 0x76, 0xae, 0x0b, 0xcf, 0x54, + 0xaa, 0x85, 0x50, 0x20, 0x29, 0x20, 0xeb, 0x64, + 0xd5, 0x89, 0x2a, 0xd0, 0x2b, 0x13, 0xf2, 0xe5, + 0x86, 0x26, 0xed, 0x79, 0xd4, 0x51, 0x14, 0x08, + 0x00, 0xe0, 0x3b, 0x59, 0xb9, 0x56, 0xf8, 0x21, + 0x0e, 0x55, 0x60, 0x67, 0x40, 0x7d, 0x13, 0xdc, + 0x90, 0xfa, 0x9e, 0x8b, 0x87, 0x2b, 0xfb, 0x8f +#endif }; WOLFSSL_SMALL_STACK_STATIC const byte kyber1024_ct[] = { -#ifndef WOLFSSL_ML_KEM +#ifdef WOLFSSL_KYBER_ORIGINAL 0xA6, 0xAF, 0x29, 0xD5, 0xF5, 0xB8, 0x0B, 0xD1, 0x30, 0xF5, 0x18, 0xBA, 0xDD, 0xD6, 0xC8, 0xF1, 0x75, 0x45, 0x41, 0x3D, 0x86, 0x0F, 0xB3, 0xDE, @@ -40158,215 +41445,215 @@ static wc_test_ret_t kyber1024_kat(void) 0x30, 0xC7, 0x3B, 0xC2, 0x4F, 0x5D, 0x95, 0xF7, 0x37, 0x85, 0x8D, 0xDC, 0x4F, 0x32, 0xC0, 0x13 #else - 0xb1, 0x56, 0x96, 0xac, 0xab, 0xf3, 0xf5, 0xc7, - 0x1c, 0x09, 0x60, 0x5d, 0xf3, 0x50, 0xf9, 0x8e, - 0xf9, 0x89, 0x74, 0x74, 0xf2, 0x41, 0xc7, 0xf7, - 0xd1, 0x6f, 0x7a, 0x69, 0x60, 0x43, 0x58, 0x50, - 0x84, 0x58, 0x91, 0x6d, 0x2c, 0x85, 0x52, 0xc7, - 0x04, 0xcb, 0x6e, 0x0d, 0xa4, 0x30, 0x5a, 0x11, - 0x72, 0x0a, 0x2b, 0x59, 0xa6, 0xd8, 0x19, 0x0f, - 0xc3, 0xe3, 0x89, 0xe6, 0x55, 0x1e, 0x7c, 0x59, - 0x57, 0x8f, 0xe2, 0xb0, 0x5d, 0x75, 0x91, 0xba, - 0xb3, 0x26, 0xd8, 0x94, 0xe2, 0x36, 0x56, 0xc6, - 0xb5, 0xfe, 0x4b, 0x7a, 0xbd, 0x65, 0x05, 0xa8, - 0xc2, 0x6d, 0x1d, 0xf8, 0xb4, 0x4a, 0x0e, 0xd5, - 0x3a, 0xff, 0xff, 0x9a, 0x58, 0x5f, 0xce, 0x86, - 0xda, 0x3b, 0x3f, 0xf2, 0x2b, 0x1f, 0xda, 0xe2, - 0xf6, 0xd2, 0x55, 0xc2, 0x65, 0x35, 0xf6, 0x16, - 0x94, 0xd5, 0x04, 0x71, 0xf1, 0xd8, 0x4d, 0x17, - 0x67, 0x3e, 0x48, 0x1f, 0x4e, 0x82, 0x4c, 0x82, - 0x81, 0x0c, 0xe8, 0xf2, 0xec, 0xc9, 0xbb, 0x3f, - 0x5f, 0x07, 0xbf, 0x14, 0x30, 0xe7, 0xbf, 0xd9, - 0x9f, 0xb9, 0x8f, 0x3d, 0x2f, 0x94, 0x1e, 0xdf, - 0x64, 0x2d, 0x7b, 0x9e, 0x73, 0xbc, 0x15, 0x95, - 0xa0, 0x4c, 0xd9, 0x49, 0xfa, 0x76, 0x64, 0x68, - 0x48, 0x9f, 0x40, 0x2f, 0x92, 0x32, 0x5f, 0x6d, - 0x9e, 0xc5, 0xd6, 0x96, 0xe0, 0xfa, 0xc2, 0xc6, - 0xa3, 0x79, 0x83, 0xa6, 0x45, 0x13, 0x84, 0xce, - 0x9d, 0x9d, 0xe4, 0x48, 0xf1, 0x58, 0x74, 0xe5, - 0x30, 0x94, 0x3e, 0x8e, 0x0f, 0xe2, 0x99, 0x60, - 0x58, 0x7a, 0x89, 0xb8, 0x05, 0x2c, 0x9d, 0x0e, - 0x6b, 0x0e, 0xa5, 0xdb, 0xb7, 0x34, 0xd2, 0xa9, - 0xc0, 0x5c, 0xbb, 0x6d, 0x0c, 0x79, 0xf4, 0xa5, - 0x7d, 0xb5, 0xaf, 0xde, 0xd6, 0xa7, 0xdf, 0x0e, - 0xcf, 0x47, 0xb7, 0xa3, 0x1d, 0xea, 0xf3, 0x7d, - 0xfa, 0x1d, 0xc8, 0x97, 0x22, 0xa4, 0x7b, 0x40, - 0xb4, 0xa5, 0x0c, 0x7a, 0x2f, 0x32, 0xe8, 0xab, - 0x3d, 0xa9, 0x73, 0xaa, 0x68, 0x3c, 0x0a, 0x69, - 0x82, 0x94, 0xca, 0x3a, 0x04, 0x54, 0x83, 0x17, - 0x5d, 0x87, 0x78, 0x6b, 0x47, 0xf7, 0x8a, 0xb0, - 0x29, 0x5b, 0x82, 0x67, 0xed, 0xfe, 0xed, 0xa4, - 0x42, 0xc3, 0x51, 0xa3, 0x8e, 0x95, 0xcf, 0x43, - 0xb0, 0x83, 0x42, 0xc6, 0x7d, 0x0b, 0xc5, 0xdd, - 0x59, 0x74, 0xf6, 0xc5, 0xc0, 0x03, 0xea, 0x31, - 0xb5, 0x80, 0x4a, 0x31, 0x1c, 0x29, 0xeb, 0xa1, - 0x7b, 0xdb, 0x54, 0x7a, 0x62, 0x9e, 0xc8, 0x39, - 0x74, 0x04, 0x3b, 0xd0, 0x3a, 0x37, 0xd0, 0xec, - 0x7f, 0xf3, 0x9d, 0xe1, 0xdf, 0xb8, 0xe6, 0x32, - 0xa8, 0x6b, 0x26, 0x02, 0x1e, 0x75, 0x3e, 0x7d, - 0xc7, 0x31, 0xbc, 0x4e, 0xd7, 0xe7, 0xfe, 0xce, - 0x78, 0xb0, 0x7d, 0xff, 0x5e, 0x87, 0x75, 0xb2, - 0x22, 0x3e, 0x19, 0xdf, 0xb3, 0xa0, 0x6a, 0x18, - 0x65, 0xed, 0x4f, 0x08, 0xa8, 0x45, 0x44, 0x49, - 0x25, 0x04, 0xf2, 0x96, 0x2e, 0x00, 0x5f, 0xde, - 0x5d, 0xe6, 0xe4, 0xff, 0x48, 0x99, 0x4d, 0x4f, - 0xf8, 0x11, 0xce, 0x31, 0xe3, 0x90, 0x98, 0x03, - 0xc3, 0x53, 0x4c, 0x1c, 0x6c, 0x6d, 0xdc, 0x9e, - 0x1a, 0x43, 0xc8, 0x45, 0xe7, 0xe7, 0xe2, 0xa1, - 0x08, 0x11, 0x86, 0xbe, 0xde, 0x4b, 0x5b, 0xcf, - 0x1b, 0x80, 0xb1, 0x3d, 0x21, 0x8a, 0x4a, 0xb4, - 0x46, 0xf4, 0x79, 0xe3, 0x8c, 0x1d, 0xe4, 0xa5, - 0x94, 0xe0, 0xf2, 0x0c, 0xdc, 0x23, 0xa9, 0xea, - 0x58, 0x77, 0x8c, 0xb2, 0xfb, 0x10, 0x4f, 0x1d, - 0xc9, 0x1b, 0xa5, 0xc1, 0x7e, 0x74, 0x00, 0x4c, - 0x43, 0x0a, 0xab, 0x1a, 0x3d, 0x16, 0x79, 0xda, - 0xeb, 0x50, 0x82, 0xe5, 0x17, 0xaf, 0x6a, 0x4e, - 0x28, 0xf5, 0x64, 0x44, 0x1b, 0x73, 0x23, 0x5d, - 0x08, 0x4a, 0x58, 0x31, 0xcb, 0xb3, 0x94, 0xce, - 0xcd, 0x99, 0x7f, 0xe0, 0x8b, 0x1b, 0x4a, 0xa9, - 0x95, 0xbd, 0xd9, 0x72, 0x6c, 0x04, 0x61, 0x58, - 0x59, 0xff, 0xfd, 0x1c, 0x99, 0x06, 0xfb, 0x2d, - 0x04, 0x01, 0xed, 0x6f, 0x59, 0x1e, 0x13, 0xc6, - 0xe7, 0x9e, 0xc5, 0xe8, 0x62, 0x07, 0x9e, 0x6d, - 0xfd, 0x3c, 0xa6, 0x88, 0xfa, 0x5a, 0xc7, 0xf8, - 0xd2, 0x79, 0x07, 0x53, 0x05, 0x49, 0xac, 0x71, - 0xfd, 0xeb, 0x5f, 0x86, 0x9d, 0x2a, 0x9b, 0x23, - 0x5a, 0x0e, 0x54, 0xb3, 0xb8, 0x66, 0x02, 0x1d, - 0x6b, 0x5c, 0x98, 0xd1, 0xc6, 0xc0, 0xc0, 0x04, - 0x89, 0x99, 0x5e, 0x3c, 0x34, 0x96, 0xb6, 0x9c, - 0x76, 0x33, 0x8a, 0xc4, 0x22, 0xc9, 0xf9, 0x41, - 0x58, 0xed, 0x5c, 0xf9, 0xcc, 0x6b, 0xe9, 0x38, - 0x46, 0x03, 0x4d, 0x4b, 0xa5, 0x33, 0xa3, 0x42, - 0x2c, 0x29, 0xd6, 0x75, 0x40, 0x5a, 0xe8, 0x53, - 0xb8, 0x49, 0x7d, 0xc9, 0x12, 0xf4, 0xa8, 0x35, - 0x00, 0xc8, 0x9d, 0xb7, 0x6b, 0xcd, 0xd7, 0x04, - 0x6d, 0x98, 0x32, 0xfa, 0x3d, 0x2b, 0xf3, 0xd0, - 0x24, 0x65, 0xeb, 0xb4, 0x16, 0x80, 0x35, 0x11, - 0x8f, 0x08, 0x7d, 0xdd, 0x47, 0x64, 0x3d, 0x2d, - 0xb7, 0x1f, 0x47, 0x41, 0x9a, 0xed, 0x97, 0x3e, - 0xc4, 0x38, 0x48, 0x66, 0xd4, 0x5e, 0x1d, 0xf2, - 0x16, 0xed, 0xa5, 0xbf, 0x61, 0x33, 0xf8, 0x4a, - 0x32, 0x8c, 0x11, 0x29, 0x62, 0x1e, 0xc1, 0x50, - 0x1f, 0xc4, 0x6f, 0xe3, 0xed, 0xa4, 0x60, 0x68, - 0x0b, 0x39, 0x7a, 0x42, 0xa4, 0x36, 0x8e, 0xb3, - 0xdc, 0x88, 0x45, 0x1b, 0x2b, 0x61, 0x6e, 0xec, - 0x5f, 0x1e, 0xc0, 0x5e, 0x5b, 0xd2, 0x08, 0x4b, - 0x49, 0x45, 0xd2, 0x0e, 0xa8, 0x63, 0x0d, 0x81, - 0x49, 0x2c, 0x78, 0xcf, 0x06, 0xa7, 0x8e, 0xc5, - 0x08, 0xa0, 0xc5, 0x71, 0x3b, 0x48, 0x60, 0x21, - 0x64, 0x32, 0x66, 0xa6, 0x0d, 0x99, 0x74, 0x46, - 0x78, 0xe5, 0x98, 0xb1, 0x52, 0xcf, 0x18, 0x29, - 0x89, 0x7a, 0xf7, 0x20, 0xc1, 0x8e, 0xb6, 0x89, - 0x3d, 0x8b, 0x1f, 0x81, 0xc8, 0xbb, 0xc5, 0x5c, - 0x80, 0x47, 0x39, 0x1a, 0x90, 0x51, 0xa6, 0xd0, - 0xd6, 0x54, 0x71, 0x89, 0x1a, 0xc2, 0xdf, 0xd8, - 0xac, 0x98, 0x4a, 0xa7, 0xaf, 0xf3, 0x97, 0x44, - 0x92, 0xb7, 0x51, 0xfd, 0xc5, 0xde, 0xa1, 0x39, - 0x68, 0x86, 0xe8, 0xc9, 0x4b, 0x94, 0x48, 0xe1, - 0xee, 0x63, 0x3f, 0x6c, 0x21, 0x43, 0x55, 0x2e, - 0xb8, 0x49, 0xc6, 0xd7, 0xe7, 0x2b, 0x6a, 0x7c, - 0x81, 0x21, 0x46, 0x15, 0x44, 0x51, 0x5e, 0x34, - 0x6d, 0x69, 0x97, 0x31, 0x11, 0xc9, 0x24, 0xac, - 0xda, 0x06, 0x47, 0x0b, 0x5d, 0xf2, 0x32, 0x0e, - 0x06, 0xb8, 0xf1, 0xaf, 0xf4, 0x13, 0xf9, 0xe8, - 0x88, 0x43, 0x6c, 0x31, 0x37, 0x80, 0x25, 0xbe, - 0x66, 0x72, 0x6a, 0x0b, 0xa5, 0x59, 0x17, 0x7b, - 0x11, 0x37, 0xc4, 0x31, 0xcc, 0xe1, 0xa6, 0xfb, - 0x00, 0xde, 0x36, 0xc6, 0xaf, 0xce, 0x92, 0xf1, - 0x1b, 0xc7, 0x5a, 0x88, 0x5f, 0xbb, 0xd9, 0xb1, - 0x08, 0xe6, 0xea, 0xd4, 0x3f, 0xee, 0x47, 0xda, - 0x31, 0x12, 0x30, 0xf9, 0x22, 0xba, 0xb9, 0x3a, - 0x76, 0x77, 0x71, 0x1e, 0x97, 0xea, 0x41, 0x29, - 0x80, 0x2c, 0x5d, 0xff, 0x20, 0xd0, 0xd9, 0xdb, - 0x97, 0xf8, 0x82, 0xc6, 0x33, 0x79, 0xfc, 0x27, - 0xd0, 0x8a, 0x6f, 0xec, 0xc2, 0x88, 0xcc, 0x06, - 0xe2, 0x57, 0x65, 0x4b, 0x38, 0x8e, 0x50, 0x18, - 0x80, 0x1f, 0xf1, 0x9b, 0xac, 0x2c, 0x94, 0x87, - 0xa5, 0xf4, 0x7e, 0x07, 0x31, 0x01, 0xdd, 0x37, - 0xb1, 0x0d, 0x43, 0xc9, 0x35, 0x11, 0x9b, 0x6f, - 0x70, 0xed, 0xdf, 0x9b, 0xa5, 0x14, 0x9e, 0xd6, - 0x4e, 0x8c, 0x12, 0x9d, 0x97, 0x8c, 0xbf, 0x2c, - 0x1a, 0x30, 0x6f, 0x83, 0xa6, 0x34, 0x7b, 0xfc, - 0x44, 0x5e, 0x8f, 0xd6, 0x45, 0xab, 0x0e, 0x4b, - 0x2a, 0x93, 0x93, 0x28, 0xcb, 0x55, 0xa7, 0x95, - 0x1a, 0x3a, 0x93, 0x8a, 0x06, 0xae, 0xd2, 0x4e, - 0xf3, 0x25, 0x62, 0x14, 0x9c, 0x8b, 0x7f, 0x2d, - 0xad, 0xd7, 0x5d, 0x2d, 0xb3, 0x78, 0x2b, 0x64, - 0xf4, 0xcb, 0x1f, 0x56, 0xa0, 0x94, 0x52, 0x77, - 0xc9, 0xc5, 0xe1, 0x60, 0x5a, 0x0c, 0x0e, 0xb6, - 0x5d, 0x7f, 0xe3, 0x42, 0x1c, 0x90, 0x87, 0x4b, - 0xb9, 0xcc, 0xb9, 0x45, 0xea, 0x74, 0xc9, 0x97, - 0xec, 0xa7, 0x3c, 0x94, 0x05, 0x9b, 0x77, 0xc7, - 0xc3, 0xf0, 0x8d, 0xd6, 0xe5, 0xe4, 0x94, 0xe3, - 0xf2, 0x33, 0x99, 0xf2, 0xfc, 0xe0, 0x56, 0xe9, - 0xf1, 0x30, 0xfe, 0xb6, 0xce, 0xcb, 0xb3, 0xe8, - 0xde, 0xce, 0x49, 0xe5, 0x67, 0x37, 0x57, 0x51, - 0x57, 0x42, 0x09, 0x4a, 0xc3, 0x82, 0x56, 0x38, - 0x57, 0xb5, 0xd4, 0x12, 0xd7, 0x19, 0x1c, 0xdc, - 0x5d, 0xe0, 0x68, 0x1c, 0x72, 0xc5, 0xda, 0xf8, - 0x33, 0xbe, 0xed, 0xcd, 0x88, 0xe4, 0x01, 0x23, - 0xa6, 0x17, 0xd2, 0xbd, 0x0d, 0x75, 0x95, 0x91, - 0x6a, 0x68, 0x94, 0xb9, 0x26, 0x3b, 0x6e, 0xb9, - 0x1e, 0x23, 0x80, 0x15, 0x4e, 0x0c, 0xfc, 0x52, - 0x78, 0x42, 0x58, 0xcf, 0x73, 0x20, 0xc4, 0xf0, - 0x2e, 0xad, 0x0b, 0x44, 0x71, 0xea, 0x0d, 0xd0, - 0xab, 0xeb, 0x5e, 0x63, 0x62, 0x8f, 0x48, 0x36, - 0xa2, 0x3d, 0xb2, 0x69, 0xce, 0xe0, 0x9e, 0x46, - 0xf3, 0x5b, 0x9d, 0xe8, 0x7e, 0xcb, 0x04, 0x22, - 0xad, 0x8e, 0xc6, 0xcb, 0x60, 0xb7, 0x17, 0xee, - 0xc2, 0x12, 0x16, 0xf0, 0xb7, 0x91, 0xc8, 0x52, - 0xa9, 0xf8, 0xa4, 0xc2, 0x61, 0x67, 0xd7, 0x35, - 0x0e, 0x17, 0xfa, 0x3e, 0xc7, 0x45, 0xb4, 0x63, - 0x11, 0xa6, 0x71, 0xcb, 0x8d, 0x7f, 0x14, 0x88, - 0x5f, 0xf0, 0x1b, 0xab, 0x0e, 0xf4, 0x69, 0xd0, - 0x85, 0x0f, 0xe8, 0x07, 0xe7, 0x0d, 0x36, 0xa4, - 0xb7, 0x36, 0xb2, 0xc3, 0x2c, 0x67, 0x62, 0x58, - 0xae, 0x7d, 0x55, 0x3d, 0xca, 0xb8, 0xad, 0xe6, - 0x36, 0x8a, 0xa2, 0x31, 0x79, 0x77, 0x8a, 0xdd, - 0x21, 0x4d, 0xd9, 0x15, 0x4f, 0x51, 0x0f, 0x50, - 0xe5, 0x56, 0x0c, 0x65, 0xfc, 0xec, 0x35, 0xe8, - 0x78, 0x82, 0x53, 0x0e, 0xdc, 0x65, 0xbe, 0xe6, - 0x6b, 0x25, 0xa5, 0x35, 0xda, 0x21, 0x46, 0xe1, - 0x4f, 0x83, 0x90, 0xbc, 0xf5, 0x79, 0xc3, 0x37, - 0xba, 0xd9, 0x74, 0x57, 0x5d, 0x5f, 0x09, 0xa8, - 0x76, 0x88, 0x83, 0xf9, 0x39, 0x3a, 0x14, 0x41, - 0x71, 0xfe, 0xb3, 0xfc, 0x66, 0x3e, 0xee, 0xf1, - 0x38, 0xb2, 0x1b, 0xd5, 0x57, 0xab, 0xbb, 0xad, - 0x2c, 0x02, 0x24, 0x34, 0x1f, 0xab, 0xfb, 0x6c, - 0x6f, 0xde, 0xa6, 0xf3, 0xc2, 0x65, 0xe5, 0xd8, - 0xaf, 0x16, 0x9a, 0x96, 0x4a, 0x7a, 0x86, 0xa1, - 0xa0, 0xe2, 0x22, 0xdd, 0x63, 0x71, 0x38, 0x20, - 0x79, 0xf8, 0x38, 0x23, 0x4a, 0xea, 0x8f, 0xf6, - 0xe2, 0xb8, 0x94, 0xe0, 0x4a, 0x9a, 0x34, 0xcf, - 0xac, 0xab, 0x81, 0xb0, 0x70, 0x4b, 0x14, 0xd7, - 0xd1, 0x09, 0x94, 0x9c, 0x68, 0x64, 0x4c, 0x01, - 0x5b, 0xc2, 0xf2, 0x6a, 0x9c, 0x29, 0x42, 0x87, - 0xec, 0xf1, 0x52, 0xd8, 0x46, 0xf9, 0x14, 0xc0, - 0x74, 0x5c, 0xeb, 0x7e, 0xc3, 0xd3, 0x6a, 0xd9, - 0xd7, 0x23, 0xc1, 0x5f, 0x89, 0xe2, 0xd8, 0xfe, - 0x2c, 0x18, 0xe1, 0x11, 0x80, 0xd0, 0x70, 0x9d, - 0x70, 0x02, 0xa5, 0x0f, 0x87, 0xd1, 0xc7, 0x3d, - 0xbb, 0x61, 0x6f, 0xd8, 0xde, 0x30, 0x33, 0x9d, - 0x83, 0xda, 0x5a, 0x8e, 0xd5, 0x03, 0x21, 0xcc, - 0x12, 0xf9, 0x4d, 0xff, 0x84, 0xd9, 0xe5, 0x44, - 0xf1, 0x7e, 0xc3, 0x4a, 0x60, 0xeb, 0x41, 0x4b, - 0x28, 0x78, 0xcc, 0x1a, 0x05, 0xc2, 0x64, 0xa0, - 0x66, 0xdd, 0xd3, 0x7f, 0x0c, 0x50, 0x4f, 0x0e, - 0x6c, 0xcd, 0x0f, 0x31, 0x1e, 0xb5, 0x21, 0x2d, - 0xe3, 0x2e, 0x9d, 0x65, 0x51, 0x25, 0xe4, 0xf4 + 0xc9, 0xbe, 0xad, 0x6b, 0x0c, 0x11, 0x14, 0x38, + 0x9b, 0xd4, 0x76, 0x1c, 0x73, 0xab, 0x90, 0x95, + 0xb5, 0x80, 0x9d, 0xaa, 0xc9, 0xf6, 0x59, 0xbb, + 0x56, 0x4a, 0xf2, 0x26, 0x17, 0x30, 0x52, 0xa4, + 0xa3, 0xe7, 0xf2, 0xe5, 0xfd, 0x47, 0xd2, 0xb0, + 0x2a, 0xae, 0xb5, 0x18, 0x9e, 0x06, 0xb9, 0xf4, + 0xae, 0x98, 0xb6, 0x19, 0xcb, 0x63, 0xef, 0xbd, + 0xf3, 0x98, 0x9a, 0x94, 0xb3, 0x6e, 0x8e, 0xa0, + 0xd7, 0x00, 0x63, 0x3b, 0x95, 0x0a, 0x0a, 0xe2, + 0xa7, 0x8e, 0xd9, 0x2e, 0x85, 0xc8, 0x5c, 0x70, + 0xe1, 0x3e, 0x62, 0x6f, 0xb2, 0x63, 0xfa, 0xc9, + 0x68, 0x15, 0x21, 0xc3, 0xab, 0x22, 0xfd, 0xab, + 0x29, 0x17, 0x3c, 0x96, 0x16, 0xa2, 0xb0, 0x37, + 0x08, 0x3f, 0xf7, 0xb2, 0xe0, 0x19, 0xb5, 0xbc, + 0xde, 0x06, 0x8f, 0xac, 0x25, 0x7e, 0xf8, 0xf1, + 0x27, 0x98, 0x41, 0x16, 0x93, 0xc1, 0xbd, 0xcc, + 0x65, 0x42, 0x09, 0x97, 0xa5, 0x13, 0xa8, 0xa6, + 0x95, 0x02, 0x62, 0x0b, 0xe8, 0xe4, 0xce, 0x73, + 0x62, 0xe4, 0x12, 0xa7, 0x6c, 0xf5, 0x1c, 0x1f, + 0x24, 0x33, 0xf1, 0xab, 0x64, 0xce, 0x0e, 0x5d, + 0x2f, 0x56, 0xd7, 0xc9, 0xad, 0xe9, 0x94, 0xd0, + 0xe3, 0x5d, 0x0a, 0xee, 0xf3, 0xac, 0x51, 0x5b, + 0x48, 0x24, 0x37, 0x66, 0x4d, 0x8c, 0x1d, 0x25, + 0xe5, 0xa5, 0x50, 0x7c, 0xf8, 0x0f, 0x97, 0x0d, + 0x3e, 0xa7, 0x22, 0x6a, 0xac, 0xdc, 0x45, 0x7c, + 0xbf, 0x88, 0xa0, 0x56, 0x0a, 0xa3, 0x5b, 0xb2, + 0xc5, 0xc4, 0x55, 0x86, 0x7e, 0x21, 0x59, 0x91, + 0x0a, 0x35, 0x81, 0x0b, 0xef, 0xe3, 0xaa, 0x10, + 0xeb, 0x04, 0xd8, 0xd5, 0x71, 0x47, 0xcb, 0x8f, + 0x66, 0xd2, 0xb0, 0x70, 0xba, 0xc4, 0x3d, 0x1f, + 0x1f, 0xfd, 0xd5, 0x7a, 0x93, 0x99, 0x95, 0x1f, + 0x64, 0x96, 0x57, 0x27, 0xbc, 0xb9, 0xf6, 0x6a, + 0xd4, 0x23, 0x09, 0xda, 0xfc, 0x79, 0x9c, 0x1c, + 0x54, 0x0a, 0xf1, 0xaf, 0x93, 0xef, 0xf6, 0x8a, + 0x86, 0xd6, 0x1f, 0x51, 0x15, 0xdb, 0x66, 0x2d, + 0xee, 0x7a, 0xc9, 0xa3, 0x62, 0x67, 0x77, 0x62, + 0xb6, 0xa1, 0x64, 0xa0, 0xfa, 0x0a, 0x4d, 0x85, + 0x9e, 0x4b, 0x8c, 0x8d, 0xbd, 0xb4, 0xe1, 0x83, + 0xf5, 0xe6, 0x80, 0x8f, 0xc5, 0x22, 0x29, 0x65, + 0x0c, 0xaf, 0x7c, 0xf3, 0xe1, 0x6d, 0xe3, 0xd8, + 0x95, 0xd1, 0x48, 0xc3, 0x54, 0x48, 0xab, 0x8c, + 0x27, 0x53, 0xc9, 0x83, 0x1b, 0x24, 0xbd, 0x49, + 0x21, 0x49, 0x7e, 0xaa, 0x19, 0x25, 0x65, 0xca, + 0xbf, 0xd8, 0x3c, 0x0c, 0x68, 0xdf, 0xe7, 0xd3, + 0x92, 0xab, 0xf5, 0xe5, 0xe6, 0xf8, 0x4b, 0xb9, + 0xf5, 0xaf, 0x4b, 0x71, 0x18, 0xc0, 0xb5, 0x58, + 0x10, 0x5f, 0x9c, 0x10, 0xc9, 0xb6, 0xd7, 0x06, + 0x82, 0xe1, 0xde, 0x6e, 0x06, 0x89, 0xd7, 0x10, + 0x6a, 0x63, 0x74, 0xbd, 0x34, 0xae, 0xd7, 0x22, + 0x9e, 0x6c, 0xb3, 0x56, 0xf2, 0xea, 0x65, 0xe6, + 0x80, 0xce, 0x7b, 0x1e, 0x2c, 0x37, 0x04, 0xe1, + 0x16, 0xa3, 0x85, 0x42, 0x82, 0x6e, 0x8a, 0x00, + 0x11, 0x41, 0xba, 0xf2, 0xe3, 0x4d, 0xe3, 0x7a, + 0x03, 0x04, 0x09, 0x86, 0xd4, 0xc0, 0xcd, 0x5d, + 0x57, 0xf0, 0x70, 0x1c, 0xe9, 0x30, 0x98, 0x6f, + 0xd9, 0x52, 0x5b, 0x58, 0xe2, 0xe5, 0x9f, 0x45, + 0xb8, 0xdd, 0x04, 0xc0, 0xf3, 0x5b, 0x0f, 0x47, + 0x97, 0x0c, 0xc6, 0x70, 0x79, 0x61, 0x8e, 0xb9, + 0xe6, 0xd9, 0x1e, 0x9b, 0x0f, 0x8c, 0x6d, 0x2e, + 0x16, 0x5c, 0xf4, 0x48, 0xa2, 0xc1, 0xeb, 0xf7, + 0x1b, 0x65, 0x37, 0xe0, 0xf3, 0x75, 0x18, 0x5d, + 0xfa, 0xfe, 0xf6, 0x98, 0xb6, 0x23, 0x9b, 0xb3, + 0x55, 0x80, 0xb3, 0x15, 0xbc, 0xb5, 0xed, 0x40, + 0x8c, 0x35, 0x7f, 0x19, 0x2d, 0xef, 0x89, 0xbc, + 0x1b, 0x75, 0xcd, 0xd6, 0xaa, 0xe8, 0xb5, 0xfa, + 0xf0, 0xc3, 0xe1, 0x38, 0x03, 0xf6, 0xbd, 0xfa, + 0x76, 0xfb, 0x40, 0x7f, 0xcb, 0xda, 0x79, 0x0c, + 0x32, 0x9b, 0x3e, 0xe4, 0x2f, 0xd3, 0xd3, 0xb0, + 0x3b, 0xd5, 0x00, 0x3f, 0x0b, 0xc4, 0x32, 0xf7, + 0xba, 0x39, 0x63, 0x11, 0x12, 0x45, 0x2d, 0xfd, + 0x12, 0x14, 0x04, 0x33, 0xff, 0x89, 0x80, 0xeb, + 0x6a, 0x52, 0x6b, 0xa8, 0x5e, 0xf9, 0x94, 0x77, + 0x37, 0x8b, 0x4d, 0xc7, 0x66, 0x35, 0xa5, 0xcd, + 0x50, 0x40, 0xe4, 0x3b, 0x8c, 0x1f, 0xe4, 0xee, + 0x5e, 0x15, 0x8e, 0x42, 0x3b, 0xfc, 0x0c, 0x89, + 0x3c, 0x1d, 0x56, 0x13, 0xbe, 0xd0, 0x8d, 0xa7, + 0x19, 0xc9, 0x07, 0x31, 0x84, 0xee, 0xb3, 0x6f, + 0xd3, 0x57, 0x38, 0x0f, 0xb1, 0x87, 0x3d, 0x8c, + 0xbd, 0x36, 0xe2, 0x25, 0x5e, 0x98, 0x5b, 0x1b, + 0x76, 0x81, 0x97, 0x43, 0xa6, 0x58, 0x4a, 0x9b, + 0x3a, 0x58, 0x09, 0x96, 0xc9, 0xc2, 0xee, 0xd9, + 0xbb, 0xbf, 0xff, 0x78, 0xa6, 0x20, 0x4b, 0x5e, + 0x5e, 0xea, 0xe5, 0xf4, 0xef, 0xd2, 0x66, 0x00, + 0x78, 0xb3, 0x7f, 0x07, 0x54, 0xab, 0x5d, 0xa8, + 0x62, 0xe6, 0x66, 0xb1, 0x45, 0xb5, 0xf2, 0x3f, + 0x3d, 0x09, 0x77, 0x79, 0x99, 0x29, 0xdf, 0xa2, + 0xae, 0xdd, 0xa5, 0x3d, 0x15, 0x2e, 0xda, 0x1d, + 0x0d, 0x0e, 0x4e, 0xa4, 0x3f, 0x6e, 0xd8, 0x89, + 0xbb, 0x96, 0x5e, 0xef, 0xe0, 0xa7, 0xc6, 0x85, + 0xbb, 0x36, 0x77, 0x0e, 0xaa, 0x87, 0x42, 0x42, + 0xc0, 0xe2, 0x29, 0xcf, 0x6c, 0xe5, 0x6d, 0xef, + 0xa5, 0xae, 0xae, 0x64, 0xd0, 0xc4, 0x0d, 0xda, + 0x8a, 0xa2, 0x6e, 0xae, 0xb3, 0x14, 0x58, 0xf0, + 0x70, 0xa3, 0xbc, 0x72, 0xe1, 0x61, 0x9e, 0xe9, + 0xb5, 0xf6, 0x42, 0x29, 0x1c, 0x56, 0xdf, 0x5b, + 0x7e, 0x43, 0xdb, 0x6c, 0x80, 0x2f, 0xc7, 0x4f, + 0x4f, 0x3f, 0x9b, 0x5c, 0x0d, 0x35, 0x5c, 0x3a, + 0xae, 0x52, 0x0a, 0xa3, 0x12, 0x29, 0xd1, 0x2f, + 0x3e, 0x7c, 0xc5, 0xd4, 0x8e, 0x69, 0x11, 0x91, + 0xa3, 0x6b, 0x28, 0x37, 0x65, 0xf4, 0x13, 0x3f, + 0x0f, 0xf1, 0xfe, 0x2f, 0x01, 0xc6, 0x64, 0x8b, + 0x27, 0x98, 0xa7, 0x4e, 0xb5, 0xd8, 0x42, 0xa2, + 0x48, 0xf5, 0x24, 0xa7, 0xe7, 0xf8, 0x97, 0x42, + 0x11, 0x29, 0x7b, 0x44, 0xf0, 0xdd, 0x19, 0xf3, + 0x86, 0xe8, 0x6b, 0xe6, 0xba, 0x78, 0x2d, 0xe7, + 0x7f, 0xde, 0x88, 0x72, 0x26, 0xf3, 0x7a, 0x1c, + 0x77, 0xbc, 0x5e, 0xdd, 0xee, 0xe5, 0xbf, 0x46, + 0xb6, 0x7f, 0xb7, 0x47, 0x8d, 0x55, 0x98, 0x65, + 0xf2, 0x62, 0xca, 0xa8, 0x4d, 0x64, 0xa8, 0xce, + 0x59, 0xe4, 0xdf, 0x08, 0x18, 0xe1, 0x48, 0x61, + 0x52, 0x6a, 0xcd, 0x34, 0x83, 0x60, 0x0f, 0x3d, + 0xae, 0x79, 0x59, 0xd3, 0x5d, 0x81, 0x81, 0xca, + 0x6a, 0x81, 0xce, 0x79, 0x1b, 0xe0, 0x07, 0x52, + 0xda, 0x77, 0x59, 0x44, 0x6a, 0x2c, 0xfb, 0xe0, + 0x0b, 0x82, 0x48, 0xb9, 0x34, 0x91, 0xde, 0xbd, + 0x52, 0x02, 0x20, 0xb7, 0x55, 0x41, 0x6d, 0x2f, + 0xc6, 0xb7, 0xc8, 0xaf, 0x2f, 0xf7, 0x5e, 0x5b, + 0xcb, 0xb8, 0xe7, 0x53, 0x73, 0x80, 0xa5, 0x72, + 0x1c, 0x77, 0x48, 0x49, 0x57, 0xa6, 0x92, 0x71, + 0xd8, 0xba, 0xfc, 0xe0, 0xf1, 0x66, 0x73, 0x5f, + 0xf8, 0x69, 0x23, 0x2d, 0xe5, 0xd3, 0x81, 0xaf, + 0xbf, 0x0e, 0x44, 0xd6, 0x91, 0x72, 0xb7, 0x9a, + 0x35, 0x19, 0x19, 0x49, 0xde, 0x09, 0x70, 0x3b, + 0x94, 0x22, 0x2b, 0x13, 0xc3, 0x85, 0xc6, 0x08, + 0x1e, 0x6d, 0x2e, 0xde, 0x1e, 0x57, 0xfe, 0x18, + 0x4e, 0xf8, 0xf6, 0x01, 0x96, 0xb9, 0xa3, 0xa7, + 0xb7, 0xef, 0xf7, 0x49, 0x71, 0x91, 0xca, 0x87, + 0x41, 0xb5, 0xa0, 0x1e, 0x79, 0xcb, 0x69, 0xa6, + 0x11, 0x42, 0xe6, 0xf5, 0xd0, 0x80, 0xfb, 0xb3, + 0xe5, 0x66, 0xf7, 0x9e, 0x14, 0x6f, 0x75, 0xc8, + 0xa1, 0x09, 0x78, 0x60, 0x84, 0x1b, 0x47, 0x47, + 0xdf, 0x60, 0x4d, 0xba, 0x95, 0x4e, 0x4a, 0x8d, + 0x9e, 0x0d, 0xcc, 0xc1, 0xf6, 0x09, 0xd0, 0x5c, + 0xf8, 0xd3, 0x12, 0x19, 0xec, 0xd6, 0x0c, 0x31, + 0x2d, 0xe6, 0x84, 0x55, 0x2f, 0x09, 0x22, 0x7c, + 0xb8, 0x29, 0x29, 0x1c, 0x64, 0x57, 0x32, 0xc5, + 0xf5, 0xd4, 0xd7, 0x11, 0x63, 0x9f, 0x42, 0xa2, + 0x30, 0x80, 0xaa, 0x34, 0xfe, 0x14, 0x20, 0xf2, + 0x19, 0xbd, 0x6b, 0xcf, 0x4e, 0x3b, 0x29, 0xb9, + 0xd0, 0x22, 0x93, 0xb2, 0xda, 0x81, 0x38, 0x3e, + 0x0a, 0x51, 0xd2, 0xbb, 0x18, 0x6c, 0x7b, 0x0a, + 0x21, 0x1a, 0x0c, 0xd6, 0x3a, 0xcb, 0xfc, 0x02, + 0x10, 0x40, 0x1e, 0x98, 0x5d, 0x43, 0x6b, 0x38, + 0x03, 0xd5, 0x60, 0x1c, 0x24, 0x13, 0x6a, 0xfd, + 0x15, 0x62, 0x52, 0x2e, 0x45, 0xb4, 0x57, 0xcb, + 0x43, 0x91, 0x78, 0xbe, 0x4a, 0x87, 0xcc, 0xe4, + 0x03, 0x46, 0xd3, 0x4a, 0xe0, 0xf3, 0xc3, 0x91, + 0x03, 0xc8, 0xa3, 0xeb, 0xc9, 0xc8, 0x6c, 0x8d, + 0xb8, 0xfc, 0x55, 0x61, 0xeb, 0x0f, 0x3a, 0x14, + 0x3d, 0x4e, 0x9f, 0xe9, 0x3a, 0x5c, 0xba, 0x6f, + 0x6f, 0xca, 0xe5, 0x65, 0x0d, 0x3f, 0x43, 0xd2, + 0x66, 0x8a, 0x59, 0x56, 0xc9, 0x22, 0x89, 0x3b, + 0x81, 0x66, 0x47, 0xde, 0xd0, 0xaf, 0xc0, 0x52, + 0xa6, 0xc3, 0xd9, 0xd0, 0x1a, 0x3d, 0x3a, 0xf0, + 0xf1, 0xba, 0x80, 0x7f, 0xf1, 0x04, 0x91, 0xe1, + 0x31, 0xdc, 0x15, 0xe1, 0x65, 0xcf, 0xd0, 0x65, + 0x0a, 0x1f, 0x2c, 0x31, 0x3d, 0x79, 0x56, 0x14, + 0x1e, 0xdc, 0xc6, 0x1c, 0xb9, 0x0e, 0x9e, 0x7a, + 0xbf, 0x2f, 0xe3, 0x5f, 0xc9, 0xdc, 0x1b, 0xde, + 0x88, 0x93, 0x9f, 0xa1, 0x1f, 0x7b, 0xbe, 0x3e, + 0xb4, 0xd8, 0xff, 0xa6, 0x43, 0xb0, 0x74, 0xd7, + 0x4f, 0x45, 0x11, 0x35, 0x86, 0xe9, 0xbb, 0x12, + 0x06, 0x00, 0x03, 0xd7, 0x19, 0x41, 0xf2, 0xda, + 0x09, 0x8d, 0xc0, 0xe9, 0x6c, 0xad, 0x32, 0x55, + 0xcf, 0x32, 0x8e, 0xa2, 0xd3, 0x30, 0x8c, 0x1f, + 0x45, 0x85, 0xe8, 0x9c, 0x61, 0x3c, 0x42, 0x6b, + 0x7e, 0x79, 0x8e, 0x1e, 0xc4, 0xe9, 0x8f, 0xe6, + 0xc7, 0x1e, 0x74, 0x91, 0xf5, 0xec, 0xa0, 0xcd, + 0x05, 0x11, 0x58, 0x61, 0xbd, 0x16, 0x0e, 0x3f, + 0xe7, 0x3a, 0x58, 0xa0, 0x26, 0xba, 0x53, 0x8e, + 0x0e, 0x25, 0x6b, 0x92, 0xf1, 0xd7, 0xa2, 0x49, + 0x75, 0x70, 0x59, 0x48, 0x56, 0x86, 0x0f, 0xfd, + 0x06, 0xb6, 0x01, 0xac, 0x57, 0x55, 0x92, 0xf4, + 0xac, 0x61, 0x2b, 0x5d, 0xe7, 0x86, 0x60, 0x42, + 0x12, 0x3e, 0xbc, 0x60, 0xc5, 0x57, 0x68, 0xe3, + 0xa7, 0x60, 0x0a, 0x32, 0x60, 0x55, 0x1f, 0x2b, + 0xea, 0x22, 0xbb, 0xf6, 0xb6, 0xc8, 0x24, 0x6e, + 0x80, 0xf9, 0x12, 0x5c, 0x4b, 0xb9, 0xdb, 0x35, + 0x4d, 0xd6, 0x4a, 0xe6, 0x95, 0xc1, 0x5f, 0x50, + 0x71, 0xf4, 0xab, 0xb9, 0x63, 0x92, 0x07, 0xca, + 0xc7, 0x33, 0x1b, 0x31, 0x0f, 0x69, 0xa0, 0x5f, + 0x54, 0xb9, 0x95, 0xde, 0x52, 0x9a, 0x02, 0x3f, + 0x03, 0x3b, 0x05, 0x5d, 0xb9, 0x52, 0x87, 0xa1, + 0x4b, 0xa3, 0x0a, 0x7c, 0xc5, 0x26, 0xbb, 0x72, + 0x4c, 0x41, 0x7f, 0xba, 0x29, 0x06, 0x36, 0xa9, + 0x96, 0xf2, 0x86, 0xe3, 0xe9, 0xe9, 0x39, 0xe4, + 0xfe, 0x1c, 0x39, 0x8b, 0x5c, 0x65, 0x99, 0x95, + 0x9d, 0x0b, 0x44, 0x45, 0xa3, 0x27, 0xec, 0x46, + 0x9a, 0x16, 0x53, 0xcf, 0xae, 0xa7, 0x55, 0x2c, + 0xec, 0xec, 0x08, 0x5c, 0xca, 0xa6, 0x89, 0x38, + 0xae, 0x4a, 0xc3, 0xc4, 0x24, 0xf7, 0xe4, 0x80, + 0x43, 0x9e, 0xbd, 0x2c, 0x99, 0x2b, 0x5f, 0x6f, + 0x95, 0xec, 0x24, 0x4b, 0x65, 0x7d, 0xbd, 0xea, + 0xa9, 0xae, 0x11, 0x0a, 0xaf, 0x4d, 0x68, 0xbf, + 0x4e, 0x27, 0x41, 0x0d, 0x43, 0xce, 0xef, 0x3e, + 0x88, 0xe9, 0xc7, 0x17, 0xdd, 0x44, 0xc9, 0xee #endif }; WOLFSSL_SMALL_STACK_STATIC const byte kyber1024_ss[] = { -#ifndef WOLFSSL_ML_KEM +#ifdef WOLFSSL_KYBER_ORIGINAL 0xB1, 0x0F, 0x73, 0x94, 0x92, 0x6A, 0xD3, 0xB4, 0x9C, 0x5D, 0x62, 0xD5, 0xAE, 0xB5, 0x31, 0xD5, 0x75, 0x75, 0x38, 0xBC, 0xC0, 0xDA, 0x9E, 0x55, 0x0D, 0x43, 0x8F, 0x1B, 0x61, 0xBD, 0x74, 0x19 #else - 0x63, 0xa1, 0x03, 0x90, 0x74, 0xf0, 0x1f, 0x26, - 0x51, 0x21, 0x3a, 0xd9, 0x35, 0x0d, 0x65, 0x61, - 0xcb, 0x03, 0xa6, 0x04, 0x00, 0xe7, 0x41, 0x18, - 0xbb, 0x44, 0x64, 0xd8, 0x7b, 0x9d, 0xb2, 0x05 + 0x48, 0x9d, 0xd1, 0xe9, 0xc2, 0xbe, 0x4a, 0xf3, + 0x48, 0x2b, 0xdb, 0x35, 0xbb, 0x26, 0xce, 0x76, + 0x0e, 0x6e, 0x41, 0x4d, 0xa6, 0xec, 0xbe, 0x48, + 0x99, 0x85, 0x74, 0x8a, 0x82, 0x5f, 0x1c, 0xd6 #endif }; @@ -40653,13 +41940,12 @@ static wc_test_ret_t dilithium_param_vfy_test(int param, const byte* pubKey, ret = wc_dilithium_set_level(key, param); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); - ret = wc_dilithium_import_public(pubKey, pubKeyLen, key); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); - ret = wc_dilithium_verify_msg(sig, sigLen, msg, (word32)sizeof(msg), &res, - key); + ret = wc_dilithium_verify_ctx_msg(sig, sigLen, NULL, 0, msg, + (word32)sizeof(msg), &res, key); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); if (res != 1) @@ -40674,382 +41960,320 @@ static wc_test_ret_t dilithium_param_vfy_test(int param, const byte* pubKey, static wc_test_ret_t dilithium_param_44_vfy_test(void) { WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_44_pub_key[] = { - 0xea, 0x05, 0x24, 0x0d, 0x80, 0x72, 0x25, 0x55, 0xf4, 0x5b, - 0xc2, 0x13, 0x8b, 0x87, 0x5d, 0x31, 0x99, 0x2f, 0x1d, 0xa9, - 0x41, 0x09, 0x05, 0x76, 0xa7, 0xb7, 0x5e, 0x8c, 0x44, 0xe2, - 0x64, 0x79, 0xa0, 0xec, 0x1f, 0x24, 0xb6, 0xc8, 0x05, 0x5b, - 0xc1, 0x18, 0xb0, 0xb7, 0xcf, 0x8c, 0x60, 0x67, 0x6b, 0x81, - 0x44, 0x27, 0xb6, 0x0e, 0xfd, 0x9b, 0xc3, 0xcb, 0x52, 0x31, - 0xfa, 0xc9, 0x34, 0x8d, 0x22, 0x1e, 0x07, 0x9d, 0x96, 0x6a, - 0x63, 0x83, 0x5c, 0xd7, 0x83, 0x2d, 0x7f, 0x48, 0x64, 0x79, - 0xca, 0xb4, 0x9f, 0xa2, 0x02, 0xb7, 0x86, 0x1d, 0x0e, 0xc7, - 0xf9, 0x6c, 0x07, 0xc0, 0x35, 0x6a, 0x34, 0x79, 0x7c, 0xb8, - 0x0f, 0xed, 0x98, 0x50, 0xfb, 0x51, 0xe0, 0x36, 0x44, 0x4c, - 0xc6, 0x35, 0xa2, 0xbb, 0x55, 0xb0, 0x5c, 0x39, 0x08, 0x02, - 0x20, 0x35, 0x5c, 0x56, 0x6d, 0x2e, 0xb9, 0xef, 0x21, 0x26, - 0x87, 0x87, 0x85, 0x8a, 0x32, 0xb5, 0xa7, 0x68, 0x70, 0x3a, - 0xfd, 0x0d, 0x21, 0x48, 0x91, 0xa3, 0x29, 0xc1, 0x2a, 0x38, - 0xe5, 0x26, 0x31, 0x1f, 0x42, 0xde, 0x0b, 0x25, 0xff, 0x1d, - 0x6b, 0xb4, 0xe0, 0x5d, 0x2d, 0xcf, 0x44, 0xd5, 0x7d, 0xc4, - 0xf6, 0x95, 0xf2, 0x06, 0x4f, 0x83, 0x88, 0x9d, 0x1e, 0xeb, - 0x1c, 0x09, 0x45, 0x62, 0x67, 0x3d, 0xff, 0x51, 0x47, 0xe8, - 0xbc, 0x9b, 0x03, 0x1f, 0xc7, 0x72, 0x65, 0xce, 0xa8, 0x8c, - 0xc2, 0xa0, 0xc2, 0xbd, 0x5b, 0x7c, 0x17, 0x16, 0x8b, 0x72, - 0xfa, 0xb1, 0xbd, 0xdf, 0x49, 0xd6, 0xa1, 0x00, 0x65, 0xbe, - 0x82, 0xe7, 0x68, 0xc7, 0xe7, 0xbc, 0xc2, 0xa4, 0xdb, 0xaa, - 0xcc, 0xea, 0x41, 0x52, 0x7f, 0x56, 0xb4, 0x68, 0x1f, 0x92, - 0x96, 0x0f, 0xce, 0xd4, 0xd0, 0x87, 0x4c, 0x4a, 0x73, 0xb5, - 0x6c, 0xd4, 0x69, 0x55, 0x15, 0x47, 0xdc, 0x94, 0x7f, 0xd2, - 0x54, 0x5e, 0xb2, 0x90, 0xc2, 0x47, 0xe4, 0xf5, 0xde, 0x8b, - 0x9b, 0xc6, 0x5d, 0x50, 0x95, 0x60, 0xe0, 0xf0, 0xa7, 0x4e, - 0xe0, 0xcd, 0x41, 0x09, 0xef, 0xb3, 0x3d, 0x90, 0x5c, 0x77, - 0x54, 0xec, 0x9e, 0x5d, 0x8a, 0xe7, 0x09, 0x5c, 0xc9, 0x58, - 0x0c, 0xd0, 0x42, 0x35, 0xd2, 0x14, 0x59, 0x38, 0x69, 0xad, - 0xf9, 0xb5, 0xbf, 0x8a, 0x8e, 0x33, 0xd8, 0x5e, 0x7a, 0x55, - 0xd0, 0x53, 0x15, 0x40, 0x4e, 0xc5, 0x86, 0xd7, 0x8f, 0x5f, - 0x2f, 0x55, 0x82, 0xc2, 0x4f, 0x16, 0xe5, 0xea, 0x1c, 0xbc, - 0xff, 0x5e, 0x1f, 0x39, 0x46, 0x70, 0x54, 0x7a, 0x3a, 0x27, - 0x16, 0x1a, 0x2b, 0x6c, 0xd2, 0xb7, 0x80, 0xd3, 0xd1, 0x9d, - 0x25, 0x59, 0xed, 0xe6, 0x51, 0xb1, 0xf2, 0xad, 0x7e, 0x51, - 0x78, 0x14, 0x2b, 0x19, 0xae, 0x64, 0x72, 0x0f, 0xd8, 0x18, - 0x79, 0x8e, 0x66, 0x88, 0xd3, 0xa4, 0xa3, 0xc3, 0x76, 0x21, - 0xcb, 0xe4, 0x79, 0x5e, 0x95, 0x74, 0xe3, 0x31, 0x18, 0x79, - 0xed, 0xc7, 0xe7, 0xfb, 0x86, 0x48, 0x1b, 0x7b, 0x75, 0x5b, - 0x7f, 0x7c, 0x82, 0xc5, 0xab, 0x11, 0xb4, 0x5d, 0x59, 0x6f, - 0x78, 0xb2, 0xa5, 0x39, 0xc6, 0x63, 0x38, 0x6c, 0xeb, 0x50, - 0x06, 0x14, 0x76, 0xf0, 0xe8, 0xfb, 0x11, 0x95, 0x1f, 0x9d, - 0x9c, 0xa6, 0xe1, 0xe2, 0x0d, 0xa3, 0x66, 0xfc, 0x20, 0x83, - 0x50, 0x0e, 0x53, 0x75, 0xb5, 0x12, 0xf4, 0xdf, 0x31, 0x46, - 0x83, 0xac, 0x5b, 0xf3, 0x99, 0xa6, 0xd1, 0x7b, 0x2b, 0xc5, - 0xdc, 0x71, 0x07, 0x27, 0x33, 0x35, 0x34, 0xf5, 0x30, 0x19, - 0xc1, 0x3b, 0xba, 0x8a, 0xaf, 0x7e, 0x49, 0x93, 0x48, 0x5b, - 0x38, 0xc0, 0xbc, 0x2e, 0xc7, 0x59, 0x1b, 0xd9, 0xf5, 0xcc, - 0x86, 0xf5, 0x7b, 0x4d, 0xd7, 0x39, 0xa7, 0xa2, 0x56, 0x20, - 0x48, 0x98, 0x7d, 0x4f, 0x75, 0x56, 0x9b, 0xb8, 0x95, 0x45, - 0x17, 0xf3, 0x86, 0x3d, 0x97, 0x0a, 0x49, 0x1b, 0xca, 0xff, - 0x20, 0xc0, 0x24, 0x2c, 0x51, 0xc2, 0x0a, 0x3c, 0xbf, 0x07, - 0x60, 0x1c, 0x88, 0x85, 0x9b, 0x85, 0x2d, 0x4a, 0xfe, 0x5a, - 0x1c, 0x90, 0xf5, 0x90, 0x12, 0xd3, 0x03, 0x3c, 0x8c, 0x2e, - 0x95, 0x4a, 0x47, 0x76, 0x0f, 0x1f, 0x5d, 0x9e, 0xed, 0xc5, - 0x64, 0xc4, 0x9b, 0xbf, 0x86, 0xc5, 0x63, 0x84, 0x33, 0x00, - 0xf1, 0x26, 0x18, 0x21, 0xf3, 0x88, 0x1a, 0x08, 0x18, 0x6d, - 0x2f, 0xef, 0xd5, 0xeb, 0x2f, 0x69, 0xc8, 0x6e, 0x92, 0x34, - 0xfc, 0x72, 0x3d, 0x9a, 0xa7, 0x9e, 0x51, 0xfb, 0x56, 0xe3, - 0xdc, 0xf4, 0x8f, 0x9b, 0x6d, 0x0d, 0x2a, 0xec, 0x66, 0x12, - 0x26, 0x35, 0xbd, 0x61, 0xc2, 0x67, 0x19, 0xf5, 0x7e, 0xa1, - 0x67, 0xa2, 0x9c, 0x3b, 0x67, 0xb0, 0xc2, 0x51, 0x6a, 0x37, - 0x7c, 0x48, 0xe9, 0x4b, 0xb9, 0xa3, 0x38, 0x2f, 0xfc, 0xde, - 0xb4, 0x7c, 0xda, 0x52, 0x84, 0x0b, 0xb0, 0xd9, 0x08, 0xe9, - 0x7a, 0x4a, 0x6f, 0x79, 0x29, 0x3d, 0xc4, 0x5c, 0x78, 0xee, - 0x63, 0xb6, 0x96, 0x68, 0xd9, 0x82, 0x4e, 0xc1, 0x1b, 0x6f, - 0x52, 0xf5, 0xb3, 0xfb, 0xe8, 0xc4, 0x2a, 0x07, 0xc6, 0x3b, - 0x85, 0x0d, 0xf4, 0xbf, 0xb0, 0x6b, 0xfb, 0xce, 0x1d, 0xb4, - 0xbf, 0x63, 0x0b, 0x91, 0x67, 0xc4, 0xa3, 0x06, 0xa4, 0xaf, - 0x6c, 0xd3, 0xe5, 0x8b, 0x87, 0x4e, 0x64, 0x9c, 0xb1, 0xf3, - 0x70, 0x7c, 0x68, 0x43, 0x46, 0x13, 0x46, 0xee, 0x27, 0x75, - 0x12, 0x45, 0x42, 0xde, 0xa5, 0x8d, 0xcf, 0xf7, 0x09, 0x87, - 0xa8, 0x80, 0x3d, 0xb6, 0x45, 0xee, 0x41, 0x2d, 0x7c, 0x45, - 0x01, 0x9d, 0xaa, 0x78, 0xa8, 0x10, 0xa4, 0xfd, 0xb5, 0x5f, - 0xee, 0x0f, 0x77, 0xba, 0x73, 0xff, 0x49, 0xdc, 0xfa, 0x39, - 0xd6, 0xa3, 0x6f, 0x25, 0xb9, 0x63, 0x2c, 0x92, 0xc5, 0xdf, - 0xfb, 0xba, 0x89, 0xf9, 0xfa, 0x94, 0x5b, 0x6f, 0x5a, 0x4d, - 0x1c, 0xe4, 0xc9, 0x10, 0xf9, 0xa0, 0xe8, 0xc4, 0xcb, 0x55, - 0x1a, 0xdb, 0x56, 0x5f, 0x8e, 0x91, 0x03, 0x23, 0xca, 0xb0, - 0x1f, 0xef, 0xb8, 0x6c, 0x13, 0x5a, 0x99, 0x25, 0xf0, 0x49, - 0xa9, 0x5a, 0x45, 0xf7, 0xfd, 0x1a, 0xc2, 0x71, 0x06, 0xe3, - 0x2d, 0x25, 0x64, 0xb0, 0x52, 0x12, 0x03, 0x62, 0xc7, 0xb6, - 0xf9, 0xdc, 0x1f, 0x78, 0xff, 0x8b, 0xfa, 0xde, 0x7f, 0x71, - 0xa6, 0x35, 0x3e, 0xac, 0x20, 0x54, 0x94, 0xa7, 0x2e, 0x9d, - 0x47, 0x17, 0x4b, 0xad, 0x92, 0xb3, 0x14, 0x26, 0x8c, 0x5a, - 0xd0, 0x16, 0x4b, 0x22, 0xe9, 0x0c, 0x79, 0x6b, 0x8e, 0xac, - 0x0d, 0x12, 0xf5, 0x66, 0x8e, 0x82, 0x1a, 0x44, 0xf3, 0xe9, - 0x56, 0x5a, 0xcd, 0x1c, 0x1b, 0x81, 0x7b, 0x63, 0x59, 0xfe, - 0xc8, 0xc0, 0xe3, 0xda, 0x16, 0x6b, 0x6f, 0x0d, 0xba, 0x0e, - 0x47, 0x12, 0x86, 0x9e, 0xf0, 0x3b, 0x4d, 0x87, 0x3b, 0xf2, - 0x75, 0x73, 0x2d, 0xdf, 0xca, 0x76, 0x0b, 0xbd, 0xe7, 0xb7, - 0x74, 0x24, 0xf3, 0xc6, 0xe6, 0x75, 0x3f, 0x8b, 0x6a, 0xd9, - 0xad, 0xed, 0xc0, 0x70, 0x04, 0x1e, 0x0b, 0x8e, 0x8b, 0x7f, - 0xea, 0xbc, 0x39, 0x6b, 0x8a, 0x44, 0xa6, 0x9a, 0x2d, 0x0d, - 0x8c, 0x21, 0x60, 0x09, 0xd2, 0x4a, 0xe0, 0x62, 0xcf, 0xfa, - 0xe8, 0x9b, 0x35, 0x6f, 0x23, 0x2f, 0xb5, 0x65, 0x08, 0x60, - 0x92, 0x15, 0xd0, 0x5b, 0x63, 0xcc, 0x65, 0x05, 0xd1, 0xef, - 0x0f, 0x7e, 0x1b, 0xb3, 0x8e, 0xc6, 0x12, 0x85, 0xc9, 0x82, - 0x53, 0x79, 0x2e, 0x80, 0x5f, 0x0c, 0x7b, 0xc7, 0x1c, 0x83, - 0x41, 0x06, 0xd8, 0x41, 0xc9, 0xe7, 0xb9, 0x4b, 0xa1, 0x61, - 0xc6, 0x86, 0x67, 0xf5, 0x10, 0xf7, 0x34, 0x0d, 0x39, 0x9e, - 0x2b, 0x5f, 0x19, 0x06, 0x02, 0xa5, 0x02, 0x23, 0x71, 0xc2, - 0x12, 0x65, 0xcc, 0x81, 0x06, 0xfd, 0x8d, 0x09, 0x68, 0x37, - 0x06, 0x3b, 0xff, 0xc4, 0x24, 0xb3, 0x1f, 0xd6, 0xe6, 0x8f, - 0x9c, 0x74, 0x2c, 0x5e, 0xc5, 0xf4, 0xe9, 0xeb, 0xca, 0xd3, - 0x04, 0x5b, 0x92, 0x9e, 0x5c, 0x1a, 0x1d, 0xa1, 0xa7, 0x34, - 0xd2, 0x05, 0xae, 0xdb, 0x3d, 0x71, 0x10, 0x6e, 0x30, 0xd9, - 0xa3, 0x44, 0xa0, 0xbd, 0x9e, 0x7b, 0xb5, 0x12, 0x8a, 0x12, - 0x07, 0x60, 0xd7, 0x1f, 0x92, 0xe6, 0xfe, 0x04, 0xa9, 0x3e, - 0x62, 0x64, 0x00, 0x5f, 0x7c, 0x7b, 0x34, 0x09, 0xeb, 0x4a, - 0x18, 0x9e, 0x77, 0x72, 0x3a, 0x31, 0x1a, 0x62, 0x2a, 0xb5, - 0xcb, 0x4e, 0x53, 0xce, 0xad, 0x8b, 0x5a, 0x20, 0x4f, 0xd7, - 0x3e, 0x16, 0xf8, 0x10, 0xe2, 0xae, 0xbd, 0x3f, 0x02, 0xa9, - 0x18, 0xa0, 0x01, 0x18, 0x84, 0x95, 0x22, 0x2e, 0x93, 0x76, - 0x44, 0x4e, 0x11, 0x7b, 0x03, 0x51, 0x50, 0x19, 0x79, 0xe7, - 0xbb, 0x5c, 0x7b, 0xca, 0x74, 0xb4, 0x25, 0x26, 0xdb, 0x66, - 0xaa, 0x0b, 0x21, 0x07, 0xfb, 0x7a, 0x96, 0x10, 0x7d, 0x99, - 0xa9, 0x16, 0xcb, 0x0e, 0xba, 0x63, 0xab, 0x95, 0xfc, 0x5a, - 0xbe, 0xa6, 0x7f, 0xd8, 0xb4, 0xcd, 0x7c, 0xc5, 0xd0, 0xb1, - 0x1b, 0x48, 0x40, 0xfb, 0xe6, 0x2f, 0x2b, 0x94, 0xfe, 0x68, - 0xa2, 0xc4, 0x36, 0xd9, 0xcd, 0xc1, 0x93, 0x6d, 0xef, 0x39, - 0x5e, 0x43, 0x30, 0x5a, 0x2e, 0x66, 0xb6, 0xf2, 0xed, 0x9a, - 0x8d, 0x12, 0xdf, 0x5c, 0xae, 0xad, 0x16, 0x12, 0x7e, 0x81, - 0x82, 0x91, 0x7d, 0x2b, 0x12, 0xe9, 0x96, 0xb8, 0xb7, 0x42, - 0xcb, 0x1f, 0xf8, 0xd1, 0xfd, 0x83, 0x7a, 0xe4, 0x36, 0x1d, - 0x04, 0x27, 0x4c, 0xe5, 0xbd, 0x75, 0x24, 0xf7, 0xbd, 0xb6, - 0x6a, 0x68, 0x4e, 0x2c, 0x1b, 0x56, 0x3e, 0x60, 0xa4, 0x42, - 0xca, 0x7a, 0x54, 0xe5, 0x06, 0xe3, 0xda, 0x05, 0xf7, 0x77, - 0x36, 0x8b, 0x81, 0x26, 0x99, 0x92, 0x42, 0xda, 0x45, 0xb1, - 0xfe, 0x4b, + 0xd8, 0xac, 0xaf, 0xd8, 0x2e, 0x14, 0x23, 0x78, 0xf7, 0x0d, 0x9a, 0x04, + 0x2b, 0x92, 0x48, 0x67, 0x60, 0x55, 0x34, 0xd9, 0xac, 0x0b, 0xc4, 0x1f, + 0x46, 0xe8, 0x85, 0xb9, 0x2e, 0x1b, 0x10, 0x3a, 0x75, 0x7a, 0xc2, 0xbc, + 0x76, 0xf0, 0x6d, 0x05, 0xa4, 0x78, 0x48, 0x84, 0x26, 0x69, 0xbd, 0x26, + 0x1d, 0x73, 0x60, 0xaa, 0x57, 0x9d, 0x8c, 0x66, 0xb1, 0x19, 0xea, 0x11, + 0xff, 0xbb, 0xf6, 0xeb, 0x26, 0x26, 0xac, 0x78, 0x74, 0x46, 0x6d, 0x51, + 0x6e, 0x92, 0xdf, 0x6a, 0x98, 0x41, 0xe9, 0x10, 0xf2, 0xcc, 0xa8, 0x7a, + 0x50, 0xdb, 0x1f, 0x4c, 0x42, 0x19, 0xd5, 0xbc, 0x76, 0x20, 0x6f, 0x2f, + 0xbf, 0xc2, 0xc9, 0x1b, 0x02, 0xb5, 0xb1, 0x09, 0x46, 0x06, 0x87, 0x02, + 0xac, 0x3d, 0xcf, 0xc3, 0xa5, 0x1b, 0xf0, 0xce, 0xd4, 0x9e, 0x84, 0x34, + 0x3c, 0x24, 0x7d, 0x89, 0xf3, 0xbf, 0x9c, 0x18, 0x9d, 0x1b, 0x1d, 0xd4, + 0xf6, 0xda, 0xc9, 0xa4, 0x14, 0xc4, 0x6b, 0xd7, 0x05, 0x6d, 0xed, 0x54, + 0x42, 0x6b, 0x5f, 0x6d, 0x1e, 0xda, 0x6b, 0x47, 0x70, 0xe5, 0x4e, 0xe7, + 0x25, 0x06, 0xf8, 0x28, 0x24, 0x34, 0xd6, 0xe5, 0xbe, 0xc5, 0x4f, 0x9e, + 0x5d, 0x33, 0xfc, 0xef, 0xe4, 0xe9, 0x55, 0x67, 0x93, 0x1f, 0x2e, 0x11, + 0x3a, 0x2e, 0xf2, 0xbb, 0x82, 0x09, 0x8d, 0xb2, 0x09, 0xf3, 0x2f, 0xef, + 0x6f, 0x38, 0xc6, 0x56, 0xf2, 0x23, 0x08, 0x63, 0x99, 0x7f, 0x4e, 0xc0, + 0x9d, 0x08, 0x9d, 0xa1, 0x59, 0x6e, 0xe1, 0x00, 0x2c, 0x99, 0xec, 0x83, + 0x2f, 0x12, 0x97, 0x2f, 0x75, 0x04, 0x67, 0x44, 0xb5, 0x95, 0xce, 0xc6, + 0x3e, 0x7a, 0x10, 0x77, 0x5e, 0xbe, 0x9c, 0x0f, 0xb3, 0xc7, 0x38, 0xbf, + 0x9e, 0x35, 0x8f, 0xe4, 0x8d, 0x19, 0xc3, 0x41, 0xb1, 0x0b, 0x8c, 0x10, + 0x9a, 0x58, 0xec, 0x4f, 0xb3, 0xe9, 0x5b, 0x72, 0x4b, 0xb8, 0x99, 0x34, + 0x9a, 0xcd, 0xb0, 0x69, 0xd0, 0x67, 0xef, 0x96, 0xb9, 0xe5, 0x54, 0x92, + 0xb7, 0x1a, 0x52, 0xf6, 0x0a, 0xc2, 0x23, 0x8d, 0x4f, 0xad, 0x00, 0xae, + 0x0f, 0x97, 0xfa, 0xce, 0x96, 0xba, 0xe7, 0x74, 0x55, 0xd4, 0xaf, 0xbf, + 0xa1, 0x32, 0x91, 0x2d, 0x03, 0x9f, 0xe3, 0x10, 0x8c, 0x77, 0x5d, 0x26, + 0x76, 0xf1, 0x87, 0x90, 0xf0, 0x20, 0xd1, 0xea, 0xf7, 0xa4, 0xe8, 0x2c, + 0x32, 0x1c, 0x55, 0xc0, 0x5d, 0xc9, 0xcd, 0x4e, 0x8f, 0x0d, 0xef, 0x0a, + 0x27, 0xb6, 0x4f, 0xa4, 0xd3, 0xa4, 0xed, 0x33, 0x22, 0xa1, 0xd3, 0x15, + 0xac, 0x1a, 0x20, 0x4e, 0x28, 0x8c, 0x8c, 0xd0, 0x71, 0xd1, 0xf2, 0xdb, + 0x33, 0x63, 0xb6, 0xa4, 0xf2, 0x17, 0x3c, 0x12, 0xb0, 0xad, 0xef, 0x31, + 0x91, 0xfe, 0xe5, 0x53, 0x99, 0xb6, 0x85, 0x63, 0xfa, 0xe6, 0xcd, 0xf6, + 0xb9, 0xce, 0x4a, 0x7d, 0x4a, 0x49, 0x29, 0xd2, 0xd9, 0xc9, 0x47, 0x4a, + 0x8a, 0x5c, 0x14, 0x5e, 0x0f, 0x7c, 0xc3, 0x91, 0xb0, 0xab, 0x37, 0xf5, + 0x26, 0x8d, 0x46, 0x74, 0x49, 0xad, 0x51, 0xc3, 0x11, 0xfa, 0x85, 0x15, + 0xa5, 0x84, 0xc1, 0xe0, 0x3c, 0x13, 0x6d, 0x13, 0xa3, 0xe6, 0xa8, 0x3c, + 0x22, 0xac, 0x17, 0x48, 0x57, 0x7c, 0x81, 0xe2, 0x4e, 0xd8, 0x33, 0x5d, + 0x4d, 0x65, 0xf7, 0xe1, 0xb8, 0x00, 0x78, 0x09, 0x16, 0xb0, 0x0b, 0xca, + 0x15, 0x0d, 0xcd, 0x9a, 0xd8, 0x47, 0x4c, 0x9b, 0x69, 0xb2, 0xa0, 0x9d, + 0x96, 0x96, 0x52, 0x6d, 0x89, 0xad, 0xff, 0x55, 0xde, 0x7b, 0xd6, 0x3d, + 0x1d, 0x5e, 0x8d, 0xf1, 0xfc, 0x48, 0x1c, 0x50, 0x59, 0x55, 0xb9, 0x07, + 0xfd, 0x6b, 0xcb, 0x95, 0xa6, 0x14, 0x73, 0xdb, 0x40, 0x40, 0x1c, 0x44, + 0xe6, 0x79, 0x30, 0x88, 0xbd, 0xa0, 0xde, 0x9b, 0xb8, 0x76, 0xf8, 0x98, + 0x56, 0x4b, 0xb9, 0x7a, 0xf6, 0xd4, 0x73, 0x89, 0x6b, 0xf7, 0x7d, 0x05, + 0x33, 0xbe, 0xb6, 0x1c, 0x4d, 0xa7, 0x12, 0x3b, 0x3f, 0xed, 0x4a, 0x0f, + 0xae, 0xa7, 0x6a, 0x26, 0x0d, 0x01, 0x84, 0x84, 0xa8, 0x0e, 0xc1, 0xc1, + 0xfd, 0xe4, 0xa9, 0xe2, 0x3f, 0xab, 0xce, 0x20, 0x90, 0x86, 0x79, 0xa2, + 0x40, 0xd0, 0xef, 0x79, 0x34, 0x2b, 0xe8, 0xc9, 0x54, 0xa7, 0x19, 0x62, + 0xcc, 0x20, 0x79, 0x3f, 0x5b, 0x9c, 0x61, 0xc2, 0xc1, 0xd2, 0x36, 0x7c, + 0x8e, 0xe3, 0x01, 0xbe, 0xc4, 0xb2, 0xb8, 0x07, 0x51, 0x23, 0x5b, 0x5d, + 0x00, 0xe6, 0x7f, 0xd6, 0xbb, 0x32, 0xa9, 0x7e, 0xb4, 0x30, 0xeb, 0x5e, + 0x6d, 0xed, 0xb2, 0xc3, 0x88, 0x81, 0xa3, 0x3b, 0x1f, 0x1e, 0xf9, 0x48, + 0x10, 0xd6, 0x01, 0x65, 0x5f, 0x6d, 0xc5, 0xeb, 0x76, 0x5f, 0x10, 0x79, + 0xaa, 0xc0, 0x86, 0xe7, 0x44, 0x95, 0x44, 0x4b, 0x54, 0x0c, 0x46, 0x2a, + 0x98, 0x01, 0x6e, 0xc0, 0xb9, 0x59, 0x2a, 0xff, 0x8f, 0xb3, 0x80, 0x15, + 0xec, 0xcd, 0x39, 0x36, 0xd7, 0x2f, 0x20, 0x9e, 0x3a, 0xc1, 0x90, 0xe5, + 0x99, 0x27, 0x16, 0xd7, 0x6c, 0x30, 0x10, 0x12, 0x03, 0x3e, 0xdc, 0xb9, + 0x03, 0x25, 0xb0, 0x8a, 0x27, 0x4d, 0x1a, 0x32, 0x36, 0x54, 0xc0, 0xba, + 0x22, 0xb2, 0xe2, 0xf6, 0x39, 0x23, 0x03, 0xc4, 0xc9, 0xe4, 0x0d, 0x99, + 0xfb, 0x98, 0xa5, 0x9b, 0x12, 0x9b, 0x58, 0x44, 0x74, 0x9f, 0x65, 0x61, + 0x51, 0xba, 0x31, 0x60, 0x9c, 0xec, 0xf8, 0x4d, 0x36, 0x61, 0xd1, 0x33, + 0x6d, 0xa6, 0x28, 0x75, 0xba, 0x7c, 0x82, 0xcb, 0x7e, 0xbe, 0x8f, 0x2d, + 0x21, 0x84, 0xb9, 0xf2, 0x4e, 0x7b, 0x95, 0x99, 0x11, 0xf3, 0xe1, 0xc0, + 0x6a, 0x44, 0xae, 0x11, 0xcb, 0x04, 0xa0, 0xf2, 0x3e, 0x17, 0xdf, 0xb2, + 0x6a, 0xdf, 0x5c, 0xf3, 0x8a, 0xf8, 0x90, 0x86, 0x64, 0xea, 0x0a, 0x32, + 0x7f, 0x9f, 0x90, 0xa8, 0x9d, 0x33, 0x12, 0xa6, 0xa4, 0xe7, 0x74, 0xa0, + 0x75, 0xa9, 0x65, 0xf8, 0x39, 0xae, 0x14, 0x32, 0x79, 0xcc, 0xaa, 0x34, + 0x86, 0x55, 0xcc, 0x99, 0xb7, 0x00, 0x05, 0x8b, 0xe3, 0x76, 0x28, 0x12, + 0xb6, 0x2a, 0x3e, 0x44, 0x8d, 0xf4, 0xba, 0xef, 0xf6, 0xdc, 0x29, 0x08, + 0x29, 0x7d, 0xd1, 0x1d, 0x17, 0x15, 0xb6, 0xb6, 0x58, 0x67, 0xd5, 0xd3, + 0x12, 0x05, 0x4e, 0xb0, 0xc3, 0x83, 0xe0, 0x35, 0x30, 0x60, 0x59, 0xa0, + 0xc5, 0x97, 0x5b, 0x81, 0xd3, 0x68, 0x6c, 0x8c, 0x17, 0x28, 0xa9, 0x24, + 0x4f, 0x80, 0x20, 0xa5, 0x21, 0x9f, 0x8f, 0x15, 0x89, 0x2d, 0x87, 0xae, + 0x2e, 0xcc, 0x73, 0x3e, 0x06, 0x43, 0xbc, 0xb3, 0x1b, 0xa6, 0x72, 0xaa, + 0xa3, 0xaa, 0xbb, 0x6f, 0x2d, 0x68, 0x60, 0xcf, 0x05, 0x94, 0x25, 0x3e, + 0x59, 0xf3, 0x64, 0x61, 0x5e, 0x78, 0x9a, 0x7e, 0x0d, 0x50, 0x45, 0x78, + 0x51, 0xab, 0x11, 0xb1, 0xc6, 0x95, 0xfc, 0x29, 0x28, 0x10, 0x9c, 0x1a, + 0x8c, 0x37, 0xb5, 0x4f, 0x0e, 0xed, 0x4a, 0x28, 0x6c, 0xaa, 0xb7, 0x0d, + 0x12, 0xfa, 0x87, 0x5d, 0xd4, 0x9a, 0xb7, 0x2b, 0x46, 0x90, 0x58, 0x4e, + 0xd7, 0x8b, 0x41, 0x1b, 0xf8, 0xc4, 0xc2, 0xde, 0xda, 0xec, 0x61, 0xe7, + 0xbf, 0x11, 0xdd, 0x6e, 0x4e, 0x6a, 0xd4, 0x87, 0x01, 0xe4, 0xac, 0xe8, + 0xaf, 0x2b, 0x01, 0xe1, 0x09, 0x20, 0xe0, 0xbd, 0x7d, 0x03, 0x73, 0x23, + 0xdf, 0x77, 0x71, 0xa4, 0x25, 0x8b, 0x0a, 0x93, 0x49, 0x32, 0x45, 0x1a, + 0xa4, 0x94, 0x31, 0x61, 0x2e, 0x17, 0x39, 0x8a, 0x66, 0xc9, 0xf9, 0x20, + 0x2d, 0x6a, 0x97, 0x2f, 0xe7, 0x26, 0xd8, 0x01, 0x42, 0x65, 0xcf, 0xce, + 0xd4, 0x24, 0x41, 0xfb, 0x9b, 0x6f, 0xf1, 0xc2, 0x9e, 0xd5, 0x08, 0x0c, + 0xdc, 0x4d, 0x8e, 0xae, 0xcb, 0x5f, 0xd4, 0xcd, 0x7c, 0xf6, 0x82, 0xc6, + 0xee, 0xf9, 0x88, 0x3a, 0x34, 0x07, 0x04, 0xb4, 0x84, 0x69, 0xb3, 0xa4, + 0x67, 0xab, 0x09, 0xc0, 0x83, 0xfe, 0x59, 0xaf, 0x18, 0x2c, 0xc8, 0x09, + 0xc1, 0xbb, 0x13, 0x7c, 0xce, 0x01, 0x5d, 0x85, 0xaa, 0x10, 0x28, 0xa2, + 0x96, 0x98, 0x69, 0x23, 0xa3, 0xe7, 0x67, 0xbc, 0x7c, 0x7e, 0xde, 0x4b, + 0x36, 0xab, 0x94, 0xd2, 0xb8, 0xf9, 0xdf, 0xee, 0xa1, 0x69, 0xa1, 0xc8, + 0xe9, 0x83, 0x21, 0xac, 0x1b, 0x39, 0xf7, 0x6d, 0xbf, 0x8c, 0xdb, 0xd6, + 0x2f, 0xc9, 0x3c, 0x3d, 0x50, 0xcf, 0x7f, 0xbe, 0x4a, 0x8d, 0xd8, 0x14, + 0xad, 0x69, 0xb0, 0x3e, 0x8a, 0xaf, 0xeb, 0xd9, 0x1a, 0x15, 0x4a, 0xe4, + 0xdd, 0xd9, 0xb2, 0xf8, 0x6b, 0xe2, 0x42, 0x9e, 0x29, 0x16, 0xfc, 0x85, + 0x9c, 0x47, 0x4b, 0x1f, 0x3d, 0x7b, 0x8c, 0xe1, 0x6d, 0xa3, 0xb8, 0x0a, + 0xe6, 0xfa, 0x27, 0xfe, 0x52, 0x72, 0xab, 0x3a, 0xa6, 0x58, 0xd7, 0x53, + 0xaf, 0x9f, 0xee, 0x03, 0x85, 0xfc, 0xa4, 0x7a, 0x72, 0x29, 0x7e, 0x62, + 0x28, 0x08, 0x79, 0xa8, 0xb8, 0xc7, 0x51, 0x8d, 0xaa, 0x40, 0x2d, 0x4a, + 0xd9, 0x47, 0xb4, 0xa8, 0xa2, 0x0a, 0x43, 0xd0, 0xe0, 0x4a, 0x39, 0xa3, + 0x06, 0x08, 0x9a, 0xe2, 0xf3, 0xf2, 0xf8, 0xb9, 0x9f, 0x63, 0x32, 0xa0, + 0x65, 0x0b, 0xb0, 0x50, 0x96, 0xa6, 0xa8, 0x7a, 0x18, 0xdd, 0x6c, 0xd1, + 0x9b, 0xd9, 0x4e, 0x76, 0x8f, 0xfb, 0x22, 0xa6, 0x1d, 0x29, 0xfc, 0xb8, + 0x47, 0x29, 0xb6, 0xd1, 0xb1, 0x63, 0x4a, 0x36, 0x1b, 0x10, 0xe6, 0x4c, + 0x65, 0x68, 0x1f, 0xad, 0x4f, 0x7d, 0x6b, 0x01, 0x41, 0x18, 0x5f, 0xba, + 0x3d, 0xa6, 0x54, 0x28, 0x58, 0xd5, 0x81, 0x60, 0xdf, 0x84, 0x76, 0x00, + 0x21, 0x53, 0xeb, 0xd3, 0xa6, 0xec, 0x7d, 0x3c, 0xb8, 0xcd, 0x91, 0x4c, + 0x2f, 0x4b, 0x2e, 0x23, 0x4c, 0x0f, 0x0f, 0xe0, 0x14, 0xa5, 0xe7, 0xe5, + 0x70, 0x8d, 0x8b, 0x9c }; WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_44_sig[] = { - 0x5e, 0xc1, 0xce, 0x0e, 0x31, 0xea, 0x10, 0x52, 0xa3, 0x7a, - 0xfe, 0x4d, 0xac, 0x07, 0x89, 0x5a, 0x45, 0xbd, 0x5a, 0xe5, - 0x22, 0xed, 0x98, 0x4d, 0x2f, 0xc8, 0x27, 0x00, 0x99, 0x40, - 0x00, 0x79, 0xcd, 0x93, 0x27, 0xd0, 0x40, 0x33, 0x79, 0x4f, - 0xe5, 0x16, 0x89, 0x9f, 0xbd, 0xa6, 0x3f, 0xdd, 0x68, 0x74, - 0x73, 0xc3, 0x97, 0x54, 0x11, 0x1d, 0xc8, 0xb8, 0xc8, 0xfd, - 0x3a, 0xbe, 0xca, 0x17, 0x0f, 0x10, 0x6d, 0x89, 0x6d, 0xe0, - 0xb2, 0xff, 0x3b, 0xe5, 0xa1, 0x75, 0xea, 0x35, 0x16, 0xa3, - 0x0c, 0x6e, 0x4a, 0x7b, 0xdb, 0x28, 0xc6, 0x2a, 0x76, 0x0e, - 0x78, 0x78, 0xa0, 0x4f, 0x4e, 0xf8, 0x99, 0xff, 0xe7, 0x47, - 0x7e, 0xc4, 0x62, 0xa7, 0xb4, 0xb9, 0x2b, 0xc1, 0xc7, 0xd0, - 0x00, 0xb6, 0xaa, 0xa7, 0x37, 0xd5, 0x1e, 0x19, 0xc4, 0xc4, - 0x59, 0x2f, 0xa5, 0x09, 0xa3, 0xda, 0x5d, 0xd4, 0x48, 0x64, - 0x16, 0x0e, 0x92, 0xdf, 0x61, 0xb7, 0x25, 0x3b, 0x90, 0x5a, - 0x08, 0xb5, 0x88, 0xe8, 0x64, 0x80, 0x63, 0xee, 0xbf, 0x59, - 0x0f, 0x4a, 0x48, 0x1e, 0x77, 0xa9, 0x46, 0xc6, 0x9c, 0x0b, - 0x83, 0xad, 0xb5, 0xbf, 0xb5, 0x5b, 0x99, 0xf3, 0x55, 0xe8, - 0xe5, 0xe7, 0x5c, 0x12, 0xac, 0x06, 0x06, 0xe0, 0xc0, 0x32, - 0x5d, 0xb6, 0x9f, 0x2b, 0x8e, 0x19, 0x5c, 0x2a, 0x58, 0xbb, - 0x37, 0xf1, 0x68, 0x56, 0x8b, 0x74, 0x94, 0x58, 0x48, 0x28, - 0xee, 0xf7, 0x0a, 0x8f, 0xad, 0x43, 0x67, 0xe1, 0xa3, 0x8c, - 0x3b, 0x35, 0x48, 0xcc, 0x52, 0x14, 0x36, 0x99, 0x18, 0x71, - 0x1c, 0xb2, 0xfc, 0x82, 0xda, 0xac, 0xd5, 0x55, 0x0a, 0x77, - 0x44, 0x6a, 0x48, 0xed, 0xfc, 0x5a, 0x68, 0xa6, 0x4d, 0x65, - 0xe7, 0x30, 0xaa, 0x23, 0x66, 0x84, 0xdf, 0x83, 0xf1, 0x17, - 0x5c, 0x46, 0xfe, 0x63, 0xcb, 0xc3, 0x6e, 0x4e, 0x47, 0x8d, - 0x30, 0x48, 0x06, 0xda, 0x97, 0x6b, 0x04, 0x5d, 0x44, 0xf3, - 0xb7, 0x2a, 0x6d, 0x2b, 0xbb, 0xcd, 0x97, 0x4e, 0x26, 0x8e, - 0xc9, 0x03, 0x0b, 0x5d, 0x68, 0xed, 0x81, 0xf7, 0x19, 0x61, - 0x81, 0xe9, 0xac, 0x3a, 0x35, 0xcd, 0xe8, 0xfd, 0x99, 0xdb, - 0x89, 0x83, 0x7d, 0x23, 0x6a, 0xc1, 0xc1, 0x10, 0xe9, 0xd3, - 0xfa, 0x9e, 0x5a, 0xcd, 0x73, 0xa3, 0x0a, 0x37, 0xa3, 0x12, - 0xef, 0x72, 0xa2, 0x28, 0xd4, 0x3d, 0x67, 0x53, 0x24, 0x0d, - 0x61, 0x98, 0xbb, 0x07, 0xf3, 0xa7, 0x79, 0x22, 0x74, 0x57, - 0x99, 0xe8, 0x7a, 0xbf, 0x90, 0x84, 0xa2, 0x6b, 0x29, 0x34, - 0xac, 0xc9, 0xff, 0x67, 0x82, 0xd0, 0xd2, 0x7d, 0x69, 0xc0, - 0xf3, 0xd7, 0x4b, 0x5c, 0xf2, 0xa8, 0x53, 0x8b, 0x78, 0x57, - 0xfc, 0x74, 0xf5, 0x81, 0x6e, 0xc2, 0x5b, 0x32, 0x52, 0x9e, - 0x58, 0x84, 0xa1, 0x71, 0xd5, 0x8c, 0xf5, 0x16, 0x36, 0x4d, - 0x11, 0xd4, 0xb5, 0xc2, 0x05, 0xc4, 0x03, 0xce, 0x83, 0xea, - 0x0b, 0x6a, 0x2e, 0xf6, 0x28, 0x5e, 0xb2, 0x40, 0x8c, 0xa3, - 0x6a, 0xc7, 0xee, 0x04, 0x54, 0x93, 0x0f, 0x3b, 0xf9, 0x57, - 0x92, 0x00, 0xf1, 0xc7, 0x1b, 0x48, 0x63, 0xcb, 0xd3, 0xdd, - 0x40, 0x90, 0x46, 0xb0, 0x87, 0x2a, 0xb8, 0xec, 0xbc, 0x07, - 0x09, 0x83, 0x25, 0xb1, 0x88, 0x2c, 0xa0, 0x0a, 0x40, 0x4f, - 0xfd, 0xec, 0xfd, 0xbe, 0x18, 0xae, 0xdd, 0x83, 0x89, 0x83, - 0x2d, 0x10, 0xb4, 0x14, 0x30, 0xac, 0x6c, 0xd9, 0xc9, 0xaa, - 0xbc, 0xdb, 0x5e, 0x14, 0xab, 0x19, 0x64, 0xaa, 0xb1, 0x9c, - 0xc3, 0xf5, 0xdc, 0x2b, 0xcd, 0x26, 0x0b, 0x81, 0x1a, 0x0e, - 0x0a, 0xd6, 0x39, 0x79, 0x10, 0x06, 0xbf, 0xe0, 0xc1, 0x8b, - 0x20, 0x24, 0x90, 0x8b, 0x0f, 0xa4, 0x2d, 0x2d, 0x46, 0x2a, - 0xd4, 0xf3, 0xa9, 0x58, 0x4b, 0xd9, 0xa6, 0x6c, 0x75, 0x3d, - 0xbc, 0x36, 0x76, 0x7f, 0xef, 0x1b, 0xa1, 0x41, 0xba, 0xd0, - 0xfe, 0x16, 0x19, 0xc3, 0x92, 0xe3, 0x59, 0x07, 0x3f, 0x48, - 0x11, 0x70, 0xe0, 0x8a, 0xff, 0x97, 0xbc, 0x71, 0xd5, 0xb9, - 0x4a, 0x9b, 0x4c, 0xb8, 0x4b, 0x50, 0xd6, 0x43, 0xe8, 0x84, - 0x0a, 0x95, 0xd0, 0x20, 0x28, 0xd3, 0x20, 0x4a, 0x0e, 0x1b, - 0xe6, 0x5d, 0x2f, 0x0c, 0xdb, 0x76, 0xab, 0xa3, 0xc2, 0xad, - 0xd5, 0x86, 0xae, 0xb9, 0x26, 0xb2, 0x5d, 0x72, 0x27, 0xbb, - 0xec, 0x23, 0x9f, 0x42, 0x90, 0x58, 0xe1, 0xf8, 0xe9, 0x63, - 0xdf, 0x1a, 0x46, 0x53, 0x65, 0x05, 0xfb, 0x20, 0x21, 0xa6, - 0x64, 0xc8, 0x5c, 0x67, 0x6b, 0x41, 0x6c, 0x04, 0x34, 0xeb, - 0x05, 0x71, 0xeb, 0xbe, 0xed, 0x6d, 0xa2, 0x96, 0x67, 0x45, - 0xe7, 0x47, 0x22, 0x64, 0xaf, 0x82, 0xf8, 0x78, 0x0e, 0xe6, - 0xa1, 0x4a, 0x2d, 0x82, 0x1e, 0xd0, 0xc2, 0x79, 0x4e, 0x29, - 0x89, 0xd9, 0xf3, 0x3f, 0xb6, 0xc4, 0xee, 0x69, 0xb2, 0x8f, - 0x8b, 0xd9, 0x13, 0xd9, 0x6e, 0x3a, 0xc5, 0x9f, 0xdf, 0x25, - 0xb7, 0xc3, 0x16, 0xb8, 0xa2, 0x85, 0x17, 0xae, 0xe9, 0x95, - 0x5d, 0xb8, 0x1d, 0x21, 0xbb, 0xd9, 0x38, 0x11, 0x8f, 0x44, - 0xea, 0xe8, 0x4c, 0x91, 0x82, 0xf5, 0x45, 0xee, 0x8f, 0xf5, - 0x6a, 0x0d, 0x08, 0xe7, 0x6b, 0xb0, 0x91, 0xd5, 0x42, 0x17, - 0x8c, 0x37, 0x6a, 0x5a, 0x0a, 0x87, 0x53, 0x76, 0xc3, 0x59, - 0x35, 0x13, 0x1c, 0xf1, 0x72, 0x2c, 0x2b, 0xb2, 0x9e, 0xda, - 0x10, 0x2a, 0xce, 0x38, 0xb4, 0x67, 0x8c, 0x4b, 0x08, 0xa1, - 0xb6, 0xa3, 0x08, 0x9c, 0xeb, 0xd8, 0x93, 0x1b, 0x29, 0x5a, - 0xa7, 0x03, 0x17, 0x7e, 0xec, 0x58, 0x6b, 0x5b, 0xc5, 0x46, - 0x03, 0x33, 0x7f, 0x0e, 0x93, 0x9a, 0xdd, 0xb5, 0x89, 0xb1, - 0x16, 0x4c, 0xa7, 0xd8, 0x0e, 0x73, 0xd8, 0xc3, 0xd2, 0x36, - 0x85, 0x66, 0xcb, 0x5b, 0x64, 0xf2, 0xdc, 0xba, 0x39, 0xcc, - 0xa5, 0xe0, 0x9b, 0xaa, 0x2a, 0x95, 0x6d, 0xdc, 0x49, 0xde, - 0x3b, 0x61, 0xa2, 0x3b, 0x1f, 0xed, 0x32, 0xfa, 0x10, 0xe4, - 0x88, 0x59, 0xca, 0x5a, 0xe4, 0xf9, 0x5e, 0xe2, 0xca, 0x21, - 0x5a, 0xdc, 0x02, 0x73, 0x7a, 0xc8, 0x90, 0x7a, 0x8e, 0x91, - 0x19, 0x04, 0x53, 0x3c, 0x50, 0x15, 0x8a, 0x84, 0x93, 0x8f, - 0xac, 0x99, 0x82, 0xdd, 0xc6, 0xce, 0xfb, 0x18, 0x84, 0x29, - 0x2a, 0x8d, 0xa2, 0xc5, 0x7f, 0x87, 0xce, 0x4c, 0xf5, 0xdf, - 0x73, 0xd2, 0xba, 0xc2, 0x4f, 0xe3, 0x74, 0xa5, 0x8f, 0xc3, - 0xf4, 0x99, 0xd1, 0xe8, 0x4e, 0xb8, 0xe0, 0x2e, 0xef, 0xd6, - 0x87, 0x70, 0xcf, 0x45, 0x3b, 0xff, 0x03, 0xfd, 0x59, 0x7f, - 0x7c, 0xd0, 0x4e, 0x49, 0xf7, 0xd5, 0x08, 0xd9, 0x06, 0x53, - 0x90, 0x0a, 0x5a, 0x1b, 0x2e, 0xf5, 0xb0, 0x85, 0xb6, 0xb6, - 0x61, 0xa5, 0x71, 0x47, 0xbf, 0x4a, 0xf6, 0xae, 0x9a, 0x19, - 0x6c, 0xd8, 0x2d, 0x9b, 0xb4, 0x40, 0x9e, 0x15, 0x77, 0x2e, - 0x7e, 0xe9, 0xb4, 0x3d, 0x0f, 0x1b, 0xb5, 0x1c, 0xc2, 0x58, - 0x4e, 0x4b, 0xf6, 0x53, 0x9e, 0x6f, 0x09, 0x55, 0xa0, 0xb8, - 0x73, 0x11, 0x64, 0x70, 0x54, 0xb4, 0xcb, 0xb7, 0x27, 0xe5, - 0xdf, 0x58, 0x67, 0x5b, 0xc0, 0xd6, 0xf5, 0x64, 0xa6, 0x66, - 0x6d, 0xdf, 0xd8, 0xf8, 0xd6, 0x85, 0xba, 0xba, 0x30, 0xa7, - 0xca, 0x34, 0xf4, 0x9a, 0xba, 0x0a, 0xfb, 0x0e, 0xa0, 0x65, - 0x98, 0x78, 0xee, 0xaa, 0x14, 0x6a, 0x99, 0x77, 0x67, 0xad, - 0x01, 0x95, 0x5e, 0x50, 0x22, 0xe9, 0x74, 0x95, 0xa7, 0x13, - 0x3f, 0xdd, 0xa6, 0x69, 0x64, 0xf6, 0x50, 0x06, 0x6d, 0xba, - 0x90, 0x5a, 0x8c, 0x81, 0xa0, 0xda, 0x55, 0xe9, 0x97, 0x0e, - 0xd7, 0x10, 0x8e, 0x1f, 0x23, 0x65, 0xd9, 0x14, 0xd4, 0xde, - 0xa5, 0xf9, 0xec, 0xb6, 0xad, 0x65, 0xce, 0x0b, 0x1b, 0x0a, - 0x4c, 0x7d, 0xb0, 0x97, 0xa6, 0xfe, 0x67, 0xfb, 0x4f, 0x8f, - 0x00, 0x92, 0xb6, 0x0d, 0x20, 0x78, 0x65, 0x1d, 0x9a, 0x56, - 0x57, 0xc6, 0x15, 0x88, 0xba, 0x55, 0x02, 0x7a, 0x9a, 0xac, - 0x50, 0x4c, 0xc7, 0x9e, 0x66, 0x8b, 0xfc, 0xf3, 0x67, 0x48, - 0x07, 0xbf, 0x84, 0x94, 0x9b, 0x22, 0x2a, 0xae, 0x1b, 0x25, - 0xe9, 0x94, 0x06, 0xa7, 0xe8, 0x61, 0x52, 0x89, 0xdc, 0x93, - 0x6e, 0x89, 0xdc, 0x30, 0x6e, 0xd9, 0xee, 0xcb, 0x12, 0x38, - 0x58, 0x9d, 0x8b, 0xc5, 0x05, 0x2c, 0x50, 0x4e, 0xc8, 0xc2, - 0xe0, 0x65, 0xb6, 0x49, 0xc4, 0xf0, 0x1e, 0x5c, 0x8e, 0x3c, - 0xe9, 0x77, 0xd2, 0x9e, 0xa8, 0xd5, 0xf5, 0xd9, 0xc5, 0xad, - 0x5b, 0x74, 0x48, 0x08, 0x3a, 0x30, 0x84, 0x57, 0x71, 0x1e, - 0x69, 0x45, 0x09, 0xdd, 0xea, 0x62, 0xec, 0x7c, 0xa3, 0xf9, - 0x92, 0xee, 0x16, 0xdc, 0xe5, 0x9d, 0xcf, 0xb7, 0x08, 0x51, - 0x8a, 0x76, 0x3a, 0x23, 0x94, 0x50, 0x8e, 0x4d, 0x3a, 0xea, - 0xf3, 0xc1, 0x53, 0x2c, 0x65, 0x9c, 0x36, 0x8c, 0x10, 0xe3, - 0x9c, 0x01, 0xa4, 0xe6, 0x45, 0x77, 0xa6, 0x5d, 0x7e, 0x37, - 0x31, 0x95, 0x2f, 0xec, 0x61, 0x92, 0x69, 0x65, 0x53, 0x54, - 0x6d, 0xbe, 0x9e, 0x5a, 0x68, 0x12, 0xc4, 0xe7, 0xe4, 0x06, - 0x51, 0x5a, 0xc0, 0x63, 0xb9, 0x69, 0xb8, 0x3c, 0xd8, 0xae, - 0x8b, 0xff, 0x96, 0x4d, 0x55, 0xce, 0x25, 0x2b, 0x8b, 0x89, - 0xc9, 0x3a, 0x16, 0x48, 0x2a, 0x73, 0xb2, 0x70, 0x8b, 0x62, - 0xd5, 0xb1, 0xa0, 0x30, 0xe5, 0x46, 0xab, 0x8b, 0xc3, 0xeb, - 0x37, 0x2f, 0xbd, 0xb8, 0x4e, 0x6c, 0x30, 0xdc, 0x6c, 0x8a, - 0xf1, 0x89, 0x06, 0xce, 0x64, 0x0a, 0x3e, 0xb2, 0x16, 0x31, - 0xa1, 0xe4, 0x4b, 0x98, 0xe7, 0xf1, 0x99, 0x76, 0x00, 0x5f, - 0xd2, 0xd3, 0x30, 0xf0, 0xbf, 0xa7, 0x4a, 0xf6, 0x9e, 0xa5, - 0x75, 0x74, 0x78, 0xfe, 0xec, 0x72, 0x7c, 0x89, 0xe9, 0xf6, - 0x0d, 0x7e, 0x15, 0xd6, 0xd8, 0x79, 0x85, 0x3c, 0xcf, 0xb0, - 0x21, 0xc8, 0x9c, 0x54, 0x87, 0x63, 0xb3, 0x05, 0xbb, 0x8a, - 0x02, 0xe4, 0x79, 0xdc, 0xa1, 0xa2, 0xd3, 0x19, 0xd8, 0x86, - 0xff, 0x8a, 0x0e, 0x82, 0x89, 0xaf, 0xaa, 0x62, 0x2e, 0xd4, - 0xb2, 0xd0, 0x5d, 0x0d, 0x4f, 0x2a, 0xda, 0x0e, 0x9f, 0x8a, - 0x2b, 0x32, 0xe9, 0x09, 0xf5, 0x55, 0x51, 0xe7, 0xd5, 0x69, - 0x12, 0xdd, 0x33, 0x6b, 0x3d, 0xd7, 0xe9, 0xfd, 0xb2, 0xa7, - 0xf5, 0x97, 0x2a, 0x6d, 0x89, 0x30, 0x65, 0x2a, 0x0d, 0xf2, - 0x00, 0x81, 0xbe, 0xfb, 0xd9, 0xd7, 0x1b, 0xc2, 0x48, 0x7a, - 0x22, 0x30, 0xae, 0x35, 0xf6, 0x32, 0x41, 0x9d, 0xd9, 0x12, - 0xb3, 0xa7, 0x6d, 0xba, 0x74, 0x93, 0x2d, 0x0d, 0xb2, 0xb6, - 0xdc, 0xa9, 0x98, 0x5b, 0x3b, 0xaa, 0x2b, 0x47, 0x06, 0xc4, - 0x36, 0xfd, 0x04, 0x10, 0x94, 0x61, 0x61, 0x47, 0x1c, 0x02, - 0x54, 0x85, 0x4a, 0xcb, 0x75, 0x6b, 0x75, 0xf5, 0xb4, 0x61, - 0x26, 0xb3, 0x12, 0x43, 0x31, 0x55, 0xb5, 0xda, 0x4b, 0xb5, - 0x11, 0xb4, 0xb8, 0xfb, 0x0a, 0xd9, 0xa7, 0x0e, 0x9f, 0x2a, - 0x74, 0x01, 0xf6, 0x1a, 0x33, 0x10, 0x9e, 0x66, 0xff, 0x82, - 0xfa, 0xa9, 0xa4, 0xa0, 0x9b, 0x25, 0x2d, 0x16, 0xbf, 0x60, - 0x0d, 0x87, 0xea, 0x94, 0xad, 0xdd, 0xc4, 0xd0, 0xa8, 0xdd, - 0x2d, 0xc7, 0xc8, 0xac, 0x39, 0x9e, 0x87, 0x69, 0xc4, 0x3a, - 0xbc, 0x28, 0x7e, 0x36, 0x69, 0xfd, 0x20, 0x25, 0xac, 0xa3, - 0xa7, 0x37, 0x96, 0xe9, 0x8a, 0x65, 0xe4, 0xb0, 0x2a, 0x61, - 0x23, 0x28, 0x64, 0xff, 0x17, 0x6c, 0x36, 0x9e, 0x0a, 0xba, - 0xe4, 0x4b, 0xeb, 0x84, 0x24, 0x20, 0x57, 0x0f, 0x34, 0x05, - 0x95, 0x56, 0xc3, 0x2f, 0x2b, 0xf0, 0x36, 0xef, 0xca, 0x68, - 0xfe, 0x78, 0xf8, 0x98, 0x09, 0x4a, 0x25, 0xcc, 0x17, 0xbe, - 0x05, 0x00, 0xff, 0xf9, 0xa5, 0x5b, 0xe6, 0xaa, 0x5b, 0x56, - 0xb6, 0x89, 0x64, 0x9c, 0x16, 0x48, 0xe1, 0xcd, 0x67, 0x87, - 0xdd, 0xba, 0xbd, 0x02, 0x0d, 0xd8, 0xb4, 0xc9, 0x7c, 0x37, - 0x92, 0xd0, 0x39, 0x46, 0xd2, 0xc4, 0x78, 0x13, 0xf0, 0x76, - 0x45, 0x5f, 0xeb, 0x52, 0xd2, 0x3f, 0x61, 0x87, 0x34, 0x09, - 0xb7, 0x24, 0x4e, 0x93, 0xf3, 0xc5, 0x10, 0x19, 0x66, 0x66, - 0x3f, 0x15, 0xe3, 0x05, 0x55, 0x43, 0xb7, 0xf4, 0x62, 0x57, - 0xb4, 0xd9, 0xef, 0x46, 0x47, 0xb5, 0xfb, 0x79, 0xc9, 0x67, - 0xc5, 0xc3, 0x18, 0x91, 0x73, 0x75, 0xec, 0xd5, 0x68, 0x2b, - 0xf6, 0x42, 0xb4, 0xff, 0xfb, 0x27, 0x61, 0x77, 0x28, 0x10, - 0x6b, 0xce, 0x19, 0xad, 0x87, 0xc3, 0x85, 0xe3, 0x78, 0x00, - 0xdb, 0x21, 0xee, 0xd8, 0xfa, 0x9c, 0x81, 0x11, 0x97, 0xac, - 0xd0, 0x50, 0x89, 0x45, 0x23, 0xf6, 0x85, 0x7d, 0x60, 0xb2, - 0xad, 0x0c, 0x5d, 0xd8, 0x9e, 0xe4, 0xe1, 0x25, 0xb2, 0x13, - 0x1a, 0x54, 0x54, 0xfd, 0x7b, 0xab, 0x85, 0x20, 0xe8, 0xda, - 0x52, 0x0f, 0xac, 0x49, 0x70, 0xf1, 0x4c, 0x66, 0x74, 0x8c, - 0x87, 0x6e, 0xca, 0xc1, 0x0d, 0x92, 0xc0, 0xa8, 0x08, 0xfd, - 0x0f, 0x60, 0x55, 0xaf, 0x24, 0xcb, 0x04, 0xb7, 0xff, 0xa9, - 0xc5, 0x07, 0x26, 0xf6, 0xe2, 0x1e, 0x2f, 0xd1, 0x99, 0x6d, - 0xef, 0xc0, 0xdb, 0x5b, 0xf7, 0x06, 0x80, 0x92, 0x5f, 0x56, - 0x54, 0xdb, 0x2e, 0xba, 0x93, 0xb2, 0x94, 0xf2, 0xad, 0xbc, - 0x91, 0x6e, 0x4e, 0xce, 0x21, 0xc4, 0x8b, 0x18, 0xc4, 0xfc, - 0xab, 0xb4, 0x4f, 0xd7, 0xa2, 0xef, 0x55, 0x00, 0x6d, 0x34, - 0x17, 0x59, 0x8d, 0x79, 0x75, 0x02, 0xa3, 0x7a, 0x52, 0x57, - 0x5c, 0x26, 0xb9, 0xae, 0xd6, 0x19, 0x2e, 0x31, 0x02, 0x98, - 0x98, 0xe5, 0x3d, 0xc2, 0xa5, 0x56, 0xb6, 0x02, 0xae, 0x0d, - 0x3b, 0x35, 0x97, 0xd2, 0x43, 0x38, 0x8a, 0x65, 0xfa, 0x86, - 0x20, 0xb7, 0xb5, 0xb0, 0xda, 0x19, 0x01, 0x2f, 0x13, 0xb5, - 0x6d, 0xbd, 0xb2, 0x34, 0xa7, 0xff, 0xae, 0x7e, 0x8f, 0x98, - 0x1b, 0xc4, 0x27, 0xbd, 0xa9, 0x64, 0xdc, 0xab, 0x2a, 0xd2, - 0xb4, 0x27, 0xd0, 0x25, 0xdd, 0xff, 0xdc, 0x0a, 0x96, 0xd3, - 0x85, 0x3e, 0xc5, 0x11, 0x34, 0x60, 0xa2, 0x33, 0x92, 0x90, - 0xbb, 0x4c, 0x86, 0xdd, 0xd6, 0x1e, 0xcb, 0x0a, 0x17, 0xc6, - 0x87, 0x4e, 0x3e, 0x7a, 0x4b, 0xab, 0xef, 0x0a, 0x00, 0x3d, - 0x94, 0x34, 0x8b, 0x63, 0x36, 0xd9, 0xaf, 0x5d, 0x63, 0x40, - 0xbb, 0x32, 0x4b, 0x64, 0xf0, 0x31, 0x48, 0xdb, 0x44, 0x2b, - 0x48, 0x60, 0x6a, 0xea, 0xa4, 0x8c, 0xdd, 0xaf, 0x81, 0x3f, - 0x86, 0x81, 0x99, 0x7a, 0x98, 0xe1, 0xff, 0x21, 0x7a, 0x28, - 0xbc, 0x33, 0xe6, 0x4e, 0xb0, 0x85, 0x6b, 0xec, 0x11, 0x37, - 0x81, 0x7f, 0xf9, 0xdc, 0xbf, 0x1a, 0xa6, 0x6d, 0x4d, 0x0f, - 0x5b, 0x99, 0x73, 0xb8, 0xd2, 0x6e, 0x37, 0xf0, 0x71, 0xf1, - 0x1a, 0xc3, 0x5c, 0xea, 0x12, 0x5f, 0x2e, 0x85, 0x3f, 0xfd, - 0xd5, 0x87, 0x67, 0x9f, 0x67, 0x9f, 0xd7, 0xef, 0x9f, 0x81, - 0xa4, 0xbc, 0x63, 0x1d, 0x00, 0x81, 0xf6, 0x20, 0x77, 0xae, - 0x0b, 0x90, 0xe5, 0x9c, 0xa9, 0x44, 0xb5, 0xd7, 0xb1, 0x61, - 0x33, 0x4f, 0x75, 0xa9, 0xb7, 0xf4, 0xa4, 0x72, 0x9e, 0x72, - 0xec, 0x7b, 0xcd, 0x83, 0xb3, 0xd6, 0x22, 0x50, 0x50, 0x97, - 0x0f, 0x63, 0x0f, 0xe1, 0x15, 0xb3, 0x07, 0xb6, 0xa3, 0xfa, - 0x2f, 0xb5, 0xf3, 0x5b, 0x5d, 0x7f, 0x90, 0x20, 0xcd, 0x5f, - 0x40, 0x48, 0x87, 0x43, 0xfd, 0xa3, 0x69, 0xdc, 0xf8, 0x51, - 0x08, 0x67, 0xc2, 0x2d, 0xff, 0xfe, 0xbf, 0x85, 0x3e, 0x80, - 0xff, 0x91, 0x62, 0xc5, 0x83, 0xe0, 0x80, 0xeb, 0xce, 0xdc, - 0xff, 0xb1, 0xdb, 0x02, 0xb7, 0x01, 0x1e, 0xa6, 0xf0, 0x32, - 0xfb, 0x95, 0x6a, 0x47, 0x44, 0x84, 0x42, 0x6e, 0x3a, 0xb1, - 0xcf, 0xf9, 0x28, 0xb4, 0x3a, 0x8e, 0xa7, 0x8d, 0x48, 0x81, - 0x1c, 0x7e, 0xf5, 0x0b, 0x46, 0x7e, 0x92, 0x4e, 0xb9, 0xa8, - 0x36, 0xb8, 0x81, 0x6d, 0x8c, 0x70, 0x59, 0x33, 0x12, 0x61, - 0xbb, 0xe6, 0x10, 0x8a, 0xe4, 0xc1, 0x2c, 0x50, 0x12, 0xbf, - 0xd3, 0xc6, 0x3c, 0x53, 0x91, 0x50, 0x07, 0xc8, 0x85, 0x32, - 0x3c, 0xe1, 0x67, 0x99, 0x68, 0xc1, 0xf4, 0x74, 0x86, 0x35, - 0x8a, 0x6c, 0x75, 0x1d, 0x8f, 0x8a, 0x60, 0xe1, 0xc7, 0x59, - 0x4e, 0xb0, 0xe0, 0x45, 0x5a, 0x11, 0x05, 0x24, 0xa7, 0x8d, - 0x39, 0x93, 0x60, 0x4c, 0xc5, 0x9e, 0x8a, 0x70, 0xcc, 0x44, - 0x96, 0x92, 0xc8, 0xf7, 0x23, 0x14, 0xc7, 0xf4, 0x82, 0x9d, - 0x5b, 0x1c, 0x26, 0xd0, 0x3c, 0x76, 0x36, 0xe9, 0x98, 0x8a, - 0xbb, 0xe6, 0xa0, 0xad, 0xed, 0xf7, 0xd9, 0x06, 0x50, 0x67, - 0x79, 0x50, 0x4e, 0xd5, 0x80, 0x4e, 0x59, 0x72, 0x5d, 0x8b, - 0xcb, 0x86, 0x3b, 0x57, 0xc4, 0xb2, 0x3d, 0xbc, 0x35, 0x6d, - 0xb1, 0x50, 0xf5, 0x8c, 0xf2, 0x89, 0x72, 0x20, 0xd0, 0x47, - 0x68, 0x13, 0x42, 0x25, 0x1a, 0xb6, 0xc5, 0x07, 0xdf, 0x45, - 0x11, 0xa9, 0x05, 0x5d, 0xad, 0xf0, 0x49, 0x9e, 0x70, 0x78, - 0xed, 0xe7, 0xf9, 0x00, 0x1f, 0x62, 0x76, 0x47, 0xb5, 0x48, - 0x4f, 0x2c, 0x2e, 0xe3, 0x78, 0x6a, 0x44, 0x46, 0x1e, 0x6b, - 0x00, 0x74, 0x54, 0xb9, 0xd1, 0x4f, 0x6d, 0x45, 0xc1, 0xa6, - 0x45, 0x2e, 0x1a, 0xaf, 0x94, 0x3f, 0xd0, 0x72, 0x67, 0x0d, - 0x2e, 0xa9, 0x8d, 0x16, 0xc4, 0x05, 0x01, 0x07, 0x13, 0x1b, - 0x1c, 0x3d, 0x43, 0x71, 0x91, 0x95, 0x9a, 0xae, 0xaf, 0xc4, - 0xe5, 0xe6, 0xe9, 0xff, 0x02, 0x0c, 0x0f, 0x3e, 0x62, 0x67, - 0x68, 0x81, 0xc7, 0xd0, 0xd8, 0xdd, 0xe0, 0xf5, 0x0b, 0x25, - 0x35, 0x45, 0x4a, 0x4b, 0x63, 0x74, 0x79, 0x7e, 0x82, 0xa2, - 0xaf, 0xc6, 0xc7, 0xcc, 0xd2, 0xfa, 0x2a, 0x2d, 0x2f, 0x32, - 0x35, 0x38, 0x3f, 0x4c, 0x7f, 0x80, 0x81, 0x8b, 0x9b, 0x9c, - 0x9d, 0xa7, 0xa9, 0xcb, 0xe9, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x20, 0x32, 0x46, + 0x27, 0x3b, 0x58, 0xa0, 0xcf, 0x00, 0x29, 0x5e, 0x1a, 0x63, 0xbf, 0xb4, + 0x97, 0x16, 0xa1, 0x9c, 0x78, 0xd1, 0x33, 0xdc, 0x72, 0xde, 0xa3, 0xfc, + 0xf4, 0x09, 0xb1, 0x09, 0x16, 0x3f, 0x80, 0x72, 0x22, 0x68, 0x65, 0x68, + 0xb9, 0x80, 0x5a, 0x4a, 0x0d, 0x73, 0x49, 0xe1, 0xc6, 0xde, 0xca, 0x08, + 0x4f, 0xca, 0xf8, 0xb2, 0xf8, 0x45, 0x3b, 0x6b, 0x8c, 0x6c, 0xfd, 0x3a, + 0xf4, 0xde, 0xde, 0x82, 0xd8, 0x04, 0xbe, 0x4f, 0x4a, 0xdb, 0x92, 0x47, + 0x83, 0x2d, 0xc4, 0x55, 0xed, 0x20, 0x4f, 0x71, 0xb1, 0x58, 0xd9, 0x70, + 0x73, 0xbd, 0xb0, 0x3a, 0xb4, 0x8f, 0xd6, 0x9e, 0x32, 0x98, 0x2b, 0x9e, + 0xff, 0x2a, 0x7c, 0xcb, 0x05, 0x1b, 0x8e, 0xe6, 0x3a, 0x45, 0xc6, 0x7a, + 0xc8, 0xaf, 0x62, 0xd3, 0x04, 0xfa, 0x69, 0x4f, 0xda, 0x1b, 0x74, 0x16, + 0x0d, 0xb3, 0x1a, 0xee, 0x71, 0xd7, 0xb0, 0xef, 0x69, 0xf5, 0xe2, 0xe9, + 0xc2, 0xcc, 0x15, 0x66, 0x28, 0x0a, 0xac, 0xe2, 0x63, 0x06, 0xb7, 0x21, + 0x0d, 0xd8, 0x5c, 0x94, 0x63, 0xfd, 0x51, 0x18, 0x9f, 0x07, 0x19, 0x3d, + 0xa2, 0x50, 0x40, 0xd3, 0xe9, 0x05, 0xd4, 0x11, 0x13, 0x15, 0xaa, 0x46, + 0xda, 0x3e, 0x5f, 0xcd, 0x3c, 0xfa, 0x42, 0xba, 0x79, 0x4a, 0xb7, 0x43, + 0x91, 0xa5, 0xcb, 0xbc, 0xeb, 0x37, 0x94, 0xf1, 0x9c, 0xb9, 0xdb, 0x41, + 0x06, 0xd8, 0x7b, 0x5e, 0x90, 0xe3, 0x3c, 0x8a, 0x10, 0x62, 0x9a, 0x15, + 0x27, 0x78, 0xed, 0x69, 0x11, 0x2c, 0xb5, 0xb4, 0xdb, 0xc8, 0x70, 0x50, + 0x62, 0x47, 0x96, 0xcb, 0xd9, 0xb2, 0x3e, 0x59, 0x2f, 0x1c, 0xac, 0xcb, + 0xcf, 0x22, 0xc2, 0x9b, 0xc7, 0x92, 0xe9, 0x4d, 0x8d, 0x5d, 0xcf, 0x06, + 0x53, 0x7e, 0xf4, 0x4e, 0xfe, 0x9e, 0x41, 0x5d, 0x00, 0x8c, 0x08, 0xf4, + 0x02, 0x79, 0x33, 0x1c, 0x27, 0x1d, 0xe3, 0x94, 0xac, 0xe6, 0x87, 0xa0, + 0x08, 0xb4, 0x60, 0x0c, 0xff, 0x47, 0xdc, 0x16, 0x3a, 0x1d, 0x89, 0xc0, + 0x6a, 0xa4, 0x3d, 0x71, 0x33, 0xdd, 0x1e, 0x70, 0xfe, 0xd4, 0x8b, 0xed, + 0x7c, 0x91, 0xe4, 0xe2, 0x15, 0x06, 0xc1, 0x83, 0x24, 0x55, 0xa7, 0x2a, + 0x9f, 0x4e, 0xd9, 0x56, 0x7a, 0x95, 0xa8, 0xdd, 0xc4, 0xf0, 0x71, 0x3a, + 0x99, 0x65, 0x31, 0x4b, 0xb7, 0x96, 0x2c, 0x53, 0x54, 0x83, 0xec, 0xc9, + 0x97, 0x2f, 0x0c, 0xa4, 0x8f, 0xbb, 0x93, 0x9d, 0xea, 0xae, 0xf9, 0xcb, + 0xb2, 0xb9, 0xa3, 0x61, 0x5f, 0x77, 0x8c, 0xb6, 0x5a, 0x56, 0xbe, 0x5f, + 0x85, 0xd1, 0xb5, 0x0a, 0x53, 0xe2, 0xc7, 0xbf, 0x76, 0x8b, 0x97, 0x6f, + 0x10, 0xdd, 0x1f, 0x44, 0x69, 0x66, 0x03, 0xc4, 0x6b, 0x59, 0xf7, 0xb4, + 0xc1, 0x12, 0xcc, 0x00, 0x70, 0xe8, 0xbd, 0x44, 0x28, 0xf5, 0xfa, 0x96, + 0xf3, 0x59, 0xed, 0x81, 0x67, 0xe0, 0xbe, 0x47, 0x75, 0xb3, 0xa8, 0x9f, + 0x21, 0x70, 0x2e, 0x6f, 0xef, 0x54, 0x11, 0x3f, 0x34, 0xaf, 0x0d, 0x73, + 0x5b, 0x9e, 0x6d, 0x86, 0x58, 0xb7, 0x34, 0xc2, 0xc2, 0xb3, 0x64, 0xd5, + 0x9b, 0x6e, 0xb9, 0x99, 0x6a, 0xe4, 0xfd, 0xc3, 0x17, 0xf3, 0x10, 0xfc, + 0x6e, 0xf5, 0x65, 0xe1, 0x9c, 0x59, 0x15, 0x11, 0x00, 0xea, 0x96, 0x81, + 0x69, 0x9b, 0x05, 0x4d, 0xf3, 0xce, 0xf3, 0xf0, 0xa9, 0x01, 0x3f, 0x13, + 0xbb, 0xb0, 0xac, 0xc3, 0x92, 0x1c, 0x2b, 0x61, 0xe3, 0x01, 0x22, 0x45, + 0x4a, 0x23, 0x19, 0x80, 0xca, 0xb9, 0xef, 0x4e, 0x76, 0x52, 0xc5, 0x9d, + 0x91, 0x33, 0x17, 0xc4, 0x28, 0x83, 0x55, 0x61, 0x49, 0x72, 0x04, 0xaa, + 0xf8, 0xe3, 0x4b, 0x20, 0xf7, 0x6a, 0x74, 0x56, 0x64, 0xf9, 0xb3, 0xc9, + 0x67, 0x5b, 0x55, 0x29, 0x9a, 0x89, 0xa5, 0x14, 0x67, 0xea, 0x6d, 0x6a, + 0xde, 0x98, 0x58, 0x73, 0x25, 0xa3, 0xdb, 0xed, 0x3d, 0x62, 0xaa, 0xe0, + 0x79, 0x7f, 0xa3, 0xd9, 0xb5, 0x4c, 0xe9, 0xa8, 0xdf, 0xfd, 0x59, 0x31, + 0x42, 0x81, 0x9e, 0xb7, 0x81, 0x3f, 0x0e, 0xfb, 0xef, 0x80, 0x71, 0x9d, + 0xb7, 0xa5, 0xfc, 0xb1, 0x80, 0xc9, 0x7e, 0x31, 0xd9, 0x47, 0xe2, 0xca, + 0x10, 0x7b, 0xd1, 0xa1, 0x1c, 0x28, 0xc7, 0x7f, 0x51, 0x26, 0xb1, 0x4e, + 0x57, 0xdd, 0x7d, 0x76, 0x5c, 0x5a, 0x85, 0xa7, 0x7b, 0x8c, 0xc5, 0x6e, + 0xac, 0x20, 0xf8, 0x49, 0x16, 0xd6, 0x64, 0xf5, 0xf4, 0x2c, 0x32, 0xa1, + 0x5d, 0xfb, 0x87, 0xb6, 0x14, 0xfe, 0x68, 0x7c, 0x4d, 0xce, 0xd7, 0x94, + 0xf9, 0x8b, 0xf0, 0x61, 0xfd, 0xe0, 0x83, 0x7f, 0x13, 0xec, 0x7a, 0xb7, + 0x41, 0x04, 0x51, 0x6e, 0x30, 0xa2, 0x01, 0xf7, 0x30, 0x12, 0xec, 0xd2, + 0x8f, 0x73, 0xe7, 0x8e, 0x12, 0xb4, 0xe5, 0xc1, 0xff, 0xdf, 0x67, 0x14, + 0xb1, 0xe9, 0xba, 0x36, 0x19, 0x18, 0xf4, 0xaa, 0xe0, 0xe4, 0x9d, 0xcd, + 0xe8, 0xe7, 0x2b, 0x33, 0xb3, 0xdc, 0xb9, 0x19, 0xd7, 0xad, 0xa4, 0x68, + 0xcd, 0x83, 0x77, 0x98, 0x36, 0x49, 0xd9, 0x32, 0x20, 0xfd, 0xfc, 0x34, + 0xe7, 0x54, 0xd9, 0xb5, 0x05, 0xab, 0x0e, 0x08, 0x0e, 0x16, 0x8a, 0x7d, + 0x91, 0x4c, 0xaa, 0x19, 0x04, 0x37, 0x35, 0xa5, 0xab, 0x6c, 0xee, 0xc4, + 0x90, 0xf0, 0x5f, 0xc7, 0xae, 0x82, 0xfd, 0x59, 0x53, 0xe5, 0x36, 0x5a, + 0x56, 0x37, 0x61, 0x69, 0xda, 0xe5, 0x8f, 0xfd, 0x2e, 0xd4, 0x9c, 0x7f, + 0xb6, 0x39, 0xa4, 0x8d, 0x0a, 0xab, 0x82, 0x0f, 0xfe, 0x84, 0x69, 0x44, + 0x8a, 0xa6, 0xd0, 0x39, 0xf9, 0x72, 0x68, 0xe7, 0x97, 0xd8, 0x6c, 0x7b, + 0xec, 0x85, 0x8c, 0x52, 0xc9, 0x97, 0xbb, 0xc4, 0x7a, 0x67, 0x22, 0x60, + 0x46, 0x9f, 0x16, 0xf1, 0x67, 0x0e, 0x1b, 0x50, 0x7c, 0xc4, 0x29, 0x15, + 0xbc, 0x55, 0x6a, 0x67, 0xf6, 0xa8, 0x85, 0x66, 0x89, 0x9f, 0xff, 0x38, + 0x28, 0xaa, 0x87, 0x91, 0xce, 0xde, 0x8d, 0x45, 0x5c, 0xa1, 0x25, 0x95, + 0xe2, 0x86, 0xdd, 0xa1, 0x87, 0x6a, 0x0a, 0xa8, 0x3e, 0x63, 0x0e, 0x21, + 0xa5, 0x6e, 0x08, 0x4d, 0x07, 0xb6, 0x26, 0xa8, 0x92, 0xdb, 0xed, 0x13, + 0x01, 0xc3, 0xba, 0xcf, 0xad, 0x01, 0xbc, 0xe5, 0xc0, 0xba, 0xbe, 0x7c, + 0x75, 0xf1, 0xb9, 0xfe, 0xd3, 0xf0, 0xa5, 0x2c, 0x8e, 0x10, 0xff, 0x99, + 0xcb, 0xe2, 0x2d, 0xdc, 0x2f, 0x76, 0x00, 0xf8, 0x51, 0x7c, 0xcc, 0x52, + 0x16, 0x0f, 0x18, 0x98, 0xea, 0x34, 0x06, 0x7f, 0xb7, 0x2e, 0xe9, 0x40, + 0xf0, 0x2d, 0x30, 0x3d, 0xc0, 0x67, 0x4c, 0xe6, 0x63, 0x40, 0x41, 0x42, + 0x96, 0xbb, 0x0b, 0xd6, 0xc9, 0x1c, 0x22, 0x7a, 0xa9, 0x4d, 0xcc, 0x5b, + 0xaa, 0x03, 0xc6, 0x3b, 0x1e, 0x2f, 0x11, 0xae, 0x34, 0x6f, 0x0c, 0xe9, + 0x16, 0x9c, 0x82, 0x3b, 0x90, 0x4c, 0x0e, 0xf0, 0xf9, 0x7f, 0x02, 0xca, + 0xb9, 0xa9, 0x49, 0x6d, 0x27, 0x73, 0xd0, 0xbf, 0x15, 0x61, 0x52, 0xbc, + 0xd6, 0x31, 0x59, 0x2b, 0x52, 0x5b, 0xaf, 0x3c, 0xc0, 0x8f, 0xdc, 0xd5, + 0x2c, 0x1d, 0xe4, 0xe9, 0x41, 0xe8, 0xd3, 0x35, 0xd6, 0xb1, 0xf3, 0x32, + 0xe0, 0x52, 0x08, 0x73, 0x99, 0xb6, 0x6b, 0xbc, 0x26, 0xfb, 0x2e, 0xa7, + 0xb7, 0xcd, 0x14, 0xf0, 0xf9, 0xe5, 0x3a, 0xd0, 0x05, 0x5b, 0x2b, 0x38, + 0xbd, 0x7c, 0xda, 0xd4, 0x15, 0x45, 0xfa, 0x3b, 0x6f, 0x94, 0x8e, 0x22, + 0xce, 0xfa, 0x53, 0xe0, 0x5f, 0xa6, 0x9d, 0x1c, 0x26, 0x91, 0x8a, 0xab, + 0x72, 0x5b, 0x18, 0x78, 0x69, 0x98, 0x3f, 0x8d, 0x33, 0x7c, 0x21, 0x93, + 0x9e, 0xf0, 0xaf, 0xb7, 0x30, 0xc8, 0xac, 0xbc, 0xdb, 0x9c, 0x29, 0x17, + 0x6b, 0x9d, 0x0f, 0x16, 0xd6, 0xc0, 0xcc, 0x3b, 0xce, 0x11, 0xe9, 0x64, + 0xc8, 0xd4, 0x4c, 0x98, 0x7c, 0x8f, 0xf1, 0x5e, 0x84, 0xe4, 0x72, 0xf9, + 0x69, 0xf5, 0x9d, 0xad, 0x95, 0x3b, 0xfb, 0x6d, 0x30, 0x7e, 0x0a, 0x47, + 0x5b, 0x26, 0xb2, 0x4e, 0xeb, 0x1a, 0xc3, 0x37, 0x16, 0x28, 0x79, 0x62, + 0xb4, 0x36, 0x85, 0x4a, 0x15, 0x5a, 0xc3, 0x6e, 0xbe, 0x7e, 0x00, 0xe9, + 0x4a, 0xa5, 0xd7, 0x90, 0xcf, 0x59, 0x63, 0x2d, 0x2b, 0xc2, 0xc6, 0x47, + 0xe6, 0x77, 0xb7, 0x6e, 0x9b, 0xc8, 0x0d, 0x18, 0x2b, 0x45, 0x2b, 0xc9, + 0x5a, 0x6e, 0xb4, 0x50, 0xa5, 0x23, 0x7d, 0x17, 0xcc, 0x49, 0xe2, 0xb3, + 0xf4, 0x6d, 0xb4, 0xb7, 0xbb, 0x9e, 0xdd, 0x20, 0x99, 0x19, 0xf5, 0x53, + 0x1f, 0xd0, 0xff, 0x67, 0xf3, 0x8e, 0x6a, 0xcd, 0x2a, 0x6e, 0x2b, 0x0a, + 0x90, 0xd7, 0xdb, 0xe1, 0xff, 0x1c, 0x40, 0xa1, 0xb0, 0x5d, 0x94, 0x4d, + 0x20, 0x14, 0x01, 0xa1, 0xa8, 0xd1, 0x15, 0xd2, 0xd9, 0x1b, 0xbf, 0xc2, + 0x8a, 0xd0, 0x02, 0xf6, 0x16, 0xa1, 0xb7, 0x40, 0xe0, 0x36, 0x88, 0xc8, + 0x17, 0x0a, 0xf0, 0xb6, 0x0d, 0x3c, 0x53, 0xb9, 0x51, 0xed, 0xef, 0x20, + 0x6f, 0xf3, 0x0c, 0xb5, 0xce, 0x0e, 0x9e, 0xfd, 0x0f, 0x5e, 0x3f, 0x8f, + 0x3c, 0xb7, 0x2a, 0xdb, 0xc6, 0xa7, 0xf2, 0x11, 0x6e, 0xdc, 0x05, 0x33, + 0xd4, 0xd8, 0xb0, 0x2d, 0x8a, 0xe5, 0x39, 0x82, 0x00, 0x49, 0x7d, 0xfd, + 0x32, 0x29, 0xbb, 0x79, 0x5d, 0xcb, 0x21, 0x7b, 0x2d, 0x36, 0x58, 0x73, + 0x52, 0x57, 0x52, 0x96, 0x4d, 0x89, 0x61, 0xf4, 0xad, 0x1f, 0x48, 0xd5, + 0x7a, 0x4a, 0xaa, 0x1c, 0xa1, 0xf4, 0xb4, 0x9c, 0x43, 0x3b, 0x95, 0x72, + 0xd0, 0x0e, 0x35, 0x82, 0x26, 0xd4, 0x2e, 0xe3, 0x83, 0x96, 0x97, 0x5a, + 0x7b, 0xfc, 0x48, 0x17, 0x3c, 0xba, 0x9e, 0x5f, 0x46, 0x1a, 0x53, 0xe3, + 0x2e, 0x78, 0x79, 0x80, 0xf6, 0x2d, 0x24, 0xcf, 0x62, 0xb6, 0x86, 0xeb, + 0xee, 0xec, 0xf2, 0x1d, 0x00, 0xc8, 0x28, 0x9d, 0x93, 0x16, 0xa7, 0xd9, + 0x11, 0x47, 0xe3, 0xc4, 0xb6, 0xc4, 0xa0, 0x99, 0x83, 0xc1, 0x17, 0xd8, + 0x8e, 0xde, 0x69, 0x1d, 0xcb, 0xdd, 0xe7, 0x86, 0x6f, 0xf2, 0x36, 0x07, + 0x23, 0x86, 0x0d, 0xe9, 0xad, 0x87, 0xae, 0x76, 0x98, 0x95, 0x51, 0xf2, + 0xb3, 0x11, 0xc5, 0x34, 0xf0, 0x0c, 0xf8, 0x29, 0x9c, 0x84, 0x4f, 0x81, + 0x49, 0x85, 0x63, 0x25, 0x16, 0xb0, 0xc3, 0xaa, 0xd7, 0x8a, 0x2e, 0x4b, + 0x97, 0x60, 0x74, 0xf8, 0xa7, 0x39, 0xec, 0x6c, 0x2c, 0x9b, 0x33, 0x3a, + 0x11, 0xbd, 0xa6, 0x90, 0x48, 0x65, 0xb1, 0xe7, 0x38, 0x53, 0x47, 0x1b, + 0x62, 0xd5, 0xb7, 0xa8, 0xd4, 0xae, 0xf5, 0x12, 0x06, 0x12, 0x54, 0xa2, + 0xce, 0xf1, 0x6b, 0x3a, 0xda, 0x63, 0x2e, 0x37, 0x2a, 0x25, 0x89, 0x30, + 0x98, 0x77, 0x1d, 0x4b, 0x5a, 0x1e, 0xb7, 0x3d, 0xed, 0x19, 0xec, 0x9f, + 0x64, 0x46, 0xa8, 0x2a, 0x79, 0xf3, 0x70, 0x39, 0x9f, 0x8c, 0xc3, 0x28, + 0xcc, 0x2a, 0xc0, 0xd0, 0xe6, 0x80, 0xf5, 0x01, 0x78, 0x72, 0x7f, 0xe7, + 0x2e, 0x7b, 0x5f, 0x05, 0xc3, 0x41, 0x33, 0x07, 0xdb, 0x9c, 0xa8, 0x96, + 0xa7, 0x21, 0x20, 0x23, 0xd0, 0x59, 0x39, 0x06, 0x19, 0xa4, 0x29, 0xe5, + 0x72, 0x39, 0x69, 0x23, 0xe3, 0xfa, 0x28, 0x63, 0xf5, 0x42, 0x3b, 0xca, + 0x88, 0x5d, 0x7e, 0x47, 0x93, 0xa8, 0x8c, 0x75, 0xf2, 0x19, 0x44, 0x43, + 0x15, 0x39, 0x03, 0x42, 0xd8, 0x1d, 0x81, 0x30, 0x8e, 0x84, 0x31, 0x24, + 0x75, 0x67, 0x4e, 0xbe, 0xfe, 0x0a, 0xd8, 0xc3, 0xe7, 0x5b, 0xe1, 0xd5, + 0x12, 0x6a, 0x69, 0x99, 0xcd, 0x35, 0xca, 0x22, 0x02, 0x65, 0xb3, 0x0f, + 0x50, 0xb6, 0xaa, 0xc6, 0x91, 0x5c, 0x4d, 0xd4, 0x07, 0x93, 0x46, 0xf0, + 0xcc, 0xe1, 0x92, 0x14, 0x91, 0x21, 0x43, 0xc4, 0xba, 0x45, 0x1c, 0x47, + 0x29, 0xdf, 0xff, 0x89, 0x60, 0xee, 0x89, 0x1e, 0xc3, 0xb4, 0xb9, 0x0b, + 0xc9, 0x7e, 0xd9, 0x15, 0xb0, 0x80, 0x91, 0xbe, 0xb9, 0x43, 0x48, 0x12, + 0x86, 0x8e, 0x79, 0x38, 0x4d, 0xce, 0x36, 0x7f, 0xc3, 0xe8, 0xb7, 0xb9, + 0x92, 0xbf, 0x27, 0x20, 0x54, 0xc8, 0x05, 0x63, 0x3b, 0xf5, 0x48, 0x1a, + 0xa9, 0x04, 0x6c, 0xb6, 0x0e, 0x11, 0xea, 0xf3, 0x59, 0xb9, 0xa6, 0xf6, + 0xf8, 0x0b, 0x15, 0xed, 0x30, 0xf9, 0xe4, 0xe5, 0x26, 0x2d, 0xbb, 0xc6, + 0x5b, 0x36, 0xbb, 0x73, 0xa6, 0x4f, 0xf5, 0x43, 0x9f, 0xd7, 0xb9, 0x0f, + 0xbc, 0x4f, 0x8d, 0xb8, 0xec, 0x1d, 0x42, 0x19, 0x56, 0x37, 0xc4, 0xcb, + 0xd0, 0x16, 0x85, 0xff, 0xd3, 0x9b, 0xef, 0xc8, 0x75, 0x37, 0xd1, 0x92, + 0xad, 0x21, 0x94, 0x1e, 0x9a, 0xf6, 0x2f, 0x6d, 0x30, 0xba, 0x37, 0xc3, + 0xdc, 0x11, 0xe0, 0x79, 0xa4, 0x92, 0x1f, 0xe4, 0xaa, 0x7a, 0x6b, 0x2a, + 0xe4, 0x04, 0xb7, 0xf9, 0x86, 0x95, 0xdb, 0xa8, 0xfc, 0x8a, 0x53, 0x21, + 0x31, 0x14, 0xf7, 0x40, 0x01, 0x78, 0x4e, 0x73, 0x18, 0xb3, 0x54, 0xd7, + 0xa6, 0x93, 0xf0, 0x70, 0x04, 0x1c, 0xe0, 0x2b, 0xef, 0xee, 0xd4, 0x64, + 0xa7, 0xd9, 0x9f, 0x81, 0x4f, 0xe5, 0x1e, 0xbe, 0x6e, 0xd2, 0xf6, 0x3a, + 0xba, 0xcf, 0x8c, 0x96, 0x2a, 0x3d, 0xf7, 0xe5, 0x5c, 0x59, 0x40, 0x9c, + 0xe3, 0xf9, 0x2b, 0x6d, 0x3d, 0xf2, 0x6f, 0x81, 0xd6, 0xab, 0x9c, 0xab, + 0xc6, 0xf7, 0x8f, 0xaa, 0xe5, 0x71, 0xe3, 0xc9, 0x8c, 0x1a, 0xeb, 0xc5, + 0x87, 0xe7, 0xb0, 0xde, 0x18, 0xba, 0xaa, 0x1e, 0xda, 0x12, 0x32, 0x16, + 0x94, 0x3a, 0x6e, 0x4f, 0x84, 0x06, 0x8e, 0x33, 0xf7, 0xfa, 0x35, 0xb8, + 0x45, 0xe4, 0x5e, 0x9e, 0x46, 0x05, 0x7a, 0xf7, 0xf4, 0x99, 0xad, 0xb9, + 0xdd, 0x55, 0xd9, 0x52, 0x3b, 0x93, 0xe3, 0x9b, 0x54, 0x1b, 0xe6, 0xa9, + 0x70, 0xd3, 0x48, 0xf9, 0x3d, 0xdb, 0x88, 0x63, 0x66, 0xa0, 0xab, 0x72, + 0x83, 0x6e, 0x8f, 0x78, 0x9d, 0x55, 0x46, 0x21, 0xca, 0x7c, 0xb7, 0x5d, + 0x16, 0xe8, 0x66, 0x3b, 0x7b, 0xaa, 0xfe, 0x9c, 0x9c, 0x33, 0xc9, 0xc2, + 0xa4, 0x3c, 0x78, 0x97, 0xf3, 0x5b, 0xc2, 0x29, 0x36, 0x98, 0x68, 0x28, + 0xfe, 0x0a, 0xae, 0x6f, 0xe5, 0xf7, 0xfb, 0x9d, 0xf8, 0x8c, 0xd9, 0xd0, + 0x4d, 0xfe, 0xc7, 0xd0, 0xb0, 0xe3, 0x9c, 0xdb, 0xac, 0x9e, 0x1b, 0x55, + 0x7e, 0x24, 0xfe, 0xc4, 0x12, 0xcb, 0xc2, 0xdd, 0x0a, 0xda, 0x31, 0x40, + 0x41, 0xb7, 0xfc, 0x3f, 0x6d, 0xe2, 0xd3, 0x8a, 0x0f, 0x21, 0x33, 0x3a, + 0xbc, 0xa7, 0x62, 0x18, 0xb3, 0xaf, 0x48, 0xc6, 0xe2, 0xa3, 0xdd, 0x1d, + 0x20, 0x62, 0xe4, 0x4b, 0x81, 0x6b, 0x3a, 0xc5, 0xb1, 0x07, 0xe1, 0xf1, + 0xe1, 0xba, 0xf6, 0x01, 0xc6, 0xf2, 0xea, 0xc0, 0x97, 0x73, 0x79, 0x19, + 0x06, 0xaa, 0x62, 0x42, 0xcb, 0x21, 0x5f, 0x08, 0x97, 0x7d, 0x72, 0xb5, + 0x39, 0x4d, 0x99, 0xe3, 0xa2, 0x3f, 0xb9, 0xb4, 0xed, 0xf4, 0x61, 0x35, + 0xe1, 0x50, 0xfb, 0x56, 0x7c, 0x35, 0xfd, 0x44, 0x8a, 0x57, 0x22, 0xed, + 0x30, 0x33, 0xc3, 0x0b, 0xf1, 0x88, 0xe4, 0x44, 0x46, 0xf5, 0x73, 0x6d, + 0x9b, 0x98, 0x88, 0x92, 0xf5, 0x34, 0x85, 0x18, 0x66, 0xef, 0x70, 0xbe, + 0x7b, 0xc1, 0x0f, 0x1c, 0x78, 0x2d, 0x42, 0x13, 0x2d, 0x2f, 0x4d, 0x40, + 0x8e, 0xe2, 0x6f, 0xe0, 0x04, 0xdb, 0x58, 0xbc, 0x65, 0x80, 0xba, 0xfc, + 0x89, 0xee, 0xf3, 0x78, 0xb2, 0xd9, 0x78, 0x93, 0x6d, 0xbf, 0xd4, 0x74, + 0x24, 0xf4, 0x5c, 0x37, 0x89, 0x0c, 0x14, 0xd5, 0xbd, 0xc5, 0xfc, 0x37, + 0xe8, 0x8b, 0xe0, 0xc5, 0x89, 0xc9, 0x70, 0xb3, 0x76, 0x46, 0xce, 0x0d, + 0x7c, 0x3d, 0xa4, 0x5d, 0x02, 0x95, 0x03, 0xba, 0x24, 0xaa, 0xf7, 0xd0, + 0x75, 0x35, 0x78, 0x27, 0x9c, 0x6d, 0x2a, 0xef, 0xaa, 0xac, 0x85, 0xef, + 0x8d, 0xfc, 0xc0, 0xfc, 0x72, 0x02, 0xf4, 0xa3, 0xd3, 0x87, 0xfc, 0x4d, + 0xce, 0x3d, 0xcb, 0xc2, 0x74, 0x5b, 0xb0, 0x83, 0xc5, 0x72, 0x72, 0xd6, + 0xa1, 0x67, 0x4d, 0xa1, 0xd6, 0xaa, 0xe7, 0x9b, 0xe7, 0xc0, 0xfd, 0x86, + 0x91, 0x08, 0xfa, 0x48, 0x2f, 0x50, 0xce, 0x17, 0xea, 0x1c, 0xe3, 0x90, + 0x35, 0xe6, 0x6c, 0xc9, 0x66, 0x7d, 0x51, 0x32, 0x20, 0x0c, 0x2d, 0x4b, + 0xa1, 0xbf, 0x78, 0x87, 0xe1, 0x5a, 0x28, 0x0e, 0x9a, 0x85, 0xf6, 0x7e, + 0x39, 0x60, 0xbc, 0x64, 0x42, 0x5d, 0xf0, 0x0a, 0xd7, 0x3e, 0xbb, 0xa0, + 0x6d, 0x7c, 0xfa, 0x75, 0xee, 0x34, 0x39, 0x23, 0x0e, 0xbd, 0x50, 0x19, + 0x7a, 0x2a, 0xb7, 0x17, 0x3a, 0x8b, 0xb7, 0xb6, 0xf4, 0xd8, 0x47, 0x71, + 0x6b, 0x21, 0x1b, 0x56, 0xcc, 0xfb, 0x7b, 0x81, 0x99, 0x46, 0x88, 0x23, + 0x40, 0x49, 0x66, 0x8b, 0xac, 0x84, 0x16, 0x8a, 0x86, 0xae, 0x38, 0xc4, + 0x5b, 0x1f, 0x2b, 0xfa, 0xf2, 0x8b, 0x81, 0xc1, 0x22, 0x61, 0x61, 0x6c, + 0x43, 0x16, 0x8c, 0x1d, 0x37, 0xb2, 0xaf, 0x3c, 0x3a, 0x90, 0x33, 0xed, + 0xf5, 0x08, 0x78, 0xfd, 0x5a, 0xde, 0xd3, 0x38, 0x6d, 0xd7, 0x1c, 0x23, + 0xeb, 0xb4, 0x9b, 0x8e, 0xc2, 0x48, 0x47, 0x8e, 0x84, 0xbb, 0xc4, 0xd0, + 0xcc, 0xf9, 0x55, 0x5a, 0x57, 0xb9, 0x99, 0x52, 0x82, 0x21, 0x3b, 0x83, + 0xda, 0x8f, 0xa3, 0x88, 0x9c, 0x57, 0xe0, 0x4b, 0xc1, 0xce, 0xbe, 0xd3, + 0xea, 0xdd, 0xf2, 0x07, 0xc1, 0x73, 0x6f, 0xc0, 0x5e, 0x8e, 0x85, 0x72, + 0xab, 0x2f, 0xa9, 0xac, 0x39, 0xee, 0x05, 0x34, 0x13, 0x16, 0x1b, 0x1c, + 0x21, 0x24, 0x41, 0x49, 0x78, 0x87, 0x8b, 0x97, 0x9c, 0x9f, 0xa3, 0xa8, + 0xb9, 0xbc, 0xc6, 0xcc, 0xf2, 0xfd, 0x18, 0x2a, 0x46, 0x58, 0x5a, 0x88, + 0xa2, 0xb5, 0xcc, 0xd2, 0xda, 0xe1, 0xe3, 0x0d, 0x20, 0x23, 0x2b, 0x2f, + 0x47, 0x57, 0x5e, 0x64, 0x87, 0x97, 0x9c, 0xa7, 0xaa, 0xbc, 0xc1, 0xe4, + 0xe5, 0xea, 0x0b, 0x16, 0x3b, 0x3c, 0x3e, 0x45, 0x58, 0x63, 0x6a, 0x6f, + 0x7c, 0x8c, 0x8d, 0x92, 0x99, 0x9c, 0xad, 0xb5, 0xb7, 0xce, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x16, 0x23, 0x36, 0x4a }; return dilithium_param_vfy_test(WC_ML_DSA_44, ml_dsa_44_pub_key, @@ -41062,535 +42286,447 @@ static wc_test_ret_t dilithium_param_44_vfy_test(void) static wc_test_ret_t dilithium_param_65_vfy_test(void) { WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_65_pub_key[] = { - 0x15, 0xc9, 0xe5, 0x53, 0x2f, 0xd8, 0x1f, 0xb4, 0xa3, 0x9f, - 0xae, 0xad, 0xb3, 0x10, 0xd0, 0x72, 0x69, 0xd3, 0x02, 0xf3, - 0xdf, 0x67, 0x5a, 0x31, 0x52, 0x19, 0xca, 0x39, 0x27, 0x77, - 0x61, 0x6d, 0x0f, 0xc1, 0x33, 0x26, 0x09, 0xf0, 0xf9, 0x4d, - 0x12, 0x7a, 0xef, 0xf7, 0x21, 0x26, 0x2c, 0xe0, 0xe2, 0x92, - 0x1f, 0x9d, 0xd1, 0xaa, 0xaf, 0x08, 0x14, 0xf2, 0xaa, 0x24, - 0x99, 0x0f, 0x20, 0x57, 0x35, 0x04, 0x32, 0x96, 0x8e, 0x6e, - 0x10, 0x64, 0xe3, 0xe3, 0x57, 0x26, 0x33, 0x32, 0x7b, 0xe4, - 0x18, 0x41, 0x77, 0xd3, 0x24, 0x63, 0x3d, 0x11, 0xea, 0xdc, - 0xbe, 0x59, 0xff, 0x8d, 0xc2, 0xe4, 0xc7, 0x04, 0xf3, 0xd4, - 0xe0, 0x1d, 0x5e, 0x09, 0x46, 0xbf, 0x02, 0x05, 0xc7, 0xa6, - 0xb7, 0x82, 0x40, 0x1f, 0x55, 0xe9, 0x77, 0x82, 0xc0, 0xcc, - 0x86, 0x99, 0x19, 0x99, 0xa2, 0xc9, 0x1b, 0x4f, 0xdd, 0x49, - 0x4c, 0x78, 0x0a, 0x58, 0xb8, 0xf0, 0x23, 0xac, 0x1a, 0x71, - 0x57, 0x6d, 0xd6, 0x3a, 0x3a, 0x6f, 0x93, 0xb3, 0x2b, 0x09, - 0xbe, 0xec, 0x7b, 0x5b, 0xf7, 0x3a, 0xed, 0xf9, 0xd0, 0xb1, - 0xfe, 0x9f, 0x9b, 0xec, 0x11, 0xb6, 0x6b, 0xd1, 0xb6, 0x00, - 0x72, 0x7f, 0x68, 0x9a, 0x61, 0xa5, 0xf5, 0x6e, 0xe9, 0x46, - 0xa4, 0x82, 0x08, 0x9f, 0x50, 0x4c, 0x75, 0xc3, 0x48, 0x85, - 0x76, 0x39, 0xea, 0x0c, 0xf2, 0xe8, 0x7e, 0x48, 0x69, 0xd9, - 0x6f, 0x9a, 0x89, 0x7d, 0x98, 0xc1, 0x16, 0xdc, 0x2f, 0xc7, - 0x0a, 0x11, 0xa8, 0xbb, 0xe7, 0x91, 0xb1, 0x0f, 0x0e, 0xf0, - 0xb4, 0xc8, 0x41, 0x7e, 0x62, 0x9e, 0x3c, 0x30, 0x4c, 0xbc, - 0x4c, 0xeb, 0x37, 0xaf, 0x48, 0x72, 0x59, 0x64, 0x8e, 0xfb, - 0x77, 0x11, 0x28, 0xdd, 0x30, 0x52, 0x8e, 0x69, 0x8c, 0x9f, - 0x3d, 0xec, 0xdf, 0xa7, 0x5f, 0x42, 0x18, 0xda, 0xba, 0x1a, - 0x96, 0x91, 0x7d, 0x62, 0xd5, 0x52, 0xff, 0x44, 0xc9, 0x1d, - 0x29, 0xa6, 0xb9, 0x03, 0x9a, 0x26, 0x26, 0xcf, 0x57, 0x40, - 0x70, 0x7e, 0x2b, 0xbd, 0xf0, 0x81, 0x71, 0x0f, 0x0b, 0x2e, - 0x9b, 0x03, 0xba, 0x31, 0x41, 0x68, 0x37, 0xc8, 0xff, 0xea, - 0xc4, 0x73, 0xa5, 0xf9, 0xc2, 0x92, 0x78, 0x0c, 0xe7, 0xfd, - 0x5d, 0xb2, 0x01, 0xb5, 0x8d, 0xeb, 0x64, 0xd4, 0x14, 0xea, - 0x7a, 0xd1, 0x42, 0xc8, 0x99, 0xe4, 0x7d, 0x5b, 0x7e, 0x3b, - 0x8f, 0xab, 0x82, 0x12, 0xdf, 0xbb, 0xa1, 0x45, 0x30, 0xc9, - 0x0f, 0xb9, 0xe5, 0xba, 0xe6, 0x8a, 0xf3, 0x78, 0x61, 0xcc, - 0x9f, 0xe1, 0x46, 0x2a, 0x9a, 0x18, 0x0e, 0x2a, 0x57, 0xf3, - 0xe5, 0x56, 0xd1, 0x42, 0x48, 0xe1, 0x5a, 0x8e, 0x33, 0xce, - 0x19, 0xe5, 0x3e, 0x7f, 0x00, 0x70, 0x9c, 0x4c, 0xd3, 0xe1, - 0x0c, 0xa1, 0x7e, 0xd4, 0xa9, 0x9e, 0x8b, 0xe2, 0xf0, 0xac, - 0xdb, 0xa6, 0x72, 0x75, 0x67, 0xa6, 0x57, 0xed, 0x79, 0x2e, - 0xca, 0x8d, 0xeb, 0x9b, 0x9e, 0xb7, 0xbf, 0x30, 0x02, 0x2b, - 0xb3, 0x43, 0x89, 0x9b, 0xa8, 0x88, 0xa5, 0xbb, 0x33, 0xd9, - 0x99, 0x30, 0x7c, 0xc7, 0xd4, 0x28, 0x5e, 0x5e, 0x3f, 0x9d, - 0x6d, 0x35, 0x75, 0x33, 0x8e, 0xff, 0x84, 0x2e, 0x2d, 0xda, - 0xf0, 0xff, 0x70, 0xe5, 0xb5, 0x62, 0x96, 0x33, 0x3a, 0xd9, - 0xb5, 0x82, 0x25, 0x81, 0x81, 0x40, 0x5d, 0x4f, 0x11, 0x86, - 0x63, 0x1a, 0x06, 0xc1, 0x67, 0xc7, 0x49, 0x03, 0xc7, 0xe4, - 0x6f, 0xb4, 0x13, 0x3e, 0x57, 0x62, 0xfd, 0x8a, 0xc6, 0x2b, - 0x65, 0x5b, 0xa4, 0x29, 0x57, 0x8d, 0xde, 0xa5, 0xee, 0x32, - 0xc2, 0x76, 0x03, 0xca, 0xce, 0xc1, 0x48, 0xec, 0x45, 0xcf, - 0x30, 0x21, 0x28, 0x7f, 0x10, 0x47, 0xd2, 0xdb, 0xee, 0xca, - 0x5b, 0x0f, 0xd5, 0x39, 0x3a, 0xc3, 0xa6, 0x78, 0xb2, 0x15, - 0xaf, 0x82, 0x3c, 0x2f, 0xc4, 0x51, 0x5c, 0x52, 0xad, 0xf2, - 0x89, 0x92, 0x8e, 0xf3, 0x50, 0x38, 0xed, 0xf8, 0xc9, 0x14, - 0x4c, 0xe4, 0xa3, 0x9a, 0xaf, 0xc4, 0x5c, 0xf3, 0x9f, 0xc3, - 0xa3, 0xc0, 0xbe, 0x45, 0x1b, 0x21, 0x63, 0xfa, 0xe0, 0xe0, - 0x91, 0x2b, 0x42, 0xca, 0x91, 0xfb, 0x5e, 0x97, 0x9a, 0x0a, - 0xd4, 0x88, 0xba, 0xb8, 0x22, 0xc6, 0xbf, 0x56, 0x58, 0x1e, - 0x92, 0xa9, 0x9d, 0xa7, 0xed, 0xc9, 0xab, 0x54, 0x4f, 0x75, - 0x8d, 0x42, 0xc1, 0xe1, 0x61, 0xd0, 0x91, 0x9a, 0x3a, 0x40, - 0x9a, 0xa3, 0xfb, 0x7b, 0x4e, 0xf0, 0x85, 0xf0, 0xdc, 0x40, - 0x72, 0x9f, 0x05, 0xa8, 0xbe, 0x95, 0x5a, 0x7f, 0xba, 0x75, - 0x00, 0x6e, 0x95, 0x76, 0xbd, 0xb2, 0x40, 0xf5, 0xb0, 0x64, - 0x0a, 0x2f, 0x06, 0x3d, 0x9f, 0xac, 0x6a, 0xa5, 0x46, 0x5a, - 0x85, 0xa4, 0x6f, 0xee, 0x27, 0xa0, 0xeb, 0x5f, 0x1f, 0x91, - 0xbd, 0x2b, 0x02, 0x16, 0xdf, 0x74, 0x97, 0x2c, 0xd0, 0xa8, - 0x9f, 0x3a, 0x7b, 0xdf, 0x3e, 0x98, 0x4a, 0x91, 0xdc, 0x19, - 0x96, 0x88, 0x75, 0x21, 0x1a, 0x6a, 0xa8, 0x4b, 0x1f, 0x35, - 0xd1, 0x92, 0xf5, 0x76, 0xf4, 0x72, 0x55, 0x13, 0xdb, 0x5d, - 0x07, 0x8d, 0xd9, 0x72, 0xe4, 0x75, 0xde, 0x80, 0xbc, 0xe9, - 0x9c, 0xf0, 0x5c, 0x6a, 0x8a, 0x0e, 0x34, 0xf6, 0x3f, 0x5c, - 0xef, 0x0e, 0xcc, 0x52, 0x38, 0x2d, 0x7b, 0xc2, 0x1b, 0x69, - 0x9f, 0xe5, 0xed, 0x14, 0xb0, 0x91, 0x0b, 0xe9, 0x4d, 0x34, - 0xd5, 0xaa, 0xd4, 0xd2, 0x46, 0x39, 0x45, 0x7e, 0x85, 0x2f, - 0xdb, 0x89, 0xf4, 0xff, 0x05, 0x74, 0x51, 0xba, 0xdd, 0xee, - 0xf6, 0xc2, 0xc1, 0x0a, 0x8f, 0xd9, 0xeb, 0xc7, 0x61, 0x30, - 0x8f, 0x86, 0x8b, 0x1f, 0x82, 0xc1, 0x22, 0xfd, 0x83, 0xf4, - 0x5d, 0xc5, 0x94, 0xf5, 0xd7, 0x17, 0xc7, 0x7b, 0x71, 0xf5, - 0x5e, 0x15, 0x49, 0x70, 0xb2, 0x57, 0xa0, 0xc0, 0x57, 0x63, - 0x53, 0x35, 0xb6, 0x52, 0x20, 0x7b, 0x83, 0xd4, 0x57, 0x63, - 0x25, 0x8e, 0x83, 0xb3, 0x8e, 0x26, 0x1f, 0x09, 0xde, 0x14, - 0xd6, 0xa6, 0xfc, 0xe5, 0x93, 0x3c, 0x88, 0x8e, 0xf5, 0x10, - 0x57, 0xb9, 0xc9, 0x9b, 0xff, 0x72, 0x9d, 0x3d, 0x3f, 0x97, - 0xd9, 0x3c, 0x20, 0xe2, 0x57, 0xfd, 0x2a, 0x5c, 0x17, 0x12, - 0xe6, 0x08, 0xaf, 0xe4, 0x26, 0x96, 0xb9, 0x6d, 0xc3, 0xac, - 0x22, 0xf3, 0x8b, 0x89, 0xde, 0xc7, 0x8a, 0x93, 0x06, 0xf7, - 0x1d, 0x08, 0x21, 0x36, 0x16, 0x74, 0x2b, 0x97, 0x23, 0xe4, - 0x79, 0x31, 0x08, 0x23, 0x62, 0x30, 0x67, 0xe2, 0xed, 0x30, - 0x9b, 0x0c, 0xf9, 0x08, 0x7a, 0x29, 0x73, 0xc6, 0x77, 0x8a, - 0xbb, 0x2a, 0x1c, 0x66, 0xd0, 0xdd, 0x9e, 0xa3, 0xe9, 0x62, - 0xcc, 0xb7, 0x88, 0x25, 0x4a, 0x5f, 0xbc, 0xaa, 0xe3, 0xe4, - 0x4f, 0xec, 0xa6, 0x8e, 0xa6, 0xa4, 0x1b, 0x22, 0x2b, 0x2c, - 0x8f, 0x57, 0x7f, 0xb7, 0x33, 0xfe, 0x16, 0x43, 0x85, 0xc5, - 0xd2, 0x95, 0xe6, 0xb9, 0x21, 0x68, 0x88, 0x98, 0x33, 0x8c, - 0x1d, 0x15, 0x9c, 0x4d, 0x62, 0x1f, 0x6b, 0xe8, 0x7a, 0x2d, - 0x6b, 0x0e, 0xc3, 0xde, 0x1a, 0xa8, 0xed, 0x67, 0xb3, 0xb3, - 0x36, 0x5b, 0x4b, 0xcb, 0xe8, 0xa8, 0x5c, 0x0b, 0x2f, 0xca, - 0xd7, 0x71, 0xe8, 0x85, 0xe7, 0x4d, 0xe5, 0x7b, 0x45, 0xed, - 0xb2, 0x4c, 0x69, 0x04, 0x7e, 0x4f, 0xc0, 0xef, 0x1a, 0xca, - 0x0d, 0xa6, 0xc4, 0x79, 0x15, 0x78, 0x9c, 0xd2, 0x91, 0x3c, - 0x32, 0x55, 0x40, 0xe7, 0xcb, 0x7e, 0xde, 0x07, 0xa6, 0x97, - 0x00, 0x2d, 0x70, 0xf6, 0x3d, 0x15, 0xdf, 0x29, 0x8e, 0xa3, - 0x96, 0x6d, 0xf2, 0xbb, 0xa5, 0x1b, 0x7b, 0x58, 0x30, 0xf6, - 0x17, 0xbd, 0xda, 0x13, 0xf7, 0x33, 0xc2, 0x62, 0x32, 0xd4, - 0x1c, 0x2e, 0x31, 0x74, 0x92, 0xad, 0x99, 0x8c, 0x0e, 0x7c, - 0x50, 0x21, 0xcd, 0xff, 0x41, 0xeb, 0xd1, 0xca, 0x14, 0xb7, - 0xb2, 0x31, 0x2f, 0xbe, 0x16, 0xce, 0x4f, 0x26, 0x16, 0x04, - 0xc2, 0xaf, 0xbe, 0x0d, 0x24, 0xab, 0x9a, 0x21, 0x37, 0x06, - 0xac, 0x50, 0x23, 0xf1, 0xbe, 0x5c, 0xbb, 0x64, 0xf3, 0xd3, - 0x66, 0xa3, 0xb8, 0xbe, 0x8b, 0x49, 0x8d, 0xf6, 0xc7, 0xb9, - 0x8f, 0x4e, 0x31, 0x06, 0x51, 0xe5, 0xf3, 0x0e, 0x56, 0xc4, - 0x24, 0x30, 0xf5, 0xe9, 0x36, 0x71, 0xbc, 0xc9, 0x70, 0x2c, - 0x6c, 0x4c, 0x15, 0x43, 0x44, 0xa4, 0xfc, 0xf1, 0xd2, 0x71, - 0x6c, 0x4c, 0xce, 0x30, 0x6c, 0x05, 0x7d, 0x2e, 0xb7, 0xbc, - 0xe4, 0x65, 0x76, 0x24, 0x75, 0x36, 0xdf, 0x28, 0xfc, 0xcd, - 0x9a, 0xba, 0xc2, 0xcd, 0xb0, 0x30, 0xdb, 0xe7, 0x2e, 0x3c, - 0x92, 0x63, 0x1d, 0x30, 0x23, 0x74, 0xb1, 0xb8, 0xcc, 0xd7, - 0xb6, 0x90, 0x65, 0x73, 0xa2, 0x2a, 0x6e, 0x49, 0x95, 0x0d, - 0xab, 0x24, 0xdf, 0x2d, 0xbf, 0x76, 0x46, 0x01, 0x44, 0xe4, - 0x18, 0x8e, 0xd5, 0x9a, 0x76, 0xc9, 0xc6, 0xbc, 0xdb, 0x7f, - 0x80, 0x52, 0xc6, 0x40, 0x41, 0x12, 0x36, 0x7c, 0x80, 0x69, - 0xce, 0x7b, 0xe1, 0xa0, 0x53, 0xa2, 0xd6, 0x8f, 0x3f, 0xf7, - 0xd7, 0x61, 0x09, 0x70, 0xa2, 0xa0, 0xc6, 0xaf, 0xa0, 0xd0, - 0xfa, 0x13, 0xbf, 0xc0, 0x69, 0x15, 0xce, 0x15, 0xec, 0x24, - 0x4b, 0x6b, 0xdc, 0x93, 0x51, 0xc6, 0x82, 0x19, 0x92, 0x84, - 0x5d, 0x99, 0xb0, 0x90, 0x2c, 0xcc, 0x2a, 0x81, 0x6b, 0x22, - 0x64, 0x0a, 0xcb, 0x51, 0x25, 0x82, 0x50, 0x02, 0x2d, 0x3e, - 0xd4, 0x72, 0xb3, 0x0c, 0x15, 0x77, 0xd2, 0xca, 0x98, 0x2f, - 0x41, 0x93, 0x14, 0xb2, 0x7f, 0xa1, 0x97, 0xa3, 0xb8, 0x8a, - 0x56, 0x24, 0x38, 0xa7, 0x36, 0xc5, 0x01, 0xc0, 0x9f, 0x3f, - 0x3e, 0x9a, 0xf6, 0xe9, 0x16, 0x82, 0x01, 0x58, 0x70, 0x0e, - 0x0d, 0xbc, 0xfa, 0x03, 0x57, 0x65, 0xa8, 0x5a, 0x3d, 0x57, - 0x81, 0x23, 0xbe, 0x6e, 0xa9, 0xe8, 0x22, 0xdf, 0x2f, 0x70, - 0xeb, 0x0a, 0x03, 0x96, 0x6b, 0xef, 0x20, 0x9f, 0xf2, 0x62, - 0xe7, 0xb2, 0x6e, 0x3a, 0x1e, 0x40, 0x1f, 0xd2, 0x97, 0x48, - 0xd1, 0x18, 0xf0, 0xeb, 0x52, 0x58, 0x02, 0x26, 0xce, 0x75, - 0xb1, 0x3a, 0x9d, 0x5b, 0x52, 0x94, 0xb2, 0x6e, 0x0e, 0x3f, - 0x39, 0xb6, 0xd9, 0x8a, 0x9d, 0xe8, 0x7c, 0x83, 0x32, 0xcc, - 0x43, 0x35, 0x9b, 0x7a, 0xed, 0xb2, 0x1e, 0x51, 0x37, 0x6c, - 0x14, 0xd8, 0xb8, 0x55, 0xb3, 0x91, 0xef, 0x0c, 0x3a, 0xe5, - 0x77, 0xd0, 0xbd, 0xb0, 0x7d, 0x38, 0x84, 0x2a, 0x47, 0xb2, - 0xb6, 0xda, 0xd7, 0x75, 0xd6, 0x2e, 0x60, 0xc7, 0x10, 0x52, - 0xf7, 0xdd, 0x09, 0x15, 0x6f, 0x04, 0x31, 0xc3, 0x5a, 0x6b, - 0x0c, 0x60, 0x10, 0xa8, 0x6e, 0x20, 0xa9, 0xdd, 0xb7, 0x72, - 0xc3, 0x9e, 0x85, 0xd2, 0x8f, 0x16, 0x7e, 0x3d, 0xe0, 0x63, - 0x81, 0x32, 0xfd, 0xca, 0xbc, 0x0f, 0xef, 0x3e, 0x74, 0x6a, - 0xb1, 0x60, 0xc1, 0x10, 0x50, 0x7c, 0x67, 0xa4, 0x19, 0xa7, - 0xb8, 0xed, 0xe6, 0xf5, 0x4e, 0x41, 0x53, 0xa6, 0x72, 0x1b, - 0x2c, 0x33, 0x6a, 0x37, 0xf1, 0xb5, 0x1c, 0x01, 0x7d, 0xa2, - 0x1f, 0x2c, 0x4e, 0x0a, 0xbf, 0xd4, 0x2c, 0x24, 0x91, 0x58, - 0x62, 0xfb, 0xf8, 0x63, 0xd9, 0xf8, 0x78, 0xf5, 0xc7, 0x78, - 0x32, 0xda, 0x99, 0xeb, 0x58, 0x20, 0x25, 0x19, 0xb1, 0x06, - 0x7f, 0x6a, 0x29, 0x20, 0xdb, 0xc8, 0x22, 0x48, 0xa9, 0x7f, - 0x24, 0x54, 0x8d, 0x7d, 0x8d, 0xb1, 0x69, 0xb2, 0xa3, 0x98, - 0x14, 0x0f, 0xba, 0xfa, 0xb6, 0x15, 0xe8, 0x28, 0x99, 0x3f, - 0x30, 0x04, 0x50, 0xab, 0x5a, 0x3c, 0xf1, 0x97, 0xe1, 0xc8, - 0x0f, 0x0e, 0xb4, 0x11, 0x63, 0x5a, 0x79, 0x08, 0x48, 0x75, - 0xaf, 0x9b, 0xca, 0xd9, 0x13, 0x18, 0xcc, 0xb1, 0xb3, 0xee, - 0xdd, 0x63, 0xdd, 0xf4, 0x21, 0x98, 0x76, 0xe2, 0x3e, 0xd5, - 0x86, 0x23, 0x33, 0x7e, 0xc7, 0xb4, 0x35, 0x4b, 0xc2, 0x2d, - 0xe1, 0xe2, 0xb0, 0x6c, 0x8b, 0x9b, 0x20, 0x3d, 0x48, 0x24, - 0x7c, 0xea, 0xa1, 0x75, 0x27, 0xe5, 0xf4, 0x70, 0xeb, 0x3b, - 0xc7, 0x26, 0x37, 0x04, 0xff, 0x8a, 0x7a, 0xd0, 0xc2, 0xb7, - 0x84, 0xb7, 0x29, 0xfb, 0x0e, 0xa3, 0xa8, 0x71, 0xcd, 0x58, - 0x06, 0x36, 0xe2, 0xf2, 0x77, 0xcc, 0x0f, 0x78, 0x08, 0x2b, - 0xbb, 0xe3, 0x53, 0x05, 0x71, 0xdc, 0x6c, 0x37, 0x32, 0x91, - 0x46, 0x42, 0x4f, 0x21, 0xe0, 0x34, 0xad, 0x3f, 0x30, 0x5a, - 0xc7, 0x0d, 0x17, 0x19, 0x39, 0x31, 0x58, 0x69, 0x3c, 0x8c, - 0xbe, 0xe7, 0xa6, 0x3b, 0xad, 0xfb, 0x46, 0x89, 0x06, 0xc1, - 0x8c, 0x16, 0x9a, 0x06, 0x3a, 0xd0, 0x7e, 0xd6, 0xb0, 0x7b, - 0x7d, 0xf8, 0x91, 0x7c, 0xfa, 0xd9, 0x66, 0x39, 0xfa, 0xbc, - 0x57, 0xa7, 0x78, 0x8b, 0x36, 0x78, 0xc0, 0x1c, 0x0e, 0x23, - 0x05, 0x0e, 0x04, 0x61, 0x16, 0x34, 0xf9, 0xc6, 0x63, 0x58, - 0xdf, 0xf4, 0x52, 0xce, 0xd0, 0x0f, 0x0c, 0xec, 0xb1, 0x82, - 0xf4, 0x72, 0x73, 0x72, 0x3f, 0x02, 0xbe, 0xe3, 0x9c, 0x63, - 0x73, 0xc8, 0x21, 0x65, 0xba, 0x57, 0x52, 0xa9, 0x19, 0xac, - 0x68, 0x50, 0xbd, 0x2d, 0x72, 0x5b, 0x93, 0x0f, 0x1c, 0x81, - 0x77, 0xd7, 0x2e, 0xc3, 0x93, 0x52, 0x6e, 0xdc, 0x79, 0x52, - 0x9f, 0xe3, 0xde, 0xe1, 0xba, 0x58, 0x55, 0xab, 0x8a, 0xf2, - 0x35, 0x6a, 0xcf, 0x94, 0x1f, 0x17, 0xa4, 0x23, 0x2e, 0x8e, - 0x18, 0x21, 0xbe, 0x14, 0xfa, 0xe7, 0x59, 0xc5, 0x44, 0x34, - 0xce, 0x03, 0xf4, 0xb7, 0x75, 0xd3, 0x51, 0x55, 0xdf, 0xff, - 0xcf, 0x4f, 0x44, 0xee, 0x13, 0x9b, 0xcb, 0x12, 0xae, 0xe5, - 0x5b, 0x44, 0x65, 0x28, 0xcb, 0x6a, 0x9c, 0x24, 0x1d, 0xea, - 0x2d, 0x5e, 0xa5, 0xc3, 0x78, 0xad, 0xed, 0x0c, 0x05, 0xa6, - 0xaf, 0x95, 0x04, 0xd2, 0xb5, 0x91, 0x0e, 0xa0, 0x06, 0x77, - 0xc5, 0x82, 0xf6, 0xdd, 0x72, 0x83, 0x04, 0xcc, 0xb0, 0xab, - 0x7a, 0xf0, 0xb4, 0x4d, 0x36, 0x71, 0x72, 0x1a, 0x9a, 0x0d, - 0xcd, 0xa3, 0x11, 0xa8, 0x0d, 0x7d, 0x49, 0xce, 0x9c, 0x09, - 0x1d, 0x08, 0xa4, 0x39, 0x2e, 0x03, 0xdf, 0x3a, 0xc8, 0xfe, - 0x6a, 0x2b, 0x0b, 0x07, 0x80, 0x55, 0x8a, 0xa8, 0xe6, 0x0e, - 0xc9, 0x7e, 0x83, 0xce, 0x3a, 0x98, 0x98, 0x4e, 0x3e, 0x08, - 0x20, 0x8f, 0x10, 0xfc, 0xc1, 0xc4, 0xcf, 0x37, 0x8d, 0x69, - 0xd8, 0x57, 0x9d, 0x48, 0x80, 0x6a, 0xef, 0x0c, 0xdd, 0x27, - 0x99, 0xf9, 0xe7, 0xd0, 0xd2, 0x36, 0xd8, 0xed, 0x41, 0x14, - 0x1b, 0x10, + 0x2c, 0x32, 0xfa, 0x59, 0x71, 0x16, 0x4a, 0x0e, 0x45, 0x0f, 0x21, 0xfd, + 0x65, 0xee, 0x50, 0xb0, 0xbf, 0xea, 0x8e, 0x4e, 0xa2, 0x55, 0x71, 0xa6, + 0x65, 0x48, 0x56, 0x20, 0x8a, 0x48, 0x9d, 0xd7, 0xc9, 0x2c, 0x80, 0x62, + 0x88, 0x68, 0x4d, 0x5f, 0xbe, 0x5f, 0xe5, 0xf5, 0xa4, 0x75, 0xb6, 0x88, + 0x26, 0xae, 0x7d, 0x11, 0x43, 0x89, 0xcd, 0xe9, 0x67, 0x0c, 0x91, 0x0b, + 0xd1, 0xd8, 0x8b, 0x7b, 0x73, 0x75, 0x94, 0xc1, 0xc9, 0x61, 0xc7, 0x35, + 0x21, 0x99, 0x2e, 0xab, 0xe0, 0xdf, 0x4d, 0xac, 0x0d, 0xd0, 0xa2, 0x61, + 0x5f, 0x04, 0x08, 0x83, 0x66, 0x5c, 0x67, 0x47, 0x0c, 0xab, 0x2c, 0xb7, + 0x6d, 0x0e, 0x32, 0x4c, 0x8c, 0x25, 0x80, 0xf5, 0xe5, 0x7e, 0x3b, 0xa1, + 0xc6, 0xc5, 0x87, 0xd8, 0x68, 0xb2, 0xd5, 0x67, 0xf9, 0x5a, 0x8b, 0x88, + 0xf8, 0xcd, 0x0c, 0xda, 0x4f, 0xfc, 0xd2, 0xaf, 0xb2, 0xa2, 0x38, 0x21, + 0xf9, 0xd8, 0xf1, 0x1c, 0x8d, 0xb4, 0xe8, 0xfb, 0x76, 0x36, 0x87, 0xf4, + 0x7d, 0x03, 0xc4, 0x06, 0xab, 0x87, 0xac, 0x52, 0xe8, 0xd5, 0xf7, 0x63, + 0xf0, 0xa8, 0x0b, 0x95, 0xbd, 0x07, 0xf1, 0x1d, 0x33, 0x7b, 0x8a, 0x2c, + 0xef, 0x85, 0xbe, 0xf8, 0xc1, 0x4b, 0xa2, 0xb0, 0xe0, 0x7a, 0x85, 0xfa, + 0x52, 0x36, 0x05, 0xa7, 0x65, 0x4a, 0x0c, 0x21, 0x5c, 0xc0, 0x4f, 0x18, + 0xb8, 0x66, 0x02, 0xe6, 0xd0, 0x45, 0x60, 0x56, 0xfc, 0x40, 0x94, 0xb5, + 0xa5, 0x2b, 0xc7, 0x57, 0xc3, 0xc5, 0x30, 0x72, 0x1c, 0x4c, 0x2a, 0xd5, + 0x75, 0xae, 0x43, 0x9f, 0x01, 0x71, 0xac, 0x5c, 0xdf, 0x9c, 0x0a, 0x3c, + 0xb5, 0x89, 0x07, 0x9b, 0x28, 0x25, 0x31, 0x31, 0xc5, 0xb7, 0x24, 0x53, + 0x2c, 0x3c, 0x2a, 0x96, 0xe5, 0x0d, 0xa2, 0x97, 0xa7, 0x08, 0x9d, 0x31, + 0xc0, 0xcd, 0x53, 0xd5, 0xa8, 0x58, 0xa6, 0xac, 0x43, 0x2d, 0xac, 0x39, + 0x01, 0x2c, 0x60, 0xf6, 0x82, 0x86, 0xd0, 0xaf, 0xad, 0x61, 0x3f, 0x82, + 0x80, 0xa1, 0xe1, 0x12, 0x83, 0x6e, 0x1d, 0x5e, 0xfe, 0xc6, 0x1e, 0x2a, + 0x7a, 0x44, 0xcd, 0xc2, 0x0a, 0xf5, 0xc8, 0x72, 0x3e, 0x29, 0xc7, 0x0a, + 0xd1, 0x4c, 0x17, 0xdd, 0x1f, 0xb6, 0x95, 0x34, 0xc2, 0x6c, 0xdc, 0x63, + 0xd1, 0x7e, 0xb0, 0x52, 0x06, 0x18, 0x6c, 0xb1, 0x99, 0x6a, 0xbe, 0x42, + 0xa9, 0xc0, 0x22, 0xcc, 0x09, 0x11, 0x84, 0x1f, 0x16, 0x9a, 0x0e, 0xdd, + 0x18, 0x7a, 0x39, 0x34, 0xb0, 0x49, 0x44, 0xcb, 0x88, 0x1f, 0x91, 0x93, + 0x49, 0x3f, 0xcc, 0x62, 0x56, 0x33, 0x15, 0xcb, 0x02, 0x9b, 0x33, 0xe8, + 0xd7, 0xab, 0x51, 0xc0, 0x91, 0xe0, 0x9c, 0xd2, 0xf9, 0x52, 0x05, 0x0c, + 0xbf, 0xf1, 0x97, 0x42, 0xfe, 0xd0, 0x32, 0x27, 0x34, 0xf8, 0x82, 0x2d, + 0x65, 0x3a, 0x36, 0xce, 0xd1, 0x07, 0x82, 0x3a, 0x6a, 0xaa, 0x56, 0xf1, + 0x9b, 0x98, 0xca, 0x8e, 0x55, 0xff, 0xa0, 0x74, 0xd6, 0x6a, 0x42, 0xaa, + 0x0a, 0xd4, 0x59, 0x74, 0xfb, 0xd4, 0xdb, 0x14, 0x10, 0xee, 0xca, 0x78, + 0x83, 0x83, 0x95, 0x9b, 0x77, 0xf1, 0x9a, 0x48, 0xe0, 0x8f, 0xa4, 0x5a, + 0x4d, 0xa9, 0x3f, 0x32, 0x78, 0x4a, 0x25, 0x96, 0x9c, 0x20, 0x0a, 0xcc, + 0x5b, 0xd8, 0xca, 0x19, 0x47, 0x77, 0xb8, 0x7c, 0x51, 0x3e, 0xd6, 0x30, + 0xdb, 0x45, 0xb0, 0xe6, 0x9d, 0x6f, 0xc5, 0x0a, 0x5d, 0x5f, 0x55, 0xcd, + 0x0f, 0x20, 0x22, 0x7e, 0x09, 0x99, 0xac, 0xb8, 0x9c, 0x9d, 0xf7, 0x3e, + 0x7e, 0x07, 0xd7, 0xbc, 0x21, 0x76, 0x8c, 0x27, 0x81, 0x94, 0xab, 0x57, + 0x4a, 0xe2, 0x91, 0x1c, 0xa4, 0x77, 0x4a, 0xd2, 0x96, 0x52, 0x9d, 0x33, + 0xb5, 0x58, 0x70, 0xd7, 0xff, 0x22, 0xe8, 0x14, 0xea, 0xd0, 0x8c, 0xd4, + 0x06, 0x08, 0xd8, 0x73, 0x66, 0x4b, 0x93, 0x41, 0xc9, 0x73, 0x5b, 0x07, + 0x5f, 0x31, 0xc5, 0x25, 0x98, 0x7b, 0x7b, 0xa5, 0x26, 0x83, 0x94, 0x22, + 0x42, 0x1c, 0x51, 0xe6, 0x80, 0x48, 0xca, 0xd4, 0x53, 0x40, 0x3a, 0xee, + 0x2c, 0x29, 0x07, 0xed, 0xdf, 0x97, 0x44, 0x19, 0xe5, 0xe5, 0x35, 0x66, + 0x1f, 0xbd, 0x29, 0x77, 0x0c, 0x15, 0x6c, 0x95, 0x08, 0x81, 0xe0, 0x76, + 0x86, 0x5e, 0x6d, 0x77, 0x78, 0x76, 0x07, 0xdd, 0x21, 0x97, 0x59, 0xdb, + 0xd4, 0xbd, 0xb6, 0x4c, 0x3f, 0x07, 0x93, 0xb6, 0x4a, 0xce, 0xf7, 0x08, + 0x86, 0xfd, 0x9c, 0x03, 0x08, 0x94, 0x00, 0xea, 0x4b, 0xd6, 0x1e, 0x17, + 0xfb, 0xb5, 0xba, 0xde, 0x25, 0x95, 0xe7, 0xf8, 0x97, 0x9e, 0x99, 0xae, + 0x5d, 0xdd, 0xf6, 0x32, 0x1a, 0xf2, 0x4f, 0xcf, 0x0c, 0x17, 0x55, 0xb8, + 0xfb, 0xae, 0xc8, 0x46, 0xb0, 0x3e, 0x86, 0x2b, 0x5e, 0xef, 0x36, 0xca, + 0x24, 0xed, 0x32, 0x5b, 0xc8, 0xfb, 0x88, 0x35, 0x6a, 0x26, 0xfe, 0x06, + 0x54, 0x0c, 0x3e, 0x2c, 0x71, 0xdf, 0x98, 0xf0, 0xbb, 0xb2, 0xe0, 0x9d, + 0xf7, 0xeb, 0xce, 0x07, 0xfa, 0xc4, 0xab, 0x88, 0xc3, 0x14, 0x33, 0x60, + 0x48, 0xcf, 0x39, 0x26, 0x90, 0xac, 0xfa, 0x39, 0x6f, 0x2d, 0x9d, 0x6d, + 0x15, 0x7f, 0x84, 0x6b, 0x0a, 0x1c, 0xf4, 0x6c, 0x78, 0x62, 0x52, 0x93, + 0x2c, 0x7e, 0x9f, 0x4a, 0x51, 0x7a, 0x2e, 0xad, 0xea, 0xe4, 0xe5, 0x9c, + 0x15, 0x15, 0x28, 0x4d, 0x3e, 0x5e, 0xb4, 0x3b, 0xff, 0x81, 0xe0, 0x56, + 0x44, 0x33, 0x33, 0xd9, 0x4b, 0xb2, 0x23, 0x60, 0xed, 0x0d, 0xa5, 0x4e, + 0x9f, 0x7d, 0xbc, 0x6e, 0x3a, 0xf9, 0x7e, 0x16, 0x47, 0x66, 0xb1, 0x6c, + 0xc7, 0x26, 0x62, 0x9b, 0x3c, 0x53, 0xb3, 0xa1, 0x16, 0x62, 0x31, 0x64, + 0xd2, 0xbb, 0x28, 0x5c, 0xe8, 0x21, 0xc3, 0xfc, 0xc3, 0x6d, 0xa7, 0x35, + 0x4d, 0x57, 0xe0, 0xbd, 0x54, 0x1a, 0x84, 0xf7, 0x9c, 0x8a, 0x54, 0x3d, + 0x59, 0xb3, 0xa2, 0x46, 0x3b, 0x16, 0x48, 0x3b, 0x3a, 0x3c, 0x5e, 0x88, + 0xc3, 0x60, 0x63, 0x7e, 0xca, 0x68, 0xb7, 0x2f, 0x2b, 0xb5, 0x62, 0x2e, + 0x51, 0x89, 0xbe, 0x78, 0xf7, 0xfa, 0x19, 0xcc, 0xca, 0x87, 0x9a, 0xf5, + 0xef, 0x0d, 0x21, 0x08, 0x3b, 0xd6, 0x9a, 0x94, 0xc5, 0xd1, 0x1b, 0xa9, + 0x7c, 0xc8, 0x9f, 0x9a, 0xb0, 0xb8, 0xf7, 0x02, 0x12, 0x31, 0x70, 0x52, + 0x52, 0xda, 0xb5, 0x9a, 0x08, 0x20, 0xc3, 0xc4, 0x0c, 0x6a, 0x34, 0x58, + 0x75, 0x9b, 0xdc, 0x1a, 0x6a, 0x37, 0x42, 0x9f, 0x16, 0x70, 0xbb, 0x39, + 0x86, 0xbd, 0x09, 0x9c, 0x04, 0x44, 0xbe, 0x1a, 0xe5, 0xe9, 0x50, 0x9b, + 0x14, 0x50, 0x4f, 0x00, 0xba, 0xb0, 0xf6, 0x36, 0x4d, 0x69, 0x16, 0x11, + 0x40, 0x5a, 0x4e, 0x8b, 0x39, 0xb4, 0xf1, 0xb2, 0x11, 0x36, 0x2f, 0x02, + 0x15, 0xca, 0x78, 0xde, 0x75, 0x07, 0x64, 0x72, 0xfd, 0xd4, 0x48, 0xdd, + 0xfb, 0xf5, 0x8a, 0x3d, 0xa8, 0x8e, 0x14, 0xd1, 0x69, 0xe3, 0x21, 0x50, + 0x39, 0xfd, 0xd0, 0x3b, 0xa0, 0x22, 0x61, 0x5c, 0x7e, 0x88, 0x91, 0xe1, + 0xf0, 0xf6, 0x16, 0x23, 0xdb, 0xdb, 0x50, 0x0e, 0x39, 0xcc, 0x86, 0xf1, + 0xab, 0x89, 0x60, 0xb0, 0xac, 0x28, 0xc6, 0x57, 0xe4, 0xee, 0xa9, 0x1b, + 0xae, 0x78, 0xc5, 0x67, 0x1a, 0xeb, 0xb3, 0x43, 0xbc, 0xea, 0x11, 0x0c, + 0x64, 0xf6, 0xd2, 0x52, 0xa0, 0x7e, 0xcd, 0x6d, 0x84, 0x8c, 0xf8, 0x80, + 0xb7, 0xdb, 0x26, 0x91, 0x4a, 0xa0, 0x61, 0x69, 0x2f, 0x6f, 0x1c, 0x9d, + 0x2a, 0x20, 0x44, 0xdc, 0x58, 0xaf, 0x7d, 0xfe, 0x4d, 0xa2, 0x10, 0x21, + 0x88, 0xef, 0x42, 0x2e, 0x8e, 0xfb, 0x63, 0xbc, 0xc8, 0x26, 0xe7, 0x80, + 0xa5, 0xbf, 0xe0, 0x7a, 0xcb, 0xf3, 0x31, 0x1c, 0xd9, 0xa3, 0x12, 0x00, + 0x2f, 0x20, 0xc6, 0xc1, 0x15, 0xfd, 0x5b, 0x0d, 0x8a, 0x4d, 0xfb, 0x84, + 0x4d, 0xb4, 0x64, 0xeb, 0x12, 0xf3, 0x78, 0x6b, 0x4d, 0xc6, 0x98, 0x46, + 0x4c, 0xb3, 0xb4, 0x59, 0xdc, 0xb7, 0xdc, 0xbb, 0x56, 0x0f, 0x09, 0x14, + 0x28, 0x43, 0x9f, 0xb8, 0x75, 0xed, 0xcb, 0x97, 0x25, 0xaf, 0xa5, 0xeb, + 0x46, 0x14, 0xa6, 0x38, 0x68, 0x06, 0xe0, 0x6e, 0x55, 0x68, 0x6b, 0xf3, + 0xd8, 0x6d, 0x59, 0x65, 0x65, 0xff, 0x48, 0xfd, 0xdb, 0x3d, 0xe2, 0x21, + 0xb4, 0x7b, 0x78, 0x6a, 0x2e, 0x28, 0xb8, 0x21, 0xc4, 0x72, 0xf4, 0xef, + 0xfb, 0x74, 0x43, 0x29, 0xf2, 0x30, 0xc9, 0xca, 0x78, 0x93, 0x72, 0xfd, + 0x84, 0xa4, 0x95, 0xe0, 0xcd, 0xb1, 0x48, 0x29, 0xe7, 0xd1, 0x27, 0xf7, + 0xdc, 0x31, 0x6e, 0x00, 0x04, 0xd7, 0x7c, 0xfd, 0x2d, 0x25, 0xe9, 0xdb, + 0xc2, 0xb8, 0x14, 0x26, 0xed, 0x63, 0xb1, 0x50, 0x0a, 0x3c, 0xb2, 0x79, + 0x98, 0x79, 0x81, 0x2d, 0xdb, 0x60, 0x97, 0x99, 0xc0, 0x0a, 0x89, 0x9f, + 0x90, 0x19, 0x0b, 0xb3, 0x97, 0xd2, 0xf7, 0x50, 0xa5, 0x1d, 0x7d, 0x71, + 0x75, 0xe6, 0x58, 0x62, 0x53, 0x95, 0x40, 0x9e, 0xc7, 0xd3, 0x72, 0xa1, + 0xae, 0x07, 0xb3, 0x8a, 0x56, 0x61, 0x99, 0x81, 0x3e, 0xe4, 0x5e, 0x78, + 0x57, 0xd1, 0x8a, 0xc4, 0x04, 0x38, 0x13, 0xa0, 0x5d, 0x68, 0x6d, 0x22, + 0xae, 0xda, 0xfc, 0x67, 0xbb, 0xfb, 0x8e, 0x1a, 0xdc, 0x24, 0xf7, 0xc8, + 0xf9, 0x92, 0x6f, 0x4e, 0xb5, 0xe7, 0x6d, 0x13, 0x88, 0x05, 0x5c, 0xbb, + 0xe0, 0x24, 0x2a, 0x96, 0xc6, 0x70, 0x52, 0x14, 0xd0, 0xd9, 0xd8, 0xb2, + 0x5b, 0xdc, 0x85, 0xcf, 0x62, 0xb4, 0xcf, 0x77, 0xf1, 0xe5, 0x51, 0xeb, + 0xef, 0xe9, 0x3e, 0xf0, 0x16, 0xd2, 0xcc, 0x38, 0x0a, 0x47, 0x91, 0xc0, + 0xe0, 0x14, 0x1a, 0xf9, 0x74, 0xd1, 0x32, 0x8b, 0x02, 0x36, 0x05, 0x55, + 0x62, 0xa7, 0xae, 0x77, 0xb0, 0x01, 0x3d, 0x2c, 0x91, 0xbe, 0xfa, 0xdd, + 0x9c, 0x17, 0x42, 0xc1, 0x01, 0x4d, 0xd8, 0x27, 0x3c, 0x10, 0x82, 0x66, + 0x11, 0x91, 0x8b, 0xc8, 0x52, 0xd5, 0xc1, 0x1d, 0xee, 0xb2, 0x90, 0x17, + 0xed, 0xf3, 0xad, 0xa5, 0xd5, 0xeb, 0xf2, 0x9b, 0x78, 0xbf, 0x2d, 0x5a, + 0xad, 0xe5, 0x53, 0xe6, 0xc1, 0x3b, 0xd8, 0xf3, 0x6b, 0xc5, 0x4c, 0x87, + 0x0a, 0xe3, 0xc8, 0xc7, 0xe5, 0x42, 0x2c, 0xe2, 0x13, 0x1a, 0xe7, 0x27, + 0x20, 0x3e, 0x95, 0x13, 0x1e, 0xbb, 0x03, 0xae, 0xc0, 0x84, 0x14, 0x6d, + 0x7b, 0xf7, 0x98, 0x08, 0x18, 0x12, 0xb4, 0x4f, 0x99, 0x4a, 0xcf, 0xd0, + 0x4a, 0x5d, 0x21, 0x16, 0xf6, 0xdf, 0x10, 0xc7, 0xbe, 0xe6, 0x79, 0x3b, + 0x35, 0x2a, 0xa6, 0xd6, 0x19, 0x9c, 0xde, 0xbd, 0xaf, 0x72, 0xd2, 0x25, + 0xe0, 0xa4, 0xde, 0x99, 0x44, 0x18, 0x66, 0x41, 0xc7, 0x56, 0xf7, 0xdc, + 0x32, 0x56, 0x57, 0x39, 0x18, 0x31, 0xc8, 0x75, 0x01, 0xc3, 0xf3, 0x46, + 0xcf, 0xbf, 0xc6, 0x10, 0xb5, 0x1c, 0x38, 0xf9, 0xa4, 0xa5, 0x44, 0xa1, + 0x0b, 0x25, 0x48, 0x9c, 0xd3, 0x1c, 0x55, 0x54, 0x15, 0x9f, 0xe3, 0x74, + 0x5b, 0xb1, 0x92, 0xb6, 0x52, 0x61, 0xba, 0x2f, 0x53, 0x91, 0x17, 0x44, + 0x94, 0x00, 0xe4, 0x43, 0xa0, 0xe7, 0x0d, 0xaa, 0x8a, 0x5b, 0x81, 0x43, + 0xad, 0xfb, 0x50, 0xfe, 0xcf, 0x85, 0x2d, 0xfa, 0xc8, 0x1d, 0xad, 0xc8, + 0x7a, 0x7c, 0x5e, 0xf3, 0x90, 0x35, 0x5e, 0x67, 0xce, 0x57, 0x4d, 0xa0, + 0x22, 0x9e, 0x07, 0x4a, 0xf5, 0x9e, 0x5f, 0x91, 0x45, 0xd8, 0x62, 0xe0, + 0xf3, 0x87, 0x3b, 0xb7, 0x89, 0x2f, 0xdf, 0x8b, 0x82, 0xb1, 0x86, 0xc3, + 0xa4, 0xa3, 0x68, 0xc7, 0x73, 0x9e, 0x68, 0x8d, 0x24, 0x6a, 0x29, 0x94, + 0x58, 0x57, 0x4b, 0x81, 0x00, 0xe2, 0x2b, 0x94, 0x0a, 0xf5, 0x96, 0xa3, + 0x23, 0x9a, 0x7b, 0xd0, 0x2d, 0xcb, 0x6a, 0x8e, 0xae, 0x1b, 0x1c, 0x34, + 0xed, 0x30, 0x4e, 0xca, 0x29, 0x21, 0xfc, 0x3d, 0x70, 0x11, 0xc1, 0x5f, + 0x3e, 0xc2, 0x9e, 0x88, 0x71, 0x29, 0xa3, 0x8f, 0x92, 0xf5, 0x46, 0x77, + 0xd5, 0x47, 0x2d, 0x2b, 0x66, 0x1c, 0x07, 0xf0, 0xfc, 0x7b, 0xa0, 0x13, + 0x00, 0xae, 0xa5, 0x61, 0x92, 0x36, 0xeb, 0x7e, 0x43, 0x91, 0x20, 0x72, + 0xe5, 0xba, 0x7f, 0x79, 0x23, 0x12, 0x3e, 0xb2, 0x4b, 0x13, 0xa1, 0x8c, + 0x84, 0x72, 0x3b, 0x45, 0x62, 0xcf, 0x2e, 0x78, 0xc4, 0x9c, 0x22, 0x09, + 0xfa, 0x59, 0x9d, 0xdf, 0x13, 0x54, 0x66, 0xe2, 0x6f, 0xfa, 0xb5, 0x2a, + 0x27, 0x3e, 0x17, 0x82, 0xf3, 0x2a, 0x4d, 0x36, 0xd3, 0xf0, 0x8d, 0x43, + 0x40, 0x2c, 0x84, 0x68, 0xbe, 0x40, 0x50, 0x7d, 0xa3, 0x27, 0x5e, 0xde, + 0x4d, 0x04, 0x6f, 0xe8, 0x96, 0x9c, 0x7a, 0x1d, 0xb8, 0x2b, 0x8a, 0xb1, + 0x6e, 0xe2, 0x36, 0x07, 0x22, 0x50, 0xd9, 0x71, 0x93, 0x48, 0xb5, 0x51, + 0xce, 0x2a, 0x64, 0x6b, 0x11, 0xa6, 0xb9, 0x40, 0x2d, 0x6c, 0xd2, 0x76, + 0x52, 0xc6, 0xe3, 0xa6, 0x6b, 0xd2, 0x3f, 0x39, 0xd2, 0x13, 0x28, 0xa4, + 0xa9, 0x58, 0x99, 0xe8, 0x3d, 0x08, 0xfa, 0x3c, 0x34, 0x39, 0x4d, 0x7d, + 0x5e, 0x10, 0x72, 0x51, 0x96, 0x1d, 0x4b, 0xd9, 0x3e, 0xc9, 0x22, 0x4c, + 0x72, 0x63, 0xf8, 0x87, 0x4b, 0xe7, 0x41, 0xac, 0xcd, 0xd6, 0x34, 0xa2, + 0xe1, 0xe8, 0x66, 0x81, 0x04, 0x7d, 0x70, 0x95, 0xba, 0x37, 0x86, 0x9e, + 0x1f, 0x9a, 0x1b, 0xe4, 0x35, 0xac, 0xe6, 0xcf, 0x48, 0x55, 0x6e, 0xbb, + 0x9d, 0x40, 0x79, 0x96, 0xdd, 0xac, 0xf8, 0xf5, 0x99, 0xad, 0x43, 0x0d, + 0xad, 0xa9, 0x62, 0xc0, 0x70, 0x8b, 0x50, 0x9b, 0xca, 0x0d, 0x3e, 0x54, + 0x9c, 0x27, 0xd5, 0x9e, 0x20, 0xe2, 0xe0, 0xb0, 0xb0, 0xbe, 0x8e, 0x56, + 0x43, 0x95, 0x9b, 0x34, 0xd1, 0x05, 0x28, 0xa0, 0xee, 0xd9, 0xab, 0x6a, + 0xa7, 0xbb, 0xb7, 0x1b, 0x3a, 0x5d, 0x33, 0x97, 0x25, 0x54, 0xe4, 0x0e, + 0x64, 0x79, 0xed, 0x16, 0x62, 0x89, 0x70, 0x4a, 0xa6, 0x47, 0x40, 0xd7, + 0xa3, 0xd2, 0x6f, 0x28, 0xdd, 0xc5, 0x04, 0xab, 0x7e, 0x7e, 0x1e, 0xb0, + 0x19, 0x02, 0x48, 0xb5, 0x88, 0x82, 0x75, 0xaf, 0x66, 0x74, 0xca, 0xf6, + 0xd7, 0xe8, 0x6d, 0xfa, 0x5e, 0xfa, 0xaf, 0xa8, 0x04, 0xaa, 0x2c, 0x09, + 0xf1, 0x4c, 0x36, 0x75, 0xb5, 0xdc, 0xe8, 0x04, 0x80, 0xd3, 0x14, 0x78, + 0x09, 0x5b, 0xfd, 0x52, 0x6f, 0xd9, 0x3c, 0x1c, 0x02, 0x3b, 0x77, 0xb8, + 0xa1, 0xe9, 0xa4, 0xb7, 0x42, 0x62, 0xee, 0xea, 0x43, 0xf3, 0xd8, 0xd0, + 0x7a, 0x53, 0x91, 0x34, 0x7f, 0xe7, 0x9a, 0xc6 }; WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_65_sig[] = { - 0x3e, 0xff, 0xf4, 0x48, 0x80, 0x2d, 0x88, 0x87, 0xf4, 0xcc, - 0xa4, 0x61, 0xe1, 0x27, 0x20, 0x55, 0x66, 0xc8, 0xfe, 0x3e, - 0xdd, 0xf5, 0x5c, 0x70, 0x6c, 0x54, 0xba, 0x50, 0x8a, 0xa2, - 0x4b, 0x88, 0xbc, 0xb8, 0x87, 0xf9, 0x4e, 0x50, 0x3a, 0x04, - 0x18, 0xb3, 0xf4, 0x5f, 0x77, 0x4a, 0x7e, 0xa8, 0xf5, 0xca, - 0x49, 0x00, 0xdc, 0x24, 0xaa, 0x05, 0x35, 0x0f, 0x34, 0xf7, - 0xbf, 0x09, 0xa6, 0xcf, 0x75, 0x37, 0x07, 0xcd, 0x07, 0x99, - 0x92, 0x1d, 0xc7, 0xc9, 0x17, 0x1c, 0xdd, 0x27, 0x8c, 0x66, - 0xf2, 0x8b, 0x75, 0xb0, 0x86, 0x2d, 0xbd, 0x51, 0x16, 0xc2, - 0x50, 0xe0, 0x7e, 0x0a, 0x21, 0x58, 0x93, 0x22, 0x06, 0xcb, - 0x85, 0x8b, 0xfd, 0x97, 0x61, 0xc0, 0xdb, 0xab, 0xfa, 0x4a, - 0x69, 0xef, 0x9c, 0xc1, 0x4e, 0xae, 0xb2, 0xb3, 0xa2, 0x74, - 0xa4, 0x94, 0x0a, 0xed, 0x39, 0x9e, 0xe8, 0x58, 0xeb, 0xfd, - 0x43, 0x05, 0x73, 0x38, 0xd6, 0xbb, 0xeb, 0xb9, 0x9d, 0x3b, - 0xf8, 0x85, 0xb4, 0x4b, 0x16, 0x5c, 0x9e, 0xfe, 0xb8, 0x13, - 0xf8, 0x68, 0x44, 0x90, 0x05, 0x61, 0xb3, 0xed, 0x6f, 0x47, - 0xc9, 0x50, 0xcf, 0x6c, 0xc0, 0xac, 0xdf, 0x4c, 0x4c, 0x1b, - 0x42, 0xce, 0x0a, 0x32, 0x69, 0xb0, 0xfd, 0x87, 0xef, 0xf3, - 0x9c, 0xcc, 0xba, 0x2f, 0x03, 0xd7, 0xdb, 0x76, 0xee, 0xa0, - 0x71, 0x4a, 0x80, 0xcb, 0x90, 0x9e, 0xbb, 0x8f, 0x00, 0x46, - 0x81, 0xe0, 0xde, 0xa6, 0x43, 0xb5, 0x37, 0x79, 0xf2, 0x35, - 0xce, 0x9e, 0xd2, 0xb1, 0x5b, 0xff, 0x91, 0xfb, 0x98, 0xc1, - 0xe1, 0x66, 0x2c, 0x00, 0x1b, 0x89, 0xf2, 0x57, 0x81, 0x73, - 0x7e, 0x9f, 0x8d, 0x50, 0xd0, 0xe0, 0xe3, 0x93, 0xf2, 0x87, - 0x41, 0x64, 0x6c, 0xb7, 0x09, 0x60, 0x91, 0x4e, 0x0b, 0xbe, - 0xbe, 0xd4, 0x98, 0xfa, 0x14, 0x8c, 0x46, 0x09, 0xfa, 0xaa, - 0x82, 0xd6, 0xdd, 0x65, 0x93, 0x39, 0x45, 0x50, 0x90, 0x10, - 0xae, 0x1b, 0xff, 0xab, 0x7e, 0x86, 0xda, 0xb9, 0x4d, 0xf1, - 0xc2, 0x00, 0x54, 0x66, 0xee, 0x40, 0xc0, 0x56, 0x2f, 0xe8, - 0x43, 0x89, 0xbb, 0xb8, 0x59, 0x24, 0x63, 0x45, 0x9a, 0xde, - 0x08, 0xf3, 0x16, 0x94, 0xd2, 0x8d, 0xee, 0xf9, 0xbe, 0x4f, - 0x29, 0xe1, 0x4b, 0x5e, 0x2b, 0x14, 0xef, 0x66, 0xe2, 0x12, - 0xf8, 0x87, 0x2e, 0xb1, 0x75, 0x8b, 0x21, 0xb5, 0x8f, 0x8e, - 0xc5, 0x0e, 0x60, 0x27, 0x15, 0xbd, 0x72, 0xe4, 0x26, 0x4e, - 0x62, 0x7d, 0x3a, 0x46, 0x49, 0x93, 0xa9, 0x52, 0x7f, 0xc2, - 0x27, 0xb9, 0x55, 0x6a, 0x45, 0x9f, 0x2c, 0x7a, 0x5a, 0xc9, - 0xf4, 0x55, 0xaf, 0x49, 0xb3, 0xd5, 0xc0, 0x84, 0xdb, 0x89, - 0x5f, 0x21, 0x04, 0xf5, 0x4c, 0x66, 0x1e, 0x2e, 0x69, 0xdf, - 0x5b, 0x14, 0x60, 0x89, 0x84, 0xf8, 0xa3, 0xaf, 0xdf, 0xb9, - 0x18, 0x5e, 0xbf, 0x81, 0x95, 0x9a, 0x5e, 0x4f, 0x24, 0x45, - 0xad, 0xab, 0xe2, 0x36, 0x7c, 0x19, 0xde, 0xc0, 0xf4, 0x1a, - 0x42, 0xb2, 0xc2, 0x58, 0x2f, 0x5f, 0xd0, 0x2e, 0x28, 0x33, - 0x59, 0x75, 0xc2, 0xde, 0x41, 0xe3, 0x9b, 0x85, 0x46, 0xad, - 0x6d, 0xf1, 0x06, 0xf0, 0x6a, 0xb9, 0xed, 0x71, 0x7b, 0xfd, - 0xf1, 0xc4, 0x56, 0xd8, 0xb3, 0x1a, 0x5f, 0x04, 0xae, 0xe8, - 0xce, 0xde, 0xa1, 0x6d, 0x46, 0x2a, 0x4f, 0x62, 0xee, 0x25, - 0xdf, 0x22, 0x21, 0xb2, 0x8f, 0x5f, 0x26, 0x33, 0x5a, 0xdd, - 0xbe, 0x08, 0xb3, 0x93, 0x16, 0x16, 0xad, 0x2e, 0x00, 0xb8, - 0x14, 0x0c, 0x10, 0xa3, 0x29, 0x89, 0x1f, 0xd7, 0x06, 0x7a, - 0x09, 0xf3, 0x84, 0xf9, 0x18, 0x04, 0x56, 0x2f, 0x7f, 0xbd, - 0x8e, 0x12, 0xdf, 0x4d, 0x58, 0x5c, 0x1d, 0x81, 0x0c, 0x7d, - 0x62, 0x02, 0xe0, 0xf9, 0x1b, 0x69, 0xe9, 0x38, 0x45, 0x84, - 0x2d, 0x9a, 0x4a, 0x3d, 0x7b, 0x48, 0xd5, 0x0d, 0x76, 0xba, - 0xff, 0x20, 0x00, 0xf8, 0x42, 0x7f, 0xd2, 0x25, 0x70, 0x90, - 0x88, 0xb3, 0x98, 0xac, 0xe9, 0xd9, 0xac, 0x58, 0xa6, 0x49, - 0xcc, 0x93, 0xa5, 0x04, 0x0c, 0x68, 0x53, 0x64, 0x72, 0x8c, - 0xfc, 0x8d, 0x61, 0xeb, 0x3f, 0x93, 0x8b, 0x85, 0x98, 0x05, - 0xce, 0x06, 0xd7, 0xbf, 0xbb, 0xa5, 0x22, 0xda, 0xe9, 0x8a, - 0x29, 0x30, 0x5e, 0x82, 0xe4, 0x46, 0x7c, 0x36, 0x5e, 0xf5, - 0xc7, 0xe3, 0x09, 0xdf, 0x20, 0x76, 0x73, 0x33, 0x31, 0x75, - 0xc2, 0x99, 0xe9, 0x74, 0x43, 0x82, 0xb1, 0xeb, 0x74, 0x6f, - 0xad, 0x59, 0x48, 0x12, 0xa0, 0x24, 0xe3, 0x38, 0x48, 0x61, - 0x0c, 0xf6, 0x38, 0x83, 0x3a, 0xcd, 0xd6, 0x45, 0x10, 0x0e, - 0x09, 0x79, 0x31, 0x30, 0x80, 0xfb, 0x34, 0x60, 0x1e, 0x72, - 0x98, 0xe9, 0x5c, 0xbf, 0xab, 0x21, 0x7f, 0xa3, 0x19, 0x7e, - 0x8c, 0xa9, 0xa7, 0xfc, 0x25, 0xe0, 0x8e, 0x6d, 0xa1, 0xb9, - 0x7b, 0x5b, 0x37, 0x33, 0x96, 0xd8, 0x6e, 0x7a, 0xce, 0xa6, - 0x1a, 0xbd, 0xe6, 0x6e, 0x62, 0xc4, 0x8c, 0x69, 0xfe, 0xe4, - 0xcb, 0x0a, 0xa1, 0x6c, 0x66, 0x0e, 0x1a, 0x5e, 0xb9, 0xd1, - 0x4a, 0xa3, 0x91, 0x39, 0xcf, 0x85, 0x07, 0x5b, 0xaf, 0x99, - 0x11, 0xca, 0xee, 0x6f, 0x2e, 0x33, 0xda, 0x60, 0xbf, 0xd6, - 0xa0, 0x7a, 0xdb, 0x91, 0x13, 0xb7, 0xa3, 0x5d, 0x0e, 0x1e, - 0x3b, 0xf9, 0x7a, 0x3e, 0x4f, 0x8d, 0xb3, 0x81, 0xe8, 0x0c, - 0x4d, 0x48, 0x61, 0x06, 0x14, 0x0f, 0x3e, 0x33, 0x9e, 0xea, - 0xa6, 0xd8, 0xd8, 0x4d, 0x9b, 0x00, 0x34, 0x0d, 0x31, 0x62, - 0x54, 0x93, 0x04, 0xd2, 0x02, 0x21, 0x38, 0x91, 0x58, 0xca, - 0x77, 0xd3, 0x6c, 0xd1, 0x94, 0x05, 0xfa, 0x30, 0x6a, 0x0b, - 0xf0, 0x52, 0x52, 0xb7, 0xdb, 0x34, 0xff, 0x18, 0x5c, 0x78, - 0x25, 0x44, 0x39, 0xe4, 0x54, 0x8a, 0xf1, 0x49, 0x04, 0xab, - 0x8a, 0x5f, 0x87, 0xe1, 0x6e, 0x1a, 0xf2, 0xba, 0x39, 0xb4, - 0x7c, 0x71, 0x5b, 0xbe, 0x8d, 0xbb, 0xed, 0x3b, 0xed, 0x20, - 0x95, 0xdf, 0xa7, 0x50, 0xb5, 0x66, 0xff, 0xd0, 0x3a, 0x92, - 0xde, 0xf2, 0xa3, 0xf2, 0xd6, 0x48, 0x6b, 0xd8, 0xef, 0x80, - 0x4d, 0xc2, 0x3c, 0xc7, 0xc6, 0x6e, 0xdf, 0xd1, 0x54, 0xfb, - 0x22, 0xac, 0x1a, 0x11, 0x81, 0x02, 0xc7, 0x66, 0xe0, 0xf3, - 0xad, 0x0b, 0xd0, 0xec, 0xae, 0x93, 0x53, 0xa5, 0xbf, 0xa5, - 0x17, 0x59, 0x14, 0x7d, 0x7e, 0x1e, 0x26, 0x15, 0x7a, 0x74, - 0xfb, 0xb1, 0x7a, 0x0e, 0xd3, 0xb5, 0x7c, 0x8c, 0x3a, 0xd7, - 0x45, 0x38, 0x55, 0xae, 0x4b, 0xe1, 0xfe, 0x5b, 0x57, 0x20, - 0x73, 0x38, 0xb9, 0x67, 0x34, 0xb1, 0xf3, 0x15, 0xb0, 0xb7, - 0x46, 0xa7, 0x1b, 0x19, 0x6d, 0xaf, 0x5e, 0x2c, 0x9c, 0x02, - 0x3f, 0x0f, 0xa3, 0x56, 0x2f, 0x9f, 0x1a, 0x82, 0x0e, 0xb4, - 0x46, 0xf5, 0x69, 0x89, 0x91, 0xf9, 0x2d, 0x99, 0x45, 0xa6, - 0x3c, 0x82, 0x74, 0xac, 0xeb, 0x58, 0x4a, 0xdd, 0x03, 0xaf, - 0xd1, 0x0a, 0xca, 0x4b, 0xe8, 0x4c, 0x63, 0xd4, 0x73, 0x94, - 0xbf, 0xd1, 0xc5, 0x8a, 0x3f, 0x6e, 0x58, 0xfc, 0x70, 0x76, - 0x69, 0x92, 0x05, 0xe0, 0xb9, 0xed, 0x5f, 0x19, 0xd7, 0x6f, - 0xd0, 0x35, 0xbb, 0x5a, 0x8d, 0x45, 0xac, 0x43, 0xcb, 0x74, - 0xcc, 0x92, 0xc3, 0x62, 0x56, 0x02, 0xb0, 0x0a, 0xb6, 0x88, - 0x40, 0x6f, 0x76, 0x1b, 0x89, 0xe4, 0x51, 0xeb, 0x7e, 0x08, - 0x8c, 0xce, 0x24, 0xc8, 0xd8, 0x58, 0xbd, 0x0e, 0x48, 0x57, - 0xc8, 0x9f, 0xad, 0x64, 0xcf, 0x69, 0x72, 0x35, 0xbf, 0x04, - 0x09, 0xfb, 0x0e, 0x62, 0x92, 0x76, 0x8b, 0x8d, 0xd5, 0x16, - 0xa2, 0x51, 0xdb, 0x71, 0xa9, 0x08, 0xb2, 0xf9, 0x1e, 0x07, - 0xe7, 0xf8, 0xf4, 0x79, 0x59, 0x2f, 0x8f, 0xf1, 0x5b, 0x45, - 0xe1, 0xb8, 0xb7, 0xef, 0x86, 0x69, 0x71, 0x51, 0x1c, 0xe5, - 0x61, 0xee, 0xb8, 0x1d, 0xa7, 0xdc, 0x48, 0xba, 0x51, 0xa5, - 0x70, 0x4d, 0xfd, 0x2c, 0x46, 0x21, 0x63, 0x0c, 0x9f, 0xb7, - 0x68, 0x58, 0x7b, 0xb3, 0x7d, 0x64, 0xfd, 0xaf, 0x87, 0x3d, - 0x86, 0x06, 0x36, 0x8a, 0x6d, 0xfe, 0xdf, 0xce, 0xa8, 0x16, - 0x42, 0x46, 0x15, 0xe5, 0xcf, 0x48, 0xa6, 0x4b, 0xe5, 0xc1, - 0xad, 0x14, 0x3a, 0x6d, 0xeb, 0xf9, 0xc9, 0x32, 0xd1, 0x82, - 0x60, 0x23, 0xf0, 0xff, 0xa7, 0xe6, 0x2e, 0xd6, 0x8d, 0x9d, - 0x4f, 0x6d, 0xb3, 0xc4, 0xad, 0xd9, 0xf0, 0xf5, 0x5c, 0x47, - 0x6c, 0x67, 0xf4, 0x0e, 0x18, 0x25, 0xbb, 0x67, 0xfa, 0x11, - 0x70, 0xd5, 0xbc, 0x3a, 0x34, 0xae, 0xa2, 0x76, 0x4b, 0x9f, - 0x59, 0x01, 0x18, 0x69, 0x44, 0xc4, 0x8a, 0xff, 0x00, 0xfc, - 0x2a, 0x45, 0xa9, 0x50, 0x8e, 0x37, 0x6b, 0x78, 0x14, 0x69, - 0xe7, 0x92, 0x3d, 0xf1, 0x34, 0xd5, 0x5c, 0x48, 0xc2, 0x50, - 0xb3, 0x0c, 0x7d, 0x54, 0x05, 0x31, 0x1e, 0xce, 0xaa, 0xc1, - 0x4c, 0xc9, 0x13, 0x33, 0x26, 0x1f, 0x56, 0x7e, 0x7e, 0x74, - 0xd3, 0x78, 0x3e, 0x00, 0x4a, 0xc8, 0xc6, 0x20, 0x5b, 0xb8, - 0x80, 0xb4, 0x13, 0x35, 0x23, 0xff, 0x50, 0xde, 0x25, 0x92, - 0x67, 0x08, 0xb8, 0xa3, 0xb6, 0x39, 0xd4, 0x30, 0xdc, 0xa5, - 0x88, 0x8a, 0x44, 0x08, 0x8b, 0x6d, 0x2e, 0xb8, 0xf3, 0x0d, - 0x23, 0xda, 0x35, 0x08, 0x5a, 0x92, 0xe1, 0x40, 0xac, 0xc7, - 0x15, 0x05, 0x8a, 0xdf, 0xe5, 0x71, 0xd8, 0xe0, 0xd7, 0x9f, - 0x58, 0x03, 0xf4, 0xec, 0x99, 0x3c, 0xb0, 0xe0, 0x07, 0x42, - 0x9b, 0xa0, 0x10, 0x7c, 0x24, 0x60, 0x19, 0xe8, 0x84, 0xd4, - 0xb1, 0x86, 0x19, 0x0a, 0x52, 0x70, 0x6e, 0xc2, 0x3c, 0xe2, - 0x73, 0x8d, 0xfe, 0xf8, 0x7e, 0xdf, 0x78, 0xe7, 0x92, 0x36, - 0x10, 0xf7, 0x2d, 0x76, 0x93, 0x8a, 0x0f, 0x20, 0xc8, 0x30, - 0x59, 0x81, 0xff, 0x3b, 0x70, 0x22, 0xce, 0x6e, 0x23, 0x68, - 0x35, 0x59, 0x0e, 0xcf, 0xf8, 0xf6, 0xcd, 0x45, 0xb6, 0x41, - 0xba, 0xda, 0xe6, 0x35, 0x0b, 0xd1, 0xef, 0xa5, 0x7c, 0xe0, - 0xb9, 0x6f, 0x5b, 0xa9, 0xab, 0x87, 0xe3, 0x3b, 0x92, 0xce, - 0xbe, 0xfe, 0xf7, 0xab, 0x82, 0xa3, 0xe6, 0xbd, 0xfe, 0xce, - 0xa6, 0x17, 0xcb, 0x4c, 0xb4, 0x4c, 0xd6, 0xfe, 0xbb, 0x1c, - 0x10, 0xde, 0x29, 0x3e, 0x92, 0x66, 0x20, 0xf8, 0xee, 0x83, - 0x86, 0x66, 0xe0, 0x66, 0x97, 0x85, 0xaf, 0x3a, 0x8f, 0xa9, - 0x97, 0x09, 0xde, 0x77, 0xda, 0xb7, 0x81, 0x41, 0x10, 0xca, - 0x66, 0x00, 0xec, 0xf8, 0x46, 0x73, 0xa6, 0x24, 0x36, 0xec, - 0x25, 0xbe, 0x93, 0x5e, 0x74, 0x9f, 0xbe, 0xf4, 0x84, 0x15, - 0x9c, 0xc5, 0x43, 0xd9, 0xea, 0x5a, 0xcc, 0x2c, 0x4e, 0x2e, - 0x4e, 0x32, 0xa6, 0x88, 0xb1, 0x25, 0x34, 0xf7, 0xba, 0xab, - 0xd3, 0xa0, 0xc2, 0x06, 0x70, 0xed, 0x66, 0x4d, 0x71, 0x34, - 0xaf, 0x10, 0x99, 0x10, 0x11, 0x4f, 0xe4, 0x7d, 0x42, 0x03, - 0x04, 0x02, 0xc2, 0x41, 0x85, 0x1e, 0xc4, 0xca, 0xae, 0xf0, - 0x83, 0x78, 0x34, 0x98, 0x55, 0x8b, 0x4c, 0xa0, 0x14, 0xea, - 0x15, 0x2c, 0xa1, 0x30, 0xd8, 0xcf, 0xac, 0xd4, 0xca, 0xf7, - 0xf4, 0xc4, 0x20, 0xca, 0xa1, 0xef, 0xce, 0x5d, 0x6b, 0x32, - 0xb6, 0xf0, 0x22, 0x08, 0x49, 0x21, 0x0c, 0x57, 0x0f, 0xf8, - 0xc0, 0xd2, 0xe3, 0xc0, 0xa6, 0x31, 0xc7, 0x87, 0x96, 0xa9, - 0xfe, 0x69, 0xa0, 0x7f, 0xf7, 0x8e, 0x31, 0x92, 0x37, 0xce, - 0xde, 0x36, 0x3f, 0xf5, 0x7d, 0x07, 0xaa, 0xa9, 0x43, 0xee, - 0x3c, 0x8c, 0xd3, 0x7d, 0x2c, 0xa6, 0xc3, 0x98, 0xab, 0xbe, - 0x90, 0x4c, 0xa5, 0x5a, 0x27, 0xeb, 0x0e, 0xed, 0xa1, 0x1e, - 0x3e, 0x44, 0xa3, 0x4b, 0x49, 0xad, 0xe4, 0x19, 0x90, 0xc8, - 0x9e, 0x6e, 0x5b, 0x68, 0xbc, 0x37, 0x54, 0xaf, 0xa6, 0xb7, - 0x71, 0x5c, 0x5d, 0x74, 0x83, 0xf4, 0xb9, 0x2f, 0xe5, 0x1a, - 0x0c, 0x73, 0x30, 0x56, 0x82, 0x04, 0xb3, 0x0e, 0x32, 0x98, - 0xfd, 0x27, 0xa0, 0xfe, 0xe0, 0xe0, 0xf5, 0xb7, 0xe0, 0x47, - 0x2a, 0xa6, 0x4a, 0xe0, 0xfc, 0xb5, 0xd8, 0xfd, 0x01, 0xfe, - 0x4e, 0x96, 0x17, 0x06, 0xcc, 0x92, 0x7c, 0xa1, 0x2f, 0xb5, - 0x04, 0x08, 0x76, 0xcc, 0x40, 0x75, 0x37, 0x4d, 0x2c, 0x74, - 0xcd, 0xc7, 0x62, 0xa6, 0xe6, 0xd8, 0x9e, 0x21, 0x7f, 0x2e, - 0xf5, 0x2c, 0xcf, 0x0b, 0x3f, 0xd7, 0xed, 0x17, 0xee, 0x92, - 0xaf, 0xf9, 0xa4, 0x71, 0x5d, 0x5f, 0x81, 0xb9, 0x2f, 0x12, - 0xe5, 0x57, 0x2d, 0x1e, 0xf1, 0x67, 0x47, 0x2a, 0xde, 0xab, - 0xf2, 0xea, 0xb7, 0xb5, 0x83, 0xdc, 0x46, 0xd4, 0xf3, 0x25, - 0x65, 0x15, 0x4d, 0x66, 0x34, 0x54, 0xab, 0x94, 0x89, 0x80, - 0x39, 0xd3, 0x39, 0xe3, 0xa2, 0xb1, 0x91, 0x2a, 0x5e, 0x55, - 0xe1, 0xa4, 0x0f, 0xc3, 0x4b, 0x5a, 0xa5, 0x4a, 0xb3, 0xc0, - 0x40, 0xea, 0x16, 0x0c, 0xd5, 0x2d, 0x83, 0x3e, 0x28, 0x20, - 0xac, 0x0a, 0x1b, 0x5b, 0x87, 0xcf, 0xf1, 0x51, 0xd6, 0xda, - 0xd1, 0xc9, 0xb1, 0x27, 0xf5, 0x62, 0x03, 0x10, 0xcf, 0x76, - 0x28, 0xa2, 0xea, 0x4b, 0x76, 0xaf, 0x9c, 0x3d, 0xf1, 0x1b, - 0x92, 0xff, 0xb0, 0xca, 0x16, 0xa2, 0x29, 0x94, 0x0e, 0x1e, - 0x51, 0xfb, 0xe1, 0x2b, 0x5a, 0x50, 0xfd, 0xaf, 0xab, 0xd7, - 0x32, 0xaa, 0x43, 0xa7, 0xcb, 0xd3, 0xd3, 0xe9, 0x1e, 0xb1, - 0x70, 0xd2, 0xbb, 0x15, 0x68, 0x49, 0xee, 0x6e, 0x1e, 0xc5, - 0x64, 0x4b, 0x26, 0x08, 0xe7, 0x32, 0x1c, 0x1d, 0x73, 0x8f, - 0x42, 0xfe, 0xeb, 0x67, 0x89, 0x42, 0x25, 0x40, 0xd6, 0x15, - 0x02, 0x55, 0x87, 0xe3, 0x87, 0xdd, 0x78, 0xc1, 0x01, 0x94, - 0xbc, 0x30, 0x5f, 0xbd, 0x89, 0xe1, 0xb0, 0x5c, 0xcd, 0xb7, - 0x68, 0xd5, 0xbb, 0xf4, 0xa0, 0x5d, 0x3d, 0xdd, 0x89, 0x12, - 0xc7, 0xb8, 0x5d, 0x51, 0x8a, 0xf4, 0xd5, 0x05, 0xc6, 0xdd, - 0x7b, 0x44, 0x38, 0xce, 0xb1, 0x24, 0x24, 0xe1, 0x9d, 0xc7, - 0x80, 0x86, 0x46, 0x2a, 0xd2, 0xa4, 0x0f, 0xec, 0xd3, 0x6b, - 0x31, 0xc0, 0x05, 0x31, 0xff, 0xf5, 0x1a, 0x33, 0x35, 0x68, - 0x2e, 0x68, 0x24, 0xbd, 0x62, 0xfc, 0x46, 0x79, 0x54, 0x5e, - 0x1e, 0x27, 0x93, 0x07, 0xed, 0x78, 0x94, 0x50, 0x42, 0x98, - 0x53, 0x88, 0xb7, 0x57, 0x04, 0x7d, 0xe2, 0xe1, 0xb5, 0x61, - 0x9e, 0x5a, 0x88, 0x31, 0x3e, 0x6c, 0x69, 0xbc, 0x8a, 0xe6, - 0xbc, 0x9d, 0x20, 0x7a, 0x86, 0xe5, 0x73, 0x93, 0x02, 0xc5, - 0xde, 0xdc, 0xcc, 0xbf, 0x89, 0x76, 0xdc, 0x4e, 0xa1, 0x89, - 0xe7, 0x95, 0x75, 0x01, 0xf7, 0x43, 0xaa, 0x3f, 0x1b, 0xb7, - 0x8c, 0x92, 0x66, 0x22, 0xbe, 0x34, 0xf1, 0x2f, 0xc3, 0xc7, - 0x21, 0xaf, 0x25, 0x57, 0x9a, 0x2c, 0x80, 0xf0, 0xb3, 0xdd, - 0xb3, 0xb2, 0x82, 0x97, 0x85, 0x73, 0xa9, 0x76, 0xe4, 0x37, - 0xa2, 0x65, 0xf9, 0xc1, 0x3d, 0x11, 0xbf, 0xcb, 0x3c, 0x8e, - 0xdd, 0xaf, 0x98, 0x57, 0x6a, 0xe1, 0x33, 0xe7, 0xf0, 0xff, - 0xed, 0x61, 0x53, 0xfe, 0x1e, 0x2d, 0x06, 0x2f, 0xb8, 0x9e, - 0xf9, 0xa5, 0x21, 0x06, 0xf3, 0x72, 0xf6, 0xa3, 0x77, 0xbb, - 0x63, 0x6e, 0x52, 0xb2, 0x42, 0x47, 0x9b, 0x92, 0x4c, 0xf8, - 0xd2, 0xe6, 0x02, 0xa5, 0x57, 0x2d, 0x6f, 0x30, 0x05, 0xe2, - 0xfd, 0x33, 0xe5, 0xb6, 0x23, 0x85, 0x89, 0x4a, 0x99, 0x20, - 0x33, 0xea, 0x2f, 0xcd, 0x28, 0x27, 0xff, 0xfd, 0x2e, 0x73, - 0x52, 0x29, 0x19, 0x7c, 0x65, 0xf5, 0x6a, 0xaa, 0x97, 0x6e, - 0xe9, 0x42, 0xa8, 0x55, 0x97, 0x56, 0x92, 0x9d, 0xd2, 0xd1, - 0xc4, 0x30, 0xaa, 0x95, 0x86, 0xba, 0x71, 0xdd, 0x2f, 0xf1, - 0xed, 0x66, 0x54, 0x78, 0x4b, 0x13, 0x31, 0xed, 0x9d, 0x2c, - 0xae, 0x0a, 0xc3, 0xca, 0xfb, 0x3f, 0x92, 0x92, 0x30, 0xa3, - 0x8e, 0xc8, 0x6d, 0x7b, 0x42, 0xd5, 0x5d, 0x99, 0x79, 0x42, - 0x28, 0x63, 0x9f, 0x97, 0x8e, 0x94, 0x6d, 0x1d, 0xb4, 0x21, - 0x39, 0xc7, 0x64, 0x48, 0x44, 0x5e, 0x15, 0x10, 0x45, 0x9f, - 0x8a, 0x01, 0x45, 0x20, 0x5c, 0xd1, 0x28, 0x0d, 0xe9, 0xfb, - 0xa9, 0x72, 0x68, 0x07, 0x31, 0x20, 0x75, 0x76, 0x82, 0x76, - 0x5d, 0x7c, 0xc1, 0x5d, 0x42, 0x40, 0xfd, 0x06, 0xa9, 0x66, - 0xb0, 0x36, 0x55, 0x86, 0x6c, 0x96, 0xbd, 0xb8, 0xf7, 0x36, - 0x87, 0xf2, 0xa1, 0x37, 0xd8, 0x2d, 0x83, 0xf5, 0xdc, 0xd8, - 0xde, 0x9e, 0x69, 0xd6, 0xe1, 0x0d, 0xd5, 0x93, 0xc5, 0xee, - 0xba, 0xd3, 0x40, 0x71, 0xbb, 0xc7, 0xbb, 0x50, 0x1a, 0x10, - 0x80, 0x99, 0x62, 0x1c, 0xe3, 0x1f, 0xa2, 0xcc, 0x98, 0xe1, - 0xaa, 0xff, 0xd9, 0x69, 0xe7, 0x87, 0x04, 0x87, 0x76, 0xec, - 0x55, 0x18, 0xaf, 0x82, 0x34, 0x4d, 0x4f, 0xf7, 0x57, 0x1f, - 0xa5, 0x43, 0xcc, 0xe9, 0x7a, 0x4a, 0xc8, 0xb4, 0x1f, 0x61, - 0x40, 0x5e, 0x1d, 0x11, 0xdd, 0xdc, 0xdc, 0xb4, 0x57, 0xf9, - 0x47, 0x96, 0xbc, 0x47, 0x29, 0xf8, 0xf2, 0x43, 0xc4, 0xa0, - 0x8c, 0x14, 0x5e, 0x73, 0x52, 0xac, 0xac, 0x39, 0x3b, 0x06, - 0x19, 0x1a, 0xca, 0x22, 0xc8, 0x96, 0x12, 0x2e, 0x4c, 0x7b, - 0xa0, 0x96, 0x53, 0x16, 0xce, 0x6d, 0x6e, 0xac, 0xb2, 0x07, - 0x17, 0x22, 0x07, 0x30, 0x20, 0x84, 0x9b, 0x0e, 0x92, 0x31, - 0x07, 0xe2, 0x77, 0xcd, 0x6a, 0x3e, 0x16, 0x4f, 0xd6, 0x12, - 0x88, 0x8a, 0x70, 0x5a, 0x87, 0xd8, 0xb9, 0xef, 0x76, 0xab, - 0x14, 0x65, 0x87, 0x3a, 0xef, 0xd8, 0x0e, 0x24, 0x40, 0x73, - 0x93, 0x2b, 0xbf, 0xac, 0xfe, 0x96, 0x8a, 0x9d, 0x12, 0xe6, - 0xc1, 0x5b, 0x00, 0x3b, 0x23, 0xee, 0xe2, 0x10, 0xb6, 0xbe, - 0x0e, 0x2f, 0xa2, 0x77, 0x16, 0x17, 0xfc, 0x4b, 0x2c, 0xd7, - 0x9c, 0xad, 0x66, 0xb4, 0xf2, 0xfd, 0xc1, 0xaf, 0x81, 0x12, - 0xd9, 0xed, 0x14, 0x32, 0xcf, 0x1b, 0xee, 0xc6, 0x63, 0xe8, - 0xe5, 0xe6, 0xb6, 0x91, 0x8d, 0x1b, 0x90, 0x75, 0x5d, 0x69, - 0x4c, 0x5d, 0xd6, 0xac, 0x79, 0xe8, 0xb6, 0xdf, 0xbf, 0x43, - 0x39, 0xd3, 0xb8, 0xf0, 0x39, 0xf4, 0x90, 0xaf, 0x73, 0x26, - 0xc7, 0x73, 0x6f, 0x93, 0xbb, 0xce, 0x6e, 0xdc, 0x1c, 0xd0, - 0x36, 0x23, 0x17, 0xb2, 0x39, 0x37, 0x15, 0xf5, 0x3a, 0x61, - 0xa9, 0x15, 0x52, 0x6e, 0xc5, 0x3a, 0x63, 0x79, 0x5d, 0x45, - 0xdc, 0x3a, 0xd5, 0x26, 0x01, 0x56, 0x97, 0x80, 0x7f, 0x83, - 0xf9, 0xec, 0xde, 0xa0, 0x2e, 0x7a, 0xb2, 0x4b, 0x04, 0x63, - 0x60, 0x05, 0xce, 0x96, 0xeb, 0xe0, 0x0a, 0x5f, 0xb0, 0x7e, - 0x6d, 0x0a, 0x24, 0x32, 0x47, 0x82, 0x7f, 0x0b, 0xd7, 0xe9, - 0xd5, 0x14, 0xa9, 0x6b, 0x10, 0x5d, 0x1e, 0x1f, 0x8a, 0xad, - 0x70, 0x91, 0xd4, 0x33, 0x1d, 0xc2, 0x3e, 0xf8, 0xc8, 0x52, - 0x9a, 0x27, 0x1f, 0x45, 0x2f, 0xb5, 0xc7, 0xb1, 0x8b, 0xf9, - 0xc6, 0x7b, 0xb5, 0x92, 0x7a, 0xdd, 0xeb, 0x07, 0x6c, 0x6f, - 0x11, 0xd7, 0x5b, 0x56, 0x56, 0xec, 0x88, 0x1c, 0xc9, 0xb4, - 0xe8, 0x43, 0xab, 0xdf, 0x0b, 0xc5, 0x28, 0xba, 0x70, 0x5d, - 0xd3, 0xb2, 0xe2, 0xcf, 0xa7, 0xbb, 0x53, 0x04, 0x6b, 0x73, - 0xdf, 0x27, 0xa6, 0x63, 0x58, 0xe1, 0x39, 0x26, 0x2a, 0x1a, - 0x21, 0xec, 0xbb, 0x5f, 0x46, 0x98, 0x3d, 0x48, 0x66, 0xfe, - 0xf3, 0xcb, 0xfc, 0x6e, 0x99, 0x82, 0x91, 0xce, 0x53, 0xfd, - 0x75, 0xc9, 0xb6, 0x08, 0xa8, 0xf3, 0xe4, 0xe0, 0xa0, 0x24, - 0x45, 0xb4, 0x69, 0x11, 0xac, 0x06, 0x1c, 0x39, 0x71, 0xcf, - 0x72, 0xfc, 0x77, 0x9b, 0x5f, 0xf4, 0x8b, 0x02, 0x31, 0xf3, - 0x67, 0xd1, 0x9b, 0xe0, 0x49, 0xa4, 0x69, 0x20, 0x99, 0x38, - 0xa7, 0xf5, 0x43, 0xd2, 0x45, 0x9f, 0x7a, 0xe7, 0xad, 0x7e, - 0x36, 0xee, 0xfd, 0x8c, 0xc5, 0x6a, 0x12, 0x58, 0x15, 0x3b, - 0x02, 0x81, 0x73, 0x8b, 0x10, 0xda, 0x21, 0xc7, 0x1d, 0x38, - 0xd8, 0x40, 0x7a, 0xa3, 0x59, 0x55, 0x35, 0x44, 0xa9, 0x9c, - 0xf5, 0xf4, 0xe4, 0x14, 0xc1, 0xc4, 0x15, 0x26, 0x01, 0xe3, - 0x31, 0xbf, 0xdc, 0xbc, 0x69, 0x0b, 0xcf, 0x71, 0x8c, 0xdb, - 0x16, 0xab, 0x36, 0x3e, 0xb3, 0xa4, 0x9f, 0xcc, 0xbf, 0xa2, - 0x93, 0x93, 0x9a, 0x3b, 0xaf, 0x72, 0x8d, 0x8b, 0x92, 0x44, - 0x5d, 0x6f, 0xc5, 0xf0, 0xdc, 0x65, 0x62, 0xea, 0xba, 0x33, - 0xe7, 0x6c, 0xa4, 0x35, 0xcf, 0xd9, 0xbc, 0x3c, 0xbf, 0x25, - 0x7b, 0x7c, 0x0b, 0x62, 0x92, 0x5a, 0x66, 0x63, 0xe1, 0x27, - 0x89, 0x12, 0xe2, 0xae, 0xb7, 0xf8, 0x04, 0x70, 0xda, 0x4a, - 0x3d, 0xa6, 0x67, 0x12, 0x14, 0x9e, 0x8e, 0xdc, 0xa2, 0xf2, - 0x3d, 0xc7, 0xd2, 0x8f, 0x18, 0x3a, 0x53, 0x8c, 0x83, 0x5d, - 0x66, 0xbb, 0x9f, 0x8c, 0xaf, 0xa8, 0x73, 0x08, 0x2e, 0x6d, - 0x30, 0xa0, 0xd0, 0x20, 0x94, 0x48, 0xad, 0x5e, 0x31, 0xfd, - 0x5e, 0xfd, 0xf9, 0xb5, 0xa2, 0x39, 0xa3, 0xb9, 0xdf, 0x4d, - 0xa4, 0xb1, 0x54, 0xcc, 0x92, 0x63, 0x2c, 0x66, 0x2d, 0x01, - 0x88, 0x8b, 0x7d, 0xc6, 0x5c, 0x9f, 0x18, 0x9a, 0x53, 0x91, - 0x59, 0x66, 0x70, 0xd7, 0x81, 0x0e, 0xa1, 0x3c, 0x7e, 0x86, - 0x85, 0x64, 0x38, 0x6f, 0xec, 0x76, 0x57, 0x80, 0x41, 0x9d, - 0xef, 0x61, 0xb8, 0xb2, 0x8a, 0xeb, 0xe9, 0x26, 0xbb, 0x69, - 0xb3, 0x8d, 0xd4, 0x6b, 0x05, 0xd8, 0x55, 0x1c, 0xbd, 0x9f, - 0x6b, 0x23, 0x46, 0x2b, 0xf7, 0xfb, 0x4d, 0x33, 0x3b, 0x21, - 0x6d, 0xea, 0x1b, 0x15, 0xaf, 0x0f, 0x8c, 0x98, 0xc8, 0xf4, - 0xd1, 0x3c, 0xdd, 0x21, 0xd0, 0x45, 0xdc, 0xaf, 0x89, 0x89, - 0xbf, 0xde, 0xbf, 0x46, 0x9e, 0x9e, 0x18, 0x56, 0x9d, 0x05, - 0x4d, 0x63, 0x5f, 0x1c, 0xd9, 0x15, 0xd1, 0x43, 0x17, 0x0c, - 0x48, 0x3d, 0x36, 0x8b, 0x14, 0x87, 0xc8, 0x10, 0x44, 0xdf, - 0x9c, 0xfd, 0x6e, 0x88, 0x88, 0xae, 0x7f, 0x7f, 0x67, 0xa3, - 0x33, 0x4d, 0xa3, 0x84, 0x8b, 0x58, 0x07, 0x17, 0xd8, 0x1d, - 0x9e, 0x43, 0xd6, 0x41, 0x9c, 0xff, 0xfa, 0x35, 0xa2, 0x42, - 0xa9, 0x5d, 0xa9, 0x4b, 0x95, 0x23, 0x6a, 0x6e, 0x42, 0xd7, - 0xa2, 0x0a, 0x70, 0x00, 0x61, 0x8b, 0x45, 0xbb, 0xac, 0x20, - 0x27, 0xcd, 0xfc, 0x61, 0x17, 0xfe, 0xab, 0x6b, 0xe8, 0xe0, - 0x51, 0xab, 0xa3, 0xbf, 0xe4, 0x85, 0x69, 0x8e, 0xd7, 0xa6, - 0x62, 0x33, 0x8f, 0x7c, 0xba, 0x48, 0xfa, 0x83, 0x94, 0xa5, - 0xdf, 0xa1, 0x76, 0xdc, 0xa9, 0x4b, 0x3c, 0x27, 0xff, 0xd9, - 0xbe, 0xf4, 0x80, 0x5a, 0xca, 0x33, 0xf3, 0x9a, 0x1d, 0xf8, - 0xf3, 0xe1, 0x83, 0x27, 0x0b, 0x59, 0x87, 0x31, 0x7d, 0x4f, - 0x5a, 0x5e, 0xe1, 0xbe, 0xa9, 0x68, 0xe9, 0x6f, 0x10, 0x0a, - 0xe2, 0x70, 0x05, 0xaa, 0xcb, 0xdd, 0x41, 0xd7, 0x49, 0x8a, - 0x98, 0xa0, 0x40, 0x2d, 0xc6, 0x56, 0x49, 0xca, 0x60, 0x16, - 0x9c, 0x38, 0xc9, 0xfe, 0x99, 0x15, 0xfb, 0x79, 0x01, 0x33, - 0xcd, 0x54, 0x2f, 0xf3, 0x70, 0x37, 0x82, 0x36, 0x32, 0x76, - 0x8f, 0x63, 0x00, 0xa2, 0x42, 0xce, 0x39, 0x90, 0xfc, 0xf8, - 0xff, 0x34, 0x38, 0x0a, 0x17, 0x5e, 0x9d, 0x34, 0x86, 0xde, - 0x33, 0x45, 0xac, 0xbf, 0x81, 0xdf, 0xd2, 0xbc, 0xc7, 0xd7, - 0xd1, 0xee, 0xde, 0x2b, 0x5b, 0x50, 0x56, 0xb5, 0x88, 0x00, - 0x92, 0x76, 0x5a, 0x34, 0x0c, 0xfe, 0x8f, 0xc5, 0xa0, 0x92, - 0xb0, 0xed, 0x43, 0xe7, 0x81, 0x39, 0x36, 0x6e, 0xb7, 0x4d, - 0x5b, 0xcf, 0xc7, 0xf0, 0x83, 0xe5, 0xdc, 0xb7, 0x74, 0xf4, - 0xf3, 0xbd, 0xa8, 0xa6, 0x7b, 0xe0, 0xc5, 0x50, 0xaa, 0xc7, - 0x83, 0x4d, 0xd9, 0xc5, 0x97, 0x03, 0x7c, 0x0c, 0x3b, 0x3a, - 0x18, 0xb2, 0x8c, 0xee, 0x67, 0x91, 0x38, 0x84, 0x8f, 0xef, - 0xb4, 0xf4, 0xe4, 0x7c, 0x1a, 0x3f, 0xa3, 0x0a, 0xd9, 0xba, - 0xff, 0x56, 0xd8, 0xe2, 0x82, 0xfc, 0x58, 0x8f, 0xf6, 0x12, - 0x10, 0x65, 0x6a, 0x68, 0x53, 0x2d, 0x9f, 0x2c, 0x77, 0xd1, - 0xb8, 0x21, 0x8a, 0xcb, 0xe9, 0xd4, 0x25, 0x18, 0x22, 0x46, - 0x3e, 0x72, 0x29, 0x2a, 0x68, 0x70, 0x73, 0xe2, 0x61, 0xa2, - 0xa8, 0x1f, 0x24, 0x48, 0x92, 0xa0, 0xd4, 0xdd, 0xde, 0xe5, - 0x02, 0x1b, 0x59, 0x5c, 0x7e, 0x92, 0x9c, 0xd8, 0xf4, 0x2d, - 0x6b, 0x79, 0x7b, 0xc7, 0xcd, 0xef, 0x21, 0x2a, 0x50, 0x7e, - 0xba, 0xdd, 0x02, 0x45, 0x7e, 0xc1, 0xdd, 0xeb, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x0c, 0x15, 0x1c, 0x22, 0x28, + 0xb1, 0xd1, 0x8e, 0x83, 0x0b, 0x0d, 0xd2, 0x71, 0xb2, 0xaa, 0x31, 0x38, + 0x16, 0xf0, 0xb4, 0xbc, 0x64, 0x2b, 0x97, 0xa1, 0x08, 0x19, 0x4f, 0x52, + 0xfe, 0x99, 0x1a, 0xa9, 0xd4, 0x08, 0x93, 0x99, 0x88, 0xfd, 0x6a, 0xd6, + 0xd8, 0xdb, 0xf0, 0x71, 0x2a, 0xc9, 0x04, 0x83, 0xc9, 0x45, 0x59, 0x5d, + 0xe0, 0x36, 0x59, 0x53, 0x1b, 0xb8, 0x5a, 0xa6, 0x1f, 0xb4, 0x1b, 0x0a, + 0xfb, 0x3a, 0xba, 0xe3, 0xb7, 0x5e, 0x04, 0x14, 0x59, 0x09, 0x9a, 0x8e, + 0xc2, 0x77, 0x5a, 0x3d, 0xf1, 0x43, 0x67, 0x74, 0x78, 0xfc, 0xcd, 0x34, + 0xed, 0x35, 0x16, 0x38, 0x04, 0xe6, 0xe7, 0xd6, 0xd2, 0x90, 0x1b, 0x28, + 0xb6, 0x66, 0x1b, 0x57, 0x85, 0x5e, 0xa7, 0x9f, 0x86, 0x1a, 0x0d, 0xc3, + 0x7e, 0xed, 0xbd, 0x32, 0x8a, 0x35, 0xe1, 0xb3, 0x01, 0xdc, 0x9b, 0x44, + 0x88, 0xa1, 0x0b, 0x87, 0x6e, 0x55, 0x31, 0xb1, 0x27, 0xcb, 0x85, 0xa4, + 0x27, 0x56, 0x33, 0xb0, 0x39, 0x0d, 0xd3, 0x4b, 0xd1, 0xa2, 0x47, 0x07, + 0xc6, 0xf4, 0xe6, 0x1f, 0x88, 0x70, 0x70, 0x13, 0x7e, 0x2e, 0x17, 0x32, + 0x0a, 0x6b, 0x38, 0x34, 0xcf, 0x2f, 0x00, 0x36, 0x58, 0x8d, 0xe1, 0xdd, + 0xa7, 0x94, 0x2a, 0x8f, 0x87, 0x99, 0x67, 0x02, 0x4d, 0x5b, 0x56, 0xaf, + 0xef, 0xc4, 0x3c, 0xff, 0x72, 0x53, 0x95, 0x27, 0x03, 0x49, 0x94, 0x4f, + 0x94, 0x87, 0x1f, 0x52, 0x33, 0xed, 0xb9, 0x14, 0x7b, 0xe5, 0x6c, 0xef, + 0x7a, 0x17, 0x5a, 0xa4, 0x89, 0x2a, 0xfe, 0x68, 0xda, 0xdd, 0x48, 0xc2, + 0xf0, 0x92, 0xf4, 0xe4, 0xd6, 0xa6, 0x48, 0x08, 0x2c, 0xe8, 0xcd, 0x72, + 0xf6, 0x94, 0x3e, 0xc1, 0x82, 0xb8, 0x01, 0x58, 0xb2, 0xef, 0xef, 0xf4, + 0xcb, 0x93, 0x63, 0x2e, 0x33, 0x5b, 0xc9, 0xd6, 0x6a, 0xde, 0xad, 0xe8, + 0x1e, 0x3f, 0xa3, 0xf2, 0x35, 0x87, 0xc1, 0xc9, 0x48, 0x2f, 0x1b, 0x00, + 0xea, 0x3d, 0x04, 0x29, 0xd5, 0xc0, 0xe9, 0x1a, 0xc5, 0xce, 0x5e, 0xdb, + 0xd1, 0xee, 0x16, 0x9c, 0x05, 0x40, 0xf9, 0x21, 0x13, 0x72, 0x08, 0x39, + 0x6b, 0x63, 0x19, 0xcd, 0x6f, 0x64, 0xa0, 0xc3, 0x77, 0xb7, 0x50, 0xed, + 0xe9, 0x2d, 0xd5, 0x72, 0xea, 0xa6, 0xc1, 0x97, 0xb9, 0x6b, 0xe5, 0x81, + 0x91, 0x8e, 0xd1, 0x36, 0x11, 0xee, 0xfb, 0x2b, 0x66, 0xba, 0xe4, 0x3e, + 0xd0, 0xdd, 0x17, 0xc5, 0x24, 0x3b, 0xc3, 0x5b, 0x75, 0xfc, 0xd5, 0xb6, + 0x8c, 0xba, 0x8c, 0x66, 0xb2, 0xee, 0x40, 0x45, 0x8c, 0x23, 0xbb, 0xe0, + 0xc8, 0xd6, 0x05, 0xfd, 0x71, 0x5b, 0x24, 0xbb, 0x37, 0x65, 0x5f, 0x57, + 0x92, 0x22, 0x13, 0xb2, 0x9a, 0x70, 0x22, 0x4b, 0xbe, 0x03, 0xd1, 0x54, + 0xb0, 0x3a, 0x30, 0x50, 0x71, 0x24, 0xf7, 0x81, 0x8c, 0x20, 0x67, 0x74, + 0x5a, 0xef, 0xa1, 0x6a, 0xe3, 0xd0, 0x04, 0xd6, 0xa5, 0x6e, 0xad, 0xa7, + 0x15, 0x41, 0xf3, 0x21, 0xe8, 0xd9, 0xe6, 0xe5, 0x97, 0xbd, 0xc2, 0x1b, + 0xbb, 0xd1, 0x4e, 0x7e, 0x5a, 0xd6, 0xe4, 0x19, 0xa5, 0xe4, 0x76, 0xf4, + 0xce, 0x00, 0x94, 0x76, 0xef, 0x1b, 0xb3, 0x47, 0xb9, 0xa3, 0x32, 0xf7, + 0x45, 0x6d, 0x32, 0x73, 0x06, 0xc0, 0xb9, 0xaf, 0x9c, 0x46, 0x99, 0xbe, + 0x14, 0x06, 0xcd, 0x35, 0x7c, 0x90, 0x7c, 0xe7, 0x97, 0x0a, 0x9f, 0xb4, + 0x21, 0xff, 0xf0, 0xea, 0x83, 0xc0, 0x86, 0x68, 0x9f, 0x36, 0xb0, 0xad, + 0xe1, 0x8d, 0xc5, 0x76, 0x55, 0xb5, 0xb6, 0x7e, 0x1f, 0xa7, 0x5b, 0x26, + 0x6c, 0xb5, 0xf9, 0x54, 0x1f, 0x76, 0xc1, 0x9c, 0xfc, 0x57, 0xc8, 0x86, + 0xc1, 0x7d, 0x59, 0x55, 0x92, 0xa5, 0xb8, 0x03, 0xfa, 0xa5, 0x72, 0xd1, + 0x5c, 0x8d, 0x9b, 0x2e, 0x84, 0x07, 0x18, 0xee, 0x49, 0xc5, 0x99, 0x8e, + 0x15, 0x7c, 0xbf, 0xad, 0x8b, 0x13, 0xcd, 0x97, 0xf9, 0x3c, 0xa2, 0x89, + 0x9c, 0x9c, 0x89, 0xc9, 0x7a, 0x46, 0xb3, 0x42, 0x7b, 0xd4, 0x28, 0x0d, + 0x55, 0x63, 0x28, 0xd6, 0xc1, 0x65, 0xf5, 0x34, 0x6e, 0x38, 0x2a, 0xb4, + 0x35, 0x40, 0xed, 0x7e, 0x80, 0x61, 0x9d, 0x8f, 0x68, 0x4f, 0x74, 0x0c, + 0x30, 0x35, 0x0e, 0xb3, 0x07, 0xf4, 0x92, 0xed, 0x9c, 0x7f, 0xf5, 0xed, + 0x3e, 0x17, 0x5b, 0x6e, 0x91, 0x46, 0xa1, 0x25, 0x1d, 0x83, 0x50, 0x93, + 0x35, 0x06, 0x6c, 0x2f, 0x99, 0x8b, 0x21, 0x4c, 0x5c, 0x34, 0xb1, 0xa7, + 0x82, 0xbc, 0x70, 0x28, 0x56, 0x61, 0x29, 0x35, 0x89, 0x0b, 0x41, 0x21, + 0xf0, 0xf7, 0xff, 0x69, 0x3d, 0xa4, 0x28, 0x1e, 0x0d, 0x5d, 0xa7, 0x0e, + 0xaa, 0xd3, 0x4a, 0x95, 0x49, 0xfe, 0x35, 0x5f, 0xa9, 0xc0, 0xe4, 0xe1, + 0x9a, 0x03, 0xd4, 0xac, 0x96, 0xe3, 0xea, 0x7e, 0xa6, 0x85, 0x7e, 0xb0, + 0xb8, 0xc2, 0xe8, 0x07, 0xd6, 0xd3, 0x1a, 0x84, 0x90, 0x24, 0x04, 0xef, + 0x7c, 0x93, 0x15, 0x83, 0xea, 0xe2, 0x42, 0xc6, 0xe7, 0x13, 0x45, 0xbf, + 0x35, 0xae, 0x5d, 0x50, 0x79, 0x16, 0xbb, 0x11, 0x17, 0x1b, 0xf4, 0x08, + 0x88, 0x9d, 0x66, 0x14, 0x6a, 0xa0, 0x71, 0x76, 0x80, 0x51, 0x73, 0x7c, + 0x1d, 0xb0, 0xc1, 0xad, 0x58, 0xfb, 0xbe, 0xcf, 0x73, 0xe0, 0xd9, 0xf8, + 0xd5, 0xac, 0xd7, 0x49, 0xd9, 0xc9, 0x59, 0xbf, 0xfa, 0xf5, 0xb1, 0xd2, + 0x5a, 0x01, 0xcd, 0x8b, 0x07, 0x8b, 0x59, 0x37, 0xc0, 0x8c, 0x7d, 0xa9, + 0x71, 0x83, 0xf9, 0x7c, 0x58, 0xa9, 0x77, 0x01, 0x3d, 0x39, 0x56, 0x5c, + 0x93, 0xfe, 0x40, 0x87, 0x5a, 0x31, 0x81, 0x53, 0x8e, 0x0d, 0x99, 0x7e, + 0xdf, 0x37, 0xd9, 0xe3, 0x91, 0xb8, 0x60, 0x3a, 0x5b, 0xca, 0xe8, 0x91, + 0x56, 0x89, 0x59, 0x61, 0xc6, 0x31, 0xe2, 0x6c, 0x81, 0xda, 0xc7, 0x5c, + 0x04, 0x9d, 0xe4, 0x23, 0x12, 0x73, 0xfc, 0x48, 0xfb, 0xa5, 0xce, 0x87, + 0x37, 0x47, 0x71, 0x5c, 0xd1, 0x2a, 0x63, 0x89, 0xdc, 0x07, 0xe7, 0x7f, + 0x5d, 0x48, 0xe6, 0xd2, 0x96, 0xc6, 0x6f, 0xed, 0xee, 0x8c, 0xed, 0x5e, + 0x41, 0x38, 0xbd, 0xdf, 0x21, 0xaa, 0x9e, 0x51, 0x16, 0x22, 0x4a, 0xdc, + 0xd8, 0x12, 0xdf, 0x5a, 0x83, 0xd6, 0xd0, 0x07, 0xa4, 0x42, 0x41, 0x13, + 0xe1, 0x08, 0xc9, 0x00, 0x0f, 0x37, 0xc0, 0x7d, 0xda, 0xb2, 0x25, 0xfc, + 0xc9, 0xbc, 0xa8, 0x86, 0xcc, 0x38, 0x0e, 0x06, 0x51, 0x1b, 0x37, 0xc1, + 0x0e, 0x2a, 0x58, 0x49, 0xbc, 0x7c, 0xa7, 0xf0, 0xda, 0xd7, 0x74, 0x34, + 0xf5, 0xd8, 0x99, 0x8c, 0x94, 0x86, 0xe3, 0x1e, 0x6b, 0xf5, 0x68, 0xfa, + 0xa6, 0x69, 0x63, 0x22, 0x5a, 0x3c, 0x6f, 0x29, 0xc9, 0x40, 0xc0, 0xbe, + 0x8d, 0xb5, 0xcc, 0x82, 0x6e, 0x9d, 0xd1, 0x1f, 0x13, 0x63, 0xd8, 0x24, + 0x63, 0x38, 0x59, 0xf0, 0x4a, 0x8c, 0x0f, 0x28, 0x8a, 0x77, 0x81, 0xa2, + 0xa0, 0x23, 0x11, 0x59, 0xa9, 0x5a, 0x2d, 0x71, 0x8f, 0x82, 0xa7, 0xbd, + 0x85, 0x26, 0x4d, 0xc2, 0x2f, 0x11, 0xe8, 0xff, 0x96, 0xa1, 0x2d, 0xf2, + 0xd5, 0xf3, 0x1d, 0x54, 0xd0, 0x5f, 0x71, 0x07, 0xaf, 0x22, 0xa0, 0xcd, + 0x78, 0xb3, 0x47, 0xb1, 0x40, 0x3d, 0x6b, 0xfd, 0x10, 0x1b, 0xc6, 0x60, + 0xef, 0x5c, 0x24, 0xa3, 0x1f, 0xee, 0xc0, 0x0b, 0xed, 0x1d, 0x38, 0xc8, + 0xf2, 0x8c, 0xec, 0x5e, 0xd9, 0x70, 0x1a, 0x2b, 0x25, 0xe6, 0xed, 0xa9, + 0x0c, 0xb3, 0x78, 0xe1, 0x91, 0x01, 0x41, 0x2e, 0xfe, 0x7d, 0xbd, 0xfe, + 0xcf, 0x48, 0x6d, 0x2e, 0x05, 0x31, 0x89, 0x24, 0xc4, 0xd7, 0xc4, 0x26, + 0x2f, 0x64, 0x43, 0xa3, 0xdd, 0x56, 0x11, 0x5c, 0x65, 0x76, 0x96, 0xcc, + 0x3c, 0x12, 0x42, 0xf2, 0x6b, 0x20, 0xc2, 0xe6, 0xc3, 0x5c, 0xfa, 0x91, + 0xb1, 0xbd, 0x3b, 0xd3, 0x99, 0xde, 0x59, 0x7a, 0x34, 0x40, 0x56, 0xb0, + 0x88, 0x02, 0x19, 0xc8, 0xf9, 0xf9, 0x8f, 0xe7, 0x60, 0xfb, 0x42, 0x87, + 0x57, 0xb4, 0x42, 0xb4, 0x65, 0x94, 0x0a, 0x5f, 0xdb, 0xf5, 0x32, 0xe9, + 0x49, 0x28, 0xbe, 0xa6, 0x64, 0x0d, 0x6d, 0x08, 0x43, 0x91, 0x16, 0x7a, + 0x6c, 0xa9, 0x02, 0xe4, 0x84, 0x03, 0x39, 0x48, 0x08, 0xcc, 0xcb, 0x56, + 0xad, 0x52, 0x95, 0x9e, 0x9a, 0x2b, 0xf1, 0x6d, 0x3f, 0x4b, 0x02, 0xc6, + 0x52, 0xc7, 0x09, 0x6b, 0x3f, 0xa9, 0x60, 0xe2, 0x19, 0x5d, 0x0a, 0x61, + 0xcd, 0xc8, 0x36, 0xdb, 0x8e, 0x57, 0xd2, 0x11, 0x49, 0x1c, 0x26, 0x58, + 0x04, 0x07, 0x32, 0x2a, 0x34, 0xf0, 0x6a, 0x88, 0xcf, 0x63, 0xb7, 0xef, + 0x7e, 0x93, 0xcc, 0x64, 0x07, 0x14, 0xfa, 0x63, 0x38, 0xdd, 0xc0, 0xf0, + 0xaa, 0x56, 0xa1, 0xed, 0x16, 0xaa, 0x53, 0x8c, 0x99, 0xc0, 0xd4, 0xda, + 0x94, 0x58, 0x13, 0xd9, 0x5f, 0x98, 0x9a, 0xa1, 0x57, 0xbd, 0x89, 0xca, + 0x9d, 0x3e, 0xdf, 0x75, 0x26, 0x29, 0x0f, 0xb2, 0x33, 0x4b, 0x83, 0xb3, + 0x99, 0x1f, 0x06, 0x5d, 0x10, 0xf5, 0x1c, 0x75, 0x97, 0xec, 0x5b, 0x87, + 0xc7, 0xf1, 0xd8, 0xbd, 0x0e, 0x4c, 0x1a, 0xb0, 0x59, 0x3b, 0x27, 0x73, + 0xdc, 0xde, 0xca, 0x0c, 0x2e, 0x1f, 0x42, 0x7f, 0xd8, 0x0f, 0x9b, 0x3f, + 0x49, 0x3f, 0x63, 0x7d, 0x71, 0xe3, 0x77, 0x79, 0xcc, 0x9c, 0xbf, 0xff, + 0x23, 0xa9, 0x74, 0xa2, 0xda, 0xb7, 0xca, 0x86, 0x7f, 0x12, 0xc1, 0x1b, + 0x41, 0x35, 0xb5, 0xc7, 0x10, 0x09, 0xc0, 0xa2, 0x1b, 0x41, 0x31, 0x5e, + 0x6c, 0x35, 0xb5, 0x63, 0x13, 0x19, 0x61, 0x8e, 0xbd, 0x89, 0xf6, 0x0a, + 0xbd, 0x16, 0x15, 0xd8, 0xfa, 0xcc, 0x9f, 0x97, 0x02, 0x8f, 0x1b, 0x34, + 0x40, 0xbc, 0x4a, 0xb1, 0x39, 0x12, 0xf8, 0x66, 0xda, 0x34, 0x03, 0xf2, + 0x5c, 0x33, 0x9c, 0x63, 0x0b, 0xb6, 0x8f, 0xca, 0x81, 0xa2, 0x4a, 0x43, + 0xe7, 0xe7, 0x66, 0x41, 0x45, 0x6b, 0x7c, 0xd1, 0x1d, 0xbc, 0x4f, 0x91, + 0xab, 0x24, 0x0b, 0x9f, 0x60, 0x47, 0x36, 0x04, 0x8b, 0x72, 0xb6, 0x65, + 0x35, 0xfc, 0xbf, 0xc9, 0x26, 0xaf, 0x84, 0x04, 0x30, 0x32, 0x02, 0xc0, + 0x94, 0x98, 0xbc, 0x17, 0x33, 0x99, 0xac, 0xb1, 0x4e, 0xdd, 0xf0, 0x46, + 0x68, 0x6a, 0xac, 0x6d, 0xdb, 0x85, 0xfd, 0xc6, 0x3b, 0xc8, 0x93, 0x89, + 0xbf, 0xd7, 0xd9, 0x94, 0xe4, 0xa4, 0x37, 0xb9, 0x67, 0x52, 0x84, 0xcf, + 0x88, 0xba, 0x01, 0x8b, 0xe4, 0xd4, 0x3e, 0xde, 0x94, 0xa1, 0xa9, 0xd8, + 0x15, 0xb5, 0x6e, 0xa0, 0x62, 0x92, 0x5c, 0xb1, 0x1b, 0xbf, 0x4f, 0xaf, + 0xf5, 0x99, 0x35, 0xce, 0x7d, 0xa9, 0x4b, 0xa8, 0x60, 0x31, 0xf5, 0x0a, + 0x83, 0x58, 0xf5, 0x83, 0xde, 0xb2, 0xfe, 0xf3, 0x12, 0x08, 0x3d, 0xe3, + 0x14, 0x89, 0x17, 0x93, 0x5c, 0x87, 0xe4, 0x89, 0xcb, 0xb7, 0x67, 0x3e, + 0xea, 0x0e, 0x08, 0x57, 0xf1, 0xca, 0xe0, 0x18, 0xd7, 0xae, 0x5f, 0x9e, + 0x62, 0x5c, 0xd7, 0x6a, 0x2f, 0xd6, 0x30, 0x67, 0xfb, 0x5e, 0xed, 0xcf, + 0xa9, 0x88, 0x04, 0x0a, 0xf2, 0x62, 0x50, 0xc5, 0x39, 0xc6, 0xa1, 0x3c, + 0xe4, 0x9a, 0x81, 0x55, 0x96, 0xca, 0x60, 0xb2, 0x53, 0x62, 0xee, 0xa1, + 0x1d, 0xfc, 0xd9, 0x5c, 0x51, 0xbf, 0x55, 0x65, 0x1d, 0x13, 0x2a, 0x13, + 0x58, 0xa3, 0x18, 0x52, 0x6b, 0xb4, 0xae, 0x60, 0x1c, 0x26, 0x3e, 0xb1, + 0x4c, 0xb1, 0x72, 0x1b, 0x8a, 0x4c, 0xaa, 0xb5, 0x5b, 0x8a, 0x3b, 0x2f, + 0x1f, 0xc3, 0x29, 0x41, 0xe6, 0x6d, 0xd7, 0x96, 0x26, 0xdd, 0x37, 0x67, + 0x4f, 0x9d, 0x31, 0xc6, 0x54, 0x51, 0xaa, 0xba, 0x73, 0xae, 0xd2, 0x00, + 0x0b, 0x05, 0x98, 0x73, 0xd6, 0x9c, 0xb4, 0x2e, 0x23, 0xd0, 0xc3, 0xac, + 0x46, 0x6f, 0x3e, 0x05, 0x43, 0xf8, 0x96, 0xa0, 0xe0, 0xfe, 0x17, 0x3f, + 0xfa, 0xc2, 0xc3, 0xf6, 0x1a, 0x46, 0xd0, 0x05, 0x53, 0x0e, 0xea, 0xd8, + 0xba, 0xa3, 0xab, 0xb6, 0x58, 0xd1, 0x40, 0x1c, 0x97, 0x38, 0xd4, 0x77, + 0x58, 0x03, 0xf5, 0x8a, 0xc7, 0x48, 0x19, 0x71, 0x71, 0xb5, 0x4b, 0x08, + 0x85, 0x35, 0x1c, 0xdf, 0xbd, 0xa9, 0xc9, 0xd1, 0x40, 0x62, 0xa3, 0xd6, + 0x3b, 0xa1, 0xf7, 0x4e, 0xc6, 0xfe, 0xc4, 0x07, 0x2f, 0xf5, 0xc9, 0x0c, + 0xb6, 0xa0, 0xb3, 0x25, 0x3e, 0x2a, 0x07, 0xe3, 0x63, 0xe3, 0x9e, 0x8d, + 0x0d, 0x7a, 0x70, 0x1e, 0x65, 0x95, 0x47, 0x37, 0xa8, 0xd2, 0x35, 0x09, + 0x09, 0x70, 0xf5, 0xc9, 0xc9, 0x30, 0x95, 0xd9, 0xf2, 0x5d, 0x10, 0x3c, + 0xc3, 0x66, 0x66, 0xb6, 0xdc, 0x14, 0xf6, 0x91, 0xc2, 0x7b, 0x4b, 0x71, + 0x42, 0xf9, 0x35, 0xe7, 0x08, 0x1e, 0xb6, 0x9a, 0x5c, 0x0e, 0x8b, 0x41, + 0x44, 0x7f, 0xad, 0xca, 0x8a, 0x4b, 0x6a, 0x02, 0x81, 0x96, 0xe7, 0xe1, + 0xb0, 0x5b, 0xaf, 0xf2, 0x17, 0x44, 0x7f, 0xd1, 0x49, 0x77, 0xfd, 0x07, + 0x59, 0x53, 0x8e, 0x51, 0xac, 0x0f, 0x0c, 0xb4, 0xa3, 0xf6, 0x24, 0x16, + 0x47, 0xf3, 0xa4, 0x36, 0x17, 0x3e, 0x01, 0x1e, 0xf1, 0xec, 0x78, 0x4a, + 0xcb, 0xbd, 0x2a, 0xfd, 0x01, 0xdd, 0xa5, 0xad, 0x7b, 0xef, 0x5e, 0x56, + 0xb2, 0x60, 0xb4, 0xf2, 0x27, 0xc8, 0x9b, 0x5b, 0x31, 0x49, 0x54, 0xbc, + 0x69, 0x9b, 0xc6, 0x1a, 0x79, 0xe7, 0xd4, 0x46, 0xc8, 0x50, 0xc3, 0xaa, + 0xfc, 0xb5, 0x28, 0x87, 0x1e, 0xa0, 0x0c, 0xc6, 0x1a, 0xa7, 0x34, 0xd6, + 0xbb, 0x9d, 0x9c, 0x0d, 0x90, 0x6f, 0x1a, 0x3c, 0xdc, 0x3b, 0x95, 0xc4, + 0x38, 0x25, 0x7a, 0xc6, 0x46, 0x82, 0x9f, 0x68, 0xca, 0x6a, 0x63, 0xa7, + 0x99, 0xfe, 0x64, 0xe6, 0x6f, 0x11, 0xcd, 0x2c, 0x76, 0x1e, 0xe6, 0x08, + 0xb8, 0x33, 0x64, 0x43, 0x51, 0xbd, 0x52, 0xf7, 0x05, 0x06, 0xd5, 0xcc, + 0x6a, 0xde, 0x1a, 0xa2, 0xbe, 0xf8, 0x8c, 0x44, 0x5e, 0x2d, 0xc2, 0x28, + 0xcd, 0x9a, 0x53, 0x04, 0x96, 0xcc, 0x1e, 0xbb, 0x96, 0x07, 0xc9, 0x17, + 0x04, 0xf8, 0xd8, 0xd9, 0xdd, 0x35, 0x35, 0x3d, 0x53, 0x30, 0x60, 0xb3, + 0x87, 0x5d, 0xf3, 0xe5, 0xa7, 0x20, 0x30, 0x9d, 0xb0, 0x5b, 0xc4, 0x36, + 0xf7, 0xd7, 0xb6, 0x3e, 0x44, 0x98, 0x99, 0xe7, 0xc3, 0x29, 0xcb, 0x70, + 0xc4, 0x91, 0x8b, 0xfc, 0x63, 0x60, 0x29, 0x95, 0xeb, 0x61, 0x7f, 0xdf, + 0xf7, 0x3a, 0x69, 0x3a, 0xeb, 0xa1, 0x73, 0x1d, 0x13, 0x18, 0x29, 0x2c, + 0x89, 0x82, 0x56, 0x42, 0xe7, 0xa3, 0xba, 0xe9, 0x59, 0x2e, 0xfd, 0xff, + 0xb6, 0xf7, 0xbd, 0x2a, 0xc9, 0xff, 0x4c, 0x63, 0xef, 0x54, 0x63, 0x82, + 0x7c, 0xa5, 0x11, 0x44, 0xc7, 0x68, 0xf5, 0x7b, 0x44, 0x2c, 0xee, 0xab, + 0xa3, 0x84, 0x5a, 0x99, 0x28, 0x98, 0x97, 0x2e, 0x8b, 0x07, 0x09, 0x6c, + 0xea, 0xc1, 0x81, 0x0b, 0xe0, 0xc4, 0xb7, 0xc2, 0x73, 0xbe, 0x8b, 0x72, + 0xf8, 0xc9, 0x8d, 0x50, 0x28, 0xf2, 0x95, 0x54, 0x8a, 0x3b, 0x23, 0x86, + 0xc4, 0xe8, 0xe8, 0xe5, 0x45, 0x0d, 0xdf, 0xa3, 0xe6, 0x00, 0x71, 0xe8, + 0x20, 0xd2, 0x6d, 0x22, 0x23, 0xaf, 0x37, 0x04, 0x55, 0x05, 0x8d, 0xc9, + 0x38, 0x38, 0x12, 0x4c, 0x9f, 0x28, 0x56, 0x14, 0x76, 0xe5, 0x10, 0x54, + 0xd9, 0x68, 0xca, 0xc3, 0x97, 0x9f, 0xd2, 0x25, 0x2c, 0x0d, 0xa0, 0xff, + 0xea, 0xab, 0x61, 0xd2, 0xb2, 0x06, 0xc2, 0x93, 0xfd, 0x5a, 0xfe, 0xe3, + 0x98, 0xbf, 0x37, 0x2e, 0xa5, 0x74, 0x56, 0xd0, 0x7a, 0x5a, 0x23, 0x3b, + 0xd2, 0xa0, 0x1f, 0x4b, 0xeb, 0x7f, 0x5a, 0xc5, 0x51, 0x79, 0xf6, 0x95, + 0x19, 0x50, 0xb1, 0x6a, 0x80, 0xcb, 0xcf, 0x19, 0xa4, 0x67, 0xf4, 0x08, + 0x0f, 0x6a, 0xd9, 0x3f, 0x15, 0x96, 0x2c, 0x6d, 0xd5, 0x69, 0x7a, 0x56, + 0x4d, 0x17, 0xc8, 0xcb, 0xba, 0x9b, 0x6e, 0x65, 0xa2, 0x3d, 0x66, 0xed, + 0xea, 0xe2, 0x54, 0x88, 0x6c, 0xc1, 0x1a, 0x11, 0xde, 0x4e, 0x0c, 0x8a, + 0x42, 0x04, 0xe1, 0x77, 0xc3, 0x0c, 0xff, 0x10, 0x7d, 0x4a, 0x45, 0x3f, + 0xb8, 0x40, 0xf9, 0x75, 0x76, 0x9f, 0x65, 0x42, 0x2f, 0x78, 0x5b, 0x0b, + 0x32, 0xbc, 0x45, 0xfc, 0xd4, 0x29, 0x49, 0x34, 0x76, 0xda, 0x5f, 0xe8, + 0x39, 0x35, 0x9e, 0xba, 0x7f, 0x19, 0x7e, 0x14, 0xe6, 0x71, 0x9c, 0x72, + 0x6a, 0xce, 0xcc, 0xa6, 0x72, 0x73, 0x3f, 0x4e, 0x9b, 0x9e, 0x94, 0x0c, + 0xce, 0x00, 0x15, 0xb4, 0x50, 0xff, 0xcf, 0xcd, 0x78, 0xd3, 0x08, 0x0e, + 0x95, 0x48, 0x24, 0x13, 0x16, 0x54, 0xb4, 0xe0, 0xa9, 0x29, 0xa3, 0x05, + 0x77, 0x2f, 0x5d, 0x47, 0x6a, 0xa5, 0xb0, 0x4e, 0xf3, 0xa9, 0x4a, 0x82, + 0xb9, 0x2c, 0x26, 0x07, 0x9c, 0x33, 0xc6, 0x68, 0xc2, 0xe0, 0xc0, 0x7d, + 0x70, 0x48, 0x74, 0xb9, 0xf5, 0x1e, 0x6c, 0x15, 0x7f, 0xba, 0xe5, 0xa1, + 0xb4, 0x36, 0x41, 0x20, 0xf4, 0x2d, 0x97, 0x27, 0x0b, 0x10, 0x30, 0x57, + 0x7f, 0x38, 0x66, 0xe1, 0xc4, 0xf6, 0xa4, 0xc9, 0x8d, 0xbc, 0x2b, 0x4f, + 0x14, 0xb3, 0xf0, 0x1e, 0x80, 0x70, 0xc0, 0x0f, 0x69, 0x06, 0xe7, 0x95, + 0xd1, 0x53, 0x65, 0x49, 0x1c, 0xa8, 0xfa, 0x9e, 0x2b, 0xcc, 0x33, 0x71, + 0x76, 0xa4, 0x0b, 0x4a, 0xc7, 0xea, 0xa0, 0xfa, 0x1b, 0x2b, 0xfb, 0xa5, + 0x59, 0x06, 0x2a, 0xef, 0x4b, 0xbf, 0x05, 0x4b, 0x87, 0x70, 0x3c, 0xde, + 0xc7, 0xb2, 0x4f, 0xf2, 0x5b, 0x1a, 0xbe, 0xda, 0x04, 0x31, 0x57, 0xff, + 0xf2, 0xa5, 0x43, 0x12, 0xff, 0x8d, 0xf4, 0x99, 0x05, 0xe1, 0x34, 0xa9, + 0xb9, 0x0a, 0xb3, 0x1f, 0x3d, 0x6d, 0x0d, 0xb7, 0xd3, 0x35, 0x0b, 0x04, + 0x44, 0x77, 0x60, 0xc0, 0x96, 0x99, 0x7b, 0xa8, 0x8e, 0x79, 0x4a, 0x96, + 0x24, 0xef, 0xb1, 0xf4, 0x8a, 0x2f, 0x3e, 0x08, 0xf3, 0x3d, 0xf2, 0xfe, + 0x5f, 0x0a, 0xf7, 0x0a, 0xf5, 0xd8, 0xf2, 0xa0, 0x1b, 0xe7, 0x9e, 0xc9, + 0x0b, 0xcf, 0x58, 0x97, 0x92, 0x90, 0xad, 0x3d, 0xfc, 0x42, 0xc1, 0x7f, + 0x39, 0xe8, 0xd1, 0x35, 0x14, 0x8a, 0xb3, 0x77, 0xb1, 0xa9, 0xdb, 0xb4, + 0x3a, 0x3d, 0xeb, 0x59, 0x0b, 0x5b, 0x3a, 0x63, 0x54, 0x70, 0xda, 0xf0, + 0xf0, 0xb9, 0xe6, 0x07, 0x69, 0x27, 0x9d, 0xc6, 0xb6, 0x00, 0x2d, 0xd6, + 0xc7, 0xd7, 0x2e, 0xf8, 0x9c, 0xfe, 0x4c, 0xfb, 0xc0, 0x7b, 0xbf, 0xa2, + 0x25, 0xb8, 0x2a, 0x5c, 0x06, 0xca, 0x12, 0x2c, 0x96, 0xa4, 0x27, 0xa6, + 0x73, 0x0b, 0xb8, 0x42, 0x93, 0x51, 0x87, 0xfe, 0xe6, 0x8f, 0xca, 0x00, + 0x53, 0xdc, 0xc0, 0x38, 0x03, 0x9e, 0x66, 0x13, 0x84, 0x68, 0xe7, 0x04, + 0x93, 0x79, 0x0c, 0x3e, 0x4c, 0x90, 0xe2, 0xf7, 0x81, 0x15, 0x49, 0x05, + 0xe1, 0x8f, 0xe6, 0xfc, 0xc8, 0x40, 0xae, 0x3d, 0x7a, 0x16, 0xec, 0xc6, + 0x39, 0xa5, 0x04, 0x95, 0x35, 0xac, 0xdd, 0x0d, 0x19, 0xd6, 0xa9, 0xd9, + 0xd2, 0x53, 0x71, 0x31, 0x38, 0xa2, 0xf1, 0x9c, 0x13, 0x2c, 0x8c, 0x21, + 0x9c, 0x3a, 0x1b, 0xf2, 0xd8, 0x4c, 0xeb, 0xe9, 0x8b, 0x27, 0x52, 0xd3, + 0x6c, 0x01, 0xc0, 0x60, 0x32, 0x8c, 0x6e, 0xfb, 0xd6, 0xd6, 0x1b, 0xc6, + 0x93, 0xff, 0xdc, 0xdb, 0x38, 0xf5, 0x0e, 0xd5, 0x15, 0xcd, 0x65, 0x76, + 0x78, 0x42, 0x13, 0x37, 0x6b, 0x2e, 0xe8, 0xe2, 0x54, 0x4d, 0x45, 0x34, + 0x73, 0x1b, 0x61, 0x35, 0x2c, 0xf7, 0x20, 0x3e, 0xe9, 0x7c, 0xf0, 0xf3, + 0xba, 0x41, 0xfc, 0x49, 0xe4, 0x5d, 0xd4, 0xb8, 0x07, 0x15, 0x7b, 0x16, + 0xc7, 0x7f, 0x78, 0xef, 0xd6, 0x53, 0x3f, 0xe4, 0xa6, 0x33, 0xcf, 0xcc, + 0x78, 0x53, 0x0c, 0x59, 0xf7, 0x28, 0xa5, 0x83, 0x2b, 0x5a, 0xd3, 0xd6, + 0xb7, 0xb2, 0xd1, 0x73, 0x63, 0xa9, 0xad, 0x16, 0xf2, 0xed, 0x48, 0x6e, + 0x88, 0x22, 0xbd, 0x16, 0x9d, 0x6a, 0xc2, 0x48, 0x83, 0xdf, 0x40, 0xb7, + 0x0a, 0x50, 0x23, 0x3d, 0x58, 0x50, 0x00, 0x02, 0x04, 0xd2, 0x31, 0x72, + 0x28, 0x7b, 0x10, 0x96, 0xe0, 0xe7, 0x3f, 0xe0, 0xd0, 0x61, 0x70, 0x5c, + 0x0a, 0xdb, 0xc0, 0x7b, 0xea, 0xef, 0xba, 0xc0, 0x90, 0xe0, 0xf9, 0x0e, + 0x83, 0x8c, 0x3b, 0x05, 0x2b, 0xb6, 0xcb, 0xbb, 0x37, 0xa1, 0xd3, 0x28, + 0x02, 0x40, 0xe3, 0x76, 0xbf, 0x27, 0x0b, 0x4f, 0x82, 0xb9, 0x22, 0xee, + 0x0b, 0x3a, 0xcb, 0xcc, 0x56, 0x13, 0x51, 0xb8, 0xb6, 0x2d, 0xd3, 0x6c, + 0x96, 0x10, 0xd9, 0x51, 0x24, 0x7b, 0x2b, 0xb8, 0x7b, 0xbd, 0x8d, 0xd9, + 0xf2, 0x50, 0x61, 0xbb, 0x0c, 0xb7, 0x71, 0x65, 0x3a, 0x25, 0x18, 0x09, + 0x1a, 0x9d, 0x41, 0xf4, 0xdb, 0x5a, 0x1c, 0x61, 0x0a, 0xbb, 0x43, 0x27, + 0x8a, 0xa8, 0x83, 0x60, 0x8c, 0x5d, 0x4c, 0x9b, 0xa9, 0xe5, 0xa7, 0x67, + 0x99, 0x98, 0xdc, 0x7a, 0x3a, 0x55, 0x0d, 0x25, 0x69, 0x47, 0x21, 0xb1, + 0xd7, 0x0c, 0x0c, 0x43, 0x58, 0xc9, 0xbf, 0x74, 0x91, 0x1b, 0x2b, 0xf3, + 0x29, 0x8d, 0x10, 0x41, 0xaf, 0xdd, 0x42, 0x0a, 0x71, 0xe3, 0xb8, 0x4d, + 0x3a, 0xf3, 0x9c, 0x5a, 0x46, 0x4e, 0x70, 0xbe, 0xdb, 0x0d, 0x03, 0xee, + 0xcb, 0xfb, 0x61, 0x45, 0xbd, 0x25, 0xb4, 0x72, 0xd1, 0x51, 0x03, 0x19, + 0x82, 0x53, 0x83, 0x18, 0xab, 0xa3, 0x6c, 0x9e, 0xa2, 0xe9, 0x15, 0xb1, + 0x74, 0x61, 0xa1, 0xaf, 0x09, 0x4b, 0x4a, 0x34, 0x9b, 0xd0, 0xd2, 0x80, + 0x43, 0xd9, 0x90, 0x53, 0x71, 0x38, 0xb9, 0x80, 0x58, 0x1b, 0x9f, 0x9e, + 0xfe, 0x07, 0x1b, 0x33, 0x24, 0xb2, 0x58, 0x7f, 0x01, 0xbe, 0xe8, 0x25, + 0x53, 0x08, 0x06, 0x77, 0x7d, 0x5a, 0x16, 0x83, 0x67, 0x91, 0x0b, 0xa2, + 0xd2, 0x1e, 0x5f, 0x9c, 0x39, 0xda, 0x57, 0xbc, 0x67, 0xc5, 0x39, 0xbe, + 0xb9, 0x73, 0x03, 0x19, 0x97, 0x34, 0x4f, 0x1e, 0x6b, 0x4d, 0x87, 0xef, + 0x79, 0x4f, 0xd1, 0xdd, 0x80, 0x13, 0xbe, 0x3b, 0x0f, 0xea, 0x77, 0x9a, + 0x1a, 0x46, 0x63, 0xc5, 0x2f, 0x93, 0xfe, 0x18, 0x71, 0xfb, 0x70, 0xbf, + 0x85, 0x3b, 0x3e, 0x54, 0xe6, 0xf8, 0xe0, 0xb9, 0xd0, 0x9d, 0xf5, 0x2b, + 0x12, 0x22, 0x39, 0x6a, 0x8d, 0x13, 0xa1, 0x3a, 0x95, 0xd0, 0xe7, 0x07, + 0xa4, 0x2c, 0x33, 0xba, 0x43, 0x1d, 0xd8, 0xb5, 0xd0, 0x8e, 0x6c, 0x85, + 0x6f, 0xf8, 0x8f, 0xd3, 0x72, 0x65, 0xc1, 0xff, 0x8f, 0xf6, 0xb5, 0x19, + 0x59, 0x34, 0xf9, 0xe8, 0xdb, 0xf3, 0x10, 0x68, 0xbd, 0xd5, 0x59, 0xf7, + 0xe5, 0xf2, 0x84, 0x98, 0x8d, 0xd6, 0x6f, 0xcc, 0xde, 0xc5, 0xee, 0xf7, + 0x16, 0xca, 0xec, 0xc4, 0x00, 0x89, 0x2e, 0x0d, 0x0d, 0xb6, 0xa8, 0xe0, + 0x9a, 0xb0, 0xe5, 0x8e, 0xb6, 0x64, 0x47, 0x7d, 0x01, 0x59, 0x8a, 0x90, + 0xa6, 0x9b, 0x2b, 0x63, 0xad, 0x70, 0xc8, 0x07, 0x36, 0x3e, 0xa9, 0x8f, + 0xd9, 0xc2, 0xf7, 0x4b, 0xec, 0x95, 0x53, 0xec, 0x6b, 0x2d, 0x1f, 0xb5, + 0x91, 0xbf, 0x9f, 0xc5, 0x85, 0x61, 0x3a, 0xc7, 0x5c, 0x15, 0x2a, 0x0b, + 0x4b, 0x3c, 0x38, 0x6d, 0xc9, 0x2c, 0x91, 0x11, 0xc6, 0x6b, 0x44, 0x71, + 0x9f, 0x89, 0xd5, 0xde, 0x27, 0x99, 0x81, 0xa2, 0x59, 0x8b, 0x57, 0x97, + 0x83, 0x46, 0x33, 0xe1, 0x8c, 0xdf, 0xcf, 0x5b, 0x6b, 0xb3, 0x0e, 0x17, + 0x1a, 0xb8, 0x7d, 0x6e, 0x71, 0xe5, 0xc8, 0x4c, 0xa9, 0xe2, 0x52, 0x81, + 0xf6, 0x2f, 0x3a, 0xef, 0x5a, 0x1b, 0x6b, 0x7b, 0x61, 0x51, 0xcb, 0xd5, + 0x7b, 0x5f, 0xf0, 0x1c, 0xb8, 0xeb, 0x9a, 0xe4, 0x0a, 0x6e, 0x53, 0x59, + 0x2e, 0x2d, 0x78, 0x27, 0xb7, 0x47, 0x35, 0x1a, 0x01, 0x25, 0x0a, 0xcc, + 0x67, 0xae, 0xda, 0xaf, 0xfe, 0x22, 0x63, 0xe8, 0xa2, 0x1c, 0x34, 0xe6, + 0x6b, 0x73, 0xcf, 0x6f, 0x3e, 0x0a, 0x4a, 0x36, 0xbc, 0xda, 0x43, 0xbc, + 0x5e, 0x9c, 0x91, 0xe4, 0x8b, 0x34, 0x2e, 0x09, 0x87, 0x69, 0x96, 0x93, + 0xb4, 0xff, 0x97, 0xbc, 0x4e, 0xd6, 0xa2, 0xb4, 0x16, 0x78, 0x7c, 0x62, + 0xd0, 0x78, 0x3f, 0x37, 0xdb, 0xf2, 0x92, 0xad, 0x9b, 0x51, 0x77, 0x08, + 0x19, 0xd2, 0x09, 0x12, 0xf7, 0x52, 0xe8, 0xc8, 0xb2, 0xfb, 0x6f, 0xcd, + 0x05, 0x5b, 0xd2, 0x8e, 0x0d, 0x6e, 0x0c, 0x16, 0x5b, 0x8a, 0xc2, 0x09, + 0x13, 0x3b, 0x69, 0x85, 0xbd, 0xc0, 0xcc, 0x2b, 0x48, 0x65, 0xa7, 0xc1, + 0xc3, 0xe0, 0xea, 0x14, 0x67, 0x6f, 0xa4, 0xb8, 0xc6, 0xf0, 0x12, 0x3e, + 0x96, 0x0d, 0x23, 0x2b, 0x37, 0x87, 0x8d, 0xc8, 0xf7, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x0b, 0x13, 0x1a, 0x1d, 0x25 }; return dilithium_param_vfy_test(WC_ML_DSA_65, ml_dsa_65_pub_key, @@ -41603,731 +42739,610 @@ static wc_test_ret_t dilithium_param_65_vfy_test(void) static wc_test_ret_t dilithium_param_87_vfy_test(void) { WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_87_pub_key[] = { - 0xef, 0x49, 0x79, 0x47, 0x15, 0xc4, 0x8a, 0xa9, 0x74, 0x2a, - 0xf0, 0x36, 0x94, 0x5c, 0x91, 0x1c, 0x5d, 0xff, 0x2c, 0x83, - 0xf2, 0x8b, 0x04, 0xfc, 0x5d, 0x64, 0xbd, 0x49, 0x73, 0xcd, - 0xcc, 0x99, 0x50, 0x5f, 0x2b, 0x16, 0x3a, 0xbb, 0x98, 0xc0, - 0xa7, 0x69, 0x0e, 0x95, 0x99, 0x0b, 0xa2, 0x6c, 0xfe, 0x6c, - 0xdb, 0xc8, 0xa7, 0x09, 0x46, 0x6c, 0x90, 0x50, 0xa4, 0x75, - 0x30, 0xf7, 0x90, 0xac, 0x31, 0xb6, 0xdd, 0x21, 0xaf, 0xc6, - 0xf9, 0xfe, 0xee, 0xc6, 0x5b, 0xa8, 0x8f, 0x0a, 0x2e, 0xd0, - 0x42, 0xab, 0xa8, 0x3c, 0x8d, 0xbf, 0xf7, 0x44, 0xbd, 0x0d, - 0xcf, 0xf4, 0x68, 0xfc, 0x16, 0x67, 0xf7, 0x39, 0x48, 0x5f, - 0x56, 0xd1, 0xe7, 0x1f, 0x49, 0x80, 0x50, 0xbe, 0x54, 0xd1, - 0xb7, 0xc9, 0xd2, 0x32, 0xc7, 0x08, 0x8c, 0xde, 0x2c, 0x31, - 0xf6, 0x1d, 0xc7, 0xac, 0xb3, 0x79, 0xd7, 0x4b, 0x1b, 0x23, - 0x89, 0x0a, 0xdc, 0x8e, 0x44, 0x41, 0x14, 0x28, 0x99, 0x13, - 0xb3, 0x26, 0xa6, 0x0e, 0x83, 0x60, 0xaa, 0x8d, 0x7c, 0x23, - 0x13, 0xba, 0x6c, 0x28, 0x90, 0x56, 0x84, 0xa1, 0x23, 0x8b, - 0x81, 0x20, 0x97, 0x7c, 0x66, 0x3f, 0xed, 0x5d, 0xd0, 0xe4, - 0x5d, 0xee, 0x46, 0xbc, 0x4b, 0x3c, 0x03, 0xb5, 0xbc, 0x4d, - 0x8d, 0x37, 0xa3, 0x56, 0x4b, 0x33, 0xad, 0xef, 0xd4, 0xb6, - 0xec, 0xdb, 0x04, 0x9a, 0x19, 0x58, 0x57, 0xd8, 0x00, 0x3a, - 0x92, 0x61, 0x0c, 0x0b, 0xc8, 0x52, 0xe5, 0x04, 0x02, 0x9a, - 0x00, 0x7e, 0xec, 0x7e, 0x94, 0xaa, 0xef, 0x2d, 0x7f, 0xb6, - 0x2e, 0x7c, 0xb0, 0x73, 0xa2, 0x20, 0xc0, 0x07, 0x30, 0x41, - 0x50, 0x20, 0x14, 0x18, 0x21, 0x5e, 0x2a, 0x6f, 0x70, 0x21, - 0xd6, 0x97, 0x13, 0xb9, 0xc1, 0x9e, 0x90, 0x67, 0xcc, 0x55, - 0x8a, 0xec, 0xec, 0x0a, 0x1e, 0x90, 0xdc, 0x3f, 0xb0, 0x4d, - 0xd1, 0x18, 0xea, 0x4f, 0xcb, 0x5d, 0x15, 0x4c, 0xb8, 0x35, - 0x9b, 0x34, 0x24, 0x30, 0x06, 0x53, 0x17, 0xf0, 0xbe, 0x27, - 0x36, 0xb3, 0x04, 0x6a, 0xbd, 0xbf, 0xa7, 0x39, 0xee, 0xa9, - 0x8f, 0x0e, 0x98, 0xc5, 0xf5, 0x9f, 0x46, 0x25, 0x93, 0xc9, - 0xf2, 0xf6, 0x2b, 0x8e, 0x92, 0x06, 0x01, 0x3d, 0x81, 0x18, - 0xf2, 0xec, 0xf1, 0x05, 0x4c, 0xad, 0x4b, 0xcb, 0x98, 0xa4, - 0xb5, 0x61, 0x20, 0xda, 0x81, 0xa1, 0xfb, 0x92, 0x4c, 0xaf, - 0x87, 0x6f, 0x6e, 0xd2, 0x57, 0xec, 0xcd, 0x94, 0xb3, 0x79, - 0xbf, 0x59, 0x88, 0x17, 0x81, 0xce, 0x8a, 0x57, 0xce, 0x57, - 0xae, 0x3e, 0x82, 0x81, 0x2f, 0x83, 0x61, 0xd8, 0xf9, 0x68, - 0x21, 0xe7, 0x72, 0x5b, 0xd6, 0x80, 0x55, 0x68, 0x5d, 0x67, - 0x15, 0x0c, 0x8b, 0xdc, 0x4f, 0xc3, 0x89, 0x36, 0x3c, 0xac, - 0xaf, 0x16, 0x5e, 0x1c, 0xfa, 0x68, 0x74, 0x6a, 0xab, 0x68, - 0xd8, 0x59, 0x96, 0x2d, 0x33, 0x62, 0xe4, 0xbd, 0xb3, 0xb7, - 0x4d, 0x88, 0x35, 0xb8, 0xed, 0xb2, 0x16, 0x85, 0x97, 0x08, - 0x71, 0x71, 0x39, 0x7e, 0x0c, 0x53, 0x16, 0xda, 0x38, 0xe5, - 0x28, 0x09, 0x9c, 0xd9, 0x46, 0xec, 0x68, 0xda, 0x8d, 0xd0, - 0xad, 0xb2, 0x79, 0x28, 0x3b, 0x1e, 0x12, 0xc9, 0xdf, 0xa9, - 0x6d, 0x3d, 0x29, 0x99, 0x2f, 0x53, 0xc2, 0xd0, 0xf9, 0x88, - 0x26, 0x94, 0x47, 0xaf, 0xf6, 0x96, 0xf3, 0xe1, 0x11, 0xa6, - 0x82, 0x3d, 0x43, 0x3f, 0x1f, 0xbc, 0xf6, 0x98, 0xbe, 0xff, - 0x06, 0x86, 0x61, 0x27, 0xdc, 0x91, 0x54, 0xd4, 0xfc, 0x68, - 0x83, 0xe8, 0x35, 0x3e, 0xee, 0x94, 0x59, 0x28, 0x2f, 0xde, - 0xdd, 0x03, 0x60, 0x66, 0xc1, 0x49, 0x57, 0xdd, 0xbc, 0xd5, - 0x0a, 0x67, 0x34, 0xf1, 0xa6, 0x0a, 0x57, 0x94, 0x65, 0x02, - 0x2c, 0x52, 0x43, 0x70, 0x3b, 0xc1, 0x9a, 0xff, 0xda, 0x6f, - 0xb9, 0x54, 0x47, 0x01, 0xda, 0x27, 0xe4, 0x48, 0x4a, 0x90, - 0x9f, 0xb5, 0xc3, 0xee, 0x0e, 0x09, 0x57, 0xfe, 0x48, 0x51, - 0x08, 0x34, 0x5e, 0x8f, 0x16, 0xc9, 0x0b, 0x74, 0xd9, 0x7d, - 0x22, 0x3f, 0xd6, 0xb7, 0x5d, 0xd6, 0x76, 0x00, 0x8d, 0x4e, - 0x78, 0x73, 0x86, 0xd6, 0xdb, 0x2a, 0x65, 0xab, 0xdf, 0xb0, - 0xea, 0x11, 0xad, 0xdf, 0xba, 0x43, 0xdb, 0xa8, 0x0a, 0xfb, - 0x04, 0x38, 0x81, 0x2b, 0xa3, 0x29, 0xfc, 0x95, 0x73, 0x9a, - 0x0c, 0x6c, 0x9e, 0xcd, 0xdc, 0xcf, 0x0a, 0x0c, 0x18, 0x41, - 0x6f, 0x1d, 0xa3, 0xf6, 0x12, 0x4c, 0x13, 0xf2, 0x02, 0xc6, - 0x50, 0x99, 0x86, 0x73, 0xa7, 0xf9, 0x7e, 0x84, 0x7f, 0x4c, - 0x00, 0xce, 0x2e, 0x21, 0x76, 0x8e, 0x17, 0x7a, 0x87, 0x6f, - 0x81, 0xe6, 0xc0, 0x52, 0xa5, 0xa0, 0x3c, 0x54, 0x3c, 0xec, - 0xb0, 0x9d, 0x1c, 0x3b, 0xec, 0xe5, 0x4e, 0x4a, 0x37, 0xe7, - 0xd5, 0xa9, 0x07, 0x87, 0x23, 0x28, 0x5d, 0x3d, 0x22, 0x02, - 0x79, 0x40, 0x3f, 0x2d, 0x40, 0xc9, 0xe5, 0xa6, 0x9b, 0xa8, - 0xb8, 0x76, 0xf6, 0x77, 0x5b, 0x8d, 0x72, 0x96, 0x3e, 0x13, - 0xbf, 0x76, 0xfa, 0x7b, 0xb7, 0x82, 0x5f, 0xe7, 0x9d, 0x54, - 0x0e, 0x05, 0x1a, 0x9f, 0xa4, 0x42, 0xa5, 0xb4, 0x93, 0x23, - 0x06, 0x59, 0x43, 0xa8, 0xe8, 0x5c, 0xfc, 0x18, 0x97, 0xdb, - 0xad, 0x9a, 0x80, 0x0a, 0xf2, 0x20, 0x50, 0xac, 0xc1, 0x13, - 0x3e, 0x98, 0x09, 0xde, 0xf2, 0x70, 0x9e, 0x14, 0xc2, 0x5c, - 0xec, 0x65, 0x07, 0x0b, 0xfa, 0x02, 0x5c, 0xf8, 0x71, 0xaa, - 0x9b, 0x45, 0x62, 0xe2, 0x27, 0xaf, 0x77, 0xf8, 0xe3, 0xeb, - 0x7b, 0x24, 0x7b, 0x3c, 0x67, 0xc2, 0x6d, 0x6e, 0x17, 0xae, - 0x6e, 0x86, 0x6f, 0x98, 0xc9, 0xac, 0x13, 0x9f, 0x87, 0x64, - 0x3d, 0x4d, 0x6f, 0xa0, 0xb3, 0x39, 0xc6, 0x68, 0x1b, 0xa7, - 0xeb, 0x3e, 0x0f, 0x6b, 0xc7, 0xa4, 0xe2, 0x20, 0x27, 0x75, - 0x3f, 0x09, 0x16, 0xff, 0x1a, 0xcc, 0xa7, 0xc4, 0x6d, 0xc2, - 0xfc, 0xc3, 0x0b, 0x37, 0x63, 0xff, 0x9b, 0x10, 0xe6, 0x00, - 0xf7, 0x18, 0x43, 0x9f, 0x07, 0x50, 0x31, 0x51, 0xd4, 0xfd, - 0xad, 0xa2, 0x0f, 0x77, 0xda, 0x41, 0xc1, 0x0a, 0x6f, 0x86, - 0xd7, 0xdc, 0x8a, 0x52, 0xd6, 0xa1, 0x27, 0xdb, 0x14, 0x67, - 0x26, 0x91, 0xb3, 0xcd, 0x01, 0x5f, 0x60, 0xa1, 0x7f, 0x43, - 0x15, 0x1a, 0x82, 0x0f, 0xd3, 0x66, 0x5f, 0x60, 0x57, 0x2f, - 0xb2, 0x8c, 0x27, 0x2a, 0x9d, 0x1b, 0xf9, 0xf2, 0x59, 0x20, - 0x39, 0xd9, 0xc5, 0xaf, 0xf2, 0x36, 0x8c, 0x58, 0x00, 0x1b, - 0xd0, 0xc5, 0x8e, 0x1a, 0x49, 0xa8, 0x60, 0xbe, 0xd1, 0xd7, - 0x2a, 0xb0, 0xc2, 0xab, 0x58, 0x8a, 0x7a, 0xa9, 0x41, 0x68, - 0x70, 0xbd, 0xea, 0x73, 0xa5, 0x03, 0x11, 0xb2, 0x27, 0xd9, - 0xcd, 0xf5, 0x09, 0xe8, 0x1c, 0xe2, 0x4f, 0x50, 0x6a, 0x84, - 0x34, 0x62, 0x2e, 0x36, 0xaa, 0x4c, 0xc1, 0x83, 0x78, 0x98, - 0x35, 0x7a, 0x27, 0x7e, 0xfe, 0xf1, 0x6f, 0x59, 0x27, 0x35, - 0x73, 0xce, 0x74, 0xaa, 0xb4, 0x72, 0x82, 0xa8, 0xe2, 0x81, - 0x7a, 0x6b, 0xca, 0x33, 0xa5, 0xda, 0xa2, 0x63, 0xca, 0x2e, - 0x90, 0x03, 0x32, 0xec, 0x63, 0xdb, 0x52, 0x7b, 0x16, 0xfc, - 0x01, 0x2d, 0x30, 0x12, 0x1e, 0xf9, 0xa3, 0x72, 0x21, 0x3c, - 0x75, 0x0c, 0x61, 0x9c, 0x7e, 0x73, 0x04, 0x71, 0x41, 0x45, - 0x5d, 0x7f, 0x49, 0x1c, 0x09, 0x08, 0xa4, 0xec, 0x2f, 0xfd, - 0xc4, 0xfb, 0x59, 0x6a, 0x27, 0x7a, 0xd4, 0xfc, 0x5f, 0x20, - 0x04, 0x34, 0x7d, 0x08, 0xed, 0x82, 0x5a, 0x90, 0xe1, 0xab, - 0xfd, 0x35, 0x3a, 0x8d, 0xbb, 0x0a, 0x9d, 0x73, 0xff, 0x69, - 0xe5, 0xe9, 0x09, 0x55, 0x14, 0xd9, 0x7b, 0x6f, 0x0d, 0x99, - 0xd2, 0x7e, 0x71, 0xf8, 0x4f, 0x72, 0x2f, 0xbb, 0xc6, 0xc4, - 0x36, 0xc9, 0x01, 0xd3, 0x9b, 0x94, 0xab, 0x41, 0x0f, 0x4a, - 0x61, 0x5c, 0x68, 0xe5, 0xd7, 0x0d, 0x94, 0xaa, 0xee, 0xba, - 0x95, 0xcb, 0x8c, 0x0e, 0x85, 0x3a, 0x02, 0x6b, 0x95, 0x50, - 0xfd, 0x02, 0xfd, 0xa4, 0x58, 0x29, 0x78, 0x4f, 0xd0, 0xae, - 0x66, 0xd6, 0x5c, 0xe7, 0x45, 0xfe, 0x98, 0xb0, 0xa3, 0xe2, - 0x87, 0xc0, 0xd2, 0x81, 0x08, 0xf1, 0xf1, 0xe7, 0xda, 0x62, - 0x9e, 0xa0, 0x34, 0x86, 0xeb, 0xa1, 0x6e, 0x4a, 0x26, 0x8e, - 0x39, 0x0c, 0x51, 0x10, 0x33, 0x11, 0x87, 0xf8, 0x79, 0x3c, - 0x49, 0x7a, 0x8b, 0xce, 0xc1, 0x0a, 0x0e, 0xe1, 0xd5, 0x2a, - 0xac, 0xf0, 0x3a, 0x1d, 0x6a, 0x6a, 0xe5, 0xe1, 0x81, 0x70, - 0xad, 0xaf, 0x15, 0x4c, 0x2a, 0x70, 0x2a, 0x6b, 0x22, 0x0d, - 0x30, 0xe7, 0x56, 0xed, 0x2d, 0x4b, 0x85, 0x17, 0x49, 0x72, - 0x3a, 0x1b, 0x6f, 0x57, 0x1c, 0xf7, 0x72, 0x9e, 0x20, 0xdb, - 0x57, 0x1c, 0xfb, 0x36, 0x50, 0x52, 0xec, 0x5b, 0xd6, 0x6a, - 0x1b, 0xf8, 0x74, 0xad, 0xe6, 0x00, 0x74, 0x04, 0xc5, 0x99, - 0x83, 0xe4, 0x5a, 0x0c, 0xc3, 0xe8, 0x6d, 0x3a, 0xd7, 0x3c, - 0x3c, 0xc0, 0x1a, 0x28, 0xb3, 0x29, 0x7a, 0x10, 0x9e, 0x39, - 0x66, 0x5b, 0xc1, 0x38, 0xac, 0x21, 0x4e, 0xcd, 0x01, 0xf2, - 0xf6, 0x30, 0x2c, 0x2b, 0xb6, 0xbf, 0xf5, 0xea, 0x61, 0xaf, - 0x0c, 0xa6, 0x01, 0x11, 0x15, 0x19, 0x09, 0x8c, 0x7e, 0x69, - 0xdf, 0x3b, 0xea, 0xd3, 0x0a, 0x3a, 0xd7, 0xbd, 0xe1, 0x17, - 0xaf, 0x92, 0x3c, 0xf5, 0xfe, 0x35, 0xd6, 0xcf, 0x07, 0xa6, - 0xf7, 0xe9, 0xc1, 0x99, 0xed, 0x80, 0xe3, 0x12, 0xd5, 0x4b, - 0xb9, 0xdf, 0xaf, 0x4e, 0x52, 0xad, 0x8e, 0x66, 0x87, 0xe5, - 0x2c, 0xd0, 0x45, 0x70, 0xd9, 0x78, 0x8f, 0x4b, 0xf4, 0xe1, - 0xf1, 0x22, 0xf2, 0xe3, 0xed, 0x1f, 0xeb, 0xe9, 0x70, 0x31, - 0x4c, 0x65, 0x5f, 0x55, 0xee, 0x5d, 0xaa, 0x83, 0x87, 0x76, - 0xbe, 0x11, 0xae, 0xd7, 0xf2, 0xfb, 0x43, 0xe7, 0x17, 0x81, - 0x33, 0x15, 0x47, 0xa0, 0xf3, 0x8e, 0x84, 0x57, 0xff, 0x35, - 0x9e, 0x4a, 0x8a, 0xab, 0x50, 0x3a, 0x45, 0xe0, 0xc3, 0x73, - 0xca, 0x77, 0x61, 0x68, 0x38, 0xd0, 0xa3, 0x5f, 0x03, 0x8d, - 0x41, 0xc2, 0xd3, 0x4a, 0x17, 0xe0, 0xa8, 0xaa, 0x00, 0xf3, - 0xf2, 0x5b, 0xa8, 0xe1, 0x06, 0xa6, 0x2b, 0xdb, 0xe1, 0x74, - 0xbd, 0xc4, 0xd2, 0x2b, 0x55, 0x9a, 0xb0, 0xf8, 0x35, 0xd8, - 0x6b, 0xec, 0xdb, 0xc5, 0xf4, 0x6c, 0x40, 0x90, 0x6a, 0x68, - 0xc9, 0xb5, 0xcb, 0xbb, 0xd0, 0xb0, 0xbc, 0x9f, 0xb9, 0xaa, - 0x50, 0x14, 0x93, 0x3b, 0x9f, 0x25, 0xcb, 0x40, 0xb8, 0x08, - 0xcc, 0x13, 0xe5, 0xdc, 0x3f, 0x84, 0x96, 0xe0, 0x73, 0x7b, - 0x7d, 0x9e, 0x41, 0x92, 0x5d, 0xcc, 0xa4, 0xea, 0x4f, 0x93, - 0x0c, 0x40, 0x2e, 0x42, 0x8a, 0xe9, 0xb9, 0x12, 0x74, 0xbb, - 0x79, 0x7c, 0xb0, 0x37, 0x20, 0xb6, 0xaf, 0x43, 0x3a, 0x88, - 0x59, 0x7c, 0x68, 0x28, 0x5f, 0x98, 0xc2, 0xf0, 0x2a, 0xbc, - 0xa1, 0x61, 0x88, 0x1f, 0x43, 0xbc, 0x42, 0x8f, 0x43, 0xf3, - 0x7e, 0x16, 0x96, 0xfa, 0x92, 0x70, 0xaf, 0x3c, 0x9f, 0x4b, - 0xd9, 0x60, 0xe9, 0xf6, 0x2e, 0x84, 0xda, 0x88, 0x31, 0x34, - 0xa6, 0x85, 0x10, 0x05, 0xef, 0x40, 0xa8, 0xa5, 0x4f, 0x92, - 0x59, 0xf7, 0xe0, 0xc4, 0x2b, 0x12, 0x17, 0x71, 0xbe, 0x8c, - 0x4a, 0x02, 0xfe, 0x12, 0xb6, 0x3b, 0x85, 0x75, 0x37, 0xf3, - 0x73, 0x2d, 0x9c, 0x00, 0x5d, 0x80, 0xad, 0x20, 0x2f, 0x5a, - 0x0b, 0x17, 0x7e, 0x67, 0x72, 0x24, 0x5a, 0xb9, 0xf3, 0xb1, - 0x33, 0xa4, 0x57, 0x1d, 0x49, 0x72, 0x2c, 0x7f, 0x47, 0x15, - 0x07, 0xe0, 0x45, 0x14, 0xdd, 0x77, 0x86, 0x6d, 0x03, 0xbe, - 0x57, 0xd0, 0xaa, 0x18, 0xa6, 0xdd, 0x94, 0x18, 0x3f, 0x8a, - 0xf3, 0xb5, 0xd7, 0x5a, 0xec, 0xc8, 0x79, 0x7f, 0x51, 0x61, - 0x3c, 0x9b, 0xb2, 0x9b, 0xf3, 0xb4, 0x35, 0xd1, 0x38, 0xbf, - 0x37, 0xce, 0x54, 0xd1, 0xf8, 0xb6, 0x45, 0xeb, 0x52, 0x0d, - 0x9a, 0x09, 0x58, 0x0d, 0x2c, 0x0b, 0xb1, 0xf2, 0x30, 0x3a, - 0x95, 0xc1, 0x13, 0x91, 0xd2, 0x9f, 0x8d, 0x8d, 0xd0, 0x38, - 0x3e, 0x4c, 0xae, 0x4a, 0x55, 0xa7, 0x42, 0x11, 0x83, 0xc4, - 0x70, 0xf0, 0x2b, 0x68, 0x9e, 0x07, 0xad, 0xb7, 0x83, 0xc6, - 0x53, 0x3c, 0xfb, 0x0a, 0x5d, 0x24, 0xdc, 0xe1, 0x55, 0x72, - 0xcf, 0xce, 0x3e, 0xc8, 0xd0, 0x57, 0x8a, 0x82, 0x5e, 0x78, - 0x2b, 0x80, 0xc5, 0xb9, 0x09, 0x46, 0xf8, 0x90, 0x39, 0x52, - 0xa9, 0xce, 0x3f, 0x3d, 0x41, 0x3b, 0x28, 0x45, 0xa3, 0xb3, - 0x21, 0xc2, 0xcd, 0x14, 0x49, 0x41, 0x6c, 0x38, 0xda, 0x1b, - 0x5f, 0x16, 0x49, 0xf9, 0x65, 0x00, 0x4e, 0xb4, 0x20, 0x55, - 0x70, 0xe8, 0x58, 0x1a, 0x18, 0xbf, 0x41, 0xef, 0x31, 0xb1, - 0xe7, 0x8d, 0x89, 0xc1, 0x48, 0xe8, 0xf5, 0x57, 0x35, 0xfa, - 0xc1, 0x79, 0xee, 0x2c, 0xe8, 0x7d, 0xb6, 0x03, 0xcc, 0x66, - 0x09, 0x6f, 0x52, 0x84, 0x0a, 0x34, 0x18, 0x2c, 0x01, 0x45, - 0x81, 0x00, 0xe5, 0x5e, 0x8d, 0xae, 0x1c, 0x96, 0x8b, 0x45, - 0x73, 0x00, 0x0a, 0xb5, 0xcf, 0x8d, 0x0e, 0x35, 0x5d, 0x1a, - 0x0e, 0xbf, 0x64, 0x9a, 0x52, 0x20, 0x48, 0xc6, 0xb9, 0x40, - 0xd3, 0x2c, 0x52, 0xca, 0x93, 0xcf, 0xbb, 0x94, 0x06, 0xf3, - 0x97, 0xee, 0xcc, 0x5d, 0xa3, 0xea, 0xf8, 0x5a, 0x39, 0x77, - 0x34, 0xd7, 0xf6, 0x4e, 0xbe, 0x8a, 0x07, 0x5f, 0x51, 0x53, - 0xc5, 0x1b, 0x8c, 0x47, 0x8f, 0x34, 0x0e, 0x60, 0x0a, 0x90, - 0xe2, 0xda, 0x7b, 0xef, 0xd6, 0xf5, 0x5d, 0xe5, 0x32, 0x37, - 0x75, 0x99, 0x81, 0x4a, 0x2a, 0x78, 0x71, 0xdc, 0xf4, 0xe5, - 0xca, 0xd8, 0x6b, 0x3b, 0x90, 0x68, 0x2e, 0x93, 0xc5, 0x10, - 0x42, 0x5d, 0x38, 0x90, 0x32, 0x46, 0xea, 0x87, 0xe0, 0xbc, - 0xb8, 0x9a, 0x18, 0x20, 0x68, 0x85, 0x6d, 0x9b, 0xc9, 0x8f, - 0x9b, 0xd2, 0xbe, 0x15, 0x12, 0x68, 0xd0, 0xb0, 0x16, 0x5f, - 0xe2, 0x69, 0x1d, 0x04, 0x00, 0xfc, 0x63, 0x33, 0xcd, 0x1f, - 0x89, 0xcd, 0x52, 0xff, 0xec, 0x19, 0x69, 0x74, 0xa3, 0xce, - 0x4d, 0xab, 0x93, 0xe4, 0xc6, 0x13, 0x56, 0x27, 0xc9, 0x25, - 0x5a, 0x01, 0xb2, 0x36, 0x8b, 0x61, 0xe5, 0x8b, 0x98, 0xac, - 0xe4, 0x2a, 0xb6, 0x40, 0x9f, 0x42, 0xe4, 0x1b, 0x52, 0xf7, - 0xfd, 0xd8, 0x30, 0x07, 0x33, 0xf9, 0x47, 0xcb, 0x3c, 0xad, - 0x12, 0xc1, 0xcc, 0x29, 0x62, 0x49, 0x04, 0x0c, 0x23, 0x97, - 0x5a, 0xa4, 0x84, 0x67, 0xde, 0x5a, 0xe5, 0x36, 0xd2, 0x88, - 0xf1, 0xd4, 0xeb, 0x13, 0x81, 0x54, 0x51, 0x11, 0xe3, 0xba, - 0xbc, 0xee, 0xdd, 0x6c, 0xcd, 0xe6, 0xb4, 0xa1, 0x8b, 0x0b, - 0x66, 0xfb, 0x8e, 0x50, 0xa0, 0xda, 0x69, 0x8d, 0xcc, 0x2d, - 0xe4, 0x2c, 0xc4, 0x37, 0xdf, 0x61, 0xc0, 0x03, 0xbd, 0x8b, - 0x28, 0xca, 0xd2, 0x8c, 0x1c, 0xf1, 0xa4, 0x26, 0x69, 0xe5, - 0xcf, 0x45, 0xdb, 0x5a, 0x47, 0x79, 0xed, 0x9f, 0xf7, 0xd2, - 0xdb, 0xba, 0x46, 0x53, 0x4f, 0xce, 0xa8, 0xbe, 0x8f, 0x4a, - 0xd6, 0xdf, 0x2e, 0x06, 0xe6, 0x4c, 0x9a, 0xc1, 0xb6, 0x49, - 0xed, 0xc4, 0xeb, 0xaa, 0xa4, 0x29, 0x6d, 0xd4, 0xcc, 0x8c, - 0xb6, 0x40, 0x11, 0x39, 0x69, 0xf7, 0x75, 0xcd, 0xb1, 0x99, - 0x46, 0x4e, 0xde, 0xcb, 0xf6, 0x9d, 0x32, 0xf3, 0xc9, 0x47, - 0x47, 0x7a, 0xcb, 0xfb, 0xa3, 0x0c, 0x3b, 0xdf, 0xb7, 0xde, - 0xec, 0x99, 0xde, 0xb0, 0x26, 0x04, 0x34, 0xae, 0x6b, 0xfc, - 0x99, 0xbc, 0xde, 0xd5, 0xbe, 0xe7, 0xeb, 0xf9, 0xe7, 0xa6, - 0x01, 0x9a, 0x0c, 0x5e, 0x66, 0xe6, 0x53, 0xe4, 0xd1, 0x58, - 0xac, 0xda, 0x69, 0x77, 0x7b, 0x68, 0xd6, 0x30, 0x2a, 0x9c, - 0x6b, 0xbe, 0x9f, 0x3d, 0x71, 0xd6, 0x54, 0xcd, 0x59, 0x4e, - 0x1f, 0xe3, 0x83, 0x4e, 0xd1, 0x8e, 0xaf, 0x97, 0xa8, 0xe5, - 0xb6, 0x59, 0x77, 0xa8, 0x02, 0x20, 0xe4, 0xeb, 0x44, 0x71, - 0xbc, 0x07, 0x14, 0x79, 0x4f, 0x0c, 0x27, 0x06, 0x39, 0xcf, - 0x7c, 0xef, 0x2b, 0x9b, 0x5e, 0xc4, 0x6d, 0x79, 0x13, 0x00, - 0x43, 0x6f, 0x51, 0x77, 0xb5, 0xc3, 0x72, 0xad, 0x13, 0xa9, - 0xe5, 0x9a, 0x5b, 0x1a, 0x99, 0x74, 0xc0, 0x7a, 0xf9, 0xc5, - 0xb0, 0x58, 0x35, 0x1c, 0xa5, 0x51, 0xdb, 0xa1, 0x14, 0xcd, - 0x26, 0x71, 0xb1, 0xe7, 0xaa, 0x14, 0xa7, 0x46, 0x93, 0xd3, - 0x5c, 0x8c, 0x1a, 0x91, 0x77, 0x46, 0x2e, 0x15, 0xaa, 0x9e, - 0xf7, 0x2b, 0x79, 0x41, 0x76, 0xf7, 0x22, 0x53, 0x7d, 0x51, - 0xdb, 0x98, 0x3d, 0x5b, 0x78, 0x5f, 0xc3, 0xc9, 0x29, 0xa3, - 0xff, 0x75, 0x82, 0x06, 0x9a, 0x16, 0x5e, 0xa4, 0x79, 0x0d, - 0xd1, 0x6d, 0x08, 0xff, 0x43, 0xef, 0x9c, 0xf3, 0x1b, 0x7a, - 0x3f, 0x34, 0xbe, 0x19, 0x15, 0x06, 0x33, 0xdb, 0xa5, 0x71, - 0xcb, 0x5f, 0x6b, 0x8d, 0xbd, 0x5b, 0x32, 0x91, 0xb2, 0x37, - 0x3d, 0xb4, 0x40, 0x9e, 0x02, 0x9b, 0xb7, 0x68, 0x20, 0x58, - 0x5c, 0xab, 0xcb, 0xc8, 0x23, 0x2d, 0x77, 0xcc, 0x0b, 0xf6, - 0x78, 0x6b, 0x80, 0x06, 0x91, 0xa9, 0xfd, 0x7e, 0xfa, 0x25, - 0x98, 0x9f, 0xcc, 0x79, 0x0a, 0x1a, 0x54, 0x83, 0xac, 0x64, - 0x16, 0x90, 0xe5, 0xd9, 0xa7, 0xd7, 0x1b, 0x86, 0x0d, 0xe6, - 0xe6, 0x22, 0x2b, 0x1f, 0x44, 0x49, 0x98, 0x9c, 0x51, 0x6f, - 0xcf, 0x58, 0x4a, 0xfa, 0xfa, 0x84, 0x12, 0xa5, 0x10, 0xf4, - 0xca, 0xf0, 0x98, 0x2b, 0xc9, 0x03, 0x71, 0x37, 0xe7, 0xdc, - 0xc2, 0xb1, 0x4e, 0x64, 0xde, 0x4f, 0x46, 0x0d, 0x6b, 0x25, - 0x88, 0x5d, 0xd6, 0xff, 0x23, 0x46, 0x57, 0x36, 0x14, 0x18, - 0xa7, 0xcb, 0xb8, 0xbd, 0xf0, 0xc5, 0x37, 0x36, 0xee, 0xe1, - 0xed, 0x9f, 0x4d, 0xd4, 0x39, 0xe5, 0x92, 0xcf, 0x95, 0x4d, - 0x66, 0x36, 0x5d, 0xd0, 0xcc, 0x07, 0xcf, 0x15, 0x5a, 0xce, - 0x14, 0xb8, 0xda, 0x0d, 0x3d, 0x1b, 0x45, 0xc5, 0x2e, 0x34, - 0x43, 0x25, 0x02, 0x3a, 0xcd, 0x14, 0x45, 0xfb, 0x3e, 0xf9, - 0x88, 0x5d, 0x0d, 0x29, 0x31, 0xb9, 0xa1, 0xe6, 0x31, 0x18, - 0x52, 0x46, 0x3f, 0x22, 0x4f, 0x9f, 0x7a, 0x65, 0x36, 0x88, - 0xa3, 0x1c, 0x3e, 0x6f, 0x50, 0x7a, 0x36, 0xbe, 0x56, 0x7e, - 0x50, 0xcb, 0x7a, 0x10, 0xa0, 0xec, 0xf6, 0x82, 0xd6, 0x30, - 0x1c, 0xe8, 0x4c, 0x50, 0xf9, 0x3e, 0xdb, 0xac, 0xbe, 0x4f, - 0x90, 0xb1, 0xd5, 0x1b, 0x12, 0x95, 0xfb, 0xe8, 0x08, 0x64, - 0x56, 0x7c, 0x96, 0xcc, 0x90, 0xb1, 0xbc, 0xa0, 0xf5, 0x32, - 0x69, 0xb3, 0x5f, 0x27, 0x0f, 0xbe, 0xc9, 0xbd, 0xeb, 0xfa, - 0x4b, 0x5c, 0xc5, 0x99, 0x9e, 0x5a, 0x04, 0xcc, 0xd0, 0x4d, - 0x29, 0xe8, 0x84, 0x55, 0x8c, 0xd7, 0xc4, 0x06, 0x13, 0x4d, - 0x92, 0xe5, 0x98, 0x9c, 0x4c, 0xc1, 0xf7, 0xaf, 0x7b, 0xd5, - 0x2b, 0x92, 0x68, 0x68, 0x19, 0x70, 0x4c, 0x9e, 0x46, 0xb8, - 0x34, 0xeb, 0x01, 0x47, 0xbe, 0x59, 0xab, 0x0b, 0x22, 0x25, - 0xe7, 0x56, 0xa8, 0xb4, 0x93, 0x3c, 0xd5, 0x98, 0x9f, 0x61, - 0x2e, 0xfa, 0xcb, 0x5f, 0x5b, 0xd8, 0x09, 0x83, 0xe9, 0x40, - 0xe9, 0x0e, 0x42, 0xdd, 0x17, 0xd7, 0x6e, 0x19, 0x8d, 0x95, - 0x0a, 0x93, + 0x8a, 0x66, 0xe3, 0x6e, 0x3c, 0x11, 0x70, 0x9f, 0x82, 0xdd, 0xeb, 0x9e, + 0xc0, 0xd7, 0x25, 0x87, 0x0c, 0x65, 0x07, 0x9d, 0x47, 0x39, 0x5d, 0x04, + 0x42, 0x5c, 0xd6, 0x0a, 0xdc, 0x39, 0x44, 0x04, 0xd9, 0x79, 0x43, 0x87, + 0x98, 0x64, 0x88, 0x82, 0x3a, 0x31, 0xbd, 0xec, 0x66, 0xcb, 0x01, 0x90, + 0xf9, 0x85, 0xcc, 0xde, 0x54, 0x69, 0x7d, 0x84, 0xb3, 0x84, 0x3c, 0x42, + 0x0d, 0x09, 0x63, 0xdb, 0xe6, 0x5d, 0xc2, 0x8a, 0xcf, 0xe1, 0xf4, 0x86, + 0x13, 0x05, 0x09, 0x9a, 0x4d, 0x05, 0xd4, 0x31, 0xe7, 0x27, 0x39, 0xfd, + 0x3a, 0xdb, 0x63, 0x9f, 0x1c, 0x67, 0x0b, 0x01, 0xec, 0xf9, 0xff, 0xf3, + 0xda, 0xa9, 0xf4, 0x9a, 0x59, 0x52, 0x76, 0xc2, 0xd2, 0xd5, 0xdd, 0x8d, + 0xb1, 0xa2, 0xef, 0xb3, 0x73, 0x99, 0xe3, 0xcd, 0x1c, 0xf5, 0xca, 0x6e, + 0x39, 0xfa, 0x26, 0x83, 0x45, 0xe7, 0xd0, 0x9c, 0x1b, 0xf7, 0xb2, 0x64, + 0xf1, 0x70, 0x00, 0x10, 0xc0, 0x7c, 0x7f, 0xb2, 0x32, 0xce, 0x6d, 0x71, + 0xa5, 0x43, 0x7c, 0x40, 0x71, 0x09, 0x54, 0x74, 0xac, 0xb5, 0xeb, 0xe0, + 0x04, 0x02, 0xe5, 0x82, 0x4d, 0x5a, 0x85, 0x1e, 0x19, 0x86, 0x39, 0x33, + 0x92, 0x2f, 0xa9, 0xa8, 0x10, 0xd2, 0x31, 0x60, 0x16, 0x08, 0x99, 0xe3, + 0x2c, 0x93, 0x13, 0xc4, 0x4b, 0x10, 0xe0, 0x42, 0xca, 0x3f, 0x32, 0xa7, + 0xa4, 0xd2, 0xfc, 0x9c, 0x93, 0xb6, 0x5f, 0xe2, 0x5b, 0x6e, 0x40, 0x0c, + 0x63, 0xf8, 0xf8, 0xe1, 0x2d, 0xcd, 0x86, 0x07, 0x79, 0xdb, 0x61, 0xad, + 0x24, 0xfd, 0x1e, 0x66, 0x3e, 0x8d, 0x76, 0xba, 0x98, 0x8e, 0x94, 0xc7, + 0x57, 0xb1, 0x65, 0xce, 0x4f, 0x97, 0xfa, 0x34, 0x7c, 0x97, 0x6b, 0xcd, + 0x3c, 0x42, 0x81, 0xa4, 0xd1, 0x75, 0xeb, 0x6d, 0x0c, 0x31, 0x0e, 0x6f, + 0xd5, 0x75, 0xe7, 0xff, 0x83, 0xdd, 0x7a, 0x4d, 0x83, 0x67, 0xa7, 0x4b, + 0xc1, 0x74, 0xad, 0x37, 0x38, 0x99, 0xe0, 0xf5, 0x5a, 0x44, 0x36, 0xa2, + 0x20, 0x2b, 0xfc, 0xc9, 0xfa, 0x68, 0xcb, 0xf0, 0x6f, 0x0a, 0x46, 0x1d, + 0xb5, 0xca, 0x5b, 0x96, 0x1b, 0x3a, 0xaf, 0x7d, 0x01, 0x7a, 0xd2, 0x09, + 0xcc, 0xd4, 0xe4, 0xb1, 0x49, 0x34, 0x56, 0x68, 0x9c, 0x0f, 0x23, 0xe9, + 0xb3, 0x4b, 0xed, 0x3d, 0xe7, 0x8d, 0x19, 0x6e, 0xe6, 0xfa, 0x06, 0x55, + 0xb8, 0x06, 0x4d, 0xa8, 0x45, 0x20, 0x91, 0xf7, 0xfa, 0x0b, 0x6b, 0xce, + 0x55, 0xa7, 0x14, 0x1b, 0xf9, 0xea, 0xc5, 0x79, 0x78, 0xf7, 0x3a, 0xd9, + 0xfc, 0x07, 0x43, 0x06, 0x90, 0x94, 0x5e, 0xc9, 0x48, 0x51, 0xe5, 0x96, + 0x68, 0x78, 0xc8, 0xcb, 0xd1, 0xf3, 0x65, 0xef, 0x14, 0x91, 0xa3, 0xca, + 0x8b, 0x77, 0x40, 0x84, 0xf4, 0x2e, 0xe7, 0x56, 0xe3, 0xab, 0xa0, 0xa8, + 0x61, 0x93, 0x17, 0x95, 0x9e, 0xff, 0x3a, 0xd4, 0x12, 0xea, 0x13, 0xe6, + 0x82, 0x16, 0xed, 0x14, 0x70, 0x91, 0xcc, 0x72, 0x58, 0x99, 0xa1, 0x7f, + 0xf3, 0x84, 0x10, 0xf4, 0x01, 0x0d, 0x05, 0x45, 0x4d, 0xca, 0x05, 0x03, + 0x75, 0x7e, 0xbb, 0x44, 0x2e, 0xf5, 0xee, 0xed, 0x64, 0x9b, 0xd3, 0xde, + 0x3e, 0xfc, 0x31, 0x8c, 0xca, 0x23, 0x66, 0x25, 0xac, 0x5f, 0x0f, 0x33, + 0x0f, 0xd2, 0xe9, 0xc9, 0x96, 0x2a, 0xe2, 0xb8, 0xed, 0x93, 0xd3, 0x78, + 0xd8, 0x81, 0xe4, 0x52, 0x9a, 0xc6, 0x64, 0x1d, 0x2d, 0x5f, 0x93, 0x9a, + 0x2e, 0x73, 0xc4, 0x17, 0xae, 0xc6, 0x08, 0x0d, 0x2d, 0xe9, 0x4b, 0x10, + 0x29, 0xa8, 0x4e, 0x8c, 0x08, 0x59, 0x87, 0x10, 0x0d, 0x5d, 0xfa, 0xec, + 0xd6, 0x42, 0xf6, 0x5c, 0xa4, 0x0d, 0xaa, 0x64, 0x8e, 0x20, 0xa5, 0x50, + 0x9f, 0x0b, 0x85, 0x37, 0x57, 0x15, 0x7c, 0xb1, 0xe4, 0xdd, 0xd5, 0x19, + 0x3b, 0x10, 0x7d, 0x22, 0xdb, 0x53, 0x8b, 0x7b, 0x32, 0xf7, 0xf2, 0x24, + 0x92, 0xb2, 0x05, 0xd1, 0xfd, 0xfc, 0x11, 0xd6, 0xfd, 0x3c, 0x8d, 0xd7, + 0xb0, 0x58, 0x50, 0x06, 0x84, 0x61, 0xa6, 0x78, 0x04, 0x1d, 0x7f, 0x92, + 0x0e, 0x8b, 0xb3, 0x63, 0x43, 0xc5, 0x30, 0x4c, 0xce, 0x2b, 0x44, 0x70, + 0x53, 0x7c, 0xb5, 0xbd, 0x30, 0xcb, 0x41, 0x19, 0x27, 0x69, 0xfe, 0x41, + 0x92, 0xae, 0xf0, 0x37, 0x33, 0xf0, 0x95, 0xe4, 0xe8, 0x4f, 0x75, 0x41, + 0x64, 0x87, 0xc5, 0x68, 0xd3, 0xce, 0xfa, 0xaa, 0xe8, 0x59, 0x88, 0xfe, + 0x24, 0x46, 0x27, 0x60, 0x71, 0x36, 0x78, 0x66, 0x3c, 0x36, 0x8e, 0xdb, + 0x90, 0x67, 0xa5, 0x6a, 0xfe, 0xd3, 0x23, 0x28, 0x91, 0x34, 0x24, 0x67, + 0x4b, 0x01, 0x6a, 0x0e, 0x02, 0xb7, 0xf0, 0xa8, 0xd4, 0x76, 0xd5, 0xa8, + 0x1c, 0xd3, 0xb3, 0x7d, 0x74, 0xc6, 0x17, 0x96, 0xa7, 0xf9, 0xad, 0x24, + 0x36, 0xd2, 0xeb, 0x34, 0x5a, 0xcc, 0x9c, 0x01, 0x99, 0xbe, 0x21, 0x4f, + 0x27, 0x9d, 0x6b, 0xca, 0x27, 0x1b, 0x60, 0x51, 0x41, 0x23, 0xe1, 0xcb, + 0xfc, 0x17, 0x2e, 0x1a, 0x4d, 0x3d, 0x51, 0xb3, 0x91, 0x8c, 0x53, 0x4d, + 0xd7, 0xbc, 0xa4, 0x07, 0xd7, 0x17, 0x19, 0x18, 0x61, 0x38, 0x4e, 0x05, + 0x81, 0x3f, 0x43, 0x8a, 0x00, 0x60, 0xdc, 0x30, 0xf4, 0x38, 0x3f, 0x93, + 0x82, 0x10, 0x29, 0x73, 0xa9, 0xbd, 0x63, 0x15, 0x7d, 0xac, 0x2e, 0xc9, + 0x05, 0xc1, 0x01, 0x41, 0x18, 0x5a, 0xc0, 0xc8, 0xc7, 0x81, 0x69, 0xe7, + 0x24, 0x21, 0x57, 0xaf, 0x88, 0x73, 0x7c, 0x53, 0x29, 0xae, 0x5a, 0xdf, + 0x76, 0x37, 0x56, 0x4f, 0x1f, 0x6b, 0xfd, 0x71, 0xbb, 0x80, 0x4a, 0xd7, + 0x53, 0x50, 0x10, 0x2d, 0xfc, 0x1a, 0xaf, 0x7c, 0x1f, 0xe8, 0xd0, 0x6c, + 0xa6, 0x45, 0x3d, 0xb5, 0x3d, 0xb2, 0xfc, 0x97, 0xa9, 0xbf, 0x7c, 0x0f, + 0x32, 0x7a, 0xcc, 0xa9, 0x2f, 0xd0, 0xc6, 0xe6, 0xcd, 0x04, 0x1d, 0x71, + 0x91, 0xb9, 0x59, 0x4b, 0xad, 0xa0, 0xde, 0x9e, 0xdc, 0x9c, 0x10, 0xeb, + 0x8d, 0xd6, 0x65, 0x57, 0xbc, 0x96, 0xfd, 0x0f, 0xcc, 0x73, 0xbe, 0x39, + 0x27, 0x99, 0x94, 0xf5, 0xe1, 0xbb, 0x32, 0xcd, 0x27, 0x7e, 0x08, 0xa0, + 0xd2, 0x92, 0x39, 0xeb, 0x71, 0xc8, 0xe8, 0x34, 0x57, 0x34, 0x4b, 0x20, + 0x3f, 0xe2, 0x68, 0xec, 0xc0, 0x8a, 0x71, 0xa3, 0x16, 0xa2, 0x91, 0x77, + 0xde, 0x41, 0x12, 0xa5, 0xf5, 0x2a, 0x63, 0x60, 0x55, 0xd0, 0x33, 0xa4, + 0xa7, 0x2e, 0xcb, 0x80, 0x08, 0xe5, 0x76, 0x16, 0x75, 0x04, 0x57, 0xe3, + 0x14, 0x71, 0x4e, 0x57, 0x29, 0x23, 0x0e, 0xc0, 0xcc, 0xad, 0xba, 0xdc, + 0x96, 0x5d, 0x23, 0x49, 0x42, 0xd8, 0x91, 0x08, 0x0d, 0x52, 0xf4, 0x5f, + 0xcd, 0xb7, 0x03, 0xaa, 0x73, 0x26, 0xa8, 0xd5, 0x5b, 0x0c, 0x85, 0xc8, + 0x84, 0x50, 0x9e, 0x70, 0x18, 0x45, 0x27, 0x82, 0x20, 0x75, 0xad, 0x52, + 0x5c, 0x80, 0x4b, 0xb1, 0x0b, 0x3b, 0x30, 0x39, 0x02, 0x54, 0x18, 0x5d, + 0x02, 0x9e, 0x85, 0x31, 0x4a, 0x07, 0x9c, 0x59, 0x5d, 0xab, 0x13, 0x4f, + 0x8f, 0x6e, 0x39, 0x20, 0xb2, 0xc5, 0x31, 0x93, 0xc6, 0xcc, 0xfb, 0xdc, + 0x15, 0xba, 0x3d, 0xcc, 0xbb, 0xd2, 0x6f, 0x04, 0x21, 0xdf, 0x0b, 0x27, + 0x5c, 0xd2, 0x6e, 0xfa, 0xda, 0x86, 0x5d, 0xe4, 0xca, 0xa4, 0x90, 0x22, + 0xa2, 0x80, 0xb5, 0x33, 0x17, 0xdb, 0x9b, 0x7b, 0x0a, 0xcc, 0x0f, 0x9b, + 0x38, 0x06, 0xdf, 0x10, 0x11, 0xa1, 0xd7, 0x2c, 0x24, 0xf0, 0xa8, 0x34, + 0x24, 0xfb, 0x99, 0xba, 0x0a, 0xb5, 0xa1, 0x94, 0x6c, 0x2d, 0xf8, 0xda, + 0x74, 0xaf, 0x19, 0x59, 0x84, 0xb2, 0x68, 0x1c, 0xef, 0xa1, 0xf5, 0x18, + 0x8f, 0x10, 0xf6, 0xb3, 0x6d, 0x33, 0x87, 0xe0, 0x25, 0xc8, 0x65, 0x5c, + 0x2f, 0x51, 0x07, 0x83, 0x69, 0x1b, 0xce, 0xa8, 0xe6, 0xe4, 0x27, 0x62, + 0x5d, 0x9b, 0x7f, 0xa7, 0x07, 0xc8, 0x54, 0x86, 0x90, 0xa5, 0x06, 0x6a, + 0x94, 0x80, 0x84, 0x97, 0xaa, 0x2a, 0xb9, 0x79, 0xe5, 0x19, 0x7a, 0x91, + 0xef, 0x8b, 0x58, 0xdc, 0xf9, 0x90, 0x94, 0xa2, 0x25, 0x4c, 0x69, 0xd8, + 0x6e, 0x9e, 0xad, 0xf8, 0x82, 0x17, 0x37, 0xc9, 0x20, 0x15, 0x24, 0x40, + 0xe5, 0xc6, 0xc1, 0xc7, 0xbd, 0xd4, 0x62, 0xff, 0x16, 0x6d, 0xa5, 0xec, + 0xe9, 0x67, 0x41, 0x9d, 0x3e, 0xfb, 0x22, 0x81, 0x80, 0x61, 0x37, 0x45, + 0xa5, 0x9f, 0x70, 0xff, 0xd4, 0x99, 0x3d, 0x79, 0x45, 0xd0, 0x27, 0xc2, + 0x32, 0xbe, 0xd4, 0xe2, 0x53, 0xa8, 0x8c, 0x94, 0x8b, 0xbe, 0x8a, 0x43, + 0xf7, 0x2a, 0x28, 0x49, 0xf4, 0xce, 0x2e, 0x0b, 0x98, 0xc7, 0xaf, 0x7d, + 0x51, 0x2e, 0xda, 0xd0, 0x7a, 0xfa, 0x91, 0x3a, 0xe6, 0xe7, 0x64, 0xd6, + 0x09, 0xd8, 0x5d, 0x6a, 0x97, 0xcf, 0x89, 0x96, 0x72, 0x21, 0x97, 0x61, + 0xc5, 0x1b, 0xd8, 0xa1, 0xf0, 0xcd, 0x9d, 0xe4, 0xe9, 0x13, 0xd0, 0x16, + 0x41, 0x20, 0xa4, 0x2c, 0x33, 0xf5, 0x3d, 0xfe, 0x80, 0xe8, 0xb2, 0x52, + 0x0e, 0x18, 0x31, 0x19, 0x50, 0xeb, 0xc6, 0x99, 0x43, 0xab, 0x9a, 0x59, + 0x5d, 0x6c, 0x84, 0x00, 0x88, 0x45, 0x7c, 0x73, 0xdf, 0x56, 0x61, 0x3a, + 0xe1, 0x55, 0xb8, 0x59, 0x13, 0xcc, 0x0e, 0x53, 0xe9, 0xf4, 0x74, 0xa0, + 0xf2, 0x15, 0xd2, 0xa8, 0xf9, 0xd4, 0x0d, 0x3d, 0xe7, 0x3d, 0x7d, 0x5b, + 0x19, 0x89, 0x8b, 0x2c, 0x4d, 0x8a, 0xeb, 0xc3, 0x43, 0x31, 0x9a, 0x45, + 0x72, 0x5b, 0x25, 0xb6, 0xa2, 0xc1, 0x98, 0xe3, 0x8a, 0xd4, 0x90, 0xd0, + 0x3e, 0x13, 0xf0, 0xd7, 0x90, 0x34, 0x94, 0xcc, 0xf1, 0x0a, 0xa9, 0x30, + 0xd1, 0x95, 0x43, 0x07, 0xcd, 0xd2, 0xca, 0xb0, 0xe5, 0xd4, 0xf1, 0xa1, + 0xc5, 0x9b, 0xf4, 0x98, 0x28, 0xba, 0xde, 0x40, 0xd6, 0x98, 0x98, 0x20, + 0x9c, 0x84, 0x9e, 0xc6, 0x57, 0xd8, 0x84, 0xc4, 0xa2, 0x9b, 0x53, 0x50, + 0xa5, 0xa6, 0x0b, 0x47, 0xe8, 0x08, 0x7d, 0xd7, 0x09, 0xa4, 0x0c, 0x2b, + 0x27, 0xde, 0xf9, 0x78, 0xbc, 0xa4, 0xb6, 0xc6, 0x1b, 0xda, 0xce, 0x6a, + 0xf8, 0x1a, 0xf5, 0xfe, 0x7b, 0xab, 0x58, 0x7c, 0xdc, 0x72, 0x02, 0x94, + 0x99, 0xf0, 0x3c, 0x37, 0x87, 0x5b, 0xd2, 0x4b, 0x5a, 0x80, 0x83, 0xd7, + 0xfc, 0x9d, 0xa7, 0x51, 0x81, 0xb8, 0x62, 0xff, 0x4b, 0xb3, 0x9f, 0x07, + 0xc3, 0x54, 0xfb, 0x41, 0x85, 0x42, 0x9d, 0xac, 0x27, 0x81, 0x2e, 0xaf, + 0x98, 0x67, 0x8c, 0x23, 0xad, 0x45, 0xfe, 0x6a, 0x57, 0x9f, 0x18, 0xc5, + 0x71, 0x8c, 0xad, 0x3f, 0x30, 0x3c, 0xaa, 0x47, 0x8d, 0xba, 0xc8, 0x7f, + 0x03, 0x1c, 0x86, 0xee, 0xba, 0x3f, 0x59, 0x45, 0xd4, 0xd0, 0xf5, 0x54, + 0x9e, 0xcb, 0x08, 0xcf, 0xca, 0x40, 0x0a, 0x06, 0xc0, 0x1e, 0x60, 0x1f, + 0x33, 0xbf, 0x2c, 0xa8, 0x5f, 0xce, 0x23, 0xa0, 0xe2, 0x1c, 0x2d, 0x56, + 0x2a, 0x44, 0x61, 0x58, 0xf1, 0x84, 0x63, 0x4f, 0x0d, 0x5e, 0xfb, 0x83, + 0x0f, 0x36, 0x1b, 0xf4, 0x8f, 0x17, 0x82, 0x2e, 0x04, 0x2c, 0x77, 0x9d, + 0x32, 0x58, 0xb8, 0xb0, 0xf9, 0x44, 0xd2, 0xf6, 0x84, 0xa4, 0x8b, 0x28, + 0x53, 0xd6, 0x99, 0x81, 0x84, 0x43, 0xf0, 0xc1, 0x15, 0xc6, 0x74, 0x4f, + 0xab, 0x05, 0xcc, 0x80, 0xdf, 0xef, 0xcf, 0xaf, 0x14, 0x82, 0xdf, 0x51, + 0x7c, 0x28, 0x5e, 0x5b, 0x27, 0x5e, 0x91, 0x8b, 0x54, 0x3d, 0x54, 0x26, + 0xb0, 0x3f, 0xd7, 0xc5, 0xce, 0xf3, 0x6d, 0x2c, 0x12, 0xc6, 0xb4, 0x48, + 0x60, 0x11, 0x9c, 0xef, 0x29, 0x98, 0x9c, 0x76, 0x4e, 0x73, 0x2b, 0xd2, + 0x23, 0x53, 0x7d, 0x03, 0xc2, 0x2f, 0x8a, 0xa1, 0xe2, 0x84, 0x54, 0x2d, + 0xd8, 0xc6, 0x55, 0x77, 0x9d, 0x07, 0x67, 0x1f, 0x1a, 0xd3, 0x57, 0x4c, + 0x25, 0x79, 0x8f, 0xd8, 0x82, 0xc2, 0x4d, 0x87, 0x84, 0x33, 0xdc, 0x47, + 0xed, 0x9e, 0xfb, 0xd2, 0x62, 0xc8, 0x50, 0x76, 0xda, 0x3c, 0x3c, 0x05, + 0x0e, 0x2d, 0x30, 0x56, 0xca, 0x4d, 0x6a, 0xe2, 0x17, 0x24, 0x26, 0x9c, + 0xff, 0x09, 0xec, 0xb3, 0x94, 0xec, 0xab, 0x69, 0xb2, 0xf0, 0xa5, 0x66, + 0x18, 0x92, 0x49, 0x6b, 0x90, 0xf5, 0x77, 0x5a, 0x18, 0xe5, 0x51, 0x36, + 0x4a, 0x35, 0x54, 0x98, 0x48, 0x04, 0xa9, 0x0f, 0xcb, 0x55, 0xf1, 0x71, + 0xad, 0x1a, 0x4a, 0x2c, 0x0e, 0x5d, 0x5e, 0x77, 0x47, 0xf5, 0x46, 0x17, + 0x6b, 0x94, 0x2a, 0xbc, 0x40, 0xe5, 0xa7, 0xa6, 0x88, 0x41, 0x76, 0x22, + 0x47, 0xd1, 0xe8, 0x2b, 0x18, 0x48, 0x21, 0xc0, 0xe8, 0x4f, 0xe2, 0xb2, + 0x7e, 0x03, 0xbb, 0x25, 0x9c, 0xc8, 0x68, 0x66, 0x48, 0x25, 0x6a, 0xf2, + 0x64, 0x29, 0xec, 0x79, 0xba, 0xdb, 0x34, 0xe1, 0xd4, 0xf9, 0x52, 0x0e, + 0xfd, 0x8d, 0x86, 0x94, 0x71, 0xd8, 0xe0, 0x86, 0x02, 0x9b, 0xd4, 0x65, + 0x69, 0x5e, 0x01, 0x32, 0x87, 0x59, 0xd8, 0x6c, 0xbc, 0x8a, 0x9f, 0x58, + 0x28, 0x8c, 0x97, 0xef, 0x33, 0xb2, 0xda, 0x45, 0xa0, 0xec, 0xe5, 0x5b, + 0xac, 0xc6, 0x65, 0xc1, 0xb6, 0xcb, 0xf7, 0x85, 0x0e, 0xfa, 0x78, 0x36, + 0x30, 0x84, 0x90, 0xa8, 0xf8, 0x42, 0x25, 0xa5, 0xdd, 0xdc, 0xdc, 0x89, + 0xd3, 0xf0, 0x73, 0x9a, 0xd8, 0x95, 0x8f, 0x04, 0xbf, 0xc1, 0xfd, 0x94, + 0xff, 0xe6, 0xf8, 0x4e, 0xc6, 0x43, 0xc9, 0x60, 0x30, 0xe9, 0x68, 0xa8, + 0x76, 0xfb, 0xfa, 0xdf, 0xc0, 0x9b, 0xbc, 0xbc, 0x34, 0xe4, 0x38, 0xfd, + 0x93, 0xb0, 0x47, 0xb2, 0x3e, 0x83, 0x6c, 0xef, 0xe1, 0xaf, 0x35, 0xb4, + 0x90, 0x2a, 0x32, 0xaf, 0x25, 0x3f, 0x3e, 0x72, 0x61, 0xc0, 0x0f, 0x29, + 0xbb, 0x46, 0x6e, 0x2e, 0x94, 0x7d, 0xdd, 0xb7, 0x67, 0x1f, 0x7b, 0x64, + 0xcb, 0xa5, 0x9a, 0x58, 0x63, 0x20, 0xa7, 0xc0, 0x94, 0xa9, 0xad, 0x90, + 0x7d, 0xf3, 0x2b, 0x61, 0x2b, 0x64, 0x3d, 0x8a, 0xc3, 0xd1, 0xcb, 0xad, + 0x36, 0x44, 0xe6, 0x29, 0x8b, 0x3d, 0x95, 0x7c, 0xa7, 0xa2, 0xfa, 0x1b, + 0x16, 0x8d, 0x9e, 0xc4, 0xf8, 0x4c, 0x76, 0x20, 0x00, 0x68, 0x07, 0x99, + 0x9c, 0x60, 0xe6, 0x16, 0x6a, 0x6f, 0x8a, 0xbe, 0x71, 0x95, 0xa1, 0xcb, + 0xfe, 0x7c, 0x41, 0x59, 0x61, 0x20, 0xf9, 0x54, 0x3c, 0xb1, 0x19, 0x5c, + 0x42, 0x67, 0x3f, 0xff, 0xf3, 0x32, 0x21, 0x9c, 0x9e, 0x88, 0xf9, 0x97, + 0x00, 0x43, 0x73, 0x4a, 0xfc, 0x54, 0xeb, 0x27, 0x79, 0x14, 0x85, 0xd3, + 0xdc, 0x47, 0xb3, 0x6d, 0x24, 0xd3, 0xf7, 0x7a, 0xfb, 0x90, 0x7c, 0x6e, + 0xcd, 0x4e, 0xbf, 0x26, 0x76, 0xd2, 0xe8, 0xcc, 0x67, 0xd1, 0x23, 0x3c, + 0x94, 0x16, 0x1e, 0x07, 0x36, 0x7c, 0x96, 0xf6, 0xe8, 0x50, 0x72, 0x26, + 0x56, 0x67, 0x89, 0xa9, 0x11, 0xfb, 0x1d, 0xb8, 0xb9, 0x2a, 0x55, 0xb7, + 0x85, 0xf7, 0x40, 0xa2, 0xfc, 0x9f, 0x30, 0xec, 0x8f, 0x9a, 0x1c, 0xc8, + 0xe4, 0xc5, 0x1f, 0xcb, 0x0a, 0x60, 0x80, 0x41, 0xec, 0x88, 0x8a, 0xda, + 0x7c, 0x7a, 0xa1, 0x96, 0x51, 0x62, 0x16, 0x63, 0x75, 0x36, 0x28, 0x7c, + 0xc9, 0xd0, 0x27, 0x0c, 0x9e, 0x18, 0x4a, 0x82, 0xf7, 0x02, 0xb9, 0x40, + 0x8f, 0xd5, 0x97, 0x7a, 0x35, 0xa9, 0x3a, 0xb3, 0x8b, 0x6b, 0xf1, 0x9a, + 0xd1, 0xe7, 0x14, 0x38, 0x5e, 0xba, 0x8c, 0xbf, 0x32, 0xaa, 0x34, 0x30, + 0x7c, 0x1e, 0x11, 0xcd, 0x1f, 0x9f, 0xcf, 0x4d, 0x14, 0xce, 0x67, 0xf9, + 0x9c, 0x89, 0x07, 0x92, 0x44, 0x6e, 0x9a, 0x16, 0xe4, 0xfb, 0x67, 0x01, + 0x3f, 0x4c, 0x14, 0x89, 0x33, 0x87, 0x46, 0xc6, 0xe4, 0x66, 0x94, 0xd4, + 0x87, 0x4f, 0x2c, 0x92, 0x1b, 0xae, 0x82, 0xe7, 0x99, 0xaa, 0xb4, 0x99, + 0x81, 0x26, 0xa6, 0x6f, 0x1d, 0xc1, 0x95, 0x80, 0xe9, 0xea, 0xe3, 0x44, + 0x6a, 0x2b, 0xd2, 0xe0, 0x0d, 0x69, 0x42, 0xf7, 0x27, 0x6b, 0x4f, 0x02, + 0x7a, 0x33, 0x7b, 0x43, 0x3d, 0xef, 0x10, 0xaa, 0xab, 0xc5, 0xa2, 0xf0, + 0xbb, 0x07, 0x4b, 0x26, 0x0c, 0x58, 0xcd, 0x3b, 0xd2, 0x6d, 0xa5, 0x32, + 0x37, 0x88, 0x4e, 0x8b, 0xe3, 0x75, 0xb0, 0xbb, 0x87, 0xea, 0xa4, 0x53, + 0xf3, 0xff, 0x39, 0x92, 0x44, 0xab, 0x7b, 0x71, 0x62, 0x31, 0x6b, 0x31, + 0xca, 0x97, 0xba, 0xd7, 0x41, 0xe0, 0x47, 0x47, 0x4f, 0x77, 0xa2, 0x35, + 0x62, 0x7a, 0xc1, 0xb6, 0x69, 0x10, 0x09, 0xce, 0xfc, 0x92, 0xcc, 0xc5, + 0x7a, 0x11, 0xf1, 0xc1, 0xa0, 0x80, 0xe5, 0x42, 0x17, 0xb6, 0x3f, 0xab, + 0xc1, 0xa2, 0x41, 0xfb, 0xe3, 0x98, 0x2d, 0x7a, 0xe4, 0x1b, 0x1f, 0x7e, + 0x71, 0x3c, 0x3e, 0x90, 0x8c, 0x60, 0x30, 0xb7, 0x73, 0x06, 0x1f, 0x8a, + 0xce, 0x50, 0x20, 0x7c, 0xfa, 0x8c, 0xf2, 0x14, 0xd9, 0x00, 0xa2, 0x21, + 0xea, 0x10, 0x36, 0x21, 0x6f, 0x7f, 0x13, 0xe3, 0x6c, 0xb2, 0xd6, 0xa5, + 0xa6, 0x6e, 0xa9, 0xe7, 0x1d, 0xdf, 0xc9, 0x97, 0x60, 0x75, 0xa3, 0x55, + 0xa1, 0x2c, 0x94, 0xd7, 0x85, 0x4b, 0x44, 0xc6, 0x9c, 0x17, 0xc2, 0xad, + 0xe6, 0x56, 0x72, 0x1d, 0xb9, 0x13, 0x54, 0xfe, 0x8c, 0xec, 0xf4, 0xa3, + 0x54, 0x6b, 0x31, 0xbc, 0x55, 0x9e, 0x01, 0xd4, 0x9b, 0x24, 0x9e, 0x51, + 0xaf, 0x67, 0x76, 0x02, 0xf7, 0x34, 0x6a, 0xaa, 0xb0, 0x3c, 0x70, 0x2e, + 0xc8, 0x86, 0xfa, 0x40, 0x89, 0x12, 0xb7, 0x49, 0x38, 0x0b, 0xf7, 0x66, + 0xd2, 0x2e, 0x58, 0xf1, 0x22, 0x3b, 0xb3, 0x40, 0x6b, 0x7a, 0x68, 0x4d, + 0x42, 0xfd, 0xbf, 0xa0, 0xf7, 0x2f, 0x63, 0x4a, 0x87, 0xe7, 0x99, 0x52, + 0x6e, 0xe7, 0xdd, 0xca, 0x19, 0x71, 0xee, 0x92, 0xe2, 0x68, 0x0e, 0xe1, + 0xb7, 0x90, 0x1f, 0xc4, 0xef, 0xf8, 0xf6, 0x85, 0x53, 0x18, 0x33, 0x86, + 0x15, 0xc8, 0x29, 0x58, 0x6f, 0xf0, 0x1c, 0x14, 0x73, 0xa9, 0x8e, 0x88, + 0x74, 0xd4, 0x21, 0xf5, 0xc6, 0x7c, 0xd8, 0x96, 0x0f, 0xb0, 0xa6, 0x7b, + 0xf7, 0x72, 0x15, 0xd7, 0x30, 0x6b, 0x15, 0x1d, 0x3f, 0xb7, 0x4e, 0xaa, + 0xc0, 0x52, 0x1d, 0x84, 0xbf, 0x98, 0xbd, 0x33, 0x02, 0xab, 0x8b, 0xd0, + 0x9c, 0x85, 0x2f, 0xa3, 0xfb, 0x46, 0x8d, 0x4d, 0x97, 0x1a, 0x8a, 0x3c, + 0x73, 0x5b, 0x3b, 0x58, 0x26, 0xba, 0x6b, 0x45, 0x2e, 0x24, 0x66, 0x79, + 0x7d, 0xc4, 0xf8, 0x8c, 0x05, 0x7d, 0x5c, 0x23, 0xb9, 0xe8, 0x5d, 0xfe, + 0xc9, 0x84, 0xe5, 0x58, 0x40, 0xa4, 0xb7, 0x55, 0x74, 0x69, 0x92, 0x9c, + 0x3e, 0x19, 0xb1, 0xb6, 0x51, 0xe9, 0x71, 0xcc, 0x96, 0x2b, 0x01, 0x71, + 0xf5, 0xb9, 0xde, 0x77, 0xfe, 0x2e, 0x74, 0x9c, 0x6a, 0x52, 0x17, 0x1e, + 0xea, 0xd9, 0xc8, 0x14, 0xbe, 0x61, 0xdf, 0xe9, 0x96, 0x24, 0x5a, 0x9a, + 0xd8, 0xd7, 0xad, 0x71, 0xe0, 0xf4, 0xbb, 0x9e, 0xae, 0x95, 0xcd, 0x58, + 0x94, 0x81, 0xee, 0x46, 0x84, 0x65, 0x39, 0xb1, 0x1b, 0x1e, 0xf5, 0x50, + 0xad, 0x56, 0x58, 0xb7, 0x53, 0x9b, 0x2a, 0x2f, 0x09, 0x61, 0x57, 0xda, + 0xf5, 0xdc, 0x9f, 0x3c, 0x6c, 0x69, 0x0d, 0x61, 0x49, 0xb2, 0xe0, 0xb2, + 0xe5, 0xef, 0x19, 0xbe, 0x04, 0xf6, 0x6b, 0xad, 0x41, 0x4c, 0x5a, 0x50, + 0xf6, 0xac, 0x1b, 0x25, 0x8a, 0xdd, 0xe3, 0x57, 0xab, 0x7c, 0x92, 0xe4 }; WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_87_sig[] = { - 0x78, 0xed, 0x1a, 0x3f, 0x41, 0xab, 0xf8, 0x93, 0x80, 0xf0, - 0xc6, 0xbf, 0x4a, 0xde, 0xaf, 0x29, 0x93, 0xe5, 0x9a, 0xbf, - 0x38, 0x08, 0x18, 0x33, 0xca, 0x7d, 0x5e, 0x65, 0xa4, 0xd2, - 0xd7, 0x45, 0xe3, 0xe7, 0x58, 0xfb, 0x05, 0xab, 0x65, 0x57, - 0xac, 0x6f, 0xf5, 0x43, 0x28, 0x5f, 0x9c, 0x9a, 0x3e, 0x35, - 0x84, 0xe4, 0xef, 0xa5, 0x57, 0x17, 0xad, 0x51, 0x44, 0x70, - 0x09, 0x00, 0x81, 0xbe, 0xfe, 0x14, 0x01, 0xfe, 0x0c, 0x94, - 0xbe, 0xa9, 0x89, 0xfd, 0x47, 0xfc, 0xb9, 0xd8, 0x17, 0x4d, - 0xd8, 0x73, 0xd5, 0x50, 0x9f, 0x13, 0x6c, 0x07, 0x71, 0x47, - 0xaa, 0x3c, 0xc0, 0x64, 0x00, 0x19, 0x2e, 0x74, 0x51, 0x0e, - 0x0f, 0x25, 0x30, 0x7f, 0x13, 0x96, 0xc6, 0xc5, 0xbf, 0xd4, - 0x82, 0xd3, 0x0d, 0xd3, 0x65, 0x4c, 0x72, 0x67, 0xe2, 0x37, - 0x6b, 0x3c, 0x8e, 0xa3, 0x36, 0x84, 0xe9, 0xaa, 0xac, 0x7d, - 0xf3, 0xac, 0xfc, 0x01, 0x50, 0x87, 0x88, 0xf6, 0xbf, 0x84, - 0xc3, 0xa0, 0x23, 0xe4, 0xe8, 0x01, 0x38, 0x39, 0x30, 0x8a, - 0xf3, 0xba, 0x92, 0x62, 0x37, 0xd7, 0x20, 0xd7, 0xf7, 0x41, - 0xff, 0xae, 0x81, 0x02, 0x29, 0x2a, 0x66, 0x8b, 0x20, 0xbe, - 0x61, 0x8d, 0xfb, 0x7c, 0x70, 0x14, 0xad, 0xf4, 0x94, 0x8c, - 0xee, 0x64, 0x3b, 0x9f, 0xe1, 0x6e, 0x68, 0x17, 0x07, 0xb8, - 0xfc, 0x99, 0xdc, 0xde, 0x69, 0x58, 0x8c, 0x97, 0x7d, 0xb3, - 0x2c, 0x9e, 0x90, 0x33, 0x2e, 0x7b, 0xbf, 0xf8, 0x6f, 0xf8, - 0x12, 0x64, 0xda, 0xc0, 0xfb, 0x30, 0xe6, 0xbf, 0x7b, 0x9a, - 0xde, 0xb5, 0xac, 0x9d, 0x6b, 0xcb, 0xe1, 0x0d, 0xf1, 0xbb, - 0xf3, 0x97, 0xc5, 0x08, 0xd3, 0x3e, 0xe3, 0xa4, 0xeb, 0x6f, - 0x6b, 0x62, 0x61, 0xc5, 0x0b, 0xa8, 0x02, 0xc2, 0xf1, 0xbe, - 0xbb, 0x93, 0x13, 0xa5, 0x8d, 0x7b, 0x5a, 0x6d, 0x1f, 0x28, - 0xbc, 0x35, 0xd8, 0xe8, 0xcf, 0x80, 0x8b, 0x4b, 0x02, 0x80, - 0x3b, 0xdc, 0x00, 0xce, 0x88, 0xb0, 0x62, 0x35, 0x7d, 0x51, - 0x7f, 0x5c, 0xb2, 0x23, 0x85, 0x47, 0x7e, 0x73, 0x88, 0x65, - 0xfd, 0x0d, 0x47, 0x33, 0xef, 0xb9, 0x75, 0x05, 0x86, 0x5d, - 0xd3, 0x98, 0xa6, 0x91, 0xe6, 0x8c, 0xe2, 0x71, 0x7a, 0x95, - 0xe0, 0x8c, 0x54, 0x4b, 0x68, 0x4d, 0x5a, 0xec, 0xad, 0xae, - 0x54, 0x4e, 0x3b, 0x0e, 0xcd, 0x70, 0xe6, 0x81, 0xbf, 0xf4, - 0x86, 0xab, 0xfe, 0xd8, 0xed, 0x69, 0xdd, 0x0f, 0x75, 0x8f, - 0x8e, 0xcd, 0x72, 0x40, 0x21, 0xee, 0x80, 0x6f, 0x9e, 0xa0, - 0x80, 0xf7, 0xf6, 0xa2, 0xf5, 0x04, 0x82, 0xea, 0xb6, 0xb1, - 0xa3, 0xfe, 0xa2, 0x2d, 0x83, 0xc7, 0x01, 0x4b, 0x27, 0x19, - 0x6a, 0x31, 0x04, 0x70, 0xce, 0x75, 0x22, 0x4b, 0x7a, 0x21, - 0x29, 0xfd, 0xe9, 0xcb, 0xbb, 0xca, 0x95, 0x0a, 0xd8, 0xcd, - 0x20, 0x2a, 0xb7, 0xbe, 0xdf, 0x2f, 0x0f, 0xfa, 0xf1, 0xc0, - 0x39, 0xf3, 0x74, 0x22, 0x05, 0x33, 0xca, 0x2a, 0x9c, 0x9f, - 0x06, 0x71, 0x90, 0x1e, 0x74, 0x4b, 0xbe, 0x9a, 0xc7, 0x1e, - 0x37, 0x9b, 0x96, 0x19, 0xfd, 0xa0, 0x61, 0x87, 0x93, 0xab, - 0x75, 0x79, 0xac, 0x2f, 0x83, 0xe1, 0x8c, 0x70, 0x54, 0x70, - 0x01, 0x93, 0xce, 0x76, 0x7a, 0x08, 0xe7, 0x75, 0xfb, 0x5e, - 0xa4, 0xcc, 0xd6, 0xeb, 0x90, 0xe2, 0x57, 0x07, 0x53, 0x88, - 0x8f, 0x7f, 0x29, 0x39, 0x80, 0xc4, 0x7f, 0x70, 0x6f, 0xff, - 0x44, 0x25, 0x2b, 0x9e, 0xa1, 0xbb, 0xda, 0x43, 0x53, 0x14, - 0xf8, 0x97, 0x08, 0xa4, 0xaf, 0xa0, 0xa5, 0x0c, 0xfa, 0xcc, - 0xba, 0xcd, 0x4f, 0xd3, 0x90, 0x28, 0x02, 0x25, 0xbe, 0xc6, - 0x35, 0x66, 0x99, 0xb0, 0x69, 0x46, 0xe5, 0xbf, 0x7e, 0x4f, - 0x53, 0x11, 0x1f, 0xa5, 0x2c, 0x9b, 0xd1, 0x70, 0x90, 0x34, - 0x66, 0xaa, 0x9f, 0xa8, 0x02, 0x3a, 0x05, 0x2b, 0x0a, 0xd0, - 0x72, 0x5d, 0x01, 0x7b, 0x02, 0xce, 0x18, 0xb9, 0x63, 0xd1, - 0x7d, 0xd2, 0x34, 0xa3, 0x2d, 0xaa, 0x78, 0xf0, 0x30, 0x6e, - 0x59, 0xe3, 0xf1, 0x1e, 0xf1, 0x33, 0x41, 0xde, 0xc4, 0x4e, - 0x88, 0x61, 0xc3, 0xb4, 0x6b, 0x21, 0x5d, 0xcc, 0x69, 0x44, - 0xf3, 0xb0, 0x84, 0x54, 0x2a, 0x23, 0x22, 0xa2, 0xc4, 0xba, - 0xad, 0x00, 0x57, 0x5b, 0xdf, 0xa0, 0xf7, 0x1c, 0x00, 0xc3, - 0x23, 0x93, 0xc0, 0x2f, 0x3b, 0x9d, 0x6e, 0x8c, 0x38, 0xa6, - 0x5e, 0xd8, 0x98, 0x7a, 0x6c, 0x90, 0xd5, 0x40, 0x3f, 0x8c, - 0xc3, 0xf0, 0x92, 0x66, 0xc4, 0xe5, 0xa8, 0x42, 0x25, 0x4c, - 0x56, 0x42, 0x37, 0x9a, 0xa4, 0x1d, 0xf5, 0xb0, 0xe3, 0x8a, - 0x9c, 0x57, 0x52, 0x63, 0xdc, 0xd9, 0xb0, 0xbf, 0xc3, 0xfc, - 0xfc, 0x6c, 0xab, 0x41, 0xae, 0xec, 0xc7, 0x40, 0x80, 0xb6, - 0x0b, 0x3c, 0xa9, 0xf5, 0x4f, 0x2d, 0xf6, 0x72, 0xe3, 0xba, - 0x13, 0x2c, 0x73, 0x61, 0x98, 0x66, 0x6f, 0x03, 0x88, 0x3b, - 0xe6, 0x95, 0x43, 0x33, 0x3b, 0xfe, 0xfd, 0x63, 0x8c, 0x00, - 0x8a, 0x67, 0x1c, 0x46, 0x0e, 0x0b, 0x51, 0x26, 0x79, 0x4f, - 0x7b, 0xb1, 0x36, 0x34, 0x52, 0x41, 0x7e, 0x74, 0xbb, 0x71, - 0x52, 0x8f, 0xcc, 0xf2, 0x99, 0x24, 0x3f, 0x18, 0xe6, 0xcf, - 0xdf, 0x6b, 0xfe, 0x77, 0xfa, 0xa8, 0x3f, 0xe3, 0x6b, 0xb7, - 0x32, 0x30, 0x8e, 0x16, 0x08, 0x59, 0x66, 0xdf, 0x95, 0x75, - 0x7d, 0xa3, 0x80, 0xf0, 0x0c, 0x1a, 0xa8, 0xe7, 0x87, 0x2f, - 0xe3, 0x39, 0x11, 0x82, 0x00, 0x3e, 0xe5, 0x71, 0x05, 0x7d, - 0x0c, 0x90, 0xae, 0xbc, 0xbf, 0xe0, 0x4b, 0x8f, 0x91, 0x85, - 0x1d, 0x0a, 0xa2, 0x36, 0x66, 0x18, 0x78, 0xd0, 0x0a, 0xa0, - 0xaf, 0x0f, 0x1c, 0x01, 0xdb, 0xb2, 0x21, 0x96, 0x25, 0xf7, - 0x9e, 0x3a, 0x9e, 0xc3, 0xe8, 0x92, 0x34, 0xaf, 0x7e, 0x3b, - 0x5f, 0xd9, 0x23, 0x97, 0x09, 0xf1, 0x87, 0x31, 0x3a, 0x94, - 0xc8, 0x9b, 0x52, 0xf4, 0x57, 0x54, 0x7b, 0x3e, 0x50, 0xd3, - 0x75, 0x2a, 0xba, 0x97, 0xd7, 0xec, 0x95, 0x6c, 0x35, 0x63, - 0xa4, 0xa1, 0x8f, 0xf5, 0xcc, 0xbe, 0x42, 0x65, 0x4e, 0x69, - 0x35, 0x55, 0xa5, 0x3e, 0xc4, 0xf0, 0xde, 0x60, 0x54, 0xdf, - 0xbb, 0x83, 0xad, 0xdf, 0xa5, 0x24, 0x8f, 0xbe, 0x0b, 0x16, - 0xfc, 0xf2, 0x64, 0xd5, 0x79, 0x68, 0xf3, 0x91, 0x81, 0x2a, - 0xd7, 0x1c, 0xc0, 0xdd, 0xe6, 0xb6, 0xb3, 0xa2, 0x4f, 0xc0, - 0x6d, 0x77, 0x02, 0xee, 0x43, 0xd6, 0x5e, 0x82, 0x66, 0x7f, - 0xb4, 0xe6, 0x5c, 0xff, 0x87, 0x1e, 0x1d, 0x6f, 0x1d, 0x96, - 0x6d, 0xbd, 0x90, 0x57, 0x65, 0xc2, 0x01, 0x35, 0xfa, 0x9a, - 0xc6, 0xe0, 0x4e, 0x2c, 0x4b, 0x16, 0xfa, 0x0d, 0x38, 0x87, - 0x39, 0x2c, 0x2b, 0x48, 0x14, 0x92, 0x3d, 0x83, 0x00, 0xa9, - 0x1a, 0x3d, 0x4d, 0x30, 0x23, 0x48, 0xcd, 0xd5, 0xcd, 0x01, - 0xb1, 0x45, 0x85, 0xcc, 0x66, 0x47, 0x1d, 0x63, 0x3d, 0x70, - 0xb8, 0x0c, 0xfd, 0xe3, 0xb2, 0x0f, 0x64, 0x6e, 0xb9, 0x2b, - 0xe5, 0xb0, 0x4d, 0x44, 0x4d, 0x66, 0x1a, 0xfa, 0x49, 0xbb, - 0xc3, 0xb8, 0xad, 0x64, 0x23, 0x7e, 0x71, 0x9f, 0x59, 0xec, - 0x25, 0xa8, 0x5e, 0x11, 0xd6, 0x6e, 0xc9, 0x09, 0xe7, 0xb9, - 0x6a, 0x63, 0x91, 0xaa, 0x5d, 0xd2, 0x8c, 0x91, 0xe8, 0x8d, - 0x35, 0x6d, 0x10, 0xf6, 0xfc, 0x6a, 0x3c, 0x77, 0x90, 0xf8, - 0x2a, 0x49, 0x13, 0x7f, 0xdb, 0xf5, 0x0c, 0xe9, 0xc8, 0x57, - 0xc6, 0xfd, 0x26, 0x8d, 0x79, 0xb5, 0xdd, 0x47, 0x74, 0x6e, - 0xe8, 0x8f, 0x50, 0xf5, 0xa7, 0x9e, 0xd1, 0x74, 0x10, 0xbb, - 0xf4, 0x8f, 0x8f, 0x0d, 0xcd, 0x1f, 0xf6, 0x59, 0xb8, 0x6c, - 0xd2, 0x37, 0x83, 0x28, 0xb2, 0x36, 0xc1, 0x39, 0x5b, 0xde, - 0x59, 0xee, 0x77, 0xa2, 0x6e, 0x67, 0xc6, 0xea, 0x1d, 0x2b, - 0x41, 0x8f, 0x6f, 0x96, 0x94, 0x1b, 0x5d, 0xab, 0x30, 0x53, - 0x1e, 0xf8, 0x17, 0x06, 0xea, 0xcc, 0x98, 0xa8, 0xdf, 0x81, - 0xe1, 0x80, 0xb7, 0xad, 0x69, 0xcb, 0x8f, 0x81, 0x1e, 0x76, - 0x75, 0x3c, 0x11, 0x9b, 0x38, 0x95, 0xa7, 0x87, 0x1f, 0xd9, - 0x76, 0x82, 0x21, 0x13, 0x25, 0x20, 0x42, 0xd3, 0x8c, 0xd9, - 0x1c, 0x64, 0xed, 0xe9, 0x55, 0xb5, 0x29, 0x98, 0x85, 0x7c, - 0x01, 0x94, 0xaa, 0xdd, 0x8c, 0x78, 0x08, 0x99, 0x99, 0x5a, - 0xf6, 0x61, 0x4c, 0xe0, 0x99, 0xf8, 0x15, 0x74, 0x2e, 0x0d, - 0x14, 0x89, 0x11, 0x84, 0xcd, 0x78, 0x0c, 0x6b, 0x48, 0xde, - 0xb4, 0xd6, 0x05, 0xbd, 0x99, 0x58, 0xb7, 0xe5, 0xc5, 0x7a, - 0x43, 0x18, 0x55, 0x33, 0x16, 0x2b, 0xfa, 0x27, 0xf5, 0xbb, - 0xaa, 0x52, 0xb5, 0x28, 0x5c, 0xfe, 0x61, 0x7f, 0x7a, 0x70, - 0xc2, 0x32, 0x4b, 0x05, 0x8d, 0x7b, 0x4d, 0x22, 0x57, 0x25, - 0x40, 0x46, 0x7c, 0xad, 0x2f, 0x8a, 0xc8, 0x16, 0xd6, 0xac, - 0x4e, 0xe3, 0xe3, 0x29, 0xe4, 0xe8, 0x00, 0x2b, 0xc9, 0xe3, - 0x3a, 0x6f, 0x66, 0xf1, 0x37, 0x37, 0x52, 0x88, 0x77, 0xf6, - 0xbd, 0x59, 0x5f, 0xf8, 0x11, 0x46, 0x7b, 0x12, 0x88, 0x2f, - 0x4b, 0x0d, 0x16, 0x89, 0x3e, 0x2a, 0x56, 0x58, 0xa8, 0x1c, - 0xee, 0x23, 0xd5, 0x66, 0x86, 0x5f, 0x59, 0x55, 0xac, 0x07, - 0xfd, 0xda, 0x6b, 0xf1, 0xc7, 0x01, 0x19, 0xdb, 0xff, 0x63, - 0x6f, 0x27, 0xdb, 0xa1, 0xc7, 0xe9, 0xe0, 0xdb, 0xe4, 0x9a, - 0xce, 0xf5, 0xac, 0x68, 0xab, 0x59, 0x0c, 0x83, 0xa3, 0x1c, - 0x2a, 0x86, 0x55, 0xe2, 0xaa, 0xa1, 0xb3, 0xed, 0xc2, 0x2d, - 0x43, 0xc5, 0x13, 0x68, 0xe4, 0x83, 0x3e, 0xd5, 0x7f, 0xf7, - 0xd5, 0xd0, 0x60, 0xd3, 0x70, 0x7f, 0x88, 0xaa, 0xca, 0x74, - 0xcc, 0x50, 0x8d, 0x55, 0x9c, 0xfe, 0x4a, 0xc6, 0xc9, 0x36, - 0xf7, 0x27, 0x26, 0x64, 0xd3, 0x6c, 0xdb, 0x16, 0x31, 0x81, - 0xe9, 0xce, 0x73, 0x60, 0x61, 0x9c, 0x0f, 0xb5, 0x6e, 0x68, - 0xbc, 0xb1, 0x9e, 0x9f, 0xcd, 0x6c, 0x27, 0x31, 0x2d, 0x40, - 0x36, 0xce, 0x91, 0xee, 0x47, 0xdc, 0xa0, 0x4f, 0xd7, 0x14, - 0x4f, 0x93, 0x00, 0xc4, 0x34, 0xca, 0xd4, 0x42, 0x21, 0x90, - 0xf6, 0x9d, 0xea, 0x45, 0x15, 0xfe, 0x2d, 0xd6, 0xab, 0xc2, - 0x36, 0x47, 0xc0, 0x5b, 0xd2, 0xae, 0x53, 0x33, 0xb0, 0x2d, - 0x29, 0xa3, 0x14, 0xda, 0xa4, 0x48, 0xc1, 0x57, 0x0c, 0xdc, - 0x72, 0x4a, 0xd0, 0xf5, 0x5b, 0x9a, 0x57, 0x1d, 0x06, 0xc8, - 0x0f, 0xc7, 0x5b, 0x70, 0xbb, 0x27, 0xf4, 0xe2, 0xf4, 0xf3, - 0x3c, 0xdc, 0xba, 0x43, 0xc4, 0x4e, 0xe2, 0x96, 0xd4, 0x6c, - 0x33, 0x3e, 0xbf, 0x85, 0xf7, 0x3c, 0x1d, 0x46, 0x59, 0x4e, - 0xa1, 0xa7, 0xa3, 0x76, 0x55, 0x8a, 0x72, 0x83, 0xd0, 0x45, - 0x86, 0x38, 0xa5, 0x4d, 0xc8, 0x62, 0xe4, 0x8a, 0xd5, 0x8e, - 0xb7, 0x4c, 0x6e, 0xaf, 0xa4, 0xbe, 0x88, 0x87, 0x77, 0xd1, - 0x7b, 0xb2, 0x1d, 0xe0, 0x1e, 0x53, 0x30, 0x31, 0x15, 0x6c, - 0x10, 0x81, 0x03, 0x55, 0xa7, 0x69, 0xb6, 0xa5, 0x48, 0xf4, - 0xb2, 0x3b, 0x76, 0x8b, 0x2e, 0x42, 0xa6, 0xaa, 0x7e, 0x66, - 0x57, 0xc2, 0x11, 0xc5, 0x2c, 0x7d, 0x96, 0xdf, 0xe3, 0x58, - 0x12, 0x98, 0x18, 0x0d, 0x87, 0xbd, 0x64, 0xbd, 0xfe, 0x6d, - 0xad, 0x6d, 0x1e, 0xf6, 0x34, 0x01, 0xb5, 0x56, 0xe8, 0x6a, - 0xb3, 0x8c, 0x70, 0x84, 0x36, 0x17, 0xd6, 0x4b, 0xaa, 0x57, - 0xab, 0xb3, 0x45, 0x30, 0x36, 0x10, 0xd4, 0xee, 0x8a, 0xc9, - 0x29, 0xd1, 0x92, 0x9b, 0xe2, 0x7c, 0x12, 0xd1, 0x29, 0x62, - 0x41, 0x69, 0xae, 0x3a, 0x50, 0xcc, 0x89, 0x50, 0x2e, 0xe6, - 0x07, 0xf8, 0x9c, 0x98, 0x80, 0xd5, 0xa3, 0xc8, 0x74, 0xfb, - 0xfc, 0x91, 0x16, 0x02, 0xdc, 0xf0, 0x42, 0x49, 0xbc, 0xc9, - 0x2f, 0x7f, 0x8d, 0x93, 0xf7, 0xf0, 0x74, 0xb7, 0xd1, 0x55, - 0xfc, 0x79, 0x03, 0x37, 0xfb, 0xf6, 0x7d, 0x2f, 0x2d, 0xf8, - 0x6b, 0xc5, 0xf9, 0x66, 0x38, 0xf5, 0xfd, 0x64, 0xc6, 0x08, - 0x99, 0xb3, 0x25, 0xad, 0xf4, 0xfd, 0x69, 0x2f, 0xf1, 0x18, - 0x46, 0xd6, 0x5c, 0x1a, 0x37, 0xcd, 0xee, 0xa3, 0xbf, 0x0f, - 0x57, 0x5c, 0xc3, 0x97, 0x94, 0x84, 0x89, 0xbe, 0x00, 0xf6, - 0x40, 0xe9, 0x5a, 0x52, 0xaf, 0x3a, 0x5b, 0xf4, 0x56, 0xb0, - 0x04, 0x49, 0xc6, 0x32, 0x8c, 0xa1, 0x0a, 0xd8, 0x88, 0xa1, - 0xc3, 0xb7, 0x8b, 0x96, 0xc3, 0x39, 0x51, 0x50, 0x83, 0xa6, - 0xf0, 0x6d, 0xe7, 0x6e, 0x20, 0xff, 0x9d, 0xac, 0x03, 0x57, - 0xbc, 0xcb, 0x6a, 0x19, 0xa7, 0xc5, 0xd2, 0x44, 0x4f, 0x17, - 0x1e, 0x9a, 0x8d, 0x97, 0x25, 0x55, 0x52, 0x49, 0xe2, 0x48, - 0xae, 0x4b, 0x3f, 0x94, 0x5a, 0xb2, 0x2d, 0x40, 0xd9, 0x85, - 0xef, 0x03, 0xa0, 0xd3, 0x66, 0x9a, 0x8f, 0x7b, 0xc0, 0x8d, - 0x54, 0x95, 0x42, 0x49, 0xeb, 0x15, 0x00, 0xf3, 0x6d, 0x6f, - 0x40, 0xf2, 0x8b, 0xc1, 0x50, 0xa6, 0x22, 0x3b, 0xd6, 0x88, - 0xa1, 0xf7, 0xb0, 0x1f, 0xcd, 0x20, 0x4e, 0x5b, 0xad, 0x66, - 0x4a, 0xda, 0x40, 0xee, 0x4c, 0x4c, 0x3e, 0xa7, 0x75, 0x51, - 0x90, 0xba, 0xee, 0x59, 0xbc, 0xe3, 0xcd, 0x4d, 0xb9, 0x57, - 0xb7, 0xf8, 0xc1, 0xb9, 0x8d, 0x0f, 0x58, 0x2c, 0x4c, 0x98, - 0xa6, 0x9c, 0xd9, 0x0e, 0x25, 0x4f, 0xea, 0x4c, 0x15, 0x0b, - 0x89, 0xe4, 0xac, 0xa1, 0x5a, 0xa1, 0xfd, 0x5b, 0xc6, 0xfe, - 0xf0, 0xf1, 0x4c, 0xa7, 0x60, 0xbc, 0xc3, 0xa5, 0x80, 0x00, - 0x3b, 0x3f, 0x22, 0x38, 0x60, 0x40, 0x76, 0x52, 0x83, 0x32, - 0xee, 0x20, 0x6a, 0xf9, 0x1e, 0x6b, 0x99, 0x52, 0xe7, 0x04, - 0xdc, 0x5a, 0x9d, 0x77, 0x8a, 0xdd, 0x9b, 0x53, 0x19, 0xff, - 0x69, 0x8c, 0xbc, 0xc6, 0xe0, 0x79, 0x0d, 0x3d, 0x3d, 0x54, - 0x5b, 0xe0, 0x47, 0x5b, 0x71, 0x05, 0x98, 0x8f, 0xbb, 0x65, - 0xe1, 0x31, 0x9a, 0xc8, 0x1e, 0x7a, 0x4a, 0xf8, 0xcb, 0x17, - 0xd1, 0x83, 0x58, 0xb1, 0xc0, 0xe4, 0xb1, 0x85, 0xca, 0xa5, - 0xf8, 0x0e, 0xd1, 0x0c, 0xe8, 0x71, 0xc3, 0xfa, 0xbf, 0x1d, - 0xd6, 0x98, 0x03, 0xed, 0x77, 0x3b, 0x55, 0xaf, 0x69, 0x72, - 0x6b, 0x42, 0x31, 0x98, 0x95, 0xd5, 0x79, 0xa5, 0x4c, 0x51, - 0xcf, 0x02, 0x65, 0x93, 0xf2, 0x71, 0xdc, 0xde, 0x9a, 0xa3, - 0x86, 0xa7, 0xea, 0xcf, 0xd7, 0xe5, 0x00, 0xde, 0x40, 0x02, - 0xcd, 0x6b, 0x46, 0x0b, 0xbb, 0xbf, 0x77, 0x5f, 0x9d, 0x7c, - 0xa4, 0x7f, 0x7c, 0x8a, 0xba, 0xd6, 0x99, 0xc5, 0xaa, 0x06, - 0x36, 0xe1, 0x7e, 0x9c, 0x6f, 0x28, 0xd4, 0x6e, 0x1d, 0x5b, - 0xdd, 0x01, 0x24, 0xbd, 0x6c, 0x5d, 0x87, 0x3c, 0xc1, 0xf6, - 0x93, 0x37, 0xe2, 0x3b, 0x70, 0xc4, 0xd8, 0x10, 0x0e, 0x44, - 0x37, 0x00, 0xe3, 0x07, 0xbd, 0x67, 0xd3, 0x9d, 0xe6, 0xe7, - 0x48, 0x1b, 0xe0, 0x79, 0xb3, 0x30, 0x91, 0x89, 0x0f, 0x89, - 0x77, 0xfa, 0x13, 0x85, 0xd0, 0x32, 0xbd, 0xc1, 0x9e, 0x52, - 0x04, 0x80, 0x54, 0xb1, 0x08, 0x39, 0x20, 0xda, 0x3e, 0xf1, - 0xd9, 0x15, 0x74, 0x55, 0x06, 0xfc, 0x4d, 0x85, 0xd4, 0x98, - 0x02, 0x64, 0x10, 0x86, 0xd7, 0xcd, 0x01, 0x0d, 0x85, 0xa0, - 0x78, 0xb0, 0x58, 0x99, 0x7b, 0xdf, 0xe4, 0x8c, 0x3f, 0xab, - 0xc0, 0xbc, 0xa5, 0x30, 0x28, 0xe1, 0x4e, 0x02, 0x98, 0xab, - 0x03, 0xf3, 0x21, 0xe7, 0xa7, 0xe7, 0xc3, 0x5f, 0x98, 0xc0, - 0x83, 0x02, 0xe8, 0x8a, 0x30, 0x75, 0x95, 0xcf, 0x77, 0x83, - 0xfb, 0x32, 0x5a, 0xf9, 0x13, 0xed, 0xdb, 0xda, 0xc3, 0x84, - 0x4b, 0x8f, 0x1a, 0xf0, 0xad, 0x8e, 0xcf, 0xe3, 0xa7, 0x2b, - 0xb5, 0x44, 0x75, 0xd6, 0xda, 0x33, 0x81, 0x22, 0xa7, 0x6a, - 0xbd, 0x21, 0x64, 0x85, 0xfa, 0x65, 0x8e, 0xc4, 0x58, 0xec, - 0xc4, 0x18, 0x90, 0xa3, 0xcc, 0x2e, 0xaa, 0xa2, 0x2e, 0x46, - 0x7a, 0x4a, 0x35, 0xbf, 0x58, 0x78, 0x2b, 0x1e, 0x72, 0xe5, - 0x80, 0xc9, 0xe0, 0x9e, 0x43, 0x01, 0xcc, 0xe1, 0x0c, 0x00, - 0xe9, 0xc1, 0xa5, 0x1a, 0x9b, 0x4e, 0x6e, 0x34, 0x32, 0xfd, - 0x86, 0xb7, 0xae, 0xc3, 0x6e, 0x69, 0x04, 0xf6, 0x6a, 0x92, - 0x78, 0xb1, 0x1f, 0x9d, 0x5e, 0x0c, 0xf9, 0xc4, 0x1a, 0xf6, - 0xb4, 0x8a, 0x63, 0xb5, 0x87, 0x5b, 0xfb, 0x50, 0xbf, 0xd5, - 0x17, 0x97, 0x8e, 0x55, 0x1c, 0xfe, 0x82, 0xf6, 0xa7, 0x9c, - 0x0b, 0xc9, 0x0a, 0xf6, 0x7f, 0x70, 0xd1, 0x00, 0xed, 0x1c, - 0x6c, 0x3a, 0x95, 0xed, 0x61, 0xa4, 0xd6, 0x57, 0xfb, 0x57, - 0xf8, 0x9b, 0x4c, 0xce, 0x50, 0x26, 0x5c, 0x19, 0xd2, 0xa7, - 0xd6, 0xe8, 0x3c, 0x29, 0x34, 0xfb, 0x26, 0x7f, 0xc5, 0x78, - 0xbf, 0xfe, 0xb6, 0x2a, 0x5a, 0x62, 0x8e, 0x31, 0x9b, 0x57, - 0xa4, 0xe7, 0x4d, 0x3d, 0x18, 0x05, 0xf0, 0x94, 0xbb, 0x04, - 0xfa, 0x0a, 0x92, 0xf4, 0xc6, 0x7f, 0x16, 0xa2, 0x31, 0xed, - 0xc1, 0xb4, 0x62, 0x54, 0x3a, 0x23, 0x12, 0x6a, 0x76, 0xcc, - 0x8c, 0x91, 0x89, 0x58, 0x8c, 0x20, 0x23, 0xd9, 0xaa, 0x0d, - 0x80, 0xbe, 0xb9, 0xb4, 0x40, 0x1e, 0xff, 0xa9, 0xf7, 0x71, - 0x0a, 0xa0, 0x0a, 0xdf, 0x11, 0x0b, 0x66, 0x3f, 0xf2, 0x4d, - 0x5d, 0x39, 0x7c, 0x77, 0xe1, 0xb1, 0x09, 0xa1, 0x6b, 0x2e, - 0x30, 0x43, 0x33, 0x80, 0x6e, 0x6a, 0x1d, 0x47, 0xd9, 0xd6, - 0xac, 0xdc, 0x3f, 0x16, 0xb1, 0x58, 0x11, 0x9f, 0x67, 0xd7, - 0x15, 0x45, 0xd8, 0xc3, 0x69, 0x24, 0x8d, 0xac, 0xff, 0xc3, - 0x43, 0xfd, 0x24, 0xaf, 0xf1, 0xc8, 0x3a, 0xc7, 0xd6, 0x1f, - 0x56, 0x26, 0x16, 0xe6, 0x30, 0xcd, 0x6e, 0x0a, 0x63, 0x2a, - 0x7b, 0x86, 0xd7, 0x65, 0x39, 0x45, 0x7c, 0xe6, 0xa0, 0xe6, - 0x38, 0xed, 0x54, 0x84, 0x00, 0x4d, 0x8e, 0xc2, 0xba, 0x56, - 0x9b, 0xf3, 0xe1, 0xe8, 0x7d, 0xfe, 0x47, 0xf0, 0x58, 0xe7, - 0x59, 0x60, 0x97, 0x2e, 0x57, 0x1a, 0x09, 0x1f, 0x8b, 0x2b, - 0x0b, 0x47, 0x75, 0xc0, 0xb3, 0x79, 0xce, 0x10, 0x47, 0x6d, - 0xfc, 0xcb, 0x22, 0x61, 0x5c, 0x39, 0xc4, 0x3f, 0xc5, 0xef, - 0xb8, 0xc8, 0x88, 0x52, 0xce, 0x90, 0x17, 0xf5, 0x3c, 0xa9, - 0x87, 0x6f, 0xcb, 0x2f, 0x11, 0x53, 0x65, 0x9b, 0x74, 0x21, - 0x3e, 0xdd, 0x7b, 0x1f, 0x19, 0x9f, 0x53, 0xe6, 0xab, 0xc0, - 0x56, 0xba, 0x80, 0x19, 0x5d, 0x3f, 0xc7, 0xe2, 0xfb, 0x8c, - 0xe2, 0x93, 0xe0, 0x31, 0xc9, 0x33, 0x31, 0x23, 0x31, 0xa1, - 0x36, 0x4c, 0x62, 0xd8, 0x0a, 0xfd, 0x85, 0x97, 0xae, 0xa9, - 0xe9, 0x58, 0x29, 0x17, 0x33, 0x09, 0x5a, 0x8e, 0xa3, 0x90, - 0x41, 0xd3, 0xfc, 0x24, 0x98, 0x61, 0x4d, 0x30, 0x1f, 0x76, - 0x8f, 0xfc, 0xd0, 0x96, 0x8b, 0x2e, 0x9b, 0x24, 0x73, 0x35, - 0x00, 0xb7, 0xf6, 0xe8, 0xba, 0xec, 0x98, 0x74, 0x41, 0xa4, - 0x47, 0x10, 0x0d, 0xbc, 0xba, 0xd1, 0xe7, 0xdb, 0x12, 0xcb, - 0x5f, 0x02, 0xb1, 0xa6, 0xa0, 0xd7, 0x28, 0x30, 0x3e, 0x0a, - 0x5c, 0x5f, 0xe6, 0x2f, 0x3c, 0xde, 0x46, 0x60, 0xaf, 0x07, - 0x5f, 0xed, 0x08, 0xc0, 0x06, 0x58, 0xba, 0xd7, 0x36, 0x5b, - 0xa0, 0x4a, 0xf7, 0xa1, 0x05, 0x9b, 0x00, 0xda, 0x49, 0xdc, - 0xbf, 0xea, 0xe1, 0x03, 0xda, 0x95, 0x95, 0xa0, 0xfa, 0x2e, - 0xf1, 0x60, 0x11, 0x47, 0xdd, 0xb3, 0xfb, 0x0b, 0xa2, 0x92, - 0xcf, 0x73, 0xbb, 0xce, 0x82, 0x71, 0xbc, 0xbd, 0x50, 0x64, - 0xf1, 0x96, 0x48, 0x48, 0x93, 0xf8, 0xdc, 0x1c, 0x18, 0x12, - 0xc6, 0x17, 0x6a, 0xa9, 0xc1, 0x4d, 0x6f, 0x76, 0xda, 0x2f, - 0x4e, 0x59, 0xdd, 0x8b, 0x1c, 0xa5, 0x30, 0xb6, 0xe9, 0x88, - 0x8f, 0x75, 0x0c, 0xcd, 0xd8, 0x61, 0xf4, 0x28, 0xc5, 0x9a, - 0xcd, 0x77, 0x0d, 0x36, 0x5f, 0x75, 0xa5, 0x0a, 0x77, 0x20, - 0x28, 0x5a, 0xac, 0x5f, 0xa1, 0x83, 0x67, 0x70, 0xb7, 0xd8, - 0x23, 0x48, 0x60, 0xa8, 0xd0, 0xaf, 0xee, 0x7a, 0xb8, 0x25, - 0xd7, 0x8f, 0x82, 0x8c, 0xd0, 0x81, 0x7a, 0x49, 0x69, 0xe4, - 0x22, 0x73, 0x29, 0x48, 0xc8, 0x09, 0x72, 0x16, 0xf8, 0x3d, - 0xff, 0x13, 0xac, 0x98, 0x03, 0x76, 0x33, 0xcb, 0x19, 0xb0, - 0x22, 0x5b, 0x1e, 0x16, 0x29, 0xb9, 0xcc, 0xa6, 0x92, 0xd8, - 0xed, 0x93, 0x0f, 0xbd, 0x10, 0x98, 0x53, 0x0a, 0x07, 0x7f, - 0xd6, 0x51, 0x76, 0xda, 0xdc, 0x0c, 0xeb, 0x2a, 0x95, 0xd0, - 0x3e, 0xa6, 0xc4, 0xc6, 0xd8, 0xfb, 0x1b, 0x2a, 0x7f, 0xf1, - 0x08, 0xbe, 0xd3, 0xed, 0x67, 0x63, 0x5f, 0x1d, 0x29, 0xdb, - 0x47, 0x03, 0x4a, 0xf4, 0x6b, 0xb4, 0x46, 0x02, 0x28, 0x4f, - 0x88, 0x9b, 0x46, 0x66, 0x40, 0x56, 0x34, 0x4c, 0xec, 0x8e, - 0x0b, 0x5d, 0x14, 0x94, 0x91, 0xfc, 0xdc, 0x0c, 0xdc, 0x5b, - 0x45, 0x12, 0x7e, 0xa1, 0xe9, 0x75, 0x38, 0xcb, 0xd3, 0x6b, - 0xd7, 0xa4, 0x24, 0x94, 0x78, 0x09, 0x7f, 0x77, 0xc8, 0x6d, - 0xe1, 0x82, 0x1c, 0x1c, 0x91, 0xc6, 0x38, 0x9e, 0x3b, 0x3d, - 0x31, 0xdd, 0x9e, 0x46, 0x58, 0x7a, 0x42, 0x16, 0x6f, 0xfd, - 0x7d, 0x8c, 0xf5, 0xf0, 0x9f, 0x92, 0x6e, 0xbe, 0x47, 0xa6, - 0x1e, 0x8e, 0x82, 0x15, 0x24, 0xc3, 0x1b, 0xb0, 0xd1, 0x68, - 0xf9, 0xd1, 0x7c, 0x60, 0x98, 0x86, 0xd9, 0x53, 0xa2, 0x38, - 0x62, 0xf4, 0x72, 0x71, 0xcb, 0xb9, 0x35, 0xef, 0xb9, 0x49, - 0x3a, 0x73, 0xb2, 0xd7, 0x0f, 0x90, 0xf5, 0x2c, 0x5b, 0xf5, - 0xfd, 0x39, 0x17, 0xf7, 0xe4, 0x69, 0x81, 0x0f, 0x6b, 0xe7, - 0x32, 0xd2, 0xdc, 0x5d, 0x40, 0xbf, 0x41, 0x95, 0x89, 0x81, - 0x29, 0x80, 0x40, 0xa3, 0xac, 0xd2, 0xc7, 0xf7, 0xe8, 0xd0, - 0x45, 0xed, 0x48, 0x43, 0x3a, 0xed, 0x8d, 0xef, 0x37, 0xe1, - 0x24, 0x9a, 0x67, 0x9a, 0x6b, 0x71, 0x4f, 0x9a, 0xb9, 0x2c, - 0x1b, 0x10, 0x48, 0xe2, 0x31, 0x1e, 0xbb, 0xf2, 0x4a, 0xad, - 0x04, 0xc7, 0xd7, 0xf2, 0xe8, 0x83, 0x5f, 0xe8, 0xa2, 0x81, - 0x95, 0xf9, 0x60, 0x51, 0x9c, 0x99, 0x76, 0x69, 0x76, 0x4e, - 0xbd, 0x44, 0x52, 0x36, 0xca, 0xd8, 0x6e, 0xf7, 0x1a, 0xa1, - 0x54, 0xdf, 0x90, 0x52, 0x94, 0xb6, 0x3a, 0xcb, 0x43, 0x56, - 0x11, 0xde, 0xa0, 0xe1, 0x45, 0x8a, 0x80, 0x2d, 0xaf, 0x1f, - 0x24, 0x3f, 0x80, 0x17, 0x1f, 0x28, 0xbb, 0xcc, 0x1a, 0xd2, - 0x2d, 0xa6, 0x9e, 0xe0, 0xdc, 0xf0, 0x98, 0x16, 0x58, 0x88, - 0xc6, 0xf1, 0x81, 0x71, 0x91, 0x8f, 0xa2, 0xab, 0xa5, 0xe6, - 0x68, 0x1f, 0xa5, 0x86, 0xb5, 0xd9, 0x05, 0xba, 0x50, 0x67, - 0x0b, 0x1e, 0xfe, 0x42, 0x50, 0xf8, 0x01, 0xf8, 0x38, 0x92, - 0x57, 0x86, 0x08, 0x47, 0xee, 0x23, 0x11, 0x60, 0x61, 0x1a, - 0x77, 0x3c, 0x1a, 0x8e, 0x08, 0xe3, 0xaf, 0x84, 0x04, 0x75, - 0x15, 0x47, 0x7a, 0x83, 0x8e, 0x92, 0x3e, 0xe8, 0xf0, 0xc2, - 0x81, 0x89, 0x3b, 0x73, 0x81, 0xe5, 0xe8, 0x97, 0x97, 0x63, - 0x64, 0xf3, 0xa9, 0x1b, 0x61, 0x65, 0x7f, 0x0e, 0x47, 0x6b, - 0x14, 0x57, 0x29, 0x8f, 0x91, 0x35, 0x43, 0x10, 0x12, 0x86, - 0x99, 0xec, 0xc8, 0x9e, 0x67, 0x90, 0x20, 0x21, 0x3c, 0x83, - 0xdb, 0x73, 0x4e, 0x8e, 0x7d, 0x86, 0xde, 0xb8, 0xd8, 0xfa, - 0x23, 0x1f, 0x5a, 0xe4, 0xc7, 0x0c, 0x1d, 0x5e, 0xd1, 0x10, - 0x58, 0xd5, 0x86, 0xfa, 0x40, 0x30, 0x0a, 0x78, 0x0a, 0xa5, - 0x56, 0xd5, 0xe6, 0x86, 0xd4, 0x14, 0x77, 0x32, 0xcd, 0x07, - 0xf9, 0xbe, 0x7a, 0xd8, 0xbc, 0x91, 0xe0, 0xda, 0x76, 0x6b, - 0x97, 0x10, 0xda, 0xea, 0x27, 0xa2, 0x67, 0x6d, 0x94, 0x27, - 0x6e, 0xea, 0xca, 0x56, 0x45, 0x32, 0x1d, 0x38, 0x12, 0x21, - 0x33, 0x2c, 0x3c, 0x5c, 0x33, 0xb0, 0x9e, 0x80, 0x0b, 0x4e, - 0xbb, 0x09, 0x5e, 0x56, 0x54, 0xb0, 0x9b, 0x7e, 0xb6, 0x00, - 0xe8, 0x63, 0x19, 0x85, 0xf1, 0x4d, 0x65, 0x9d, 0x1f, 0x8d, - 0x18, 0xcc, 0x63, 0xc6, 0xd9, 0xa6, 0xbc, 0xe7, 0x42, 0x55, - 0x12, 0xdc, 0x8c, 0x26, 0x2d, 0x8d, 0xc2, 0xe9, 0x3b, 0xbc, - 0xed, 0x06, 0x08, 0x31, 0xb0, 0xe0, 0x99, 0xe2, 0x86, 0x81, - 0x88, 0x4a, 0xac, 0x1f, 0x4a, 0xb2, 0x1e, 0x1e, 0x4c, 0xb2, - 0x9f, 0x27, 0xa0, 0xd9, 0x8a, 0x7e, 0xe7, 0xa3, 0xad, 0xeb, - 0x2c, 0xfd, 0x14, 0xc6, 0x4b, 0x26, 0xce, 0x38, 0xb9, 0x01, - 0x9e, 0xde, 0xc8, 0x7b, 0x82, 0x2f, 0xaa, 0x72, 0x80, 0xbe, - 0x3a, 0x35, 0x95, 0xc8, 0xf3, 0x7c, 0x36, 0x68, 0x02, 0xdc, - 0xa2, 0xda, 0xef, 0xd7, 0xf1, 0x3e, 0x81, 0xb3, 0x5d, 0x2f, - 0xcf, 0x7e, 0xe6, 0x9c, 0xa0, 0x32, 0x29, 0x8b, 0x52, 0x24, - 0xbd, 0x0d, 0x36, 0xdc, 0x1d, 0xcc, 0x6a, 0x0a, 0x74, 0x52, - 0x1b, 0x68, 0x4d, 0x15, 0x05, 0x47, 0xe1, 0x2f, 0x97, 0x45, - 0x52, 0x17, 0x4b, 0x2a, 0x3b, 0x74, 0xc5, 0x20, 0x35, 0x5c, - 0x37, 0xae, 0xe6, 0xa7, 0x24, 0x0f, 0x34, 0x70, 0xea, 0x7c, - 0x03, 0xa3, 0xde, 0x2d, 0x22, 0x55, 0x88, 0x01, 0x45, 0xf2, - 0x5f, 0x1f, 0xaf, 0x3b, 0xb1, 0xa6, 0x5d, 0xcd, 0x93, 0xfb, - 0xf8, 0x2f, 0x87, 0xcc, 0x26, 0xc5, 0x36, 0xde, 0x06, 0x9b, - 0xe9, 0xa7, 0x66, 0x7e, 0x8c, 0xcd, 0x99, 0x6b, 0x51, 0x1c, - 0xb0, 0xa0, 0xfa, 0xc7, 0x46, 0xfe, 0x65, 0xe4, 0x80, 0x5b, - 0x5f, 0x24, 0x3b, 0xa4, 0xe6, 0x81, 0x31, 0xe5, 0x87, 0x2c, - 0xa4, 0x83, 0xaf, 0x8b, 0x9f, 0x89, 0xb4, 0x3c, 0x7a, 0xbe, - 0x4c, 0xb3, 0xbf, 0x3d, 0xec, 0x78, 0xb0, 0x8a, 0xdd, 0xc8, - 0x43, 0x8c, 0x45, 0xa1, 0xa3, 0x3a, 0x82, 0x7d, 0x06, 0xdf, - 0x20, 0x27, 0x9b, 0x4e, 0x09, 0x90, 0x6a, 0x23, 0xbf, 0x1b, - 0x04, 0x1d, 0x50, 0xe2, 0xb4, 0xff, 0xe0, 0xd0, 0x9b, 0x40, - 0x2b, 0xc0, 0x52, 0xc1, 0x39, 0x29, 0x60, 0x83, 0x06, 0x9b, - 0x48, 0xb8, 0xa7, 0xe1, 0x2b, 0xfb, 0xf0, 0x2b, 0x82, 0xf1, - 0xda, 0xc9, 0x30, 0x47, 0x3f, 0xf5, 0xf9, 0xf7, 0x6c, 0xf0, - 0x0f, 0xe7, 0xb1, 0x4d, 0x46, 0x49, 0xf8, 0xb3, 0xe1, 0xfe, - 0x85, 0x61, 0xcc, 0xf7, 0xfa, 0xd2, 0xf1, 0xbc, 0xf0, 0x7f, - 0x3b, 0xe6, 0x45, 0xa2, 0x1b, 0x55, 0xf6, 0x0c, 0x02, 0x95, - 0xdc, 0x78, 0x94, 0xa0, 0xc4, 0x6a, 0x21, 0x7e, 0xa8, 0x5f, - 0xbd, 0xc3, 0xb3, 0x4d, 0x9b, 0x30, 0x31, 0x1d, 0x5b, 0x8b, - 0x45, 0x3c, 0x18, 0xe9, 0x61, 0xe8, 0x76, 0x3e, 0x91, 0xd2, - 0xfd, 0x1a, 0xd7, 0x30, 0x4d, 0xfe, 0xef, 0x7f, 0xc0, 0x7e, - 0x45, 0x43, 0xe9, 0xf9, 0x23, 0xfe, 0xd8, 0xef, 0xbc, 0xd6, - 0x99, 0x79, 0x54, 0xed, 0x7a, 0x8b, 0x39, 0xa6, 0xe7, 0x9d, - 0x3f, 0x9f, 0x35, 0xe1, 0xe4, 0xd5, 0x26, 0x31, 0x3a, 0x44, - 0x03, 0x79, 0xde, 0xdc, 0x29, 0x1e, 0x8e, 0x26, 0x41, 0xc6, - 0x60, 0xaa, 0xfd, 0xe1, 0x5e, 0xa6, 0xc0, 0x2f, 0x90, 0x1e, - 0x3b, 0xc1, 0xe6, 0xf6, 0xde, 0x60, 0x87, 0x57, 0x51, 0x11, - 0x6a, 0x8e, 0x9d, 0x70, 0x9d, 0x6d, 0x36, 0x21, 0x05, 0x55, - 0xc1, 0x56, 0x9b, 0xc9, 0x91, 0x50, 0x3e, 0xb4, 0xbd, 0x19, - 0x53, 0x44, 0x99, 0xc7, 0xb8, 0xce, 0xce, 0x86, 0x06, 0x5d, - 0x99, 0x85, 0x33, 0xd4, 0x16, 0x21, 0x4a, 0xe9, 0x7e, 0x2e, - 0xcc, 0x7e, 0x3f, 0xc1, 0x47, 0x3b, 0x32, 0xd0, 0x57, 0x1c, - 0xc2, 0x26, 0x67, 0xf0, 0xd9, 0xc4, 0x9e, 0xbb, 0x65, 0xa4, - 0xf7, 0xf7, 0x8d, 0x7d, 0x08, 0xd4, 0x9c, 0x1e, 0x0f, 0xb9, - 0xff, 0x24, 0x2f, 0xaf, 0xfa, 0x24, 0x26, 0xb7, 0xb1, 0x78, - 0xc1, 0xd1, 0xfe, 0x85, 0x55, 0xa0, 0x86, 0x77, 0xf6, 0xc2, - 0xe0, 0x12, 0xe4, 0x45, 0x85, 0xd0, 0xe7, 0x68, 0xf0, 0x31, - 0x4c, 0x9c, 0xb0, 0x5f, 0x89, 0xca, 0xfe, 0xc2, 0xf0, 0x1e, - 0xeb, 0xee, 0x75, 0x64, 0xea, 0x09, 0xd4, 0x1c, 0x72, 0x12, - 0xd4, 0x31, 0xf0, 0x89, 0x71, 0x74, 0x6e, 0x01, 0x32, 0xca, - 0x8a, 0x91, 0x0c, 0xdf, 0xd7, 0x05, 0xe9, 0x35, 0xed, 0x06, - 0x1a, 0x17, 0x5a, 0xf3, 0x65, 0xc5, 0xbd, 0x37, 0xf2, 0x53, - 0x49, 0x2f, 0xcd, 0xc6, 0x15, 0xb3, 0x36, 0x88, 0xd8, 0x7a, - 0x2f, 0xfa, 0x21, 0x7f, 0x55, 0x20, 0xc6, 0xf4, 0x23, 0x59, - 0x6b, 0x3c, 0xeb, 0xe5, 0xd3, 0x78, 0xdc, 0x31, 0xeb, 0x87, - 0x86, 0x3d, 0x7c, 0x10, 0x64, 0x66, 0xa4, 0xad, 0x07, 0xe1, - 0x93, 0x15, 0x07, 0x4c, 0xe4, 0xb4, 0x4a, 0x06, 0xca, 0x2a, - 0x50, 0xa2, 0x85, 0xc6, 0xa1, 0x19, 0x89, 0x7f, 0x8a, 0x05, - 0x00, 0x23, 0x72, 0x5f, 0x89, 0x74, 0x8e, 0x22, 0xa1, 0x5d, - 0x26, 0xf9, 0xfe, 0xdf, 0x6d, 0x98, 0x3a, 0xc4, 0x7c, 0x93, - 0xcf, 0xc4, 0xfe, 0xed, 0x98, 0xb0, 0x31, 0x4c, 0x81, 0x83, - 0x0d, 0x5d, 0x3d, 0x0c, 0x27, 0x4e, 0xca, 0xcf, 0x38, 0x0c, - 0x37, 0xb0, 0xf8, 0xc5, 0xc8, 0x52, 0x14, 0xec, 0x53, 0x80, - 0xb9, 0xd8, 0x8a, 0x05, 0x4e, 0x31, 0x3d, 0x67, 0x57, 0xf0, - 0x7a, 0xa2, 0xc5, 0xc9, 0x02, 0x25, 0x69, 0x83, 0xb9, 0x3e, - 0x1b, 0x04, 0xbf, 0xb2, 0xe6, 0x97, 0x7a, 0x6b, 0x8e, 0x37, - 0x77, 0x2e, 0x16, 0x8b, 0x33, 0xe1, 0xea, 0x2b, 0x30, 0x01, - 0x6e, 0xa0, 0x28, 0x14, 0x17, 0xe9, 0x98, 0xa8, 0x89, 0x72, - 0x68, 0x64, 0x81, 0x60, 0xa8, 0xf7, 0x72, 0xdf, 0x1a, 0xae, - 0xf5, 0xf0, 0x9f, 0x69, 0x35, 0xbc, 0x58, 0x27, 0x38, 0xd6, - 0x7f, 0x7a, 0xd4, 0xc4, 0xf1, 0xcf, 0xee, 0x59, 0x49, 0x31, - 0xda, 0xc1, 0x08, 0x46, 0x65, 0x68, 0xe9, 0x44, 0x18, 0x2b, - 0xf2, 0x2a, 0x13, 0x60, 0x07, 0xae, 0xe4, 0x96, 0xdb, 0x0a, - 0x6f, 0x52, 0x23, 0x9a, 0xcf, 0x9d, 0xa4, 0xc5, 0xc1, 0x74, - 0xa8, 0x0e, 0xe1, 0x5e, 0xfa, 0xa4, 0x06, 0x9c, 0x2e, 0x70, - 0x08, 0x22, 0x25, 0x4f, 0xc1, 0xf1, 0x13, 0x5a, 0x66, 0xa0, - 0x6c, 0x59, 0xa3, 0xfc, 0x03, 0x9c, 0x8a, 0x23, 0x01, 0x00, - 0xa9, 0x49, 0xf0, 0x22, 0xa3, 0x8f, 0x6c, 0xef, 0xcb, 0x69, - 0x06, 0x3a, 0x69, 0x99, 0x96, 0xd2, 0xa7, 0xa0, 0x0b, 0x7e, - 0x44, 0x7d, 0x04, 0xff, 0x7e, 0x9e, 0x1e, 0x77, 0xa0, 0x30, - 0xd1, 0xdf, 0x18, 0xe4, 0xd8, 0xa5, 0x64, 0xbe, 0x8c, 0x80, - 0x28, 0xe2, 0x98, 0x5e, 0xec, 0x9e, 0xb1, 0x0a, 0xb5, 0x25, - 0xaa, 0xb8, 0x0f, 0x78, 0x30, 0x48, 0x06, 0xe5, 0x76, 0xf9, - 0x24, 0x96, 0x87, 0x2a, 0x91, 0x89, 0xb6, 0xce, 0x04, 0xdf, - 0xfc, 0x13, 0x42, 0x19, 0xba, 0x14, 0x46, 0x20, 0x08, 0x47, - 0xe1, 0x82, 0x57, 0x51, 0x74, 0x3b, 0x5b, 0x23, 0x5c, 0xb2, - 0x85, 0x8c, 0xed, 0xe6, 0xda, 0x4d, 0x56, 0xe8, 0x61, 0x31, - 0xec, 0x97, 0x27, 0xeb, 0xf2, 0xa7, 0x7c, 0x13, 0x1b, 0xc5, - 0x44, 0xfe, 0x63, 0x4b, 0x2b, 0x33, 0x22, 0x23, 0x60, 0x86, - 0x7c, 0x3b, 0x57, 0xba, 0x16, 0xde, 0x47, 0x04, 0x3e, 0x2b, - 0xe5, 0xbd, 0x23, 0xa0, 0xab, 0xdf, 0x5d, 0x6e, 0x20, 0xb1, - 0x37, 0x44, 0xcb, 0xbd, 0x03, 0xa9, 0x5c, 0xe6, 0x92, 0x5e, - 0x2f, 0x6f, 0x95, 0xc6, 0x5b, 0x6d, 0xab, 0x39, 0xdd, 0x1e, - 0x34, 0xd5, 0x21, 0xca, 0x92, 0xee, 0x59, 0xf0, 0xb9, 0x65, - 0xe6, 0x81, 0x49, 0xf8, 0x11, 0xec, 0x45, 0x14, 0x6a, 0x19, - 0xb4, 0xce, 0xbf, 0x9e, 0xf7, 0x32, 0x8d, 0x99, 0x78, 0xc3, - 0x07, 0x3d, 0xfd, 0x18, 0x2d, 0x0e, 0x06, 0x2f, 0x27, 0x24, - 0x6f, 0x16, 0xd8, 0x01, 0x33, 0xc8, 0xbb, 0x7f, 0x7d, 0xfa, - 0x73, 0xf6, 0x7d, 0x54, 0xf2, 0xd4, 0x8a, 0x53, 0xe1, 0x62, - 0x45, 0xf4, 0x01, 0xa6, 0x31, 0x6b, 0x3a, 0x06, 0x56, 0xfd, - 0x79, 0x7f, 0x58, 0xd8, 0x47, 0x33, 0x53, 0xc5, 0x78, 0x70, - 0xce, 0x81, 0x7f, 0x66, 0xa1, 0x58, 0x7c, 0x5a, 0xdb, 0x4a, - 0xad, 0x29, 0xff, 0x93, 0x75, 0x95, 0x35, 0xa9, 0xd2, 0xb1, - 0xeb, 0xa0, 0x4f, 0x10, 0x0a, 0xc9, 0x38, 0x69, 0xc8, 0x8d, - 0x57, 0xef, 0x99, 0x0f, 0xa5, 0x69, 0x86, 0xa6, 0xfb, 0x2b, - 0x37, 0xe4, 0xc7, 0xab, 0x3e, 0xcd, 0x8f, 0x3f, 0x93, 0x8c, - 0x0b, 0xc4, 0x4d, 0x16, 0xe0, 0xb0, 0x94, 0x5a, 0x0d, 0x17, - 0xaf, 0x6e, 0x4b, 0x2e, 0x18, 0x29, 0x0e, 0xe0, 0xf5, 0x72, - 0x1a, 0x21, 0x37, 0xef, 0x7d, 0x6a, 0x39, 0xe9, 0xa8, 0xd7, - 0x96, 0xd6, 0xb3, 0x7d, 0x83, 0x0c, 0x13, 0x30, 0x49, 0x03, - 0xe8, 0x6b, 0xe6, 0x77, 0xe8, 0x69, 0x48, 0x56, 0x5f, 0x39, - 0x63, 0xbc, 0x86, 0xa8, 0x26, 0xa1, 0xbd, 0x4b, 0x24, 0xbd, - 0xdd, 0xe8, 0x02, 0x64, 0xcb, 0xae, 0x24, 0x17, 0x62, 0xbd, - 0x27, 0xa7, 0x22, 0x60, 0x51, 0x0c, 0x53, 0xff, 0x9d, 0x63, - 0x1b, 0xf9, 0xff, 0x76, 0x3b, 0x74, 0x05, 0x98, 0x46, 0x0b, - 0xe8, 0xcb, 0xd4, 0x0a, 0xcd, 0x91, 0xdb, 0x5b, 0x21, 0x4d, - 0xa1, 0x87, 0xbd, 0xb7, 0x58, 0xec, 0x28, 0x00, 0x92, 0xc2, - 0x98, 0xe4, 0x8c, 0x1f, 0x9d, 0xa4, 0x80, 0x83, 0x40, 0xb9, - 0x63, 0xfe, 0xc9, 0x18, 0x3f, 0xd6, 0xab, 0x34, 0x00, 0x2c, - 0x53, 0x40, 0x38, 0x0e, 0xb1, 0x69, 0xa8, 0xb8, 0xa9, 0x2e, - 0x9b, 0x7b, 0x89, 0x8d, 0xff, 0x86, 0x01, 0x51, 0x42, 0xde, - 0x04, 0xd6, 0x1d, 0xd1, 0x29, 0x8d, 0x42, 0x46, 0x5f, 0xd6, - 0x02, 0xde, 0x73, 0xee, 0x2d, 0xe9, 0x6e, 0xb0, 0x3f, 0xf0, - 0x47, 0x72, 0xfe, 0x45, 0xff, 0x05, 0x82, 0x2d, 0xc6, 0x4f, - 0xc9, 0xd3, 0xec, 0xf9, 0x5a, 0x22, 0x50, 0x6c, 0x4f, 0x1e, - 0xc8, 0x5f, 0xfc, 0x2c, 0x04, 0x4f, 0xdf, 0xce, 0xe4, 0x18, - 0xd2, 0xd7, 0x8b, 0x67, 0x83, 0x39, 0x96, 0x47, 0x5e, 0x5b, - 0xad, 0x7f, 0x5d, 0x42, 0x56, 0x97, 0x71, 0x39, 0x28, 0x44, - 0x9d, 0x35, 0xde, 0xde, 0x03, 0x20, 0x34, 0x44, 0xdb, 0xdf, - 0xfc, 0xff, 0x1e, 0x3d, 0x58, 0x5f, 0x7a, 0x8e, 0x90, 0xa1, - 0xd3, 0xeb, 0x0c, 0x23, 0x3f, 0x4e, 0x61, 0x77, 0x79, 0xb2, - 0xdc, 0xfb, 0x21, 0x46, 0x5c, 0x82, 0xb6, 0xf6, 0x34, 0x3c, - 0x3f, 0x45, 0x4b, 0x80, 0x9e, 0xa4, 0xe6, 0x02, 0x13, 0x38, - 0x40, 0x7e, 0x87, 0x92, 0x96, 0x51, 0x63, 0x87, 0xae, 0xc8, - 0x02, 0x6a, 0x70, 0xc8, 0xcd, 0xd0, 0xe2, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, - 0x12, 0x1c, 0x22, 0x2b, 0x33, 0x38, 0x3f, + 0x20, 0xff, 0x12, 0xe1, 0x87, 0xf6, 0x11, 0x38, 0xff, 0x41, 0xd0, 0x8f, + 0xcd, 0x7e, 0xd1, 0xf6, 0x21, 0x17, 0xd0, 0x46, 0xe9, 0x86, 0x83, 0x1b, + 0xaf, 0xe5, 0x2b, 0x59, 0x21, 0xd1, 0x6b, 0xc9, 0xdb, 0x34, 0xdc, 0xba, + 0xfd, 0xd3, 0xf8, 0x71, 0x49, 0xd8, 0x31, 0xbc, 0x48, 0x83, 0x22, 0x7b, + 0xfd, 0x6a, 0x93, 0xa6, 0x39, 0x4c, 0xda, 0xdb, 0x15, 0xe7, 0x41, 0x14, + 0xb4, 0xb8, 0xfe, 0xb0, 0x1f, 0xf9, 0x0a, 0x2c, 0x0b, 0xc0, 0xac, 0x09, + 0x84, 0x69, 0x5e, 0x64, 0x8c, 0xa8, 0xee, 0xa1, 0x52, 0x22, 0xde, 0x0d, + 0xc7, 0x25, 0xef, 0xa8, 0xfd, 0x8c, 0xb9, 0x45, 0x4f, 0xa4, 0x9c, 0xbc, + 0x70, 0xf2, 0x88, 0xea, 0x79, 0x13, 0xb0, 0xfc, 0xe6, 0x41, 0x48, 0x1c, + 0x33, 0x48, 0xa2, 0x77, 0x75, 0x37, 0x9f, 0xc1, 0x86, 0x94, 0xcd, 0x69, + 0x98, 0x87, 0x47, 0x49, 0x75, 0x93, 0xf1, 0xa4, 0x2d, 0x8e, 0xa8, 0x7e, + 0x0f, 0x95, 0xf5, 0x3e, 0x5d, 0x31, 0x2d, 0xc9, 0x58, 0x1c, 0x42, 0xfd, + 0x79, 0x6a, 0x49, 0xa3, 0x84, 0xc5, 0x2e, 0x8d, 0x96, 0x9c, 0xc8, 0x05, + 0x93, 0xdb, 0x6d, 0xbf, 0x83, 0x34, 0xc2, 0x81, 0x47, 0x90, 0xc9, 0xa9, + 0x82, 0xbd, 0xe1, 0xc8, 0x89, 0xa2, 0x36, 0x47, 0xed, 0xfb, 0x47, 0x57, + 0x01, 0x1a, 0x75, 0x8c, 0x6b, 0x83, 0xcf, 0x56, 0xae, 0x52, 0x66, 0x8b, + 0xab, 0x7f, 0x0c, 0xec, 0xde, 0x5c, 0x13, 0xbe, 0xbd, 0x5b, 0x74, 0x28, + 0xb5, 0xd7, 0x68, 0xd5, 0xd2, 0xe9, 0x96, 0x3b, 0x55, 0xda, 0x3a, 0x93, + 0x3c, 0xd9, 0x9f, 0x53, 0x2a, 0x31, 0x84, 0x45, 0x3f, 0xee, 0x2b, 0xfc, + 0x92, 0xb0, 0x9c, 0xc6, 0x16, 0x16, 0x4f, 0x33, 0x41, 0x17, 0x58, 0xbe, + 0x5d, 0x57, 0x4b, 0x04, 0x82, 0xe3, 0xb3, 0x68, 0xdf, 0x7c, 0x93, 0xce, + 0x9d, 0xf6, 0x7e, 0x21, 0x3d, 0x28, 0x1c, 0xf0, 0x37, 0x46, 0xf2, 0xc2, + 0x73, 0x7c, 0xbe, 0x98, 0x0e, 0x09, 0x75, 0xa7, 0x21, 0x11, 0xa9, 0xd6, + 0xd1, 0x47, 0xac, 0xd0, 0x19, 0x48, 0x3b, 0x74, 0xc1, 0x3c, 0x37, 0x43, + 0x49, 0x12, 0x62, 0xee, 0xaf, 0x5c, 0x38, 0xf7, 0x8a, 0xce, 0xb3, 0x7a, + 0x05, 0x16, 0xd4, 0x71, 0x8b, 0xbe, 0x1a, 0xe0, 0x1e, 0xbc, 0x4b, 0x54, + 0x0f, 0xb5, 0x73, 0x2b, 0xb8, 0x3a, 0x75, 0xf0, 0x26, 0xcd, 0xf9, 0xca, + 0x32, 0xf9, 0x7e, 0x15, 0x38, 0x75, 0x9c, 0x4d, 0xbc, 0x11, 0xf8, 0xea, + 0x8e, 0xe8, 0x38, 0x17, 0xc5, 0x62, 0xf4, 0x34, 0xfb, 0xd6, 0xf5, 0x76, + 0xfc, 0xa3, 0xf3, 0x44, 0xf9, 0xab, 0x2e, 0x9a, 0x68, 0xcd, 0xa1, 0x29, + 0xff, 0xda, 0xe8, 0xb5, 0xb0, 0x20, 0x5d, 0x02, 0x01, 0x62, 0x26, 0x44, + 0x32, 0xc8, 0x94, 0xf8, 0xf1, 0xaa, 0xf9, 0xc2, 0x86, 0xcb, 0x55, 0x7f, + 0x8d, 0xb3, 0xf6, 0x63, 0xb1, 0xa4, 0x95, 0x57, 0xb8, 0x1d, 0xc3, 0x42, + 0xd2, 0x4b, 0x69, 0xcd, 0x7a, 0x10, 0x5b, 0x6a, 0x13, 0xd1, 0x02, 0x98, + 0x38, 0x87, 0x9b, 0x9a, 0x5a, 0x66, 0x73, 0xcb, 0x75, 0xd0, 0x7a, 0x4b, + 0xad, 0x23, 0x06, 0x1c, 0xc8, 0x6b, 0x0c, 0xa8, 0xfe, 0x7b, 0x8f, 0x65, + 0x50, 0xd7, 0xf7, 0x76, 0x88, 0x42, 0xe0, 0x5e, 0x18, 0x91, 0x8b, 0x99, + 0x37, 0x56, 0x08, 0x91, 0xe7, 0x01, 0xe7, 0x05, 0xd5, 0xed, 0x43, 0x25, + 0x71, 0x7e, 0x3e, 0xfc, 0xc4, 0xfd, 0xed, 0x8b, 0x85, 0x16, 0x8c, 0xe3, + 0x05, 0xee, 0x51, 0x02, 0xa4, 0x4b, 0xd8, 0x3c, 0xcf, 0x4d, 0x2f, 0x2d, + 0x68, 0x6e, 0xc1, 0xd5, 0xfa, 0x91, 0xfd, 0x6a, 0xe0, 0x64, 0x85, 0x35, + 0x9c, 0x75, 0xe6, 0x0d, 0xb8, 0xec, 0x97, 0x88, 0x62, 0x98, 0x78, 0x75, + 0xc7, 0x1e, 0x68, 0xa7, 0xb9, 0x7b, 0xab, 0x75, 0x7a, 0x72, 0x3c, 0x7b, + 0xab, 0x60, 0x03, 0xb7, 0x38, 0x13, 0xe4, 0x96, 0x6e, 0xcb, 0x95, 0xcc, + 0xdc, 0x6a, 0x47, 0x67, 0x77, 0xd7, 0x95, 0xc4, 0x87, 0x66, 0xc2, 0x7e, + 0x42, 0x90, 0x59, 0x4f, 0xd6, 0xf3, 0xf4, 0xa7, 0xd0, 0x29, 0xf9, 0x5d, + 0x4b, 0x06, 0x06, 0xf7, 0x6e, 0xb2, 0xab, 0xb0, 0x8e, 0x21, 0xa6, 0xff, + 0x5e, 0x7b, 0x47, 0xb6, 0x3a, 0xa6, 0x9e, 0x19, 0xf6, 0xdf, 0x9b, 0x3b, + 0x3d, 0x07, 0x37, 0xd1, 0x0b, 0xa8, 0xf3, 0x9c, 0x43, 0x89, 0xee, 0xba, + 0x03, 0xee, 0x38, 0x74, 0x13, 0x09, 0x8e, 0x47, 0x4e, 0xa9, 0x14, 0xf5, + 0xb0, 0x55, 0xe0, 0x03, 0xe5, 0xb9, 0x53, 0xef, 0x03, 0x15, 0x60, 0xb3, + 0x4a, 0x71, 0x31, 0x4b, 0xf1, 0xc8, 0xe4, 0x63, 0x9b, 0x8b, 0x78, 0x3c, + 0x1f, 0xac, 0x27, 0x20, 0xa8, 0x53, 0x7d, 0xdd, 0x72, 0xd3, 0x90, 0x8f, + 0x71, 0xa6, 0xa7, 0xeb, 0xb0, 0xeb, 0x42, 0x96, 0xa4, 0xc3, 0xba, 0xc6, + 0x3c, 0xe7, 0x7b, 0x15, 0x1e, 0xfa, 0x15, 0x23, 0x37, 0xf3, 0xc8, 0xb2, + 0xf9, 0x46, 0x04, 0xd1, 0x5e, 0x44, 0xd7, 0x8f, 0x70, 0xb1, 0x0a, 0xde, + 0x6a, 0xe3, 0xaf, 0x9e, 0x49, 0x55, 0x78, 0x79, 0x11, 0x22, 0x87, 0xa9, + 0x54, 0x7c, 0xb4, 0x83, 0xe1, 0x25, 0xcd, 0x89, 0xa6, 0x91, 0x21, 0x7b, + 0xbe, 0x3d, 0x2f, 0x46, 0xb5, 0x5b, 0x50, 0x1a, 0xc8, 0x8d, 0x32, 0xf3, + 0x62, 0x1f, 0x24, 0x64, 0xe8, 0xb6, 0x02, 0x4f, 0x1f, 0x52, 0x3c, 0x40, + 0xfc, 0x72, 0x38, 0xd4, 0xba, 0x40, 0x8e, 0xb7, 0xc0, 0x97, 0x06, 0x16, + 0xd5, 0xe3, 0x39, 0x45, 0xd7, 0x7c, 0x0e, 0xed, 0x6b, 0x19, 0x19, 0x0a, + 0x8e, 0xcb, 0x2b, 0xee, 0x4d, 0xa1, 0x5e, 0x84, 0x22, 0x66, 0xcd, 0x4f, + 0xb9, 0x1a, 0x25, 0x85, 0x02, 0xc0, 0x67, 0xc4, 0xd5, 0x1a, 0xcb, 0xbb, + 0xde, 0x4d, 0x3c, 0x3c, 0x62, 0x9f, 0x76, 0x8f, 0x15, 0x29, 0xa5, 0xbb, + 0x5a, 0x48, 0x38, 0x66, 0xfa, 0x56, 0x0a, 0x09, 0xbd, 0xdf, 0xdf, 0x4a, + 0xe7, 0x0e, 0xa6, 0xb1, 0xb5, 0x7c, 0xe1, 0xed, 0x8d, 0x63, 0x07, 0x42, + 0xf3, 0xf8, 0x15, 0x28, 0x7c, 0x09, 0xf5, 0x02, 0x69, 0x1b, 0x88, 0x1e, + 0x3d, 0xad, 0x5f, 0x46, 0xed, 0xab, 0x2b, 0x11, 0x96, 0x73, 0xa8, 0xe8, + 0xe6, 0x64, 0x7d, 0xae, 0x13, 0xa1, 0x7d, 0x54, 0xae, 0xc0, 0x82, 0xeb, + 0x2a, 0xd1, 0x76, 0xb7, 0x9f, 0xbd, 0x33, 0x8f, 0xe7, 0xe6, 0x79, 0x92, + 0xa6, 0xaf, 0x61, 0x91, 0x49, 0xbc, 0xd2, 0x3c, 0x6f, 0x8b, 0xbe, 0x8f, + 0x5f, 0x1f, 0x00, 0x2c, 0x2e, 0x2c, 0xa0, 0x14, 0xcf, 0x34, 0x42, 0x44, + 0x41, 0x11, 0xd7, 0x37, 0xd3, 0x99, 0x44, 0x36, 0x43, 0x03, 0xb9, 0x50, + 0x4f, 0xab, 0xfe, 0x48, 0xe2, 0x4b, 0xed, 0x51, 0x8b, 0xe0, 0x04, 0x3c, + 0x93, 0x28, 0x55, 0xc8, 0x5a, 0xb3, 0x52, 0x2c, 0x56, 0xbd, 0x43, 0xb9, + 0x4a, 0x6c, 0x4c, 0xcc, 0xda, 0xba, 0x9c, 0xe6, 0x3e, 0x50, 0x8b, 0x1a, + 0xe5, 0x83, 0xc1, 0x60, 0x55, 0xb2, 0x02, 0x16, 0x54, 0x33, 0x62, 0x69, + 0x7c, 0x7d, 0x94, 0xf2, 0xb0, 0x3a, 0x22, 0xf0, 0x21, 0x46, 0xd7, 0x94, + 0x53, 0xec, 0x63, 0x4c, 0x3e, 0xc3, 0x71, 0xd1, 0xb9, 0x2e, 0x16, 0xe8, + 0x17, 0x63, 0x7e, 0x0c, 0x83, 0x05, 0x72, 0xe6, 0x20, 0x60, 0x34, 0xae, + 0x0e, 0x54, 0xa0, 0x57, 0x75, 0x93, 0x2e, 0xb8, 0x6c, 0xec, 0xda, 0x44, + 0x1b, 0xac, 0xd6, 0x75, 0xc5, 0x79, 0x3c, 0xc2, 0xa6, 0xa2, 0x7f, 0x3a, + 0xb0, 0xec, 0xeb, 0xc1, 0xe6, 0xd6, 0xae, 0xac, 0x2e, 0x55, 0x30, 0x1c, + 0x81, 0xa4, 0x4c, 0x35, 0x0e, 0xd8, 0xa6, 0x4e, 0xea, 0x0e, 0xbf, 0x79, + 0xf7, 0xdf, 0x55, 0xfc, 0xf9, 0x24, 0xb0, 0xa6, 0xba, 0xc3, 0x72, 0x42, + 0x60, 0x06, 0x44, 0x03, 0xe3, 0x40, 0x3c, 0x2a, 0x13, 0xf7, 0xdf, 0x3d, + 0xb7, 0x0d, 0x86, 0x6c, 0xb0, 0x0f, 0x2e, 0x72, 0x91, 0x16, 0x4f, 0x5f, + 0xd0, 0x3e, 0x8c, 0x36, 0xed, 0xa8, 0x6f, 0xbc, 0x65, 0xb0, 0x65, 0x99, + 0x47, 0x50, 0xa5, 0x9c, 0xea, 0xee, 0x8a, 0x44, 0x70, 0xf5, 0x31, 0x1a, + 0xe9, 0x11, 0xc1, 0xce, 0xe0, 0x21, 0x52, 0x70, 0x89, 0xf7, 0xc3, 0x35, + 0xfa, 0x55, 0x5a, 0xc5, 0x10, 0x02, 0xc4, 0xc7, 0xf7, 0xe1, 0xaf, 0x49, + 0x48, 0x61, 0xe7, 0x0d, 0xa1, 0x2d, 0x7d, 0x03, 0x00, 0x38, 0xa7, 0xd5, + 0xd3, 0xbf, 0x95, 0x29, 0xed, 0xcc, 0x70, 0x3e, 0xbe, 0x95, 0x8a, 0xdf, + 0xaf, 0xbf, 0xec, 0xf8, 0x6a, 0x4f, 0x9e, 0x69, 0xee, 0x4e, 0x3d, 0x8b, + 0x58, 0xa0, 0x2e, 0xb5, 0x83, 0x6a, 0x0e, 0x04, 0xa4, 0xa9, 0x74, 0xcb, + 0x4f, 0xb0, 0x39, 0x37, 0x8f, 0xcf, 0xbf, 0x77, 0xe4, 0x1a, 0x74, 0xcf, + 0x0e, 0x0d, 0x2d, 0x6e, 0x1d, 0xba, 0xc1, 0xf5, 0x7c, 0x54, 0x6e, 0x92, + 0xec, 0x4b, 0x03, 0xc3, 0xa4, 0x44, 0xad, 0x3e, 0x4f, 0xa4, 0xd9, 0xe9, + 0x71, 0x3c, 0xe6, 0xb6, 0xbe, 0xe7, 0xfc, 0x72, 0x76, 0x86, 0x9a, 0x73, + 0xb1, 0xb3, 0xf3, 0x84, 0xb6, 0x2a, 0x40, 0x0b, 0x8c, 0xae, 0xb3, 0xc4, + 0xdc, 0xb5, 0x21, 0x85, 0x87, 0xdc, 0x19, 0x18, 0xd5, 0xba, 0xa4, 0x5e, + 0x88, 0x89, 0xa4, 0xf4, 0x88, 0x75, 0xc2, 0x7a, 0xb4, 0xee, 0x9d, 0x54, + 0x66, 0x97, 0x70, 0x08, 0x8f, 0x99, 0x84, 0x5d, 0x5e, 0xa7, 0x6f, 0x92, + 0xe8, 0xa3, 0x65, 0xfa, 0x0e, 0x87, 0xfb, 0x3c, 0xe9, 0x17, 0x2d, 0xc7, + 0x2d, 0x30, 0x8f, 0x41, 0x82, 0x68, 0x2b, 0xf1, 0x67, 0x8e, 0xf7, 0x05, + 0x78, 0xfa, 0xc3, 0x61, 0xba, 0x35, 0xe7, 0x2f, 0x19, 0xef, 0x71, 0x36, + 0xac, 0x5b, 0xf0, 0x45, 0x30, 0x70, 0xdc, 0xc7, 0xab, 0x7b, 0x62, 0x17, + 0x9d, 0xc4, 0x43, 0x6f, 0xfc, 0x02, 0x56, 0x5f, 0x65, 0xaa, 0x68, 0x3b, + 0x5c, 0xfa, 0x71, 0x28, 0x89, 0xe9, 0x28, 0x2f, 0x95, 0x4b, 0xfc, 0xe6, + 0xe7, 0xc8, 0x44, 0x28, 0x5c, 0x3c, 0x08, 0x5f, 0x9c, 0xbc, 0x41, 0x68, + 0x91, 0x98, 0x7a, 0x00, 0x63, 0xc9, 0x5c, 0x75, 0x8f, 0xcc, 0x33, 0x77, + 0x7b, 0xd0, 0x2d, 0xe8, 0xa2, 0x98, 0xa4, 0x1b, 0xfa, 0x09, 0x67, 0x7b, + 0x25, 0x96, 0x19, 0xf4, 0x77, 0x33, 0x20, 0x4f, 0x19, 0xf6, 0x9c, 0x6c, + 0x2e, 0xd9, 0x68, 0x95, 0xb0, 0xe2, 0x18, 0x06, 0xe5, 0x84, 0x8e, 0xf7, + 0xbf, 0x6c, 0x96, 0xa8, 0x9d, 0x37, 0xc7, 0x28, 0xa1, 0x3d, 0x90, 0x8c, + 0x40, 0x3d, 0xe2, 0x51, 0xfd, 0x55, 0x09, 0xf8, 0x83, 0x43, 0x44, 0x4d, + 0x1c, 0x8a, 0x8d, 0x36, 0x84, 0x64, 0xc4, 0xfa, 0x1d, 0x72, 0x04, 0x0b, + 0x1d, 0x49, 0x13, 0x88, 0x78, 0x5f, 0x07, 0x9b, 0xc8, 0x01, 0x9c, 0x3c, + 0xfc, 0xff, 0x0f, 0xd5, 0x13, 0xcd, 0x15, 0x98, 0xcc, 0xe6, 0x59, 0x1e, + 0x83, 0x38, 0x8f, 0x6c, 0x75, 0xbe, 0xdf, 0xe9, 0x1b, 0xc5, 0xb9, 0x6b, + 0xa4, 0x5a, 0x0c, 0xae, 0x98, 0x8d, 0x93, 0xfa, 0x76, 0x7f, 0x0d, 0x0b, + 0xe8, 0xa0, 0x3b, 0x9e, 0x5e, 0xc8, 0xa8, 0xcc, 0x02, 0xc9, 0x86, 0x9c, + 0x78, 0xaf, 0x6e, 0x6a, 0xf4, 0xfe, 0x49, 0xad, 0xc5, 0x93, 0xae, 0x62, + 0xbd, 0xe3, 0x3a, 0xa8, 0xf2, 0x60, 0xb5, 0x29, 0xde, 0x5f, 0x12, 0x02, + 0x2d, 0x43, 0x90, 0xf5, 0x9d, 0x9d, 0x97, 0x29, 0xfa, 0xdd, 0x60, 0x41, + 0x64, 0xb7, 0xa5, 0x03, 0x72, 0x10, 0x2b, 0xdd, 0x5b, 0x60, 0xe6, 0xf0, + 0xe1, 0xd7, 0xa5, 0x97, 0xec, 0xb4, 0x9a, 0x4c, 0x3e, 0x16, 0xa2, 0x82, + 0xb3, 0xc3, 0x3f, 0x3e, 0x5d, 0x32, 0xac, 0x5a, 0x40, 0xb4, 0x00, 0xfa, + 0xd9, 0x47, 0xe8, 0x77, 0xa8, 0x96, 0x5c, 0x60, 0x04, 0x9c, 0x5c, 0xdf, + 0x24, 0x3b, 0xa7, 0x4a, 0x58, 0x25, 0x12, 0x9a, 0xa8, 0x7b, 0x3e, 0x14, + 0xc8, 0x06, 0x79, 0x23, 0xea, 0x91, 0x7f, 0xe1, 0x78, 0x41, 0x6c, 0xdb, + 0x8c, 0xeb, 0x66, 0x35, 0x87, 0x87, 0x81, 0x65, 0x2c, 0xef, 0x3a, 0x6e, + 0xae, 0xb3, 0x6c, 0xe9, 0x86, 0x50, 0x6d, 0x89, 0xd6, 0x27, 0x0a, 0xdb, + 0xf8, 0xd4, 0xb8, 0x85, 0x8e, 0x37, 0xa6, 0x56, 0xf7, 0x58, 0x18, 0x4c, + 0x44, 0xcf, 0xeb, 0xc4, 0x79, 0x19, 0xfc, 0x2e, 0x53, 0x18, 0x0e, 0x7b, + 0x51, 0x86, 0xf3, 0x59, 0x13, 0xb2, 0xaf, 0xd3, 0xee, 0xf4, 0xd5, 0xbf, + 0x2c, 0xb8, 0x6d, 0x71, 0x74, 0x7c, 0x67, 0x54, 0xa7, 0x4b, 0x03, 0xa9, + 0x1b, 0x62, 0x95, 0x9f, 0xc3, 0xf0, 0x71, 0x39, 0x2d, 0x26, 0xaf, 0xaf, + 0xa7, 0xa5, 0x58, 0xf8, 0xf8, 0x8a, 0xe0, 0x62, 0x90, 0x3f, 0x72, 0x9d, + 0x21, 0x82, 0x76, 0x3e, 0x4c, 0x5d, 0xe0, 0xb5, 0x67, 0x23, 0xe3, 0x13, + 0x1a, 0x29, 0xa3, 0xda, 0xa4, 0xb4, 0x5c, 0x1d, 0x47, 0xdf, 0xdf, 0xc9, + 0x93, 0x6c, 0xb2, 0xb5, 0x22, 0xb3, 0x47, 0x2b, 0xcf, 0xf0, 0x36, 0x87, + 0x51, 0x3c, 0x79, 0x41, 0x70, 0xbd, 0xea, 0x70, 0xa2, 0x29, 0x90, 0x55, + 0x30, 0x6f, 0x3e, 0x50, 0xc8, 0x38, 0xd6, 0xfa, 0x6f, 0xe3, 0x39, 0x67, + 0x88, 0x52, 0x1f, 0xd3, 0x52, 0xbf, 0x3e, 0x7b, 0x2a, 0xe5, 0x1e, 0xcd, + 0xf9, 0xf1, 0x91, 0x1d, 0x04, 0x61, 0x25, 0xbb, 0xe1, 0x33, 0xe3, 0x66, + 0x46, 0xed, 0x06, 0x8d, 0xc3, 0x4f, 0x20, 0xc6, 0x24, 0xa7, 0xb5, 0x49, + 0x3b, 0xc7, 0xe6, 0xa0, 0x77, 0x58, 0xd9, 0x70, 0xb1, 0xf5, 0xec, 0x94, + 0x19, 0xf3, 0x5b, 0x0f, 0x9a, 0xe4, 0xad, 0x37, 0x81, 0xaf, 0x68, 0x7b, + 0xe5, 0x67, 0xb5, 0xae, 0x7f, 0x2d, 0x64, 0x78, 0x68, 0x5a, 0xd1, 0x8f, + 0x1c, 0xc0, 0xc3, 0x5b, 0x21, 0x77, 0xe4, 0xa8, 0x5d, 0x05, 0x50, 0xc1, + 0x92, 0xee, 0x36, 0x2d, 0xd2, 0xff, 0xee, 0xc2, 0x11, 0x99, 0xee, 0xd7, + 0x48, 0xfb, 0x6a, 0xa3, 0xc9, 0xb7, 0x0c, 0xc1, 0xe5, 0x12, 0xbf, 0x6f, + 0x58, 0x66, 0x35, 0x34, 0x26, 0xaa, 0xbe, 0xc3, 0x33, 0x86, 0xfd, 0xc0, + 0x1c, 0xa5, 0xe4, 0x1e, 0x91, 0xc4, 0x55, 0x4e, 0xf1, 0xcb, 0xd2, 0x0b, + 0xe8, 0x0d, 0x89, 0x6a, 0x00, 0xbd, 0x7b, 0xf5, 0x3d, 0x1a, 0x4a, 0x48, + 0xfc, 0xf0, 0x5b, 0xcd, 0xdb, 0xb2, 0xa0, 0x27, 0x4b, 0x8f, 0xf7, 0x87, + 0x78, 0x13, 0xdb, 0x3f, 0xfb, 0x0b, 0xda, 0x22, 0xb3, 0x2b, 0x3a, 0x38, + 0xd2, 0x29, 0x73, 0x77, 0xb8, 0xd6, 0xec, 0xab, 0xb4, 0xfe, 0xbe, 0xbb, + 0x6e, 0xe2, 0xc8, 0x45, 0x7b, 0x0d, 0x36, 0x28, 0x0f, 0x45, 0x72, 0xea, + 0x6d, 0x38, 0x02, 0x5e, 0x48, 0x89, 0x12, 0x24, 0x1b, 0x33, 0x0f, 0xe9, + 0xf4, 0xce, 0xf8, 0x27, 0x16, 0x37, 0x29, 0xae, 0xe8, 0x22, 0x03, 0x31, + 0xa9, 0xa0, 0x73, 0x0c, 0x40, 0xe4, 0xfc, 0x6b, 0xe2, 0x1c, 0x8d, 0x7c, + 0x40, 0x82, 0x72, 0x28, 0xd0, 0x7d, 0xe5, 0xef, 0x05, 0x14, 0x80, 0x28, + 0x11, 0x32, 0x0d, 0x63, 0x8a, 0xc3, 0x7c, 0xfe, 0xf5, 0x06, 0x0e, 0xb0, + 0x78, 0x5c, 0x3a, 0xb6, 0x54, 0x37, 0x46, 0xa7, 0x43, 0x4f, 0x05, 0xec, + 0xe4, 0x9f, 0xd8, 0x55, 0x1f, 0x70, 0xb3, 0xe6, 0xbc, 0x46, 0x34, 0x9e, + 0xfc, 0xa4, 0x57, 0x8f, 0x0f, 0x25, 0x6f, 0x9f, 0xb3, 0x80, 0x21, 0x0b, + 0xa1, 0xca, 0x59, 0xcd, 0x37, 0xf7, 0xc9, 0xcb, 0xbe, 0x91, 0xad, 0x07, + 0x4f, 0xc7, 0x4e, 0x04, 0xbd, 0x38, 0x8b, 0x63, 0xb5, 0x51, 0xac, 0xc8, + 0x83, 0x3a, 0xa7, 0xe1, 0x77, 0xbc, 0xa4, 0x0c, 0x6c, 0x50, 0xeb, 0x46, + 0xe1, 0x45, 0x9a, 0x7b, 0x01, 0xca, 0x54, 0xf0, 0x0f, 0xa0, 0x1f, 0x43, + 0x9a, 0x19, 0x70, 0x2e, 0x70, 0x5a, 0xcf, 0x3b, 0x1b, 0x41, 0xfd, 0xd3, + 0x9a, 0xa2, 0x36, 0x14, 0xf0, 0xdd, 0xb0, 0x12, 0x6d, 0xcf, 0x55, 0x3f, + 0xef, 0x0a, 0xc1, 0x80, 0xa9, 0x68, 0xc3, 0x98, 0x03, 0x46, 0x34, 0xce, + 0x91, 0xb2, 0x7a, 0x94, 0xd2, 0xe7, 0xb9, 0x9c, 0x56, 0xb8, 0xf8, 0xd6, + 0xff, 0xbf, 0x8b, 0x39, 0x45, 0x04, 0x45, 0xc9, 0xa2, 0xe2, 0xbb, 0x50, + 0x68, 0x13, 0x32, 0x1e, 0x09, 0x51, 0xb7, 0xb9, 0xcf, 0x5f, 0xcc, 0x54, + 0xd2, 0xf3, 0xc1, 0x9d, 0xa0, 0x8d, 0x22, 0xc8, 0x7e, 0x1b, 0xc6, 0x14, + 0xde, 0x5f, 0x52, 0xb4, 0x69, 0x71, 0xca, 0x58, 0x1d, 0x1e, 0x89, 0xcb, + 0x56, 0x78, 0x7a, 0x85, 0xee, 0xfd, 0xf6, 0x7e, 0xbe, 0x49, 0x9b, 0xb1, + 0x05, 0x95, 0x12, 0xe9, 0x63, 0xbd, 0x61, 0x9a, 0x26, 0xf9, 0x0b, 0x9f, + 0x23, 0x0a, 0x59, 0x55, 0x93, 0xd3, 0x2d, 0xca, 0x66, 0x45, 0x03, 0xb7, + 0xf0, 0x88, 0x9e, 0xc1, 0x11, 0xbb, 0x62, 0x2c, 0x6f, 0xac, 0x3e, 0x87, + 0xd7, 0xe6, 0x4a, 0x44, 0x83, 0x04, 0x5d, 0x5d, 0xbc, 0x3c, 0xce, 0x83, + 0x2b, 0x11, 0x42, 0x02, 0x73, 0x1c, 0x24, 0x90, 0xd9, 0x1a, 0x7d, 0x96, + 0x82, 0x33, 0x75, 0x1e, 0x59, 0xea, 0xa7, 0x99, 0xe1, 0x5b, 0xdc, 0xe4, + 0x07, 0xc5, 0x48, 0x07, 0xb4, 0xbc, 0x80, 0x0e, 0xbd, 0x63, 0x6e, 0x66, + 0xf1, 0x12, 0xb6, 0x67, 0xe0, 0x14, 0x74, 0x9f, 0xbb, 0xb3, 0xb8, 0x16, + 0xd0, 0x25, 0xe9, 0x21, 0x80, 0x1a, 0x32, 0xb0, 0x58, 0x9a, 0x62, 0x17, + 0x18, 0x9d, 0x64, 0x2d, 0x47, 0x89, 0x82, 0x3b, 0x8c, 0x5d, 0x60, 0xc4, + 0x54, 0x69, 0xaa, 0xb4, 0x6a, 0x1d, 0x16, 0xb0, 0xe2, 0x5d, 0x7d, 0xeb, + 0xb9, 0x80, 0x37, 0xcd, 0x5b, 0xf0, 0xa1, 0xa8, 0x39, 0xb2, 0xd6, 0x3a, + 0xc8, 0xcd, 0xca, 0xaf, 0xcb, 0x3b, 0x54, 0xc2, 0x67, 0x49, 0xf3, 0xf1, + 0x11, 0x4d, 0x53, 0x7c, 0x46, 0x8d, 0x22, 0xf6, 0x9a, 0x0d, 0x9e, 0xda, + 0x37, 0xc6, 0x06, 0x00, 0xca, 0xb6, 0xb6, 0x99, 0xc5, 0xb6, 0x81, 0x7e, + 0x87, 0x62, 0xcf, 0x07, 0x76, 0xc1, 0x5f, 0xfe, 0x86, 0xfc, 0x5b, 0xa0, + 0xac, 0xca, 0xcb, 0x7d, 0xf5, 0x5a, 0xc2, 0x5e, 0x41, 0x48, 0x35, 0xc4, + 0x71, 0x9d, 0xc4, 0x0a, 0x79, 0x6f, 0xe3, 0x6d, 0x47, 0xd4, 0xaa, 0xfd, + 0x97, 0xe7, 0xb0, 0x7e, 0x61, 0xf1, 0x7d, 0x7e, 0xf8, 0x78, 0x4c, 0x2e, + 0x65, 0x51, 0xeb, 0x99, 0xd0, 0x3e, 0x24, 0x4c, 0xe0, 0x40, 0x7e, 0x2d, + 0xf7, 0x00, 0x9d, 0x50, 0x87, 0xce, 0x1f, 0x9a, 0xd2, 0x76, 0x00, 0x09, + 0xeb, 0x10, 0x1b, 0x4c, 0xf1, 0x43, 0x0e, 0x35, 0xbb, 0x23, 0x2e, 0x26, + 0x3d, 0x66, 0xa3, 0x0f, 0xf6, 0x10, 0x8b, 0x67, 0xce, 0x66, 0xfd, 0xb5, + 0x07, 0xdc, 0x04, 0x69, 0xad, 0xe0, 0x4d, 0xdf, 0xdb, 0x2f, 0x87, 0xf7, + 0xde, 0xc3, 0x77, 0x89, 0x71, 0xfd, 0x70, 0x38, 0xed, 0xe6, 0x27, 0xb1, + 0xbd, 0x94, 0x5f, 0x39, 0x20, 0x72, 0x59, 0xc4, 0x39, 0xd0, 0x20, 0x5d, + 0xe2, 0xe7, 0xe0, 0x00, 0x61, 0xc7, 0x65, 0xbd, 0xef, 0x05, 0xb3, 0xc7, + 0x7e, 0xae, 0xc5, 0x83, 0x7f, 0xc1, 0x32, 0x4e, 0x2a, 0x17, 0x64, 0x4e, + 0x2a, 0x9a, 0x2d, 0x26, 0x99, 0xa2, 0xd7, 0x37, 0x3a, 0x10, 0x6a, 0x89, + 0x72, 0x43, 0x0e, 0x3a, 0x03, 0x4c, 0xf9, 0xfe, 0xe8, 0xfc, 0x87, 0x71, + 0x37, 0x71, 0x5a, 0x05, 0xbc, 0x4e, 0x20, 0x4c, 0xd7, 0xf9, 0x8d, 0x4e, + 0xb8, 0xb8, 0x56, 0x07, 0xc8, 0x6e, 0x34, 0x6d, 0x45, 0x83, 0x34, 0xf0, + 0x77, 0xfb, 0x18, 0xec, 0x72, 0xf6, 0x4c, 0xfb, 0xba, 0x84, 0xe9, 0x89, + 0x3d, 0xfd, 0xb7, 0x0d, 0x70, 0xae, 0xa4, 0x48, 0x6b, 0x39, 0xf8, 0x62, + 0xc0, 0x7f, 0x0c, 0xf2, 0xa3, 0xfa, 0x7a, 0x64, 0x83, 0x57, 0x7d, 0x4c, + 0x04, 0x96, 0xd7, 0x9d, 0x10, 0x8b, 0x34, 0x48, 0x17, 0xff, 0x74, 0x5c, + 0x9c, 0xbe, 0xeb, 0xe5, 0x52, 0x94, 0x6a, 0x34, 0x6f, 0xf7, 0x95, 0x32, + 0x38, 0x5a, 0x9b, 0x08, 0xf6, 0xda, 0x8c, 0x0f, 0x9c, 0x5d, 0x04, 0x45, + 0xd4, 0xe9, 0xa4, 0x7a, 0xc4, 0xfd, 0x70, 0xfe, 0xa1, 0x3d, 0x21, 0xa0, + 0x01, 0xe5, 0x21, 0xca, 0xa7, 0xd9, 0xf1, 0x9f, 0x45, 0xe1, 0xe8, 0x2d, + 0x27, 0xe6, 0x87, 0xc8, 0x0d, 0xad, 0x13, 0xdb, 0xfe, 0x2f, 0xaa, 0x2b, + 0xdc, 0xa6, 0x1a, 0xc9, 0x19, 0x78, 0x1a, 0x1f, 0x10, 0xcf, 0x31, 0xe1, + 0x06, 0x28, 0x66, 0xb3, 0xa7, 0xa2, 0xa6, 0xf1, 0x3b, 0x2d, 0xd3, 0x81, + 0xaf, 0x6f, 0xc9, 0x88, 0x76, 0xe9, 0x83, 0x6c, 0x52, 0xb9, 0x70, 0x51, + 0x87, 0x6b, 0x8b, 0xbd, 0x5b, 0x9c, 0xa9, 0xf3, 0xcb, 0x55, 0xd1, 0x76, + 0x40, 0xe1, 0x90, 0xb9, 0x4c, 0xbd, 0xab, 0x1d, 0xa0, 0x5b, 0x5b, 0x34, + 0x14, 0x2f, 0x87, 0x8f, 0x63, 0xa0, 0x2d, 0x29, 0x4e, 0x50, 0x4b, 0x18, + 0x5f, 0x86, 0xac, 0x1b, 0x93, 0xe9, 0x59, 0x38, 0xa1, 0x2a, 0x36, 0x21, + 0xb2, 0xa4, 0xc0, 0x79, 0xc1, 0x60, 0xfc, 0x0f, 0xbf, 0x99, 0x04, 0x9d, + 0x4b, 0x17, 0x60, 0x5b, 0xcd, 0x78, 0x03, 0xd7, 0x7c, 0x4b, 0x9b, 0x17, + 0x58, 0x24, 0x60, 0xb8, 0x08, 0x92, 0x48, 0x4f, 0x66, 0x42, 0x9a, 0x98, + 0x2a, 0x99, 0x9a, 0x8f, 0xdd, 0xd7, 0x09, 0xf3, 0x22, 0x66, 0x62, 0xef, + 0xe5, 0x64, 0xd3, 0xdf, 0x31, 0xaa, 0x84, 0x4c, 0xa5, 0x3f, 0x4e, 0x27, + 0x48, 0x37, 0x96, 0x63, 0xbf, 0x8d, 0xe1, 0xf0, 0xd1, 0xef, 0x95, 0x1a, + 0xe6, 0xf4, 0x02, 0x61, 0xbf, 0xe3, 0xbc, 0x8b, 0x3d, 0x0b, 0x77, 0x91, + 0xc0, 0x5d, 0xfb, 0xe6, 0x7e, 0xab, 0x5e, 0xc5, 0x1c, 0x5b, 0x16, 0xfd, + 0x88, 0xa4, 0x78, 0x4c, 0x06, 0x77, 0xc3, 0x6e, 0x84, 0x0c, 0xda, 0xbf, + 0xf3, 0x8e, 0xd3, 0x61, 0x65, 0xac, 0xf2, 0x18, 0x70, 0x68, 0x84, 0x6f, + 0x9f, 0x3a, 0x94, 0x81, 0xa6, 0xc7, 0xc3, 0x92, 0xee, 0x4b, 0x20, 0x15, + 0x4e, 0x03, 0x76, 0x51, 0x5b, 0x4e, 0xe1, 0x5c, 0x51, 0x5e, 0x1b, 0x9c, + 0x30, 0x25, 0x79, 0xdd, 0x70, 0x12, 0xec, 0xdc, 0x45, 0x95, 0x45, 0x43, + 0xcd, 0xbb, 0xae, 0xa0, 0x0d, 0x43, 0xb4, 0xc9, 0x8c, 0x62, 0xfd, 0x7b, + 0xed, 0x50, 0x78, 0xb7, 0xa6, 0x94, 0xcb, 0x98, 0xb0, 0xbe, 0x09, 0xd9, + 0x0c, 0xb2, 0xc4, 0x8b, 0x96, 0x93, 0xd9, 0x26, 0xc6, 0x6d, 0x26, 0x93, + 0x32, 0x4e, 0x86, 0x72, 0x74, 0x92, 0x00, 0x72, 0x0b, 0x20, 0xa3, 0x2b, + 0x94, 0xe6, 0x10, 0x56, 0x5a, 0x41, 0x71, 0x92, 0x08, 0xce, 0x6c, 0xc4, + 0x1d, 0x9e, 0x71, 0x82, 0x64, 0x23, 0xe5, 0x15, 0xef, 0x4a, 0x7c, 0x4d, + 0xe3, 0x92, 0xbc, 0xa3, 0xa2, 0x29, 0xb7, 0x46, 0xfa, 0x8f, 0x9f, 0xc2, + 0x5d, 0xe4, 0xc0, 0x9c, 0x3f, 0x40, 0x17, 0xae, 0x44, 0xf3, 0x28, 0x10, + 0x29, 0x24, 0xa9, 0x1c, 0x9e, 0xd2, 0x55, 0x4c, 0xee, 0x45, 0xfe, 0x4a, + 0x45, 0x12, 0xf5, 0xde, 0xc7, 0x64, 0x15, 0xc3, 0x4a, 0x77, 0x63, 0x05, + 0x8d, 0xa6, 0x31, 0xa0, 0xad, 0x64, 0xaf, 0x3c, 0x69, 0x2c, 0x25, 0x78, + 0xae, 0xa0, 0x88, 0x96, 0x8a, 0xc2, 0x9b, 0x8d, 0xee, 0x6f, 0x2e, 0x79, + 0x1f, 0xec, 0x32, 0x35, 0x75, 0x83, 0x19, 0x8b, 0xda, 0xca, 0xd0, 0xaf, + 0x6a, 0x6c, 0x42, 0xe8, 0x81, 0xb5, 0x69, 0x31, 0x0b, 0x7d, 0xbc, 0xd8, + 0xd2, 0xb7, 0x7a, 0x8f, 0xfa, 0xcf, 0x91, 0x07, 0x1f, 0xda, 0xa9, 0x1f, + 0xb7, 0x2d, 0xff, 0x50, 0x15, 0x2a, 0xef, 0x8c, 0xa1, 0xe3, 0x7f, 0x08, + 0x95, 0xf2, 0x99, 0x83, 0x1f, 0x97, 0x71, 0x3e, 0x35, 0x3c, 0x8c, 0xe7, + 0x08, 0xd8, 0xa6, 0x1f, 0x0c, 0xa6, 0x52, 0xdc, 0x73, 0xa0, 0xfc, 0xd2, + 0x73, 0xe9, 0x27, 0x9d, 0xfd, 0x7a, 0x4a, 0x29, 0xd3, 0x12, 0x26, 0x13, + 0x0f, 0xce, 0xea, 0x56, 0x99, 0x61, 0x78, 0x47, 0x2c, 0xa0, 0x16, 0xa0, + 0xe2, 0x64, 0x97, 0x57, 0x31, 0xf0, 0x32, 0x5b, 0x44, 0x93, 0x76, 0x8b, + 0x59, 0x63, 0x5c, 0x5b, 0x0f, 0xe1, 0xe7, 0x74, 0x98, 0x11, 0x2d, 0x90, + 0xe4, 0xde, 0xd4, 0x3a, 0xc2, 0xfd, 0x24, 0xe3, 0x1f, 0x7a, 0xf4, 0x40, + 0xbb, 0x51, 0x92, 0x8f, 0x68, 0x9c, 0x51, 0xab, 0xdc, 0xf6, 0x1e, 0x96, + 0xca, 0x56, 0x5c, 0x92, 0xca, 0xb2, 0x1b, 0x2e, 0x6d, 0x20, 0x28, 0xb3, + 0x0a, 0x8e, 0xfd, 0xa9, 0xa2, 0x38, 0x74, 0x60, 0x37, 0xa6, 0x96, 0x02, + 0x20, 0x8a, 0x9a, 0x2b, 0x8c, 0xb9, 0x6d, 0xec, 0xff, 0xbf, 0x88, 0xbd, + 0x6c, 0xb4, 0x10, 0xbd, 0xfa, 0x5a, 0xeb, 0xb2, 0x6b, 0x74, 0x13, 0x2d, + 0xa5, 0xdb, 0x60, 0x93, 0xc6, 0xed, 0x39, 0x4f, 0xc5, 0x63, 0xe1, 0x9e, + 0x57, 0x1f, 0xe7, 0x47, 0xa4, 0xfb, 0x7f, 0xfa, 0x3a, 0x46, 0x50, 0x3a, + 0xd8, 0xd3, 0x83, 0xf5, 0xe6, 0x5e, 0xf8, 0x09, 0x0d, 0xfa, 0x33, 0xe1, + 0x50, 0xe4, 0x36, 0x3e, 0x0a, 0x5d, 0xe6, 0xf8, 0x2e, 0x17, 0x87, 0x8f, + 0xe1, 0x8c, 0x82, 0x73, 0xbd, 0xdd, 0x3b, 0x77, 0x47, 0x9f, 0x42, 0xd7, + 0xf4, 0x2d, 0x6c, 0xef, 0xcc, 0x22, 0x15, 0x3c, 0xe9, 0x26, 0xea, 0xbc, + 0xee, 0x09, 0xd3, 0xea, 0x84, 0x0f, 0x46, 0xa8, 0xe0, 0xda, 0xc5, 0x57, + 0x02, 0x54, 0xb6, 0x88, 0x2b, 0x37, 0xe5, 0x96, 0xc5, 0x33, 0xb7, 0x45, + 0x5d, 0xb7, 0xc7, 0xfd, 0xa0, 0xfa, 0x85, 0x1b, 0x2f, 0xe1, 0xec, 0x89, + 0xc6, 0xb2, 0x51, 0x71, 0xcb, 0x08, 0x82, 0x3e, 0xc9, 0xed, 0x80, 0x9d, + 0x37, 0x31, 0x9d, 0x15, 0xde, 0x24, 0x6f, 0xbd, 0x0e, 0x73, 0xa2, 0xb8, + 0x7e, 0x29, 0x7e, 0x96, 0xe4, 0xbb, 0xd6, 0x23, 0x17, 0xff, 0x33, 0x97, + 0x9c, 0x87, 0xe0, 0xe5, 0x0f, 0xb9, 0xb6, 0x31, 0x33, 0xad, 0xf8, 0xd8, + 0xdb, 0xa0, 0x71, 0x13, 0xe4, 0x1c, 0xce, 0xd0, 0x7e, 0x65, 0x7b, 0xa0, + 0x38, 0x17, 0x53, 0x4f, 0x71, 0x75, 0x6d, 0x02, 0x61, 0xc4, 0x52, 0xf8, + 0xe4, 0x2e, 0xbc, 0x52, 0xc1, 0xb1, 0x7e, 0x83, 0x0a, 0xa1, 0xd1, 0xcd, + 0x2f, 0xa0, 0x30, 0xfd, 0x41, 0x86, 0x7f, 0x26, 0xd1, 0xe7, 0xfc, 0xd7, + 0xc7, 0x37, 0xe5, 0x11, 0xa6, 0xc0, 0x9a, 0x75, 0x18, 0x04, 0x36, 0xca, + 0x8e, 0x26, 0x7d, 0xcf, 0xa2, 0x6a, 0x94, 0x9b, 0xc4, 0xf7, 0xc7, 0xeb, + 0x51, 0x13, 0xa3, 0x6f, 0x8c, 0x80, 0x5f, 0xae, 0xf0, 0x18, 0xa0, 0x88, + 0xe0, 0x8d, 0xb7, 0x80, 0x4e, 0x8c, 0xec, 0xc8, 0x7b, 0xeb, 0xac, 0x29, + 0xb7, 0x4a, 0x0f, 0x33, 0xdd, 0x9d, 0x89, 0x0a, 0x10, 0xb0, 0xce, 0x74, + 0x59, 0xa2, 0x62, 0x91, 0xc9, 0xac, 0x56, 0xcd, 0x69, 0xd3, 0x01, 0x6d, + 0x51, 0xe7, 0x04, 0xc3, 0xfb, 0xe9, 0x79, 0x1b, 0x72, 0x72, 0x1a, 0x90, + 0x0a, 0x20, 0x55, 0x85, 0xc1, 0x8b, 0xeb, 0x1e, 0x9f, 0x9f, 0x4a, 0x81, + 0x47, 0x97, 0x96, 0xbc, 0xc2, 0xe4, 0xc2, 0xfe, 0xa0, 0x20, 0xda, 0x70, + 0x0c, 0x2b, 0xe2, 0xd4, 0xc8, 0xcb, 0x46, 0x00, 0xb6, 0x7c, 0xfb, 0xbd, + 0x56, 0x94, 0x3d, 0x7f, 0x64, 0xf7, 0x88, 0xb5, 0xa7, 0xfe, 0xbe, 0x64, + 0x8a, 0xe4, 0x00, 0x08, 0x82, 0x5b, 0x8f, 0x98, 0x77, 0x87, 0xda, 0xaf, + 0x16, 0x25, 0x4a, 0x9a, 0xed, 0xfb, 0x50, 0x18, 0x45, 0x46, 0x2b, 0x73, + 0xff, 0xb9, 0xb9, 0xab, 0xa2, 0x8f, 0x3a, 0xaf, 0xc5, 0x0a, 0x14, 0x91, + 0xb2, 0x3f, 0xa6, 0x93, 0xf4, 0x81, 0x20, 0x77, 0xfa, 0x51, 0x79, 0x62, + 0xe8, 0xe6, 0x89, 0x52, 0x39, 0xd5, 0x01, 0xa2, 0x87, 0xa3, 0x53, 0x74, + 0x3c, 0x36, 0x8a, 0xc3, 0xb4, 0x44, 0x3b, 0x15, 0x21, 0xf6, 0xdc, 0x18, + 0x02, 0xd2, 0x57, 0xe5, 0x10, 0xf0, 0x3d, 0x61, 0xa7, 0x16, 0x85, 0x6f, + 0x71, 0x07, 0x75, 0x50, 0x4b, 0x21, 0x53, 0x47, 0x38, 0x35, 0x9e, 0xa7, + 0xd8, 0xfd, 0x74, 0x59, 0x15, 0x32, 0x7b, 0x89, 0xd0, 0x2c, 0xd9, 0xf6, + 0x40, 0x49, 0x79, 0xdc, 0xfb, 0x0a, 0x64, 0x59, 0x9b, 0x17, 0x47, 0x36, + 0xcb, 0xf0, 0xc3, 0xcc, 0x14, 0x8e, 0x1f, 0xa8, 0x12, 0xaa, 0xb7, 0x6a, + 0xba, 0x45, 0xf9, 0xc4, 0x44, 0xe7, 0xb5, 0x7c, 0xdd, 0xbe, 0x16, 0x76, + 0x52, 0x92, 0x3d, 0x78, 0xb7, 0xec, 0x81, 0x96, 0xd8, 0x7f, 0x34, 0x2a, + 0xa2, 0x64, 0x5f, 0xfd, 0xb1, 0x42, 0x4c, 0x79, 0x98, 0xc9, 0x17, 0x48, + 0x74, 0x12, 0x72, 0x2c, 0xde, 0x91, 0x7e, 0xa9, 0x49, 0x2a, 0xcc, 0x5c, + 0x60, 0x05, 0x25, 0x09, 0x72, 0x20, 0x80, 0x42, 0x7b, 0x18, 0xc2, 0xfc, + 0x2a, 0x5e, 0x3e, 0x2d, 0x61, 0xa6, 0xf6, 0x82, 0x42, 0x83, 0x81, 0x66, + 0x4d, 0xa6, 0xe1, 0xf9, 0xf6, 0x48, 0xd4, 0xc8, 0x69, 0xed, 0xee, 0xb5, + 0x7a, 0xcb, 0xf6, 0x0a, 0x76, 0x0e, 0x61, 0x8b, 0xf2, 0x1a, 0x8a, 0xa7, + 0x88, 0xb0, 0x90, 0xd5, 0x23, 0xaa, 0xe0, 0x2b, 0xd6, 0xd0, 0xef, 0x49, + 0x13, 0x88, 0xc7, 0x50, 0xf0, 0x9e, 0xd5, 0x28, 0xe1, 0xaa, 0x1d, 0xaf, + 0xd9, 0x73, 0xb3, 0x9e, 0xa7, 0xd8, 0xfc, 0xb9, 0x22, 0x97, 0x0e, 0x21, + 0xa0, 0xb9, 0xf9, 0xea, 0x1e, 0x95, 0x88, 0xda, 0x85, 0x7c, 0x32, 0x7c, + 0xbd, 0xef, 0xf8, 0x44, 0x25, 0x5f, 0x23, 0xfd, 0x14, 0x78, 0xc6, 0xdb, + 0x86, 0xee, 0xf8, 0xda, 0xc0, 0xae, 0x92, 0x6a, 0x03, 0xa9, 0x0a, 0xee, + 0x4a, 0x22, 0x5a, 0x6c, 0x39, 0xd3, 0x91, 0x7d, 0x91, 0x43, 0xac, 0x79, + 0xad, 0xab, 0xb7, 0x91, 0xb1, 0x20, 0x84, 0x7f, 0x0a, 0xd7, 0xa8, 0x62, + 0x95, 0xab, 0x04, 0xb6, 0xb2, 0xf1, 0xd4, 0xb0, 0xac, 0x52, 0x89, 0xb0, + 0x93, 0xdf, 0xdf, 0x80, 0x26, 0x0c, 0x32, 0x31, 0xb3, 0xba, 0xa1, 0xba, + 0x6f, 0xa3, 0x14, 0x5c, 0xfa, 0x37, 0x3b, 0x6a, 0xf2, 0xc4, 0x34, 0x27, + 0x08, 0x1a, 0xe4, 0xfc, 0x89, 0x58, 0x79, 0x34, 0x36, 0xe4, 0xad, 0x4b, + 0x3f, 0x57, 0x7b, 0xc1, 0x59, 0x2d, 0xb6, 0x54, 0x44, 0xbe, 0x4e, 0x5d, + 0x0d, 0x6a, 0xf3, 0xcd, 0xbf, 0xcd, 0x4d, 0x9f, 0x9a, 0x50, 0x09, 0xa4, + 0x6b, 0x8b, 0xb3, 0x01, 0x69, 0x6c, 0x69, 0x5d, 0x28, 0x73, 0x9e, 0xb5, + 0xc2, 0xc7, 0x6e, 0xff, 0x4c, 0x5c, 0x6b, 0x93, 0x22, 0xc1, 0x9f, 0xa6, + 0x71, 0xbf, 0x4d, 0x2d, 0x4e, 0x4e, 0x98, 0xa3, 0x6d, 0xab, 0x05, 0xa0, + 0xde, 0x34, 0x41, 0x28, 0xa4, 0x38, 0x75, 0x4e, 0xdf, 0x7f, 0xc9, 0xdd, + 0xbf, 0x5a, 0xd4, 0xcd, 0x38, 0x0c, 0x89, 0xe7, 0x0e, 0xfc, 0x0f, 0x27, + 0x39, 0x21, 0xa4, 0xa6, 0x07, 0x7b, 0x2a, 0x13, 0x56, 0xe7, 0x4e, 0x55, + 0x57, 0x71, 0x98, 0xb9, 0x3d, 0x59, 0xb5, 0xa8, 0x24, 0x18, 0x08, 0xa2, + 0x6e, 0x9a, 0xe5, 0x97, 0xa7, 0x38, 0xd9, 0x43, 0x9b, 0x19, 0x17, 0x34, + 0x03, 0xd6, 0xba, 0xe9, 0x71, 0x38, 0x26, 0x90, 0x78, 0x9e, 0x1c, 0x41, + 0x8d, 0x60, 0xdd, 0x0e, 0x12, 0x46, 0x37, 0xb4, 0x79, 0x87, 0x33, 0x12, + 0x24, 0xc4, 0x5a, 0x6c, 0x70, 0xa2, 0xb2, 0x58, 0xbb, 0xe7, 0xd6, 0x88, + 0x42, 0x2d, 0x49, 0xc8, 0x67, 0x1e, 0xc5, 0xed, 0x16, 0xa8, 0x1f, 0x36, + 0x2b, 0xfb, 0x0d, 0x51, 0x96, 0xc8, 0x78, 0xf2, 0xab, 0x82, 0xa1, 0xe2, + 0xaf, 0x8c, 0xa4, 0x13, 0x54, 0x90, 0xf1, 0xe7, 0xbb, 0xd1, 0x09, 0x23, + 0x76, 0x0e, 0x50, 0x32, 0xc5, 0x54, 0xbb, 0x1e, 0x12, 0x5d, 0x59, 0xf3, + 0xe9, 0xc9, 0xa4, 0xaa, 0xbc, 0x13, 0x1d, 0xf0, 0x79, 0x54, 0xae, 0x70, + 0xc0, 0xea, 0xcb, 0x21, 0x32, 0xe6, 0xe6, 0x8e, 0xaa, 0x51, 0x46, 0x25, + 0x1e, 0xf1, 0x3f, 0x9f, 0xf6, 0xff, 0x19, 0x53, 0x97, 0xbc, 0xa2, 0xb6, + 0x91, 0x59, 0x27, 0x1e, 0x39, 0x76, 0x76, 0x02, 0x0b, 0x03, 0x25, 0x6b, + 0x00, 0x02, 0xfa, 0x7d, 0x69, 0x5e, 0xde, 0x64, 0x33, 0xbf, 0xab, 0x3e, + 0x3f, 0x24, 0x32, 0x68, 0xbf, 0x90, 0x8f, 0x0f, 0xc5, 0x36, 0x58, 0x9e, + 0x9b, 0x11, 0xd1, 0x2a, 0x8a, 0x0d, 0xac, 0x3a, 0x23, 0xe2, 0x8e, 0xd6, + 0x0d, 0x4a, 0x8b, 0x45, 0x04, 0x47, 0xd9, 0x5a, 0x46, 0x6c, 0x70, 0x82, + 0xc7, 0x81, 0x67, 0xdc, 0xa6, 0xfa, 0x6a, 0x86, 0xfd, 0x01, 0xed, 0x90, + 0xf6, 0xe6, 0x26, 0x6d, 0xac, 0x52, 0x03, 0x4a, 0x91, 0x08, 0x7b, 0xa5, + 0x9c, 0xca, 0xd3, 0x2d, 0x79, 0xf1, 0xed, 0xcb, 0xaa, 0x8f, 0x77, 0xc8, + 0x17, 0xa8, 0xfb, 0x6c, 0x15, 0x62, 0xab, 0x34, 0xd1, 0xdd, 0x94, 0x3e, + 0xd4, 0x0c, 0x47, 0xed, 0x04, 0x91, 0xd2, 0xd7, 0x98, 0xb4, 0x43, 0x57, + 0xd1, 0x54, 0xef, 0x63, 0xba, 0xe3, 0x8a, 0x72, 0xc5, 0xb9, 0xf4, 0x30, + 0xfa, 0x16, 0x3c, 0xe1, 0xbb, 0xbe, 0x57, 0x90, 0xb9, 0xa1, 0xa0, 0x23, + 0xfa, 0xdd, 0xbe, 0x2f, 0xb3, 0xec, 0x41, 0x8b, 0x64, 0xeb, 0xc5, 0x41, + 0xea, 0xa8, 0x16, 0x76, 0x6f, 0x28, 0xda, 0x2b, 0x5f, 0x03, 0x0b, 0xe8, + 0x1c, 0x29, 0x71, 0xd8, 0x4e, 0x41, 0xdf, 0x39, 0x8e, 0x6a, 0x95, 0x79, + 0x85, 0x9c, 0xa9, 0x79, 0xd9, 0x8f, 0x33, 0xaf, 0x15, 0x3b, 0x5a, 0x82, + 0x56, 0x32, 0x98, 0x0c, 0xf6, 0xf6, 0x64, 0x42, 0xd4, 0x6a, 0x15, 0x0f, + 0xb9, 0x75, 0x22, 0xbd, 0x9a, 0x58, 0xa6, 0x01, 0x3a, 0x63, 0xf0, 0x80, + 0x78, 0x22, 0x80, 0xa0, 0x14, 0xe1, 0x37, 0x6b, 0xd4, 0x99, 0x3f, 0xc2, + 0xba, 0x2b, 0x8f, 0xf3, 0x56, 0xc8, 0x1b, 0xe4, 0x7a, 0x5e, 0x96, 0x60, + 0xee, 0x74, 0x54, 0xb6, 0x6d, 0x5c, 0x3d, 0x3e, 0x05, 0xf0, 0x9a, 0xf6, + 0xcd, 0xdd, 0x06, 0xdb, 0x8c, 0x21, 0xb9, 0xf5, 0x28, 0x57, 0x9c, 0x4f, + 0xb4, 0x08, 0xcf, 0xac, 0x6c, 0xfe, 0x30, 0xaf, 0xa2, 0xef, 0xcf, 0x93, + 0x15, 0xdd, 0x12, 0x16, 0x19, 0x7d, 0xbc, 0x57, 0xd9, 0xce, 0xbe, 0x0e, + 0xfc, 0xe1, 0xf0, 0x4a, 0x7c, 0xaa, 0xbf, 0x20, 0x64, 0x00, 0x34, 0x59, + 0xed, 0xea, 0x12, 0x58, 0x46, 0x4c, 0xc6, 0x2f, 0x77, 0x62, 0x1d, 0x82, + 0x5c, 0xe8, 0x98, 0x0d, 0xef, 0x5c, 0x0e, 0xec, 0x5d, 0x2e, 0x5f, 0xd2, + 0x22, 0x43, 0x2d, 0xe1, 0x02, 0xd5, 0x4a, 0x0a, 0x79, 0x6f, 0xa5, 0xec, + 0x48, 0xaa, 0xee, 0xf8, 0xe3, 0x5f, 0xdd, 0xe7, 0x26, 0x87, 0xb5, 0xc4, + 0xcf, 0xd9, 0x7f, 0xa8, 0xaa, 0xb6, 0xbe, 0xe9, 0x02, 0x49, 0x5d, 0x5f, + 0x81, 0x8b, 0xb9, 0xbd, 0xc0, 0xc9, 0xd5, 0xfe, 0x36, 0x3e, 0x49, 0x56, + 0x63, 0x8b, 0xce, 0xef, 0x48, 0x6e, 0xc0, 0xd4, 0x04, 0x0c, 0x33, 0x45, + 0x6e, 0x97, 0x9e, 0xa3, 0xae, 0xbc, 0xc2, 0xce, 0xdc, 0xe3, 0xff, 0x48, + 0x51, 0x68, 0x89, 0xad, 0xae, 0xc7, 0xd1, 0xde, 0xe2, 0xf9, 0xfe, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x0c, 0x18, 0x20, 0x24, 0x2f, 0x33, 0x3f }; return dilithium_param_vfy_test(WC_ML_DSA_87, ml_dsa_87_pub_key, @@ -42420,11 +43435,13 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dilithium_test(void) } #ifndef WOLFSSL_NO_ML_DSA_44 +#ifdef WOLFSSL_WC_DILITHIUM #ifndef WOLFSSL_DILITHIUM_NO_VERIFY ret = dilithium_param_44_vfy_test(); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); #endif +#endif #ifndef WOLFSSL_DILITHIUM_NO_MAKE_KEY ret = dilithium_param_test(WC_ML_DSA_44, &rng); if (ret != 0) @@ -42432,11 +43449,13 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dilithium_test(void) #endif #endif #ifndef WOLFSSL_NO_ML_DSA_65 +#ifdef WOLFSSL_WC_DILITHIUM #ifndef WOLFSSL_DILITHIUM_NO_VERIFY ret = dilithium_param_65_vfy_test(); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); #endif +#endif #ifndef WOLFSSL_DILITHIUM_NO_MAKE_KEY ret = dilithium_param_test(WC_ML_DSA_65, &rng); if (ret != 0) @@ -42444,11 +43463,13 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dilithium_test(void) #endif #endif #ifndef WOLFSSL_NO_ML_DSA_87 +#ifdef WOLFSSL_WC_DILITHIUM #ifndef WOLFSSL_DILITHIUM_NO_VERIFY ret = dilithium_param_87_vfy_test(); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); #endif +#endif #ifndef WOLFSSL_DILITHIUM_NO_MAKE_KEY ret = dilithium_param_test(WC_ML_DSA_87, &rng); if (ret != 0) @@ -42611,7 +43632,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t xmss_test(void) ret2 = wc_XmssKey_Verify(&verifyKey, sig, sigSz, (byte *) msg, msgSz); - if ((ret2 != -1) && (ret2 != SIG_VERIFY_E)) { + if ((ret2 != -1) && (ret2 != WC_NO_ERR_TRACE(SIG_VERIFY_E))) { /* Verify passed when it should have failed. */ return WC_TEST_RET_ENC_I(j); } @@ -42622,20 +43643,14 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t xmss_test(void) } /* Cleanup everything. */ - if (sig != NULL) { - XFREE(sig, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - sig = NULL; - } + XFREE(sig, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + sig = NULL; - if (sk != NULL) { - XFREE(sk, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - sk = NULL; - } + XFREE(sk, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + sk = NULL; - if (old_sk != NULL) { - XFREE(old_sk, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - old_sk = NULL; - } + XFREE(old_sk, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + old_sk = NULL; wc_XmssKey_Free(&signingKey); wc_FreeRng(&rng); @@ -43075,7 +44090,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t xmss_test_verify_only(void) xmss_msg[sizeof(xmss_msg) / 2] ^= 1; ret2 = wc_XmssKey_Verify(&verifyKey, xmss_sig, sizeof(xmss_sig), (byte *) xmss_msg, sizeof(xmss_msg)); - if ((ret2 != -1) && (ret2 != SIG_VERIFY_E)) { + if ((ret2 != -1) && (ret2 != WC_NO_ERR_TRACE(SIG_VERIFY_E))) { printf("error: wc_XmssKey_Verify returned %d, expected -1\n", ret2); return WC_TEST_RET_ENC_EC(ret2); } @@ -43096,7 +44111,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t xmss_test_verify_only(void) ret2 = wc_XmssKey_Verify(&verifyKey, xmss_sig, sizeof(xmss_sig), (byte *) xmss_msg, sizeof(xmss_msg)); - if ((ret2 != -1) && (ret2 != SIG_VERIFY_E)) { + if ((ret2 != -1) && (ret2 != WC_NO_ERR_TRACE(SIG_VERIFY_E))) { /* Verify passed when it should have failed. */ return WC_TEST_RET_ENC_I(j); } @@ -43246,7 +44261,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t lms_test(void) ret2 = wc_LmsKey_Verify(&verifyKey, sig, sigSz, (byte *) msg, msgSz); - if ((ret2 != -1) && (ret2 != SIG_VERIFY_E)) { + if ((ret2 != -1) && (ret2 != WC_NO_ERR_TRACE(SIG_VERIFY_E))) { /* Verify passed when it should have failed. */ return WC_TEST_RET_ENC_I(j); } @@ -43587,7 +44602,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t lms_test_verify_only(void) lms_msg[msgSz / 2] ^= 1; ret2 = wc_LmsKey_Verify(&verifyKey, lms_L1H10W8_sig, LMS_L1H10W8_SIGLEN, (byte *) lms_msg, msgSz); - if ((ret2 != -1) && (ret2 != SIG_VERIFY_E)) { + if ((ret2 != -1) && (ret2 != WC_NO_ERR_TRACE(SIG_VERIFY_E))) { printf("error: wc_LmsKey_Verify returned %d, expected -1\n", ret2); return WC_TEST_RET_ENC_EC(ret); } @@ -43609,7 +44624,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t lms_test_verify_only(void) ret2 = wc_LmsKey_Verify(&verifyKey, lms_L1H10W8_sig, LMS_L1H10W8_SIGLEN, (byte *) lms_msg, msgSz); - if ((ret2 != -1) && (ret2 != SIG_VERIFY_E)) { + if ((ret2 != -1) && (ret2 != WC_NO_ERR_TRACE(SIG_VERIFY_E))) { /* Verify passed when it should have failed. */ return WC_TEST_RET_ENC_I(j); } @@ -43644,17 +44659,17 @@ static wc_test_ret_t eccsi_api_test(WC_RNG* rng, EccsiKey* key, mp_int* ssk, word32 sigSz; ret = wc_InitEccsiKey_ex(NULL, 32, ECC_SECP256R1, HEAP_HINT, INVALID_DEVID); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_InitEccsiKey_ex(NULL, 32, ECC_SECP256R1, HEAP_HINT, INVALID_DEVID); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_InitEccsiKey(NULL, NULL, INVALID_DEVID); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_InitEccsiKey(NULL, HEAP_HINT, INVALID_DEVID); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); wc_FreeEccsiKey(NULL); @@ -43665,373 +44680,373 @@ static wc_test_ret_t eccsi_api_test(WC_RNG* rng, EccsiKey* key, mp_int* ssk, return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeEccsiKey(NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeEccsiKey(key, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeEccsiKey(NULL, rng); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeEccsiPair(NULL, NULL, WC_HASH_TYPE_SHA256, NULL, 1, NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeEccsiPair(key, rng, WC_HASH_TYPE_SHA256, id, 1, ssk, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeEccsiPair(key, rng, WC_HASH_TYPE_SHA256, id, 1, NULL, pvt); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeEccsiPair(key, rng, WC_HASH_TYPE_SHA256, NULL, 1, ssk, pvt); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeEccsiPair(key, NULL, WC_HASH_TYPE_SHA256, id, 1, ssk, pvt); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeEccsiPair(NULL, rng, WC_HASH_TYPE_SHA256, id, 1, ssk, pvt); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); /* No key set */ ret = wc_MakeEccsiPair(key, rng, WC_HASH_TYPE_SHA256, id, 1, ssk, pvt); - if (ret != BAD_STATE_E) + if (ret != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateEccsiPair(NULL, WC_HASH_TYPE_SHA256, NULL, 1, NULL, NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateEccsiPair(key, WC_HASH_TYPE_SHA256, id, 1, ssk, pvt, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateEccsiPair(key, WC_HASH_TYPE_SHA256, id, 1, ssk, NULL, &valid); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateEccsiPair(key, WC_HASH_TYPE_SHA256, id, 1, NULL, pvt, &valid); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateEccsiPair(key, WC_HASH_TYPE_SHA256, NULL, 1, ssk, pvt, &valid); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateEccsiPair(NULL, WC_HASH_TYPE_SHA256, id, 1, ssk, pvt, &valid); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); /* No key set */ ret = wc_ValidateEccsiPair(key, WC_HASH_TYPE_SHA256, id, 1, ssk, pvt, &valid); - if (ret != BAD_STATE_E) + if (ret != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateEccsiPvt(NULL, NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateEccsiPvt(key, NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateEccsiPvt(NULL, pvt, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateEccsiPvt(NULL, NULL, &valid); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateEccsiPvt(key, pvt, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateEccsiPvt(key, NULL, &valid); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateEccsiPvt(NULL, pvt, &valid); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeEccsiPair(NULL, NULL, NULL, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeEccsiPair(key, ssk, pvt, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeEccsiPair(key, ssk, NULL, data, &sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeEccsiPair(key, NULL, pvt, data, &sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeEccsiPair(NULL, ssk, pvt, data, &sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); /* No key created so no curve information. */ ret = wc_EncodeEccsiPair(key, ssk, pvt, NULL, &sz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeEccsiSsk(NULL, NULL, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeEccsiSsk(key, ssk, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeEccsiSsk(key, NULL, data, &sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeEccsiSsk(NULL, ssk, data, &sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeEccsiPvt(NULL, NULL, data, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeEccsiPvt(key, pvt, data, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeEccsiPvt(key, NULL, data, &sz, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeEccsiPvt(NULL, pvt, data, &sz, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiPair(NULL, NULL, 0, NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiPair(key, data, 0, ssk, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiPair(key, data, 0, NULL, pvt); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiPair(key, NULL, 0, ssk, pvt); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiPair(NULL, data, 0, ssk, pvt); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiSsk(NULL, NULL, 0, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiSsk(key, data, 0, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiSsk(key, NULL, 0, ssk); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiSsk(NULL, data, 0, ssk); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiPvt(NULL, NULL, 0, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiPvt(key, data, 0, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiPvt(key, NULL, 0, pvt); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiPvt(NULL, data, 0, pvt); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiPvtFromSig(NULL, NULL, 0, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiPvtFromSig(key, data, 0, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiPvtFromSig(key, NULL, 0, pvt); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeEccsiPvtFromSig(NULL, data, 0, pvt); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportEccsiKey(NULL, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportEccsiKey(key, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportEccsiKey(NULL, data, &sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); /* No key to export */ ret = wc_ExportEccsiKey(key, NULL, &sz); - if (ret != BAD_STATE_E) + if (ret != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportEccsiKey(NULL, NULL, 0); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportEccsiKey(key, NULL, 0); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportEccsiKey(NULL, data, 0); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportEccsiPrivateKey(NULL, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportEccsiPrivateKey(key, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportEccsiPrivateKey(NULL, data, &sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); /* No key to export */ ret = wc_ExportEccsiPrivateKey(key, NULL, &sz); - if (ret != BAD_STATE_E) + if (ret != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportEccsiPrivateKey(NULL, NULL, 0); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportEccsiPrivateKey(key, NULL, 0); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportEccsiPrivateKey(NULL, data, 0); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportEccsiPublicKey(NULL, data, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportEccsiPublicKey(key, data, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportEccsiPublicKey(NULL, data, &sz, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); /* No key to export */ ret = wc_ExportEccsiPublicKey(key, data, &sz, 1); - if (ret != BAD_STATE_E) + if (ret != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportEccsiPublicKey(NULL, NULL, 0, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportEccsiPublicKey(key, NULL, 0, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportEccsiPublicKey(NULL, data, 0, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashEccsiId(NULL, WC_HASH_TYPE_SHA256, NULL, 1, NULL, NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashEccsiId(key, WC_HASH_TYPE_SHA256, id, 1, pvt, hash, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashEccsiId(key, WC_HASH_TYPE_SHA256, id, 1, pvt, NULL, &hashSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashEccsiId(key, WC_HASH_TYPE_SHA256, id, 1, NULL, hash, &hashSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashEccsiId(key, WC_HASH_TYPE_SHA256, NULL, 1, pvt, hash, &hashSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashEccsiId(NULL, WC_HASH_TYPE_SHA256, id, 1, pvt, hash, &hashSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_HashEccsiId(key, WC_HASH_TYPE_SHA256, id, 1, pvt, hash, &hashSz); - if (ret != BAD_STATE_E) + if (ret != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetEccsiHash(NULL, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetEccsiHash(key, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetEccsiHash(NULL, hash, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetEccsiPair(NULL, NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetEccsiPair(key, NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetEccsiPair(NULL, ssk, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetEccsiPair(NULL, NULL, pvt); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetEccsiPair(key, ssk, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetEccsiPair(key, NULL, pvt); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetEccsiPair(NULL, ssk, pvt); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignEccsiHash(NULL, NULL, WC_HASH_TYPE_SHA256, NULL, 0, sig, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignEccsiHash(key, rng, WC_HASH_TYPE_SHA256, data, 0, sig, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignEccsiHash(key, rng, WC_HASH_TYPE_SHA256, NULL, 0, sig, &sigSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignEccsiHash(key, NULL, WC_HASH_TYPE_SHA256, data, 0, sig, &sigSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SignEccsiHash(NULL, rng, WC_HASH_TYPE_SHA256, data, 0, sig, &sigSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); /* Key not set. */ ret = wc_SignEccsiHash(key, rng, WC_HASH_TYPE_SHA256, data, 0, NULL, &sigSz); - if (ret != BAD_STATE_E) + if (ret != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_VerifyEccsiHash(NULL, WC_HASH_TYPE_SHA256, NULL, 0, NULL, 0, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_VerifyEccsiHash(key, WC_HASH_TYPE_SHA256, NULL, 0, NULL, 0, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_VerifyEccsiHash(NULL, WC_HASH_TYPE_SHA256, data, 0, NULL, 0, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_VerifyEccsiHash(NULL, WC_HASH_TYPE_SHA256, NULL, 0, sig, 0, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_VerifyEccsiHash(NULL, WC_HASH_TYPE_SHA256, NULL, 0, NULL, 0, &valid); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_VerifyEccsiHash(key, WC_HASH_TYPE_SHA256, data, 0, sig, 0, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_VerifyEccsiHash(key, WC_HASH_TYPE_SHA256, data, 0, NULL, 0, &valid); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_VerifyEccsiHash(key, WC_HASH_TYPE_SHA256, NULL, 0, sig, 0, &valid); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_VerifyEccsiHash(NULL, WC_HASH_TYPE_SHA256, data, 0, sig, 0, &valid); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_VerifyEccsiHash(key, WC_HASH_TYPE_SHA256, data, 0, sig, 0, &valid); - if (ret != BAD_STATE_E) + if (ret != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetEccsiPair(key, ssk, pvt); @@ -44040,7 +45055,7 @@ static wc_test_ret_t eccsi_api_test(WC_RNG* rng, EccsiKey* key, mp_int* ssk, /* Identity hash not set. */ ret = wc_SignEccsiHash(key, rng, WC_HASH_TYPE_SHA256, data, 0, NULL, &sigSz); - if (ret != BAD_STATE_E) + if (ret != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(ret); wc_FreeEccsiKey(key); @@ -44155,7 +45170,7 @@ static wc_test_ret_t eccsi_enc_dec_pair_test(EccsiKey* priv, mp_int* ssk, ecc_po ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out); ret = wc_EncodeEccsiPair(priv, ssk, pvt, NULL, &sz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); if (sz != 32 * 3) ERROR_OUT(WC_TEST_RET_ENC_NC, out); @@ -44175,7 +45190,7 @@ static wc_test_ret_t eccsi_enc_dec_pair_test(EccsiKey* priv, mp_int* ssk, ecc_po ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); ret = wc_EncodeEccsiSsk(priv, ssk, NULL, &sz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); if (sz != 32) ERROR_OUT(WC_TEST_RET_ENC_NC, out); @@ -44192,7 +45207,7 @@ static wc_test_ret_t eccsi_enc_dec_pair_test(EccsiKey* priv, mp_int* ssk, ecc_po ERROR_OUT(WC_TEST_RET_ENC_NC, out); ret = wc_EncodeEccsiPvt(priv, pvt, NULL, &sz, 1); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); if (sz != 32 * 2) ERROR_OUT(WC_TEST_RET_ENC_NC, out); @@ -44240,7 +45255,7 @@ static wc_test_ret_t eccsi_imp_exp_key_test(EccsiKey* priv) word32 sz; ret = wc_ExportEccsiKey(priv, NULL, &sz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); if (sz != 32 * 3) return WC_TEST_RET_ENC_NC; @@ -44251,7 +45266,7 @@ static wc_test_ret_t eccsi_imp_exp_key_test(EccsiKey* priv) if (ret != 0) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportEccsiKey(priv, NULL, &sz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); if (sz != 32 * 3) return WC_TEST_RET_ENC_NC; @@ -44264,7 +45279,7 @@ static wc_test_ret_t eccsi_imp_exp_key_test(EccsiKey* priv) return WC_TEST_RET_ENC_NC; ret = wc_ExportEccsiPrivateKey(priv, NULL, &sz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); if (sz != 32) return WC_TEST_RET_ENC_NC; @@ -44275,7 +45290,7 @@ static wc_test_ret_t eccsi_imp_exp_key_test(EccsiKey* priv) if (ret != 0) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportEccsiPrivateKey(priv, NULL, &sz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); if (sz != 32) return WC_TEST_RET_ENC_NC; @@ -44298,7 +45313,7 @@ static wc_test_ret_t eccsi_imp_exp_pubkey_test(EccsiKey* key1, EccsiKey* key2) word32 sz; ret = wc_ExportEccsiPublicKey(key1, NULL, &sz, 1); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); if (sz != 32 * 2) return WC_TEST_RET_ENC_NC; @@ -44394,7 +45409,7 @@ static wc_test_ret_t eccsi_sign_verify_test(EccsiKey* priv, EccsiKey* pub, WC_RN #ifdef WOLFSSL_SHA384 ret = wc_HashEccsiId(priv, WC_HASH_TYPE_SHA384, id, idSz, pvt, hashPriv, &hashSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); #endif ret = wc_HashEccsiId(priv, WC_HASH_TYPE_SHA256, id, idSz, pvt, hashPriv, @@ -44422,7 +45437,7 @@ static wc_test_ret_t eccsi_sign_verify_test(EccsiKey* priv, EccsiKey* pub, WC_RN ret = wc_SignEccsiHash(priv, rng, WC_HASH_TYPE_SHA256, msg, msgSz, NULL, &sigSz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); if (sigSz != 129) return WC_TEST_RET_ENC_NC; @@ -44654,10 +45669,10 @@ static wc_test_ret_t sakke_api_test(WC_RNG* rng, SakkeKey* key, ecc_point* rsk) word32 len; ret = wc_InitSakkeKey_ex(NULL, 128, ECC_SAKKE_1, NULL, INVALID_DEVID); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_InitSakkeKey_ex(NULL, 128, ECC_SAKKE_1, HEAP_HINT, INVALID_DEVID); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); wc_FreeSakkeKey(NULL); @@ -44670,386 +45685,386 @@ static wc_test_ret_t sakke_api_test(WC_RNG* rng, SakkeKey* key, ecc_point* rsk) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkeKey(NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkeKey(key, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkeKey(NULL, rng); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkePublicKey(NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkePublicKey(key, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkePublicKey(NULL, rsk); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkeRsk(NULL, NULL, 1, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkeRsk(key, id, 1, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkeRsk(key, NULL, 1, rsk); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkeRsk(NULL, id, 1, rsk); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateSakkeRsk(NULL, NULL, 1, NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateSakkeRsk(key, id, 1, rsk, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ValidateSakkeRsk(NULL, id, 1, rsk, &valid); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportSakkeKey(NULL, NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportSakkeKey(key, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportSakkeKey(NULL, data, &sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportSakkeKey(NULL, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportSakkeKey(key, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportSakkeKey(NULL, data, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportSakkePrivateKey(NULL, NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportSakkePrivateKey(key, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportSakkePrivateKey(NULL, data, &sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportSakkePrivateKey(NULL, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportSakkePrivateKey(key, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportSakkePrivateKey(NULL, data, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); sz = sizeof(data); ret = wc_EncodeSakkeRsk(NULL, NULL, data, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeSakkeRsk(key, rsk, data, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeSakkeRsk(key, NULL, data, &sz, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_EncodeSakkeRsk(NULL, rsk, data, &sz, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeSakkeRsk(NULL, NULL, sz, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeSakkeRsk(key, data, sz, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeSakkeRsk(key, NULL, sz, rsk); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DecodeSakkeRsk(NULL, data, sz, rsk); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportSakkeRsk(NULL, NULL, sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportSakkeRsk(key, NULL, sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportSakkeRsk(NULL, data, sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportSakkeRsk(key, data, 1); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkeRskTable(NULL, NULL, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkeRskTable(key, NULL, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkeRskTable(NULL, rsk, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkeRskTable(NULL, NULL, data, &len); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkeRskTable(key, rsk, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkeRskTable(key, NULL, data, &len); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkeRskTable(NULL, rsk, data, &len); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkeRskTable(key, rsk, NULL, &len); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); len--; ret = wc_GenerateSakkeRskTable(key, rsk, data, &len); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportSakkePublicKey(NULL, data, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportSakkePublicKey(key, data, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportSakkePublicKey(NULL, data, &sz, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportSakkePublicKey(NULL, NULL, sz, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportSakkePublicKey(key, NULL, sz, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ImportSakkePublicKey(NULL, data, sz, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GetSakkeAuthSize(NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GetSakkeAuthSize(key, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GetSakkeAuthSize(NULL, &authSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkePointI(NULL, NULL, SAKKE_ID_MAX_SIZE + 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkePointI(key, NULL, SAKKE_ID_MAX_SIZE + 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkePointI(NULL, id, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkePointI(NULL, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkePointI(key, id, SAKKE_ID_MAX_SIZE + 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkePointI(key, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkePointI(NULL, id, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkePointITable(NULL, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkePointITable(key, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkePointITable(NULL, data, &len); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkePointITable(key, NULL, &len); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); len--; ret = wc_GenerateSakkePointITable(key, data, &len); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkePointITable(NULL, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkePointITable(key, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkePointITable(NULL, data, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkePointITable(key, data, 1); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_ClearSakkePointITable(NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GetSakkePointI(NULL, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GetSakkePointI(key, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GetSakkePointI(NULL, data, &sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); sz = 1; ret = wc_GetSakkePointI(key, data, &sz); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); sz = 256; ret = wc_SetSakkePointI(NULL, NULL, 1, NULL, sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkePointI(key, NULL, 1, NULL, sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkePointI(NULL, id, 1, NULL, sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkePointI(NULL, NULL, 1, data, sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkePointI(key, id, 1, NULL, sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkePointI(key, NULL, 1, data, sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkePointI(NULL, id, 1, data, sz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkePointI(key, id, SAKKE_ID_MAX_SIZE + 1, data, sz); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkePointI(key, id, 1, data, sz - 1); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkeIdentity(NULL, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkeIdentity(key, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkeIdentity(NULL, id, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ssvSz = sizeof(ssv); ret = wc_MakeSakkeEncapsulatedSSV(NULL, WC_HASH_TYPE_SHA256, NULL, ssvSz, auth, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkeEncapsulatedSSV(key, WC_HASH_TYPE_SHA256, NULL, ssvSz, auth, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkeEncapsulatedSSV(NULL, WC_HASH_TYPE_SHA256, ssv, ssvSz, auth, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkeEncapsulatedSSV(NULL, WC_HASH_TYPE_SHA256, NULL, ssvSz, auth, &authSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkeEncapsulatedSSV(key, WC_HASH_TYPE_SHA256, ssv, ssvSz, auth, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkeEncapsulatedSSV(key, WC_HASH_TYPE_SHA256, NULL, ssvSz, auth, &authSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkeEncapsulatedSSV(NULL, WC_HASH_TYPE_SHA256, ssv, ssvSz, auth, &authSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_MakeSakkeEncapsulatedSSV(key, WC_HASH_TYPE_SHA256, ssv, ssvSz, auth, &authSz); - if (ret != BAD_STATE_E) + if (ret != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkeSSV(NULL, NULL, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkeSSV(key, rng, data, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkeSSV(key, NULL, data, &ssvSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_GenerateSakkeSSV(NULL, rng, data, &ssvSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkeRsk(NULL, NULL, data, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkeRsk(key, NULL, data, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkeRsk(NULL, rsk, data, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ssvSz = sizeof(ssv); authSz = sizeof(auth); ret = wc_DeriveSakkeSSV(NULL, WC_HASH_TYPE_SHA256, NULL, ssvSz, NULL, authSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DeriveSakkeSSV(key, WC_HASH_TYPE_SHA256, NULL, ssvSz, NULL, authSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DeriveSakkeSSV(NULL, WC_HASH_TYPE_SHA256, ssv, ssvSz, NULL, authSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DeriveSakkeSSV(NULL, WC_HASH_TYPE_SHA256, NULL, ssvSz, auth, authSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DeriveSakkeSSV(key, WC_HASH_TYPE_SHA256, ssv, ssvSz, NULL, authSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DeriveSakkeSSV(key, WC_HASH_TYPE_SHA256, NULL, ssvSz, auth, authSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DeriveSakkeSSV(NULL, WC_HASH_TYPE_SHA256, ssv, ssvSz, auth, authSz); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_DeriveSakkeSSV(key, WC_HASH_TYPE_SHA256, ssv, ssvSz, auth, authSz); - if (ret != BAD_STATE_E) + if (ret != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkeIdentity(key, id, 1); @@ -45057,7 +46072,7 @@ static wc_test_ret_t sakke_api_test(WC_RNG* rng, SakkeKey* key, ecc_point* rsk) return WC_TEST_RET_ENC_EC(ret); ret = wc_DeriveSakkeSSV(key, WC_HASH_TYPE_SHA256, ssv, ssvSz, auth, authSz); - if (ret != BAD_STATE_E) + if (ret != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SetSakkeIdentity(key, id, 0); if (ret != 0) @@ -45068,7 +46083,7 @@ static wc_test_ret_t sakke_api_test(WC_RNG* rng, SakkeKey* key, ecc_point* rsk) return WC_TEST_RET_ENC_EC(ret); ret = wc_DeriveSakkeSSV(key, WC_HASH_TYPE_SHA256, ssv, ssvSz, auth, authSz); - if (ret != BAD_STATE_E) + if (ret != WC_NO_ERR_TRACE(BAD_STATE_E)) return WC_TEST_RET_ENC_EC(ret); wc_FreeSakkeKey(key); @@ -45240,7 +46255,7 @@ static wc_test_ret_t sakke_kat_derive_test(SakkeKey* key, ecc_point* rsk) return WC_TEST_RET_ENC_EC(ret); iTableLen = 0; ret = wc_GenerateSakkePointITable(key, NULL, &iTableLen); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); if (iTableLen != 0) { iTable = (byte*)XMALLOC(iTableLen, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -45252,7 +46267,7 @@ static wc_test_ret_t sakke_kat_derive_test(SakkeKey* key, ecc_point* rsk) } len = 0; ret = wc_GenerateSakkeRskTable(key, rsk, NULL, &len); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); if (len > 0) { table = (byte*)XMALLOC(len, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -45280,10 +46295,8 @@ static wc_test_ret_t sakke_kat_derive_test(SakkeKey* key, ecc_point* rsk) if (ret != 0) return WC_TEST_RET_ENC_EC(ret); /* Dispose of tables */ - if (iTable != NULL) - XFREE(iTable, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (table != NULL) - XFREE(table, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(iTable, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(table, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); /* Make sure the key public key is exportable - convert to Montgomery form * in Validation. @@ -45446,7 +46459,7 @@ static wc_test_ret_t sakke_make_key_test(SakkeKey* priv, SakkeKey* pub, SakkeKey return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportSakkeKey(priv, NULL, &sz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); if (sz != 384) return WC_TEST_RET_ENC_NC; @@ -45473,7 +46486,7 @@ static wc_test_ret_t sakke_make_key_test(SakkeKey* priv, SakkeKey* pub, SakkeKey return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportSakkePrivateKey(priv, NULL, &sz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); if (sz != 128) return WC_TEST_RET_ENC_NC; @@ -45499,7 +46512,7 @@ static wc_test_ret_t sakke_make_key_test(SakkeKey* priv, SakkeKey* pub, SakkeKey return WC_TEST_RET_ENC_EC(ret); ret = wc_ExportSakkePublicKey(priv, NULL, &sz, 1); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); if (sz != 256) return WC_TEST_RET_ENC_NC; @@ -45585,7 +46598,7 @@ static wc_test_ret_t sakke_op_test(SakkeKey* priv, SakkeKey* pub, WC_RNG* rng, word32 sz; ret = wc_GenerateSakkeSSV(pub, rng, NULL, &ssvSz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); if (ssvSz != 16) return WC_TEST_RET_ENC_NC; @@ -45611,7 +46624,7 @@ static wc_test_ret_t sakke_op_test(SakkeKey* priv, SakkeKey* pub, WC_RNG* rng, ret = wc_MakeSakkeEncapsulatedSSV(pub, WC_HASH_TYPE_SHA256, ssv, ssvSz, NULL, &authSz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); if (authSz != 257) return WC_TEST_RET_ENC_NC; @@ -45630,7 +46643,7 @@ static wc_test_ret_t sakke_op_test(SakkeKey* priv, SakkeKey* pub, WC_RNG* rng, return WC_TEST_RET_ENC_NC; ret = wc_GetSakkePointI(pub, NULL, &sz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_EC(ret); if (sz != 256) return WC_TEST_RET_ENC_NC; @@ -45671,7 +46684,7 @@ static wc_test_ret_t sakke_op_test(SakkeKey* priv, SakkeKey* pub, WC_RNG* rng, ssv[0] ^= 0x80; ret = wc_DeriveSakkeSSV(priv, WC_HASH_TYPE_SHA256, ssv, ssvSz, auth, authSz); - if (ret != SAKKE_VERIFY_FAIL_E) + if (ret != WC_NO_ERR_TRACE(SAKKE_VERIFY_FAIL_E)) return WC_TEST_RET_ENC_EC(ret); ssv[0] ^= 0x80; @@ -45778,8 +46791,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t sakke_test(void) } if (rng_inited) wc_FreeRng(&rng); - if (key != NULL) - XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); if (pub != NULL) { wc_FreeSakkeKey(pub); XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -46050,8 +47062,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t cmac_test(void) out: #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (cmac) - XFREE(cmac, HEAP_HINT, DYNAMIC_TYPE_CMAC); + XFREE(cmac, HEAP_HINT, DYNAMIC_TYPE_CMAC); #endif return ret; @@ -46329,53 +47340,53 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t siphash_test(void) /* Testing bad parameters. */ ret = wc_InitSipHash(NULL, NULL, SIPHASH_MAC_SIZE_8); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_InitSipHash(NULL, siphash_key, SIPHASH_MAC_SIZE_8); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_InitSipHash(&siphash, NULL, SIPHASH_MAC_SIZE_8); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_InitSipHash(&siphash, siphash_key, 7); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_InitSipHash(&siphash, siphash_key, SIPHASH_MAC_SIZE_8); if (ret != 0) return WC_TEST_RET_ENC_EC(ret); ret = wc_SipHashUpdate(NULL, NULL, 0); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SipHashUpdate(&siphash, NULL, 1); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SipHashFinal(NULL, NULL, SIPHASH_MAC_SIZE_8); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SipHashFinal(&siphash, NULL, SIPHASH_MAC_SIZE_8); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SipHashFinal(NULL, res, SIPHASH_MAC_SIZE_8); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SipHashFinal(&siphash, res, SIPHASH_MAC_SIZE_16); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SipHash(NULL, NULL, 0, NULL, SIPHASH_MAC_SIZE_16); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SipHash(siphash_key, NULL, 0, NULL, SIPHASH_MAC_SIZE_16); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SipHash(NULL, NULL, 0, res, SIPHASH_MAC_SIZE_16); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SipHash(siphash_key, NULL, 0, res, 15); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_SipHash(siphash_key, NULL, 1, res, SIPHASH_MAC_SIZE_16); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); /* Test cache with multiple non blocksize bytes */ @@ -46706,8 +47717,8 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t compress_test(void) ret = 0; /* success */ exit: - if (c) XFREE(c, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (d) XFREE(d, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(c, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(d, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -47197,7 +48208,7 @@ static int myDecryptionFunc(PKCS7* pkcs7, int encryptOID, byte* iv, int ivSz, /* if needing to find keyIdSz can call with NULL */ ret = wc_PKCS7_GetAttributeValue(pkcs7, OID, sizeof(OID), NULL, &keyIdSz); - if (ret != LENGTH_ONLY_E) { + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) { printf("Unexpected error %d when getting keyIdSz\n", ret); printf("Possibly no KEY ID attribute set\n"); ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); @@ -47700,7 +48711,9 @@ static wc_test_ret_t pkcs7enveloped_run_vectors(byte* rsaCert, word32 rsaCertSz, for (z = 0; z < envelopedSz; z++) { decodedSz = wc_PKCS7_DecodeEnvelopedData(pkcs7, enveloped + z, 1, decoded, PKCS7_BUF_SIZE); - if (decodedSz <= 0 && decodedSz != WC_PKCS7_WANT_READ_E) { + if (decodedSz <= 0 && + decodedSz != WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)) + { printf("unexpected error %d\n", decodedSz); ERROR_OUT(WC_TEST_RET_ENC_EC(decodedSz), out); } @@ -47750,12 +48763,9 @@ static wc_test_ret_t pkcs7enveloped_run_vectors(byte* rsaCert, word32 rsaCertSz, (void)rsaPrivKeySz; out: - if (testVectors) - XFREE(testVectors, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (enveloped) - XFREE(enveloped, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (decoded) - XFREE(decoded, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(testVectors, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(enveloped, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(decoded, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -48389,7 +49399,9 @@ static wc_test_ret_t pkcs7authenveloped_run_vectors(byte* rsaCert, word32 rsaCer for (z = 0; z < envelopedSz; z++) { decodedSz = wc_PKCS7_DecodeAuthEnvelopedData(pkcs7, enveloped + z, 1, decoded, PKCS7_BUF_SIZE); - if (decodedSz <= 0 && decodedSz != WC_PKCS7_WANT_READ_E) { + if (decodedSz <= 0 && + decodedSz != WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)) + { printf("unexpected error %d\n", decodedSz); ERROR_OUT(WC_TEST_RET_ENC_EC(decodedSz), out); } @@ -48458,12 +49470,9 @@ static wc_test_ret_t pkcs7authenveloped_run_vectors(byte* rsaCert, word32 rsaCer #endif out: - if (testVectors) - XFREE(testVectors, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (enveloped) - XFREE(enveloped, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (decoded) - XFREE(decoded, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(testVectors, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(enveloped, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(decoded, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -48633,7 +49642,7 @@ static wc_test_ret_t getFirmwareKey(PKCS7* pkcs7, byte* key, word32 keySz) /* find keyID in fwWrappedFirmwareKey */ ret = wc_PKCS7_GetAttributeValue(pkcs7, fwWrappedFirmwareKey, sizeof(fwWrappedFirmwareKey), NULL, &atrSz); - if (ret == LENGTH_ONLY_E) { + if (ret == WC_NO_ERR_TRACE(LENGTH_ONLY_E)) { XMEMSET(atr, 0, sizeof(atr)); ret = wc_PKCS7_GetAttributeValue(pkcs7, fwWrappedFirmwareKey, sizeof(fwWrappedFirmwareKey), atr, &atrSz); @@ -48878,7 +49887,7 @@ static wc_test_ret_t verifyBundle(byte* derBuf, word32 derSz, int keyHint) /* Get size of SID and print it out */ ret = wc_PKCS7_GetSignerSID(pkcs7, NULL, &sidSz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) goto out; sid = (byte*)XMALLOC(sidSz, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -48926,12 +49935,10 @@ static wc_test_ret_t verifyBundle(byte* derBuf, word32 derSz, int keyHint) out: - if (decoded) - XFREE(decoded, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(decoded, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); if (pkcs7) wc_PKCS7_Free(pkcs7); - if (sid) - XFREE(sid, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(sid, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -48988,8 +49995,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t pkcs7callback_test(byte* cert, word32 cert ret = 0; out: - if (derBuf) - XFREE(derBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(derBuf, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -49180,7 +50186,9 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t pkcs7encrypted_test(void) for (z = 0; z < encryptedSz; z++) { decodedSz = wc_PKCS7_DecodeEncryptedData(pkcs7, encrypted + z, 1, decoded, PKCS7_BUF_SIZE); - if (decodedSz <= 0 && decodedSz != WC_PKCS7_WANT_READ_E) { + if (decodedSz <= 0 && + decodedSz != WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)) + { printf("unexpected error %d\n", decodedSz); ERROR_OUT(WC_TEST_RET_ENC_EC(decodedSz), out); } @@ -49258,10 +50266,8 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t pkcs7encrypted_test(void) } out: - if (encrypted) - XFREE(encrypted, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (decoded) - XFREE(decoded, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(encrypted, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(decoded, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); return ret; } @@ -49384,10 +50390,8 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t pkcs7compressed_test(void) out: #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC) - if (compressed) - XFREE(compressed, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (decoded) - XFREE(decoded, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(compressed, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(decoded, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif return ret; @@ -49874,7 +50878,7 @@ static wc_test_ret_t pkcs7signed_run_vectors( if (testVectors[i].signedAttribs != NULL) { ret = wc_PKCS7_GetAttributeValue(pkcs7, oidPt, (word32)oidSz, NULL, (word32*)&bufSz); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); ret = 0; } @@ -49910,10 +50914,8 @@ static wc_test_ret_t pkcs7signed_run_vectors( if (pkcs7 != NULL) wc_PKCS7_Free(pkcs7); - if (out != NULL) - XFREE(out, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - if (testVectors != NULL) - XFREE(testVectors, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(out, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(testVectors, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); wc_FreeRng(&rng); if (ret > 0) @@ -50353,7 +51355,7 @@ static wc_test_ret_t pkcs7signed_run_SingleShotVectors( word32 z; for (z = 0; z < outSz && ret != 0; z++) { ret = wc_PKCS7_VerifySignedData(pkcs7, out + z, 1); - if (ret < 0 && ret != WC_PKCS7_WANT_READ_E) { + if (ret < 0 && ret != WC_NO_ERR_TRACE(WC_PKCS7_WANT_READ_E)) { printf("unexpected error %d\n", ret); ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); } @@ -50444,15 +51446,12 @@ static wc_test_ret_t pkcs7signed_run_SingleShotVectors( if (pkcs7 != NULL) wc_PKCS7_Free(pkcs7); - if (out != NULL) - XFREE(out, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(out, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #if defined(HAVE_LIBZ) && !defined(NO_PKCS7_COMPRESSED_DATA) && \ !defined(NO_PKCS7_ENCRYPTED_DATA) - if (encryptedTmp != NULL) - XFREE(encryptedTmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(encryptedTmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #endif - if (testVectors != NULL) - XFREE(testVectors, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(testVectors, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); wc_FreeRng(&rng); if (ret > 0) @@ -50779,10 +51778,10 @@ static wc_test_ret_t mp_test_radix_10(mp_int* a, mp_int* r, WC_RNG* rng) } ret = mp_read_radix(r, badStr1, MP_RADIX_DEC); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_read_radix(r, badStr2, MP_RADIX_DEC); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_read_radix(r, empty2, MP_RADIX_DEC); if (ret != MP_OKAY) @@ -50856,7 +51855,7 @@ static wc_test_ret_t mp_test_radix_16(mp_int* a, mp_int* r, WC_RNG* rng) if (ret != MP_OKAY) return WC_TEST_RET_ENC_EC(ret); ret = mp_read_radix(r, badStr2, MP_RADIX_HEX); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); mp_set(r, 1); @@ -50872,7 +51871,7 @@ static wc_test_ret_t mp_test_radix_16(mp_int* a, mp_int* r, WC_RNG* rng) XMEMSET(longStr+1, '0', sizeof(longStr) - 2); longStr[sizeof(longStr)-1] = '\0'; ret = mp_read_radix(r, longStr, MP_RADIX_HEX); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif @@ -50899,10 +51898,10 @@ static wc_test_ret_t mp_test_radix_16(mp_int* a, mp_int* r, WC_RNG* rng) #ifdef WOLFSSL_SP_MATH ret = mp_toradix(a, str, 8); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_radix_size(a, 8, &size); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif @@ -51021,7 +52020,7 @@ static wc_test_ret_t mp_test_read_to_bin(mp_int* a) /* Length too small. */ ret = mp_to_unsigned_bin_len(a, out, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_read_unsigned_bin(a, NULL, 0); @@ -51103,7 +52102,7 @@ static wc_test_ret_t mp_test_param(mp_int* a, mp_int* b, mp_int* r, WC_RNG* rng) (void)r; ret = mp_init(NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #if !defined(WOLFSSL_RSA_PUBLIC_ONLY) || (!defined(NO_DH) || defined(HAVE_ECC)) @@ -51116,11 +52115,11 @@ static wc_test_ret_t mp_test_param(mp_int* a, mp_int* b, mp_int* r, WC_RNG* rng) #if !defined(WOLFSSL_RSA_VERIFY_ONLY) || !defined(NO_DH) || defined(HAVE_ECC) ret = mp_grow(NULL, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #ifdef WOLFSSL_SP_MATH ret = mp_grow(a, SP_INT_DIGITS + 1); - if (ret != MP_MEM) + if (ret != WC_NO_ERR_TRACE(MP_MEM)) return WC_TEST_RET_ENC_EC(ret); #endif #endif @@ -51128,13 +52127,13 @@ static wc_test_ret_t mp_test_param(mp_int* a, mp_int* b, mp_int* r, WC_RNG* rng) mp_clear(NULL); ret = mp_abs(NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_abs(a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_abs(NULL, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_unsigned_bin_size(NULL); @@ -51145,35 +52144,35 @@ static wc_test_ret_t mp_test_param(mp_int* a, mp_int* b, mp_int* r, WC_RNG* rng) XMEMSET(buffer, 0, sizeof(buffer)); ret = mp_read_unsigned_bin(NULL, NULL, sizeof(buffer)); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_read_unsigned_bin(NULL, buffer, sizeof(buffer)); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_read_unsigned_bin(a, NULL, sizeof(buffer)); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_read_unsigned_bin(a, buffer, SP_INT_DIGITS * SP_WORD_SIZEOF + 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #if defined(HAVE_ECC) || defined(WOLFSSL_SP_MATH_ALL) ret = mp_read_radix(NULL, NULL, 16); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_read_radix(a, NULL, 16); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_read_radix(NULL, hexStr, 16); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #ifndef WOLFSSL_SP_INT_NEGATIVE ret = mp_read_radix(a, negStr, 16); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #ifdef WOLFSSL_SP_MATH_ALL ret = mp_read_radix(a, negStr, 10); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif /* WOLFSSL_SP_MATH_ALL */ #endif /* WOLFSSL_SP_INT_NEGATIVE */ @@ -51181,12 +52180,12 @@ static wc_test_ret_t mp_test_param(mp_int* a, mp_int* b, mp_int* r, WC_RNG* rng) #ifndef WOLFSSL_SP_MATH_ALL /* Radix 10 only supported with ALL. */ ret = mp_read_radix(a, decStr, 10); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif /* Radix 8 not supported SP_INT. */ ret = mp_read_radix(a, "0123", 8); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_count_bits(NULL); @@ -51209,43 +52208,43 @@ static wc_test_ret_t mp_test_param(mp_int* a, mp_int* b, mp_int* r, WC_RNG* rng) defined(HAVE_ECC) || defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA) || \ !defined(NO_RSA) ret = mp_set_bit(NULL, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if !defined(NO_DH) || defined(HAVE_ECC) || defined(WC_RSA_BLINDING) || \ !defined(WOLFSSL_RSA_VERIFY_ONLY) ret = mp_to_unsigned_bin(NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_to_unsigned_bin(a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_to_unsigned_bin(NULL, buffer); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif ret = mp_to_unsigned_bin_len(NULL, NULL, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_to_unsigned_bin_len(a, NULL, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_to_unsigned_bin_len(NULL, buffer, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #if defined(WOLFSSL_SP_MATH_ALL) && !defined(NO_RSA) && \ !defined(WOLFSSL_RSA_VERIFY_ONLY) ret = mp_to_unsigned_bin_at_pos(0, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_to_unsigned_bin_at_pos(0, a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_to_unsigned_bin_at_pos(0, NULL, buffer); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_to_unsigned_bin_at_pos(0, a, buffer); if (ret != MP_OKAY) @@ -51254,24 +52253,24 @@ static wc_test_ret_t mp_test_param(mp_int* a, mp_int* b, mp_int* r, WC_RNG* rng) #if !defined(WOLFSSL_RSA_VERIFY_ONLY) || (!defined(NO_DH) || defined(HAVE_ECC)) ret = mp_copy(NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_copy(a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_copy(NULL, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if defined(WOLFSSL_KEY_GEN) || !defined(NO_DH) ret = sp_2expt(NULL, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif ret = mp_set(NULL, 0); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_cmp_d(NULL, 0); @@ -51297,489 +52296,489 @@ static wc_test_ret_t mp_test_param(mp_int* a, mp_int* b, mp_int* r, WC_RNG* rng) #if !defined(NO_DH) || defined(HAVE_ECC) || defined(WC_RSA_BLINDING) || \ !defined(WOLFSSL_RSA_VERIFY_ONLY) ret = mp_lshd(NULL, 0); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_lshd(a, SP_INT_DIGITS + 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if defined(WOLFSSL_SP_MATH_ALL) ret = mp_div(NULL, NULL, a, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_div(a, NULL, a, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_div(NULL, b, a, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_div(a, b, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if defined(WOLFSSL_SP_MATH_ALL) || !defined(NO_DH) || defined(HAVE_ECC) || \ (!defined(NO_RSA) && !defined(WOLFSSL_RSA_VERIFY_ONLY)) ret = mp_mod(NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mod(a, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mod(NULL, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mod(NULL, NULL, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mod(a, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mod(a, NULL, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mod(NULL, b, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if !defined(NO_RSA) || defined(WOLFSSL_SP_MATH_ALL) ret = mp_set_int(NULL, 0); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if !defined(NO_RSA) || !defined(NO_DSA) || !defined(NO_DH) || \ (defined(HAVE_ECC) && defined(HAVE_COMP_KEY)) || defined(OPENSSL_EXTRA) ret = mp_exptmod_ex(NULL, NULL, 1, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(a, NULL, 1, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(NULL, a, 1, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(NULL, NULL, 1, a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(NULL, NULL, 1, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(a, a, 1, a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(a, a, 1, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(a, NULL, 1, a, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(NULL, a, 1, a, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(NULL, NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(a, NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(NULL, a, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(NULL, NULL, a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(NULL, NULL, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(a, a, a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(a, a, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(a, NULL, a, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(NULL, a, a, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if defined(WOLFSSL_KEY_GEN) && (!defined(NO_DH) || !defined(NO_DSA)) && \ !defined(WC_NO_RNG) ret = mp_rand_prime(NULL, 32, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_rand_prime(a, 32, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_rand_prime(NULL, 32, rng, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_rand_prime(a, 0, rng, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_RSA_VERIFY_ONLY) ret = mp_mul(NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mul(a, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mul(NULL, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mul(NULL, NULL, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mul(a, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mul(a, NULL, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mul(NULL, b, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if defined(WOLFSSL_SP_MATH_ALL) || defined(WOLFSSL_HAVE_SP_DH) || \ defined(HAVE_ECC) || (!defined(NO_RSA) && !defined(WOLFSSL_RSA_VERIFY_ONLY)) ret = mp_sqr(NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sqr(a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sqr(NULL, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if !defined(WOLFSSL_RSA_VERIFY_ONLY) ret = mp_sqrmod(NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sqrmod(a, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sqrmod(NULL, a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sqrmod(NULL, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sqrmod(a, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sqrmod(a, NULL, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sqrmod(NULL, a, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mulmod(NULL, NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mulmod(a, NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mulmod(NULL, a, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mulmod(NULL, NULL, a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mulmod(NULL, NULL, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mulmod(a, b, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mulmod(a, b, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mulmod(a, NULL, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mulmod(NULL, b, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if !defined(NO_PWDBASED) || defined(WOLFSSL_KEY_GEN) || !defined(NO_DH) || \ !defined(NO_RSA) || !defined(NO_DSA) ret = mp_add_d(NULL, 1, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_add_d(a, 1, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_add_d(NULL, 1, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if (!defined(NO_RSA) && !defined(WOLFSSL_RSA_VERIFY_ONLY)) || \ !defined(NO_DH) || defined(HAVE_ECC) || !defined(NO_DSA) ret = mp_sub_d(NULL, 1, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sub_d(a, 1, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sub_d(NULL, 1, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if (defined(WOLFSSL_SP_MATH_ALL) && !defined(WOLFSSL_RSA_VERIFY_ONLY)) || \ defined(WOLFSSL_KEY_GEN) || defined(HAVE_COMP_KEY) ret = mp_div_d(NULL, 0, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_div_d(a, 0, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_div_d(NULL, 1, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if (defined(HAVE_ECC) && defined(HAVE_COMP_KEY)) || \ (defined(OPENSSL_EXTRA) && defined(WOLFSSL_KEY_GEN)) ret = mp_mod_d(NULL, 0, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mod_d(a, 0, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mod_d(NULL, 0, &rd); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if defined(WOLFSSL_SP_MATH_ALL) && !defined(NO_RSA) && defined(WOLFSSL_KEY_GEN) ret = mp_gcd(NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_gcd(a, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_gcd(NULL, a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_gcd(NULL, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_gcd(a, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_gcd(a, NULL, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_gcd(NULL, a, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if !defined(WOLFSSL_SP_MATH) && defined(HAVE_ECC) ret = mp_div_2_mod_ct(NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_div_2_mod_ct(a, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_div_2_mod_ct(NULL, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_div_2_mod_ct(NULL, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_div_2_mod_ct(a, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_div_2_mod_ct(a, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_div_2_mod_ct(NULL, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_div_2(NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_div_2(a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_div_2(NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if (!defined(NO_RSA) && !defined(WOLFSSL_RSA_VERIFY_ONLY)) || \ defined(HAVE_ECC) || !defined(NO_DSA) || defined(OPENSSL_EXTRA) ret = mp_invmod(NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_invmod(a, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_invmod(NULL, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_invmod(NULL, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_invmod(a, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_invmod(a, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_invmod(NULL, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if !defined(WOLFSSL_SP_MATH) && defined(HAVE_ECC) ret = mp_invmod_mont_ct(NULL, NULL, NULL, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_invmod_mont_ct(a, NULL, NULL, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_invmod_mont_ct(NULL, b, NULL, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_invmod_mont_ct(NULL, NULL, a, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_invmod_mont_ct(a, b, NULL, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_invmod_mont_ct(a, NULL, a, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_invmod_mont_ct(NULL, b, a, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if !defined(NO_RSA) && defined(WOLFSSL_KEY_GEN) && !defined(WC_RSA_BLINDING) ret = mp_lcm(NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_lcm(a, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_lcm(NULL, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_lcm(NULL, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_lcm(a, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_lcm(a, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_lcm(NULL, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if defined(WOLFSSL_SP_MATH_ALL) || defined(WOLFSSL_HAVE_SP_DH) ret = mp_exptmod_ex(NULL, NULL, 1, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(a, NULL, 1, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(NULL, b, 1, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(NULL, NULL, 1, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(NULL, NULL, 1, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(a, b, 1, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(a, b, 1, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(a, NULL, 1, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_ex(NULL, b, 1, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod(NULL, NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod(a, NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod(NULL, b, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod(NULL, NULL, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod(NULL, NULL, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod(a, b, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod(a, b, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod(a, NULL, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod(NULL, b, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(NULL, NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(a, NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(NULL, b, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(NULL, NULL, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(NULL, NULL, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(a, b, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(a, b, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(a, NULL, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(NULL, b, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif @@ -51791,115 +52790,115 @@ static wc_test_ret_t mp_test_param(mp_int* a, mp_int* b, mp_int* r, WC_RNG* rng) #if defined(WOLFSSL_SP_MATH_ALL) || defined(WOLFSSL_HAVE_SP_DH) ret = mp_prime_is_prime(NULL, 1, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_prime_is_prime(a, 1, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_prime_is_prime(NULL, 1, &result); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_prime_is_prime(a, 0, &result); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_prime_is_prime(a, 1024, &result); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_prime_is_prime_ex(NULL, 1, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_prime_is_prime_ex(a, 1, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_prime_is_prime_ex(NULL, 1, &result, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_prime_is_prime_ex(NULL, 1, NULL, rng); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_prime_is_prime_ex(a, 1, &result, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_prime_is_prime_ex(a, 1, NULL, rng); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_prime_is_prime_ex(NULL, 1, &result, rng); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if defined(WOLFSSL_SP_MATH_ALL) || !defined(NO_DH) || !defined(NO_DSA) ret = mp_exch(NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exch(a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exch(NULL, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if (defined(WOLFSSL_KEY_GEN) && !defined(NO_RSA)) || \ defined(WOLFSSL_SP_MATH_ALL) ret = mp_mul_d(NULL, 1, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mul_d(a, 1, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mul_d(NULL, 1, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if !defined(WOLFSSL_RSA_VERIFY_ONLY) ret = mp_add(NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_add(a, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_add(NULL, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_add(NULL, NULL, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_add(a, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_add(a, NULL, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_add(NULL, b, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if defined(WOLFSSL_SP_MATH_ALL) || !defined(NO_DH) || defined(HAVE_ECC) || \ (!defined(NO_RSA) && !defined(WOLFSSL_RSA_VERIFY_ONLY)) ret = mp_sub(NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sub(a, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sub(NULL, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sub(NULL, NULL, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sub(a, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sub(a, NULL, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_sub(NULL, b, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif @@ -51907,126 +52906,126 @@ static wc_test_ret_t mp_test_param(mp_int* a, mp_int* b, mp_int* r, WC_RNG* rng) #if defined(WOLFSSL_SP_MATH_ALL) || (!defined(WOLFSSL_SP_MATH) && \ defined(WOLFSSL_CUSTOM_CURVES)) ret = mp_addmod(NULL, NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_addmod(a, NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_addmod(NULL, b, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_addmod(NULL, NULL, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_addmod(NULL, NULL, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_addmod(a, b, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_addmod(a, b, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_addmod(a, NULL, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_addmod(NULL, b, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #ifdef WOLFSSL_SP_MATH_ALL ret = mp_submod(NULL, NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_submod(a, NULL, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_submod(NULL, b, NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_submod(NULL, NULL, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_submod(NULL, NULL, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_submod(a, b, b, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_submod(a, b, NULL, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_submod(a, NULL, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_submod(NULL, b, b, a); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #ifdef WOLFSSL_SP_MATH_ALL ret = mp_div_2d(NULL, 1, a, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mod_2d(NULL, 1, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mod_2d(a, 1, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mod_2d(NULL, 1, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mul_2d(NULL, 1, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mul_2d(a, 1, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_mul_2d(NULL, 1, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if defined(WOLFSSL_SP_MATH_ALL) || defined(WOLFSSL_HAVE_SP_DH) || \ defined(HAVE_ECC) || (!defined(NO_RSA) && !defined(WOLFSSL_RSA_VERIFY_ONLY)) ret = mp_montgomery_reduce(NULL, NULL, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_montgomery_reduce(a, NULL, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_montgomery_reduce(NULL, b, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); mp_zero(b); ret = mp_montgomery_reduce(a, b, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #ifdef WOLFSSL_SP_MATH_ALL ret = mp_montgomery_setup(NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_montgomery_setup(a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_montgomery_setup(NULL, &rho); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_montgomery_calc_normalization(NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_montgomery_calc_normalization(a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_montgomery_calc_normalization(NULL, b); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif @@ -52036,53 +53035,53 @@ static wc_test_ret_t mp_test_param(mp_int* a, mp_int* b, mp_int* r, WC_RNG* rng) #if defined(WC_MP_TO_RADIX) || defined(WOLFSSL_SP_MATH_ALL) ret = mp_tohex(NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_tohex(a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_tohex(NULL, hexStr); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #if defined(WOLFSSL_KEY_GEN) || defined(HAVE_COMP_KEY) ret = mp_todecimal(NULL, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_todecimal(a, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_todecimal(NULL, decStr); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif #ifdef WOLFSSL_SP_MATH_ALL ret = mp_toradix(NULL, NULL, MP_RADIX_HEX); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_toradix(a, NULL, MP_RADIX_HEX); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_toradix(NULL, hexStr, MP_RADIX_HEX); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_toradix(a, hexStr, 3); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_radix_size(NULL, MP_RADIX_HEX, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_radix_size(a, MP_RADIX_HEX, NULL); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_radix_size(NULL, MP_RADIX_HEX, &size); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_radix_size(a, 3, &size); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif @@ -52167,11 +53166,11 @@ static wc_test_ret_t mp_test_set_is_bit(mp_int* a) i = SP_INT_MAX_BITS + j; if (mp_is_bit_set(a, i)) return WC_TEST_RET_ENC_NC; - if (mp_set_bit(a, i) != MP_VAL) + if (mp_set_bit(a, i) != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_NC; #ifdef WOLFSSL_KEY_GEN ret = mp_2expt(a, i); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif } @@ -52402,7 +53401,7 @@ static wc_test_ret_t mp_test_div(mp_int* a, mp_int* d, mp_int* r, mp_int* rem, mp_zero(d); ret = mp_div(a, d, r, rem); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); mp_set(d, 1); @@ -52541,7 +53540,7 @@ static wc_test_ret_t mp_test_prime(mp_int* a, WC_RNG* rng) if (ret != 0) return WC_TEST_RET_ENC_EC(ret); #else - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_NC; #endif #ifndef WOLFSSL_SP_MATH @@ -52561,13 +53560,13 @@ static wc_test_ret_t mp_test_prime(mp_int* a, WC_RNG* rng) #endif ret = mp_prime_is_prime(a, 0, &res); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_prime_is_prime(a, -1, &res); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_prime_is_prime(a, 257, &res); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); mp_set(a, 1); @@ -52650,13 +53649,13 @@ static wc_test_ret_t mp_test_lcm_gcd(mp_int* a, mp_int* b, mp_int* r, mp_int* ex mp_set(a, 0); mp_set(b, 1); ret = mp_lcm(a, a, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_lcm(a, b, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_lcm(b, a, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); for (i = 0; i < (int)(sizeof(kat) / sizeof(*kat)); i++) { @@ -52712,7 +53711,7 @@ static wc_test_ret_t mp_test_lcm_gcd(mp_int* a, mp_int* b, mp_int* r, mp_int* ex if (ret != MP_EQ) return WC_TEST_RET_ENC_EC(ret); ret = mp_gcd(b, b, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); return 0; @@ -52821,7 +53820,7 @@ static wc_test_ret_t mp_test_mod_d(mp_int* a, WC_RNG* rng) if (ret != MP_OKAY) return WC_TEST_RET_ENC_EC(ret); ret = mp_mod_d(a, 0, &r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); mp_zero(a); @@ -52951,25 +53950,25 @@ static wc_test_ret_t mp_test_invmod(mp_int* a, mp_int* m, mp_int* r) mp_set(a, 0); mp_set(m, 1); ret = mp_invmod(a, m, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_invmod(m, a, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); mp_set(a, 2); mp_set(m, 4); ret = mp_invmod(a, m, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); mp_set(a, 3); mp_set(m, 6); ret = mp_invmod(a, m, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); mp_set(a, 5*9); mp_set(m, 6*9); ret = mp_invmod(a, m, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); mp_set(a, 1); mp_set(m, 4); @@ -53003,7 +54002,7 @@ static wc_test_ret_t mp_test_invmod(mp_int* a, mp_int* m, mp_int* r) mp_set(m, 0); mp_set_bit(m, (r->size / 2) * SP_WORD_SIZE); ret = mp_invmod(a, m, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); /* Maximum modulus - even. */ mp_set(m, 0); @@ -53024,22 +54023,22 @@ static wc_test_ret_t mp_test_invmod(mp_int* a, mp_int* m, mp_int* r) mp_set(a, 0); mp_set(m, 3); ret = mp_invmod_mont_ct(a, m, r, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); mp_set(a, 1); mp_set(m, 0); ret = mp_invmod_mont_ct(a, m, r, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); mp_set(a, 1); mp_set(m, 1); ret = mp_invmod_mont_ct(a, m, r, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); mp_set(a, 1); mp_set(m, 2); ret = mp_invmod_mont_ct(a, m, r, 1); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); mp_set(a, 1); @@ -53063,10 +54062,10 @@ static wc_test_ret_t mp_test_exptmod(mp_int* b, mp_int* e, mp_int* m, mp_int* r) mp_set(e, 0x3); mp_set(m, 0x0); ret = mp_exptmod_ex(b, e, 1, m, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(b, e, m, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); @@ -53171,10 +54170,10 @@ static wc_test_ret_t mp_test_exptmod(mp_int* b, mp_int* e, mp_int* m, mp_int* r) mp_mul_2d(m, SP_WORD_SIZE * SP_INT_DIGITS / 2, m); mp_add_d(m, 0x01, m); ret = mp_exptmod_ex(b, e, 1, m, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); ret = mp_exptmod_nct(b, e, m, r); - if (ret != MP_VAL) + if (ret != WC_NO_ERR_TRACE(MP_VAL)) return WC_TEST_RET_ENC_EC(ret); #endif @@ -53432,7 +54431,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t mp_test(void) * - if p and a are even it will fail. */ ret = mp_invmod(a, p, r1); - if (ret != 0 && ret != MP_VAL) + if (ret != 0 && ret != WC_NO_ERR_TRACE(MP_VAL)) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), done); #ifndef WOLFSSL_SP_MATH @@ -54015,7 +55014,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t berder_test(void) for (i = 0; i < (int)(sizeof(testData) / sizeof(*testData)); i++) { ret = wc_BerToDer(testData[i].in, testData[i].inSz, NULL, &len); - if (ret != LENGTH_ONLY_E) + if (ret != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) return WC_TEST_RET_ENC_I(i); if (len != testData[i].outSz) return WC_TEST_RET_ENC_I(i); @@ -54028,44 +55027,44 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t berder_test(void) for (l = 1; l < testData[i].inSz; l++) { ret = wc_BerToDer(testData[i].in, l, NULL, &len); - if (ret != ASN_PARSE_E) + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) return WC_TEST_RET_ENC_EC(ret); len = testData[i].outSz; ret = wc_BerToDer(testData[i].in, l, out, &len); - if (ret != ASN_PARSE_E) + if (ret != WC_NO_ERR_TRACE(ASN_PARSE_E)) return WC_TEST_RET_ENC_EC(ret); } for (l = 0; l < testData[i].outSz-1; l++) { ret = wc_BerToDer(testData[i].in, testData[i].inSz, out, &l); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); } } ret = wc_BerToDer(NULL, 4, NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_BerToDer(out, 4, NULL, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_BerToDer(NULL, 4, NULL, &len); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_BerToDer(NULL, 4, out, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_BerToDer(out, 4, out, NULL); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); ret = wc_BerToDer(NULL, 4, out, &len); - if (ret != BAD_FUNC_ARG) + if (ret != WC_NO_ERR_TRACE(BAD_FUNC_ARG)) return WC_TEST_RET_ENC_EC(ret); for (l = 1; l < sizeof(good4_out); l++) { len = l; ret = wc_BerToDer(good4_in, sizeof(good4_in), out, &len); - if (ret != BUFFER_E) + if (ret != WC_NO_ERR_TRACE(BUFFER_E)) return WC_TEST_RET_ENC_EC(ret); } @@ -54140,11 +55139,11 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t logging_test(void) #else WOLFSSL_ENTER("logging_test"); ret = wolfSSL_Debugging_ON(); - if (ret != NOT_COMPILED_IN) + if (ret != WC_NO_ERR_TRACE(NOT_COMPILED_IN)) return WC_TEST_RET_ENC_EC(ret); wolfSSL_Debugging_OFF(); ret = wolfSSL_SetLoggingCb(NULL); - if (ret != NOT_COMPILED_IN) + if (ret != WC_NO_ERR_TRACE(NOT_COMPILED_IN)) return WC_TEST_RET_ENC_EC(ret); #endif /* DEBUG_WOLFSSL */ return 0; @@ -54199,7 +55198,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t mutex_test(void) /* trying to free a locked mutex is not portable behavior with pthread */ /* Attempting to destroy a locked mutex results in undefined behavior */ ret = wc_FreeMutex(&m); - if (ret != BAD_MUTEX_E) + if (ret != WC_NO_ERR_TRACE(BAD_MUTEX_E)) return WC_TEST_RET_ENC_EC(ret); #endif ret = wc_UnLockMutex(&m); @@ -54211,10 +55210,10 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t mutex_test(void) #if !defined(WOLFSSL_SOLARIS) && defined(ENABLE_PTHREAD_LOCKFREE_TESTS) /* Trying to use a pthread after free'ing is not portable behavior */ ret = wc_LockMutex(&m); - if (ret != BAD_MUTEX_E) + if (ret != WC_NO_ERR_TRACE(BAD_MUTEX_E)) return WC_TEST_RET_ENC_EC(ret); ret = wc_UnLockMutex(&m); - if (ret != BAD_MUTEX_E) + if (ret != WC_NO_ERR_TRACE(BAD_MUTEX_E)) return WC_TEST_RET_ENC_EC(ret); #endif #endif @@ -54542,7 +55541,7 @@ static wc_test_ret_t rsa_onlycb_test(myCryptoDevCtx *ctx) */ ctx->exampleVar = 1; ret = wc_MakeRsaKey(key, keySz, WC_RSA_EXPONENT, rng); - if (ret != NO_VALID_DEVID) { + if (ret != WC_NO_ERR_TRACE(NO_VALID_DEVID)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_onlycb); } else /* reset return code */ @@ -54578,7 +55577,7 @@ static wc_test_ret_t rsa_onlycb_test(myCryptoDevCtx *ctx) ctx->exampleVar = 1; ret = wc_SignatureGenerate(WC_HASH_TYPE_SHA256, WC_SIGNATURE_TYPE_RSA, in, inLen, out, &sigSz, key, sizeof(*key), NULL); - if (ret != NO_VALID_DEVID) { + if (ret != WC_NO_ERR_TRACE(NO_VALID_DEVID)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_onlycb); } else /* reset return code */ @@ -54702,7 +55701,7 @@ static wc_test_ret_t ecc_onlycb_test(myCryptoDevCtx *ctx) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_onlycb); ctx->exampleVar = 1; ret = wc_ecc_make_key(&rng, ECC_KEYGEN_SIZE, key); - if (ret != NO_VALID_DEVID) { + if (ret != WC_NO_ERR_TRACE(NO_VALID_DEVID)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_onlycb); } else /* reset return code */ @@ -54727,7 +55726,7 @@ static wc_test_ret_t ecc_onlycb_test(myCryptoDevCtx *ctx) if (ret == 0) { ret = wc_ecc_sign_hash(in, inLen, out, &outLen, &rng, key); } - if (ret != NO_VALID_DEVID) { + if (ret != WC_NO_ERR_TRACE(NO_VALID_DEVID)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_onlycb); } else @@ -54745,7 +55744,7 @@ static wc_test_ret_t ecc_onlycb_test(myCryptoDevCtx *ctx) if (ret == 0) { ret = wc_ecc_verify_hash(in, inLen, out, outLen, &verify, key); } - if (ret != NO_VALID_DEVID) { + if (ret != WC_NO_ERR_TRACE(NO_VALID_DEVID)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_onlycb); } else @@ -54766,7 +55765,7 @@ static wc_test_ret_t ecc_onlycb_test(myCryptoDevCtx *ctx) if (ret == 0) { ret = wc_ecc_shared_secret(key, pub, out, &outLen); } - if (ret != NO_VALID_DEVID) { + if (ret != WC_NO_ERR_TRACE(NO_VALID_DEVID)) { ERROR_OUT(WC_TEST_RET_ENC_EC(ret), exit_onlycb); } else @@ -54896,12 +55895,8 @@ static wc_test_ret_t ecc_onlycb_test(myCryptoDevCtx *ctx) wc_ecc_free(key); XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); } - if (pub != NULL) { - XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - } - if (out != NULL) { - XFREE(out, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); - } + XFREE(pub, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); + XFREE(out, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); #ifdef OPENSSL_EXTRA if (check) { FREE(check, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); @@ -54925,7 +55920,8 @@ static wc_test_ret_t ecc_onlycb_test(myCryptoDevCtx *ctx) /* Example crypto dev callback function that calls software version */ static int myCryptoDevCb(int devIdArg, wc_CryptoInfo* info, void* ctx) { - int ret = NOT_COMPILED_IN; /* return this to bypass HW and use SW */ + int ret = WC_NO_ERR_TRACE(NOT_COMPILED_IN); /* return this to bypass HW and + use SW */ myCryptoDevCtx* myCtx = (myCryptoDevCtx*)ctx; if (info == NULL) @@ -55030,7 +56026,7 @@ static int myCryptoDevCb(int devIdArg, wc_CryptoInfo* info, void* ctx) ret = wc_MakeRsaKey(info->pk.rsakg.key, info->pk.rsakg.size, info->pk.rsakg.e, info->pk.rsakg.rng); #ifdef HAVE_FIPS - if (ret == PRIME_GEN_E) + if (ret == WC_NO_ERR_TRACE(PRIME_GEN_E)) continue; break; } @@ -55689,6 +56685,7 @@ static int myCryptoCbFind(int currentId, int algoType) #endif /* WOLF_CRYPTO_CB_FIND */ +#if !defined(WC_TEST_NO_CRYPTOCB_SW_TEST) WOLFSSL_TEST_SUBROUTINE wc_test_ret_t cryptocb_test(void) { wc_test_ret_t ret = 0; @@ -55817,6 +56814,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t cryptocb_test(void) return ret; } +#endif /* ! WC_TEST_NO_CRYPTOCB_SW_TEST */ #endif /* WOLF_CRYPTO_CB */ #ifdef WOLFSSL_CERT_PIV diff --git a/wolfssl/error-ssl.h b/wolfssl/error-ssl.h index 6354f635a8..f61c78650a 100644 --- a/wolfssl/error-ssl.h +++ b/wolfssl/error-ssl.h @@ -35,6 +35,19 @@ #endif enum wolfSSL_ErrorCodes { + WOLFSSL_FATAL_ERROR = -1, /* must be -1 for backward compat. */ + + /* negative counterparts to namesake positive constants in ssl.h */ + WOLFSSL_ERROR_WANT_READ_E = -2, + WOLFSSL_ERROR_WANT_WRITE_E = -3, + WOLFSSL_ERROR_WANT_X509_LOOKUP_E = -4, + WOLFSSL_ERROR_SYSCALL_E = -5, + WOLFSSL_ERROR_ZERO_RETURN_E = -6, + WOLFSSL_ERROR_WANT_CONNECT_E = -7, + WOLFSSL_ERROR_WANT_ACCEPT_E = -8, + + WOLFSSL_FIRST_E = -301, /* start of native TLS codes */ + INPUT_CASE_ERROR = -301, /* process input state error */ PREFIX_ERROR = -302, /* bad index to key rounds */ MEMORY_ERROR = -303, /* out of memory */ @@ -79,12 +92,14 @@ enum wolfSSL_ErrorCodes { ZERO_RETURN = -343, /* peer sent close notify */ SIDE_ERROR = -344, /* wrong client/server type */ NO_PEER_CERT = -345, /* peer didn't send key */ + ECC_CURVETYPE_ERROR = -350, /* Bad ECC Curve Type */ ECC_CURVE_ERROR = -351, /* Bad ECC Curve */ ECC_PEERKEY_ERROR = -352, /* Bad Peer ECC Key */ ECC_MAKEKEY_ERROR = -353, /* Bad Make ECC Key */ ECC_EXPORT_ERROR = -354, /* Bad ECC Export Key */ ECC_SHARED_ERROR = -355, /* Bad ECC Shared Secret */ + NOT_CA_ERROR = -357, /* Not a CA cert error */ BAD_CERT_MANAGER_ERROR = -359, /* Bad Cert Manager */ @@ -185,24 +200,40 @@ enum wolfSSL_ErrorCodes { DTLS_CID_ERROR = -454, /* Wrong or missing CID */ DTLS_TOO_MANY_FRAGMENTS_E = -455, /* Received too many fragments */ QUIC_WRONG_ENC_LEVEL = -456, /* QUIC data received on wrong encryption level */ - DUPLICATE_TLS_EXT_E = -457, /* Duplicate TLS extension in msg. */ - /* add strings to wolfSSL_ERR_reason_error_string in internal.c !!!!! */ - /* begin negotiation parameter errors */ + /* legacy CyaSSL compat layer error codes */ + WOLFSSL_ALPN_NOT_FOUND = -458, /* TLS extension not found */ + WOLFSSL_BAD_CERTTYPE = -459, /* Certificate type not supported */ + WOLFSSL_BAD_STAT = -460, /* not used */ + WOLFSSL_BAD_PATH = -461, /* No certificates found at designated path */ + WOLFSSL_BAD_FILETYPE = -462, /* Data format not supported */ + WOLFSSL_BAD_FILE = -463, /* Input/output error on file */ + WOLFSSL_NOT_IMPLEMENTED = -464, /* Function not implemented */ + WOLFSSL_UNKNOWN = -465, /* Unknown algorithm (EVP) */ + + /* negotiation parameter errors */ UNSUPPORTED_SUITE = -500, /* unsupported cipher suite */ MATCH_SUITE_ERROR = -501, /* can't match cipher suite */ COMPRESSION_ERROR = -502, /* compression mismatch */ KEY_SHARE_ERROR = -503, /* key share mismatch */ POST_HAND_AUTH_ERROR = -504, /* client won't do post-hand auth */ HRR_COOKIE_ERROR = -505, /* HRR msg cookie mismatch */ - UNSUPPORTED_CERTIFICATE = -506 /* unsupported certificate type */ - /* end negotiation parameter errors only 10 for now */ - /* add strings to wolfSSL_ERR_reason_error_string in internal.c !!!!! */ + UNSUPPORTED_CERTIFICATE = -506, /* unsupported certificate type */ - /* no error strings go down here, add above negotiation errors !!!! */ + WOLFSSL_LAST_E = -506 }; +/* I/O Callback default errors */ +enum IOerrors { + WOLFSSL_CBIO_ERR_GENERAL = -1, /* general unexpected err */ + WOLFSSL_CBIO_ERR_WANT_READ = -2, /* need to call read again */ + WOLFSSL_CBIO_ERR_WANT_WRITE = -2, /* need to call write again */ + WOLFSSL_CBIO_ERR_CONN_RST = -3, /* connection reset */ + WOLFSSL_CBIO_ERR_ISR = -4, /* interrupt */ + WOLFSSL_CBIO_ERR_CONN_CLOSE = -5, /* connection closed or epipe */ + WOLFSSL_CBIO_ERR_TIMEOUT = -6 /* socket timeout */ +}; #if defined(WOLFSSL_CALLBACKS) || defined(OPENSSL_EXTRA) enum { @@ -215,7 +246,9 @@ enum wolfSSL_ErrorCodes { WOLFSSL_LOCAL void SetErrorString(int err, char* buff); -#ifdef WOLFSSL_DEBUG_TRACE_ERROR_CODES +#if defined(WOLFSSL_DEBUG_TRACE_ERROR_CODES) && \ + (defined(BUILDING_WOLFSSL) || \ + defined(WOLFSSL_DEBUG_TRACE_ERROR_CODES_ALWAYS)) #include #endif diff --git a/wolfssl/internal.h b/wolfssl/internal.h index 88188bd1d1..9e57ab0c46 100644 --- a/wolfssl/internal.h +++ b/wolfssl/internal.h @@ -2045,7 +2045,7 @@ enum Misc { #define WOLFSSL_ASSERT_EQ(x, y) WOLFSSL_ASSERT_TEST(x, y, ==) #define WOLFSSL_ASSERT_SIZEOF_TEST(x, y, op) \ - WOLFSSL_ASSERT_TEST(sizeof((x)), sizeof((y)), op) + WOLFSSL_ASSERT_TEST(sizeof(x), sizeof(y), op) #define WOLFSSL_ASSERT_SIZEOF_GE(x, y) WOLFSSL_ASSERT_SIZEOF_TEST(x, y, >=) @@ -5218,6 +5218,7 @@ struct WOLFSSL_X509 { byte* authKeyId; /* Points into authKeyIdSrc */ byte* authKeyIdSrc; byte* subjKeyId; + WOLFSSL_ASN1_STRING* subjKeyIdStr; byte* extKeyUsageSrc; #ifdef OPENSSL_ALL byte* subjAltNameSrc; @@ -6932,8 +6933,12 @@ WOLFSSL_LOCAL int CreateCookieExt(const WOLFSSL* ssl, byte* hash, WOLFSSL_LOCAL int TranslateErrorToAlert(int err); #if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL) -void* wolfssl_sk_pop_type(WOLFSSL_STACK* sk, WOLF_STACK_TYPE type); -WOLFSSL_STACK* wolfssl_sk_new_type(WOLF_STACK_TYPE type); +WOLFSSL_LOCAL void* wolfssl_sk_pop_type(WOLFSSL_STACK* sk, + WOLF_STACK_TYPE type); +WOLFSSL_LOCAL WOLFSSL_STACK* wolfssl_sk_new_type(WOLF_STACK_TYPE type); + +WOLFSSL_LOCAL int wolfssl_asn1_obj_set(WOLFSSL_ASN1_OBJECT* obj, + const byte* der, word32 len, int addHdr); #endif #ifdef __cplusplus diff --git a/wolfssl/ocsp.h b/wolfssl/ocsp.h index b05510cfcf..f2e234f630 100644 --- a/wolfssl/ocsp.h +++ b/wolfssl/ocsp.h @@ -48,6 +48,16 @@ typedef struct OcspEntry WOLFSSL_OCSP_SINGLERESP; typedef struct OcspRequest WOLFSSL_OCSP_ONEREQ; typedef struct OcspRequest WOLFSSL_OCSP_REQUEST; + +typedef struct { + WOLFSSL_BIO *bio; + WOLFSSL_BIO *reqResp; /* First used for request then for response */ + byte* buf; + int bufLen; + int state; + int ioState; + int sent; +} WOLFSSL_OCSP_REQ_CTX; #endif WOLFSSL_LOCAL int InitOCSP(WOLFSSL_OCSP* ocsp, WOLFSSL_CERT_MANAGER* cm); @@ -130,6 +140,21 @@ WOLFSSL_API int wolfSSL_OCSP_resp_count(WOLFSSL_OCSP_BASICRESP *bs); WOLFSSL_API WOLFSSL_OCSP_SINGLERESP* wolfSSL_OCSP_resp_get0( WOLFSSL_OCSP_BASICRESP *bs, int idx); +WOLFSSL_API WOLFSSL_OCSP_REQ_CTX* wolfSSL_OCSP_REQ_CTX_new(WOLFSSL_BIO *bio, + int maxline); +WOLFSSL_API void wolfSSL_OCSP_REQ_CTX_free(WOLFSSL_OCSP_REQ_CTX *ctx); +WOLFSSL_API WOLFSSL_OCSP_REQ_CTX *wolfSSL_OCSP_sendreq_new(WOLFSSL_BIO *bio, + const char *path, OcspRequest *req, int maxline); +WOLFSSL_API int wolfSSL_OCSP_REQ_CTX_set1_req(WOLFSSL_OCSP_REQ_CTX *ctx, + OcspRequest *req); +WOLFSSL_API int wolfSSL_OCSP_REQ_CTX_add1_header(WOLFSSL_OCSP_REQ_CTX *ctx, + const char *name, const char *value); +WOLFSSL_API int wolfSSL_OCSP_REQ_CTX_http(WOLFSSL_OCSP_REQ_CTX *ctx, + const char *op, const char *path); +WOLFSSL_API int wolfSSL_OCSP_REQ_CTX_nbio(WOLFSSL_OCSP_REQ_CTX *ctx); +WOLFSSL_API int wolfSSL_OCSP_sendreq_nbio(OcspResponse **presp, + WOLFSSL_OCSP_REQ_CTX *rctx); + WOLFSSL_API int wolfSSL_OCSP_REQUEST_add_ext(OcspRequest* req, WOLFSSL_X509_EXTENSION* ext, int idx); WOLFSSL_API OcspResponse* wolfSSL_OCSP_response_create(int status, diff --git a/wolfssl/openssl/asn1.h b/wolfssl/openssl/asn1.h index 2c83b9b8c4..9ae07986fb 100644 --- a/wolfssl/openssl/asn1.h +++ b/wolfssl/openssl/asn1.h @@ -38,7 +38,6 @@ #define c2i_ASN1_OBJECT wolfSSL_c2i_ASN1_OBJECT #define V_ASN1_INTEGER 0x02 -#define V_ASN1_OCTET_STRING 0x04 /* tag for ASN1_OCTET_STRING */ #define V_ASN1_NEG 0x100 #define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) #define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) @@ -73,6 +72,8 @@ #define ASN1_TIME_set wolfSSL_ASN1_TIME_set #define V_ASN1_EOC 0 +#define V_ASN1_BOOLEAN 1 +#define V_ASN1_OCTET_STRING 4 #define V_ASN1_NULL 5 #define V_ASN1_OBJECT 6 #define V_ASN1_UTF8STRING 12 @@ -111,6 +112,7 @@ WOLFSSL_API WOLFSSL_ASN1_INTEGER *wolfSSL_BN_to_ASN1_INTEGER( const WOLFSSL_BIGNUM *bn, WOLFSSL_ASN1_INTEGER *ai); WOLFSSL_API void wolfSSL_ASN1_TYPE_set(WOLFSSL_ASN1_TYPE *a, int type, void *value); +WOLFSSL_API int wolfSSL_ASN1_TYPE_get(const WOLFSSL_ASN1_TYPE *a); WOLFSSL_API int wolfSSL_ASN1_get_object(const unsigned char **in, long *len, int *tag, int *cls, long inLen); @@ -122,47 +124,162 @@ WOLFSSL_API WOLFSSL_ASN1_OBJECT *wolfSSL_c2i_ASN1_OBJECT(WOLFSSL_ASN1_OBJECT **a /* IMPLEMENT_ASN1_FUNCTIONS is strictly for external use only. Internally * we don't use this. Some projects use OpenSSL to implement ASN1 types and * this section is only to provide those projects with ASN1 functionality. */ -typedef struct { + +typedef void* (*WolfsslAsn1NewCb)(void); +typedef void (*WolfsslAsn1FreeCb)(void*); +typedef int (*WolfsslAsn1i2dCb)(const void*, unsigned char**); +typedef void* (*WolfsslAsn1d2iCb)(void**, const byte **, long); + +struct WOLFSSL_ASN1_TEMPLATE { + /* Type functions */ + WolfsslAsn1NewCb new_func; + WolfsslAsn1FreeCb free_func; + WolfsslAsn1i2dCb i2d_func; + WolfsslAsn1d2iCb d2i_func; + /* Member info */ size_t offset; /* Offset of this field in structure */ - byte type; /* The type of the member as defined in - * WOLFSSL_ASN1_TYPES */ -} WOLFSSL_ASN1_TEMPLATE; - -typedef struct { - byte type; /* One of the ASN_Tags types */ - const WOLFSSL_ASN1_TEMPLATE *members; /* If SEQUENCE or CHOICE this - * contains the contents */ + /* DER info */ + int tag; + byte first_byte; /* First expected byte. Required for + * IMPLICIT types. */ + byte ex:1; /* explicit, name conflicts with C++ keyword */ + byte sequence:1; +}; + +enum WOLFSSL_ASN1_TYPES { + WOLFSSL_ASN1_SEQUENCE = 0, + WOLFSSL_ASN1_CHOICE, + WOLFSSL_ASN1_OBJECT_TYPE, +}; + +struct WOLFSSL_ASN1_ITEM { + enum WOLFSSL_ASN1_TYPES type; + const struct WOLFSSL_ASN1_TEMPLATE* members; /* If SEQUENCE or CHOICE this + * contains the contents */ size_t mcount; /* Number of members if SEQUENCE * or CHOICE */ size_t size; /* Structure size */ -} WOLFSSL_ASN1_ITEM; + size_t toffset; /* Type offset */ +}; -typedef enum { - WOLFSSL_X509_ALGOR_ASN1 = 0, - WOLFSSL_ASN1_BIT_STRING_ASN1, - WOLFSSL_ASN1_INTEGER_ASN1, -} WOLFSSL_ASN1_TYPES; +typedef struct WOLFSSL_ASN1_TEMPLATE WOLFSSL_ASN1_TEMPLATE; +typedef struct WOLFSSL_ASN1_ITEM WOLFSSL_ASN1_ITEM; -#define ASN1_SEQUENCE(type) \ - static const WOLFSSL_ASN1_TEMPLATE type##_member_data[] +#define ASN1_BIT_STRING_FIRST_BYTE ASN_BIT_STRING +#define ASN1_TFLG_EXPLICIT (0x1 << 0) +#define ASN1_TFLG_SEQUENCE_OF (0x1 << 1) +#define ASN1_TFLG_IMPTAG (0x1 << 2) +#define ASN1_TFLG_EXPTAG (0x1 << 3) -#define ASN1_SIMPLE(type, member, member_type) \ - { OFFSETOF(type, member), \ - WOLFSSL_##member_type##_ASN1 } +#define ASN1_TFLG_TAG_MASK (ASN1_TFLG_IMPTAG|ASN1_TFLG_EXPTAG) + +#define ASN1_ITEM_TEMPLATE(mtype) \ + static const WOLFSSL_ASN1_TEMPLATE mtype##_member_data + +#define ASN1_ITEM_TEMPLATE_END(mtype) \ + ; \ + const WOLFSSL_ASN1_ITEM mtype##_template_data = { \ + WOLFSSL_ASN1_OBJECT_TYPE, \ + &mtype##_member_data, \ + 1, \ + 0, \ + 0 \ + }; + +#define ASN1_SEQUENCE(mtype) \ + static const WOLFSSL_ASN1_TEMPLATE mtype##_member_data[] + +#define ASN1_SEQUENCE_END(mtype) \ + ; \ + const WOLFSSL_ASN1_ITEM mtype##_template_data = { \ + WOLFSSL_ASN1_SEQUENCE, \ + mtype##_member_data, \ + sizeof(mtype##_member_data) / sizeof(WOLFSSL_ASN1_TEMPLATE), \ + sizeof(mtype), \ + 0 \ + }; \ + static WC_MAYBE_UNUSED const byte mtype##_FIRST_BYTE = \ + ASN_CONSTRUCTED | ASN_SEQUENCE; + +/* This is what a ASN1_CHOICE type should look like + * typedef struct { + * int type; + * union { + * ASN1_SOMETHING *opt1; + * ASN1_SOMEOTHER *opt2; + * } value; + * } chname; + */ + +#define ASN1_CHOICE(mtype) \ + static const WOLFSSL_ASN1_TEMPLATE mtype##_member_data[] -#define ASN1_SEQUENCE_END(type) \ +#define ASN1_CHOICE_END(mtype) \ ; \ - const WOLFSSL_ASN1_ITEM type##_template_data = { \ - ASN_SEQUENCE, \ - type##_member_data, \ - sizeof(type##_member_data) / sizeof(WOLFSSL_ASN1_TEMPLATE), \ - sizeof(type) \ + const WOLFSSL_ASN1_ITEM mtype##_template_data = { \ + WOLFSSL_ASN1_CHOICE, \ + mtype##_member_data, \ + sizeof(mtype##_member_data) / sizeof(WOLFSSL_ASN1_TEMPLATE), \ + sizeof(mtype) ,\ + OFFSETOF(mtype, type) \ }; +#define ASN1_TYPE(type, member, tag, first_byte, exp, seq) \ + OFFSETOF(type, member), tag, first_byte, exp, seq + +/* Function callbacks need to be defined immediately otherwise we will + * incorrectly expand the type. Ex: ASN1_INTEGER -> WOLFSSL_ASN1_INTEGER */ + +#define ASN1_SIMPLE(type, member, member_type) \ + { (WolfsslAsn1NewCb)member_type##_new, \ + (WolfsslAsn1FreeCb)member_type##_free, \ + (WolfsslAsn1i2dCb)i2d_##member_type, \ + (WolfsslAsn1d2iCb)d2i_##member_type, \ + ASN1_TYPE(type, member, -1, 0, 0, 0) } + +#define ASN1_IMP(type, member, member_type, tag) \ + { (WolfsslAsn1NewCb)member_type##_new, \ + (WolfsslAsn1FreeCb)member_type##_free, \ + (WolfsslAsn1i2dCb)i2d_##member_type, \ + (WolfsslAsn1d2iCb)d2i_##member_type, \ + ASN1_TYPE(type, member, tag, member_type##_FIRST_BYTE, 0, 0) } + +#define ASN1_EXP(type, member, member_type, tag) \ + { (WolfsslAsn1NewCb)member_type##_new, \ + (WolfsslAsn1FreeCb)member_type##_free, \ + (WolfsslAsn1i2dCb)i2d_##member_type, \ + (WolfsslAsn1d2iCb)d2i_##member_type, \ + ASN1_TYPE(type, member, tag, 0, 1, 0) } + +#define ASN1_SEQUENCE_OF(type, member, member_type) \ + { (WolfsslAsn1NewCb)member_type##_new, \ + (WolfsslAsn1FreeCb)member_type##_free, \ + (WolfsslAsn1i2dCb)i2d_##member_type, \ + (WolfsslAsn1d2iCb)d2i_##member_type, \ + ASN1_TYPE(type, member, -1, 0, 0, 1) } + +#define ASN1_EXP_SEQUENCE_OF(type, member, member_type, tag) \ + { (WolfsslAsn1NewCb)member_type##_new, \ + (WolfsslAsn1FreeCb)member_type##_free, \ + (WolfsslAsn1i2dCb)i2d_##member_type, \ + (WolfsslAsn1d2iCb)d2i_##member_type, \ + ASN1_TYPE(type, member, tag, 0, 1, 1) } + +#define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, member_type) \ + { (WolfsslAsn1NewCb)member_type##_new, \ + (WolfsslAsn1FreeCb)member_type##_free, \ + (WolfsslAsn1i2dCb)i2d_##member_type, \ + (WolfsslAsn1d2iCb)d2i_##member_type, \ + 0, flags & ASN1_TFLG_TAG_MASK ? tag : -1, 0, \ + !!(flags & ASN1_TFLG_EXPLICIT), TRUE } + WOLFSSL_API void *wolfSSL_ASN1_item_new(const WOLFSSL_ASN1_ITEM *tpl); -WOLFSSL_API void wolfSSL_ASN1_item_free(void *val, const WOLFSSL_ASN1_ITEM *tpl); +WOLFSSL_API void wolfSSL_ASN1_item_free(void *obj, + const WOLFSSL_ASN1_ITEM *item); WOLFSSL_API int wolfSSL_ASN1_item_i2d(const void *src, byte **dest, const WOLFSSL_ASN1_ITEM *tpl); +WOLFSSL_API void* wolfSSL_ASN1_item_d2i(void** dst, const byte **src, long len, + const WOLFSSL_ASN1_ITEM* item); /* Need function declaration otherwise compiler complains */ /* // NOLINTBEGIN(readability-named-parameter) */ @@ -178,7 +295,13 @@ WOLFSSL_API int wolfSSL_ASN1_item_i2d(const void *src, byte **dest, int i2d_##type(type *src, byte **dest); \ int i2d_##type(type *src, byte **dest) \ { \ - return wolfSSL_ASN1_item_i2d(src, dest, &type##_template_data);\ + return wolfSSL_ASN1_item_i2d(src, dest, &type##_template_data); \ + } \ + type* d2i_##type(type **dst, const byte **src, long len); \ + type* d2i_##type(type **dst, const byte **src, long len) \ + { \ + return (type*)wolfSSL_ASN1_item_d2i((void**)dst, src, len, \ + &type##_template_data); \ } /* // NOLINTEND(readability-named-parameter) */ @@ -186,7 +309,9 @@ WOLFSSL_API int wolfSSL_ASN1_item_i2d(const void *src, byte **dest, #define BN_to_ASN1_INTEGER wolfSSL_BN_to_ASN1_INTEGER #define ASN1_TYPE_set wolfSSL_ASN1_TYPE_set +#define ASN1_TYPE_get wolfSSL_ASN1_TYPE_get #define ASN1_TYPE_new wolfSSL_ASN1_TYPE_new #define ASN1_TYPE_free wolfSSL_ASN1_TYPE_free +#define i2d_ASN1_TYPE wolfSSL_i2d_ASN1_TYPE #endif /* WOLFSSL_ASN1_H_ */ diff --git a/wolfssl/openssl/compat_types.h b/wolfssl/openssl/compat_types.h index 93a3b12dac..61cc80aeb1 100644 --- a/wolfssl/openssl/compat_types.h +++ b/wolfssl/openssl/compat_types.h @@ -50,6 +50,8 @@ typedef struct WOLFSSL_EVP_PKEY_CTX WOLFSSL_EVP_PKEY_CTX; typedef struct WOLFSSL_EVP_CIPHER_CTX WOLFSSL_EVP_CIPHER_CTX; typedef struct WOLFSSL_ASN1_PCTX WOLFSSL_ASN1_PCTX; +typedef struct WOLFSSL_BIO WOLFSSL_BIO; + #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) typedef WOLFSSL_EVP_MD EVP_MD; typedef WOLFSSL_EVP_MD_CTX EVP_MD_CTX; diff --git a/wolfssl/openssl/ec.h b/wolfssl/openssl/ec.h index 319cf3c3bd..c7b0cfffa9 100644 --- a/wolfssl/openssl/ec.h +++ b/wolfssl/openssl/ec.h @@ -26,6 +26,7 @@ #include #include +#include #include #include @@ -205,6 +206,9 @@ WOLFSSL_API int wolfSSL_EC_KEY_LoadDer_ex(WOLFSSL_EC_KEY* key, const unsigned char* der, int derSz, int opt); WOLFSSL_API +WOLFSSL_EC_KEY *wolfSSL_d2i_EC_PUBKEY_bio(WOLFSSL_BIO *bio, + WOLFSSL_EC_KEY **out); +WOLFSSL_API void wolfSSL_EC_KEY_free(WOLFSSL_EC_KEY *key); WOLFSSL_API WOLFSSL_EC_POINT *wolfSSL_EC_KEY_get0_public_key(const WOLFSSL_EC_KEY *key); @@ -371,6 +375,8 @@ typedef WOLFSSL_EC_KEY_METHOD EC_KEY_METHOD; #define EC_KEY_check_key wolfSSL_EC_KEY_check_key #define EC_KEY_print_fp wolfSSL_EC_KEY_print_fp +#define d2i_EC_PUBKEY_bio wolfSSL_d2i_EC_PUBKEY_bio + #define ECDSA_size wolfSSL_ECDSA_size #define ECDSA_sign wolfSSL_ECDSA_sign #define ECDSA_verify wolfSSL_ECDSA_verify @@ -424,6 +430,7 @@ typedef WOLFSSL_EC_KEY_METHOD EC_KEY_METHOD; #define i2d_ECPrivateKey wolfSSL_i2d_ECPrivateKey #define EC_KEY_set_conv_form wolfSSL_EC_KEY_set_conv_form #define EC_KEY_get_conv_form wolfSSL_EC_KEY_get_conv_form +#define d2i_ECPKParameters wolfSSL_d2i_ECPKParameters #define EC_POINT_point2hex wolfSSL_EC_POINT_point2hex #define EC_POINT_hex2point wolfSSL_EC_POINT_hex2point diff --git a/wolfssl/openssl/evp.h b/wolfssl/openssl/evp.h index f2387478d3..fbfea201a1 100644 --- a/wolfssl/openssl/evp.h +++ b/wolfssl/openssl/evp.h @@ -722,6 +722,8 @@ WOLFSSL_API int wolfSSL_EVP_PKEY_keygen_init(WOLFSSL_EVP_PKEY_CTX *ctx); WOLFSSL_API int wolfSSL_EVP_PKEY_keygen(WOLFSSL_EVP_PKEY_CTX *ctx, WOLFSSL_EVP_PKEY **ppkey); WOLFSSL_API int wolfSSL_EVP_PKEY_bits(const WOLFSSL_EVP_PKEY *pkey); +WOLFSSL_API int wolfSSL_EVP_PKEY_is_a(const WOLFSSL_EVP_PKEY *pkey, + const char *name); #if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10100000L WOLFSSL_API void wolfSSL_EVP_PKEY_CTX_free(WOLFSSL_EVP_PKEY_CTX *ctx); #else @@ -1111,6 +1113,7 @@ WOLFSSL_API int wolfSSL_EVP_SignInit_ex(WOLFSSL_EVP_MD_CTX* ctx, #define EVP_PKEY_keygen wolfSSL_EVP_PKEY_keygen #define EVP_PKEY_keygen_init wolfSSL_EVP_PKEY_keygen_init #define EVP_PKEY_bits wolfSSL_EVP_PKEY_bits +#define EVP_PKEY_is_a wolfSSL_EVP_PKEY_is_a #define EVP_PKEY_CTX_free wolfSSL_EVP_PKEY_CTX_free #define EVP_PKEY_CTX_new wolfSSL_EVP_PKEY_CTX_new #define EVP_PKEY_CTX_set_rsa_padding wolfSSL_EVP_PKEY_CTX_set_rsa_padding diff --git a/wolfssl/openssl/include.am b/wolfssl/openssl/include.am index dee416cd5f..84e0dbb1f3 100644 --- a/wolfssl/openssl/include.am +++ b/wolfssl/openssl/include.am @@ -46,6 +46,7 @@ nobase_include_HEADERS+= \ wolfssl/openssl/pkcs7.h \ wolfssl/openssl/rand.h \ wolfssl/openssl/rsa.h \ + wolfssl/openssl/safestack.h \ wolfssl/openssl/sha.h \ wolfssl/openssl/sha3.h \ wolfssl/openssl/srp.h \ diff --git a/wolfssl/openssl/ocsp.h b/wolfssl/openssl/ocsp.h index ac0e44f911..28eb1597aa 100644 --- a/wolfssl/openssl/ocsp.h +++ b/wolfssl/openssl/ocsp.h @@ -27,12 +27,16 @@ #ifdef HAVE_OCSP #include -#define OCSP_REQUEST OcspRequest -#define OCSP_RESPONSE OcspResponse -#define OCSP_BASICRESP WOLFSSL_OCSP_BASICRESP -#define OCSP_SINGLERESP WOLFSSL_OCSP_SINGLERESP -#define OCSP_CERTID WOLFSSL_OCSP_CERTID -#define OCSP_ONEREQ WOLFSSL_OCSP_ONEREQ +#if defined(OPENSSL_ALL) || defined(OPENSSL_EXTRA) || defined(WOLFSSL_NGINX) ||\ + defined(WOLFSSL_HAPROXY) || defined(HAVE_LIGHTY) +typedef OcspRequest OCSP_REQUEST; +typedef OcspResponse OCSP_RESPONSE; +typedef WOLFSSL_OCSP_BASICRESP OCSP_BASICRESP; +typedef WOLFSSL_OCSP_SINGLERESP OCSP_SINGLERESP; +typedef WOLFSSL_OCSP_CERTID OCSP_CERTID; +typedef WOLFSSL_OCSP_ONEREQ OCSP_ONEREQ; +typedef WOLFSSL_OCSP_REQ_CTX OCSP_REQ_CTX; +#endif #define OCSP_REVOKED_STATUS_NOSTATUS (-1) @@ -85,6 +89,15 @@ #define OCSP_resp_count wolfSSL_OCSP_resp_count #define OCSP_resp_get0 wolfSSL_OCSP_resp_get0 +#define OCSP_REQ_CTX_new wolfSSL_OCSP_REQ_CTX_new +#define OCSP_REQ_CTX_free wolfSSL_OCSP_REQ_CTX_free +#define OCSP_sendreq_new wolfSSL_OCSP_sendreq_new +#define OCSP_REQ_CTX_set1_req wolfSSL_OCSP_REQ_CTX_set1_req +#define OCSP_REQ_CTX_add1_header wolfSSL_OCSP_REQ_CTX_add1_header +#define OCSP_REQ_CTX_http wolfSSL_OCSP_REQ_CTX_http +#define OCSP_REQ_CTX_nbio wolfSSL_OCSP_REQ_CTX_nbio +#define OCSP_sendreq_nbio wolfSSL_OCSP_sendreq_nbio + #endif /* HAVE_OCSP */ #endif /* WOLFSSL_OCSP_H_ */ diff --git a/wolfssl/openssl/pem.h b/wolfssl/openssl/pem.h index 6d9d4418b6..0cfaedd0d3 100644 --- a/wolfssl/openssl/pem.h +++ b/wolfssl/openssl/pem.h @@ -56,6 +56,8 @@ WOLFSSL_API WOLFSSL_RSA *wolfSSL_PEM_read_bio_RSA_PUBKEY(WOLFSSL_BIO* bio, WOLFSSL_RSA** rsa, wc_pem_password_cb* cb, void *u); +WOLFSSL_API +WOLFSSL_RSA *wolfSSL_d2i_RSA_PUBKEY_bio(WOLFSSL_BIO *bio, WOLFSSL_RSA **out); WOLFSSL_API WOLFSSL_EC_GROUP* wolfSSL_PEM_read_bio_ECPKParameters(WOLFSSL_BIO* bio, @@ -63,6 +65,10 @@ WOLFSSL_EC_GROUP* wolfSSL_PEM_read_bio_ECPKParameters(WOLFSSL_BIO* bio, wc_pem_password_cb* cb, void* pass); WOLFSSL_API +WOLFSSL_EC_GROUP *wolfSSL_d2i_ECPKParameters(WOLFSSL_EC_GROUP **out, + const unsigned char **in, + long len); +WOLFSSL_API int wolfSSL_PEM_write_mem_RSAPrivateKey(WOLFSSL_RSA* rsa, const WOLFSSL_EVP_CIPHER* cipher, unsigned char* passwd, int len, @@ -243,12 +249,12 @@ int wolfSSL_PEM_write_DHparams(XFILE fp, WOLFSSL_DH* dh); #define PEM_write_bio_RSA_PUBKEY wolfSSL_PEM_write_bio_RSA_PUBKEY #define PEM_read_bio_RSA_PUBKEY wolfSSL_PEM_read_bio_RSA_PUBKEY #define PEM_read_bio_RSAPublicKey wolfSSL_PEM_read_bio_RSA_PUBKEY -#define PEM_read_bio_ECPKParameters wolfSSL_PEM_read_bio_ECPKParameters #define PEM_write_RSAPrivateKey wolfSSL_PEM_write_RSAPrivateKey #define PEM_write_RSA_PUBKEY wolfSSL_PEM_write_RSA_PUBKEY #define PEM_read_RSA_PUBKEY wolfSSL_PEM_read_RSA_PUBKEY #define PEM_write_RSAPublicKey wolfSSL_PEM_write_RSAPublicKey #define PEM_read_RSAPublicKey wolfSSL_PEM_read_RSAPublicKey +#define d2i_RSA_PUBKEY_bio wolfSSL_d2i_RSA_PUBKEY_bio /* DSA */ #define PEM_write_bio_DSAPrivateKey wolfSSL_PEM_write_bio_DSAPrivateKey #define PEM_write_DSAPrivateKey wolfSSL_PEM_write_DSAPrivateKey @@ -263,6 +269,7 @@ int wolfSSL_PEM_write_DHparams(XFILE fp, WOLFSSL_DH* dh); #define PEM_write_ECPrivateKey wolfSSL_PEM_write_ECPrivateKey #define PEM_read_bio_ECPrivateKey wolfSSL_PEM_read_bio_ECPrivateKey #define PEM_read_bio_EC_PUBKEY wolfSSL_PEM_read_bio_EC_PUBKEY +#define PEM_read_bio_ECPKParameters wolfSSL_PEM_read_bio_ECPKParameters #ifndef NO_WOLFSSL_STUB #define PEM_write_bio_ECPKParameters(...) 0 #endif diff --git a/wolfssl/openssl/rsa.h b/wolfssl/openssl/rsa.h index 4d276cc230..a248b23074 100644 --- a/wolfssl/openssl/rsa.h +++ b/wolfssl/openssl/rsa.h @@ -28,6 +28,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -240,6 +241,9 @@ WOLFSSL_API int wolfSSL_RSA_set_ex_data_with_cleanup( #define RSA_F4 WOLFSSL_RSA_F4 +#define OPENSSL_RSA_MAX_MODULUS_BITS RSA_MAX_SIZE +#define OPENSSL_RSA_MAX_PUBEXP_BITS RSA_MAX_SIZE + #endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */ #ifdef __cplusplus diff --git a/wolfssl/openssl/safestack.h b/wolfssl/openssl/safestack.h new file mode 100644 index 0000000000..ee1f8728f8 --- /dev/null +++ b/wolfssl/openssl/safestack.h @@ -0,0 +1,40 @@ +/* safestack.h + * + * Copyright (C) 2006-2023 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA + */ + +/* stack.h for openSSL */ + +#ifndef WOLFSSL_SAFESTACK_H_ +#define WOLFSSL_SAFESTACK_H_ + +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/wolfssl/openssl/ssl.h b/wolfssl/openssl/ssl.h index 29dbb9a2da..b4c2114160 100644 --- a/wolfssl/openssl/ssl.h +++ b/wolfssl/openssl/ssl.h @@ -82,6 +82,7 @@ typedef WOLFSSL_CTX SSL_CTX; typedef WOLFSSL_X509 X509; typedef WOLFSSL_X509 X509_REQ; +typedef WOLFSSL_X509 X509_REQ_INFO; typedef WOLFSSL_X509_NAME X509_NAME; typedef WOLFSSL_X509_INFO X509_INFO; typedef WOLFSSL_X509_CHAIN X509_CHAIN; @@ -426,6 +427,7 @@ typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; #define d2i_X509_fp wolfSSL_d2i_X509_fp #define i2d_X509 wolfSSL_i2d_X509 #define d2i_X509 wolfSSL_d2i_X509 +#define d2i_X509_REQ_INFO wolfSSL_d2i_X509_REQ_INFO #define PEM_read_bio_X509 wolfSSL_PEM_read_bio_X509 #define PEM_read_bio_X509_REQ wolfSSL_PEM_read_bio_X509_REQ #define PEM_read_X509_REQ wolfSSL_PEM_read_X509_REQ @@ -443,6 +445,7 @@ typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; #define d2i_X509_REQ wolfSSL_d2i_X509_REQ #define X509_REQ_new wolfSSL_X509_REQ_new #define X509_REQ_free wolfSSL_X509_REQ_free +#define X509_REQ_INFO_free wolfSSL_X509_REQ_free #define X509_REQ_sign wolfSSL_X509_REQ_sign #define X509_REQ_sign_ctx wolfSSL_X509_REQ_sign_ctx #define X509_REQ_add_extensions wolfSSL_X509_REQ_add_extensions @@ -488,6 +491,7 @@ typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; #define X509_get0_notAfter wolfSSL_X509_get_notAfter #define X509_getm_notAfter wolfSSL_X509_get_notAfter #define X509_get_serialNumber wolfSSL_X509_get_serialNumber +#define X509_get0_serialNumber wolfSSL_X509_get_serialNumber #define X509_get0_pubkey_bitstr wolfSSL_X509_get0_pubkey_bitstr #define X509_get_ex_new_index wolfSSL_X509_get_ex_new_index #define X509_get_ex_data wolfSSL_X509_get_ex_data @@ -530,6 +534,7 @@ typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; #define X509_dup wolfSSL_X509_dup #define X509_add_ext wolfSSL_X509_add_ext #define X509_delete_ext wolfSSL_X509_delete_ext +#define X509_get0_subject_key_id wolfSSL_X509_get0_subject_key_id #define X509_EXTENSION_get_object wolfSSL_X509_EXTENSION_get_object #define X509_EXTENSION_get_data wolfSSL_X509_EXTENSION_get_data @@ -563,6 +568,7 @@ typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; #define sk_X509_EXTENSION_new_null wolfSSL_sk_X509_EXTENSION_new_null #define sk_X509_EXTENSION_pop_free wolfSSL_sk_X509_EXTENSION_pop_free #define sk_X509_EXTENSION_push wolfSSL_sk_X509_EXTENSION_push +#define sk_X509_EXTENSION_free wolfSSL_sk_X509_EXTENSION_free #define X509_INFO_new wolfSSL_X509_INFO_new #define X509_INFO_free wolfSSL_X509_INFO_free @@ -696,6 +702,7 @@ wolfSSL_X509_STORE_set_verify_cb((WOLFSSL_X509_STORE *)(s), (WOLFSSL_X509_STORE_ #define X509_STORE_set_ex_data wolfSSL_X509_STORE_set_ex_data #define X509_STORE_get_ex_data wolfSSL_X509_STORE_get_ex_data #define X509_STORE_get0_param wolfSSL_X509_STORE_get0_param +#define X509_STORE_set1_param wolfSSL_X509_STORE_set1_param #define X509_STORE_CTX_get1_issuer wolfSSL_X509_STORE_CTX_get1_issuer #define X509_STORE_CTX_set_time wolfSSL_X509_STORE_CTX_set_time #define X509_STORE_CTX_get0_param wolfSSL_X509_STORE_CTX_get0_param @@ -749,6 +756,8 @@ wolfSSL_X509_STORE_set_verify_cb((WOLFSSL_X509_STORE *)(s), (WOLFSSL_X509_STORE_ #define X509_ALGOR_new wolfSSL_X509_ALGOR_new #define X509_ALGOR_free wolfSSL_X509_ALGOR_free +#define i2d_X509_ALGOR wolfSSL_i2d_X509_ALGOR +#define d2i_X509_ALGOR wolfSSL_d2i_X509_ALGOR #define X509_PUBKEY_new wolfSSL_X509_PUBKEY_new #define X509_PUBKEY_free wolfSSL_X509_PUBKEY_free @@ -852,6 +861,8 @@ wolfSSL_X509_STORE_set_verify_cb((WOLFSSL_X509_STORE *)(s), (WOLFSSL_X509_STORE_ #define ASN1_BIT_STRING_free wolfSSL_ASN1_BIT_STRING_free #define ASN1_BIT_STRING_get_bit wolfSSL_ASN1_BIT_STRING_get_bit #define ASN1_BIT_STRING_set_bit wolfSSL_ASN1_BIT_STRING_set_bit +#define i2d_ASN1_BIT_STRING wolfSSL_i2d_ASN1_BIT_STRING +#define d2i_ASN1_BIT_STRING wolfSSL_d2i_ASN1_BIT_STRING #define sk_ASN1_OBJECT_free wolfSSL_sk_ASN1_OBJECT_free @@ -871,6 +882,7 @@ wolfSSL_X509_STORE_set_verify_cb((WOLFSSL_X509_STORE *)(s), (WOLFSSL_X509_STORE_ #endif #define ASN1_TIME_set wolfSSL_ASN1_TIME_set #define ASN1_TIME_set_string wolfSSL_ASN1_TIME_set_string +#define ASN1_TIME_set_string_X509 wolfSSL_ASN1_TIME_set_string_X509 #define ASN1_GENERALIZEDTIME_set_string wolfSSL_ASN1_TIME_set_string #define ASN1_GENERALIZEDTIME_print wolfSSL_ASN1_GENERALIZEDTIME_print @@ -908,6 +920,22 @@ wolfSSL_X509_STORE_set_verify_cb((WOLFSSL_X509_STORE *)(s), (WOLFSSL_X509_STORE_ #define ASN1_STRING_set_default_mask_asc(...) 1 #endif +#define ASN1_GENERALSTRING WOLFSSL_ASN1_STRING +#define ASN1_GENERALSTRING_new wolfSSL_ASN1_STRING_new +#define ASN1_GENERALSTRING_free wolfSSL_ASN1_STRING_free +#define ASN1_GENERALSTRING_set wolfSSL_ASN1_STRING_set +#define i2d_ASN1_GENERALSTRING wolfSSL_i2d_ASN1_GENERALSTRING +#define i2d_ASN1_OCTET_STRING wolfSSL_i2d_ASN1_OCTET_STRING +#define i2d_ASN1_UTF8STRING wolfSSL_i2d_ASN1_UTF8STRING +#define i2d_ASN1_SEQUENCE wolfSSL_i2d_ASN1_SEQUENCE +#define d2i_ASN1_GENERALSTRING wolfSSL_d2i_ASN1_GENERALSTRING +#define d2i_ASN1_OCTET_STRING wolfSSL_d2i_ASN1_OCTET_STRING +#define d2i_ASN1_UTF8STRING wolfSSL_d2i_ASN1_UTF8STRING + +#define sk_ASN1_GENERALSTRING_num wolfSSL_sk_num +#define sk_ASN1_GENERALSTRING_value wolfSSL_sk_value +#define sk_ASN1_GENERALSTRING_push wolfSSL_sk_push + #define ASN1_OCTET_STRING WOLFSSL_ASN1_STRING #define ASN1_OCTET_STRING_new wolfSSL_ASN1_STRING_new #define ASN1_OCTET_STRING_free wolfSSL_ASN1_STRING_free @@ -1525,10 +1553,8 @@ typedef WOLFSSL_SRTP_PROTECTION_PROFILE SRTP_PROTECTION_PROFILE; #define PEM_R_BAD_DECRYPT (-MIN_CODE_E + 4) #define ASN1_R_HEADER_TOO_LONG (-MIN_CODE_E + 5) +#define ERR_LIB_SYS 2 #define ERR_LIB_RSA 4 -#define ERR_LIB_EC 16 -#define ERR_LIB_SSL 20 -#define ERR_LIB_PKCS12 35 #define ERR_LIB_PEM 9 #define ERR_LIB_X509 10 #define ERR_LIB_EVP 11 @@ -1536,6 +1562,9 @@ typedef WOLFSSL_SRTP_PROTECTION_PROFILE SRTP_PROTECTION_PROFILE; #define ERR_LIB_DIGEST 13 #define ERR_LIB_CIPHER 14 #define ERR_LIB_USER 15 +#define ERR_LIB_EC 16 +#define ERR_LIB_SSL 20 +#define ERR_LIB_PKCS12 35 #if defined(WOLFSSL_NGINX) || defined(WOLFSSL_HAPROXY) || \ defined(WOLFSSL_MYSQL_COMPATIBLE) || defined(OPENSSL_EXTRA) || \ @@ -1702,11 +1731,16 @@ typedef WOLFSSL_SRTP_PROTECTION_PROFILE SRTP_PROTECTION_PROFILE; #define OpenSSL_version(x) wolfSSL_OpenSSL_version() #endif +#define X509_OBJECT_retrieve_by_subject wolfSSL_X509_OBJECT_retrieve_by_subject + #ifndef NO_WOLFSSL_STUB #define OBJ_create_objects(...) WC_DO_NOTHING #define sk_SSL_COMP_free(...) WC_DO_NOTHING #endif +#define ASN1_OBJECT_new wolfSSL_ASN1_OBJECT_new +#define ASN1_OBJECT_free wolfSSL_ASN1_OBJECT_free +#define i2d_ASN1_OBJECT wolfSSL_i2d_ASN1_OBJECT #define OBJ_dup wolfSSL_ASN1_OBJECT_dup #define SSL_set_psk_use_session_callback wolfSSL_set_psk_use_session_callback diff --git a/wolfssl/openssl/x509v3.h b/wolfssl/openssl/x509v3.h index f488857b50..401f8e83f1 100644 --- a/wolfssl/openssl/x509v3.h +++ b/wolfssl/openssl/x509v3.h @@ -137,10 +137,24 @@ WOLFSSL_API WOLFSSL_v3_ext_method* wolfSSL_X509V3_EXT_get( WOLFSSL_API void* wolfSSL_X509V3_EXT_d2i(WOLFSSL_X509_EXTENSION* ex); WOLFSSL_API char* wolfSSL_i2s_ASN1_STRING(WOLFSSL_v3_ext_method *method, const WOLFSSL_ASN1_STRING *s); +WOLFSSL_API int wolfSSL_i2d_ASN1_GENERALSTRING(WOLFSSL_ASN1_STRING* s, + unsigned char **pp); +WOLFSSL_API int wolfSSL_i2d_ASN1_SEQUENCE(WOLFSSL_ASN1_STRING* s, + unsigned char **pp); +WOLFSSL_API int wolfSSL_i2d_ASN1_OCTET_STRING(WOLFSSL_ASN1_STRING* s, + unsigned char **pp); +WOLFSSL_API int wolfSSL_i2d_ASN1_UTF8STRING(WOLFSSL_ASN1_STRING* s, + unsigned char **pp); +WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_d2i_ASN1_GENERALSTRING( + WOLFSSL_ASN1_STRING** out, const byte** src, long len); +WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_d2i_ASN1_OCTET_STRING( + WOLFSSL_ASN1_STRING** out, const byte** src, long len); +WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_d2i_ASN1_UTF8STRING( + WOLFSSL_ASN1_STRING** out, const byte** src, long len); WOLFSSL_API int wolfSSL_X509V3_EXT_print(WOLFSSL_BIO *out, WOLFSSL_X509_EXTENSION *ext, unsigned long flag, int indent); -WOLFSSL_API int wolfSSL_X509V3_EXT_add_nconf(WOLFSSL_CONF *conf, WOLFSSL_X509V3_CTX *ctx, - const char *section, WOLFSSL_X509 *cert); +WOLFSSL_API int wolfSSL_X509V3_EXT_add_nconf(WOLFSSL_CONF *conf, + WOLFSSL_X509V3_CTX *ctx, const char *section, WOLFSSL_X509 *cert); WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_a2i_IPADDRESS(const char* ipa); #define BASIC_CONSTRAINTS_free wolfSSL_BASIC_CONSTRAINTS_free diff --git a/wolfssl/ssl.h b/wolfssl/ssl.h index dde5841377..cb220c8e10 100644 --- a/wolfssl/ssl.h +++ b/wolfssl/ssl.h @@ -32,8 +32,8 @@ /* for users not using preprocessor flags*/ #include #include +#include #include -#include #include #include #include @@ -208,11 +208,11 @@ typedef struct WOLFSSL_X509_LOOKUP_METHOD WOLFSSL_X509_LOOKUP_METHOD; typedef struct WOLFSSL_CRL WOLFSSL_X509_CRL; typedef struct WOLFSSL_X509_STORE WOLFSSL_X509_STORE; typedef struct WOLFSSL_X509_VERIFY_PARAM WOLFSSL_X509_VERIFY_PARAM; -typedef struct WOLFSSL_BIO WOLFSSL_BIO; typedef struct WOLFSSL_BIO_METHOD WOLFSSL_BIO_METHOD; typedef struct WOLFSSL_X509_EXTENSION WOLFSSL_X509_EXTENSION; typedef struct WOLFSSL_ASN1_OBJECT WOLFSSL_ASN1_OBJECT; typedef struct WOLFSSL_ASN1_OTHERNAME WOLFSSL_ASN1_OTHERNAME; +typedef struct WOLFSSL_ASN1_OTHERNAME OTHERNAME; typedef struct WOLFSSL_X509V3_CTX WOLFSSL_X509V3_CTX; typedef struct WOLFSSL_v3_ext_method WOLFSSL_v3_ext_method; typedef struct WOLFSSL_OBJ_NAME WOLFSSL_OBJ_NAME; @@ -246,6 +246,9 @@ typedef int (*WOLFSSL_X509_STORE_CTX_check_crl_cb)(WOLFSSL_X509_STORE_CTX *, struct WOLFSSL_OBJ_NAME { int type; + int alias; + const char *name; + const char *data; }; struct WOLFSSL_AUTHORITY_KEYID { @@ -1553,6 +1556,7 @@ WOLFSSL_API WOLFSSL_STACK* wolfSSL_shallow_sk_dup(WOLFSSL_STACK* sk); WOLFSSL_API int wolfSSL_sk_push_node(WOLFSSL_STACK** stack, WOLFSSL_STACK* in); WOLFSSL_API WOLFSSL_STACK* wolfSSL_sk_get_node(WOLFSSL_STACK* sk, int idx); WOLFSSL_API int wolfSSL_sk_push(WOLFSSL_STACK *st, const void *data); +WOLFSSL_API int wolfSSL_sk_insert(WOLFSSL_STACK *sk, const void *data, int idx); #if defined(HAVE_OCSP) || defined(HAVE_CRL) || (defined(WOLFSSL_CUSTOM_OID) && \ defined(WOLFSSL_ASN_TEMPLATE) && defined(HAVE_OID_DECODING)) @@ -1638,6 +1642,8 @@ WOLFSSL_API void wolfSSL_ACCESS_DESCRIPTION_free(WOLFSSL_ACCESS_DESCRIPTION* a); WOLFSSL_API void wolfSSL_sk_X509_EXTENSION_pop_free( WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk, void (*f) (WOLFSSL_X509_EXTENSION*)); +WOLFSSL_API void wolfSSL_sk_X509_EXTENSION_free( + WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk); WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* wolfSSL_sk_X509_EXTENSION_new_null(void); WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_ASN1_OBJECT_new(void); WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_ASN1_OBJECT_dup(WOLFSSL_ASN1_OBJECT* obj); @@ -1655,7 +1661,7 @@ WOLFSSL_API int wolfSSL_ASN1_STRING_to_UTF8(unsigned char **out, WOLFSSL_ASN1_ST WOLFSSL_API int wolfSSL_ASN1_UNIVERSALSTRING_to_string(WOLFSSL_ASN1_STRING *s); WOLFSSL_API int wolfSSL_sk_X509_EXTENSION_num(WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk); WOLFSSL_API WOLFSSL_X509_EXTENSION* wolfSSL_sk_X509_EXTENSION_value( - WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk, int idx); + const WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk, int idx); WOLFSSL_API int wolfSSL_set_ex_data(WOLFSSL* ssl, int idx, void* data); #ifdef HAVE_EX_DATA_CLEANUP_HOOKS WOLFSSL_API int wolfSSL_set_ex_data_with_cleanup( @@ -1719,8 +1725,8 @@ WOLFSSL_API WOLF_STACK_OF(WOLFSSL_X509)* wolfSSL_X509_chain_up_ref(WOLF_STACK_OF(WOLFSSL_X509)* chain); #endif -WOLFSSL_API int wolfSSL_OCSP_parse_url(char* url, char** host, char** port, - char** path, int* ssl); +WOLFSSL_API int wolfSSL_OCSP_parse_url(const char* url, char** host, + char** port, char** path, int* ssl); #ifndef NO_BIO #if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10100000L @@ -1959,6 +1965,8 @@ WOLFSSL_API unsigned char* wolfSSL_X509_get_authorityKeyID( WOLFSSL_X509* x509, unsigned char* dst, int* dstLen); WOLFSSL_API unsigned char* wolfSSL_X509_get_subjectKeyID( WOLFSSL_X509* x509, unsigned char* dst, int* dstLen); +WOLFSSL_API const WOLFSSL_ASN1_STRING *wolfSSL_X509_get0_subject_key_id( + WOLFSSL_X509 *x509); WOLFSSL_API int wolfSSL_X509_verify(WOLFSSL_X509* x509, WOLFSSL_EVP_PKEY* pkey); #ifdef WOLFSSL_CERT_REQ @@ -2007,7 +2015,7 @@ WOLFSSL_API int wolfSSL_ASN1_STRING_set(WOLFSSL_ASN1_STRING* asn1, WOLFSSL_API unsigned char* wolfSSL_ASN1_STRING_data(WOLFSSL_ASN1_STRING* asn); WOLFSSL_API const unsigned char* wolfSSL_ASN1_STRING_get0_data( const WOLFSSL_ASN1_STRING* asn); -WOLFSSL_API int wolfSSL_ASN1_STRING_length(WOLFSSL_ASN1_STRING* asn); +WOLFSSL_API int wolfSSL_ASN1_STRING_length(const WOLFSSL_ASN1_STRING* asn); WOLFSSL_API int wolfSSL_ASN1_STRING_copy(WOLFSSL_ASN1_STRING* dst, const WOLFSSL_ASN1_STRING* src); WOLFSSL_API int wolfSSL_X509_verify_cert(WOLFSSL_X509_STORE_CTX* ctx); @@ -2035,6 +2043,8 @@ WOLFSSL_API int wolfSSL_X509_STORE_add_cert( WOLFSSL_X509_STORE* store, WOLFSSL_X509* x509); WOLFSSL_API WOLFSSL_X509_VERIFY_PARAM *wolfSSL_X509_STORE_get0_param( const WOLFSSL_X509_STORE *ctx); +WOLFSSL_API int wolfSSL_X509_STORE_set1_param(WOLFSSL_X509_STORE *ctx, + WOLFSSL_X509_VERIFY_PARAM *param); WOLFSSL_API WOLFSSL_STACK* wolfSSL_X509_STORE_CTX_get_chain( WOLFSSL_X509_STORE_CTX* ctx); WOLFSSL_API WOLFSSL_STACK* wolfSSL_X509_STORE_CTX_get1_chain( @@ -2149,7 +2159,7 @@ WOLFSSL_API WOLFSSL_ASN1_INTEGER* wolfSSL_d2i_ASN1_INTEGER( const unsigned char** in, long inSz); WOLFSSL_API int wolfSSL_i2d_ASN1_INTEGER(const WOLFSSL_ASN1_INTEGER* a, - unsigned char** out); + unsigned char** pp); WOLFSSL_API int wolfSSL_ASN1_TIME_print(WOLFSSL_BIO* bio, const WOLFSSL_ASN1_TIME* asnTime); @@ -2457,12 +2467,6 @@ enum { OCSP_TRUSTOTHER = 512, OCSP_RESPID_KEY = 1024, OCSP_NOTIME = 2048, - - /* OCSP Types */ - OCSP_CERTID = 2, - OCSP_REQUEST = 4, - OCSP_RESPONSE = 8, - OCSP_BASICRESP = 16, #endif SSL_ST_CONNECT = 0x1000, @@ -2597,6 +2601,14 @@ WOLFSSL_API void wolfSSL_ERR_print_errors(WOLFSSL_BIO *bio); enum { /* ssl Constants */ WOLFSSL_ERROR_NONE = 0, /* for most functions */ WOLFSSL_FAILURE = 0, /* for some functions */ + + #if defined(WOLFSSL_DEBUG_TRACE_ERROR_CODES) && \ + (defined(BUILDING_WOLFSSL) || \ + defined(WOLFSSL_DEBUG_TRACE_ERROR_CODES_ALWAYS)) + #define WOLFSSL_FAILURE WC_ERR_TRACE(WOLFSSL_FAILURE) + #define CONST_NUM_ERR_WOLFSSL_FAILURE 0 + #endif + WOLFSSL_SUCCESS = 1, /* WOLFSSL_SHUTDOWN_NOT_DONE is returned by wolfSSL_shutdown and @@ -2614,16 +2626,6 @@ enum { /* ssl Constants */ WOLFSSL_SHUTDOWN_NOT_DONE = 2, #endif - WOLFSSL_ALPN_NOT_FOUND = -9, - WOLFSSL_BAD_CERTTYPE = -8, - WOLFSSL_BAD_STAT = -7, - WOLFSSL_BAD_PATH = -6, - WOLFSSL_BAD_FILETYPE = -5, - WOLFSSL_BAD_FILE = -4, - WOLFSSL_NOT_IMPLEMENTED = -3, - WOLFSSL_UNKNOWN = -2, - WOLFSSL_FATAL_ERROR = -1, - WOLFSSL_FILETYPE_ASN1 = CTC_FILETYPE_ASN1, WOLFSSL_FILETYPE_PEM = CTC_FILETYPE_PEM, WOLFSSL_FILETYPE_DEFAULT = CTC_FILETYPE_ASN1, /* ASN1 */ @@ -2647,14 +2649,15 @@ enum { /* ssl Constants */ (WOLFSSL_SESS_CACHE_NO_INTERNAL_STORE | WOLFSSL_SESS_CACHE_NO_INTERNAL_LOOKUP), + /* These values match OpenSSL values for corresponding names. */ + WOLFSSL_ERROR_SSL = 1, WOLFSSL_ERROR_WANT_READ = 2, WOLFSSL_ERROR_WANT_WRITE = 3, - WOLFSSL_ERROR_WANT_CONNECT = 7, - WOLFSSL_ERROR_WANT_ACCEPT = 8, + WOLFSSL_ERROR_WANT_X509_LOOKUP = 4, WOLFSSL_ERROR_SYSCALL = 5, - WOLFSSL_ERROR_WANT_X509_LOOKUP = 83, WOLFSSL_ERROR_ZERO_RETURN = 6, - WOLFSSL_ERROR_SSL = 85, + WOLFSSL_ERROR_WANT_CONNECT = 7, + WOLFSSL_ERROR_WANT_ACCEPT = 8, WOLFSSL_SENT_SHUTDOWN = 1, WOLFSSL_RECEIVED_SHUTDOWN = 2, @@ -2825,6 +2828,8 @@ WOLFSSL_API int wolfSSL_ASN1_TIME_compare(const WOLFSSL_ASN1_TIME *a, #ifdef OPENSSL_EXTRA WOLFSSL_API WOLFSSL_ASN1_TIME *wolfSSL_ASN1_TIME_set(WOLFSSL_ASN1_TIME *s, time_t t); WOLFSSL_API int wolfSSL_ASN1_TIME_set_string(WOLFSSL_ASN1_TIME *s, const char *str); +WOLFSSL_API int wolfSSL_ASN1_TIME_set_string_X509(WOLFSSL_ASN1_TIME *t, + const char *str); #endif WOLFSSL_API int wolfSSL_sk_num(const WOLFSSL_STACK* sk); @@ -2964,6 +2969,8 @@ WOLFSSL_API WOLFSSL_X509* #ifdef WOLFSSL_CERT_REQ WOLFSSL_API WOLFSSL_X509* wolfSSL_X509_REQ_d2i(WOLFSSL_X509** x509, const unsigned char* in, int len); +WOLFSSL_API WOLFSSL_X509* wolfSSL_d2i_X509_REQ_INFO(WOLFSSL_X509** req, + const unsigned char** in, int len); #endif WOLFSSL_API int wolfSSL_i2d_X509(WOLFSSL_X509* x509, unsigned char** out); WOLFSSL_API WOLFSSL_X509_CRL *wolfSSL_d2i_X509_CRL(WOLFSSL_X509_CRL **crl, @@ -3233,18 +3240,6 @@ WOLFSSL_API void wolfSSL_SetFuzzerCb(WOLFSSL* ssl, CallbackFuzzer cbf, void* fCt WOLFSSL_API int wolfSSL_DTLS_SetCookieSecret(WOLFSSL* ssl, const byte* secret, word32 secretSz); -/* I/O Callback default errors */ -enum IOerrors { - WOLFSSL_CBIO_ERR_GENERAL = -1, /* general unexpected err */ - WOLFSSL_CBIO_ERR_WANT_READ = -2, /* need to call read again */ - WOLFSSL_CBIO_ERR_WANT_WRITE = -2, /* need to call write again */ - WOLFSSL_CBIO_ERR_CONN_RST = -3, /* connection reset */ - WOLFSSL_CBIO_ERR_ISR = -4, /* interrupt */ - WOLFSSL_CBIO_ERR_CONN_CLOSE = -5, /* connection closed or epipe */ - WOLFSSL_CBIO_ERR_TIMEOUT = -6 /* socket timeout */ -}; - - /* CA cache callbacks */ enum { WOLFSSL_SSLV3 = 0, @@ -4068,9 +4063,9 @@ enum { WOLFSSL_FFDHE_8192 = 260, #ifdef HAVE_PQC - /* These group numbers were taken from OQS's openssl fork, see: - * https://github.com/open-quantum-safe/openssl/blob/OQS-OpenSSL_1_1_1-stable/ - * oqs-template/oqs-kem-info.md. + /* These group numbers were taken from OQS's openssl provider, see: + * https://github.com/open-quantum-safe/oqs-provider/blob/main/oqs-template/ + * oqs-kem-info.md. * * The levels in the group name refer to the claimed NIST level of each * parameter set. The associated parameter set name is listed as a comment @@ -4084,6 +4079,7 @@ enum { * algorithms have LEVEL2 and LEVEL4 because none of these submissions * included them. */ +#ifndef WOLFSSL_ML_KEM WOLFSSL_PQC_MIN = 570, WOLFSSL_PQC_SIMPLE_MIN = 570, WOLFSSL_KYBER_LEVEL1 = 570, /* KYBER_512 */ @@ -4097,7 +4093,22 @@ enum { WOLFSSL_P521_KYBER_LEVEL5 = 12093, WOLFSSL_PQC_HYBRID_MAX = 12093, WOLFSSL_PQC_MAX = 12093, -#endif +#else + WOLFSSL_PQC_MIN = 583, + WOLFSSL_PQC_SIMPLE_MIN = 583, + WOLFSSL_KYBER_LEVEL1 = 583, /* ML-KEM 512 */ + WOLFSSL_KYBER_LEVEL3 = 584, /* ML-KEM 768 */ + WOLFSSL_KYBER_LEVEL5 = 585, /* ML-KEM 1024 */ + WOLFSSL_PQC_SIMPLE_MAX = 585, + + WOLFSSL_PQC_HYBRID_MIN = 12103, + WOLFSSL_P256_KYBER_LEVEL1 = 12103, + WOLFSSL_P384_KYBER_LEVEL3 = 12104, + WOLFSSL_P521_KYBER_LEVEL5 = 12105, + WOLFSSL_PQC_HYBRID_MAX = 12105, + WOLFSSL_PQC_MAX = 12105, +#endif /* WOLFSSL_ML_KEM */ +#endif /* HAVE_PQC */ }; enum { @@ -4492,7 +4503,6 @@ WOLFSSL_API WOLFSSL_X509_EXTENSION* wolfSSL_X509_EXTENSION_dup( WOLFSSL_X509_EXTENSION* src); WOLFSSL_API int wolfSSL_sk_X509_EXTENSION_push(WOLFSSL_STACK* sk, WOLFSSL_X509_EXTENSION* ext); -WOLFSSL_API void wolfSSL_sk_X509_EXTENSION_free(WOLFSSL_STACK* sk); WOLFSSL_API void wolfSSL_X509_EXTENSION_free(WOLFSSL_X509_EXTENSION* ext_to_free); WOLFSSL_API WOLFSSL_STACK* wolfSSL_sk_new_x509_ext(void); #endif @@ -4863,6 +4873,10 @@ WOLFSSL_API int wolfSSL_ASN1_BIT_STRING_get_bit( const WOLFSSL_ASN1_BIT_STRING* str, int i); WOLFSSL_API int wolfSSL_ASN1_BIT_STRING_set_bit( WOLFSSL_ASN1_BIT_STRING* str, int pos, int val); +WOLFSSL_API int wolfSSL_i2d_ASN1_BIT_STRING(const WOLFSSL_ASN1_BIT_STRING* bstr, + unsigned char** pp); +WOLFSSL_API WOLFSSL_ASN1_BIT_STRING* wolfSSL_d2i_ASN1_BIT_STRING( + WOLFSSL_ASN1_BIT_STRING** out, const byte** src, long len); #endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */ WOLFSSL_API int wolfSSL_version(WOLFSSL* ssl); @@ -4963,6 +4977,11 @@ WOLFSSL_API WOLFSSL_X509_OBJECT* wolfSSL_X509_OBJECT_new(void); WOLFSSL_API void wolfSSL_X509_OBJECT_free(WOLFSSL_X509_OBJECT *obj); WOLFSSL_API WOLFSSL_X509 *wolfSSL_X509_OBJECT_get0_X509(const WOLFSSL_X509_OBJECT *obj); WOLFSSL_API WOLFSSL_X509_CRL *wolfSSL_X509_OBJECT_get0_X509_CRL(WOLFSSL_X509_OBJECT *obj); + +WOLFSSL_API WOLFSSL_X509_OBJECT *wolfSSL_X509_OBJECT_retrieve_by_subject( + WOLF_STACK_OF(WOLFSSL_X509_OBJECT) *sk, + WOLFSSL_X509_LOOKUP_TYPE type, + WOLFSSL_X509_NAME *name); #endif /* OPENSSL_ALL || HAVE_STUNNEL || WOLFSSL_NGINX || WOLFSSL_HAPROXY || HAVE_LIGHTY */ #if defined(OPENSSL_EXTRA) || defined(WOLFSSL_WPAS_SMALL) @@ -5235,8 +5254,14 @@ WOLFSSL_API void wolfSSL_X509_ALGOR_free(WOLFSSL_X509_ALGOR *alg); WOLFSSL_API const WOLFSSL_X509_ALGOR* wolfSSL_X509_get0_tbs_sigalg(const WOLFSSL_X509 *x); WOLFSSL_API void wolfSSL_X509_ALGOR_get0(const WOLFSSL_ASN1_OBJECT **paobj, int *pptype, const void **ppval, const WOLFSSL_X509_ALGOR *algor); WOLFSSL_API int wolfSSL_X509_ALGOR_set0(WOLFSSL_X509_ALGOR *algor, WOLFSSL_ASN1_OBJECT *aobj, int ptype, void *pval); +WOLFSSL_API int wolfSSL_i2d_X509_ALGOR(const WOLFSSL_X509_ALGOR* alg, + unsigned char** pp); +WOLFSSL_API WOLFSSL_X509_ALGOR* wolfSSL_d2i_X509_ALGOR(WOLFSSL_X509_ALGOR** out, + const byte** src, long len); WOLFSSL_API WOLFSSL_ASN1_TYPE* wolfSSL_ASN1_TYPE_new(void); WOLFSSL_API void wolfSSL_ASN1_TYPE_free(WOLFSSL_ASN1_TYPE* at); +WOLFSSL_API int wolfSSL_i2d_ASN1_TYPE(WOLFSSL_ASN1_TYPE* at, + unsigned char** pp); WOLFSSL_API WOLFSSL_X509_PUBKEY *wolfSSL_X509_PUBKEY_new(void); WOLFSSL_API void wolfSSL_X509_PUBKEY_free(WOLFSSL_X509_PUBKEY *x); WOLFSSL_API WOLFSSL_X509_PUBKEY *wolfSSL_X509_get_X509_PUBKEY(const WOLFSSL_X509* x509); diff --git a/wolfssl/test.h b/wolfssl/test.h index 888d7f1ae4..0fb23c1962 100644 --- a/wolfssl/test.h +++ b/wolfssl/test.h @@ -1102,8 +1102,8 @@ static WC_INLINE void ShowX509Ex(WOLFSSL_X509* x509, const char* hdr, * message ready to write once */ strLen = XSNPRINTF(serialMsg, sizeof(serialMsg), " %s", words[3]); for (i = 0; i < sz; i++) - strLen = XSNPRINTF(serialMsg + strLen, sizeof(serialMsg) - strLen, - ":%02x ", serial[i]); + strLen = XSNPRINTF(serialMsg + strLen, + sizeof(serialMsg) - (size_t)strLen, ":%02x ", serial[i]); printf("%s\n", serialMsg); } diff --git a/wolfssl/wolfcrypt/asn.h b/wolfssl/wolfcrypt/asn.h index acee9e4276..39ac82eaea 100644 --- a/wolfssl/wolfcrypt/asn.h +++ b/wolfssl/wolfcrypt/asn.h @@ -366,7 +366,7 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define GetASN_Int8Bit(dataASN, num) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_WORD8; \ - (dataASN)->data.u8 = num; \ + (dataASN)->data.u8 = (num); \ } while (0) /* Setup ASN data item to get a 16-bit number. @@ -377,7 +377,7 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define GetASN_Int16Bit(dataASN, num) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_WORD16; \ - (dataASN)->data.u16 = num; \ + (dataASN)->data.u16 = (num); \ } while (0) /* Setup ASN data item to get a 32-bit number. @@ -388,7 +388,7 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define GetASN_Int32Bit(dataASN, num) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_WORD32; \ - (dataASN)->data.u32 = num; \ + (dataASN)->data.u32 = (num); \ } while (0) /* Setup ASN data item to get data into a buffer of a specific length. @@ -400,8 +400,8 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define GetASN_Buffer(dataASN, d, l) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_BUFFER; \ - (dataASN)->data.buffer.data = d; \ - (dataASN)->data.buffer.length = l; \ + (dataASN)->data.buffer.data = (d); \ + (dataASN)->data.buffer.length = (l); \ } while (0) /* Setup ASN data item to check parsed data against expected buffer. @@ -413,8 +413,8 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define GetASN_ExpBuffer(dataASN, d, l) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_EXP_BUFFER; \ - (dataASN)->data.ref.data = d; \ - (dataASN)->data.ref.length = l; \ + (dataASN)->data.ref.data = (d); \ + (dataASN)->data.ref.length = (l); \ } while (0) /* Setup ASN data item to get a number into an mp_int. @@ -425,7 +425,7 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define GetASN_MP(dataASN, num) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_MP; \ - (dataASN)->data.mp = num; \ + (dataASN)->data.mp = (num); \ } while (0) /* Setup ASN data item to get a number into an mp_int that is initialized. @@ -436,7 +436,7 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define GetASN_MP_Inited(dataASN, num) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_MP_INITED; \ - (dataASN)->data.mp = num; \ + (dataASN)->data.mp = (num); \ } while (0) /* Setup ASN data item to get a positive or negative number into an mp_int. @@ -447,7 +447,7 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define GetASN_MP_PosNeg(dataASN, num) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_MP_POS_NEG; \ - (dataASN)->data.mp = num; \ + (dataASN)->data.mp = (num); \ } while (0) /* Setup ASN data item to be a choice of tags. @@ -458,7 +458,7 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define GetASN_Choice(dataASN, options) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_CHOICE; \ - (dataASN)->data.choice = options; \ + (dataASN)->data.choice = (options); \ } while (0) /* Setup ASN data item to get a boolean value. @@ -469,7 +469,7 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define GetASN_Boolean(dataASN, num) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_NONE; \ - (dataASN)->data.u8 = num; \ + (dataASN)->data.u8 = (num); \ } while (0) /* Setup ASN data item to be a an OID of a specific type. @@ -478,7 +478,7 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); * @param [in] oidType Type of OID to expect. */ #define GetASN_OID(dataASN, oidType) \ - (dataASN)->data.oid.type = oidType + (dataASN)->data.oid.type = (oidType) /* Get the data and length from an ASN data item. * @@ -524,7 +524,7 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define SetASN_Boolean(dataASN, val) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_NONE; \ - (dataASN)->data.u8 = val; \ + (dataASN)->data.u8 = (val); \ } while (0) /* Setup an ASN data item to set an 8-bit number. @@ -535,7 +535,7 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define SetASN_Int8Bit(dataASN, num) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_WORD8; \ - (dataASN)->data.u8 = num; \ + (dataASN)->data.u8 = (num); \ } while (0) /* Setup an ASN data item to set a 16-bit number. @@ -546,7 +546,7 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define SetASN_Int16Bit(dataASN, num) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_WORD16; \ - (dataASN)->data.u16 = num; \ + (dataASN)->data.u16 = (num); \ } while (0) /* Setup an ASN data item to set the data in a buffer. @@ -557,8 +557,8 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); */ #define SetASN_Buffer(dataASN, d, l) \ do { \ - (dataASN)->data.buffer.data = d; \ - (dataASN)->data.buffer.length = l; \ + (dataASN)->data.buffer.data = (d); \ + (dataASN)->data.buffer.length = (word32)(l); \ } while (0) /* Setup an ASN data item to set the DER encode data in a buffer. @@ -570,8 +570,8 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define SetASN_ReplaceBuffer(dataASN, d, l) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_REPLACE_BUFFER; \ - (dataASN)->data.buffer.data = d; \ - (dataASN)->data.buffer.length = l; \ + (dataASN)->data.buffer.data = (d); \ + (dataASN)->data.buffer.length = (l); \ } while (0) /* Setup an ASN data item to set an muli-precision number. @@ -582,7 +582,7 @@ WOLFSSL_LOCAL void SetASN_OID(ASNSetData *dataASN, int oid, int oidType); #define SetASN_MP(dataASN, num) \ do { \ (dataASN)->dataType = ASN_DATA_TYPE_MP; \ - (dataASN)->data.mp = num; \ + (dataASN)->data.mp = (num); \ } while (0) /* Setup an ASN data item to set an OID based on id and type. @@ -1724,7 +1724,9 @@ struct DecodedCert { const byte* extCrlInfo; /* CRL Distribution Points */ int extCrlInfoSz; /* length of the URI */ byte extSubjKeyId[KEYID_SIZE]; /* Subject Key ID */ + word32 extSubjKeyIdSz; byte extAuthKeyId[KEYID_SIZE]; /* Authority Key ID */ + word32 extAuthKeyIdSz; #ifdef WOLFSSL_AKID_NAME const byte* extAuthKeyIdIssuer; /* Authority Key ID authorityCertIssuer */ word32 extAuthKeyIdIssuerSz; /* Authority Key ID authorityCertIssuer length */ @@ -1751,9 +1753,7 @@ struct DecodedCert { word32 extRawAuthKeyIdSz; #endif const byte* extAuthKeyIdSrc; - word32 extAuthKeyIdSz; const byte* extSubjKeyIdSrc; - word32 extSubjKeyIdSz; #endif #ifdef OPENSSL_ALL const byte* extSubjAltNameSrc; @@ -2291,6 +2291,8 @@ WOLFSSL_LOCAL int GetLength(const byte* input, word32* inOutIdx, int* len, word32 maxIdx); WOLFSSL_LOCAL int GetLength_ex(const byte* input, word32* inOutIdx, int* len, word32 maxIdx, int check); +WOLFSSL_LOCAL int GetASNHeader(const byte* input, byte tag, word32* inOutIdx, + int* len, word32 maxIdx); WOLFSSL_LOCAL int GetSequence(const byte* input, word32* inOutIdx, int* len, word32 maxIdx); WOLFSSL_LOCAL int GetSequence_ex(const byte* input, word32* inOutIdx, int* len, @@ -2328,8 +2330,11 @@ WOLFSSL_LOCAL int GetObjectId(const byte* input, word32* inOutIdx, word32* oid, word32 oidType, word32 maxIdx); WOLFSSL_LOCAL int GetAlgoId(const byte* input, word32* inOutIdx, word32* oid, word32 oidType, word32 maxIdx); +WOLFSSL_LOCAL int GetAlgoIdEx(const byte* input, word32* inOutIdx, word32* oid, + word32 oidType, word32 maxIdx, byte *absentParams); WOLFSSL_LOCAL int GetASNTag(const byte* input, word32* idx, byte* tag, word32 inputSz); +WOLFSSL_LOCAL int GetASN_BitString(const byte* input, word32 idx, int length); WOLFSSL_LOCAL word32 SetASNLength(word32 length, byte* output); WOLFSSL_LOCAL word32 SetASNSequence(word32 len, byte* output); @@ -2341,6 +2346,8 @@ WOLFSSL_LOCAL word32 SetASNSet(word32 len, byte* output); WOLFSSL_LOCAL word32 SetLength(word32 length, byte* output); WOLFSSL_LOCAL word32 SetLengthEx(word32 length, byte* output, byte isIndef); +WOLFSSL_LOCAL word32 SetHeader(byte tag, word32 len, byte* output, + byte isIndef); WOLFSSL_LOCAL word32 SetSequence(word32 len, byte* output); WOLFSSL_LOCAL word32 SetSequenceEx(word32 len, byte* output, byte isIndef); WOLFSSL_LOCAL word32 SetIndefEnd(byte* output); @@ -2354,6 +2361,8 @@ WOLFSSL_LOCAL word32 SetExplicit(byte number, word32 len, byte* output, byte isIndef); WOLFSSL_LOCAL word32 SetSet(word32 len, byte* output); WOLFSSL_API word32 SetAlgoID(int algoOID, byte* output, int type, int curveSz); +WOLFSSL_LOCAL word32 SetAlgoIDEx(int algoOID, byte* output, int type, int curveSz, + byte absentParams); WOLFSSL_LOCAL int SetMyVersion(word32 version, byte* output, int header); WOLFSSL_LOCAL int SetSerialNumber(const byte* sn, word32 snSz, byte* output, word32 outputSz, int maxSnSz); diff --git a/wolfssl/wolfcrypt/chacha.h b/wolfssl/wolfcrypt/chacha.h index c3af0507af..987dc9fb14 100644 --- a/wolfssl/wolfcrypt/chacha.h +++ b/wolfssl/wolfcrypt/chacha.h @@ -97,11 +97,11 @@ WOLFSSL_API int wc_Chacha_SetIV(ChaCha* ctx, const byte* inIv, word32 counter); WOLFSSL_API int wc_Chacha_Process(ChaCha* ctx, byte* cipher, const byte* plain, word32 msglen); -WOLFSSL_LOCAL void wc_Chacha_purge_current_block(ChaCha* ctx); - WOLFSSL_API int wc_Chacha_SetKey(ChaCha* ctx, const byte* key, word32 keySz); #ifdef HAVE_XCHACHA +WOLFSSL_LOCAL void wc_Chacha_purge_current_block(ChaCha* ctx); + WOLFSSL_API int wc_XChacha_SetKey(ChaCha *ctx, const byte *key, word32 keySz, const byte *nonce, word32 nonceSz, word32 counter); diff --git a/wolfssl/wolfcrypt/dilithium.h b/wolfssl/wolfcrypt/dilithium.h index 742c8ecb91..7f30679e59 100644 --- a/wolfssl/wolfcrypt/dilithium.h +++ b/wolfssl/wolfcrypt/dilithium.h @@ -197,8 +197,8 @@ #define PARAMS_ML_DSA_44_ETA DILITHIUM_ETA_2 /* Number of bits in private key for ML-DSA-44. */ #define PARAMS_ML_DSA_44_ETA_BITS DILITHIUM_ETA_2_BITS -/* Collision strength of c-tilde, LAMBDA, in bytes for ML-DSA-44. */ -#define PARAMS_ML_DSA_44_LAMBDA 16 +/* Collision strength of c-tilde, LAMBDA, in bits for ML-DSA-44. */ +#define PARAMS_ML_DSA_44_LAMBDA 128 /* # +/-1's in polynomial c, TAU, for ML-DSA-44. */ #define PARAMS_ML_DSA_44_TAU 39 /* BETA = TAU * ETA for ML-DSA-44. */ @@ -242,7 +242,7 @@ (DILITHIUM_PUB_SEED_SZ + PARAMS_ML_DSA_44_K * DILITHIUM_N * DILITHIUM_U / 8) /* Encoding size of signature in bytes for ML-DSA-44. */ #define PARAMS_ML_DSA_44_SIG_SIZE \ - ((PARAMS_ML_DSA_44_LAMBDA * 2) + \ + ((PARAMS_ML_DSA_44_LAMBDA / 4) + \ PARAMS_ML_DSA_44_L * DILITHIUM_N/8 * (PARAMS_ML_DSA_44_GAMMA1_BITS + 1) + \ PARAMS_ML_DSA_44_OMEGA + PARAMS_ML_DSA_44_K) @@ -258,8 +258,8 @@ #define PARAMS_ML_DSA_65_ETA DILITHIUM_ETA_4 /* Number of bits in private key for ML-DSA-65. */ #define PARAMS_ML_DSA_65_ETA_BITS DILITHIUM_ETA_4_BITS -/* Collision strength of c-tilde, LAMBDA, in bytes for ML-DSA-65. */ -#define PARAMS_ML_DSA_65_LAMBDA 24 +/* Collision strength of c-tilde, LAMBDA, in bits for ML-DSA-65. */ +#define PARAMS_ML_DSA_65_LAMBDA 192 /* # +/-1's in polynomial c, TAU, for ML-DSA-65. */ #define PARAMS_ML_DSA_65_TAU 49 /* BETA = TAU * ETA for ML-DSA-65. */ @@ -303,7 +303,7 @@ (DILITHIUM_PUB_SEED_SZ + PARAMS_ML_DSA_65_K * DILITHIUM_N * DILITHIUM_U / 8) /* Encoding size of signature in bytes for ML-DSA-65. */ #define PARAMS_ML_DSA_65_SIG_SIZE \ - ((PARAMS_ML_DSA_65_LAMBDA * 2) + \ + ((PARAMS_ML_DSA_65_LAMBDA / 4) + \ PARAMS_ML_DSA_65_L * DILITHIUM_N/8 * (PARAMS_ML_DSA_65_GAMMA1_BITS + 1) + \ PARAMS_ML_DSA_65_OMEGA + PARAMS_ML_DSA_65_K) @@ -319,8 +319,8 @@ #define PARAMS_ML_DSA_87_ETA DILITHIUM_ETA_2 /* Number of bits in private key for ML-DSA-87. */ #define PARAMS_ML_DSA_87_ETA_BITS DILITHIUM_ETA_2_BITS -/* Collision strength of c-tilde, LAMBDA, in bytes for ML-DSA-87. */ -#define PARAMS_ML_DSA_87_LAMBDA 32 +/* Collision strength of c-tilde, LAMBDA, in bits for ML-DSA-87. */ +#define PARAMS_ML_DSA_87_LAMBDA 256 /* # +/-1's in polynomial c, TAU, for ML-DSA-87. */ #define PARAMS_ML_DSA_87_TAU 60 /* BETA = TAU * ETA for ML-DSA-87. */ @@ -365,7 +365,7 @@ (DILITHIUM_PUB_SEED_SZ + PARAMS_ML_DSA_87_K * DILITHIUM_N * DILITHIUM_U / 8) /* Encoding size of signature in bytes for ML-DSA-87. */ #define PARAMS_ML_DSA_87_SIG_SIZE \ - ((PARAMS_ML_DSA_87_LAMBDA * 2) + \ + ((PARAMS_ML_DSA_87_LAMBDA / 4) + \ PARAMS_ML_DSA_87_L * DILITHIUM_N/8 * (PARAMS_ML_DSA_87_GAMMA1_BITS + 1) + \ PARAMS_ML_DSA_87_OMEGA + PARAMS_ML_DSA_87_K) @@ -520,7 +520,7 @@ typedef struct wc_dilithium_params { byte tau; byte beta; byte omega; - byte lambda; + word16 lambda; byte gamma1_bits; word32 gamma2; word32 w1EncSz; @@ -626,15 +626,38 @@ WOLFSSL_API int wc_dilithium_make_key_from_seed(dilithium_key* key, const byte* seed); WOLFSSL_API -int wc_dilithium_sign_msg(const byte* in, word32 inLen, byte* out, - word32 *outLen, dilithium_key* key, WC_RNG* rng); +int wc_dilithium_sign_msg(const byte* msg, word32 msgLen, byte* sig, + word32* sigLen, dilithium_key* key, WC_RNG* rng); WOLFSSL_API -int wc_dilithium_sign_msg_with_seed(const byte* in, word32 inLen, byte* out, - word32 *outLen, dilithium_key* key, byte* seed); +int wc_dilithium_sign_ctx_msg(const byte* ctx, byte ctxLen, const byte* msg, + word32 msgLen, byte* sig, word32* sigLen, dilithium_key* key, WC_RNG* rng); +WOLFSSL_API +int wc_dilithium_sign_ctx_hash(const byte* ctx, byte ctxLen, int hashAlg, + const byte* hash, word32 hashLen, byte* sig, word32* sigLen, + dilithium_key* key, WC_RNG* rng); +WOLFSSL_API +int wc_dilithium_sign_msg_with_seed(const byte* msg, word32 msgLen, byte* sig, + word32 *sigLen, dilithium_key* key, const byte* seed); +WOLFSSL_API +int wc_dilithium_sign_ctx_msg_with_seed(const byte* ctx, byte ctxLen, + const byte* msg, word32 msgLen, byte* sig, word32 *sigLen, + dilithium_key* key, const byte* seed); +WOLFSSL_API +int wc_dilithium_sign_ctx_hash_with_seed(const byte* ctx, byte ctxLen, + int hashAlg, const byte* hash, word32 hashLen, byte* sig, word32 *sigLen, + dilithium_key* key, const byte* seed); #endif WOLFSSL_API int wc_dilithium_verify_msg(const byte* sig, word32 sigLen, const byte* msg, word32 msgLen, int* res, dilithium_key* key); +WOLFSSL_API +int wc_dilithium_verify_ctx_msg(const byte* sig, word32 sigLen, const byte* ctx, + word32 ctxLen, const byte* msg, word32 msgLen, int* res, + dilithium_key* key); +WOLFSSL_API +int wc_dilithium_verify_ctx_hash(const byte* sig, word32 sigLen, + const byte* ctx, word32 ctxLen, int hashAlg, const byte* hash, + word32 hashLen, int* res, dilithium_key* key); WOLFSSL_API int wc_dilithium_init(dilithium_key* key); diff --git a/wolfssl/wolfcrypt/error-crypt.h b/wolfssl/wolfcrypt/error-crypt.h index 8fb71b3c6a..3f188f7444 100644 --- a/wolfssl/wolfcrypt/error-crypt.h +++ b/wolfssl/wolfcrypt/error-crypt.h @@ -37,10 +37,25 @@ the error status. extern "C" { #endif +#ifdef WOLFSSL_DEBUG_TRACE_ERROR_CODES_H +#include +#endif /* error codes, add string for new errors !!! */ -enum { - MAX_CODE_E = -100, /* errors -101 - -299 */ +enum wolfCrypt_ErrorCodes { + /* note that WOLFSSL_FATAL_ERROR is defined as -1 in error-ssl.h, for + * reasons of backward compatibility. + */ + + MAX_CODE_E = -96, /* errors -97 - -299 */ + WC_FIRST_E = -97, /* errors -97 - -299 */ + + MP_MEM = -97, /* MP dynamic memory allocation failed. */ + MP_VAL = -98, /* MP value passed is not able to be used. */ + MP_WOULDBLOCK = -99, /* MP non-blocking operation is returning after + * partial completion. */ + MP_NOT_INF = -100, /* MP point not at infinity */ + OPEN_RAN_E = -101, /* opening random device error */ READ_RAN_E = -102, /* reading random device error */ WINCRYPT_E = -103, /* windows crypt init error */ @@ -276,13 +291,12 @@ enum { SM4_CCM_AUTH_E = -299, /* SM4-CCM Authentication check failure */ WC_LAST_E = -299, /* Update this to indicate last error */ - MIN_CODE_E = -300 /* errors -101 - -299 */ + MIN_CODE_E = -300 /* errors -2 - -299 */ /* add new companion error id strings for any new error codes wolfcrypt/src/error.c !!! */ }; - #ifdef NO_ERROR_STRINGS #define wc_GetErrorString(error) "no support for error strings built in" #define wc_ErrorString(err, buf) \ @@ -294,21 +308,34 @@ WOLFSSL_API void wc_ErrorString(int err, char* buff); WOLFSSL_ABI WOLFSSL_API const char* wc_GetErrorString(int error); #endif -#if defined(WOLFSSL_DEBUG_TRACE_ERROR_CODES) && !defined(BUILDING_WOLFSSL) - #undef WOLFSSL_DEBUG_TRACE_ERROR_CODES -#endif -#ifdef WOLFSSL_DEBUG_TRACE_ERROR_CODES +#if defined(WOLFSSL_DEBUG_TRACE_ERROR_CODES) && \ + (defined(BUILDING_WOLFSSL) || \ + defined(WOLFSSL_DEBUG_TRACE_ERROR_CODES_ALWAYS)) + WOLFSSL_API extern void wc_backtrace_render(void); #define WC_NO_ERR_TRACE(label) (CONST_NUM_ERR_ ## label) + #ifndef WOLFSSL_DEBUG_BACKTRACE_RENDER_CLAUSE + #ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES + #define WOLFSSL_DEBUG_BACKTRACE_RENDER_CLAUSE wc_backtrace_render() + #else + #define WOLFSSL_DEBUG_BACKTRACE_RENDER_CLAUSE (void)0 + #endif + #endif #ifndef WC_ERR_TRACE #ifdef NO_STDIO_FILESYSTEM #define WC_ERR_TRACE(label) \ - ( printf("ERR TRACE: %s L %d " #label " (%d)\n", \ - __FILE__, __LINE__, label), label) + ( printf("ERR TRACE: %s L %d %s (%d)\n", \ + __FILE__, __LINE__, #label, label), \ + WOLFSSL_DEBUG_BACKTRACE_RENDER_CLAUSE, \ + label \ + ) #else #define WC_ERR_TRACE(label) \ ( fprintf(stderr, \ - "ERR TRACE: %s L %d " #label " (%d)\n", \ - __FILE__, __LINE__, label), label) + "ERR TRACE: %s L %d %s (%d)\n", \ + __FILE__, __LINE__, #label, label), \ + WOLFSSL_DEBUG_BACKTRACE_RENDER_CLAUSE, \ + label \ + ) #endif #endif #include diff --git a/wolfssl/wolfcrypt/ext_lms.h b/wolfssl/wolfcrypt/ext_lms.h index 8be32bf5f7..41203351cf 100644 --- a/wolfssl/wolfcrypt/ext_lms.h +++ b/wolfssl/wolfcrypt/ext_lms.h @@ -22,12 +22,9 @@ #ifndef EXT_LMS_H #define EXT_LMS_H -#ifdef WOLFSSL_HAVE_LMS -#include +#if defined(WOLFSSL_HAVE_LMS) && defined(HAVE_LIBLMS) -#if !defined(HAVE_LIBLMS) -#error "This code requires liblms" -#endif +#include /* hash-sigs LMS HSS includes */ #include diff --git a/wolfssl/wolfcrypt/ext_xmss.h b/wolfssl/wolfcrypt/ext_xmss.h index 927ab6ed46..cb041bcb6e 100644 --- a/wolfssl/wolfcrypt/ext_xmss.h +++ b/wolfssl/wolfcrypt/ext_xmss.h @@ -22,12 +22,9 @@ #ifndef EXT_XMSS_H #define EXT_XMSS_H -#ifdef WOLFSSL_HAVE_XMSS -#include +#if defined(WOLFSSL_HAVE_XMSS) && defined(HAVE_LIBXMSS) -#if !defined(HAVE_LIBXMSS) - #error "This code requires libxmss" -#endif +#include #include #include diff --git a/wolfssl/wolfcrypt/ge_operations.h b/wolfssl/wolfcrypt/ge_operations.h index dd70d3bb59..75d4b07f94 100644 --- a/wolfssl/wolfcrypt/ge_operations.h +++ b/wolfssl/wolfcrypt/ge_operations.h @@ -112,7 +112,6 @@ typedef struct { ge Z; ge T2d; } ge_cached; -#endif /* !ED25519_SMALL */ #ifdef CURVED25519_ASM void ge_p1p1_to_p2(ge_p2 *r, const ge_p1p1 *p); @@ -124,6 +123,7 @@ void ge_msub(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q); void ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q); void ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q); #endif +#endif /* !ED25519_SMALL */ #ifdef __cplusplus } /* extern "C" */ diff --git a/wolfssl/wolfcrypt/integer.h b/wolfssl/wolfcrypt/integer.h index 6efb4d8e23..27e0200179 100644 --- a/wolfssl/wolfcrypt/integer.h +++ b/wolfssl/wolfcrypt/integer.h @@ -42,6 +42,8 @@ #else +#include +#include #include #ifndef CHAR_BIT @@ -162,9 +164,6 @@ extern "C" { #define MP_NEG 1 /* negative */ #define MP_OKAY 0 /* ok result */ -#define MP_MEM (-2) /* out of mem */ -#define MP_VAL (-3) /* invalid input */ -#define MP_NOT_INF (-4) /* point not at infinity */ #define MP_RANGE MP_NOT_INF #define MP_YES 1 /* yes response */ diff --git a/wolfssl/wolfcrypt/kyber.h b/wolfssl/wolfcrypt/kyber.h index 87b1442a88..93b502223a 100644 --- a/wolfssl/wolfcrypt/kyber.h +++ b/wolfssl/wolfcrypt/kyber.h @@ -213,6 +213,58 @@ WOLFSSL_API int wc_KyberKey_EncodePrivateKey(KyberKey* key, unsigned char* out, WOLFSSL_API int wc_KyberKey_EncodePublicKey(KyberKey* key, unsigned char* out, word32 len); + + +#define WC_ML_KEM_512_K KYBER512_K +#define WC_ML_KEM_512_PUBLIC_KEY_SIZE KYBER512_PUBLIC_KEY_SIZE +#define wC_ML_KEM_512_PRIVATE_KEY_SIZE KYBER512_PRIVATE_KEY_SIZE +#define wC_ML_KEM_512_CIPHER_TEXT_SIZE KYBER512_CIPHER_TEXT_SIZE + +#define WC_ML_KEM_768_K KYBER768_K +#define WC_ML_KEM_768_PUBLIC_KEY_SIZE KYBER768_PUBLIC_KEY_SIZE +#define wC_ML_KEM_768_PRIVATE_KEY_SIZE KYBER768_PRIVATE_KEY_SIZE +#define wC_ML_KEM_768_CIPHER_TEXT_SIZE KYBER768_CIPHER_TEXT_SIZE + +#define WC_ML_KEM_1024_K KYBER1024_K +#define WC_ML_KEM_1024_PUBLIC_KEY_SIZE KYBER1024_PUBLIC_KEY_SIZE +#define wC_ML_KEM_1024_PRIVATE_KEY_SIZE KYBER1024_PRIVATE_KEY_SIZE +#define wC_ML_KEM_1024_CIPHER_TEXT_SIZE KYBER1024_CIPHER_TEXT_SIZE + +#define WC_ML_KEM_MAX_K KYBER_MAX_K +#define WC_ML_KEM_MAX_PRIVATE_KEY_SIZE KYBER_MAX_PRIVATE_KEY_SIZE +#define WC_ML_KEM_MAX_PUBLIC_KEY_SIZE KYBER_MAX_PUBLIC_KEY_SIZE +#define WC_ML_KEM_MAX_CIPHER_TEXT_SIZE KYBER_MAX_CIPHER_TEXT_SIZE + +#define WC_ML_KEM_512 KYBER512 +#define WC_ML_KEM_768 KYBER768 +#define WC_ML_KEM_1024 KYBER1024 + +#define WC_ML_KEM_SYM_SZ KYBER_SYM_SZ +#define WC_ML_KEM_SS_SZ KYBER_SS_SZ +#define WC_ML_KEM_MAKEKEY_RAND_SZ KYBER_MAKEKEY_RAND_SZ +#define WC_ML_KEM_ENC_RAND_SZ KYBER_ENC_RAND_SZ +#define WC_ML_KEM_POLY_SIZE KYBER_POLY_SIZE + +#define MlKemKey KyberKey + +#define wc_MlKemKey_Init(key, type, heap, devId) \ + wc_KyberKey_Init(type, key, heap, devId) +#define wc_MlKemKey_Free wc_KyberKey_Free +#define wc_MlKemKey_MakeKey wc_KyberKey_MakeKey +#define wc_MlKemKey_MakeKeyWithRandom wc_KyberKey_MakeKeyWithRandom +#define wc_MlKemKey_CipherTextSize wc_KyberKey_CipherTextSize +#define wc_MlKemKey_SharedSecretSize wc_KyberKey_SharedSecretSize +#define wc_MlKemKey_Encapsulate wc_KyberKey_Encapsulate +#define wc_MlKemKey_EncapsulateWithRandom wc_KyberKey_EncapsulateWithRandom +#define wc_MlKemKey_Decapsulate wc_KyberKey_Encapsulate +#define wc_MlKemKey_DecodePrivateKey wc_KyberKey_DecodePrivateKey +#define wc_MlKemKey_DecodePublicKey wc_KyberKey_DecodePublicKey +#define wc_MlKemKey_PrivateKeySize wc_KyberKey_PrivateKeySize +#define wc_MlKemKey_PublicKeySize wc_KyberKey_PublicKeySize +#define wc_MlKemKey_EncodePrivateKey wc_KyberKey_EncodePrivateKey +#define wc_MlKemKey_EncodePublicKey wc_KyberKey_EncodePublicKey + + #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/wolfssl/wolfcrypt/misc.h b/wolfssl/wolfcrypt/misc.h index 533faf2df8..cc068db441 100644 --- a/wolfssl/wolfcrypt/misc.h +++ b/wolfssl/wolfcrypt/misc.h @@ -145,6 +145,7 @@ WOLFSSL_LOCAL word32 w64GetLow32(w64wrapper n); WOLFSSL_LOCAL word32 w64GetHigh32(w64wrapper n); WOLFSSL_LOCAL void w64SetLow32(w64wrapper *n, word32 low); WOLFSSL_LOCAL w64wrapper w64Add32(w64wrapper a, word32 b, byte *wrap); +WOLFSSL_LOCAL w64wrapper w64Add(w64wrapper a, w64wrapper b, byte *wrap); WOLFSSL_LOCAL w64wrapper w64Sub32(w64wrapper a, word32 b, byte *wrap); WOLFSSL_LOCAL byte w64GT(w64wrapper a, w64wrapper b); WOLFSSL_LOCAL byte w64IsZero(w64wrapper a); @@ -157,6 +158,7 @@ WOLFSSL_LOCAL w64wrapper w64Sub(w64wrapper a, w64wrapper b); WOLFSSL_LOCAL void w64Zero(w64wrapper *a); WOLFSSL_LOCAL w64wrapper w64ShiftRight(w64wrapper a, int shift); WOLFSSL_LOCAL w64wrapper w64ShiftLeft(w64wrapper a, int shift); +WOLFSSL_LOCAL w64wrapper w64Mul(word32 a, word32 b); #else /* !NO_INLINE */ diff --git a/wolfssl/wolfcrypt/pkcs7.h b/wolfssl/wolfcrypt/pkcs7.h index 59011091b1..85b1a1faee 100644 --- a/wolfssl/wolfcrypt/pkcs7.h +++ b/wolfssl/wolfcrypt/pkcs7.h @@ -358,6 +358,7 @@ struct PKCS7 { word32 cachedEncryptedContentSz; word16 contentCRLF:1; /* have content line endings been converted to CRLF */ word16 contentIsPkcs7Type:1; /* eContent follows PKCS#7 RFC not CMS */ + word16 hashParamsAbsent:1; /* !! NEW DATA MEMBERS MUST BE ADDED AT END !! */ }; diff --git a/wolfssl/wolfcrypt/poly1305.h b/wolfssl/wolfcrypt/poly1305.h index 7e598e8595..a765a8775d 100644 --- a/wolfssl/wolfcrypt/poly1305.h +++ b/wolfssl/wolfcrypt/poly1305.h @@ -57,7 +57,7 @@ #if defined(USE_INTEL_POLY1305_SPEEDUP) #elif (defined(WC_HAS_SIZEOF_INT128_64BIT) || defined(WC_HAS_MSVC_64BIT) || \ - defined(WC_HAS_GCC_4_4_64BIT)) + defined(WC_HAS_GCC_4_4_64BIT)) && !defined(WOLFSSL_W64_WRAPPER_TEST) #define POLY130564 #else #define POLY130532 @@ -88,14 +88,25 @@ typedef struct Poly1305 { size_t leftover; unsigned char finished; unsigned char started; -#else -#if defined(WOLFSSL_ARMASM) && defined(__aarch64__) +#elif defined(WOLFSSL_ARMASM) && defined(__aarch64__) + ALIGN128 word64 r64[2]; ALIGN128 word32 r[5]; ALIGN128 word32 r_2[5]; /* r^2 */ ALIGN128 word32 r_4[5]; /* r^4 */ ALIGN128 word32 h[5]; word32 pad[4]; word64 leftover; + unsigned char buffer[POLY1305_BLOCK_SIZE]; + unsigned char finished; +#elif defined(WOLFSSL_RISCV_ASM) + word64 r[2]; +#ifdef WOLFSSL_RISCV_VECTOR + word64 r2[6]; +#endif + word64 h[3]; + word64 pad[2]; + size_t leftover; + unsigned char buffer[POLY1305_BLOCK_SIZE]; #else #if defined(POLY130564) word64 r[3]; @@ -107,10 +118,9 @@ typedef struct Poly1305 { word32 pad[4]; #endif size_t leftover; -#endif /* WOLFSSL_ARMASM */ unsigned char buffer[POLY1305_BLOCK_SIZE]; unsigned char finished; -#endif +#endif /* WOLFSSL_ARMASM */ } Poly1305; /* does init */ @@ -140,6 +150,15 @@ void poly1305_blocks_aarch64(Poly1305* ctx, const unsigned char *m, void poly1305_block_aarch64(Poly1305* ctx, const unsigned char *m); #endif +#if defined(WOLFSSL_RISCV_ASM) +#define poly1305_blocks poly1305_blocks_riscv64 +#define poly1305_block poly1305_block_riscv64 + +void poly1305_blocks_riscv64(Poly1305* ctx, const unsigned char *m, + size_t bytes); +void poly1305_block_riscv64(Poly1305* ctx, const unsigned char *m); +#endif + #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/wolfssl/wolfcrypt/port/maxim/maxq10xx.h b/wolfssl/wolfcrypt/port/maxim/maxq10xx.h index b50e029784..ecfc56c9c7 100644 --- a/wolfssl/wolfcrypt/port/maxim/maxq10xx.h +++ b/wolfssl/wolfcrypt/port/maxim/maxq10xx.h @@ -96,6 +96,7 @@ WOLFSSL_LOCAL void wc_MAXQ10XX_Sha256Copy(wc_Sha256* sha256); WOLFSSL_LOCAL void wc_MAXQ10XX_Sha256Free(wc_Sha256* sha256); WOLFSSL_LOCAL int wc_MAXQ10XX_EccSetKey(ecc_key* key, word32 keysize); WOLFSSL_LOCAL void wc_MAXQ10XX_EccFree(ecc_key* key); +WOLFSSL_LOCAL int maxq10xx_random(byte* output, unsigned short sz); #endif /* WOLFSSL_MAXQ10XX_CRYPTO */ #ifdef HAVE_PK_CALLBACKS diff --git a/wolfssl/wolfcrypt/port/riscv/riscv-64-asm.h b/wolfssl/wolfcrypt/port/riscv/riscv-64-asm.h index 7ca7291d46..023448d5c1 100644 --- a/wolfssl/wolfcrypt/port/riscv/riscv-64-asm.h +++ b/wolfssl/wolfcrypt/port/riscv/riscv-64-asm.h @@ -137,11 +137,24 @@ (0b0010011 << 0) | \ (rs << 15) | (rd << 7)) +/* Rotate right 32-bit register 5-bit value. */ #define RORIW(rd, rs, imm) \ ASM_WORD((0b0110000 << 25) | (0b101 << 12) | \ (0b0011011 << 0) | \ (imm << 20) | (rs << 15) | (rd << 7)) +/* Rotate right 64-bit register 7-bit value. */ +#define RORI(rd, rs, imm) \ + ASM_WORD((0b01100 << 27) | (0b101 << 12) | \ + (0b0010011 << 0) | \ + ((imm) << 20) | ((rs) << 15) | ((rd) << 7)) + +/* rs1 and not rs2 into rd. */ +#define ANDN(rd, rs1, rs2) \ + ASM_WORD((0b0100000 << 25) | (0b111 << 12) | \ + (0b0110011 << 0) | \ + ((rs2) << 20) | ((rs1) << 15) | ((rd) << 7)) + /* rd = rs1[0..31] | rs2[0..31]. */ #define PACK(rd, rs1, rs2) \ @@ -150,6 +163,15 @@ #endif /* WOLFSSL_RISCV_BASE_BIT_MANIPULATION */ +#ifdef WOLFSSL_RISCV_BIT_MANIPULATION_TERNARY + +/* rd = (rs1|rs3 >> imm)[0..63] */ +#define FSRI(rd, rs1, rs3, imm) \ + ASM_WORD((0b1 << 26) | (0b101 << 12) | (0b0110011 << 0) | \ + (rs3 << 27) | (imm << 20) | (rs1 << 15) | (rd << 7)) + +#endif + /* * Load and store */ @@ -159,6 +181,23 @@ /* 32-bit width when loading. */ #define WIDTH_32 0b110 + +#define VLSEG_V(vd, rs1, cnt, width) \ + ASM_WORD(0b0000111 | (width << 12) | (0b10101000 << 20) | \ + (0 << 28) | ((cnt - 1) << 29) | (vd << 7) | (rs1 << 15)) +/* Load 8 Vector registers' 64-bit element. */ +#define VLSEG8E64_V(vd, rs1) VLSEG_V(vd, rs1, 8, WIDTH_64) +/* Load 1 Vector register's 64-bit element. */ +#define VLSEG1E64_V(vd, rs1) VLSEG_V(vd, rs1, 1, WIDTH_64) + +#define VSSEG_V(vd, rs1, cnt, width) \ + ASM_WORD(0b0100111 | (width << 12) | (0b10101000 << 20) | \ + (0 << 28) | ((cnt - 1) << 29) | (vd << 7) | (rs1 << 15)) +/* Store 8 Vector registers' 64-bit element. */ +#define VSSEG8E64_V(vd, rs1) VSSEG_V(vd, rs1, 8, WIDTH_64) +/* Store 1 Vector register's 64-bit element. */ +#define VSSEG1E64_V(vd, rs1) VSSEG_V(vd, rs1, 1, WIDTH_64) + /* Load n Vector registers with width-bit components. */ #define VLRE_V(vd, rs1, cnt, width) \ ASM_WORD(0b0000111 | (width << 12) | (0b00101000 << 20) | \ @@ -216,11 +255,21 @@ * Logic */ +/* vd = vs2 << rs1 */ +#define VSLL_VX(vd, vs2, rs1) \ + ASM_WORD((0b100101 << 26) | (0b1 << 25) | \ + (0b100 << 12) | (0b1010111 << 0) | \ + (vd << 7) | (rs1 << 15) | (vs2 << 20)) /* vd = vs2 << uimm */ #define VSLL_VI(vd, vs2, uimm) \ ASM_WORD((0b100101 << 26) | (0b1 << 25) | \ (0b011 << 12) | (0b1010111 << 0) | \ (vd << 7) | (uimm << 15) | (vs2 << 20)) +/* vd = vs2 >> rs1 */ +#define VSRL_VX(vd, vs2, rs1) \ + ASM_WORD((0b101000 << 26) | (0b1 << 25) | \ + (0b100 << 12) | (0b1010111 << 0) | \ + (vd << 7) | (rs1 << 15) | (vs2 << 20)) /* vd = vs2 >> uimm */ #define VSRL_VI(vd, vs2, uimm) \ ASM_WORD((0b101000 << 26) | (0b1 << 25) | \ @@ -242,16 +291,30 @@ ASM_WORD((0b000000 << 26) | (0b1 << 25) | \ (0b000 << 12) | (0b1010111 << 0) | \ (vs2 << 20) | (vs1 << 15) | (vd << 7)) + /* vd = vs1 ^ vs2 */ #define VXOR_VV(vd, vs1, vs2) \ ASM_WORD((0b001011 << 26) | (0b1 << 25) | \ (0b000 << 12) | (0b1010111 << 0) | \ (vd << 7) | (vs1 << 15) | (vs2 << 20)) +/* vd = imm ^ vs2 */ +#define VXOR_VI(vd, vs2, imm) \ + ASM_WORD((0b001011 << 26) | (0b1 << 25) | \ + (0b011 << 12) | (0b1010111 << 0) | \ + (vd << 7) | (imm << 15) | (vs2 << 20)) +/* vd = ~vs */ +#define VNOT_V(vd, vs) VXOR_VI(vd, vs, 0b11111) + /* vd = vs1 & vs2 */ #define VAND_VV(vd, vs1, vs2) \ ASM_WORD((0b001001 << 26) | (0b1 << 25) | \ (0b000 << 12) | (0b1010111 << 0) | \ (vd << 7) | (vs1 << 15) | (vs2 << 20)) +/* vd = vs1 & rs2 */ +#define VAND_VX(vd, vs2, rs1) \ + ASM_WORD((0b001001 << 26) | (0b1 << 25) | \ + (0b100 << 12) | (0b1010111 << 0) | \ + (vd << 7) | (rs1 << 15) | (vs2 << 20)) /* vd = vs1 | vs2 */ #define VOR_VV(vd, vs1, vs2) \ ASM_WORD((0b001010 << 26) | (0b1 << 25) | \ @@ -259,6 +322,25 @@ (vd << 7) | (vs1 << 15) | (vs2 << 20)) +/* vd = LOW(vs1 * vs2) */ +#define VMUL_VV(vd, vs1, vs2) \ + ASM_WORD((0b100101 << 26) | (0b1 << 25) | \ + (0b010 << 12) | (0b1010111 << 0) | \ + (vs2 << 20) | (vs1 << 15) | (vd << 7)) +/* vd = HIGH(vs1 * vs2) - unsigned * unsigned */ +#define VMULHU_VV(vd, vs1, vs2) \ + ASM_WORD((0b100100 << 26) | (0b1 << 25) | \ + (0b010 << 12) | (0b1010111 << 0) | \ + (vs2 << 20) | (vs1 << 15) | (vd << 7)) + + +#define VMERGE_VVM(vd, vs2, vs1) \ + ASM_WORD((0b010111 << 26) | (0b0 << 25) | \ + (0b000 << 12) | (0b1010111 << 0) | \ + (vs2 << 20) | (vs1 << 15) | (vd << 7)) + + + /* * Permute */ @@ -327,12 +409,23 @@ (0b010 << 12) | (0b1010111 << 0) | \ (vs2 << 20) | (vd << 7)) -/* Reverse order of bytes in words of vector regsiter. */ +/* Rotate left bits of vector regsiter. */ +#define VROL_VX(vd, vs2, rs) \ + ASM_WORD((0b010101 << 26) | (0b1 << 25) | (0b100 << 12) | \ + (0b1010111 << 0) | \ + (vs2 << 20) | (rs << 15) | (vd << 7)) + +/* Rotate right bits of vector regsiter. */ #define VROR_VI(vd, imm, vs2) \ ASM_WORD((0b01010 << 27) | (0b1 << 25) | (0b011 << 12) | \ (0b1010111 << 0) | ((imm >> 5) << 26) | \ (vs2 << 20) | ((imm & 0x1f) << 15) | (vd << 7)) +/* Vector ANDN - vd = ~vs1 & vs2. */ +#define VANDN_VV(vd, vs1, vs2) \ + ASM_WORD((0b000001 << 26) | (0b1 << 25) | (0b000 << 12) | \ + (0b1010111 << 0) | \ + (vs2 << 20) | (vs1 << 15) | (vd << 7)) #endif /* WOLFSSL_RISCV_VECTOR_BASE_BIT_MANIPULATION || * WOLFSSL_RISCV_VECTOR_CRYPTO_ASM */ diff --git a/wolfssl/wolfcrypt/rsa.h b/wolfssl/wolfcrypt/rsa.h index c944a4cbfa..5db1a23c2b 100644 --- a/wolfssl/wolfcrypt/rsa.h +++ b/wolfssl/wolfcrypt/rsa.h @@ -103,7 +103,7 @@ RSA keys can be used to encrypt, decrypt, sign and verify data. #endif #ifndef RSA_MIN_SIZE -#define RSA_MIN_SIZE 512 +#define RSA_MIN_SIZE 1024 #endif #ifndef RSA_MAX_SIZE diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index 25b961479b..2f27e6392b 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -55,7 +55,7 @@ /* This flag allows wolfSSL to include options.h instead of having client * projects do it themselves. This should *NEVER* be defined when building * wolfSSL as it can cause hard to debug problems. */ -#ifdef EXTERNAL_OPTS_OPENVPN +#if defined(EXTERNAL_OPTS_OPENVPN) || defined(WOLFSSL_USE_OPTIONS_H) #include #endif @@ -695,7 +695,6 @@ #define NO_DEV_RANDOM #define NO_FILESYSTEM #define TFM_TIMING_RESISTANT - #define NO_BIG_INT #endif #ifdef WOLFSSL_MICROCHIP_PIC32MZ @@ -3261,6 +3260,11 @@ extern void uITRON4_free(void *p) ; #define KEEP_PEER_CERT #endif +#if defined(OPENSSL_ALL) && !defined(WOLFSSL_NO_COPY_CERT) + #undef WOLFSSL_COPY_CERT + #define WOLFSSL_COPY_CERT +#endif + /* * Keeps the "Finished" messages after a TLS handshake for use as the so-called * "tls-unique" channel binding. See comment in internal.h around clientFinished @@ -3277,8 +3281,8 @@ extern void uITRON4_free(void *p) ; #define WOLFSSL_NO_HASH_RAW #endif -/* XChacha not implemented with ARM assembly ChaCha */ -#if defined(WOLFSSL_ARMASM) +#if defined(HAVE_XCHACHA) && !defined(HAVE_CHACHA) + /* XChacha requires ChaCha */ #undef HAVE_XCHACHA #endif @@ -3519,8 +3523,6 @@ extern void uITRON4_free(void *p) ; #endif #if (defined(HAVE_LIBOQS) || \ - defined(WOLFSSL_WC_KYBER) || \ - defined(WOLFSSL_WC_DILITHIUM) || \ defined(HAVE_LIBXMSS) || \ defined(HAVE_LIBLMS) || \ defined(WOLFSSL_DUAL_ALG_CERTS)) && \ diff --git a/wolfssl/wolfcrypt/sha3.h b/wolfssl/wolfcrypt/sha3.h index 0931a95584..0120051508 100644 --- a/wolfssl/wolfcrypt/sha3.h +++ b/wolfssl/wolfcrypt/sha3.h @@ -220,8 +220,8 @@ WOLFSSL_LOCAL void sha3_block_bmi2(word64* s); WOLFSSL_LOCAL void sha3_block_avx2(word64* s); WOLFSSL_LOCAL void BlockSha3(word64 *s); #endif -#if defined(WOLFSSL_ARMASM) && (defined(__arm__) || \ - defined(WOLFSSL_ARMASM_CRYPTO_SHA3)) +#if (defined(WOLFSSL_ARMASM) && (defined(__arm__) || \ + defined(WOLFSSL_ARMASM_CRYPTO_SHA3))) || defined(WOLFSSL_RISCV_ASM) WOLFSSL_LOCAL void BlockSha3(word64 *s); #endif diff --git a/wolfssl/wolfcrypt/sp_int.h b/wolfssl/wolfcrypt/sp_int.h index 26978acfe0..626af9e0b7 100644 --- a/wolfssl/wolfcrypt/sp_int.h +++ b/wolfssl/wolfcrypt/sp_int.h @@ -742,24 +742,18 @@ typedef struct sp_ecc_ctx { #define MP_LT (-1) /* ERROR VALUES */ + +/* MP_MEM, MP_VAL, MP_WOULDBLOCK, and MP_NOT_INF are defined in error-crypt.h */ + /** Error value on success. */ #define MP_OKAY 0 -/** Error value when dynamic memory allocation fails. */ -#define MP_MEM (-2) -/** Error value when value passed is not able to be used. */ -#define MP_VAL (-3) -/** Error value when non-blocking operation is returning after partial - * completion. - */ -#define FP_WOULDBLOCK (-4) -/* Unused error. Defined for backward compatibility. */ -#define MP_NOT_INF (-5) + +#define FP_WOULDBLOCK MP_WOULDBLOCK /* Unused error. Defined for backward compatibility. */ #define MP_RANGE MP_NOT_INF - #ifdef USE_FAST_MATH /* For old FIPS, need FP_MEM defined for old implementation. */ -#define FP_MEM (-2) +#define FP_MEM MP_MEM #endif /* Number of bits in each word/digit. */ diff --git a/wolfssl/wolfcrypt/tfm.h b/wolfssl/wolfcrypt/tfm.h index 7d29b1f67e..ecb01ae973 100644 --- a/wolfssl/wolfcrypt/tfm.h +++ b/wolfssl/wolfcrypt/tfm.h @@ -40,6 +40,7 @@ #define WOLF_CRYPT_TFM_H #include +#include #ifndef CHAR_BIT #include #endif @@ -305,10 +306,10 @@ /* return codes */ #define FP_OKAY 0 -#define FP_VAL (-1) -#define FP_MEM (-2) -#define FP_NOT_INF (-3) -#define FP_WOULDBLOCK (-4) +#define FP_VAL MP_VAL +#define FP_MEM MP_MEM +#define FP_NOT_INF MP_NOT_INF +#define FP_WOULDBLOCK MP_WOULDBLOCK /* equalities */ #define FP_LT (-1) /* less than */ @@ -776,10 +777,7 @@ int fp_sqr_comba64(fp_int *a, fp_int *b); #define MP_LT FP_LT /* less than */ #define MP_EQ FP_EQ /* equal to */ #define MP_GT FP_GT /* greater than */ -#define MP_VAL FP_VAL /* invalid */ -#define MP_MEM FP_MEM /* memory error */ -#define MP_NOT_INF FP_NOT_INF /* point not at infinity */ -#define MP_RANGE FP_NOT_INF +#define MP_RANGE MP_NOT_INF #define MP_OKAY FP_OKAY /* ok result */ #define MP_NO FP_NO /* yes/no result */ #define MP_YES FP_YES /* yes/no result */ diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h index 5292168116..4696b065b6 100644 --- a/wolfssl/wolfcrypt/types.h +++ b/wolfssl/wolfcrypt/types.h @@ -420,10 +420,13 @@ typedef struct w64wrapper { #define FALL_THROUGH #endif - /* Micrium will use Visual Studio for compilation but not the Win32 API */ + /* For platforms where the target OS is not Windows, but compilation is + * done on Windows/Visual Studio, enable a way to disable USE_WINDOWS_API. + * Examples: Micrium, TenAsus INtime, uTasker, FreeRTOS simulator */ #if defined(_WIN32) && !defined(MICRIUM) && !defined(FREERTOS) && \ !defined(FREERTOS_TCP) && !defined(EBSNET) && \ - !defined(WOLFSSL_UTASKER) && !defined(INTIME_RTOS) + !defined(WOLFSSL_UTASKER) && !defined(INTIME_RTOS) && \ + !defined(WOLFSSL_NOT_WINDOWS_API) #define USE_WINDOWS_API #endif @@ -437,7 +440,13 @@ typedef struct w64wrapper { /* idea to add global alloc override by Moises Guimaraes */ /* default to libc stuff */ /* XREALLOC is used once in normal math lib, not in fast math lib */ - /* XFREE on some embedded systems doesn't like free(0) so test */ + /* XFREE on some embedded systems doesn't like free(0) so test for NULL + * explicitly. + * + * For example: + * #define XFREE(p, h, t) \ + * {void* xp = (p); if (xp != NULL) free(xp, h, t);} + */ #if defined(HAVE_IO_POOL) WOLFSSL_API void* XMALLOC(size_t n, void* heap, int type); WOLFSSL_API void* XREALLOC(void *p, size_t n, void* heap, int type); @@ -506,7 +515,9 @@ typedef struct w64wrapper { #ifdef WOLFSSL_NO_MALLOC /* this platform does not support heap use */ #ifdef WOLFSSL_MALLOC_CHECK + #ifndef NO_STDIO_FILESYSTEM #include + #endif static inline void* malloc_check(size_t sz) { fprintf(stderr, "wolfSSL_malloc failed"); return NULL; @@ -711,10 +722,10 @@ typedef struct w64wrapper { #include #endif - #define XMEMCPY(d,s,l) memcpy((d),(s),(l)) - #define XMEMSET(b,c,l) memset((b),(c),(l)) - #define XMEMCMP(s1,s2,n) memcmp((s1),(s2),(n)) - #define XMEMMOVE(d,s,l) memmove((d),(s),(l)) + #define XMEMCPY(d,s,l) memcpy((d),(s),(l)) + #define XMEMSET(b,c,l) memset((b),(c),(l)) + #define XMEMCMP(s1,s2,n) memcmp((s1),(s2),(n)) + #define XMEMMOVE(d,s,l) memmove((d),(s),(l)) #define XSTRLEN(s1) strlen((s1)) #define XSTRNCPY(s1,s2,n) strncpy((s1),(s2),(n)) @@ -740,7 +751,6 @@ typedef struct w64wrapper { defined(WOLFSSL_ZEPHYR) || defined(MICROCHIP_PIC24) /* XC32 version < 1.0 does not support strcasecmp. */ #define USE_WOLF_STRCASECMP - #define XSTRCASECMP(s1,s2) wc_strcasecmp(s1,s2) #elif defined(USE_WINDOWS_API) || defined(FREERTOS_TCP_WINSIM) #define XSTRCASECMP(s1,s2) _stricmp((s1),(s2)) #else @@ -753,13 +763,16 @@ typedef struct w64wrapper { #elif defined(WOLFSSL_CMSIS_RTOSv2) || defined(WOLFSSL_AZSPHERE) \ || defined(WOLF_C89) #define USE_WOLF_STRCASECMP - #define XSTRCASECMP(s1,s2) wc_strcasecmp(s1, s2) #elif defined(WOLF_C89) #define XSTRCASECMP(s1,s2) strcmp((s1),(s2)) #else #define XSTRCASECMP(s1,s2) strcasecmp((s1),(s2)) #endif #endif + #ifdef USE_WOLF_STRCASECMP + #undef XSTRCASECMP + #define XSTRCASECMP(s1,s2) wc_strcasecmp((s1), (s2)) + #endif #endif /* !XSTRCASECMP */ #ifndef XSTRNCASECMP @@ -770,7 +783,6 @@ typedef struct w64wrapper { defined(WOLFSSL_ZEPHYR) || defined(MICROCHIP_PIC24) /* XC32 version < 1.0 does not support strncasecmp. */ #define USE_WOLF_STRNCASECMP - #define XSTRNCASECMP(s1,s2,n) wc_strncasecmp((s1),(s2),(n)) #elif defined(USE_WINDOWS_API) || defined(FREERTOS_TCP_WINSIM) #define XSTRNCASECMP(s1,s2,n) _strnicmp((s1),(s2),(n)) #else @@ -783,13 +795,16 @@ typedef struct w64wrapper { #elif defined(WOLFSSL_CMSIS_RTOSv2) || defined(WOLFSSL_AZSPHERE) \ || defined(WOLF_C89) #define USE_WOLF_STRNCASECMP - #define XSTRNCASECMP(s1,s2,n) wc_strncasecmp(s1, s2 ,n) #elif defined(WOLF_C89) #define XSTRNCASECMP(s1,s2,n) strncmp((s1),(s2),(n)) #else #define XSTRNCASECMP(s1,s2,n) strncasecmp((s1),(s2),(n)) #endif #endif + #ifdef USE_WOLF_STRNCASECMP + #undef XSTRNCASECMP + #define XSTRNCASECMP(s1,s2,n) wc_strncasecmp((s1),(s2),(n)) + #endif #endif /* !XSTRNCASECMP */ /* snprintf is used in asn.c for GetTimeString, PKCS7 test, and when @@ -829,12 +844,16 @@ typedef struct w64wrapper { have stdio.h available, so it needs its own section. */ #define XSNPRINTF snprintf #elif defined(WOLF_C89) + #ifndef NO_STDIO_FILESYSTEM #include + #endif #define XSPRINTF sprintf /* snprintf not available for C89, so remap using macro */ #define XSNPRINTF(f, len, ...) sprintf(f, __VA_ARGS__) #else + #ifndef NO_STDIO_FILESYSTEM #include + #endif #define XSNPRINTF snprintf #endif #else diff --git a/wolfssl/wolfcrypt/wc_kyber.h b/wolfssl/wolfcrypt/wc_kyber.h index 5491285739..34b3d64ed9 100644 --- a/wolfssl/wolfcrypt/wc_kyber.h +++ b/wolfssl/wolfcrypt/wc_kyber.h @@ -103,6 +103,9 @@ enum { +/* The data type of the hash function. */ +#define KYBER_HASH_T wc_Sha3 + /* The data type of the pseudo-random function. */ #define KYBER_PRF_T wc_Shake @@ -119,6 +122,8 @@ struct KyberKey { /* Flags indicating what is stored in the key. */ int flags; + /* A pseudo-random function object. */ + KYBER_HASH_T hash; /* A pseudo-random function object. */ KYBER_PRF_T prf; @@ -162,6 +167,18 @@ int kyber_get_noise(KYBER_PRF_T* prf, int kp, sword16* vec1, sword16* vec2, WOLFSSL_LOCAL int kyber_kdf(byte* seed, int seedLen, byte* out, int outLen); #endif +WOLFSSL_LOCAL +void kyber_hash_init(KYBER_HASH_T* hash); +WOLFSSL_LOCAL +int kyber_hash_new(KYBER_HASH_T* hash, void* heap, int devId); +WOLFSSL_LOCAL +void kyber_hash_free(KYBER_HASH_T* hash); +WOLFSSL_LOCAL +int kyber_hash256(wc_Sha3* hash, const byte* data, word32 dataLen, byte* out); +WOLFSSL_LOCAL +int kyber_hash512(wc_Sha3* hash, const byte* data1, word32 data1Len, + const byte* data2, word32 data2Len, byte* out); + WOLFSSL_LOCAL void kyber_prf_init(KYBER_PRF_T* prf); WOLFSSL_LOCAL diff --git a/wolfssl/wolfcrypt/wc_port.h b/wolfssl/wolfcrypt/wc_port.h index 9824d19f3c..d07dbb1b34 100644 --- a/wolfssl/wolfcrypt/wc_port.h +++ b/wolfssl/wolfcrypt/wc_port.h @@ -1264,7 +1264,11 @@ WOLFSSL_ABI WOLFSSL_API int wolfCrypt_Cleanup(void); #endif #ifndef WOLFSSL_NO_FENCE - #if defined (__i386__) || defined(__x86_64__) + #ifdef XFENCE + /* use user-supplied XFENCE definition. */ + #elif defined(__GNUC__) && (__GNUC__ >= 4) + #define XFENCE() __sync_synchronize() + #elif defined (__i386__) || defined(__x86_64__) #define XFENCE() XASM_VOLATILE("lfence") #elif (defined (__arm__) && (__ARM_ARCH > 6)) || defined(__aarch64__) #define XFENCE() XASM_VOLATILE("isb") @@ -1273,10 +1277,10 @@ WOLFSSL_ABI WOLFSSL_API int wolfCrypt_Cleanup(void); #elif defined(__PPC__) #define XFENCE() XASM_VOLATILE("isync; sync") #else - #define XFENCE() do{}while(0) + #define XFENCE() WC_DO_NOTHING #endif #else - #define XFENCE() do{}while(0) + #define XFENCE() WC_DO_NOTHING #endif diff --git a/wolfssl/wolfio.h b/wolfssl/wolfio.h index 5fdeac4bb5..5195208a65 100644 --- a/wolfssl/wolfio.h +++ b/wolfssl/wolfio.h @@ -520,9 +520,14 @@ WOLFSSL_API int wolfIO_RecvFrom(SOCKET_T sd, WOLFSSL_BIO_ADDR *addr, char *buf, #endif #endif /* WOLFSSL_NO_SOCK */ - +/* Preseve API previously exposed */ WOLFSSL_API int BioSend(WOLFSSL* ssl, char *buf, int sz, void *ctx); WOLFSSL_API int BioReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx); + +WOLFSSL_LOCAL int SslBioSend(WOLFSSL* ssl, char *buf, int sz, void *ctx); +WOLFSSL_LOCAL int BioReceiveInternal(WOLFSSL_BIO* biord, WOLFSSL_BIO* biowr, + char* buf, int sz); +WOLFSSL_LOCAL int SslBioReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx); #if defined(USE_WOLFSSL_IO) /* default IO callbacks */ WOLFSSL_API int EmbedReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx); @@ -545,9 +550,14 @@ WOLFSSL_API int BioReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx); #endif /* WOLFSSL_DTLS */ #endif /* USE_WOLFSSL_IO */ + +typedef int (*WolfSSLGenericIORecvCb)(char *buf, int sz, void *ctx); #ifdef HAVE_OCSP WOLFSSL_API int wolfIO_HttpBuildRequestOcsp(const char* domainName, const char* path, int ocspReqSz, unsigned char* buf, int bufSize); + WOLFSSL_API int wolfIO_HttpProcessResponseOcspGenericIO( + WolfSSLGenericIORecvCb ioCb, void* ioCbCtx, unsigned char** respBuf, + unsigned char* httpBuf, int httpBufSz, void* heap); WOLFSSL_API int wolfIO_HttpProcessResponseOcsp(int sfd, unsigned char** respBuf, unsigned char* httpBuf, int httpBufSz, void* heap); @@ -578,6 +588,10 @@ WOLFSSL_API int BioReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx); WOLFSSL_LOCAL int wolfIO_HttpBuildRequest_ex(const char* reqType, const char* domainName, const char* path, int pathLen, int reqSz, const char* contentType, const char *exHdrs, unsigned char* buf, int bufSize); + WOLFSSL_API int wolfIO_HttpProcessResponseGenericIO( + WolfSSLGenericIORecvCb ioCb, void* ioCbCtx, const char** appStrList, + unsigned char** respBuf, unsigned char* httpBuf, int httpBufSz, + int dynType, void* heap); WOLFSSL_API int wolfIO_HttpProcessResponse(int sfd, const char** appStrList, unsigned char** respBuf, unsigned char* httpBuf, int httpBufSz, int dynType, void* heap); @@ -604,7 +618,6 @@ WOLFSSL_API void* wolfSSL_GetIOWriteCtx(WOLFSSL* ssl); WOLFSSL_API void wolfSSL_SetIOReadFlags( WOLFSSL* ssl, int flags); WOLFSSL_API void wolfSSL_SetIOWriteFlags(WOLFSSL* ssl, int flags); - #ifdef HAVE_NETX WOLFSSL_LOCAL int NetX_Receive(WOLFSSL *ssl, char *buf, int sz, void *ctx); WOLFSSL_LOCAL int NetX_Send(WOLFSSL *ssl, char *buf, int sz, void *ctx); diff --git a/wrapper/Ada/README.md b/wrapper/Ada/README.md index 76f4b8e8bd..d0cb2da284 100644 --- a/wrapper/Ada/README.md +++ b/wrapper/Ada/README.md @@ -28,7 +28,9 @@ Not only can the WolfSSL Ada binding be used in Ada applications but also SPARK applications (a subset of the Ada language suitable formal verification). To formally verify the Ada code in this repository open the client.gpr with GNAT Studio and then select -SPARK -> Prove All Sources and use Proof Level 2. +SPARK -> Prove All Sources and use Proof Level 2. Or when using the command +line, use `gnatprove -Pclient.gpr --level=4 -j12` (`-j12` is there in +order to instruct the prover to use 12 CPUs if available). ``` Summary of SPARK analysis @@ -53,19 +55,31 @@ Total 172 17 (10%) . 1 ## Compiler and Build System installation -### GNAT Community Edition 2021 -Download and install the GNAT community Edition 2021 compiler and studio: -https://www.adacore.com/download +### Recommended: [Alire](https://alire.ada.dev) +[Alire](https://alire.ada.dev) is a modern package manager for the Ada +ecosystem. The latest version is available for Windows, OSX, Linux and FreeBSD +systems. It can install a complete Ada toolchain if needed, see `alr install` +for more information. -Linux Install: +In order to use WolfSSL in a project, just add WolfSSL as a dependency by +running `alr with wolfssl` within your project's directory. -```sh -chmod +x gnat-2021-20210519-x86_64-linux-bin -./gnat-2021-20210519-x86_64-linux-bin -``` +If the project is to be verified with SPARK, just add `gnatprove` as a +dependency by running `alr with gnatprove` and then running `alr gnatprove`, +which will execute the SPARK solver. If you get warnings, it is recommended to +increase the prove level: `alr gnatprove --level=4`. + +### GNAT FSF Compiler and GPRBuild manual installation +In May 2022 AdaCore announced the end of the GNAT Community releases. +Pre-built binaries for the GNAT FSF compiler and GPRBuild can be +downloaded and manually installed from here: +https://github.com/alire-project/GNAT-FSF-builds/releases +Make sure the executables for the compiler and GPRBuild are on the PATH +and use gprbuild to build the source code. + +#### Manual build of the project ```sh -export PATH="/opt/GNAT/2021/bin:$PATH" cd wrapper/Ada gprclean gprbuild default.gpr @@ -82,15 +96,6 @@ gprbuild -XOS=Windows default.gpr gprbuild -XOS=Windows client.gpr ``` - -### GNAT FSF Compiler and GPRBuild manual installation -In May 2022 AdaCore announced the end of the GNAT Community releases. -Pre-built binaries for the GNAT FSF compiler and GPRBuild can be -downloaded and manually installed from here: -https://github.com/alire-project/GNAT-FSF-builds/releases -Make sure the executables for the compiler and GPRBuild are on the PATH -and use gprbuild to build the source code. - ## Files The (D)TLS v1.3 client example in the Ada/SPARK programming language using the WolfSSL library can be found in the files: @@ -103,15 +108,3 @@ using the WolfSSL library can be found in the files: tls_server_main.adb tls_server.ads tls_server.adb - -A feature of the Ada language that is not part of SPARK is exceptions. -Some packages of the Ada standard library and GNAT specific packages -provided by the GNAT compiler can therefore not be used directly but -need to be put into wrapper packages that does not raise exceptions. -The packages that provide access to sockets and command line arguments -to applications implemented in the SPARK programming language can be -found in the files: -spark_sockets.ads -spark_sockets.adb -spark_terminal.ads -spark_terminal.adb diff --git a/wrapper/Ada/ada_binding.c b/wrapper/Ada/ada_binding.c index a1b762846b..72fd8b475b 100644 --- a/wrapper/Ada/ada_binding.c +++ b/wrapper/Ada/ada_binding.c @@ -19,6 +19,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ +#ifdef HAVE_CONFIG_H + #include +#endif + /* wolfSSL */ #include #include diff --git a/wrapper/Ada/alire.toml b/wrapper/Ada/alire.toml new file mode 100644 index 0000000000..7a963a78ac --- /dev/null +++ b/wrapper/Ada/alire.toml @@ -0,0 +1,11 @@ +name = "wolfssl" +description = "WolfSSL encryption library and its Ada bindings" +version = "5.7.0" + +authors = ["Fernando Oleo Blanco"] +maintainers = ["Fernando Oleo Blanco "] +maintainers-logins = ["Irvise"] +licenses = "GPL-2.0-only" +website = "https://www.wolfssl.com/" +project-files = ["wolfssl.gpr"] +tags = ["ssl", "tls", "embedded", "spark"] diff --git a/wrapper/Ada/user_settings.h b/wrapper/Ada/user_settings.h index 6218b2c241..b6559a8c94 100644 --- a/wrapper/Ada/user_settings.h +++ b/wrapper/Ada/user_settings.h @@ -37,6 +37,9 @@ extern "C" { /* Usually comes from configure -> config.h */ #define HAVE_SYS_TIME_H +/* Explicitly define NETDB support */ +#define HAVE_NETDB_H + /* Features */ #define SINGLE_THREADED #define WOLFSSL_IGNORE_FILE_WARN /* Ignore *.c include warnings */ diff --git a/wrapper/Ada/wolfssl.gpr b/wrapper/Ada/wolfssl.gpr new file mode 100644 index 0000000000..65d8cce6f8 --- /dev/null +++ b/wrapper/Ada/wolfssl.gpr @@ -0,0 +1,96 @@ +library project WolfSSL is + + for Library_Name use "wolfssl"; + -- for Library_Version use Project'Library_Name & ".so"; + type OS_Kind is ("Windows", "Linux_Or_Mac"); + + OS : OS_Kind := external ("OS", "Linux_Or_Mac"); + + for Languages use ("C", "Ada"); + + for Source_Dirs use (".", + "../../", + "../../src", + "../../wolfcrypt/src"); + + -- Don't build the tls client or server application. + -- They are not needed in order to build the library. + for Excluded_Source_Files use ("tls_client_main.adb", + "tls_client.ads", + "tls_client.adb", + "tls_server_main.adb", + "tls_server.ads", + "tls_server.adb"); + + for Object_Dir use "obj"; + for Library_Dir use "lib"; + for Create_Missing_Dirs use "True"; + + type Library_Type_Type is ("relocatable", "static", "static-pic"); + Library_Type : Library_Type_Type := external("LIBRARY_TYPE", "static"); + for Library_Kind use Library_Type; + + package Naming is + for Spec_Suffix ("C") use ".h"; + end Naming; + + package Builder is + for Global_Configuration_Pragmas use "gnat.adc"; + end Builder; + + package Compiler is + for Switches ("C") use + ("-DWOLFSSL_USER_SETTINGS", -- Use the user_settings.h file. + "-Wno-pragmas", + "-Wall", + "-Wextra", + "-Wunknown-pragmas", + "--param=ssp-buffer-size=1", + "-Waddress", + "-Warray-bounds", + "-Wbad-function-cast", + "-Wchar-subscripts", + "-Wcomment", + "-Wfloat-equal", + "-Wformat-security", + "-Wformat=2", + "-Wmaybe-uninitialized", + "-Wmissing-field-initializers", + "-Wmissing-noreturn", + "-Wmissing-prototypes", + "-Wnested-externs", + "-Wnormalized=id", + "-Woverride-init", + "-Wpointer-arith", + "-Wpointer-sign", + "-Wshadow", + "-Wsign-compare", + "-Wstrict-overflow=1", + "-Wstrict-prototypes", + "-Wswitch-enum", + "-Wundef", + "-Wunused", + "-Wunused-result", + "-Wunused-variable", + "-Wwrite-strings", + "-fwrapv") & External_As_List ("CFLAGS", " "); + + for Switches ("Ada") use ("-g") & External_As_List ("ADAFLAGS", " "); + end Compiler; + + package Binder is + for Switches ("Ada") use ("-Es"); -- To include stack traces. + end Binder; + +-- case OS is +-- when "Windows" => +-- for Library_Options use ("-lm", -- To include the math library (used by WolfSSL). +-- "-lcrypt32"); -- Needed on Windows. +-- when "Linux_Or_Mac" => +-- for Library_Options use ("-lm"); -- To include the math library (used by WolfSSL). +-- end case; +-- +-- -- Put user options in front, for options like --as-needed. +-- for Leading_Library_Options use External_As_List ("LDFLAGS", " "); + +end WolfSSl;