diff --git a/.github/workflows/async.yml b/.github/workflows/async.yml index e1699c1c5..d2c4d0c84 100644 --- a/.github/workflows/async.yml +++ b/.github/workflows/async.yml @@ -36,7 +36,7 @@ jobs: ./configure ${{ matrix.config }} make check - - name: Print errors + - name: Print errors if: ${{ failure() }} run: | if [ -f test-suite.log ] ; then diff --git a/.github/workflows/disabled/haproxy.yml b/.github/workflows/disabled/haproxy.yml index 43e197fd5..1943a6269 100644 --- a/.github/workflows/disabled/haproxy.yml +++ b/.github/workflows/disabled/haproxy.yml @@ -57,4 +57,3 @@ jobs: - name: Test HaProxy working-directory: haproxy run: make reg-tests reg-tests/ssl VTEST_PROGRAM=$GITHUB_WORKSPACE/VTest/vtest - diff --git a/.github/workflows/disabled/hostap.yml b/.github/workflows/disabled/hostap.yml index aad37cad3..97a03ce32 100644 --- a/.github/workflows/disabled/hostap.yml +++ b/.github/workflows/disabled/hostap.yml @@ -181,7 +181,7 @@ jobs: - name: Checkout hostap uses: actions/checkout@v4 with: - repository: julek-wolfssl/hostap-mirror + repository: julek-wolfssl/hostap-mirror path: hostap ref: ${{ matrix.config.hostap_ref }} # necessary for cherry pick step @@ -210,7 +210,7 @@ jobs: done - if: ${{ matrix.hostapd }} - name: Setup hostapd config file + name: Setup hostapd config file run: | cp wolfssl/.github/workflows/hostap-files/configs/${{ matrix.config.hostap_ref }}/hostapd.config \ hostap/hostapd/.config @@ -220,7 +220,7 @@ jobs: EOF - if: ${{ matrix.wpa_supplicant }} - name: Setup wpa_supplicant config file + name: Setup wpa_supplicant config file run: | cp wolfssl/.github/workflows/hostap-files/configs/${{ matrix.config.hostap_ref }}/wpa_supplicant.config \ hostap/wpa_supplicant/.config diff --git a/.github/workflows/hitch.yml b/.github/workflows/hitch.yml index c11accd58..60ee38dba 100644 --- a/.github/workflows/hitch.yml +++ b/.github/workflows/hitch.yml @@ -105,4 +105,4 @@ jobs: working-directory: ./hitch run: | export LD_LIBRARY_PATH=$GITHUB_WORKSPACE/build-dir/lib:$LD_LIBRARY_PATH - make check \ No newline at end of file + make check diff --git a/.github/workflows/hostap-vm.yml b/.github/workflows/hostap-vm.yml index b24680dfe..22a073ce6 100644 --- a/.github/workflows/hostap-vm.yml +++ b/.github/workflows/hostap-vm.yml @@ -24,7 +24,7 @@ jobs: wolf_extra_config: --disable-tls13 - build_id: hostap-vm-build2 wolf_extra_config: >- - --enable-wpas-dpp --enable-brainpool --with-eccminsz=192 + --enable-wpas-dpp --enable-brainpool --with-eccminsz=192 --enable-tlsv10 --enable-oldtls name: Build wolfSSL runs-on: ubuntu-latest @@ -87,7 +87,7 @@ jobs: if: steps.cache.outputs.cache-hit != 'true' uses: actions/checkout@v4 with: - repository: torvalds/linux + repository: torvalds/linux path: linux - name: Compile linux @@ -199,7 +199,7 @@ jobs: - name: Checkout hostap uses: actions/checkout@v4 with: - repository: julek-wolfssl/hostap-mirror + repository: julek-wolfssl/hostap-mirror path: hostap ref: ${{ matrix.config.hostap_ref }} @@ -233,7 +233,7 @@ jobs: fi - if: ${{ matrix.hostapd }} - name: Setup hostapd config file + name: Setup hostapd config file run: | cp wolfssl/.github/workflows/hostap-files/configs/${{ matrix.config.hostap_ref }}/hostapd.config \ hostap/hostapd/.config @@ -243,7 +243,7 @@ jobs: EOF - if: ${{ matrix.wpa_supplicant }} - name: Setup wpa_supplicant config file + name: Setup wpa_supplicant config file run: | cp wolfssl/.github/workflows/hostap-files/configs/${{ matrix.config.hostap_ref }}/wpa_supplicant.config \ hostap/wpa_supplicant/.config diff --git a/.github/workflows/ipmitool.yml b/.github/workflows/ipmitool.yml index ef7d072e7..2fb6403d7 100644 --- a/.github/workflows/ipmitool.yml +++ b/.github/workflows/ipmitool.yml @@ -79,4 +79,3 @@ jobs: run: | ldd src/ipmitool | grep wolfssl ldd src/ipmievd | grep wolfssl - \ No newline at end of file diff --git a/.github/workflows/mosquitto.yml b/.github/workflows/mosquitto.yml index aa9693858..8ba047779 100644 --- a/.github/workflows/mosquitto.yml +++ b/.github/workflows/mosquitto.yml @@ -1,98 +1,98 @@ -name: mosquitto 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-mosquitto CFLAGS="-DALLOW_INVALID_CERTSIGN" - install: true - - - 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-mosquitto - path: build-dir.tgz - retention-days: 5 - - mosquitto_check: - strategy: - fail-fast: false - matrix: - ref: [ 2.0.18 ] - name: ${{ matrix.ref }} - runs-on: ubuntu-latest - # This should be a safe limit for the tests to run. - timeout-minutes: 4 - needs: build_wolfssl - steps: - - name: Download lib - uses: actions/download-artifact@v4 - with: - name: wolf-install-mosquitto - - - name: untar build-dir - run: tar -xf build-dir.tgz - - - name: Checkout OSP - uses: actions/checkout@v4 - with: - repository: wolfssl/osp - path: osp - - - name: Install dependencies - run: | - export DEBIAN_FRONTEND=noninteractive - sudo apt-get update - sudo apt-get install -y build-essential libev-dev libssl-dev automake python3-docutils libcunit1 libcunit1-doc libcunit1-dev pkg-config make - sudo pip install --upgrade psutil - - - name: Checkout mosquitto - uses: actions/checkout@v4 - with: - repository: eclipse/mosquitto - ref: v${{ matrix.ref }} - path: mosquitto - - - name: Configure and build mosquitto - run: | - cd $GITHUB_WORKSPACE/mosquitto/ - patch -p1 < $GITHUB_WORKSPACE/osp/mosquitto/${{ matrix.ref }}.patch - make WITH_TLS=wolfssl WITH_CJSON=no WITH_DOCS=no WOLFSSLDIR=$GITHUB_WORKSPACE/build-dir - - - name: Run mosquitto tests - working-directory: ./mosquitto - run: | - # Retry up to five times - for i in {1..5}; do - TEST_RES=0 - make WITH_TLS=wolfssl WITH_CJSON=no WITH_DOCS=no WOLFSSLDIR=$GITHUB_WORKSPACE/build-dir ptest || TEST_RES=$? - if [ "$TEST_RES" -eq "0" ]; then - break - fi - done - if [ "$TEST_RES" -ne "0" ]; then - exit $TEST_RES - fi +name: mosquitto 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-mosquitto CFLAGS="-DALLOW_INVALID_CERTSIGN" + install: true + + - 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-mosquitto + path: build-dir.tgz + retention-days: 5 + + mosquitto_check: + strategy: + fail-fast: false + matrix: + ref: [ 2.0.18 ] + name: ${{ matrix.ref }} + runs-on: ubuntu-latest + # This should be a safe limit for the tests to run. + timeout-minutes: 4 + needs: build_wolfssl + steps: + - name: Download lib + uses: actions/download-artifact@v4 + with: + name: wolf-install-mosquitto + + - name: untar build-dir + run: tar -xf build-dir.tgz + + - name: Checkout OSP + uses: actions/checkout@v4 + with: + repository: wolfssl/osp + path: osp + + - name: Install dependencies + run: | + export DEBIAN_FRONTEND=noninteractive + sudo apt-get update + sudo apt-get install -y build-essential libev-dev libssl-dev automake python3-docutils libcunit1 libcunit1-doc libcunit1-dev pkg-config make + sudo pip install --upgrade psutil + + - name: Checkout mosquitto + uses: actions/checkout@v4 + with: + repository: eclipse/mosquitto + ref: v${{ matrix.ref }} + path: mosquitto + + - name: Configure and build mosquitto + run: | + cd $GITHUB_WORKSPACE/mosquitto/ + patch -p1 < $GITHUB_WORKSPACE/osp/mosquitto/${{ matrix.ref }}.patch + make WITH_TLS=wolfssl WITH_CJSON=no WITH_DOCS=no WOLFSSLDIR=$GITHUB_WORKSPACE/build-dir + + - name: Run mosquitto tests + working-directory: ./mosquitto + run: | + # Retry up to five times + for i in {1..5}; do + TEST_RES=0 + make WITH_TLS=wolfssl WITH_CJSON=no WITH_DOCS=no WOLFSSLDIR=$GITHUB_WORKSPACE/build-dir ptest || TEST_RES=$? + if [ "$TEST_RES" -eq "0" ]; then + break + fi + done + if [ "$TEST_RES" -ne "0" ]; then + exit $TEST_RES + fi diff --git a/.github/workflows/multi-arch.yml b/.github/workflows/multi-arch.yml index f296464f9..c8f227019 100644 --- a/.github/workflows/multi-arch.yml +++ b/.github/workflows/multi-arch.yml @@ -51,7 +51,7 @@ jobs: CFLAGS: ${{ matrix.CFLAGS }} QEMU_LD_PREFIX: /usr/${{ matrix.HOST }} run: ./autogen.sh && ./configure --host=${{ matrix.HOST }} --enable-all --disable-examples ${{ matrix.EXTRA_OPTS }} && make - - name: Print errors + - name: Print errors if: ${{ failure() }} run: | if [ -f config.log ] ; then diff --git a/.github/workflows/net-snmp.yml b/.github/workflows/net-snmp.yml index e175f487b..709b59f5e 100644 --- a/.github/workflows/net-snmp.yml +++ b/.github/workflows/net-snmp.yml @@ -58,7 +58,7 @@ jobs: - name: untar build-dir run: tar -xf build-dir.tgz - + - name: Checkout OSP uses: actions/checkout@v4 with: diff --git a/.github/workflows/nginx.yml b/.github/workflows/nginx.yml index 6622e0d2a..0d4f1448e 100644 --- a/.github/workflows/nginx.yml +++ b/.github/workflows/nginx.yml @@ -96,7 +96,7 @@ jobs: stream_ssl_preread.t stream_ssl_realip.t stream_ssl_session_reuse.t stream_ssl.t stream_ssl_variables.t stream_ssl_verify_client.t stream_upstream_zone_ssl.t upstream_zone_ssl.t uwsgi_ssl_certificate.t uwsgi_ssl_certificate_vars.t - uwsgi_ssl.t uwsgi_ssl_verify.t + uwsgi_ssl.t uwsgi_ssl_verify.t # Following tests do not pass with sanitizer on (with OpenSSL too) sanitize-not-ok: >- grpc_ssl.t h2_proxy_request_buffering_ssl.t h2_proxy_ssl.t @@ -221,4 +221,4 @@ jobs: LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GITHUB_WORKSPACE/build-dir/lib \ TMPDIR=$GITHUB_WORKSPACE TEST_NGINX_BINARY=../nginx/objs/nginx \ prove ${{ matrix.sanitize-ok }} - + diff --git a/.github/workflows/no-malloc.yml b/.github/workflows/no-malloc.yml index 88e5eedd7..db9a09d19 100644 --- a/.github/workflows/no-malloc.yml +++ b/.github/workflows/no-malloc.yml @@ -35,7 +35,7 @@ jobs: make ./wolfcrypt/test/testwolfcrypt - - name: Print errors + - name: Print errors if: ${{ failure() }} run: | if [ -f test-suite.log ] ; then diff --git a/.github/workflows/ntp.yml b/.github/workflows/ntp.yml index f4f06bef1..fcc084324 100644 --- a/.github/workflows/ntp.yml +++ b/.github/workflows/ntp.yml @@ -89,4 +89,3 @@ jobs: ./configure --with-wolfssl=$GITHUB_WORKSPACE/build-dir make -j make -j check - \ No newline at end of file diff --git a/.github/workflows/openssh.yml b/.github/workflows/openssh.yml index 456ca842c..d54cec184 100644 --- a/.github/workflows/openssh.yml +++ b/.github/workflows/openssh.yml @@ -74,7 +74,7 @@ jobs: configure: --with-wolfssl=$GITHUB_WORKSPACE/build-dir --with-rpath=-Wl,-rpath= check: false - # make tests take >20 minutes. Consider limiting? + # make tests take >20 minutes. Consider limiting? - name: Run tests working-directory: ./openssh run: | diff --git a/.github/workflows/os-check.yml b/.github/workflows/os-check.yml index fcad81210..8b337c1f0 100644 --- a/.github/workflows/os-check.yml +++ b/.github/workflows/os-check.yml @@ -25,16 +25,19 @@ jobs: '--enable-all --enable-asn=original', '--enable-harden-tls', '--enable-tls13 --enable-session-ticket --enable-dtls --enable-dtls13 - --enable-opensslextra --enable-sessioncerts - CPPFLAGS=''-DWOLFSSL_DTLS_NO_HVR_ON_RESUME -DHAVE_EXT_CACHE + --enable-opensslextra --enable-sessioncerts + CPPFLAGS=''-DWOLFSSL_DTLS_NO_HVR_ON_RESUME -DHAVE_EXT_CACHE -DWOLFSSL_TICKET_HAVE_ID -DHAVE_EX_DATA -DSESSION_CACHE_DYNAMIC_MEM'' ', '--enable-all --enable-secure-renegotiation', '--enable-all --enable-haproxy --enable-quic', - '--enable-dtls --enable-dtls13 --enable-earlydata - --enable-session-ticket --enable-psk + '--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', + '--enable-all --enable-dtls13 --enable-dtls-frag-ch', + '--enable-dtls --enable-dtls13 --enable-dtls-frag-ch + --enable-dtls-mtu', ] name: make check runs-on: ${{ matrix.os }} diff --git a/.github/workflows/rng-tools.yml b/.github/workflows/rng-tools.yml index 47b7827e2..98a428007 100644 --- a/.github/workflows/rng-tools.yml +++ b/.github/workflows/rng-tools.yml @@ -64,7 +64,7 @@ jobs: - name: untar build-dir run: tar -xf build-dir.tgz - + - name: Checkout OSP uses: actions/checkout@v4 with: diff --git a/.github/workflows/sssd.yml b/.github/workflows/sssd.yml index 685c8d078..31011e187 100644 --- a/.github/workflows/sssd.yml +++ b/.github/workflows/sssd.yml @@ -91,7 +91,7 @@ jobs: path: sssd patch-file: $GITHUB_WORKSPACE/osp/sssd/${{ matrix.ref }}.patch configure: >- - --without-samba --without-nfsv4-idmapd-plugin --with-oidc-child=no + --without-samba --without-nfsv4-idmapd-plugin --with-oidc-child=no --without-manpages WOLFSSL_INSTALL_DIR=$GITHUB_WORKSPACE/build-dir check: true diff --git a/.github/workflows/stunnel.yml b/.github/workflows/stunnel.yml index 7b7b09452..fdb6623f4 100644 --- a/.github/workflows/stunnel.yml +++ b/.github/workflows/stunnel.yml @@ -56,7 +56,7 @@ jobs: - name: untar build-dir run: tar -xf build-dir.tgz - + - name: Checkout OSP uses: actions/checkout@v4 with: diff --git a/ChangeLog.md b/ChangeLog.md index 431851ad7..bee6e614e 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -874,9 +874,9 @@ Release 5.5.1 of wolfSSL embedded TLS has bug fixes and new features including: ## Enhancements * DTLSv1.3: Do HRR Cookie exchange by default -* Add wolfSSL_EVP_PKEY_new_CMAC_key to OpenSSL compatible API -* Update ide win10 build files to add missing sp source files -* Improve Workbench docs +* Add wolfSSL_EVP_PKEY_new_CMAC_key to OpenSSL compatible API +* Update ide win10 build files to add missing sp source files +* Improve Workbench docs * Improve EVP support for CHACHA20_POLY1305 * Improve `wc_SetCustomExtension` documentation * RSA-PSS with OCSP and add simple OCSP response DER verify test case @@ -884,23 +884,23 @@ Release 5.5.1 of wolfSSL embedded TLS has bug fixes and new features including: * Don't over-allocate memory for DTLS fragments * Add WOLFSSL_ATECC_TFLXTLS for Atmel port * SHA-3 performance improvements with x86_64 assembly -* Add code to fallback to S/W if TSIP cannot handle +* Add code to fallback to S/W if TSIP cannot handle * Improves entropy with VxWorks * Make time in milliseconds 64-bits for longer session ticket lives * Support for setting cipher list with bytes * wolfSSL_set1_curves_list(), wolfSSL_CTX_set1_curves_list() improvements * Add to RSAES-OAEP key parsing for pkcs7 * Add missing DN nid to work with PrintName() -* SP int: default to 16 bit word size when NO_64BIT defined +* SP int: default to 16 bit word size when NO_64BIT defined * Limit the amount of fragments we store per a DTLS connection and error out when max limit is reached * Detect when certificate's RSA public key size is too big and fail on loading of certificate ## Fixes * Fix for async with OCSP non-blocking in `ProcessPeerCerts` * Fixes for building with 32-bit and socket size sign/unsigned mismatch -* Fix Windows CMakeList compiler options -* TLS 1.3 Middle-Box compat: fix missing brace -* Configuration consistency fixes for RSA keys and way to force disable of private keys +* Fix Windows CMakeList compiler options +* TLS 1.3 Middle-Box compat: fix missing brace +* Configuration consistency fixes for RSA keys and way to force disable of private keys * Fix for Aarch64 Mac M1 SP use * Fix build errors and warnings for MSVC with DTLS 1.3 * Fix HMAC compat layer function for SHA-1 @@ -908,9 +908,9 @@ Release 5.5.1 of wolfSSL embedded TLS has bug fixes and new features including: * Check return from call to wc_Time * SP math: fix build configuration with opensslall * Fix for async session tickets -* SP int mp_init_size fixes when SP_WORD_SIZE == 8 +* SP int mp_init_size fixes when SP_WORD_SIZE == 8 * Ed. function to make public key now checks for if the private key flag is set -* Fix HashRaw WC_SHA256_DIGEST_SIZE for wc_Sha256GetHash +* Fix HashRaw WC_SHA256_DIGEST_SIZE for wc_Sha256GetHash * Fix for building with PSK only * Set correct types in wolfSSL_sk_*_new functions * Sanity check that size passed to mp_init_size() is no more than SP_INT_DIGITS @@ -1024,7 +1024,7 @@ CVE-2020-12966 https://www.amd.com/en/corporate/product-security/bulletin/amd-sb * Update SP math all to not use sp_int_word when SQR_MUL_ASM is available ### SP Math Fixes * Fixes for constant time with div function -* Fix casting warnings for Windows builds and assembly changes to support XMM6-15 being non-volatile +* Fix casting warnings for Windows builds and assembly changes to support XMM6-15 being non-volatile * Fix for div_word when not using div function * Fixes for user settings with SP ASM and ED/Curve25519 small * Additional Wycheproof tests ran and fixes @@ -1204,7 +1204,7 @@ Release 5.3.0 of wolfSSL embedded TLS has bug fixes and new features including: ### Math Library Fixes * Sanity check with SP math that ECC points ordinates are not greater than modulus length * Additional sanity checks that _sp_add_d does not error due to overflow -* Wycheproof fixes, testing integration, and fixes for AVX / AArch64 ASM edge case tests +* Wycheproof fixes, testing integration, and fixes for AVX / AArch64 ASM edge case tests * TFM fp_div_2_ct rework to avoid potential overflow ### Misc. @@ -1445,7 +1445,7 @@ Release 5.1.0 of wolfSSL embedded TLS has bug fixes and new features including: ###### PORT Fixes * Building with Android wpa_supplicant and KeyStore * Setting initial value of CA certificate with TSIP enabled -* Cryptocell ECC build fix and fix with RSA disabled +* Cryptocell ECC build fix and fix with RSA disabled * IoT-SAFE improvement for Key/File slot ID size, fix for C++ compile, and fixes for retrieving the public key after key generation ###### Math Library Fixes @@ -1584,7 +1584,7 @@ Release 5.0.0 of wolfSSL embedded TLS has bug fixes and new features including: - SSL_SESSION_has_ticket() - SSL_SESSION_get_ticket_lifetime_hint() - DIST_POINT_new - - DIST_POINT_free + - DIST_POINT_free - DIST_POINTS_free - CRL_DIST_POINTS_free - sk_DIST_POINT_push @@ -1747,7 +1747,7 @@ Release 4.8.0 of wolfSSL embedded TLS has bug fixes and new features including: ### Vulnerabilities * [Low] CVE-2021-37155: OCSP request/response verification issue. In the case that the serial number in the OCSP request differs from the serial number in the OCSP response the error from the comparison was not resulting in a failed verification. We recommend users that have wolfSSL version 4.6.0 and 4.7.0 with OCSP enabled update their version of wolfSSL. Version 4.5.0 and earlier are not affected by this report. Thanks to Rainer Mueller-Amersdorffer, Roee Yankelevsky, Barak Gutman, Hila Cohen and Shoshi Berko (from CYMOTIVE Technologies and CARIAD) for the report. -* [Low] CVE-2021-24116: Side-Channel cache look up vulnerability in base64 PEM decoding for versions of wolfSSL 4.5.0 and earlier. Versions 4.6.0 and up contain a fix and do not need to be updated for this report. If decoding a PEM format private key using version 4.5.0 and older of wolfSSL then we recommend updating the version of wolfSSL used. Thanks to Florian Sieck, Jan Wichelmann, Sebastian Berndt and Thomas Eisenbarth for the report. +* [Low] CVE-2021-24116: Side-Channel cache look up vulnerability in base64 PEM decoding for versions of wolfSSL 4.5.0 and earlier. Versions 4.6.0 and up contain a fix and do not need to be updated for this report. If decoding a PEM format private key using version 4.5.0 and older of wolfSSL then we recommend updating the version of wolfSSL used. Thanks to Florian Sieck, Jan Wichelmann, Sebastian Berndt and Thomas Eisenbarth for the report. ### New Feature Additions ###### New Product diff --git a/Docker/wolfCLU/README.md b/Docker/wolfCLU/README.md index 1fc7bc6de..2c271d556 100644 --- a/Docker/wolfCLU/README.md +++ b/Docker/wolfCLU/README.md @@ -1,6 +1,6 @@ This is a small container that has wolfCLU installed for quick access. To build your own run the following: ``` -docker build --pull --build-arg DUMMY=$(date +%s) -t wolfclu . +docker build --pull --build-arg DUMMY=$(date +%s) -t wolfclu . ``` To run the container, you can use: diff --git a/IDE/ARDUINO/README.md b/IDE/ARDUINO/README.md index 75c25a20a..f8b1ad60f 100644 --- a/IDE/ARDUINO/README.md +++ b/IDE/ARDUINO/README.md @@ -27,7 +27,7 @@ This option will allow wolfSSL to be installed directly using the native Arduino ## Manually Reformatting wolfSSL as a Compatible Arduino Library -Use [this](./wolfssl-arduino.sh) shell script that will re-organize the wolfSSL library to be +Use [this](./wolfssl-arduino.sh) shell script that will re-organize the wolfSSL library to be compatible with [Arduino Library Specification](https://arduino.github.io/arduino-cli/0.35/library-specification/) for projects that use Arduino IDE 1.5.0 or newer. @@ -55,8 +55,8 @@ from within the `wolfssl/IDE/ARDUINO` directory: 3. `./wolfssl-arduino.sh INSTALL /path/to/repository` (Used to update [arduino-wolfSSL](https://github.com/wolfSSL/arduino-wolfSSL)) - Creates an Arduino Library in `wolfSSL` directory - Copies that directory contents to the specified `/path/to/repository` - - Adds the [default](../../examples/configs/user_settings_arduino.h) as `user_settings.h`. - + - Adds the [default](../../examples/configs/user_settings_arduino.h) as `user_settings.h`. + 4. `./wolfssl-arduino.sh INSTALL /path/to/any/other/directory` - Creates an Arduino Library in `wolfSSL` directory - Copies that directory contents to the specified `/path/to/any/other/directory` diff --git a/IDE/ARDUINO/sketches/wolfssl_server/README.md b/IDE/ARDUINO/sketches/wolfssl_server/README.md index aee5c6630..a7073573b 100644 --- a/IDE/ARDUINO/sketches/wolfssl_server/README.md +++ b/IDE/ARDUINO/sketches/wolfssl_server/README.md @@ -13,7 +13,7 @@ Additional examples can be found on [wolfSSL/wolfssl-examples](https://github.co ## Connect with an Arduino Sketch -See the companion [Arduino Sketch Client](../wolfssl_client/wolfssl_client.ino). +See the companion [Arduino Sketch Client](../wolfssl_client/wolfssl_client.ino). ## Connect with Linux Client diff --git a/IDE/ARDUINO/wolfssl-arduino.sh b/IDE/ARDUINO/wolfssl-arduino.sh index 59fd238df..e8a175a9f 100755 --- a/IDE/ARDUINO/wolfssl-arduino.sh +++ b/IDE/ARDUINO/wolfssl-arduino.sh @@ -20,7 +20,7 @@ # Reminder there's typically no $USER for GitHub actions, but: # ROOT_DIR="/mnt/c/Users/$USER/Documents/Arduino/libraries" # -# The company name is "wolfSSL Inc."; There’s a space, no comma, and a period after "Inc." +# The company name is "wolfSSL Inc."; There's a space, no comma, and a period after "Inc." # The Arduino library name is "wolfssl" (all lower case) # The Arduino library directory name is "wolfssl" (all lower case) # The Arduino library include file is "wolfssl.h" (all lower case) diff --git a/IDE/AURIX/Cpu0_Main.c b/IDE/AURIX/Cpu0_Main.c index 687511c68..c1667202f 100644 --- a/IDE/AURIX/Cpu0_Main.c +++ b/IDE/AURIX/Cpu0_Main.c @@ -63,7 +63,7 @@ int fputc(int ch, FILE *f) if (ch == (int)'\n') { int chcr = (int)'\r'; count = 1; - IfxAsclin_Asc_write(&g_asc, &chcr, &count, TIME_INFINITE); + IfxAsclin_Asc_write(&g_asc, &chcr, &count, TIME_INFINITE); } count = 1; IfxAsclin_Asc_write(&g_asc, &ch, &count, TIME_INFINITE); diff --git a/IDE/AURIX/README.md b/IDE/AURIX/README.md index 11f884db3..fdcb171d5 100644 --- a/IDE/AURIX/README.md +++ b/IDE/AURIX/README.md @@ -9,7 +9,7 @@ Tested Platform: ## Running wolfCrypt on TriCore -1) Add the wolfSSL source and headers to `Libraries/wolfssl`. +1) Add the wolfSSL source and headers to `Libraries/wolfssl`. - Only the following folders are required: `src`, `wolfcrypt` and `wolfssl`. - See script to help with producing bundle here: https://github.com/wolfSSL/wolfssl/blob/master/scripts/makedistsmall.sh 2) Add `WOLFSSL_USER_SETTINGS` to the Preprocessing symbols list. C/C++ Build -> Settings -> TASKING C/C++ Compiler -> Preprocessing. diff --git a/IDE/CRYPTOCELL/main.c b/IDE/CRYPTOCELL/main.c index 8cd8a2028..c1ed8a0b1 100644 --- a/IDE/CRYPTOCELL/main.c +++ b/IDE/CRYPTOCELL/main.c @@ -18,8 +18,8 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA */ - - + + #include #include #include @@ -63,4 +63,3 @@ int main(void) return 0; } - diff --git a/IDE/ECLIPSE/SIFIVE/README.md b/IDE/ECLIPSE/SIFIVE/README.md index 030e14049..206793e9c 100644 --- a/IDE/ECLIPSE/SIFIVE/README.md +++ b/IDE/ECLIPSE/SIFIVE/README.md @@ -1 +1 @@ -This folder has moved to `IDE/RISCV/SIFIVE-HIFIVE1`. \ No newline at end of file +This folder has moved to `IDE/RISCV/SIFIVE-HIFIVE1`. diff --git a/IDE/Espressif/ESP-IDF/README.md b/IDE/Espressif/ESP-IDF/README.md index 2075bde35..cc1a1d661 100644 --- a/IDE/Espressif/ESP-IDF/README.md +++ b/IDE/Espressif/ESP-IDF/README.md @@ -1,6 +1,6 @@ # ESP-IDF Port -These Espressif examples have been created and tested with the latest stable release branch of +These Espressif examples have been created and tested with the latest stable release branch of [ESP-IDF V5.2](https://docs.espressif.com/projects/esp-idf/en/release-v5.2/esp32/get-started/index.html). The prior version 4.4 ESP-IDF is still supported, however version 5.2 or greater is recommended. Espressif has [a list of all ESP-IDF versions](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/versions.html). @@ -140,7 +140,7 @@ See the specific examples for additional details. This is an alternate method for installation. It is recommended to use the new `CMakeLists.txt` to point to wolfSSL source code. - 1. Run `setup.sh` at _/path/to_`/wolfssl/IDE/Espressif/ESP-IDF/` to deploy files into ESP-IDF tree + 1. Run `setup.sh` at _/path/to_`/wolfssl/IDE/Espressif/ESP-IDF/` to deploy files into ESP-IDF tree 2. Find Wolfssl files at _/path/to/esp_`/esp-idf/components/wolfssl/` 3. Find [Example Programs](https://github.com/wolfSSL/wolfssl/tree/master/IDE/Espressif/ESP-IDF/examples) under _/path/to/esp_`/esp-idf/examples/protocols/wolfssl_xxx` (where xxx is the project name) @@ -169,7 +169,7 @@ C:\SysGCC\esp32\esp-idf>git clone -b v5.0.2 --recursive https://github.com/espre ## Configuration - 1. The `user_settings.h` can be found in `[project]/components/wolfssl/include/user_settings.h`. + 1. The `user_settings.h` can be found in `[project]/components/wolfssl/include/user_settings.h`. ## Configuration (Legacy IDF install) @@ -183,7 +183,7 @@ C:\SysGCC\esp32\esp-idf>git clone -b v5.0.2 --recursive https://github.com/espre For question please email [support@wolfssl.com] - Note: This is tested with : + Note: This is tested with : - OS: Ubuntu 20.04.3 LTS - Microsoft Windows 10 Pro 10.0.19041 / Windows 11 Pro 22H2 22621.2715 - Visual Studio 2022 17.7.6 with VisualGDB 5.6R9 (build 4777) diff --git a/IDE/Espressif/ESP-IDF/examples/README.md b/IDE/Espressif/ESP-IDF/examples/README.md index 1cd6696f7..d4a0ad696 100644 --- a/IDE/Espressif/ESP-IDF/examples/README.md +++ b/IDE/Espressif/ESP-IDF/examples/README.md @@ -12,7 +12,7 @@ These are the core examples for wolfSSL: - [TLS Client](./wolfssl_client/README.md). See also [CLI Client](https://github.com/wolfSSL/wolfssl/tree/master/examples/client) and [more TLS examples](https://github.com/wolfSSL/wolfssl-examples/tree/master/tls). -- [TLS Server](./wolfssl_server/README.md). See also [CLI Server](https://github.com/wolfSSL/wolfssl/tree/master/examples/server) +- [TLS Server](./wolfssl_server/README.md). See also [CLI Server](https://github.com/wolfSSL/wolfssl/tree/master/examples/server) ## Other Espressif wolfSSL Examples @@ -44,7 +44,7 @@ TLS1.3 Linux Client to Linux Server: `TLS_AES_128_GCM_SHA256` (default) ./examples/client/client -v 4 -h 127.0.0.1 -p 11111 -A ./certs/ca-cert.pem ``` -TLS1.2 Linux Server +TLS1.2 Linux Server ``` ./examples/server/server -v 3 -b -d -p 11111 -c ./certs/server-cert.pem -k ./certs/server-key.pem ``` @@ -71,11 +71,11 @@ There's an additional example that uses wolfSSL installed as a component to the ## Installing wolfSSL for Espressif projects -[Core examples](https://github.com/wolfSSL/wolfssl/tree/master/IDE/Espressif/ESP-IDF/examples) -have a local `components/wolfssl` directory with a special CMakeFile.txt that does not require +[Core examples](https://github.com/wolfSSL/wolfssl/tree/master/IDE/Espressif/ESP-IDF/examples) +have a local `components/wolfssl` directory with a special CMakeFile.txt that does not require wolfSSL to be installed. -If you want to install wolfSSL, see the setup for [wolfSSL](https://github.com/wolfSSL/wolfssl/tree/master/IDE/Espressif/ESP-IDF#setup-for-linux) +If you want to install wolfSSL, see the setup for [wolfSSL](https://github.com/wolfSSL/wolfssl/tree/master/IDE/Espressif/ESP-IDF#setup-for-linux) and [wolfSSH](https://github.com/wolfSSL/wolfssh/tree/master/ide/Espressif#setup-for-linux). The [Espressif Managed Component for wolfSSL](https://components.espressif.com/components/wolfssl/wolfssl) diff --git a/IDE/Espressif/ESP-IDF/examples/template/README.md b/IDE/Espressif/ESP-IDF/examples/template/README.md index 274e22dea..8d9ebbe49 100644 --- a/IDE/Espressif/ESP-IDF/examples/template/README.md +++ b/IDE/Espressif/ESP-IDF/examples/template/README.md @@ -11,7 +11,7 @@ It is assumed the [ESP-IDF environment](https://docs.espressif.com/projects/esp- ### Files Included -- [main.c](./main/main.c) with a simple call to an Espressif library (`ESP_LOGI`) and a call to a wolfSSL library (`esp_ShowExtendedSystemInfo`) . +- [main.c](./main/main.c) with a simple call to an Espressif library (`ESP_LOGI`) and a call to a wolfSSL library (`esp_ShowExtendedSystemInfo`) . - See [components/wolfssl/include](./components/wolfssl/include/user_settings.h) directory to edit the wolfSSL `user_settings.h`. diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_benchmark/README.md b/IDE/Espressif/ESP-IDF/examples/wolfssl_benchmark/README.md index 7b3a4f255..143a6a699 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_benchmark/README.md +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_benchmark/README.md @@ -62,10 +62,10 @@ See the [feature request](https://sysprogs.com/w/forums/topic/feature-request-sh ## ESP-IDF Commandline -1. `idf.py menuconfig` to configure the program. +1. `idf.py menuconfig` to configure the program. 1-1. Example Configuration -> - BENCH_ARG : argument that you want to use. Default is "-lng 0" + BENCH_ARG : argument that you want to use. Default is "-lng 0" The list of argument can be find in help. When you want to run the benchmark program @@ -110,9 +110,9 @@ idf.py build flash -p /dev/ttyS20 -b 115200 monitor ## Example Output -Note the default wolfSSL `user_settings.h` is configured by default to be the most +Note the default wolfSSL `user_settings.h` is configured by default to be the most compatible across the widest ranges of targets. Contact wolfSSL at support@wolfssl.com -for help in optimizing for your particular application, or see the +for help in optimizing for your particular application, or see the [docs](https://www.wolfssl.com/documentation/manuals/wolfssl/index.html). Compiled and flashed with `idf.py build flash -p /dev/ttyS7 -b 115200 monitor`: diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_benchmark/main/CMakeLists.txt b/IDE/Espressif/ESP-IDF/examples/wolfssl_benchmark/main/CMakeLists.txt index e37c4d5f6..6614af4fc 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_benchmark/main/CMakeLists.txt +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_benchmark/main/CMakeLists.txt @@ -19,7 +19,7 @@ if( EXISTS "${CMAKE_HOME_DIRECTORY}/components/wolfssl/" AND EXISTS "$ENV{IDF_PA endif() idf_component_register(SRCS main.c - INCLUDE_DIRS "." + INCLUDE_DIRS "." "./include") # diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_client/README.md b/IDE/Espressif/ESP-IDF/examples/wolfssl_client/README.md index 5c667ca24..43961ec9b 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_client/README.md +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_client/README.md @@ -56,23 +56,23 @@ Difficulty flashing: 1. `idf.py menuconfig` to config the project - 1-1. Example Configuration -> + 1-1. Example Configuration -> Target host ip address : the host that you want to connect to.(default is 127.0.0.1) 1-2. Example Connection Configuration -> - - WIFI SSID: your own WIFI, which is connected to the Internet.(default is "myssid") + + WIFI SSID: your own WIFI, which is connected to the Internet.(default is "myssid") WIFI Password: WIFI password, and default is "mypassword" - - - Note: the example program uses 11111 port. If you want to use different port + + + Note: the example program uses 11111 port. If you want to use different port , you need to modify DEFAULT_PORT definition in the code. When you want to test the wolfSSL client -1. `idf.py -p flash` and then `idf.py monitor` to load the firmware and see the context -2. You can use /examples/server/server program for test. +1. `idf.py -p flash` and then `idf.py monitor` to load the firmware and see the context +2. You can use /examples/server/server program for test. e.g. Launch ./examples/server/server -v 4 -b -i -d @@ -127,8 +127,8 @@ export IDF_PATH=~/esp/ESP8266_RTOS_SDK export PATH="$PATH:$HOME/esp/xtensa-lx106-elf/bin" # copy and navigate to project directory -mkdir -p /mnt/c/test/demo -cp -r /mnt/c/workspace/wolfssl-master/IDE/Espressif/ESP-IDF/examples/wolfssl_client/* /mnt/c/test/demo +mkdir -p /mnt/c/test/demo +cp -r /mnt/c/workspace/wolfssl-master/IDE/Espressif/ESP-IDF/examples/wolfssl_client/* /mnt/c/test/demo cd /mnt/c/test/demo # Clean diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_client/README_server_sm.md b/IDE/Espressif/ESP-IDF/examples/wolfssl_client/README_server_sm.md index 01dd6baf8..71ab1b6c1 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_client/README_server_sm.md +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_client/README_server_sm.md @@ -49,7 +49,7 @@ make clean && make ### Others... ``` -# Success: Linux Client to ESP32 Server TLS1.2 +# Success: Linux Client to ESP32 Server TLS1.2 ./examples/client/client -h 192.168.1.113 -v 3 -l ECDHE-ECDSA-SM4-CBC-SM3 -c ./certs/sm2/client-sm2.pem -k ./certs/sm2/client-sm2-priv.pem -A ./certs/sm2/root-sm2.pem -C ./examples/client/client -h 192.168.1.113 -v 3 -l ECDHE-ECDSA-SM4-GCM-SM3 -c ./certs/sm2/client-sm2.pem -k ./certs/sm2/client-sm2-priv.pem -A ./certs/sm2/root-sm2.pem -C ./examples/client/client -h 192.168.1.113 -v 3 -l ECDHE-ECDSA-SM4-CCM-SM3 -c ./certs/sm2/client-sm2.pem -k ./certs/sm2/client-sm2-priv.pem -A ./certs/sm2/root-sm2.pem -C @@ -81,7 +81,7 @@ be the same as the Linux server files. | Usage | Certificate | Key | Certificate Authority file, default ./certs/client-cert.pem | | ----- | ---------------------------------- | ----------------------------------- | --------------------------------- | -| server | -c ./certs/sm2/server-sm2.pem | -k ./certs/sm2/server-sm2-priv.pem | -A ./certs/sm2/client-sm2.pem -V | +| server | -c ./certs/sm2/server-sm2.pem | -k ./certs/sm2/server-sm2-priv.pem | -A ./certs/sm2/client-sm2.pem -V | | client | -c ./certs/sm2/client-sm2.pem | -k ./certs/sm2/client-sm2-priv.pem | -A ./certs/sm2/root-sm2.pem -C | | emdedded: | server | wolfSSL_CTX_use_certificate_buffer
server_sm2 | wolfSSL_CTX_use_PrivateKey_buffer
server_sm2_priv | wolfSSL_CTX_load_verify_buffer
client-sm2 | @@ -156,7 +156,7 @@ I (622) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM I (628) heap_init: At 40094DC8 len 0000B238 (44 KiB): IRAM I (636) spi_flash: detected chip: generic I (639) spi_flash: flash io: dio -W (643) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the +W (643) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the size in the binary image header. I (657) cpu_start: Starting scheduler on PRO CPU. I (0) cpu_start: Starting scheduler on APP CPU. @@ -358,12 +358,12 @@ I (14715) internal.c: GrowOutputBuffer ok I (14715) wolfssl: wolfSSL Entering wolfSSL_get_options I (14725) wolfssl: Point Formats extension to write W (14735) wolfio: ssl->wflags = 0 -I (14735) wolfio: 16 03 03 00 52 02 00 00 4e 03 03 af 87 e2 58 57 -I (14735) wolfio: 73 c3 c1 35 1a 59 39 b2 03 9d 14 03 e0 b8 fb e8 -I (14745) wolfio: 9d 5b 9c 44 4f 57 4e 47 52 44 01 20 85 77 75 20 -I (14755) wolfio: 95 dd 00 e2 91 f8 42 33 f8 61 3f 1f de 81 15 58 -I (14755) wolfio: 23 0c e7 1e 71 e6 10 e5 67 23 e0 40 e0 11 00 00 -I (14765) wolfio: 06 00 0b 00 02 01 00 +I (14735) wolfio: 16 03 03 00 52 02 00 00 4e 03 03 af 87 e2 58 57 +I (14735) wolfio: 73 c3 c1 35 1a 59 39 b2 03 9d 14 03 e0 b8 fb e8 +I (14745) wolfio: 9d 5b 9c 44 4f 57 4e 47 52 44 01 20 85 77 75 20 +I (14755) wolfio: 95 dd 00 e2 91 f8 42 33 f8 61 3f 1f de 81 15 58 +I (14755) wolfio: 23 0c e7 1e 71 e6 10 e5 67 23 e0 40 e0 11 00 00 +I (14765) wolfio: 06 00 0b 00 02 01 00 W (14775) wolfio: sz = 87 I (14775) wolfssl: Shrinking output buffer I (14775) wolfssl: wolfSSL Leaving SendServerHello, return 0 @@ -372,53 +372,53 @@ I (14795) wolfssl: wolfSSL Entering SendCertificate I (14795) wolfssl: growing output buffer I (14805) internal.c: GrowOutputBuffer ok W (14815) wolfio: ssl->wflags = 0 -I (14815) wolfio: 16 03 03 02 e6 0b 00 02 e2 00 02 df 00 02 dc 30 -I (14815) wolfio: 82 02 d8 30 82 02 7e a0 03 02 01 02 02 01 01 30 -I (14825) wolfio: 0a 06 08 2a 81 1c cf 55 01 83 75 30 81 ac 31 0b -I (14835) wolfio: 30 09 06 03 55 04 06 13 02 55 53 31 10 30 0e 06 -I (14835) wolfio: 03 55 04 08 0c 07 4d 6f 6e 74 61 6e 61 31 10 30 -I (14845) wolfio: 0e 06 03 55 04 07 0c 07 42 6f 7a 65 6d 61 6e 31 -I (14855) wolfio: 14 30 12 06 03 55 04 0a 0c 0b 77 6f 6c 66 53 53 -I (14855) wolfio: 4c 5f 73 6d 32 31 0f 30 0d 06 03 55 04 0b 0c 06 -I (14865) wolfio: 43 41 2d 73 6d 32 31 18 30 16 06 03 55 04 03 0c -I (14875) wolfio: 0f 77 77 77 2e 77 6f 6c 66 73 73 6c 2e 63 6f 6d -I (14875) wolfio: 31 1f 30 1d 06 09 2a 86 48 86 f7 0d 01 09 01 16 -I (14885) wolfio: 10 69 6e 66 6f 40 77 6f 6c 66 73 73 6c 2e 63 6f -I (14895) wolfio: 6d 31 17 30 15 06 0a 09 92 26 89 93 f2 2c 64 01 -I (14895) wolfio: 01 0c 07 77 6f 6c 66 53 53 4c 30 1e 17 0d 32 33 -I (14905) wolfio: 30 32 31 35 30 36 32 33 30 37 5a 17 0d 32 35 31 -I (14915) wolfio: 31 31 31 30 36 32 33 30 37 5a 30 81 b0 31 0b 30 -I (14915) wolfio: 09 06 03 55 04 06 13 02 55 53 31 10 30 0e 06 03 -I (14925) wolfio: 55 04 08 0c 07 4d 6f 6e 74 61 6e 61 31 10 30 0e -I (14935) wolfio: 06 03 55 04 07 0c 07 42 6f 7a 65 6d 61 6e 31 14 -I (14945) wolfio: 30 12 06 03 55 04 0a 0c 0b 77 6f 6c 66 53 53 4c -I (14945) wolfio: 5f 73 6d 32 31 13 30 11 06 03 55 04 0b 0c 0a 53 -I (14955) wolfio: 65 72 76 65 72 2d 73 6d 32 31 18 30 16 06 03 55 -I (14965) wolfio: 04 03 0c 0f 77 77 77 2e 77 6f 6c 66 73 73 6c 2e -I (14965) wolfio: 63 6f 6d 31 1f 30 1d 06 09 2a 86 48 86 f7 0d 01 -I (14975) wolfio: 09 01 16 10 69 6e 66 6f 40 77 6f 6c 66 73 73 6c -I (14985) wolfio: 2e 63 6f 6d 31 17 30 15 06 0a 09 92 26 89 93 f2 -I (14985) wolfio: 2c 64 01 01 0c 07 77 6f 6c 66 53 53 4c 30 5a 30 -I (14995) wolfio: 14 06 08 2a 81 1c cf 55 01 82 2d 06 08 2a 81 1c -I (15005) wolfio: cf 55 01 82 2d 03 42 00 04 94 70 2b 46 e4 5e 0f -I (15005) wolfio: 41 fb 8f 2d 34 0a 41 40 19 5e fb d4 1d 11 ac fa -I (15015) wolfio: f5 93 37 c6 fa 87 08 f7 16 1f 2c ce 30 40 9d 4f -I (15025) wolfio: a6 2a 0a a1 d6 95 33 c3 a6 03 98 e6 8d 05 34 b0 -I (15025) wolfio: 97 0c de a4 c7 cf 53 8f d1 a3 81 89 30 81 86 30 -I (15035) wolfio: 1d 06 03 55 1d 0e 04 16 04 14 67 ae 60 ff 7e 1b -I (15045) wolfio: 0f 95 ae 1f 82 59 f2 6c 56 2d 93 ef 17 32 30 1f -I (15045) wolfio: 06 03 55 1d 23 04 18 30 16 80 14 47 0a 48 7e bb -I (15055) wolfio: 02 a8 5a 26 57 2b 19 a9 7b 61 8b 7f 5d 99 6e 30 -I (15065) wolfio: 0c 06 03 55 1d 13 01 01 ff 04 02 30 00 30 0e 06 -I (15075) wolfio: 03 55 1d 0f 01 01 ff 04 04 03 02 03 a8 30 13 06 -I (15075) wolfio: 03 55 1d 25 04 0c 30 0a 06 08 2b 06 01 05 05 07 -I (15085) wolfio: 03 01 30 11 06 09 60 86 48 01 86 f8 42 01 01 04 -I (15095) wolfio: 04 03 02 06 40 30 0a 06 08 2a 81 1c cf 55 01 83 -I (15095) wolfio: 75 03 48 00 30 45 02 20 1b ca 94 28 7f f6 b2 0d -I (15105) wolfio: 31 43 50 e1 d5 34 17 dd af 3a de 81 06 67 9a b3 -I (15115) wolfio: 06 22 7e 64 ec fd 0e b9 02 21 00 a1 48 a8 32 d1 -I (15115) wolfio: 05 09 6b 1c eb 89 12 66 d8 38 a1 c4 5c 89 09 0f -I (15125) wolfio: fd e9 c0 3b 1d fb cd b5 4c 31 68 +I (14815) wolfio: 16 03 03 02 e6 0b 00 02 e2 00 02 df 00 02 dc 30 +I (14815) wolfio: 82 02 d8 30 82 02 7e a0 03 02 01 02 02 01 01 30 +I (14825) wolfio: 0a 06 08 2a 81 1c cf 55 01 83 75 30 81 ac 31 0b +I (14835) wolfio: 30 09 06 03 55 04 06 13 02 55 53 31 10 30 0e 06 +I (14835) wolfio: 03 55 04 08 0c 07 4d 6f 6e 74 61 6e 61 31 10 30 +I (14845) wolfio: 0e 06 03 55 04 07 0c 07 42 6f 7a 65 6d 61 6e 31 +I (14855) wolfio: 14 30 12 06 03 55 04 0a 0c 0b 77 6f 6c 66 53 53 +I (14855) wolfio: 4c 5f 73 6d 32 31 0f 30 0d 06 03 55 04 0b 0c 06 +I (14865) wolfio: 43 41 2d 73 6d 32 31 18 30 16 06 03 55 04 03 0c +I (14875) wolfio: 0f 77 77 77 2e 77 6f 6c 66 73 73 6c 2e 63 6f 6d +I (14875) wolfio: 31 1f 30 1d 06 09 2a 86 48 86 f7 0d 01 09 01 16 +I (14885) wolfio: 10 69 6e 66 6f 40 77 6f 6c 66 73 73 6c 2e 63 6f +I (14895) wolfio: 6d 31 17 30 15 06 0a 09 92 26 89 93 f2 2c 64 01 +I (14895) wolfio: 01 0c 07 77 6f 6c 66 53 53 4c 30 1e 17 0d 32 33 +I (14905) wolfio: 30 32 31 35 30 36 32 33 30 37 5a 17 0d 32 35 31 +I (14915) wolfio: 31 31 31 30 36 32 33 30 37 5a 30 81 b0 31 0b 30 +I (14915) wolfio: 09 06 03 55 04 06 13 02 55 53 31 10 30 0e 06 03 +I (14925) wolfio: 55 04 08 0c 07 4d 6f 6e 74 61 6e 61 31 10 30 0e +I (14935) wolfio: 06 03 55 04 07 0c 07 42 6f 7a 65 6d 61 6e 31 14 +I (14945) wolfio: 30 12 06 03 55 04 0a 0c 0b 77 6f 6c 66 53 53 4c +I (14945) wolfio: 5f 73 6d 32 31 13 30 11 06 03 55 04 0b 0c 0a 53 +I (14955) wolfio: 65 72 76 65 72 2d 73 6d 32 31 18 30 16 06 03 55 +I (14965) wolfio: 04 03 0c 0f 77 77 77 2e 77 6f 6c 66 73 73 6c 2e +I (14965) wolfio: 63 6f 6d 31 1f 30 1d 06 09 2a 86 48 86 f7 0d 01 +I (14975) wolfio: 09 01 16 10 69 6e 66 6f 40 77 6f 6c 66 73 73 6c +I (14985) wolfio: 2e 63 6f 6d 31 17 30 15 06 0a 09 92 26 89 93 f2 +I (14985) wolfio: 2c 64 01 01 0c 07 77 6f 6c 66 53 53 4c 30 5a 30 +I (14995) wolfio: 14 06 08 2a 81 1c cf 55 01 82 2d 06 08 2a 81 1c +I (15005) wolfio: cf 55 01 82 2d 03 42 00 04 94 70 2b 46 e4 5e 0f +I (15005) wolfio: 41 fb 8f 2d 34 0a 41 40 19 5e fb d4 1d 11 ac fa +I (15015) wolfio: f5 93 37 c6 fa 87 08 f7 16 1f 2c ce 30 40 9d 4f +I (15025) wolfio: a6 2a 0a a1 d6 95 33 c3 a6 03 98 e6 8d 05 34 b0 +I (15025) wolfio: 97 0c de a4 c7 cf 53 8f d1 a3 81 89 30 81 86 30 +I (15035) wolfio: 1d 06 03 55 1d 0e 04 16 04 14 67 ae 60 ff 7e 1b +I (15045) wolfio: 0f 95 ae 1f 82 59 f2 6c 56 2d 93 ef 17 32 30 1f +I (15045) wolfio: 06 03 55 1d 23 04 18 30 16 80 14 47 0a 48 7e bb +I (15055) wolfio: 02 a8 5a 26 57 2b 19 a9 7b 61 8b 7f 5d 99 6e 30 +I (15065) wolfio: 0c 06 03 55 1d 13 01 01 ff 04 02 30 00 30 0e 06 +I (15075) wolfio: 03 55 1d 0f 01 01 ff 04 04 03 02 03 a8 30 13 06 +I (15075) wolfio: 03 55 1d 25 04 0c 30 0a 06 08 2b 06 01 05 05 07 +I (15085) wolfio: 03 01 30 11 06 09 60 86 48 01 86 f8 42 01 01 04 +I (15095) wolfio: 04 03 02 06 40 30 0a 06 08 2a 81 1c cf 55 01 83 +I (15095) wolfio: 75 03 48 00 30 45 02 20 1b ca 94 28 7f f6 b2 0d +I (15105) wolfio: 31 43 50 e1 d5 34 17 dd af 3a de 81 06 67 9a b3 +I (15115) wolfio: 06 22 7e 64 ec fd 0e b9 02 21 00 a1 48 a8 32 d1 +I (15115) wolfio: 05 09 6b 1c eb 89 12 66 d8 38 a1 c4 5c 89 09 0f +I (15125) wolfio: fd e9 c0 3b 1d fb cd b5 4c 31 68 W (15135) wolfio: sz = 747 I (15135) wolfssl: Shrinking output buffer I (15135) wolfssl: wolfSSL Leaving SendCertificate, return 0 @@ -440,16 +440,16 @@ I (15915) wolfssl: wolfSSL Entering SendHandshakeMsg I (15925) wolfssl: growing output buffer I (15925) internal.c: GrowOutputBuffer ok W (15925) wolfio: ssl->wflags = 0 -I (15935) wolfio: 16 03 03 00 95 0c 00 00 91 03 00 29 41 04 fd f5 -I (15935) wolfio: 5e 74 15 30 1d f3 84 ae a5 69 96 a9 5b dd 27 b3 -I (15945) wolfio: 00 7d 40 3a 59 93 93 6f 4d 1f 62 dc 60 48 34 1f -I (15955) wolfio: a8 1d 34 b8 76 8f 8b 27 4a 1b 77 64 8e 2e d5 27 -I (15955) wolfio: 03 95 8b 9d a5 ed a4 a6 b9 40 1b ea aa 10 07 08 -I (15965) wolfio: 00 48 30 46 02 21 00 cb 89 61 e9 21 f9 c6 4d ad -I (15975) wolfio: aa e7 f1 3f 6f 27 46 f0 35 ec 45 4e 8a ae f3 ac -I (15985) wolfio: 7c c0 cf 68 11 44 e2 02 21 00 f6 40 5c bc 66 5a -I (15985) wolfio: 74 1e 92 5d 9a 03 75 e7 7f 16 c2 b3 c8 fe 8d 5c -I (15995) wolfio: 63 35 36 da 61 38 76 dc 4e d6 +I (15935) wolfio: 16 03 03 00 95 0c 00 00 91 03 00 29 41 04 fd f5 +I (15935) wolfio: 5e 74 15 30 1d f3 84 ae a5 69 96 a9 5b dd 27 b3 +I (15945) wolfio: 00 7d 40 3a 59 93 93 6f 4d 1f 62 dc 60 48 34 1f +I (15955) wolfio: a8 1d 34 b8 76 8f 8b 27 4a 1b 77 64 8e 2e d5 27 +I (15955) wolfio: 03 95 8b 9d a5 ed a4 a6 b9 40 1b ea aa 10 07 08 +I (15965) wolfio: 00 48 30 46 02 21 00 cb 89 61 e9 21 f9 c6 4d ad +I (15975) wolfio: aa e7 f1 3f 6f 27 46 f0 35 ec 45 4e 8a ae f3 ac +I (15985) wolfio: 7c c0 cf 68 11 44 e2 02 21 00 f6 40 5c bc 66 5a +I (15985) wolfio: 74 1e 92 5d 9a 03 75 e7 7f 16 c2 b3 c8 fe 8d 5c +I (15995) wolfio: 63 35 36 da 61 38 76 dc 4e d6 W (15995) wolfio: sz = 154 I (16005) wolfssl: Shrinking output buffer I (16005) wolfssl: wolfSSL Leaving SendServerKeyExchange, return 0 @@ -459,7 +459,7 @@ I (16025) wolfssl: wolfSSL Entering SendServerHelloDone I (16035) wolfssl: growing output buffer I (16035) internal.c: GrowOutputBuffer ok W (16045) wolfio: ssl->wflags = 0 -I (16045) wolfio: 16 03 03 00 04 0e 00 00 00 +I (16045) wolfio: 16 03 03 00 04 0e 00 00 00 W (16045) wolfio: sz = 9 I (16055) wolfssl: Embed Send error I (16055) wolfssl: Connection reset @@ -479,14 +479,14 @@ I (16125) wolfssl: User calling wolfSSL_read in error state, not allowed I (16135) wolfssl: wolfSSL Leaving wolfSSL_read_internal, return -308 E (16145) tls_server: ERROR: failed to read I (16145) wolfssl: Client sends: -I (16145) wolfssl: +I (16145) wolfssl: I (16155) wolfssl: wolfSSL Entering wolfSSL_write I (16155) wolfssl: handshake not complete, trying to finish I (16165) wolfssl: wolfSSL Entering wolfSSL_negotiate I (16165) wolfssl: wolfSSL Entering wolfSSL_accept I (16175) wolfssl: wolfSSL Entering ReinitSSL W (16185) wolfio: ssl->wflags = 0 -I (16185) wolfio: 16 03 03 00 04 0e 00 00 00 +I (16185) wolfio: 16 03 03 00 04 0e 00 00 00 W (16185) wolfio: sz = 9 I (16195) wolfssl: Embed Send error I (16195) wolfssl: General error diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_server/README.md b/IDE/Espressif/ESP-IDF/examples/wolfssl_server/README.md index c663c78cb..6baa41aa7 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_server/README.md +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_server/README.md @@ -20,18 +20,18 @@ The Example contains a wolfSSL simple server. 1. `idf.py menuconfig` to configure the project 1-1. Example Connection Configuration -> - - WIFI SSID : your own WIFI, which is connected to the Internet.(default is "myssid") + + WIFI SSID : your own WIFI, which is connected to the Internet.(default is "myssid") WIFI Password : WIFI password, and default is "mypassword" When you want to test the wolfSSL simple server demo 1. `idf.py -p flash` to compile the code and load the firmware 2. `idf.py monitor` to see the context. The assigned IP address can be found in output message. -3. Once the server connects to the wifi, it is waiting for client request. +3. Once the server connects to the wifi, it is waiting for client request. ("Waiting for a connection..." message will be displayed.) - -4. You can use /examples/client to test the server + +4. You can use /examples/client to test the server e.g ./example/client/client -h xx.xx.xx See the README.md file in the upper level 'examples' directory for more information about examples. diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_server/README_server_sm.md b/IDE/Espressif/ESP-IDF/examples/wolfssl_server/README_server_sm.md index 01dd6baf8..71ab1b6c1 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_server/README_server_sm.md +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_server/README_server_sm.md @@ -49,7 +49,7 @@ make clean && make ### Others... ``` -# Success: Linux Client to ESP32 Server TLS1.2 +# Success: Linux Client to ESP32 Server TLS1.2 ./examples/client/client -h 192.168.1.113 -v 3 -l ECDHE-ECDSA-SM4-CBC-SM3 -c ./certs/sm2/client-sm2.pem -k ./certs/sm2/client-sm2-priv.pem -A ./certs/sm2/root-sm2.pem -C ./examples/client/client -h 192.168.1.113 -v 3 -l ECDHE-ECDSA-SM4-GCM-SM3 -c ./certs/sm2/client-sm2.pem -k ./certs/sm2/client-sm2-priv.pem -A ./certs/sm2/root-sm2.pem -C ./examples/client/client -h 192.168.1.113 -v 3 -l ECDHE-ECDSA-SM4-CCM-SM3 -c ./certs/sm2/client-sm2.pem -k ./certs/sm2/client-sm2-priv.pem -A ./certs/sm2/root-sm2.pem -C @@ -81,7 +81,7 @@ be the same as the Linux server files. | Usage | Certificate | Key | Certificate Authority file, default ./certs/client-cert.pem | | ----- | ---------------------------------- | ----------------------------------- | --------------------------------- | -| server | -c ./certs/sm2/server-sm2.pem | -k ./certs/sm2/server-sm2-priv.pem | -A ./certs/sm2/client-sm2.pem -V | +| server | -c ./certs/sm2/server-sm2.pem | -k ./certs/sm2/server-sm2-priv.pem | -A ./certs/sm2/client-sm2.pem -V | | client | -c ./certs/sm2/client-sm2.pem | -k ./certs/sm2/client-sm2-priv.pem | -A ./certs/sm2/root-sm2.pem -C | | emdedded: | server | wolfSSL_CTX_use_certificate_buffer
server_sm2 | wolfSSL_CTX_use_PrivateKey_buffer
server_sm2_priv | wolfSSL_CTX_load_verify_buffer
client-sm2 | @@ -156,7 +156,7 @@ I (622) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM I (628) heap_init: At 40094DC8 len 0000B238 (44 KiB): IRAM I (636) spi_flash: detected chip: generic I (639) spi_flash: flash io: dio -W (643) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the +W (643) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the size in the binary image header. I (657) cpu_start: Starting scheduler on PRO CPU. I (0) cpu_start: Starting scheduler on APP CPU. @@ -358,12 +358,12 @@ I (14715) internal.c: GrowOutputBuffer ok I (14715) wolfssl: wolfSSL Entering wolfSSL_get_options I (14725) wolfssl: Point Formats extension to write W (14735) wolfio: ssl->wflags = 0 -I (14735) wolfio: 16 03 03 00 52 02 00 00 4e 03 03 af 87 e2 58 57 -I (14735) wolfio: 73 c3 c1 35 1a 59 39 b2 03 9d 14 03 e0 b8 fb e8 -I (14745) wolfio: 9d 5b 9c 44 4f 57 4e 47 52 44 01 20 85 77 75 20 -I (14755) wolfio: 95 dd 00 e2 91 f8 42 33 f8 61 3f 1f de 81 15 58 -I (14755) wolfio: 23 0c e7 1e 71 e6 10 e5 67 23 e0 40 e0 11 00 00 -I (14765) wolfio: 06 00 0b 00 02 01 00 +I (14735) wolfio: 16 03 03 00 52 02 00 00 4e 03 03 af 87 e2 58 57 +I (14735) wolfio: 73 c3 c1 35 1a 59 39 b2 03 9d 14 03 e0 b8 fb e8 +I (14745) wolfio: 9d 5b 9c 44 4f 57 4e 47 52 44 01 20 85 77 75 20 +I (14755) wolfio: 95 dd 00 e2 91 f8 42 33 f8 61 3f 1f de 81 15 58 +I (14755) wolfio: 23 0c e7 1e 71 e6 10 e5 67 23 e0 40 e0 11 00 00 +I (14765) wolfio: 06 00 0b 00 02 01 00 W (14775) wolfio: sz = 87 I (14775) wolfssl: Shrinking output buffer I (14775) wolfssl: wolfSSL Leaving SendServerHello, return 0 @@ -372,53 +372,53 @@ I (14795) wolfssl: wolfSSL Entering SendCertificate I (14795) wolfssl: growing output buffer I (14805) internal.c: GrowOutputBuffer ok W (14815) wolfio: ssl->wflags = 0 -I (14815) wolfio: 16 03 03 02 e6 0b 00 02 e2 00 02 df 00 02 dc 30 -I (14815) wolfio: 82 02 d8 30 82 02 7e a0 03 02 01 02 02 01 01 30 -I (14825) wolfio: 0a 06 08 2a 81 1c cf 55 01 83 75 30 81 ac 31 0b -I (14835) wolfio: 30 09 06 03 55 04 06 13 02 55 53 31 10 30 0e 06 -I (14835) wolfio: 03 55 04 08 0c 07 4d 6f 6e 74 61 6e 61 31 10 30 -I (14845) wolfio: 0e 06 03 55 04 07 0c 07 42 6f 7a 65 6d 61 6e 31 -I (14855) wolfio: 14 30 12 06 03 55 04 0a 0c 0b 77 6f 6c 66 53 53 -I (14855) wolfio: 4c 5f 73 6d 32 31 0f 30 0d 06 03 55 04 0b 0c 06 -I (14865) wolfio: 43 41 2d 73 6d 32 31 18 30 16 06 03 55 04 03 0c -I (14875) wolfio: 0f 77 77 77 2e 77 6f 6c 66 73 73 6c 2e 63 6f 6d -I (14875) wolfio: 31 1f 30 1d 06 09 2a 86 48 86 f7 0d 01 09 01 16 -I (14885) wolfio: 10 69 6e 66 6f 40 77 6f 6c 66 73 73 6c 2e 63 6f -I (14895) wolfio: 6d 31 17 30 15 06 0a 09 92 26 89 93 f2 2c 64 01 -I (14895) wolfio: 01 0c 07 77 6f 6c 66 53 53 4c 30 1e 17 0d 32 33 -I (14905) wolfio: 30 32 31 35 30 36 32 33 30 37 5a 17 0d 32 35 31 -I (14915) wolfio: 31 31 31 30 36 32 33 30 37 5a 30 81 b0 31 0b 30 -I (14915) wolfio: 09 06 03 55 04 06 13 02 55 53 31 10 30 0e 06 03 -I (14925) wolfio: 55 04 08 0c 07 4d 6f 6e 74 61 6e 61 31 10 30 0e -I (14935) wolfio: 06 03 55 04 07 0c 07 42 6f 7a 65 6d 61 6e 31 14 -I (14945) wolfio: 30 12 06 03 55 04 0a 0c 0b 77 6f 6c 66 53 53 4c -I (14945) wolfio: 5f 73 6d 32 31 13 30 11 06 03 55 04 0b 0c 0a 53 -I (14955) wolfio: 65 72 76 65 72 2d 73 6d 32 31 18 30 16 06 03 55 -I (14965) wolfio: 04 03 0c 0f 77 77 77 2e 77 6f 6c 66 73 73 6c 2e -I (14965) wolfio: 63 6f 6d 31 1f 30 1d 06 09 2a 86 48 86 f7 0d 01 -I (14975) wolfio: 09 01 16 10 69 6e 66 6f 40 77 6f 6c 66 73 73 6c -I (14985) wolfio: 2e 63 6f 6d 31 17 30 15 06 0a 09 92 26 89 93 f2 -I (14985) wolfio: 2c 64 01 01 0c 07 77 6f 6c 66 53 53 4c 30 5a 30 -I (14995) wolfio: 14 06 08 2a 81 1c cf 55 01 82 2d 06 08 2a 81 1c -I (15005) wolfio: cf 55 01 82 2d 03 42 00 04 94 70 2b 46 e4 5e 0f -I (15005) wolfio: 41 fb 8f 2d 34 0a 41 40 19 5e fb d4 1d 11 ac fa -I (15015) wolfio: f5 93 37 c6 fa 87 08 f7 16 1f 2c ce 30 40 9d 4f -I (15025) wolfio: a6 2a 0a a1 d6 95 33 c3 a6 03 98 e6 8d 05 34 b0 -I (15025) wolfio: 97 0c de a4 c7 cf 53 8f d1 a3 81 89 30 81 86 30 -I (15035) wolfio: 1d 06 03 55 1d 0e 04 16 04 14 67 ae 60 ff 7e 1b -I (15045) wolfio: 0f 95 ae 1f 82 59 f2 6c 56 2d 93 ef 17 32 30 1f -I (15045) wolfio: 06 03 55 1d 23 04 18 30 16 80 14 47 0a 48 7e bb -I (15055) wolfio: 02 a8 5a 26 57 2b 19 a9 7b 61 8b 7f 5d 99 6e 30 -I (15065) wolfio: 0c 06 03 55 1d 13 01 01 ff 04 02 30 00 30 0e 06 -I (15075) wolfio: 03 55 1d 0f 01 01 ff 04 04 03 02 03 a8 30 13 06 -I (15075) wolfio: 03 55 1d 25 04 0c 30 0a 06 08 2b 06 01 05 05 07 -I (15085) wolfio: 03 01 30 11 06 09 60 86 48 01 86 f8 42 01 01 04 -I (15095) wolfio: 04 03 02 06 40 30 0a 06 08 2a 81 1c cf 55 01 83 -I (15095) wolfio: 75 03 48 00 30 45 02 20 1b ca 94 28 7f f6 b2 0d -I (15105) wolfio: 31 43 50 e1 d5 34 17 dd af 3a de 81 06 67 9a b3 -I (15115) wolfio: 06 22 7e 64 ec fd 0e b9 02 21 00 a1 48 a8 32 d1 -I (15115) wolfio: 05 09 6b 1c eb 89 12 66 d8 38 a1 c4 5c 89 09 0f -I (15125) wolfio: fd e9 c0 3b 1d fb cd b5 4c 31 68 +I (14815) wolfio: 16 03 03 02 e6 0b 00 02 e2 00 02 df 00 02 dc 30 +I (14815) wolfio: 82 02 d8 30 82 02 7e a0 03 02 01 02 02 01 01 30 +I (14825) wolfio: 0a 06 08 2a 81 1c cf 55 01 83 75 30 81 ac 31 0b +I (14835) wolfio: 30 09 06 03 55 04 06 13 02 55 53 31 10 30 0e 06 +I (14835) wolfio: 03 55 04 08 0c 07 4d 6f 6e 74 61 6e 61 31 10 30 +I (14845) wolfio: 0e 06 03 55 04 07 0c 07 42 6f 7a 65 6d 61 6e 31 +I (14855) wolfio: 14 30 12 06 03 55 04 0a 0c 0b 77 6f 6c 66 53 53 +I (14855) wolfio: 4c 5f 73 6d 32 31 0f 30 0d 06 03 55 04 0b 0c 06 +I (14865) wolfio: 43 41 2d 73 6d 32 31 18 30 16 06 03 55 04 03 0c +I (14875) wolfio: 0f 77 77 77 2e 77 6f 6c 66 73 73 6c 2e 63 6f 6d +I (14875) wolfio: 31 1f 30 1d 06 09 2a 86 48 86 f7 0d 01 09 01 16 +I (14885) wolfio: 10 69 6e 66 6f 40 77 6f 6c 66 73 73 6c 2e 63 6f +I (14895) wolfio: 6d 31 17 30 15 06 0a 09 92 26 89 93 f2 2c 64 01 +I (14895) wolfio: 01 0c 07 77 6f 6c 66 53 53 4c 30 1e 17 0d 32 33 +I (14905) wolfio: 30 32 31 35 30 36 32 33 30 37 5a 17 0d 32 35 31 +I (14915) wolfio: 31 31 31 30 36 32 33 30 37 5a 30 81 b0 31 0b 30 +I (14915) wolfio: 09 06 03 55 04 06 13 02 55 53 31 10 30 0e 06 03 +I (14925) wolfio: 55 04 08 0c 07 4d 6f 6e 74 61 6e 61 31 10 30 0e +I (14935) wolfio: 06 03 55 04 07 0c 07 42 6f 7a 65 6d 61 6e 31 14 +I (14945) wolfio: 30 12 06 03 55 04 0a 0c 0b 77 6f 6c 66 53 53 4c +I (14945) wolfio: 5f 73 6d 32 31 13 30 11 06 03 55 04 0b 0c 0a 53 +I (14955) wolfio: 65 72 76 65 72 2d 73 6d 32 31 18 30 16 06 03 55 +I (14965) wolfio: 04 03 0c 0f 77 77 77 2e 77 6f 6c 66 73 73 6c 2e +I (14965) wolfio: 63 6f 6d 31 1f 30 1d 06 09 2a 86 48 86 f7 0d 01 +I (14975) wolfio: 09 01 16 10 69 6e 66 6f 40 77 6f 6c 66 73 73 6c +I (14985) wolfio: 2e 63 6f 6d 31 17 30 15 06 0a 09 92 26 89 93 f2 +I (14985) wolfio: 2c 64 01 01 0c 07 77 6f 6c 66 53 53 4c 30 5a 30 +I (14995) wolfio: 14 06 08 2a 81 1c cf 55 01 82 2d 06 08 2a 81 1c +I (15005) wolfio: cf 55 01 82 2d 03 42 00 04 94 70 2b 46 e4 5e 0f +I (15005) wolfio: 41 fb 8f 2d 34 0a 41 40 19 5e fb d4 1d 11 ac fa +I (15015) wolfio: f5 93 37 c6 fa 87 08 f7 16 1f 2c ce 30 40 9d 4f +I (15025) wolfio: a6 2a 0a a1 d6 95 33 c3 a6 03 98 e6 8d 05 34 b0 +I (15025) wolfio: 97 0c de a4 c7 cf 53 8f d1 a3 81 89 30 81 86 30 +I (15035) wolfio: 1d 06 03 55 1d 0e 04 16 04 14 67 ae 60 ff 7e 1b +I (15045) wolfio: 0f 95 ae 1f 82 59 f2 6c 56 2d 93 ef 17 32 30 1f +I (15045) wolfio: 06 03 55 1d 23 04 18 30 16 80 14 47 0a 48 7e bb +I (15055) wolfio: 02 a8 5a 26 57 2b 19 a9 7b 61 8b 7f 5d 99 6e 30 +I (15065) wolfio: 0c 06 03 55 1d 13 01 01 ff 04 02 30 00 30 0e 06 +I (15075) wolfio: 03 55 1d 0f 01 01 ff 04 04 03 02 03 a8 30 13 06 +I (15075) wolfio: 03 55 1d 25 04 0c 30 0a 06 08 2b 06 01 05 05 07 +I (15085) wolfio: 03 01 30 11 06 09 60 86 48 01 86 f8 42 01 01 04 +I (15095) wolfio: 04 03 02 06 40 30 0a 06 08 2a 81 1c cf 55 01 83 +I (15095) wolfio: 75 03 48 00 30 45 02 20 1b ca 94 28 7f f6 b2 0d +I (15105) wolfio: 31 43 50 e1 d5 34 17 dd af 3a de 81 06 67 9a b3 +I (15115) wolfio: 06 22 7e 64 ec fd 0e b9 02 21 00 a1 48 a8 32 d1 +I (15115) wolfio: 05 09 6b 1c eb 89 12 66 d8 38 a1 c4 5c 89 09 0f +I (15125) wolfio: fd e9 c0 3b 1d fb cd b5 4c 31 68 W (15135) wolfio: sz = 747 I (15135) wolfssl: Shrinking output buffer I (15135) wolfssl: wolfSSL Leaving SendCertificate, return 0 @@ -440,16 +440,16 @@ I (15915) wolfssl: wolfSSL Entering SendHandshakeMsg I (15925) wolfssl: growing output buffer I (15925) internal.c: GrowOutputBuffer ok W (15925) wolfio: ssl->wflags = 0 -I (15935) wolfio: 16 03 03 00 95 0c 00 00 91 03 00 29 41 04 fd f5 -I (15935) wolfio: 5e 74 15 30 1d f3 84 ae a5 69 96 a9 5b dd 27 b3 -I (15945) wolfio: 00 7d 40 3a 59 93 93 6f 4d 1f 62 dc 60 48 34 1f -I (15955) wolfio: a8 1d 34 b8 76 8f 8b 27 4a 1b 77 64 8e 2e d5 27 -I (15955) wolfio: 03 95 8b 9d a5 ed a4 a6 b9 40 1b ea aa 10 07 08 -I (15965) wolfio: 00 48 30 46 02 21 00 cb 89 61 e9 21 f9 c6 4d ad -I (15975) wolfio: aa e7 f1 3f 6f 27 46 f0 35 ec 45 4e 8a ae f3 ac -I (15985) wolfio: 7c c0 cf 68 11 44 e2 02 21 00 f6 40 5c bc 66 5a -I (15985) wolfio: 74 1e 92 5d 9a 03 75 e7 7f 16 c2 b3 c8 fe 8d 5c -I (15995) wolfio: 63 35 36 da 61 38 76 dc 4e d6 +I (15935) wolfio: 16 03 03 00 95 0c 00 00 91 03 00 29 41 04 fd f5 +I (15935) wolfio: 5e 74 15 30 1d f3 84 ae a5 69 96 a9 5b dd 27 b3 +I (15945) wolfio: 00 7d 40 3a 59 93 93 6f 4d 1f 62 dc 60 48 34 1f +I (15955) wolfio: a8 1d 34 b8 76 8f 8b 27 4a 1b 77 64 8e 2e d5 27 +I (15955) wolfio: 03 95 8b 9d a5 ed a4 a6 b9 40 1b ea aa 10 07 08 +I (15965) wolfio: 00 48 30 46 02 21 00 cb 89 61 e9 21 f9 c6 4d ad +I (15975) wolfio: aa e7 f1 3f 6f 27 46 f0 35 ec 45 4e 8a ae f3 ac +I (15985) wolfio: 7c c0 cf 68 11 44 e2 02 21 00 f6 40 5c bc 66 5a +I (15985) wolfio: 74 1e 92 5d 9a 03 75 e7 7f 16 c2 b3 c8 fe 8d 5c +I (15995) wolfio: 63 35 36 da 61 38 76 dc 4e d6 W (15995) wolfio: sz = 154 I (16005) wolfssl: Shrinking output buffer I (16005) wolfssl: wolfSSL Leaving SendServerKeyExchange, return 0 @@ -459,7 +459,7 @@ I (16025) wolfssl: wolfSSL Entering SendServerHelloDone I (16035) wolfssl: growing output buffer I (16035) internal.c: GrowOutputBuffer ok W (16045) wolfio: ssl->wflags = 0 -I (16045) wolfio: 16 03 03 00 04 0e 00 00 00 +I (16045) wolfio: 16 03 03 00 04 0e 00 00 00 W (16045) wolfio: sz = 9 I (16055) wolfssl: Embed Send error I (16055) wolfssl: Connection reset @@ -479,14 +479,14 @@ I (16125) wolfssl: User calling wolfSSL_read in error state, not allowed I (16135) wolfssl: wolfSSL Leaving wolfSSL_read_internal, return -308 E (16145) tls_server: ERROR: failed to read I (16145) wolfssl: Client sends: -I (16145) wolfssl: +I (16145) wolfssl: I (16155) wolfssl: wolfSSL Entering wolfSSL_write I (16155) wolfssl: handshake not complete, trying to finish I (16165) wolfssl: wolfSSL Entering wolfSSL_negotiate I (16165) wolfssl: wolfSSL Entering wolfSSL_accept I (16175) wolfssl: wolfSSL Entering ReinitSSL W (16185) wolfio: ssl->wflags = 0 -I (16185) wolfio: 16 03 03 00 04 0e 00 00 00 +I (16185) wolfio: 16 03 03 00 04 0e 00 00 00 W (16185) wolfio: sz = 9 I (16195) wolfssl: Embed Send error I (16195) wolfssl: General error diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_server/main/component.mk b/IDE/Espressif/ESP-IDF/examples/wolfssl_server/main/component.mk index d31083f65..44bd2b527 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_server/main/component.mk +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_server/main/component.mk @@ -1,3 +1,3 @@ # # Main Makefile. This is basically the same as a component makefile. -# \ No newline at end of file +# diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_test/README.md b/IDE/Espressif/ESP-IDF/examples/wolfssl_test/README.md index e4e79dce8..ee66039f0 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_test/README.md +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_test/README.md @@ -7,7 +7,7 @@ For general information on [wolfSSL examples for Espressif](../README.md), see t ## ESP Registry -The easiest way to get started with wolfSSL is by using the +The easiest way to get started with wolfSSL is by using the [ESP Registry](https://components.espressif.com/components/wolfssl/wolfssl/) examples. ``` @@ -24,10 +24,10 @@ No wolfSSL setup is needed. You may need to adjust your specific COM port. The d ## ESP-IDF Commandline -1. `idf.py menuconfig` to configure the program. +1. `idf.py menuconfig` to configure the program. 1-1. Example Configuration -> - TEST_ARG : argument that you want to use. Default is "-lng 0" + TEST_ARG : argument that you want to use. Default is "-lng 0" The list of argument can be find in help. When you want to run the test program @@ -60,16 +60,16 @@ idf.py set-target esp32s3 idf.py erase-flash -p /dev/ttyS24 -b 115200 # start with a low upload speed, then increase as found operational -idf.py +idf.py # build and flash, in this example to COM24 idf.py build flash -p /dev/ttyS24 -b 115200 monitor ``` ## Example Output -Note the default wolfSSL `user_settings.h` is configured by default to be the most +Note the default wolfSSL `user_settings.h` is configured by default to be the most compatible across the widest ranges of targets. Contact wolfSSL at support@wolfssl.com -for help in optimizing for your particular application, or see the +for help in optimizing for your particular application, or see the [docs](https://www.wolfssl.com/documentation/manuals/wolfssl/index.html). Compiled and flashed with `idf.py build flash -p /dev/ttyS7 -b 115200 monitor`: diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_test_idf/README.md b/IDE/Espressif/ESP-IDF/examples/wolfssl_test_idf/README.md index f2efc2f3d..f8ec01cec 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_test_idf/README.md +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_test_idf/README.md @@ -12,10 +12,10 @@ Open the VisualGDB Visual Studio Project file in the VisualGDB directory and cli ## ESP-IDF Commandline -1. `idf.py menuconfig` to configure the program. +1. `idf.py menuconfig` to configure the program. 1-1. Example Configuration -> - TEST_ARG : argument that you want to use. Default is "-lng 0" + TEST_ARG : argument that you want to use. Default is "-lng 0" The list of argument can be find in help. When you want to run the test program @@ -46,9 +46,9 @@ idf.py build flash -p /dev/ttyS20 -b 115200 monitor ## Example Output -Note the default wolfSSL `user_settings.h` is configured by default to be the most +Note the default wolfSSL `user_settings.h` is configured by default to be the most compatible across the widest ranges of targets. Contact wolfSSL at support@wolfssl.com -for help in optimizing for your particular application, or see the +for help in optimizing for your particular application, or see the [docs](https://www.wolfssl.com/documentation/manuals/wolfssl/index.html). Compiled and flashed with `idf.py build flash -p /dev/ttyS7 -b 115200 monitor`: diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_test_idf/component.mk b/IDE/Espressif/ESP-IDF/examples/wolfssl_test_idf/component.mk index e19e22a53..0adf45649 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_test_idf/component.mk +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_test_idf/component.mk @@ -1,8 +1,8 @@ # # Main component makefile. # -# This Makefile can be left empty. By default, it will take the sources in the -# src/ directory, compile them and link them into lib(subdirectory_name).a +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a # in the build directory. This behaviour is entirely configurable, # please read the ESP-IDF documents if you need to do this. -# \ No newline at end of file +# diff --git a/IDE/Espressif/ESP-IDF/examples/wolfssl_test_idf/main/component.mk b/IDE/Espressif/ESP-IDF/examples/wolfssl_test_idf/main/component.mk index d31083f65..44bd2b527 100644 --- a/IDE/Espressif/ESP-IDF/examples/wolfssl_test_idf/main/component.mk +++ b/IDE/Espressif/ESP-IDF/examples/wolfssl_test_idf/main/component.mk @@ -1,3 +1,3 @@ # # Main Makefile. This is basically the same as a component makefile. -# \ No newline at end of file +# diff --git a/IDE/Espressif/ESP-IDF/libs/README.md b/IDE/Espressif/ESP-IDF/libs/README.md index 703baf1ea..d5dc4c993 100644 --- a/IDE/Espressif/ESP-IDF/libs/README.md +++ b/IDE/Espressif/ESP-IDF/libs/README.md @@ -4,4 +4,4 @@ Files in IDE\Espressif\ESP-IDF\libs: `component.mk` used in ESP-IDF `wolfssl` component directory -`tigard.cfg` Tigard JTAG config file \ No newline at end of file +`tigard.cfg` Tigard JTAG config file diff --git a/IDE/Espressif/ESP-IDF/test/README.md b/IDE/Espressif/ESP-IDF/test/README.md index e832b5c50..8a12a50fe 100644 --- a/IDE/Espressif/ESP-IDF/test/README.md +++ b/IDE/Espressif/ESP-IDF/test/README.md @@ -2,9 +2,9 @@ The test contains of wolfSSL unit-test app on Unity. -When you want to run the app -1. Go to /esp-idf/tools/unit-test-app/ folder -2. `idf.py menuconfig` to configure unit test app. -3. `idf.py -T wolfssl build` to build wolfssl unit test app. +When you want to run the app +1. Go to /esp-idf/tools/unit-test-app/ folder +2. `idf.py menuconfig` to configure unit test app. +3. `idf.py -T wolfssl build` to build wolfssl unit test app. See [https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/unit-tests.html] for more information about unit test app. diff --git a/IDE/GCC-ARM/README.md b/IDE/GCC-ARM/README.md index 2aa29d969..40b2bdfd1 100644 --- a/IDE/GCC-ARM/README.md +++ b/IDE/GCC-ARM/README.md @@ -118,7 +118,7 @@ These settings are located in `Header/user_settings.h`. * `USE_SLOW_SHA`: Enables smaller/slower version of SHA. * `USE_SLOW_SHA256`: About 2k smaller and about 25% slower * `USE_SLOW_SHA512`: Over twice as small, but 50% slower -* `USE_CERT_BUFFERS_1024` or `USE_CERT_BUFFERS_2048`: Size of RSA certs / keys to test with. +* `USE_CERT_BUFFERS_1024` or `USE_CERT_BUFFERS_2048`: Size of RSA certs / keys to test with. * `BENCH_EMBEDDED`: Define this if using the wolfCrypt test/benchmark and using a low memory target. * `ECC_USER_CURVES`: Allows user to define curve sizes to enable. Default is 256-bit on. To enable others use `HAVE_ECC192`, `HAVE_ECC224`, etc.... * `TFM_ARM`, `TFM_SSE2`, `TFM_AVR32`, `TFM_PPC32`, `TFM_MIPS`, `TFM_X86` or `TFM_X86_64`: These are assembly optimizations available with USE_FAST_MATH. diff --git a/IDE/HEXAGON/README.md b/IDE/HEXAGON/README.md index 8ac7913db..4cf6ffe17 100644 --- a/IDE/HEXAGON/README.md +++ b/IDE/HEXAGON/README.md @@ -71,5 +71,5 @@ benchmarking using threads on aDSP 20000 verifies on 4 threads took 23.261446 seconds benchmarking 1 thread on cDSP -5000 verifies on 1 threads took 18.560995 seconds +5000 verifies on 1 threads took 18.560995 seconds diff --git a/IDE/HEXAGON/ecc-verify-benchmark.c b/IDE/HEXAGON/ecc-verify-benchmark.c index d000925a5..bc88c3881 100644 --- a/IDE/HEXAGON/ecc-verify-benchmark.c +++ b/IDE/HEXAGON/ecc-verify-benchmark.c @@ -32,14 +32,14 @@ #define MAX_TIMES 5000 #define MAX_BLOCK_SIZE 1024 -#include +#include -static double get_time() -{ - struct timeval tv; - gettimeofday(&tv, 0); - return (double)tv.tv_sec + (double)tv.tv_usec / 1000000; -} +static double get_time() +{ + struct timeval tv; + gettimeofday(&tv, 0); + return (double)tv.tv_sec + (double)tv.tv_usec / 1000000; +} /* software version */ diff --git a/IDE/IAR-EWARM/embOS/SAMV71_XULT/embOS_wolfcrypt_test_SAMV71_XULT/Application/runWolfcryptTests.c b/IDE/IAR-EWARM/embOS/SAMV71_XULT/embOS_wolfcrypt_test_SAMV71_XULT/Application/runWolfcryptTests.c index 36937deef..07fd6c5bc 100644 --- a/IDE/IAR-EWARM/embOS/SAMV71_XULT/embOS_wolfcrypt_test_SAMV71_XULT/Application/runWolfcryptTests.c +++ b/IDE/IAR-EWARM/embOS/SAMV71_XULT/embOS_wolfcrypt_test_SAMV71_XULT/Application/runWolfcryptTests.c @@ -26,4 +26,4 @@ int main(void) { OS_CREATETASK(&WLFTASK, "Tests task", wolfTask, 100, WLFSTACK); OS_Start(); /* Start the OS */ return 0; -} \ No newline at end of file +} diff --git a/IDE/INTIME-RTOS/libwolfssl.c b/IDE/INTIME-RTOS/libwolfssl.c index 94d39bb24..b92658eaf 100644 --- a/IDE/INTIME-RTOS/libwolfssl.c +++ b/IDE/INTIME-RTOS/libwolfssl.c @@ -4,7 +4,7 @@ #include BOOLEAN __stdcall RslMain( RTHANDLE hModule, - DWORD ul_reason_for_call, + DWORD ul_reason_for_call, LPVOID lpReserved ) { diff --git a/IDE/MDK-ARM/MDK-ARM/wolfSSL/Retarget.c b/IDE/MDK-ARM/MDK-ARM/wolfSSL/Retarget.c index 573247983..dadffe9dc 100644 --- a/IDE/MDK-ARM/MDK-ARM/wolfSSL/Retarget.c +++ b/IDE/MDK-ARM/MDK-ARM/wolfSSL/Retarget.c @@ -2,7 +2,7 @@ #ifdef HAVE_CONFIG_H #include #endif - + #include #include #include @@ -39,7 +39,7 @@ extern int SER_PutChar (int ch); /*----------------------------------------------------------------------------- Write character to the Serial Port *----------------------------------------------------------------------------*/ -int sendchar (int c) +int sendchar (int c) { if (c == '\n') { SER_PutChar ('\r'); @@ -52,7 +52,7 @@ int sendchar (int c) /*----------------------------------------------------------------------------- Read character from the Serial Port *----------------------------------------------------------------------------*/ -int getkey (void) +int getkey (void) { int ch = SER_GetChar(); #if defined (HAVE_KEIL_RTX) @@ -67,7 +67,7 @@ int getkey (void) /*--------------------------- _ttywrch ---------------------------------------*/ -void _ttywrch (int ch) +void _ttywrch (int ch) { #ifdef STDIO sendchar (ch); @@ -76,28 +76,28 @@ void _ttywrch (int ch) /*--------------------------- _sys_open --------------------------------------*/ #ifndef NO_FILESYSTEM -static int KEIL_FS_open(const char *name, int openmode) +static int KEIL_FS_open(const char *name, int openmode) { int i ; int ret ; #define PATHSIZE 100 char path[PATHSIZE] ; char *p ; - + if(strlen(name) > PATHSIZE)return(-1) ; - + for(i = 0; i<= strlen(name); i++) { if(name[i] == '/')path[i] = '\\' ; else path[i] = name[i] ; - } + } if(path[0] == '.' && path[1] == '\\') p = path + 2 ; else p = path ; ret = __sys_open (p, openmode) ; - + return(ret) ; } #endif -FILEHANDLE _sys_open (const char *name, int openmode) +FILEHANDLE _sys_open (const char *name, int openmode) { /* Register standard Input Output devices. */ if (strcmp(name, "STDIN") == 0) { @@ -118,7 +118,7 @@ FILEHANDLE _sys_open (const char *name, int openmode) /*--------------------------- _sys_close -------------------------------------*/ -int _sys_close (FILEHANDLE fh) +int _sys_close (FILEHANDLE fh) { if (fh > 0x8000) { return (0); @@ -132,7 +132,7 @@ int _sys_close (FILEHANDLE fh) /*--------------------------- _sys_write -------------------------------------*/ -int _sys_write (FILEHANDLE fh, const U8 *buf, U32 len, int mode) +int _sys_write (FILEHANDLE fh, const U8 *buf, U32 len, int mode) { #ifdef STDIO if (fh == STDOUT) { @@ -155,7 +155,7 @@ int _sys_write (FILEHANDLE fh, const U8 *buf, U32 len, int mode) /*--------------------------- _sys_read --------------------------------------*/ -int _sys_read (FILEHANDLE fh, U8 *buf, U32 len, int mode) +int _sys_read (FILEHANDLE fh, U8 *buf, U32 len, int mode) { #ifdef STDIO if (fh == STDIN) { @@ -183,7 +183,7 @@ int _sys_read (FILEHANDLE fh, U8 *buf, U32 len, int mode) /*--------------------------- _sys_istty -------------------------------------*/ -int _sys_istty (FILEHANDLE fh) +int _sys_istty (FILEHANDLE fh) { if (fh > 0x8000) { return (1); @@ -193,7 +193,7 @@ int _sys_istty (FILEHANDLE fh) /*--------------------------- _sys_seek --------------------------------------*/ -int _sys_seek (FILEHANDLE fh, long pos) +int _sys_seek (FILEHANDLE fh, long pos) { if (fh > 0x8000) { return (-1); @@ -207,7 +207,7 @@ int _sys_seek (FILEHANDLE fh, long pos) /*--------------------------- _sys_ensure ------------------------------------*/ -int _sys_ensure (FILEHANDLE fh) +int _sys_ensure (FILEHANDLE fh) { if (fh > 0x8000) { return (-1); @@ -221,7 +221,7 @@ int _sys_ensure (FILEHANDLE fh) /*--------------------------- _sys_flen --------------------------------------*/ -long _sys_flen (FILEHANDLE fh) +long _sys_flen (FILEHANDLE fh) { if (fh > 0x8000) { return (0); @@ -236,21 +236,21 @@ long _sys_flen (FILEHANDLE fh) /*--------------------------- _sys_tmpnam ------------------------------------*/ -int _sys_tmpnam (char *name, int sig, unsigned maxlen) +int _sys_tmpnam (char *name, int sig, unsigned maxlen) { return (1); } /*--------------------------- _sys_command_string ----------------------------*/ -char *_sys_command_string (char *cmd, int len) +char *_sys_command_string (char *cmd, int len) { return (cmd); } /*--------------------------- _sys_exit --------------------------------------*/ -void _sys_exit (int return_code) +void _sys_exit (int return_code) { #ifdef WOLFSSL_MDK_SHELL return ; @@ -258,6 +258,6 @@ void _sys_exit (int return_code) /* Endless loop. */ while (1); #endif - + } diff --git a/IDE/MDK-ARM/MDK-ARM/wolfSSL/cert_data.h b/IDE/MDK-ARM/MDK-ARM/wolfSSL/cert_data.h index d06afdd1d..f63a58eb0 100644 --- a/IDE/MDK-ARM/MDK-ARM/wolfSSL/cert_data.h +++ b/IDE/MDK-ARM/MDK-ARM/wolfSSL/cert_data.h @@ -8,8 +8,8 @@ extern int sizeof_client_key_der_1024 ; extern const unsigned char client_cert_der_1024[] ; extern int sizeof_client_cert_der_1024 ; /* ./certs/1024/dh1024.der, 1024-bit */ -extern const unsigned char dh_key_der_1024[] ; -extern int sizeof_dh_key_der_1024 ; +extern const unsigned char dh_key_der_1024[] ; +extern int sizeof_dh_key_der_1024 ; /* ./certs/1024/dsa1024.der, 1024-bit */ extern const unsigned char dsa_key_der_1024[] ; extern int sizeof_dsa_key_der_1024 ; diff --git a/IDE/MPLABX16/user_settings.h b/IDE/MPLABX16/user_settings.h index d4754db89..174551e95 100644 --- a/IDE/MPLABX16/user_settings.h +++ b/IDE/MPLABX16/user_settings.h @@ -51,7 +51,7 @@ extern "C" { #undef FP_MAX_BITS #define FP_MAX_BITS 2048 #else - #define WOLFSSL_SP_MATH + #define WOLFSSL_SP_MATH #define WOLFSSL_SP_SMALL #define WOLFSSL_SP_MATH_ALL #define SP_INT_BITS 256 @@ -162,7 +162,7 @@ extern "C" { /* #undef WOLFSSL_AES_DIRECT #define WOLFSSL_AES_DIRECT */ - + #undef NO_AES_CBC #define NO_AES_CBC #else @@ -301,7 +301,7 @@ extern "C" { #define NO_PKCS8 #define WOLFSSL_NO_PEM - + /* ------------------------------------------------------------------------- */ /* Enable Features */ /* ------------------------------------------------------------------------- */ @@ -397,7 +397,7 @@ extern "C" { #undef NO_PWDBASED #define NO_PWDBASED -#undef NO_MD5 +#undef NO_MD5 #define NO_MD5 #undef NO_DES3 diff --git a/IDE/MQX/README-jp.md b/IDE/MQX/README-jp.md index 093e98b6b..649e7c65d 100644 --- a/IDE/MQX/README-jp.md +++ b/IDE/MQX/README-jp.md @@ -26,4 +26,3 @@ CC: コンパイラコマンド AR: ARコマンド WOLF_ROOT: Makefileの格納位置を変える場合はこの定義を変更してください - \ No newline at end of file diff --git a/IDE/MQX/include.am b/IDE/MQX/include.am index 27687d33e..deb5ebc76 100644 --- a/IDE/MQX/include.am +++ b/IDE/MQX/include.am @@ -8,4 +8,4 @@ EXTRA_DIST+= IDE/MQX/README-jp.md EXTRA_DIST+= IDE/MQX/README.md EXTRA_DIST+= IDE/MQX/server-tls.c EXTRA_DIST+= IDE/MQX/user_config.h -EXTRA_DIST+= IDE/MQX/user_settings.h \ No newline at end of file +EXTRA_DIST+= IDE/MQX/user_settings.h diff --git a/IDE/MQX/server-tls.c b/IDE/MQX/server-tls.c index ae2c7ae94..33e26a926 100644 --- a/IDE/MQX/server-tls.c +++ b/IDE/MQX/server-tls.c @@ -193,4 +193,4 @@ int main() wolfSSL_Cleanup(); /* Cleanup the wolfSSL environment */ close(sockfd); /* Close the socket listening for clients */ return 0; /* Return reporting a success */ -} \ No newline at end of file +} diff --git a/IDE/MQX/user_config.h b/IDE/MQX/user_config.h index d66e53235..81bbf4e49 100644 --- a/IDE/MQX/user_config.h +++ b/IDE/MQX/user_config.h @@ -1 +1 @@ -#define MQX_CPU PSP_CPU_MK60DN512Z \ No newline at end of file +#define MQX_CPU PSP_CPU_MK60DN512Z diff --git a/IDE/MSVS-2019-AZSPHERE/client/client.c b/IDE/MSVS-2019-AZSPHERE/client/client.c index d758a39fd..c206ce217 100644 --- a/IDE/MSVS-2019-AZSPHERE/client/client.c +++ b/IDE/MSVS-2019-AZSPHERE/client/client.c @@ -1,4 +1,4 @@ -/* client.c +/* client.c * * Copyright (C) 2006-2024 wolfSSL Inc. * diff --git a/IDE/MSVS-2019-AZSPHERE/server/server.c b/IDE/MSVS-2019-AZSPHERE/server/server.c index dbf49efed..5ffe865a4 100644 --- a/IDE/MSVS-2019-AZSPHERE/server/server.c +++ b/IDE/MSVS-2019-AZSPHERE/server/server.c @@ -1,4 +1,4 @@ -/* server.c +/* server.c * * Copyright (C) 2006-2024 wolfSSL Inc. * diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/avnet_mt3620_sk/inc/hw/template_appliance.h b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/avnet_mt3620_sk/inc/hw/template_appliance.h index cb3721ec4..6cca8f601 100644 --- a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/avnet_mt3620_sk/inc/hw/template_appliance.h +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/avnet_mt3620_sk/inc/hw/template_appliance.h @@ -1,4 +1,4 @@ -/* template_appliance.h +/* template_appliance.h * * Copyright (C) 2006-2024 wolfSSL Inc. * diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/mt3620_rdb/inc/hw/template_appliance.h b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/mt3620_rdb/inc/hw/template_appliance.h index 974d2d8e1..403300de2 100644 --- a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/mt3620_rdb/inc/hw/template_appliance.h +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/mt3620_rdb/inc/hw/template_appliance.h @@ -1,4 +1,4 @@ -/ * Copyright (C) 2006-2024 wolfSSL Inc. +/ * Copyright (C) 2006-2024 wolfSSL Inc. * * This file is part of wolfSSL. * diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/seeed_mt3620_mdb/inc/hw/template_appliance.h b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/seeed_mt3620_mdb/inc/hw/template_appliance.h index ad9cab58b..df84198e9 100644 --- a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/seeed_mt3620_mdb/inc/hw/template_appliance.h +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/seeed_mt3620_mdb/inc/hw/template_appliance.h @@ -1,4 +1,4 @@ -/* template_appliance.h +/* template_appliance.h * * Copyright (C) 2006-2024 wolfSSL Inc. * diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/applibs_versions.h b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/applibs_versions.h index 2afdfcf3e..4078fb7a5 100644 --- a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/applibs_versions.h +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/applibs_versions.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once /// /// This identifier should be defined before including any of the networking-related header files. diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/main.c b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/main.c index acd866826..0d95b29e8 100644 --- a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/main.c +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/main.c @@ -1,4 +1,4 @@ -/* main.c +/* main.c * * Copyright (C) 2006-2024 wolfSSL Inc. * diff --git a/IDE/PlatformIO/examples/wolfssl_benchmark/README.md b/IDE/PlatformIO/examples/wolfssl_benchmark/README.md index c602facfe..6505ecbb5 100644 --- a/IDE/PlatformIO/examples/wolfssl_benchmark/README.md +++ b/IDE/PlatformIO/examples/wolfssl_benchmark/README.md @@ -9,9 +9,9 @@ For general information on [wolfSSL examples for Espressif](../README.md), see t ## Example Output -Note the default wolfSSL `user_settings.h` is configured by default to be the most +Note the default wolfSSL `user_settings.h` is configured by default to be the most compatible across the widest ranges of targets. Contact wolfSSL at support@wolfssl.com -for help in optimizing for your particular application, or see the +for help in optimizing for your particular application, or see the [docs](https://www.wolfssl.com/documentation/manuals/wolfssl/index.html). ``` @@ -59,7 +59,7 @@ I (323) cpu_start: Compile time: May 17 2024 19:42:07 I (329) cpu_start: ELF file SHA256: eebe816ce... I (334) cpu_start: ESP-IDF: 5.2.1 I (339) cpu_start: Min chip rev: v0.0 -I (344) cpu_start: Max chip rev: v3.99 +I (344) cpu_start: Max chip rev: v3.99 I (349) cpu_start: Chip rev: v1.0 I (354) heap_init: Initializing. RAM available for dynamic allocation: I (361) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM @@ -83,7 +83,7 @@ W (449) esp32_util: Warning: old cmake, user_settings.h location unknown. I (457) esp32_util: LIBWOLFSSL_VERSION_STRING = 5.7.0 I (463) esp32_util: LIBWOLFSSL_VERSION_HEX = 5007000 I (468) esp32_util: Stack HWM: 9204 -I (472) esp32_util: +I (472) esp32_util: I (475) esp32_util: Macro Name Defined Not Defined I (482) esp32_util: ------------------------- --------- ------------- I (489) esp32_util: NO_ESPIDF_DEFAULT........ X @@ -115,7 +115,7 @@ I (638) esp32_util: FREERTOS................. X I (643) esp32_util: NO_WOLFSSL_DIR........... X I (649) esp32_util: WOLFSSL_NO_CURRDIR....... X I (654) esp32_util: WOLFSSL_LWIP............. X -I (660) esp32_util: +I (660) esp32_util: I (663) esp32_util: Compiler Optimization: Default I (668) esp32_util: I (671) esp32_util: CONFIG_IDF_TARGET = esp32 diff --git a/IDE/PlatformIO/examples/wolfssl_test/README.md b/IDE/PlatformIO/examples/wolfssl_test/README.md index d67d76111..86058cd57 100644 --- a/IDE/PlatformIO/examples/wolfssl_test/README.md +++ b/IDE/PlatformIO/examples/wolfssl_test/README.md @@ -10,9 +10,9 @@ For general information on [wolfSSL examples for Espressif](../README.md), see t ## Example Output -Note the default wolfSSL `user_settings.h` is configured by default to be the most +Note the default wolfSSL `user_settings.h` is configured by default to be the most compatible across the widest ranges of targets. Contact wolfSSL at support@wolfssl.com -for help in optimizing for your particular application, or see the +for help in optimizing for your particular application, or see the [docs](https://www.wolfssl.com/documentation/manuals/wolfssl/index.html). @@ -61,7 +61,7 @@ I (511) cpu_start: Compile time: May 17 2024 19:31:47 I (517) cpu_start: ELF file SHA256: 40b2541a0... I (523) cpu_start: ESP-IDF: 5.2.1 I (528) cpu_start: Min chip rev: v0.0 -I (532) cpu_start: Max chip rev: v3.99 +I (532) cpu_start: Max chip rev: v3.99 I (537) cpu_start: Chip rev: v1.0 I (542) heap_init: Initializing. RAM available for dynamic allocation: I (549) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM diff --git a/IDE/QNX/README.md b/IDE/QNX/README.md index fb79abf6b..4a283f158 100644 --- a/IDE/QNX/README.md +++ b/IDE/QNX/README.md @@ -17,7 +17,7 @@ source ~/qnx700/qnxsdp-env.sh make ``` -Once the wolfSSL library has been built cd to IDE/QNX/CAAM-DRIVER and run "make". This will produce the wolfCrypt resource manager. It should be started on the device with root permissions. Once wolfCrypt is running on the device with root permissions then any user with access to open a connection to /dev/wolfCrypt can make use of the driver. +Once the wolfSSL library has been built cd to IDE/QNX/CAAM-DRIVER and run "make". This will produce the wolfCrypt resource manager. It should be started on the device with root permissions. Once wolfCrypt is running on the device with root permissions then any user with access to open a connection to /dev/wolfCrypt can make use of the driver. ### Momentics To build in momentics IDE: diff --git a/IDE/RISCV/SIFIVE-HIFIVE1/README.md b/IDE/RISCV/SIFIVE-HIFIVE1/README.md index 5e1183dea..5b3f3ed89 100644 --- a/IDE/RISCV/SIFIVE-HIFIVE1/README.md +++ b/IDE/RISCV/SIFIVE-HIFIVE1/README.md @@ -44,7 +44,7 @@ The `IDE/RISCV/SIFIVE-HIFIVE1/main.c` example application provides a function to $ export WOLFSSL_SRC_DIR=~/wolfssl ``` -5. Setup your riscv64 compiler +5. Setup your riscv64 compiler ``` $ export RISCV_OPENOCD_PATH=/opt/riscv-openocd @@ -64,7 +64,7 @@ You can build from source or create a static library. $ cd freedom-e-sdk $ make PROGRAM=wolfcrypt TARGET=sifive-hifive1-revb CONFIGURATION=debug clean software upload ``` -This example cleans, builds and uploads the software on the sifive-hifive1-revb target but you can also combine and build for any of the supported targets. +This example cleans, builds and uploads the software on the sifive-hifive1-revb target but you can also combine and build for any of the supported targets. Review the test results on the target console. diff --git a/IDE/RISCV/SIFIVE-HIFIVE1/main.c b/IDE/RISCV/SIFIVE-HIFIVE1/main.c index 3431232af..eeaf4e29c 100644 --- a/IDE/RISCV/SIFIVE-HIFIVE1/main.c +++ b/IDE/RISCV/SIFIVE-HIFIVE1/main.c @@ -35,7 +35,7 @@ #ifndef NO_CRYPT_BENCHMARK -/*-specs=nano.specs doesn’t include support for floating point in printf()*/ +/*-specs=nano.specs doesn't include support for floating point in printf()*/ asm (".global _printf_float"); #ifndef RTC_FREQ diff --git a/IDE/RISCV/SIFIVE-UNLEASHED/README.md b/IDE/RISCV/SIFIVE-UNLEASHED/README.md index 64f88ae81..c2e1c1ba6 100644 --- a/IDE/RISCV/SIFIVE-UNLEASHED/README.md +++ b/IDE/RISCV/SIFIVE-UNLEASHED/README.md @@ -6,7 +6,7 @@ Instructions for cross-compiling and running wolfSSL on the HiFive Unleashed boa SiFive Freedom U540 SoC at 1.5GHz -Getting started guide: +Getting started guide: https://sifive.cdn.prismic.io/sifive%2Ffa3a584a-a02f-4fda-b758-a2def05f49f9_hifive-unleashed-getting-started-guide-v1p1.pdf Make sure your ethernet is attached and power up board. You can connecct the micro-usb to get a UART console that will display the DHCP IP address. Default user is "root" and login password is "sifive". diff --git a/IDE/ROWLEY-CROSSWORKS-ARM/README.md b/IDE/ROWLEY-CROSSWORKS-ARM/README.md index beb941645..fc305b631 100644 --- a/IDE/ROWLEY-CROSSWORKS-ARM/README.md +++ b/IDE/ROWLEY-CROSSWORKS-ARM/README.md @@ -4,11 +4,11 @@ This directory contains a CrossWorks solution named wolfssl.hzp. Inside are three projects: -1. libwolfssl: +1. libwolfssl: This generates a library file named "libwolfssl_ARM_Debug/libwolfssl_v7em_t_le_eabi.a" -2. benchmark: +2. benchmark: This is a sample benchmark application. It runs the "benchmark_test" suite repeatedly until a failure occurs. -3. test: +3. test: This is a sample test application. It runs "wolfcrypt_test" suite suite repeatedly until a failure occurs. # Prerequisites @@ -21,7 +21,7 @@ All hardware functions are defined in `kinetis_hw.c` and are currently setup for To create support for a new ARM microcontroller the functions in `hw.h` will need to be implemented. -Also you will need to configure the ARM Architecture and ARM Core Type in the "Solution Properties" -> "ARM". +Also you will need to configure the ARM Architecture and ARM Core Type in the "Solution Properties" -> "ARM". Also the "Target Processor" in each of the projects ("Project Properties" -> "Target Processor") ## Hardware Crypto Acceleration diff --git a/IDE/Renesas/cs+/Projects/common/user_settings.h b/IDE/Renesas/cs+/Projects/common/user_settings.h index b03faa768..c4aeaa786 100644 --- a/IDE/Renesas/cs+/Projects/common/user_settings.h +++ b/IDE/Renesas/cs+/Projects/common/user_settings.h @@ -25,11 +25,11 @@ #define NO_DEV_RANDOM #define USE_CERT_BUFFERS_2048 #define SIZEOF_LONG_LONG 8 -#define NO_WOLFSSL_DIR +#define NO_WOLFSSL_DIR #define WOLFSSL_NO_CURRDIR #define WOLFSSL_LOG_PRINTF #define NO_WOLFSSL_STUB -#define NO_DYNAMIC_ARRAY /* for compilers not allowed dynamic size array */ +#define NO_DYNAMIC_ARRAY /* for compilers not allowed dynamic size array */ #define WOLFSSL_SMALL_STACK #define WOLFSSL_DH_CONST diff --git a/IDE/Renesas/cs+/Projects/common/wolfssl_dummy.c b/IDE/Renesas/cs+/Projects/common/wolfssl_dummy.c index 3c425b357..f6d9abaa7 100644 --- a/IDE/Renesas/cs+/Projects/common/wolfssl_dummy.c +++ b/IDE/Renesas/cs+/Projects/common/wolfssl_dummy.c @@ -51,10 +51,10 @@ int strncasecmp(const char *s1, const char * s2, unsigned int sz) return 1; } } - return 0; + return 0; } - -void abort(void) + +void abort(void) { while(1); } diff --git a/IDE/Renesas/cs+/Projects/t4_demo/wolf_main.c b/IDE/Renesas/cs+/Projects/t4_demo/wolf_main.c index cd7f74b85..64f5aff13 100644 --- a/IDE/Renesas/cs+/Projects/t4_demo/wolf_main.c +++ b/IDE/Renesas/cs+/Projects/t4_demo/wolf_main.c @@ -40,7 +40,7 @@ static void timeTick(void *pdata) double current_time(int reset) { if(reset) tick = 0 ; - return ((double)tick/FREQ) ; + return ((double)tick/FREQ) ; } #define ARG_SZ 256 @@ -50,10 +50,10 @@ static int get_arg(func_args *args) int i; char *arg = argBuff; args->argc = 0; - + for(i=0; i : client\n$ "); c = getchar(); - + switch(c) { case 't': get_arg(&args); @@ -95,14 +95,14 @@ void wolfSSL_main() wolfcrypt_test(&args); printf("End wolfCrypt Test\n"); break; - + case 'b': get_arg(&args); printf("Start wolfCrypt Benchmark\n"); benchmark_test(NULL); printf("End wolfCrypt Benchmark\n"); break; - + case 'c': if(get_arg(&args) < 0) break; @@ -110,7 +110,7 @@ void wolfSSL_main() wolfSSL_TLS_client(wolfSSL_cl_ctx, &args); printf("End TLS Client\n"); break; - + case 's': if(get_arg(&args) < 0) break; diff --git a/IDE/Renesas/cs+/Projects/test/test_main.c b/IDE/Renesas/cs+/Projects/test/test_main.c index dcb490acd..c92fdddfb 100644 --- a/IDE/Renesas/cs+/Projects/test/test_main.c +++ b/IDE/Renesas/cs+/Projects/test/test_main.c @@ -45,7 +45,7 @@ void wolfcrypt_test(func_args args); void main(void) { func_args args = { 1 }; - + printf("Start wolfCrypt Test\n"); wolfcrypt_test(args); printf("End wolfCrypt Test\n"); diff --git a/IDE/Renesas/e2studio/Projects/common/user_settings.h b/IDE/Renesas/e2studio/Projects/common/user_settings.h index 15ebd73b3..01b01dbc3 100644 --- a/IDE/Renesas/e2studio/Projects/common/user_settings.h +++ b/IDE/Renesas/e2studio/Projects/common/user_settings.h @@ -27,7 +27,7 @@ #define USE_CERT_BUFFERS_2048 #define WOLFSSL_USER_CURRTIME #define SIZEOF_LONG_LONG 8 -#define NO_WOLFSSL_DIR +#define NO_WOLFSSL_DIR #define WOLFSSL_NO_CURRDIR #define NO_FILESYSTEM #define WOLFSSL_LOG_PRINTF diff --git a/IDE/Renesas/e2studio/Projects/test/src/wolf_server.c b/IDE/Renesas/e2studio/Projects/test/src/wolf_server.c index 206e91d77..615ef60a3 100644 --- a/IDE/Renesas/e2studio/Projects/test/src/wolf_server.c +++ b/IDE/Renesas/e2studio/Projects/test/src/wolf_server.c @@ -124,7 +124,7 @@ void wolfSSL_TLS_server_init(byte doClientCheck) #if !defined(NO_FILESYSTEM) ret = wolfSSL_CTX_use_PrivateKey_file(server_ctx, key, 0); #else - ret = wolfSSL_CTX_use_PrivateKey_buffer(server_ctx, key, sizeof_key, + ret = wolfSSL_CTX_use_PrivateKey_buffer(server_ctx, key, sizeof_key, SSL_FILETYPE_ASN1); #endif if (ret != SSL_SUCCESS) { @@ -138,20 +138,20 @@ void wolfSSL_TLS_server_init(byte doClientCheck) wolfSSL_CTX_set_verify(server_ctx, WOLFSSL_VERIFY_PEER | WOLFSSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0); #if !defined(NO_FILESYSTEM) - if (wolfSSL_CTX_load_verify_locations(server_ctx, clientCert, 0) + if (wolfSSL_CTX_load_verify_locations(server_ctx, clientCert, 0) != WOLFSSL_SUCCESS) #else - if (wolfSSL_CTX_load_verify_buffer(server_ctx, clientCert, + if (wolfSSL_CTX_load_verify_buffer(server_ctx, clientCert, sizeof_clicert, SSL_FILETYPE_ASN1) != SSL_SUCCESS) #endif printf("can't load ca file, Please run from wolfSSL home dir\n"); } - + /* Register callbacks */ wolfSSL_SetIORecv(server_ctx, my_IORecv); wolfSSL_SetIOSend(server_ctx, my_IOSend); - + } void wolfSSL_TLS_server( ) diff --git a/IDE/Renesas/e2studio/Projects/tools/generate_rsa_keypair.sh b/IDE/Renesas/e2studio/Projects/tools/generate_rsa_keypair.sh index ac9def4cc..c5256060d 100755 --- a/IDE/Renesas/e2studio/Projects/tools/generate_rsa_keypair.sh +++ b/IDE/Renesas/e2studio/Projects/tools/generate_rsa_keypair.sh @@ -7,7 +7,7 @@ function usage(){ Description: Generate 2048 bit Rsa key pair and Display modulus and public exponent - + Options: -g generate rsa key pair, default on -s only show modulus and public exponent @@ -39,7 +39,7 @@ FLAG_S="off" if [ $FLAG_G = "on" ]; then # generate 2048bit Rsa private key - openssl genrsa 2048 2> /dev/null > private-key.pem + openssl genrsa 2048 2> /dev/null > private-key.pem # expose public key openssl rsa -in private-key.pem -pubout -out public-key.pem 2> /dev/null fi diff --git a/IDE/Renesas/e2studio/RA6M3/README_APRA6M_en.md b/IDE/Renesas/e2studio/RA6M3/README_APRA6M_en.md index 0a68c6565..43bf3b91d 100644 --- a/IDE/Renesas/e2studio/RA6M3/README_APRA6M_en.md +++ b/IDE/Renesas/e2studio/RA6M3/README_APRA6M_en.md @@ -84,9 +84,9 @@ The following steps explain how to generate the missing files and where to place (Click the drop-down arrow to the left of the project name.) + Select and Copy the following folders/files inside dummy_library - `ra/` - `ra_gen/` - `ra_cfg/` + `ra/` + `ra_gen/` + `ra_cfg/` `script/` + Paste the copied folders/files into wolfSSL_RA6M3G @@ -108,7 +108,7 @@ The following steps explain how to generate the missing files and where to place + Select and Copy the following folder inside dummy_app - `src/` + `src/` `script/` + Paste the copied folders into `./IDE/Renesas/e2studio/RA6M3/common/ra6m3g/` @@ -132,17 +132,17 @@ Right-Click each Project and select Build. ### Run wolfCrypt Test and Benchmark -1.) Right-Click the Project name. -2.) Select `Debug As` -> `Renesas GDB Hardware Debugging` -3.) Select J-Link ARM. Click OK. +1.) Right-Click the Project name. +2.) Select `Debug As` -> `Renesas GDB Hardware Debugging` +3.) Select J-Link ARM. Click OK. 4.) Select R7Fa6M3AH. Click OK. ### Run the wolfSSL TLS Server Example. -1.) Right-Click the Project name. -2.) Select `Debug As` -> `Renesas GDB Hardware Debugging` -3.) Select J-Link ARM. Click OK. -4.) Select R7Fa6M3AH. Click OK. +1.) Right-Click the Project name. +2.) Select `Debug As` -> `Renesas GDB Hardware Debugging` +3.) Select J-Link ARM. Click OK. +4.) Select R7Fa6M3AH. Click OK. 5.) Run the following wolfSSL example client command inside the base of the wolfssl directory. ``` diff --git a/IDE/Renesas/e2studio/RA6M3/README_APRA6M_jp.md b/IDE/Renesas/e2studio/RA6M3/README_APRA6M_jp.md index d3dc23a96..93a543711 100644 --- a/IDE/Renesas/e2studio/RA6M3/README_APRA6M_jp.md +++ b/IDE/Renesas/e2studio/RA6M3/README_APRA6M_jp.md @@ -83,9 +83,9 @@ wolfSSL のプロジェクトファイルは、wolfSSL と wolfCrypt の両方 プロジェクト名横にある矢印マークをクリック + `dummy_library` の以下のフォルダーとファイルを選択 - `ra/` - `ra_gen/` - `ra_cfg/` + `ra/` + `ra_gen/` + `ra_cfg/` `script/` + 選択したフォルダーとファイルを `wolfSSL_RA6M3G`プロジェクトに貼り付け @@ -110,7 +110,7 @@ wolfSSL のプロジェクトファイルは、wolfSSL と wolfCrypt の両方 + `dummy_app`の以下のフォルダーをコピー - `src/` + `src/` `script/` + 選択したフォルダーを`./IDE/Renesas/e2studio/RA6M3/common/ra6m3g/`へコピー diff --git a/IDE/Renesas/e2studio/RA6M4/README.md b/IDE/Renesas/e2studio/RA6M4/README.md index 4ce63ab33..963f2b054 100644 --- a/IDE/Renesas/e2studio/RA6M4/README.md +++ b/IDE/Renesas/e2studio/RA6M4/README.md @@ -4,13 +4,13 @@ wolfSSL for Renesas RA Evaluation Kit (EK-RA6M4) ## Description This directory contains e2studio projects targeted at the Renesas RA 32-bit MCUs. -The example projects include a wolfSSL TLS client. +The example projects include a wolfSSL TLS client. They also include benchmark and cryptography tests for the wolfCrypt library. The wolfssl project contains both the wolfSSL and wolfCrypt libraries. It is built as a `Renesas RA C Library Project` and contains the Renesas RA -configuration. The wolfssl project uses `Secure Cryptography Engine on RA6 Protected Mode` +configuration. The wolfssl project uses `Secure Cryptography Engine on RA6 Protected Mode` as hardware acceleration for cypto and TLS operation. @@ -85,7 +85,7 @@ The wolfssl Project Summary is listed below and is relevant for every project. |:--|:--| |Network Events call vApplicationIPNetworkEventHook|Disable| |Use DHCP|Disable| - + + Save `dummy_library` FSP configuration + Copy configuration.xml and pincfg under `dummy_library` to `wolfSSL_RA6M4` + Open Smart Configurator by clicking copied configuration.xml @@ -105,7 +105,7 @@ The wolfssl Project Summary is listed below and is relevant for every project. + Copy the following folder and file at `dummy_application` to `test_RA6M4`\ script/\ src/sce_tst_thread_entry.c - + + Add `sce_test()` call under /* TODO: add your own code here */ line at sce_tst_thread_entry.c ``` ... @@ -119,7 +119,7 @@ The wolfssl Project Summary is listed below and is relevant for every project. + Download J-Link software from [Segger](https://www.segger.com/downloads/jlink) + Choose `J-Link Software and Documentation Pack` + Copy sample program files below from `Installed SEGGER` folder, `e.g C:\Program Files\SEGGER\JLink\Samples\RTT`, to /path/to/wolfssl/IDE/Reenesas/e2studio/RA6M4/test/src/SEGGER_RTT\ - + SEGGER_RTT.c\ SEGGER_RTT.h\ SEGGER_RTT_Conf.h\ @@ -134,7 +134,7 @@ The wolfssl Project Summary is listed below and is relevant for every project. you can specify "RTT control block" to 0x200232a8 by Address\ OR\ you can specify "RTT control block" to 0x20020000 0x10000 by Search Range - + ## Run Client 1.) Enable TLS_CLIENT definition in wolfssl_demo.h of test_RA6M4 project @@ -175,7 +175,7 @@ $./examples/server/server -b -d -i -c ./certs/server-ecc.pem -k ./certs/ecc-key. You will see the following message on J-LinK RTT Viewer when using RSA sign and verify. ``` - Start Client Example, + Start Client Example, Connecting to 192.168.11.xx [wolfSSL_TLS_client_do(00)][00] Start to connect to the server. @@ -204,7 +204,7 @@ You will see the following message on J-LinK RTT Viewer when using RSA sign and You will see the following message on J-LinK RTT Viewer when using ECDSA sign and verify. ``` - Start Client Example, + Start Client Example, Connecting to 192.168.11.xx [wolfSSL_TLS_client_do(00)][00] Start to connect to the server. @@ -235,7 +235,7 @@ You will see the following message on J-LinK RTT Viewer when using ECDSA sign an ### Run Multi Client Session example 1.) Enable TLS_CLIENT and TLS_MULTITHREAD_TEST definition in wolfssl_demo.h of test_RA6M4 project -2.) Follow [Run Client](#run-client) instruction +2.) Follow [Run Client](#run-client) instruction 3.) Prepare peer wolfssl server @@ -258,7 +258,7 @@ $./examples/server/server -b -d -c -i ./certs/server-ecc.pem -k ./certs/ecc-key. 4.) Run Multi Client Session Example You will see similar following message on J-LinK RTT Viewer when using ECDSA sign and verify. ``` - Start Client Example, + Start Client Example, Connecting to 192.168.11.xx clt_thd_taskA connecting to 11111 port @@ -291,7 +291,7 @@ You will see similar following message on J-LinK RTT Viewer when using ECDSA sig You will see similar following message on J-LinK RTT Viewer when using ECDSA sign and verify. ``` - Start Client Example, + Start Client Example, Connecting to 192.168.11.xx clt_thd_taskA connecting to 11111 port diff --git a/IDE/Renesas/e2studio/RA6M4/include.am b/IDE/Renesas/e2studio/RA6M4/include.am index cd8adec9c..db3f280f3 100644 --- a/IDE/Renesas/e2studio/RA6M4/include.am +++ b/IDE/Renesas/e2studio/RA6M4/include.am @@ -16,4 +16,4 @@ EXTRA_DIST+= IDE/Renesas/e2studio/RA6M4/test/src/common/.gitignore EXTRA_DIST+= IDE/Renesas/e2studio/RA6M4/test/key_data/key_data_sce.c EXTRA_DIST+= IDE/Renesas/e2studio/RA6M4/test/key_data/key_data.h EXTRA_DIST+= IDE/Renesas/e2studio/RA6M4/common/wolfssl_demo.h -EXTRA_DIST+= IDE/Renesas/e2studio/RA6M4/common/user_settings.h \ No newline at end of file +EXTRA_DIST+= IDE/Renesas/e2studio/RA6M4/common/user_settings.h diff --git a/IDE/Renesas/e2studio/RA6M4/test/key_data/key_data_sce.c b/IDE/Renesas/e2studio/RA6M4/test/key_data/key_data_sce.c index aec582f1a..4aea418d3 100644 --- a/IDE/Renesas/e2studio/RA6M4/test/key_data/key_data_sce.c +++ b/IDE/Renesas/e2studio/RA6M4/test/key_data/key_data_sce.c @@ -28,47 +28,47 @@ const st_user_key_block_data_t g_key_block_data = { /* uint8_t encrypted_provisioning_key[R_TSIP_AES_CBC_IV_BYTE_SIZE * 2]; */ { - 0xE7, 0x1C, 0xEB, 0xCA, 0x3A, 0x64, 0x0B, 0xD2, 0xC5, 0xB8, 0xF2, 0xD0, - 0xF7, 0x1B, 0xA9, 0x4A, 0x98, 0xFF, 0xF3, 0x48, 0x81, 0xAD, 0xAF, 0x63, + 0xE7, 0x1C, 0xEB, 0xCA, 0x3A, 0x64, 0x0B, 0xD2, 0xC5, 0xB8, 0xF2, 0xD0, + 0xF7, 0x1B, 0xA9, 0x4A, 0x98, 0xFF, 0xF3, 0x48, 0x81, 0xAD, 0xAF, 0x63, 0x19, 0x24, 0x4B, 0x2B, 0xC0, 0x8B, 0x9C, 0x6B }, /* uint8_t iv[R_TSIP_AES_CBC_IV_BYTE_SIZE]; */ { - 0xD7, 0x97, 0x56, 0x82, 0x5B, 0x4B, 0x7F, 0xB2, 0x1C, 0x1F, 0xEE, 0x85, + 0xD7, 0x97, 0x56, 0x82, 0x5B, 0x4B, 0x7F, 0xB2, 0x1C, 0x1F, 0xEE, 0x85, 0x02, 0xC5, 0xD0, 0xBA }, /* uint8_t encrypted_user_rsa2048_ne_key[R_TSIP_RSA2048_NE_KEY_BYTE_SIZE + 16]; */ { - 0x3F, 0xA5, 0xBE, 0xBF, 0x86, 0xEC, 0x23, 0x37, 0x82, 0x37, 0x71, 0x0C, - 0x83, 0xA7, 0x8E, 0x86, 0xF0, 0x16, 0xD3, 0x7B, 0xF1, 0x25, 0xA4, 0x37, - 0x7A, 0x2D, 0x16, 0xF2, 0xFF, 0x3D, 0xEE, 0x46, 0xE0, 0x05, 0x58, 0x56, + 0x3F, 0xA5, 0xBE, 0xBF, 0x86, 0xEC, 0x23, 0x37, 0x82, 0x37, 0x71, 0x0C, + 0x83, 0xA7, 0x8E, 0x86, 0xF0, 0x16, 0xD3, 0x7B, 0xF1, 0x25, 0xA4, 0x37, + 0x7A, 0x2D, 0x16, 0xF2, 0xFF, 0x3D, 0xEE, 0x46, 0xE0, 0x05, 0x58, 0x56, 0xC2, 0xE7, 0x9D, 0x2C, 0x01, 0x84, 0x59, 0x8E, 0xA8, 0x9E, 0xEE, 0x3F, 0x22, 0x83, 0x68, 0xDA, 0x9E, 0xCE, 0xEA, 0x99, 0xFD, 0xAF, 0xDF, 0x67, - 0x1E, 0x73, 0x25, 0x68, 0xBF, 0x0A, 0xDF, 0xAF, 0xC4, 0x3D, 0xF1, 0xBD, - 0x41, 0xF5, 0xAC, 0xAC, 0xA4, 0x36, 0xF8, 0x96, 0xC0, 0x8C, 0x2F, 0x1A, + 0x1E, 0x73, 0x25, 0x68, 0xBF, 0x0A, 0xDF, 0xAF, 0xC4, 0x3D, 0xF1, 0xBD, + 0x41, 0xF5, 0xAC, 0xAC, 0xA4, 0x36, 0xF8, 0x96, 0xC0, 0x8C, 0x2F, 0x1A, 0x79, 0x75, 0x28, 0xAE, 0x67, 0xC9, 0x5A, 0xDE, 0x2A, 0xB4, 0x99, 0xDB, - 0x8C, 0x25, 0x53, 0x58, 0x8C, 0xDC, 0xA8, 0x0D, 0xFE, 0xEE, 0x0F, 0x6C, - 0x61, 0xE6, 0x43, 0x66, 0xE8, 0x4A, 0xE3, 0xEB, 0xAB, 0xA2, 0x52, 0xE4, - 0x67, 0xC2, 0x9A, 0x57, 0xA4, 0x1F, 0xE0, 0xFC, 0x2B, 0xBE, 0x25, 0xBF, + 0x8C, 0x25, 0x53, 0x58, 0x8C, 0xDC, 0xA8, 0x0D, 0xFE, 0xEE, 0x0F, 0x6C, + 0x61, 0xE6, 0x43, 0x66, 0xE8, 0x4A, 0xE3, 0xEB, 0xAB, 0xA2, 0x52, 0xE4, + 0x67, 0xC2, 0x9A, 0x57, 0xA4, 0x1F, 0xE0, 0xFC, 0x2B, 0xBE, 0x25, 0xBF, 0xF0, 0x70, 0x18, 0x88, 0x93, 0xB7, 0x2F, 0x74, 0xF8, 0xF3, 0x88, 0xB8, - 0xFA, 0x18, 0xBE, 0xC1, 0xB2, 0x24, 0x4B, 0xBC, 0x89, 0x2D, 0xC4, 0x02, - 0xB3, 0x82, 0xEC, 0xDB, 0xC9, 0xF0, 0xA9, 0xC3, 0x30, 0x7C, 0xF5, 0x15, - 0xEB, 0x9B, 0x16, 0x8C, 0x9D, 0xEF, 0x42, 0x8A, 0xCA, 0x5D, 0x28, 0xDF, + 0xFA, 0x18, 0xBE, 0xC1, 0xB2, 0x24, 0x4B, 0xBC, 0x89, 0x2D, 0xC4, 0x02, + 0xB3, 0x82, 0xEC, 0xDB, 0xC9, 0xF0, 0xA9, 0xC3, 0x30, 0x7C, 0xF5, 0x15, + 0xEB, 0x9B, 0x16, 0x8C, 0x9D, 0xEF, 0x42, 0x8A, 0xCA, 0x5D, 0x28, 0xDF, 0x68, 0xEA, 0xE0, 0xB8, 0x76, 0x7C, 0xBB, 0x4A, 0x51, 0xDD, 0x55, 0x14, - 0xB7, 0xAB, 0xD2, 0xF1, 0xB9, 0x51, 0x19, 0x05, 0x26, 0x87, 0xF7, 0x5C, - 0x69, 0x45, 0x3C, 0x82, 0xE8, 0x82, 0x05, 0x5D, 0x33, 0x8E, 0xD1, 0x42, - 0x71, 0xD6, 0x96, 0xDA, 0xAB, 0xB8, 0xC0, 0x0F, 0xF7, 0x85, 0x8A, 0x12, + 0xB7, 0xAB, 0xD2, 0xF1, 0xB9, 0x51, 0x19, 0x05, 0x26, 0x87, 0xF7, 0x5C, + 0x69, 0x45, 0x3C, 0x82, 0xE8, 0x82, 0x05, 0x5D, 0x33, 0x8E, 0xD1, 0x42, + 0x71, 0xD6, 0x96, 0xDA, 0xAB, 0xB8, 0xC0, 0x0F, 0xF7, 0x85, 0x8A, 0x12, 0xEF, 0xB9, 0x53, 0xFF, 0xD2, 0x95, 0x18, 0x2F, 0x0C, 0xA6, 0x72, 0x98, - 0xC3, 0xC6, 0x9B, 0x95, 0x70, 0x69, 0xC5, 0xB7, 0xD5, 0x24, 0x77, 0x05, - 0xD0, 0x68, 0x85, 0x36, 0xB8, 0x57, 0xE3, 0xED, 0x2E, 0x4D, 0x95, 0xD3, - 0xFC, 0x24, 0x1B, 0x22, 0xFA, 0x43, 0xD8, 0x62, 0x28, 0x57, 0x6B, 0x34, + 0xC3, 0xC6, 0x9B, 0x95, 0x70, 0x69, 0xC5, 0xB7, 0xD5, 0x24, 0x77, 0x05, + 0xD0, 0x68, 0x85, 0x36, 0xB8, 0x57, 0xE3, 0xED, 0x2E, 0x4D, 0x95, 0xD3, + 0xFC, 0x24, 0x1B, 0x22, 0xFA, 0x43, 0xD8, 0x62, 0x28, 0x57, 0x6B, 0x34, 0xBF, 0xD1, 0x63, 0x4B, 0xB5, 0xF5, 0x88, 0xBC, 0xB8, 0x69, 0xF3, 0xB5 }, }; #ifndef USE_CERT_BUFFERS_256 -/* ca-cert.der.sign, - * ca-cert.der signed by RSA2048 PSS with SHA256 +/* ca-cert.der.sign, + * ca-cert.der signed by RSA2048 PSS with SHA256 * This is used for Root Certificate verify by SCE */ const unsigned char ca_cert_der_sign[] = { @@ -102,8 +102,8 @@ const unsigned char ca_cert_der_sign[] = const int sizeof_ca_cert_der_sign = sizeof(ca_cert_der_sign); #else -/* ca-ecc-cert.der.sign, - * ca-ecc-cert.der signed by RSA2048 PSS with SHA256 +/* ca-ecc-cert.der.sign, + * ca-ecc-cert.der signed by RSA2048 PSS with SHA256 * This is used for Root Certificate verify by SCE */ const unsigned char ca_ecc_cert_der_sign[] = diff --git a/IDE/Renesas/e2studio/RA6M4/test/src/test_main.c b/IDE/Renesas/e2studio/RA6M4/test/src/test_main.c index 5b34a4675..f906e4c2d 100644 --- a/IDE/Renesas/e2studio/RA6M4/test/src/test_main.c +++ b/IDE/Renesas/e2studio/RA6M4/test/src/test_main.c @@ -100,9 +100,9 @@ static int SetScetlsKey() #endif -#endif +#endif return 0; -} +} #endif typedef struct func_args { @@ -142,8 +142,8 @@ void SCE_KeyGeneration(FSPSM_ST *g) if (err == FSP_SUCCESS) g->keyflgs_crypt.bits.aes256_installedkey_set = 1; } - - + + } void Clr_CallbackCtx(FSPSM_ST *g) @@ -239,7 +239,7 @@ void sce_test(void) if ((ret = wolfCrypt_Init()) != 0) { printf("wolfCrypt_Init failed %d\n", ret); } - + #if defined(HAVE_RENESAS_SYNC) && \ defined(HAVE_AES_CBC) @@ -261,14 +261,14 @@ void sce_test(void) printf("Start wolfCrypt Benchmark\n"); benchmark_test(NULL); printf("End wolfCrypt Benchmark\n"); - + /* free */ Clr_CallbackCtx(&guser_PKCbInfo); #elif defined(TLS_CLIENT) #include "hal_data.h" #include "r_sce.h" - + #if defined(WOLFSSL_TLS13) /* TLS1.3 needs RSA_PSS enabled. * SCE doesn't support RSA PSS Padding @@ -353,20 +353,20 @@ void sce_test(void) info[j].log_f = my_Logging_cb; memset(info[j].name, 0, sizeof(info[j].name)); - sprintf(info[j].name, "clt_thd_%s", ((j%2) == 0) ? + sprintf(info[j].name, "clt_thd_%s", ((j%2) == 0) ? "taskA" : "taskB"); printf(" %s connecting to %d port\n", info[j].name, info[j].port); - xReturned = xTaskCreate(wolfSSL_TLS_client_do, info[j].name, + xReturned = xTaskCreate(wolfSSL_TLS_client_do, info[j].name, THREAD_STACK_SIZE, &info[j], 2, NULL); if (xReturned != pdPASS) { printf("Failed to create task\n"); } } - + for(j = i; j < (i+2); j++) { - xSemaphoreGiveFromISR(info[j].xBinarySemaphore, + xSemaphoreGiveFromISR(info[j].xBinarySemaphore, &xHigherPriorityTaskWoken); } diff --git a/IDE/Renesas/e2studio/RA6M4/test/src/wolf_client.c b/IDE/Renesas/e2studio/RA6M4/test/src/wolf_client.c index 10f3a31cb..19c523f6c 100644 --- a/IDE/Renesas/e2studio/RA6M4/test/src/wolf_client.c +++ b/IDE/Renesas/e2studio/RA6M4/test/src/wolf_client.c @@ -72,7 +72,7 @@ static int msg(const char* pname, int l, void TCPInit( ) { BaseType_t fr_status; - + /* FreeRTOS+TCP Ethernet and IP Setup */ fr_status = FreeRTOS_IPInit(ucIPAddress, ucNetMask, @@ -114,14 +114,14 @@ void wolfSSL_TLS_client_init() /* set callback functions for ECC */ wc_sce_set_callbacks(client_ctx); #endif - + #if !defined(NO_FILESYSTEM) if (wolfSSL_CTX_load_verify_locations(client_ctx, cert, 0) != SSL_SUCCESS) { printf("ERROR: can't load \"%s\"\n", cert); return NULL; } #else - if (wolfSSL_CTX_load_verify_buffer(client_ctx, cert, SIZEOF_CERT, + if (wolfSSL_CTX_load_verify_buffer(client_ctx, cert, SIZEOF_CERT, SSL_FILETYPE_ASN1) != SSL_SUCCESS){ printf("ERROR: can't load certificate data\n"); return; @@ -142,16 +142,16 @@ int wolfSSL_TLS_client_do(void *pvParam) socklen_t xSize = sizeof(struct freertos_sockaddr); xSocket_t xClientSocket = NULL; struct freertos_sockaddr xRemoteAddress; - + WOLFSSL_CTX *ctx = (WOLFSSL_CTX *)p->ctx; WOLFSSL *ssl = NULL; const char* pcName = p->name; #define BUFF_SIZE 256 static const char sendBuff[]= "Hello Server\n" ; - + char rcvBuff[BUFF_SIZE] = {0}; - + i = p->id; /* Client Socket Setup */ xRemoteAddress.sin_port = FreeRTOS_htons(p->port); @@ -195,11 +195,11 @@ int wolfSSL_TLS_client_do(void *pvParam) /* Set callback CTX */ #if !defined(TLS_MULTITHREAD_TEST) - + XMEMSET(&guser_PKCbInfo, 0, sizeof(FSPSM_ST)); guser_PKCbInfo.devId = 0; wc_sce_set_callback_ctx(ssl, (void*)&guser_PKCbInfo); - + #else if (p->port - DEFAULT_PORT == 0) { XMEMSET(&guser_PKCbInfo_taskA, 0, sizeof(FSPSM_ST)); @@ -210,7 +210,7 @@ int wolfSSL_TLS_client_do(void *pvParam) wc_sce_set_callback_ctx(ssl, (void*)&guser_PKCbInfo_taskB); } #endif - + #endif /* Attach wolfSSL to the socket */ @@ -219,10 +219,10 @@ int wolfSSL_TLS_client_do(void *pvParam) msg(pcName, i, " Error [%d]: wolfSSL_set_fd.\n",ret); } - msg(pcName, i, " Cipher : %s\n", + msg(pcName, i, " Cipher : %s\n", (p->cipher == NULL) ? "NULL" : p->cipher); /* use specific cipher */ - if (p->cipher != NULL && wolfSSL_set_cipher_list(ssl, p->cipher) + if (p->cipher != NULL && wolfSSL_set_cipher_list(ssl, p->cipher) != WOLFSSL_SUCCESS) { msg(pcName, i, " client can't set cipher list 1"); goto out; @@ -241,7 +241,7 @@ int wolfSSL_TLS_client_do(void *pvParam) wolfSSL_Debugging_OFF(); #endif - if (wolfSSL_write(ssl, sendBuff, (int)strlen(sendBuff)) + if (wolfSSL_write(ssl, sendBuff, (int)strlen(sendBuff)) != (int)strlen(sendBuff)) { msg(pcName, i, " ERROR SSL write: %d\n", wolfSSL_get_error(ssl, 0)); goto out; 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 591ca3ddc..0a819468c 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 @@ -70,7 +70,7 @@ int sce_crypt_sha_multitest(); int sce_crypt_test(); int sce_crypt_sha256_multitest(); void tskSha256_Test1(void *pvParam); - + void Clr_CallbackCtx(FSPSM_ST *g); void SCE_KeyGeneration(FSPSM_ST *g); @@ -111,7 +111,7 @@ static int sce_aes_cbc_test(int prnt, FSPSM_AES_PWKEY aes_key) byte plain[AES_BLOCK_SIZE]; int ret = 0; - WOLFSSL_SMALL_STACK_STATIC const byte msg[] = { + WOLFSSL_SMALL_STACK_STATIC const byte msg[] = { /* "Now is the time for all " w/o trailing 0 */ 0x6e,0x6f,0x77,0x20,0x69,0x73,0x20,0x74, 0x68,0x65,0x20,0x74,0x69,0x6d,0x65,0x20, @@ -125,10 +125,10 @@ static int sce_aes_cbc_test(int prnt, FSPSM_AES_PWKEY aes_key) if (prnt) { printf(" sce_aes_cbc_test() "); } - + ret = wc_AesInit(aes, NULL, devId); if (ret == 0) { - ret = wc_AesSetKey(aes, (byte*)aes_key, + ret = wc_AesSetKey(aes, (byte*)aes_key, AES_BLOCK_SIZE, iv, AES_ENCRYPTION); if (ret == 0) { ret = wc_AesCbcEncrypt(aes, cipher, msg, AES_BLOCK_SIZE); @@ -143,7 +143,7 @@ static int sce_aes_cbc_test(int prnt, FSPSM_AES_PWKEY aes_key) #ifdef HAVE_AES_DECRYPT ret = wc_AesInit(aes, NULL, devId); if (ret == 0) { - ret = wc_AesSetKey(aes, (byte*)aes_key, + ret = wc_AesSetKey(aes, (byte*)aes_key, AES_BLOCK_SIZE, iv, AES_ENCRYPTION); if (ret == 0) ret = wc_AesCbcDecrypt(aes, plain, cipher, AES_BLOCK_SIZE); @@ -161,7 +161,7 @@ static int sce_aes_cbc_test(int prnt, FSPSM_AES_PWKEY aes_key) if (prnt) { RESULT_STR(ret) } - + return ret; } @@ -169,7 +169,7 @@ static void tskAes128_Cbc_Test(void *pvParam) { int ret = 0; Info *p = (Info*)pvParam; - + while (exit_loop == 0) { ret = sce_aes_cbc_test(0, &p->aes_key); vTaskDelay(10/portTICK_PERIOD_MS); @@ -207,7 +207,7 @@ static int sce_aes256_test(int prnt, FSPSM_AES_PWKEY aes_key) if (prnt) printf(" sce_aes256_test() "); - + if (wc_AesInit(enc, NULL, devId) != 0) { ret = -1; goto out; @@ -259,7 +259,7 @@ out: if (prnt) { RESULT_STR(ret) } - + return ret; } @@ -267,7 +267,7 @@ static void tskAes256_Cbc_Test(void *pvParam) { int ret = 0; Info *p = (Info*)pvParam; - + while (exit_loop == 0) { ret = sce_aes256_test(0, &p->aes_key); vTaskDelay(10/portTICK_PERIOD_MS); @@ -289,8 +289,8 @@ static int sce_aesgcm256_test(int prnt, FSPSM_AES_PWKEY aes256_key) Aes enc[1]; Aes dec[1]; FSPSM_ST userContext; - - + + /* * This is Test Case 16 from the document Galois/ * Counter Mode of Operation (GCM) by McGrew and @@ -350,7 +350,7 @@ static int sce_aesgcm256_test(int prnt, FSPSM_AES_PWKEY aes256_key) if (prnt) { printf(" sce_aes256_gcm_test() "); } - + XMEMSET(resultT, 0, sizeof(resultT)); XMEMSET(resultC, 0, sizeof(resultC)); XMEMSET(resultP, 0, sizeof(resultP)); @@ -365,7 +365,7 @@ static int sce_aesgcm256_test(int prnt, FSPSM_AES_PWKEY aes256_key) goto out; } - result = wc_AesGcmSetKey(enc, + result = wc_AesGcmSetKey(enc, (byte*)aes256_key, AES_BLOCK_SIZE*2); if (result != 0) { ret = -3; @@ -374,7 +374,7 @@ static int sce_aesgcm256_test(int prnt, FSPSM_AES_PWKEY aes256_key) /* AES-GCM encrypt and decrypt both use AES encrypt internally */ result = wc_AesGcmEncrypt(enc, resultC, p, sizeof(p), - (byte*)iv1, sizeof(iv1), + (byte*)iv1, sizeof(iv1), resultT, sizeof(resultT), a, sizeof(a)); if (result != 0) { @@ -382,7 +382,7 @@ static int sce_aesgcm256_test(int prnt, FSPSM_AES_PWKEY aes256_key) goto out; } - result = wc_AesGcmSetKey(dec, + result = wc_AesGcmSetKey(dec, (byte*)aes256_key, AES_BLOCK_SIZE*2); if (result != 0) { ret = -7; @@ -407,7 +407,7 @@ static int sce_aesgcm256_test(int prnt, FSPSM_AES_PWKEY aes256_key) XMEMSET(resultC, 0, sizeof(resultC)); XMEMSET(resultP, 0, sizeof(resultP)); - wc_AesGcmSetKey(enc, + wc_AesGcmSetKey(enc, (byte*)aes256_key, AES_BLOCK_SIZE*2); /* AES-GCM encrypt and decrypt both use AES encrypt internally */ result = wc_AesGcmEncrypt(enc, resultC, p, sizeof(p), @@ -420,7 +420,7 @@ static int sce_aesgcm256_test(int prnt, FSPSM_AES_PWKEY aes256_key) } result = wc_AesGcmDecrypt(enc, resultP, resultC, sizeof(p), - iv1, sizeof(iv1), resultT + 1, sizeof(resultT) - 1, + iv1, sizeof(iv1), resultT + 1, sizeof(resultT) - 1, a, sizeof(a)); if (result != 0) { @@ -437,11 +437,11 @@ static int sce_aesgcm256_test(int prnt, FSPSM_AES_PWKEY aes256_key) out: wc_AesFree(enc); wc_AesFree(dec); - + if (prnt) { RESULT_STR(ret) } - + return ret; } @@ -449,7 +449,7 @@ static void tskAes256_Gcm_Test(void *pvParam) { int ret = 0; Info *p = (Info*)pvParam; - + while (exit_loop == 0) { ret = sce_aesgcm256_test(0, &p->aes_key); vTaskDelay(10/portTICK_PERIOD_MS); @@ -471,7 +471,7 @@ static int sce_aesgcm128_test(int prnt, FSPSM_AES_PWKEY aes128_key) Aes enc[1]; Aes dec[1]; FSPSM_ST userContext; - + /* * This is Test Case 16 from the document Galois/ * Counter Mode of Operation (GCM) by McGrew and @@ -565,7 +565,7 @@ static int sce_aesgcm128_test(int prnt, FSPSM_AES_PWKEY aes128_key) ret = -4; goto out; } - + result = wc_AesGcmDecrypt(enc, resultP, resultC, sizeof(c3), iv3, sizeof(iv3), resultT, sizeof(t3), a3, sizeof(a3)); @@ -583,11 +583,11 @@ static int sce_aesgcm128_test(int prnt, FSPSM_AES_PWKEY aes128_key) out: wc_AesFree(enc); wc_AesFree(dec); - + if (prnt) { RESULT_STR(ret) } - + return ret; } @@ -595,7 +595,7 @@ static void tskAes128_Gcm_Test(void *pvParam) { int ret = 0; Info *p = (Info*)pvParam; - + while (exit_loop == 0) { ret = sce_aesgcm128_test(0, &p->aes_key); vTaskDelay(10/portTICK_PERIOD_MS); @@ -622,7 +622,7 @@ static void tskAes128_Gcm_Test(void *pvParam) static int sce_rsa_test(int prnt, int keySize) { int ret = 0; - + RsaKey *key = (RsaKey *)XMALLOC(sizeof *key, NULL, DYNAMIC_TYPE_TMP_BUFFER); WC_RNG rng; const char inStr [] = TEST_STRING; @@ -633,32 +633,32 @@ static int sce_rsa_test(int prnt, int keySize) byte *in2 = NULL; byte *out= NULL; byte *out2 = NULL; - + in = (byte*)XMALLOC(inLen, NULL, DYNAMIC_TYPE_TMP_BUFFER); in2 = (byte*)XMALLOC(inLen, NULL, DYNAMIC_TYPE_TMP_BUFFER); out= (byte*)XMALLOC(outSz, NULL, DYNAMIC_TYPE_TMP_BUFFER); out2 = (byte*)XMALLOC(outSz, NULL, DYNAMIC_TYPE_TMP_BUFFER); - + (void) prnt; - + if (key == NULL || in == NULL || out == NULL || in2 == NULL || out2 == NULL) { ret = -1; goto out; } - + XMEMSET(&rng, 0, sizeof(rng)); XMEMSET(key, 0, sizeof *key); XMEMCPY(in, inStr, inLen); XMEMCPY(in2, inStr2, inLen); XMEMSET(out, 0, outSz); XMEMSET(out2, 0, outSz); - + ret = wc_InitRsaKey_ex(key, NULL, 7890/* fixed devid for TSIP/SCE*/); if (ret != 0) { goto out; } - + if ((ret = wc_InitRng(&rng)) != 0) goto out; @@ -669,7 +669,7 @@ static int sce_rsa_test(int prnt, int keySize) if ((ret = wc_MakeRsaKey(key, keySize, 65537, &rng)) != 0) { goto out; } - + ret = wc_RsaPublicEncrypt(in, inLen, out, outSz, key, &rng); if (ret < 0) { goto out; @@ -695,14 +695,14 @@ out: XFREE(in2, NULL, DYNAMIC_TYPE_TMP_BUFFER); XFREE(out, NULL, DYNAMIC_TYPE_TMP_BUFFER); XFREE(out2, NULL, DYNAMIC_TYPE_TMP_BUFFER); - + return ret; } static int sce_rsa_SignVerify_test(int prnt, int keySize) { int ret = 0; - + RsaKey *key = (RsaKey *)XMALLOC(sizeof *key, NULL, DYNAMIC_TYPE_TMP_BUFFER); WC_RNG rng; const char inStr [] = TEST_STRING; @@ -717,14 +717,14 @@ static int sce_rsa_SignVerify_test(int prnt, int keySize) in = (byte*)XMALLOC(inLen, NULL, DYNAMIC_TYPE_TMP_BUFFER); in2 = (byte*)XMALLOC(inLen, NULL, DYNAMIC_TYPE_TMP_BUFFER); out= (byte*)XMALLOC(outSz, NULL, DYNAMIC_TYPE_TMP_BUFFER); - + (void) prnt; if (key == NULL || in == NULL || out == NULL) { ret = -1; goto out; } - + XMEMSET(&rng, 0, sizeof(rng)); XMEMSET(key, 0, sizeof *key); XMEMCPY(in, inStr, inLen); @@ -734,10 +734,10 @@ static int sce_rsa_SignVerify_test(int prnt, int keySize) if (ret != 0) { goto out; } - + if ((ret = wc_InitRng(&rng)) != 0) goto out; - + if ((ret = wc_RsaSetRNG(key, &rng)) != 0) goto out; @@ -745,7 +745,7 @@ static int sce_rsa_SignVerify_test(int prnt, int keySize) if ((ret = wc_MakeRsaKey(key, keySize, 65537, &rng)) != 0) { goto out; } - + gCbInfo.keyflgs_crypt.bits.message_type = 0; ret = wc_RsaSSL_Sign(in, inLen, out, outSz, key, &rng); if (ret < 0) { @@ -773,7 +773,7 @@ static int sce_rsa_SignVerify_test(int prnt, int keySize) XFREE(in, NULL, DYNAMIC_TYPE_TMP_BUFFER); XFREE(in2, NULL, DYNAMIC_TYPE_TMP_BUFFER); XFREE(out, NULL, DYNAMIC_TYPE_TMP_BUFFER); - + return ret; } #endif @@ -782,45 +782,45 @@ int sce_crypt_test() { int ret = 0; fsp_err_t err; - + Clr_CallbackCtx(&gCbInfo); Clr_CallbackCtx(&gCbInfo_a); - + /* sets wrapped aes key */ gCbInfo.wrapped_key_aes128 = &g_user_aes128_key_index1; gCbInfo.wrapped_key_aes256 = &g_user_aes256_key_index1; /* Aes Key Gen */ SCE_KeyGeneration(&gCbInfo); - + /* Rsa Key Gen */ err = R_SCE_RSA1024_WrappedKeyPairGenerate(&g_wrapped_pair_1024key); if (err == FSP_SUCCESS) { /* sets wrapped rsa 1024 bits key */ - gCbInfo.wrapped_key_rsapri1024 = + gCbInfo.wrapped_key_rsapri1024 = &g_wrapped_pair_1024key.priv_key; gCbInfo.keyflgs_crypt.bits.rsapri1024_installedkey_set = 1; - gCbInfo.wrapped_key_rsapub1024 = + gCbInfo.wrapped_key_rsapub1024 = &g_wrapped_pair_1024key.pub_key; gCbInfo.keyflgs_crypt.bits.rsapub1024_installedkey_set = 1; } - + err = R_SCE_RSA2048_WrappedKeyPairGenerate(&g_wrapped_pair_2048key); if (err == FSP_SUCCESS) { /* sets wrapped rsa 1024 bits key */ - gCbInfo.wrapped_key_rsapri2048 = + gCbInfo.wrapped_key_rsapri2048 = &g_wrapped_pair_2048key.priv_key; gCbInfo.keyflgs_crypt.bits.rsapri2048_installedkey_set = 1; - - gCbInfo.wrapped_key_rsapub2048 = + + gCbInfo.wrapped_key_rsapub2048 = &g_wrapped_pair_2048key.pub_key; gCbInfo.keyflgs_crypt.bits.rsapub2048_installedkey_set = 1; } - + /* Key generation for multi testing */ gCbInfo_a.wrapped_key_aes128 = &g_user_aes128_key_index2; gCbInfo_a.wrapped_key_aes256 = &g_user_aes256_key_index2; SCE_KeyGeneration(&gCbInfo_a); - + ret = wc_CryptoCb_CryptInitRenesasCmn(NULL, &gCbInfo); if ( ret > 0) ret = 0; @@ -868,7 +868,7 @@ int sce_crypt_test() if (ret == 0) { ret = sce_aesgcm128_test(1, &g_user_aes128_key_index1); } - + if (ret == 0) { ret = sce_aesgcm256_test(1, &g_user_aes256_key_index1); } @@ -890,12 +890,12 @@ int sce_crypt_test() sce_crypt_Sha_AesCbcGcm_multitest(); } else ret = -1; - + #if defined(WOLFSSL_RENESAS_RSIP_CRYPTONLY) Clr_CallbackCtx(&gCbInfo); Clr_CallbackCtx(&gCbInfo_a); #endif - + return ret; } @@ -944,7 +944,7 @@ int sce_crypt_sha256_multitest() int num = 0; int i; BaseType_t xRet; - + #ifndef NO_SHA256 num+=2; #endif @@ -954,7 +954,7 @@ int sce_crypt_sha256_multitest() exit_semaph = xSemaphoreCreateCounting(num, 0); xRet = pdPASS; - + #ifndef NO_SHA256 xRet = xTaskCreate(tskSha256_Test1, "sha256_test1", STACK_SIZE, NULL, 2, NULL); @@ -976,15 +976,15 @@ int sce_crypt_sha256_multitest() } } } - + vSemaphoreDelete(exit_semaph); - + if ((xRet == pdPASS) && (sha256_multTst_rslt1 == 0 && sha256_multTst_rslt2 == 0)) ret = 0; else ret = -1; - + RESULT_STR(ret) return ret; @@ -1001,7 +1001,7 @@ int sce_crypt_AesCbc_multitest() Info info_aes256_1; Info info_aes256_2; BaseType_t xRet; - + #if defined(HAVE_AES_CBC) && defined(WOLFSSL_AES_128) num+=2; #endif @@ -1014,7 +1014,7 @@ int sce_crypt_AesCbc_multitest() exit_semaph = xSemaphoreCreateCounting(num, 0); xRet = pdPASS; - + #if defined(HAVE_AES_CBC) && defined(WOLFSSL_AES_128) XMEMCPY(&info_aes1.aes_key, &g_user_aes128_key_index1, sizeof(sce_aes_wrapped_key_t)); @@ -1043,7 +1043,7 @@ int sce_crypt_AesCbc_multitest() xRet = xTaskCreate(tskAes256_Cbc_Test, "aes256_cbc_test2", STACK_SIZE, &info_aes256_2, 3, NULL); #endif - + if (xRet == pdPASS) { printf(" Waiting for completing tasks ... "); vTaskDelay(10000/portTICK_PERIOD_MS); @@ -1057,7 +1057,7 @@ int sce_crypt_AesCbc_multitest() } } } - + vSemaphoreDelete(exit_semaph); if ((xRet == pdPASS) && @@ -1082,7 +1082,7 @@ int sce_crypt_AesGcm_multitest() Info info_aes256_1; Info info_aes256_2; BaseType_t xRet; - + #if defined(WOLFSSL_AES_128) num+=2; #endif @@ -1096,7 +1096,7 @@ int sce_crypt_AesGcm_multitest() exit_semaph = xSemaphoreCreateCounting(num, 0); xRet = pdPASS; - + #if defined(WOLFSSL_AES_128) XMEMCPY(&info_aes1.aes_key, &g_user_aes128_key_index1, sizeof(sce_aes_wrapped_key_t)); @@ -1141,7 +1141,7 @@ int sce_crypt_AesGcm_multitest() } } } - + vSemaphoreDelete(exit_semaph); if ((xRet == pdPASS) && @@ -1165,7 +1165,7 @@ int sce_crypt_Sha_AesCbcGcm_multitest() Info info_aes256cbc; Info info_aes256gcm; BaseType_t xRet; - + #ifndef NO_SHA256 num+=2; #endif @@ -1187,45 +1187,45 @@ int sce_crypt_Sha_AesCbcGcm_multitest() exit_semaph = xSemaphoreCreateCounting(num, 0); xRet = pdPASS; - + #ifndef NO_SHA256 - xRet = xTaskCreate(tskSha256_Test1, "sha256_test1", + xRet = xTaskCreate(tskSha256_Test1, "sha256_test1", STACK_SIZE, NULL, 3, NULL); if (xRet == pdPASS) - xRet = xTaskCreate(tskSha256_Test2, "sha256_test2", + xRet = xTaskCreate(tskSha256_Test2, "sha256_test2", STACK_SIZE, NULL, 3, NULL); #endif #if defined(WOLFSSL_AES_128) - XMEMCPY(&info_aes128cbc.aes_key, &g_user_aes128_key_index1, + XMEMCPY(&info_aes128cbc.aes_key, &g_user_aes128_key_index1, sizeof(sce_aes_wrapped_key_t)); if (xRet == pdPASS) - xRet = xTaskCreate(tskAes128_Cbc_Test, "aes128_cbc_test1", + xRet = xTaskCreate(tskAes128_Cbc_Test, "aes128_cbc_test1", STACK_SIZE, &info_aes128cbc, 3, NULL); #endif #if defined(WOLFSSL_AES_128) - XMEMCPY(&info_aes128gcm.aes_key, &g_user_aes128_key_index2, + XMEMCPY(&info_aes128gcm.aes_key, &g_user_aes128_key_index2, sizeof(sce_aes_wrapped_key_t)); if (xRet == pdPASS) - xRet = xTaskCreate(tskAes128_Gcm_Test, "aes128_gcm_test2", + xRet = xTaskCreate(tskAes128_Gcm_Test, "aes128_gcm_test2", STACK_SIZE, &info_aes128gcm, 3, NULL); #endif #if defined(WOLFSSL_AES_256) - XMEMCPY(&info_aes256cbc.aes_key, &g_user_aes256_key_index1, + XMEMCPY(&info_aes256cbc.aes_key, &g_user_aes256_key_index1, sizeof(sce_aes_wrapped_key_t)); if (xRet == pdPASS) - xRet = xTaskCreate(tskAes256_Cbc_Test, "aes256_cbc_test1", + xRet = xTaskCreate(tskAes256_Cbc_Test, "aes256_cbc_test1", STACK_SIZE, &info_aes256cbc, 3, NULL); #endif #if defined(WOLFSSL_AES_256) - XMEMCPY(&info_aes256gcm.aes_key, &g_user_aes256_key_index2, + XMEMCPY(&info_aes256gcm.aes_key, &g_user_aes256_key_index2, sizeof(sce_aes_wrapped_key_t)); if (xRet == pdPASS) - xRet = xTaskCreate(tskAes256_Gcm_Test, "aes256_gcm_test2", + xRet = xTaskCreate(tskAes256_Gcm_Test, "aes256_gcm_test2", STACK_SIZE, &info_aes256gcm, 3, NULL); #endif @@ -1242,19 +1242,19 @@ int sce_crypt_Sha_AesCbcGcm_multitest() } } } - + vSemaphoreDelete(exit_semaph); - - if ((xRet == pdPASS) && + + if ((xRet == pdPASS) && (Aes128_Gcm_multTst_rslt == 0 && Aes256_Gcm_multTst_rslt == 0) && (sha256_multTst_rslt1 == 0 && sha256_multTst_rslt2 == 0)) { - + ret = 0; } else { ret = -1; } - + RESULT_STR(ret) return ret; diff --git a/IDE/Renesas/e2studio/RX65N/GR-ROSE/README_EN.md b/IDE/Renesas/e2studio/RX65N/GR-ROSE/README_EN.md index 967b6ec73..632243fa6 100644 --- a/IDE/Renesas/e2studio/RX65N/GR-ROSE/README_EN.md +++ b/IDE/Renesas/e2studio/RX65N/GR-ROSE/README_EN.md @@ -6,16 +6,16 @@ wolfSSL sample application project for GR-ROSE evaluation board ## 1. Overview ----- -We provide a sample program for evaluating wolfSSL targeting the GR-ROSE evaluation board, which has RX65N MCU on it. The sample program runs in a bare metal environment that does not use a real-time OS and uses e2 studio as an IDE. This document describes the procedure from build to execution of the sample program. +We provide a sample program for evaluating wolfSSL targeting the GR-ROSE evaluation board, which has RX65N MCU on it. The sample program runs in a bare metal environment that does not use a real-time OS and uses e2 studio as an IDE. This document describes the procedure from build to execution of the sample program. The sample provided is a single application that can evaluate the following three functions: - CryptoTest: A program that automatically tests various cryptographic operation functions -- Benchmark: A program that measures the execution speed of various cryptographic operations +- Benchmark: A program that measures the execution speed of various cryptographic operations - TlsClient: A program that performs TLS communication with the opposite TLS server application

-Since the H/W settings and S/W settings for operating the evaluation board have already been prepared, the minimum settings are required to operate the sample application. In addition, the RootCA certificate and server-side certificate required for TLS communication have already been set for sample use only. +Since the H/W settings and S/W settings for operating the evaluation board have already been prepared, the minimum settings are required to operate the sample application. In addition, the RootCA certificate and server-side certificate required for TLS communication have already been set for sample use only. The following sections will walk you through the steps leading up to running the sample application.

@@ -23,7 +23,7 @@ The following sections will walk you through the steps leading up to running the ## 2. Target H/W, components and libraries ----- -This sample program uses the following hardware and software libraries. If a new version of the software component is available at the time of use, please update it as appropriate. +This sample program uses the following hardware and software libraries. If a new version of the software component is available at the time of use, please update it as appropriate. |item|name & version| |:--|:--| @@ -50,18 +50,18 @@ However, the FIT components themselves are not included in the distribution of t |TSIP(Trusted Secure IP) driver|1.17.l|r_tsip_rx|
-Note) As of April 2022, TIPS v1.15 does not seem to be able to be added as a FIT component by adding a component in the Smart Configurator Perspective. Add it manually along the method described later. +Note) As of April 2022, TIPS v1.15 does not seem to be able to be added as a FIT component by adding a component in the Smart Configurator Perspective. Add it manually along the method described later.

## 3. Importing sample application project into e2Studio ---- -There is no need to create a new sample program. Since the project file is already prepared, please import the project from the IDE by following the steps below. +There is no need to create a new sample program. Since the project file is already prepared, please import the project from the IDE by following the steps below. -+ e2studio "File" menu> "Open project from file system ..."> "Directory (R) ..." Click the import source button and select the folder from which the project will be imported. Select the folder (Renesas/e2studio/{MCU}/{board-name-folder}) where this README file exists. -+ Four projects that can be imported are listed, but check only the three projects "smc", "test" and "wolfssl" and click the "Finish" button. ++ e2studio "File" menu> "Open project from file system ..."> "Directory (R) ..." Click the import source button and select the folder from which the project will be imported. Select the folder (Renesas/e2studio/{MCU}/{board-name-folder}) where this README file exists. ++ Four projects that can be imported are listed, but check only the three projects "smc", "test" and "wolfssl" and click the "Finish" button. -You should see the **smc**, **test**, and **wolfssl** 3 projects you imported into the project explorer. +You should see the **smc**, **test**, and **wolfssl** 3 projects you imported into the project explorer.

## 4. FIT module download and smart configurator file generation @@ -69,13 +69,13 @@ You should see the **smc**, **test**, and **wolfssl** 3 projects you imported in You will need to get the required FIT modules yourself. Follow the steps below to get them. -1. Open the smc project in Project Explorer and double-click the **smc.scfg** file to open the Smart Configurator Perspective. +1. Open the smc project in Project Explorer and double-click the **smc.scfg** file to open the Smart Configurator Perspective. 2. Select the "Components" tab on the software component settings pane. Then click the "Add Component" button at the top right of the pane. The software component selection dialog will pop up. Click "Download the latest version of FIT driver and middleware" at the bottom of the dialog to get the modules. You can check the download destination folder by pressing "Basic settings...". 3. The latest version of the TSIP component may not be automatically obtained due to the delay in Renesas' support by the method in step 2 above. In that case, you can download it manually from the Renesas website. Unzip the downloaded component and store the files contained in the FIT Modules folder in the download destination folder of step 2. -4. Select the required FIT components shown from the list and press the "Finish" button. Repeat this operation until you have the required FIT components. +4. Select the required FIT components shown from the list and press the "Finish" button. Repeat this operation until you have the required FIT components. 5. Select the Components tab on the Software Component Settings pane and select the r_t4_rx component. In the settings pane on the right, specify the IP address of this board as the value of the "# IP address for ch0, when DHCP disable." Property (e.g. 192.168.1.9). @@ -117,7 +117,7 @@ Then build the test application. ## 7. Build and run the test application ----- -Now that the test application is ready to build. +Now that the test application is ready to build. 1. Build the wolfssl project on the project explorer, then the test project. @@ -129,14 +129,14 @@ Now that the test application is ready to build. 5. Press the run button to run the test application. -6. CryptoTest, Benchmark or TLS_Client After displaying the execution result according to the selected behavior, it enters an infinite loop, so if you think that the output has stopped, stop debugging. +6. CryptoTest, Benchmark or TLS_Client After displaying the execution result according to the selected behavior, it enters an infinite loop, so if you think that the output has stopped, stop debugging.

## 8. Running test application as TLS_Client -----
-### 8.1 TLS version supported by the test application +### 8.1 TLS version supported by the test application
You can use the TLS1.3 protocol in addition to the existing TLS1.2. The following macro is defined to {board-name-folder}/common/user_settings.h. @@ -177,7 +177,7 @@ In the test application, the TLS version and certificate type determine the ciph |:--|:--|:--| |TLS1.3|RSA/ECDSA certificate| | |||TLS_AES_128_GCM_SHA256| -|||TLS_AES_128_CCM_SHA256| +|||TLS_AES_128_CCM_SHA256| |TLS1.2|RSA certificate| |||TLS_RSA_WITH_AES_128_CBC_SHA| |||TLS_RSA_WITH_AES_256_CBC_SHA| @@ -200,7 +200,7 @@ To operate as TLS_Client, an opposite application for TLS communication is requi Configuration options need to be changed depending on the certificate type used. -#### 8.4.1 Configuration when using ECDSA certificates +#### 8.4.1 Configuration when using ECDSA certificates
@@ -217,7 +217,7 @@ Note: Do not forget to specify "-DNO_RSA"
With the above build, /examples/server/server -Is generated. This executable acts as a TLS server application. If you execute it with the following options, it will be in the listening state for the connection from TLS_Client. +Is generated. This executable acts as a TLS server application. If you execute it with the following options, it will be in the listening state for the connection from TLS_Client.

``` @@ -298,7 +298,7 @@ If you want to use it for purposes beyond functional evaluation, you need to pre 2. RSA key pair required for RootCA certificate validation 3. The signature generated by the RootCA certificate with the private key in 2 above. -will become necessary. Please refer to the manual provided by Renesas for how to generate them. +will become necessary. Please refer to the manual provided by Renesas for how to generate them.
@@ -316,7 +316,7 @@ Use wolfSSL_use_certificate_buffer or wolfSSL_CTX_use_certificate_buffer to load (2) Loading client private key/public key -Type of the client certificate decides the keys to be loaded. +Type of the client certificate decides the keys to be loaded. a) ECDSA certificate:
Load private key using tsip_use_PrivateKey_buffer. @@ -324,14 +324,14 @@ a) ECDSA certificate:
b) RSA certificate:
Load private key using tsip_use_PrivateKey_buffer. Load public key using tsip_use_PublicKey_buffer. -Note. In case of RSA certificate, the public key will be used for internal verification of signature process. +Note. In case of RSA certificate, the public key will be used for internal verification of signature process. (3) How to generate encrypted keys The keys (private and public keys) to be loaded should be encrypted-key format. Those keys could be generated with Renesas Secure Flash Programmer or SecurityKeyManagementTool. Refer the section 7.5 and 7.6 of the application note named “RX Family TSIP Module Firmware Integration technology” how to operate above key wrapping tool. (4) Macro to be defined -Define “WOLF_PRIVATE_KEY_ID” in your user_settings.h. +Define “WOLF_PRIVATE_KEY_ID” in your user_settings.h.
@@ -345,4 +345,4 @@ wolfSSL, which supports TSIPv1.17, has the following functional restrictions. 1. Session resumption and early data using TSIP are not supported. -The above limitations are expected to be improved by TSIP or wolfSSL from the next version onwards. \ No newline at end of file +The above limitations are expected to be improved by TSIP or wolfSSL from the next version onwards. diff --git a/IDE/Renesas/e2studio/RX65N/GR-ROSE/README_JP.md b/IDE/Renesas/e2studio/RX65N/GR-ROSE/README_JP.md index c3186924a..44a036bde 100644 --- a/IDE/Renesas/e2studio/RX65N/GR-ROSE/README_JP.md +++ b/IDE/Renesas/e2studio/RX65N/GR-ROSE/README_JP.md @@ -186,7 +186,7 @@ testアプリケーションでは、TLSバージョンと証明書のタイプ |:--|:--|:--| |TLS1.3|RSA/ECDSA証明書| | |||TLS_AES_128_GCM_SHA256| -|||TLS_AES_128_CCM_SHA256| +|||TLS_AES_128_CCM_SHA256| |TLS1.2|RSA証明書| |||TLS_RSA_WITH_AES_128_CBC_SHA| |||TLS_RSA_WITH_AES_256_CBC_SHA| diff --git a/IDE/Renesas/e2studio/RX65N/GR-ROSE/common/user_settings.h b/IDE/Renesas/e2studio/RX65N/GR-ROSE/common/user_settings.h index 043c03193..6367e198d 100644 --- a/IDE/Renesas/e2studio/RX65N/GR-ROSE/common/user_settings.h +++ b/IDE/Renesas/e2studio/RX65N/GR-ROSE/common/user_settings.h @@ -30,7 +30,7 @@ /*-- Renesas TSIP usage and its version --------------------------------------- * * "WOLFSSL_RENESAS_TSIP" definition makes wolfSSL to use H/W acceleration - * for cipher operations. + * for cipher operations. * TSIP definition asks to have its version number. * "WOLFSSL_RENESAS_TSIP_VER" takes following value: * 106: TSIPv1.06 @@ -47,18 +47,18 @@ * * wolfSSL supports TLSv1.2 by default. In case you want your system to support * TLSv1.3, uncomment line below. - * + * *----------------------------------------------------------------------------*/ #define WOLFSSL_TLS13 /*-- Operating System related definitions -------------------------------------- - * + * * In case any real-time OS is used, define its name(e.g. FREERTOS). * Otherwise, define "SINGLE_THREADED". They are exclusive each other. - * + * *----------------------------------------------------------------------------*/ - #define SINGLE_THREADED + #define SINGLE_THREADED /*#define FREERTOS*/ /*-- Compiler related definitions --------------------------------------------- @@ -98,34 +98,34 @@ /* USE_ECC_CERT * This macro is for selecting root CA certificate to load, it is valid only - * in example applications. wolfSSL does not refer this macro. - * If you want to use cipher suites including ECDSA authentication in + * in example applications. wolfSSL does not refer this macro. + * If you want to use cipher suites including ECDSA authentication in * the example applications with TSIP, enable this macro. - * In TSIP 1.13 or later version, following cipher suites are + * In TSIP 1.13 or later version, following cipher suites are * available: * - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 * - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SAH256 - * + * * Note that, this macro disables cipher suites including RSA * authentication such as: * - TLS_RSA_WITH_AES_128_CBC_SHA - * - TLS_RSA_WITH_AES_256_CBC_SHA + * - TLS_RSA_WITH_AES_256_CBC_SHA * - TLS_RSA_WITH_AES_128_CBC_SHA256 * - TLS_RSA_WITH_AES_256_CBC_SHA256 * - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 * - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA256 - * + * */ #define USE_ECC_CERT - /* In this example application, Root CA cert buffer named - * "ca_ecc_cert_der_256" is used under the following macro definition + /* In this example application, Root CA cert buffer named + * "ca_ecc_cert_der_256" is used under the following macro definition * for ECDSA. */ #define USE_CERT_BUFFERS_256 - /* In this example application, Root CA cert buffer named - * "ca_cert_der_2048" is used under the following macro definition + /* In this example application, Root CA cert buffer named + * "ca_cert_der_2048" is used under the following macro definition * for RSA authentication. */ #define USE_CERT_BUFFERS_2048 @@ -137,7 +137,7 @@ #define SIZEOF_LONG_LONG 8 /*#define WOLFSSL_STATIC_MEMORY*/ - + #if defined(WOLFSSL_STATIC_MEMORY) #define USE_FAST_MATH #else @@ -146,24 +146,24 @@ - /* + /* * -- "NO_ASN_TIME" macro is to avoid certificate expiration validation -- - * - * Note. In your actual products, do not forget to comment-out + * + * Note. In your actual products, do not forget to comment-out * "NO_ASN_TIME" macro. And prepare time function to get calendar time, - * otherwise, certificate expiration validation will not work. + * otherwise, certificate expiration validation will not work. */ /*#define NO_ASN_TIME*/ - + #define NO_MAIN_DRIVER #define BENCH_EMBEDDED - #define NO_WOLFSSL_DIR + #define NO_WOLFSSL_DIR #define WOLFSSL_NO_CURRDIR #define NO_FILESYSTEM #define WOLFSSL_LOG_PRINTF #define WOLFSSL_HAVE_MIN #define WOLFSSL_HAVE_MAX - + #define NO_WRITEV #define WOLFSSL_USER_IO @@ -175,7 +175,7 @@ #define USE_WOLF_SUSECONDS_T #define USE_WOLF_TIMEVAL_T - + #define WC_RSA_BLINDING #define TFM_TIMING_RESISTANT #define ECC_TIMING_RESISTANT @@ -191,7 +191,7 @@ /*-- Definitions for functionality negation ----------------------------------- * - * + * *----------------------------------------------------------------------------*/ /*#define NO_RENESAS_TSIP_CRYPT*/ @@ -203,7 +203,7 @@ /*-- Consistency checking between definitions --------------------------------- * - * + * *----------------------------------------------------------------------------*/ /*-- TSIP TLS specific definitions --*/ @@ -229,7 +229,6 @@ #define WOLFSSL_RENESAS_TSIP_TLS #if !defined(NO_RENESAS_TSIP_CRYPT) - #define WOLFSSL_RENESAS_TSIP_CRYPTONLY #define HAVE_PK_CALLBACKS #define WOLF_CRYPTO_CB #if defined(WOLFSSL_RENESAS_TSIP_TLS) @@ -243,10 +242,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 @@ -260,7 +269,5 @@ #define XSTRCASECMP(s1,s2) strcmp((s1),(s2)) -#if !defined(WOLFSSL_RENESAS_TSIP_TLS) - #define min(x,y) ((x)<(y)?(x):(y)) -#endif - +/* use original ASN parsing */ +#define WOLFSSL_ASN_ORIGINAL diff --git a/IDE/Renesas/e2studio/RX65N/GR-ROSE/common/wolfssl_dummy.c b/IDE/Renesas/e2studio/RX65N/GR-ROSE/common/wolfssl_dummy.c index db2911cf3..857f9c346 100644 --- a/IDE/Renesas/e2studio/RX65N/GR-ROSE/common/wolfssl_dummy.c +++ b/IDE/Renesas/e2studio/RX65N/GR-ROSE/common/wolfssl_dummy.c @@ -21,8 +21,8 @@ #include -#define YEAR 2023 -#define MON 6 +#define YEAR 2024 +#define MON 7 static int tick = 0; diff --git a/IDE/Renesas/e2studio/RX65N/GR-ROSE/include.am b/IDE/Renesas/e2studio/RX65N/GR-ROSE/include.am index 60df793e5..56d3d6479 100644 --- a/IDE/Renesas/e2studio/RX65N/GR-ROSE/include.am +++ b/IDE/Renesas/e2studio/RX65N/GR-ROSE/include.am @@ -23,4 +23,4 @@ EXTRA_DIST+= IDE/Renesas/e2studio/RX65N/GR-ROSE/common/unistd.h EXTRA_DIST+= IDE/Renesas/e2studio/RX65N/GR-ROSE/common/user_settings.h EXTRA_DIST+= IDE/Renesas/e2studio/RX65N/GR-ROSE/smc/.cproject EXTRA_DIST+= IDE/Renesas/e2studio/RX65N/GR-ROSE/smc/.project -EXTRA_DIST+= IDE/Renesas/e2studio/RX65N/GR-ROSE/smc/smc.scfg \ No newline at end of file +EXTRA_DIST+= IDE/Renesas/e2studio/RX65N/GR-ROSE/smc/smc.scfg diff --git a/IDE/Renesas/e2studio/RX65N/GR-ROSE/test/src/key_data.c b/IDE/Renesas/e2studio/RX65N/GR-ROSE/test/src/key_data.c index 951e76e92..10b0ad4c8 100644 --- a/IDE/Renesas/e2studio/RX65N/GR-ROSE/test/src/key_data.c +++ b/IDE/Renesas/e2studio/RX65N/GR-ROSE/test/src/key_data.c @@ -37,7 +37,7 @@ const st_key_block_data_t g_key_block_data = }, /* uint8_t iv[R_TSIP_AES_CBC_IV_BYTE_SIZE]; */ { - 0xF6, 0xA9, 0x83, 0x5A, 0xA1, 0x65, 0x1D, 0x28, 0xC8, 0x1A, 0xA6, 0x9D, + 0xF6, 0xA9, 0x83, 0x5A, 0xA1, 0x65, 0x1D, 0x28, 0xC8, 0x1A, 0xA6, 0x9D, 0x34, 0xB2, 0x4D, 0x92 }, /* @@ -45,30 +45,30 @@ const st_key_block_data_t g_key_block_data = * encrypted_user_rsa2048_ne_key[R_TSIP_RSA2048_NE_KEY_BYTE_SIZE + 16]; */ { - 0xD9, 0x9A, 0x75, 0x0E, 0x9D, 0x4F, 0x63, 0xA4, 0x02, 0x96, 0xE1, 0xF1, - 0x49, 0x44, 0xB5, 0x90, 0x59, 0x24, 0xC4, 0x23, 0xF7, 0xA0, 0x32, 0x65, - 0x68, 0x7B, 0x70, 0xE7, 0xA5, 0xC8, 0x12, 0xD1, 0xCD, 0x55, 0x36, 0x5F, - 0xE6, 0xEB, 0xD0, 0xAD, 0x5A, 0x7F, 0x9F, 0x41, 0x79, 0x8B, 0x2F, 0x3B, - 0x17, 0xC9, 0xEE, 0xA7, 0xCB, 0xB5, 0x40, 0xFA, 0x3B, 0x43, 0x1D, 0xF8, - 0x34, 0xCC, 0xB1, 0xB4, 0x8E, 0x67, 0xF6, 0xA0, 0x49, 0xAA, 0x76, 0x33, - 0xA4, 0x56, 0xCD, 0x16, 0xE9, 0x76, 0x16, 0x92, 0xBE, 0x3F, 0x3A, 0x3A, - 0xD7, 0x7A, 0xCD, 0xC9, 0xE2, 0xA0, 0xC8, 0x16, 0x2A, 0x0D, 0xBD, 0x3C, - 0xEA, 0xC8, 0x26, 0x82, 0xDA, 0x5D, 0x19, 0x71, 0x7B, 0x90, 0x03, 0xEF, - 0x1E, 0x24, 0x01, 0x62, 0x15, 0x3D, 0x2B, 0x4C, 0xA7, 0x8F, 0xBC, 0xD3, - 0xD9, 0xC8, 0x9F, 0xBB, 0x4A, 0x62, 0x57, 0xE8, 0xE2, 0x86, 0x8C, 0x56, - 0x36, 0x64, 0xE7, 0xB9, 0x47, 0x5C, 0x02, 0xF4, 0x87, 0x50, 0x16, 0x9C, - 0xFB, 0xF6, 0xE9, 0x73, 0x96, 0x78, 0x94, 0x59, 0x12, 0x28, 0x03, 0x37, - 0x75, 0x56, 0x00, 0x2F, 0xCE, 0x54, 0x7C, 0x34, 0xFD, 0x0B, 0x10, 0x5B, - 0x4A, 0xEE, 0x11, 0x1B, 0x39, 0xE9, 0x80, 0x8B, 0x27, 0x2D, 0x29, 0x12, - 0x68, 0x87, 0xD2, 0xC9, 0x78, 0xED, 0xED, 0xF2, 0xA6, 0x4D, 0x6B, 0x10, - 0x98, 0x9D, 0x52, 0x1C, 0xCE, 0x69, 0x0D, 0x5C, 0x46, 0xEB, 0x5D, 0x9B, - 0xC8, 0x6A, 0x8E, 0x1F, 0x56, 0x05, 0xBA, 0xD2, 0x50, 0x9F, 0x92, 0xB7, - 0xD4, 0x4D, 0xCD, 0x58, 0x5B, 0xA7, 0x87, 0x10, 0x6D, 0xF3, 0xDB, 0xA8, - 0x1D, 0x23, 0x00, 0xE4, 0x81, 0x69, 0x3E, 0x7D, 0xEA, 0x5B, 0x33, 0xF4, - 0x73, 0xD8, 0x7C, 0xDD, 0x64, 0x74, 0x40, 0x30, 0x93, 0x8D, 0x2C, 0xA5, - 0x2C, 0x24, 0x11, 0xB2, 0x26, 0x56, 0xE3, 0x41, 0x72, 0xAE, 0x41, 0x56, - 0x9C, 0x75, 0x11, 0x8E, 0x53, 0x59, 0x77, 0xBF, 0x48, 0x71, 0x86, 0x7C, - 0x7C, 0xCE, 0x04, 0xB9, 0x73, 0x62, 0xE6, 0x1D, 0xF8, 0xED, 0x93, 0x87 + 0x7F, 0xE5, 0x80, 0x89, 0xD7, 0x3E, 0xB9, 0x92, 0xF6, 0xBD, 0x13, 0x4B, + 0x8D, 0xE8, 0x96, 0xC5, 0xAB, 0x56, 0x45, 0x55, 0xD4, 0xA6, 0x57, 0x73, + 0xB5, 0xA8, 0xD7, 0x35, 0xF4, 0x4B, 0x0D, 0xA2, 0x30, 0x5A, 0xFE, 0xCB, + 0x18, 0x06, 0x55, 0xB2, 0x51, 0xF2, 0xA4, 0x0E, 0xCB, 0x6E, 0x6C, 0x88, + 0x03, 0xF3, 0x5C, 0x1E, 0xF0, 0xA4, 0xA8, 0x6E, 0x48, 0xE7, 0xB4, 0x87, + 0xE9, 0xE9, 0xA0, 0xF0, 0xB2, 0xD3, 0x24, 0x8D, 0x2E, 0x8C, 0x11, 0x2C, + 0x05, 0x26, 0x7C, 0xEE, 0x15, 0x67, 0xB8, 0xBF, 0xCA, 0xBC, 0x44, 0x8D, + 0x80, 0xED, 0x94, 0xF1, 0x5B, 0x88, 0xE1, 0xB1, 0x81, 0x7D, 0x4D, 0x92, + 0x6E, 0x1E, 0x3E, 0xF5, 0x7B, 0x77, 0x0A, 0xC8, 0x60, 0xB8, 0x7F, 0x43, + 0x2F, 0x07, 0x3B, 0xCA, 0xF5, 0xC7, 0x6F, 0x8F, 0x9E, 0xC1, 0x39, 0x29, + 0x10, 0xFA, 0xBA, 0xCD, 0x51, 0xDF, 0xF6, 0xAE, 0x6A, 0x84, 0xF4, 0xE0, + 0xED, 0xFC, 0xE2, 0xCE, 0x68, 0x3A, 0x38, 0xBF, 0x9B, 0xAD, 0x6F, 0x8B, + 0x84, 0x95, 0xAA, 0x5B, 0x4C, 0x73, 0xCE, 0x34, 0x8D, 0x84, 0x78, 0x1E, + 0xBF, 0xD6, 0xE2, 0x12, 0xEB, 0x27, 0xA6, 0x96, 0x4C, 0x76, 0x9C, 0x19, + 0x1C, 0x3C, 0x7D, 0xF7, 0xB0, 0xDB, 0xD6, 0x64, 0xFD, 0x67, 0xEB, 0x83, + 0xC1, 0x60, 0x8F, 0x65, 0x19, 0xC0, 0x78, 0xFD, 0x09, 0xD4, 0x52, 0x74, + 0xD6, 0x96, 0x89, 0x91, 0xEF, 0xF6, 0xB6, 0xAB, 0x27, 0x37, 0x7B, 0x43, + 0xA9, 0xEC, 0xDA, 0x68, 0x5F, 0x3A, 0x32, 0xFE, 0xE8, 0x4E, 0x7B, 0xDC, + 0xE4, 0x18, 0x5C, 0x53, 0x15, 0x5B, 0x5E, 0xC7, 0x08, 0x93, 0xF0, 0xBD, + 0xF6, 0xC3, 0x78, 0x80, 0x3B, 0x1F, 0xC8, 0xBA, 0x0F, 0x58, 0xF7, 0x1E, + 0x9C, 0xFB, 0x53, 0xCA, 0xA2, 0xBF, 0x9A, 0x18, 0xEE, 0x26, 0xD2, 0xA8, + 0x88, 0x64, 0x13, 0xC8, 0xEE, 0xD2, 0x79, 0xB5, 0x67, 0xD4, 0x10, 0xB3, + 0xF4, 0xC9, 0xCC, 0xCE, 0x4A, 0xE2, 0x38, 0x8B, 0x77, 0xEB, 0xD2, 0x89, + 0xB0, 0x66, 0xFF, 0xCD, 0x76, 0xC1, 0x28, 0x65, 0xC2, 0xA3, 0xE3, 0x45 }, /* uint8_t encrypted_user_update_key[R_TSIP_AES256_KEY_BYTE_SIZE + 16]; */ { @@ -78,7 +78,7 @@ const st_key_block_data_t g_key_block_data = * encrypted_user_rsa2048_public_key[R_TSIP_RSA2048_NE_KEY_BYTE_SIZE + 16] */ { - 0x22, 0xEC, 0xE3, 0x79, 0xD1, 0x0C, 0xB4, 0xED, 0xE0, 0xA9, 0x0F, 0xBD, + 0x22, 0xEC, 0xE3, 0x79, 0xD1, 0x0C, 0xB4, 0xED, 0xE0, 0xA9, 0x0F, 0xBD, 0xC7, 0x0B, 0xB4, 0x1E, 0x82, 0x27, 0x79, 0x20, 0x6A, 0x15, 0x56, 0xD6, 0x0F, 0xFA, 0xE4, 0x61, 0x04, 0xDA, 0x81, 0x33, 0x42, 0xBA, 0x6D, 0xB9, 0x34, 0x81, 0xFD, 0x67, 0xDF, 0x1D, 0xCB, 0x52, 0x64, 0x9A, 0x2E, 0x30, @@ -107,7 +107,7 @@ const st_key_block_data_t g_key_block_data = * encrypted_user_rsa2048_private_key[R_TSIP_RSA2048_ND_KEY_BYTE_SIZE + 16] */ { - 0x22, 0xEC, 0xE3, 0x79, 0xD1, 0x0C, 0xB4, 0xED, 0xE0, 0xA9, 0x0F, 0xBD, + 0x22, 0xEC, 0xE3, 0x79, 0xD1, 0x0C, 0xB4, 0xED, 0xE0, 0xA9, 0x0F, 0xBD, 0xC7, 0x0B, 0xB4, 0x1E, 0x82, 0x27, 0x79, 0x20, 0x6A, 0x15, 0x56, 0xD6, 0x0F, 0xFA, 0xE4, 0x61, 0x04, 0xDA, 0x81, 0x33, 0x42, 0xBA, 0x6D, 0xB9, 0x34, 0x81, 0xFD, 0x67, 0xDF, 0x1D, 0xCB, 0x52, 0x64, 0x9A, 0x2E, 0x30, @@ -186,83 +186,95 @@ const uint32_t encrypted_user_key_type = const unsigned char ca_ecc_cert_der_sig[] = { - 0xc0, 0x3c, 0x28, 0xef, 0x6c, 0xd5, 0x6c, 0x36, 0xc5, 0xe5, 0xb0, 0xaa, - 0xd0, 0x6a, 0x33, 0x1d, 0x7b, 0x28, 0x9f, 0xb2, 0x12, 0x8c, 0x0c, 0x5c, - 0x30, 0xdf, 0x8f, 0x3f, 0x2e, 0x72, 0x0f, 0x3d, 0x8d, 0x4a, 0x1d, 0xa6, - 0xc5, 0x1f, 0xb4, 0xf2, 0x18, 0xf1, 0x65, 0x40, 0x8e, 0xf2, 0x06, 0x0a, - 0xda, 0xa4, 0xd6, 0x3d, 0x87, 0x61, 0x00, 0xd6, 0x89, 0x4e, 0x77, 0xbd, - 0x57, 0xd7, 0x5f, 0x04, 0xe9, 0x0c, 0x96, 0x68, 0xa9, 0x72, 0xa2, 0xba, - 0x46, 0x3f, 0x35, 0xeb, 0xf9, 0x4f, 0x10, 0xfd, 0x51, 0x39, 0x7c, 0x44, - 0xa8, 0xa8, 0xd3, 0x62, 0x81, 0x2f, 0x82, 0x90, 0x3e, 0xea, 0xe9, 0xbc, - 0x2e, 0xd1, 0x19, 0xc0, 0xb6, 0xd7, 0xc0, 0x22, 0x7c, 0xc1, 0x64, 0x61, - 0xd2, 0x79, 0x01, 0x2d, 0x19, 0x7a, 0xf0, 0x34, 0x68, 0x78, 0x01, 0x35, - 0x7f, 0xe2, 0xbe, 0x11, 0x8f, 0x0d, 0x04, 0xa8, 0xa4, 0x7b, 0x4e, 0x7a, - 0x9c, 0xa0, 0x91, 0x3f, 0x7d, 0xdf, 0xe4, 0x69, 0x2f, 0x9b, 0x73, 0xc6, - 0x1d, 0x4b, 0x3e, 0xcd, 0xa8, 0x2d, 0xf1, 0xfc, 0x35, 0x5c, 0xae, 0x7e, - 0xef, 0xd9, 0x91, 0x7c, 0x32, 0xc3, 0x5a, 0xcb, 0x5f, 0xd9, 0x99, 0x1b, - 0xb3, 0x6d, 0xa1, 0xaf, 0x69, 0x45, 0x41, 0xca, 0x92, 0x01, 0x93, 0x18, - 0xb7, 0x4c, 0x35, 0xe0, 0x11, 0x16, 0xc7, 0xf2, 0xf9, 0xf1, 0x9e, 0xa5, - 0xda, 0x60, 0x41, 0x78, 0x67, 0xef, 0x2f, 0x85, 0x08, 0xfe, 0x21, 0x1f, - 0xdd, 0x31, 0xce, 0x70, 0xf2, 0xe2, 0x6f, 0xc1, 0x5f, 0xce, 0xa7, 0x4c, - 0x3a, 0x1a, 0x81, 0x5d, 0xec, 0x35, 0xad, 0xf3, 0xb4, 0x46, 0x83, 0x9b, - 0x95, 0x98, 0xcc, 0xa5, 0x46, 0x74, 0xdf, 0xca, 0xf9, 0x2e, 0x86, 0xe8, - 0x04, 0x18, 0x33, 0x91, 0x94, 0xb7, 0xca, 0x98, 0xf7, 0xc2, 0xfe, 0x99, - 0xc0, 0x73, 0x11, 0x1e + 0xAD, 0x89, 0x0C, 0x68, 0x8E, 0x97, 0xE5, 0x23, 0xE4, 0x35, + 0x91, 0x2F, 0x1B, 0x2F, 0x48, 0xCC, 0x03, 0xFC, 0x18, 0xE1, + 0x64, 0x8C, 0x4D, 0x12, 0xBB, 0xC1, 0xDD, 0xFE, 0xDF, 0x3B, + 0x87, 0xB0, 0x5B, 0x84, 0x54, 0xE6, 0xAE, 0x6D, 0xE4, 0x08, + 0x91, 0xF0, 0xBD, 0x11, 0xCA, 0xC4, 0xF1, 0x44, 0x41, 0x4C, + 0x17, 0x65, 0xAD, 0xEC, 0xE5, 0x08, 0xD7, 0x9D, 0x3D, 0x95, + 0x2A, 0x2B, 0x85, 0x70, 0x75, 0xC7, 0xEB, 0x2F, 0xB2, 0x5C, + 0x07, 0xB8, 0x80, 0xBA, 0x6C, 0x5A, 0x78, 0x1C, 0xAC, 0xBC, + 0x00, 0x2C, 0x9A, 0x21, 0x4E, 0x2A, 0xBA, 0x8E, 0x7D, 0x27, + 0x82, 0xF8, 0xA9, 0x5A, 0xB3, 0x28, 0x82, 0x45, 0x1D, 0xF7, + 0x5C, 0x06, 0x6C, 0xFA, 0x00, 0xE4, 0x8D, 0x0C, 0xC7, 0xBC, + 0x16, 0x50, 0x84, 0xCE, 0x74, 0xAC, 0x67, 0x5E, 0xE0, 0x19, + 0xF3, 0xFC, 0xD2, 0x1D, 0x46, 0x00, 0x63, 0x5E, 0xF8, 0xAC, + 0x70, 0x82, 0x7C, 0x78, 0xD2, 0xD6, 0x42, 0xB0, 0xBC, 0x6E, + 0x41, 0xCC, 0x3E, 0x08, 0x39, 0x29, 0xF4, 0xA6, 0xF5, 0x3D, + 0x81, 0x0A, 0xF8, 0x12, 0xD8, 0xD1, 0x15, 0xA2, 0x4A, 0x4F, + 0x13, 0x07, 0x9A, 0x56, 0x92, 0x51, 0xA2, 0xD6, 0x6B, 0xD9, + 0xF9, 0x86, 0x8B, 0xBE, 0x05, 0xDE, 0x76, 0x66, 0x89, 0x73, + 0x02, 0x19, 0x5C, 0xAC, 0xDE, 0x1E, 0x52, 0x80, 0x65, 0x42, + 0x5D, 0xBB, 0xB4, 0xED, 0xCF, 0x1B, 0x5E, 0xED, 0xA1, 0xC2, + 0x24, 0xAB, 0xBD, 0x30, 0xB2, 0xAE, 0x65, 0x8D, 0xE1, 0xDC, + 0xA3, 0xC7, 0x43, 0xC0, 0xE4, 0xB9, 0x66, 0x91, 0x64, 0xFD, + 0x12, 0x42, 0x12, 0x18, 0x4D, 0x7D, 0xF4, 0x14, 0xE5, 0x9E, + 0x81, 0x38, 0xFB, 0x32, 0x3B, 0x54, 0xFA, 0x4A, 0x6F, 0x25, + 0xA7, 0x3F, 0x45, 0x5D, 0x99, 0xC5, 0x4A, 0xE1, 0xEF, 0x12, + 0x5E, 0x03, 0x30, 0xBC, 0x5C, 0x31 }; const int sizeof_ca_ecc_cert_sig = sizeof(ca_ecc_cert_der_sig); /* ./ca-cert.der.sign, */ const unsigned char ca_cert_der_sig[] = { - 0x97, 0x8f, 0x90, 0x03, 0x0b, 0xca, 0xdf, 0x8f, 0xe8, 0x51, 0x23, 0xba, - 0x14, 0xfb, 0x28, 0xb8, 0x5c, 0x58, 0x0d, 0x6e, 0x8b, 0x97, 0x0f, 0x89, - 0x63, 0xc2, 0xd6, 0xb3, 0xf0, 0x16, 0x35, 0x74, 0x9d, 0xb9, 0xd7, 0x18, - 0x14, 0x86, 0x91, 0xe0, 0xcd, 0xb3, 0x28, 0x63, 0x16, 0xf4, 0x6c, 0xb1, - 0xd3, 0x93, 0xb6, 0x6e, 0xd9, 0x66, 0xcd, 0x65, 0x39, 0x7b, 0x1b, 0x74, - 0x5c, 0xde, 0x20, 0xd4, 0x46, 0x60, 0x2f, 0xc0, 0x10, 0xf5, 0x49, 0x4a, - 0x8d, 0x31, 0x29, 0x9b, 0x8a, 0xea, 0xf4, 0x8a, 0xaf, 0xc4, 0x84, 0xd7, - 0x42, 0xef, 0xaf, 0x14, 0x17, 0x44, 0xed, 0x6e, 0x2b, 0xd9, 0x70, 0xed, - 0x3e, 0x40, 0xf0, 0xef, 0x75, 0x4c, 0x05, 0x1f, 0xc3, 0x37, 0xec, 0xc2, - 0xcd, 0xcc, 0xce, 0x39, 0x61, 0xa0, 0xea, 0x16, 0x84, 0x6d, 0xde, 0xe7, - 0xf4, 0x0d, 0x8c, 0xf7, 0x69, 0x81, 0x64, 0x09, 0x16, 0xa7, 0x5b, 0x34, - 0x83, 0xe5, 0x73, 0xcf, 0x02, 0xf4, 0x37, 0x96, 0x93, 0x27, 0x72, 0x47, - 0x71, 0xca, 0x56, 0xcd, 0xd2, 0x85, 0x48, 0xe5, 0x9e, 0x1f, 0x39, 0x52, - 0xc1, 0xc3, 0x9c, 0x6b, 0x98, 0x41, 0xc2, 0x0a, 0x77, 0x94, 0xe5, 0x84, - 0x44, 0xe7, 0x94, 0xee, 0x5f, 0x05, 0x62, 0xad, 0xe5, 0xe5, 0xc9, 0x7e, - 0x02, 0x31, 0x85, 0xca, 0x28, 0x2d, 0x0d, 0x7f, 0x30, 0x5d, 0xb5, 0xaa, - 0x12, 0x81, 0x25, 0x37, 0x4a, 0xf2, 0x95, 0x81, 0xda, 0x76, 0xb4, 0x89, - 0x76, 0x8a, 0x0c, 0x8d, 0xdf, 0xed, 0xd5, 0x48, 0xa8, 0xc8, 0x6d, 0xf4, - 0xbf, 0x98, 0xa3, 0xc5, 0x42, 0x7d, 0xd2, 0x21, 0x2c, 0x8d, 0x57, 0xd0, - 0x91, 0x16, 0xee, 0x83, 0xd0, 0xa1, 0x8f, 0x05, 0x50, 0x2b, 0x6e, 0xe8, - 0x52, 0xf7, 0xbe, 0x96, 0x89, 0x40, 0xca, 0x9c, 0x19, 0x5a, 0xfc, 0xae, - 0x1d, 0xdb, 0x57, 0xb8 + 0x78, 0xA1, 0x30, 0x91, 0xC7, 0x12, 0xA0, 0x6B, 0x48, 0xFC, + 0x2B, 0x67, 0xF5, 0x00, 0x0D, 0x41, 0x64, 0x45, 0x20, 0xEF, + 0x14, 0xD4, 0x60, 0x5A, 0x0C, 0x7D, 0xBA, 0x16, 0x46, 0x6C, + 0x52, 0x3E, 0x8D, 0x15, 0x8C, 0xAB, 0x4D, 0x2F, 0x7E, 0x34, + 0xB9, 0x92, 0xFF, 0xFB, 0x6F, 0xCE, 0x7B, 0x15, 0xF0, 0xB7, + 0x1C, 0xFA, 0x6C, 0x06, 0x7A, 0x15, 0xC4, 0xAB, 0xA2, 0x8B, + 0xCB, 0x48, 0x6D, 0x25, 0x2F, 0xB3, 0xF0, 0xA1, 0xAB, 0xFD, + 0x53, 0xA9, 0x69, 0xC7, 0x33, 0xC3, 0x87, 0x48, 0xEE, 0x27, + 0x01, 0x22, 0xC0, 0x1B, 0x69, 0x96, 0x1B, 0x2D, 0xD2, 0x92, + 0x0B, 0xCC, 0x29, 0xD8, 0x17, 0x0E, 0x2C, 0x20, 0x95, 0xAC, + 0xE3, 0xE6, 0xF6, 0x9C, 0xE7, 0xBE, 0x0F, 0xF0, 0xD8, 0xBE, + 0xCF, 0x44, 0xBF, 0x34, 0x26, 0x7D, 0x30, 0xEA, 0x8D, 0xB9, + 0xB4, 0xB0, 0x18, 0xF1, 0x19, 0x1A, 0x19, 0xD9, 0xF0, 0x9D, + 0x72, 0xA6, 0x33, 0x9A, 0xA6, 0xC6, 0x74, 0xA9, 0x01, 0xE3, + 0xFF, 0x60, 0xFC, 0x6D, 0x0B, 0x4C, 0x5D, 0x52, 0x4D, 0xED, + 0x6C, 0xCC, 0xB9, 0x8D, 0x7B, 0x44, 0x3A, 0x1A, 0xD5, 0x8F, + 0x75, 0xAA, 0x6B, 0xEC, 0xBB, 0x94, 0x5D, 0xA3, 0x9D, 0x33, + 0x50, 0x1B, 0xBD, 0x04, 0x23, 0x05, 0x65, 0xA4, 0x5F, 0x21, + 0xDD, 0x27, 0x3A, 0xB7, 0xE6, 0x21, 0x54, 0xA1, 0x75, 0x3C, + 0x3D, 0x0E, 0x2F, 0xF5, 0x21, 0x7F, 0x02, 0x53, 0xB7, 0x14, + 0x41, 0xEE, 0x0D, 0xCE, 0xB7, 0x48, 0xE6, 0x9A, 0x2E, 0x77, + 0x9F, 0x94, 0x94, 0x00, 0x69, 0x28, 0xB4, 0xE9, 0xB1, 0x26, + 0x2B, 0x90, 0xB9, 0xCD, 0x21, 0x05, 0xB5, 0x01, 0x37, 0x45, + 0x32, 0x96, 0x80, 0xC3, 0x5A, 0xF1, 0x60, 0x9B, 0x97, 0x0D, + 0x58, 0x63, 0x84, 0xB0, 0xF9, 0xCA, 0xBB, 0x97, 0x53, 0xA4, + 0xC6, 0xE5, 0x6F, 0x59, 0x37, 0x81 }; const int sizeof_ca_cert_sig = sizeof(ca_cert_der_sig); /* ./client-cert.der.sign, */ const unsigned char client_cert_der_sign[] = { - 0x9a, 0x0e, 0xbc, 0x0f, 0x7a, 0xbe, 0xb6, 0x47, 0x79, 0x71, 0xcc, 0x51, - 0x87, 0xaa, 0x28, 0xbd, 0x9c, 0x04, 0x08, 0x0b, 0xb9, 0x78, 0x84, 0xeb, - 0x1d, 0xf9, 0x0e, 0x38, 0x23, 0xfe, 0x8f, 0x6e, 0x75, 0x21, 0xcc, 0x39, - 0x79, 0xf8, 0x9d, 0x80, 0x6b, 0xa9, 0x63, 0x79, 0x13, 0xd8, 0xc9, 0x5d, - 0xd5, 0x84, 0x17, 0xdc, 0xe4, 0x56, 0xae, 0x55, 0x64, 0x69, 0x8c, 0x95, - 0xa4, 0x03, 0xc1, 0x4a, 0xe8, 0xb6, 0xd5, 0x1b, 0xfa, 0x26, 0x3f, 0x2c, - 0xff, 0xfc, 0xea, 0x83, 0xca, 0xf7, 0x4d, 0x9e, 0xf4, 0xbf, 0xca, 0xb6, - 0x19, 0x46, 0x55, 0x45, 0xf4, 0x7d, 0xcd, 0x4b, 0xbc, 0x3d, 0xb7, 0xff, - 0x57, 0xbf, 0xe8, 0x0e, 0xbc, 0x16, 0x45, 0xa1, 0xdb, 0xf0, 0xb4, 0x44, - 0x64, 0x76, 0x0b, 0xe5, 0x86, 0x32, 0xbe, 0xd7, 0xf0, 0x26, 0x6c, 0x48, - 0xb6, 0x7f, 0x1a, 0x2a, 0xe6, 0x1b, 0xbd, 0x5b, 0x9e, 0xca, 0xd0, 0xf4, - 0xbb, 0xe4, 0x7f, 0x29, 0x66, 0xf6, 0x31, 0x6d, 0x70, 0x6f, 0xfd, 0x4d, - 0x7f, 0xc8, 0x7f, 0x9a, 0x5b, 0x1e, 0x37, 0xf7, 0x0c, 0x66, 0xb2, 0x62, - 0xd8, 0x3e, 0xca, 0x79, 0x6c, 0xec, 0x05, 0x01, 0xda, 0xd9, 0xe2, 0xc3, - 0xd5, 0x9b, 0xf9, 0x43, 0xa6, 0x14, 0x9a, 0x1f, 0x32, 0xd3, 0x68, 0x63, - 0x65, 0xb8, 0xb1, 0x63, 0xd5, 0xe2, 0xaa, 0x06, 0x27, 0x62, 0x4a, 0x95, - 0x48, 0x3f, 0xee, 0xde, 0x3b, 0x89, 0xd4, 0x61, 0x74, 0x39, 0xef, 0xe6, - 0x6e, 0x16, 0x2d, 0x8b, 0x54, 0x29, 0xe9, 0x71, 0xbc, 0xd4, 0x30, 0x42, - 0x35, 0x1e, 0x89, 0xfb, 0xf7, 0x4a, 0x47, 0x87, 0x41, 0x66, 0x49, 0xe5, - 0x8e, 0x16, 0x7f, 0x17, 0x07, 0xd6, 0xff, 0xe1, 0x2a, 0x4d, 0x7c, 0x70, - 0x0d, 0x72, 0x5d, 0x3d, 0x1f, 0xd8, 0x41, 0x1a, 0x43, 0x00, 0x31, 0x81, - 0x60, 0xa8, 0x6c, 0xef + 0x81, 0x89, 0xC5, 0xC6, 0x25, 0xE3, 0xD5, 0x3D, 0xEE, 0xE0, + 0xBC, 0xDF, 0xF0, 0xA4, 0xCE, 0xAC, 0xF8, 0x26, 0xB1, 0x41, + 0xE3, 0x8C, 0x50, 0xE8, 0xCA, 0x4A, 0xA7, 0xDB, 0x5F, 0xED, + 0x61, 0x31, 0xFD, 0x13, 0xC7, 0x04, 0x25, 0x4A, 0x2D, 0x77, + 0xE8, 0xA0, 0xB3, 0xA5, 0x5D, 0x54, 0x70, 0xF9, 0x76, 0xC9, + 0x26, 0x32, 0x84, 0x04, 0xEC, 0xEF, 0x39, 0x48, 0x8D, 0xB1, + 0xDC, 0xA7, 0x71, 0xC2, 0x69, 0xC6, 0x99, 0x16, 0xB2, 0x06, + 0xBD, 0xA7, 0x7C, 0x66, 0x35, 0x2D, 0x9A, 0xFB, 0xDA, 0xAF, + 0xAA, 0xF7, 0x5A, 0x2E, 0x7C, 0x74, 0x3C, 0x53, 0xBC, 0x59, + 0x5A, 0xF6, 0x1A, 0x0E, 0x2F, 0x9A, 0xA6, 0x9B, 0x3C, 0x06, + 0x88, 0x77, 0x38, 0x7A, 0x02, 0xC9, 0x89, 0x03, 0x5B, 0xF9, + 0xE7, 0xF2, 0xFD, 0x2B, 0x63, 0x94, 0x92, 0x8D, 0xBB, 0x9D, + 0x71, 0x17, 0xB6, 0xBF, 0xA4, 0x68, 0x51, 0xF4, 0x98, 0xAC, + 0xD2, 0x57, 0x6D, 0xC0, 0xBD, 0xE9, 0xC1, 0xE5, 0x4D, 0xD6, + 0xFF, 0xC8, 0xDF, 0x7A, 0x4F, 0x97, 0x5D, 0x46, 0x3A, 0x0A, + 0x38, 0xE8, 0x0C, 0x99, 0xE7, 0x97, 0xE7, 0x3F, 0xFE, 0xC8, + 0x6A, 0x93, 0x95, 0xD2, 0x32, 0xB1, 0x01, 0x00, 0x1C, 0x9A, + 0xCE, 0x5F, 0x2B, 0xA8, 0xB1, 0xC7, 0xDC, 0x1B, 0x04, 0x9F, + 0x58, 0x03, 0x57, 0x19, 0x9A, 0xDB, 0x58, 0x33, 0xBD, 0x9D, + 0x3E, 0xA0, 0x3D, 0x9A, 0x00, 0xA6, 0xE9, 0x2E, 0xCD, 0x45, + 0x97, 0xC1, 0xDF, 0xCF, 0xAF, 0x8A, 0x93, 0x52, 0xAA, 0x65, + 0x1C, 0xC2, 0x3C, 0xDD, 0xE1, 0xED, 0x4B, 0x8A, 0x05, 0x5A, + 0xBE, 0x84, 0xEE, 0xDF, 0xC0, 0x96, 0xD2, 0x5A, 0x60, 0x32, + 0xDF, 0xC9, 0x01, 0x7C, 0x83, 0x27, 0x2B, 0x4B, 0x18, 0x18, + 0x9F, 0x58, 0xE4, 0xF0, 0x0C, 0x36, 0xC1, 0xB4, 0x08, 0x70, + 0xFB, 0xDC, 0xCB, 0x70, 0x61, 0xAC }; const int sizeof_client_cert_der_sign = sizeof(client_cert_der_sign); diff --git a/IDE/Renesas/e2studio/RX65N/GR-ROSE/test/src/test_main.c b/IDE/Renesas/e2studio/RX65N/GR-ROSE/test/src/test_main.c index 8c79e8d40..9b17f3d5c 100644 --- a/IDE/Renesas/e2studio/RX65N/GR-ROSE/test/src/test_main.c +++ b/IDE/Renesas/e2studio/RX65N/GR-ROSE/test/src/test_main.c @@ -89,14 +89,14 @@ double current_time(int reset) int SetTsiptlsKey() { -#if defined(WOLFSSL_RENESAS_TSIP) && (WOLFSSL_RENESAS_TSIP_VER >=109) - +#if defined(WOLFSSL_RENESAS_TSIP) && (WOLFSSL_RENESAS_TSIP_VER >=109) + #if defined(TLS_CLIENT) - #if defined(USE_ECC_CERT) + #if defined(USE_ECC_CERT) /* Root CA cert has ECC-P256 public key */ tsip_inform_cert_sign((const byte *)ca_ecc_cert_der_sig); - #else + #else /* Root CA cert has RSA public key */ tsip_inform_cert_sign((const byte *)ca_cert_der_sig); #endif @@ -120,24 +120,24 @@ int SetTsiptlsKey() #endif #elif defined(WOLFSSL_RENESAS_TSIP) && (WOLFSSL_RENESAS_TSIP_VER < 109) - + #if defined(TLS_CLIENT) - + tsip_inform_cert_sign((const byte *)ca_cert_sig); tsip_inform_user_keys((byte*)&g_key_block_data.encrypted_session_key, (byte*)&g_key_block_data.iv, (byte*)&g_key_block_data.encrypted_user_rsa2048_ne_key); - + #elif defined(TLS_SERVER) - + tsip_inform_cert_sign((const byte *)client_cert_der_sign); tsip_inform_user_keys((byte*)&g_key_block_data.encrypted_session_key, (byte*)&g_key_block_data.iv, (byte*)&g_key_block_data.encrypted_user_rsa2048_ne_key); - + #endif -#endif +#endif return 0; } @@ -283,7 +283,7 @@ void main(void) #if defined(WOLFSSL_RENESAS_TSIP_TLS) SetTsiptlsKey(); #endif - + do { if(cipherlist_sz > 0 ) printf("cipher : %s\n", cipherlist[i]); diff --git a/IDE/Renesas/e2studio/RX65N/GR-ROSE/test/src/wolf_server.c b/IDE/Renesas/e2studio/RX65N/GR-ROSE/test/src/wolf_server.c index 2e7e35795..38964e672 100644 --- a/IDE/Renesas/e2studio/RX65N/GR-ROSE/test/src/wolf_server.c +++ b/IDE/Renesas/e2studio/RX65N/GR-ROSE/test/src/wolf_server.c @@ -126,7 +126,7 @@ void wolfSSL_TLS_server_init(byte doClientCheck) #if !defined(NO_FILESYSTEM) ret = wolfSSL_CTX_use_PrivateKey_file(server_ctx, key, 0); #else - ret = wolfSSL_CTX_use_PrivateKey_buffer(server_ctx, key, sizeof_key, + ret = wolfSSL_CTX_use_PrivateKey_buffer(server_ctx, key, sizeof_key, SSL_FILETYPE_ASN1); #endif if (ret != SSL_SUCCESS) { @@ -140,20 +140,20 @@ void wolfSSL_TLS_server_init(byte doClientCheck) wolfSSL_CTX_set_verify(server_ctx, WOLFSSL_VERIFY_PEER | WOLFSSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0); #if !defined(NO_FILESYSTEM) - if (wolfSSL_CTX_load_verify_locations(server_ctx, clientCert, 0) + if (wolfSSL_CTX_load_verify_locations(server_ctx, clientCert, 0) != WOLFSSL_SUCCESS) #else - if (wolfSSL_CTX_load_verify_buffer(server_ctx, clientCert, + if (wolfSSL_CTX_load_verify_buffer(server_ctx, clientCert, sizeof_clicert, SSL_FILETYPE_ASN1) != SSL_SUCCESS) #endif printf("can't load ca file, Please run from wolfSSL home dir\n"); } - + /* Register callbacks */ wolfSSL_SetIORecv(server_ctx, my_IORecv); wolfSSL_SetIOSend(server_ctx, my_IOSend); - + } void wolfSSL_TLS_server( ) diff --git a/IDE/Renesas/e2studio/RX65N/GR-ROSE/tools/README.md b/IDE/Renesas/e2studio/RX65N/GR-ROSE/tools/README.md new file mode 100644 index 000000000..dcb17b70a --- /dev/null +++ b/IDE/Renesas/e2studio/RX65N/GR-ROSE/tools/README.md @@ -0,0 +1,39 @@ +# Create/Update Signed CA +This document describes how to create/update Signed CA data that is used at an example program. + +## Signed CA Creatation +### Generate RSA Key pair +``` +2048 bit RSA key pair +$ openssl genrsa 2048 2> /dev/null > rsa_private.pem +$ openssl rsa -in rsa_private.pem -pubout -out rsa_public.pem 2> /dev/null +``` + +### Sign to CA certificate +``` +Signed by 2048-bit RSA +$ openssl dgst -sha256 -sign rsa_private.pem -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1-out .sign + +For an example program, it assumes that wolfSSL example CA cert is to be signed. +e.g. +$ openssl dgst -sha256 -sign rsa_private.pem -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1-out Signed-CA.sign /path/for/wolfssl/certs/ca-cert.der +``` + +### Convert Signed CA to C source +It is able to use `dertoc.pl` to generate c-source data from signed-ca binary data. + +``` +$ /path/to/wolfssl/scripts/dertoc.pl ./ca-cert.der.sign ca_cert_der_sig example.c +``` + + +## Appendix +### Example Keys +There are multiple example keys for testing in the `example_keys` folder. +``` + +| ++----+ rsa_private.pem an example 2048-bit rsa private key for signing CA cert + + rsa_public.pem an example 2048-bit rsa public key for verifying CA cert + + generate_signCA.sh an example script to genearte signed-certificate data for the example program +``` diff --git a/IDE/Renesas/e2studio/RX65N/GR-ROSE/tools/example_keys/generate_SignedCA.sh b/IDE/Renesas/e2studio/RX65N/GR-ROSE/tools/example_keys/generate_SignedCA.sh new file mode 100755 index 000000000..dd56430ae --- /dev/null +++ b/IDE/Renesas/e2studio/RX65N/GR-ROSE/tools/example_keys/generate_SignedCA.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# example usage +# ./generate_SignedCA.sh rsa_private.pem rsa_public.pem ../../../../../../../../wolfssl/certs/ca-cert.der ../../../../../../../../wolfssl +# ./generate_SignedCA.sh rsa_private.pem rsa_public.pem ../../../../../../../../wolfssl/certs/ca-ecc-cert.der ../../../../../../../../wolfssl +# +SIGOPT=rsa_padding_mode:pss +SIGOPT2=rsa_pss_saltlen:-1 +CURRENT=$(cd $(dirname $0);pwd) + +function usage() { + cat <<- _EOT_ + Usage: + $0 private-key public-key file-name wolfssl-dir + + Options: + private-key : private key for sign/verify + public-key : public key for verify + file-name : file name to be signed + wolfssl-dir : wolfssl folder path + +_EOT_ +exit 1 +} + +if [ $# -ne 4 ]; then + usage +fi + +# $1 private key for sign/verify +# $2 public key for verify +# $3 file for sign/verify +signed_file=$(basename $3) +wolf_dir=$4 + +openssl dgst -sha256 -sign $1 -sigopt $SIGOPT -sigopt $SIGOPT2 -out ${CURRENT}/${signed_file}.sign $3 + +echo Verify by private key +openssl dgst -sha256 -prverify $1 -sigopt $SIGOPT -sigopt $SIGOPT2 -signature ${CURRENT}/${signed_file}.sign $3 +echo Verifiy by public key +openssl dgst -sha256 -verify $2 -sigopt $SIGOPT -sigopt $SIGOPT2 -signature ${CURRENT}/${signed_file}.sign $3 + +# Convert Signed CA to c source +${wolf_dir}/scripts/dertoc.pl ${CURRENT}/${signed_file}.sign XXXXXXX ${signed_file}.c diff --git a/IDE/Renesas/e2studio/RX65N/GR-ROSE/tools/example_keys/rsa_private.pem b/IDE/Renesas/e2studio/RX65N/GR-ROSE/tools/example_keys/rsa_private.pem new file mode 100644 index 000000000..1fdfcca48 --- /dev/null +++ b/IDE/Renesas/e2studio/RX65N/GR-ROSE/tools/example_keys/rsa_private.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAvv9Ojq+nD5Qey29QAjw30fNVQz1A9OaDMivHMsLDKrW2qlzb +y5upich6j+bFVCV/qxeWe3Gqgz/9P5lL1gxlsfMB0Ou9ktkpr/tPTGfEg2GqnRT9 +jy6H2gayKV9TB4cGrqOdcg8JA8ioYt6tks03jMqAzqYG20N8pPOxZLl0bRX/CR9r +zo/ngDZkyHXf35LL+XsjLmavPYrHdULxS4DYz/sHVJe5hLboOjNShpDAM5WU3flD +xQqspaWfAiXty0RyNmHgVY3ev5xj053hOr2FzbA+vGr2krg6jTlGtt7Pq1/uLfsn +c86E+wzHqJj/yW+ovlUGFTBhHVosQ/MB2wRxiwIDAQABAoIBAAC5xZmjLzZO8MMD +HEG16txgWU2VGP8VNSBmrC4UMVujLxt8mNUwNTexzE1pqgxEzDRhNZAogWZYQuUP +9wrMJ0LC0pnxm1nIe3EQul9m8YcyQsyv/LqjiZ6ZcenYU99ucucM9hct2XHrPECL +6grpvrFJP64JUXNZ0UprJpxkW/3iGtQGBqtyWKWvIEhvU0rdZuE4JSW1bJTSyplb +LM4947lLRJufnKNPkCKZlVrhvnd0QE9Q6nwip6+H7Tk/sMPKHZcG8HeQkloHO/ar +0o2dPwp2vx6T7IvQ1duZyGTvWHCPW66mnrINFJcuUmVDBj0+tHYx94fjEVRUYrig +4PTIkAkCgYEA6tok4Md+Yqogw+QOPj0tQKujQkxAhkUA8EteVmwFP6Vy6oMYLTkf +oZuBMh0S+8ddWXJIpDnLMown7a79XwFtXc39W5nXXBhMexNf44ad8soXDOuc363E +2TYWn/GTUqGcCc4wy99vCe3508XG02yvVSIEY3iEdT0F6iis1uV+TG0CgYEA0DI2 +fS0Xl0+ig4c/0LtiuO40CBoblKsL+fe/bTUhKOnE3z5AkHy71FT2B0JSOnO04F0Q +cTniGks9LISYm6kQQ43jfxMQCsaUzRbS1i+z+h+TdE8324gHP/4PH1mcUvuUWZHb +esLeTpLRlsF9Wlm5bnG4wZsHM2+HnJDj5WUOCtcCgYEA6ivXp7XjZHfksc69EPwp +GhnKcPndQMSfOfq8twmAdkT/f6x1t+oEizymJxTsb9cLUnvsyKvD28P6sDnS9B9V +MLqLjQGpxm+IGxRngVQiPAubzktEoZf/9uHCz3qufi8cin5pE2/XpRwABlRnezsc +3JNNsu1hjhDpy+EA7knolEUCgYBFCaGP+Lft8PZO7zZ2HO0rrbGLTjz/G4kpJsJP +kGKikoI6FQaL4xDV5CaBWbiysVO1YqblJPCZD4IFlSKV24YNIKvjo4qaSCdnqr3X +UJI5yua2lt5K6dydl72kA68WxV34JanGF4BoRb9CYn8SytX2jbdaW/ITWFR70n// +vXbemQKBgG+yXyN14DZeld3zCX/1OTi1no++XSe99tK0eeXCmMTjq5kLPJAyQfSz +Cht82D1bkovS/LX+mZ06ySD632d46W8rgv+AMZqChhUmOG6a0QcCK1vYsgX90O5e +da5/kHw4lwcCY7yRDq7i0dtgoBGRsLQzIVvo4VxnLNBPH2uqHvum +-----END RSA PRIVATE KEY----- diff --git a/IDE/Renesas/e2studio/RX65N/GR-ROSE/tools/example_keys/rsa_public.pem b/IDE/Renesas/e2studio/RX65N/GR-ROSE/tools/example_keys/rsa_public.pem new file mode 100644 index 000000000..ab82dcda3 --- /dev/null +++ b/IDE/Renesas/e2studio/RX65N/GR-ROSE/tools/example_keys/rsa_public.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvv9Ojq+nD5Qey29QAjw3 +0fNVQz1A9OaDMivHMsLDKrW2qlzby5upich6j+bFVCV/qxeWe3Gqgz/9P5lL1gxl +sfMB0Ou9ktkpr/tPTGfEg2GqnRT9jy6H2gayKV9TB4cGrqOdcg8JA8ioYt6tks03 +jMqAzqYG20N8pPOxZLl0bRX/CR9rzo/ngDZkyHXf35LL+XsjLmavPYrHdULxS4DY +z/sHVJe5hLboOjNShpDAM5WU3flDxQqspaWfAiXty0RyNmHgVY3ev5xj053hOr2F +zbA+vGr2krg6jTlGtt7Pq1/uLfsnc86E+wzHqJj/yW+ovlUGFTBhHVosQ/MB2wRx +iwIDAQAB +-----END PUBLIC KEY----- diff --git a/IDE/Renesas/e2studio/RX65N/RSK/README_EN.md b/IDE/Renesas/e2studio/RX65N/RSK/README_EN.md index 769610879..4574735ab 100644 --- a/IDE/Renesas/e2studio/RX65N/RSK/README_EN.md +++ b/IDE/Renesas/e2studio/RX65N/RSK/README_EN.md @@ -3,7 +3,7 @@ wolfSSL sample application project for Renesas RSK+RX65N-2MB evaluation board
-A sample program for evaluating wolfSSL targeting the Renesas RSK+RX65N-2MB evaluation board is provided. For details on the program, refer to the following documents included in the package. +A sample program for evaluating wolfSSL targeting the Renesas RSK+RX65N-2MB evaluation board is provided. For details on the program, refer to the following documents included in the package. + InstructionManualForExample_RSK+RX65N-2MB_JP.pdf (Japanese) -+ InstructionManualForExample_RSK+RX65N-2MB_EN.pdf (English) \ No newline at end of file ++ InstructionManualForExample_RSK+RX65N-2MB_EN.pdf (English) diff --git a/IDE/Renesas/e2studio/RX65N/RSK/README_JP.md b/IDE/Renesas/e2studio/RX65N/RSK/README_JP.md index 630f28c0a..9aaa188fe 100644 --- a/IDE/Renesas/e2studio/RX65N/RSK/README_JP.md +++ b/IDE/Renesas/e2studio/RX65N/RSK/README_JP.md @@ -9,4 +9,4 @@ Renesas社製 RSK+RX65N-2MB 評価ボードをターゲットとしてwolfSSLを + InstructionManualForExample_RSK+RX65N-2MB_JP.pdf (日本語版) + InstructionManualForExample_RSK+RX65N-2MB_EN.pdf (英語版) -を参照ください。 \ No newline at end of file +を参照ください。 diff --git a/IDE/Renesas/e2studio/RX65N/RSK/wolfssl_demo/user_settings.h b/IDE/Renesas/e2studio/RX65N/RSK/wolfssl_demo/user_settings.h index 174826f0e..840477a88 100644 --- a/IDE/Renesas/e2studio/RX65N/RSK/wolfssl_demo/user_settings.h +++ b/IDE/Renesas/e2studio/RX65N/RSK/wolfssl_demo/user_settings.h @@ -29,7 +29,7 @@ /*-- Renesas TSIP usage and its version --------------------------------------- * * "WOLFSSL_RENESAS_TSIP" definition makes wolfSSL to use H/W acceleration - * for cipher operations. + * for cipher operations. * TSIP definition asks to have its version number. * "WOLFSSL_RENESAS_TSIP_VER" takes following value: * 106: TSIPv1.06 @@ -47,16 +47,16 @@ * * wolfSSL supports TLSv1.2 by default. In case you want your system to support * TLSv1.3, uncomment line below. - * + * *----------------------------------------------------------------------------*/ #define WOLFSSL_TLS13 /*-- Operating System related definitions -------------------------------------- - * + * * In case any real-time OS is used, define its name(e.g. FREERTOS). * Otherwise, define "SINGLE_THREADED". They are exclusive each other. - * + * *----------------------------------------------------------------------------*/ #define FREERTOS @@ -101,23 +101,23 @@ /* USE_ECC_CERT * This macro is for selecting root CA certificate to load, it is valid only - * in example applications. wolfSSL does not refer this macro. - * If you want to use cipher suites including ECDSA authentication in + * in example applications. wolfSSL does not refer this macro. + * If you want to use cipher suites including ECDSA authentication in * the example applications with TSIP, enable this macro. - * In TSIP 1.13 or later version, following cipher suites are + * In TSIP 1.13 or later version, following cipher suites are * available: * - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 * - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SAH256 - * + * * Note that, this macro disables cipher suites including RSA * authentication such as: * - TLS_RSA_WITH_AES_128_CBC_SHA - * - TLS_RSA_WITH_AES_256_CBC_SHA + * - TLS_RSA_WITH_AES_256_CBC_SHA * - TLS_RSA_WITH_AES_128_CBC_SHA256 * - TLS_RSA_WITH_AES_256_CBC_SHA256 * - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 * - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA256 - * + * */ #define USE_ECC_CERT @@ -126,14 +126,14 @@ */ /*#define WOLFSSL_CHECK_SIG_FAULTS*/ - /* In this example application, Root CA cert buffer named - * "ca_ecc_cert_der_256" is used under the following macro definition + /* In this example application, Root CA cert buffer named + * "ca_ecc_cert_der_256" is used under the following macro definition * for ECDSA. */ #define USE_CERT_BUFFERS_256 - /* In this example application, Root CA cert buffer named - * "ca_cert_der_2048" is used under the following macro definition + /* In this example application, Root CA cert buffer named + * "ca_cert_der_2048" is used under the following macro definition * for RSA authentication. */ #define USE_CERT_BUFFERS_2048 @@ -145,25 +145,25 @@ #define SIZEOF_LONG_LONG 8 - /* + /* * -- "NO_ASN_TIME" macro is to avoid certificate expiration validation -- - * - * Note. In your actual products, do not forget to comment-out + * + * Note. In your actual products, do not forget to comment-out * "NO_ASN_TIME" macro. And prepare time function to get calendar time, - * otherwise, certificate expiration validation will not work. + * otherwise, certificate expiration validation will not work. */ /*#define NO_ASN_TIME*/ - + #define NO_MAIN_DRIVER #define BENCH_EMBEDDED - #define NO_WOLFSSL_DIR + #define NO_WOLFSSL_DIR #define WOLFSSL_NO_CURRDIR #define NO_FILESYSTEM #define WOLFSSL_LOG_PRINTF #define WOLFSSL_HAVE_MIN #define WOLFSSL_HAVE_MAX #define NO_WRITEV - + #define WOLFSSL_USER_CURRTIME /* for benchmark */ #define TIME_OVERRIDES @@ -196,7 +196,7 @@ /*-- Definitions for functionality negation ----------------------------------- * - * + * *----------------------------------------------------------------------------*/ /*#define NO_RENESAS_TSIP_CRYPT*/ @@ -207,7 +207,7 @@ #endif /*-- Consistency checking between definitions --------------------------------- * - * + * *----------------------------------------------------------------------------*/ /*-- TSIP TLS specific definitions --*/ diff --git a/IDE/Renesas/e2studio/RX65N/RSK/wolfssl_demo/wolfssl_demo.c b/IDE/Renesas/e2studio/RX65N/RSK/wolfssl_demo/wolfssl_demo.c index 010c38137..bbe486cbc 100644 --- a/IDE/Renesas/e2studio/RX65N/RSK/wolfssl_demo/wolfssl_demo.c +++ b/IDE/Renesas/e2studio/RX65N/RSK/wolfssl_demo/wolfssl_demo.c @@ -145,7 +145,7 @@ static void Tls_client_init(const char* cipherlist) char *cert = "./certs/ca-cert.pem"; #endif #else - #if defined(USE_ECC_CERT) && defined(USE_CERT_BUFFERS_256) + #if defined(USE_ECC_CERT) && defined(USE_CERT_BUFFERS_256) const unsigned char *cert = ca_ecc_cert_der_256; #define SIZEOF_CERT sizeof_ca_ecc_cert_der_256 #else @@ -164,7 +164,7 @@ static void Tls_client_init(const char* cipherlist) #endif /* Create and initialize WOLFSSL_CTX */ - if ((client_ctx = + if ((client_ctx = wolfSSL_CTX_new(wolfSSLv23_client_method_ex((void *)NULL))) == NULL) { printf("ERROR: failed to create WOLFSSL_CTX\n"); return; @@ -175,7 +175,7 @@ static void Tls_client_init(const char* cipherlist) #endif #if defined(NO_FILESYSTEM) - if (wolfSSL_CTX_load_verify_buffer(client_ctx, cert, + if (wolfSSL_CTX_load_verify_buffer(client_ctx, cert, SIZEOF_CERT, SSL_FILETYPE_ASN1) != SSL_SUCCESS) { printf("ERROR: can't load certificate data\n"); return; @@ -187,10 +187,10 @@ static void Tls_client_init(const char* cipherlist) } #endif - + /* use specific cipher */ - if (cipherlist != NULL && - wolfSSL_CTX_set_cipher_list(client_ctx, cipherlist) != + if (cipherlist != NULL && + wolfSSL_CTX_set_cipher_list(client_ctx, cipherlist) != WOLFSSL_SUCCESS) { wolfSSL_CTX_free(client_ctx); client_ctx = NULL; printf("client can't set cipher list"); @@ -220,8 +220,8 @@ static void Tls_client() socklen_t socksize = sizeof(struct freertos_sockaddr); struct freertos_sockaddr PeerAddr; char addrBuff[ADDR_SIZE] = {0}; - - static const char sendBuff[]= "Hello Server\n" ; + + static const char sendBuff[]= "Hello Server\n" ; char rcvBuff[BUFF_SIZE] = {0}; @@ -285,7 +285,7 @@ static void Tls_client() } } -#endif /* USE_ECC_CERT */ +#endif /* USE_ECC_CERT */ #ifdef USE_ECC_CERT @@ -313,14 +313,14 @@ static void Tls_client() } } #endif /* WOLFSSL_CHECK_SIG_FAULTS */ - + #else /* DER format ECC private key */ if (ret == 0) { - err = wolfSSL_use_PrivateKey_buffer(ssl, + err = wolfSSL_use_PrivateKey_buffer(ssl, ecc_clikey_der_256, - sizeof_ecc_clikey_der_256, + sizeof_ecc_clikey_der_256, WOLFSSL_FILETYPE_ASN1); if (err != SSL_SUCCESS) { printf("ERROR wolfSSL_use_PrivateKey_buffer: %d\n", @@ -334,7 +334,7 @@ static void Tls_client() #else #if defined(WOLFSSL_RENESAS_TSIP_TLS) - + /* Note: TSIP asks RSA client key pair for client authentication. */ /* TSIP specific RSA private key */ @@ -359,10 +359,10 @@ static void Tls_client() #else - if (ret == 0) { + if (ret == 0) { err = wolfSSL_use_PrivateKey_buffer(ssl, client_key_der_2048, sizeof_client_key_der_2048, WOLFSSL_FILETYPE_ASN1); - + if (err != SSL_SUCCESS) { printf("ERROR wolfSSL_use_PrivateKey_buffer: %d\n", wolfSSL_get_error(ssl, 0)); @@ -390,7 +390,7 @@ static void Tls_client() } if (ret == 0) { - if (wolfSSL_write(ssl, sendBuff, strlen(sendBuff)) != + if (wolfSSL_write(ssl, sendBuff, strlen(sendBuff)) != strlen(sendBuff)) { printf("ERROR wolfSSL_write: %d\n", wolfSSL_get_error(ssl, 0)); ret = -1; @@ -409,7 +409,7 @@ static void Tls_client() } } - + wolfSSL_shutdown(ssl); FreeRTOS_shutdown(socket, FREERTOS_SHUT_RDWR); @@ -499,7 +499,7 @@ static void Tls_client_demo(void) tsip_inform_cert_sign((const byte*)ca_ecc_cert_der_sig); #else - + /* Root CA cert has RSA public key */ tsip_inform_cert_sign((const byte*)ca_cert_der_sig); @@ -529,7 +529,7 @@ static void Tls_client_demo(void) #endif /* TLS_CLIENT */ /* Demo entry function called by iot_demo_runner - * To run this entry function as an aws_iot_demo, define this as + * To run this entry function as an aws_iot_demo, define this as * DEMO_entryFUNCTION in aws_demo_config.h. */ void wolfSSL_demo_task(bool awsIotMqttMode, diff --git a/IDE/Renesas/e2studio/RX72N/EnvisionKit/README_EN.md b/IDE/Renesas/e2studio/RX72N/EnvisionKit/README_EN.md index 1447132e8..576fcfab3 100644 --- a/IDE/Renesas/e2studio/RX72N/EnvisionKit/README_EN.md +++ b/IDE/Renesas/e2studio/RX72N/EnvisionKit/README_EN.md @@ -3,7 +3,7 @@ wolfSSL sample application project for Renesas RX72N EnvisionKit evaluation boar
-A sample program for evaluating wolfSSL targeting the Renesas RX72N EnvisionKit evaluation board is provided. For details on the program, refer to the following documents included in the package. +A sample program for evaluating wolfSSL targeting the Renesas RX72N EnvisionKit evaluation board is provided. For details on the program, refer to the following documents included in the package. + InstructionManualForExample_RX72N_EnvisonKit_JP.pdf (Japanese) -+ InstructionManualForExample_RX72N_EnvisonKit_EN.pdf(English) \ No newline at end of file ++ InstructionManualForExample_RX72N_EnvisonKit_EN.pdf(English) diff --git a/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/README_EN.md b/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/README_EN.md index be61aec04..2921f7a28 100644 --- a/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/README_EN.md +++ b/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/README_EN.md @@ -3,16 +3,16 @@ wolfSSL simple application project for RX72N EnvisionKit board ## 1. Overview ----- -We provide a simple program for evaluating wolfSSL targeting the RX72N evaluation board, which has RX72 MCU on it. The sample program runs in a bare metal environment that does not use a real-time OS and uses e2 studio as an IDE. This document describes the procedure from build to execution of the sample program. +We provide a simple program for evaluating wolfSSL targeting the RX72N evaluation board, which has RX72 MCU on it. The sample program runs in a bare metal environment that does not use a real-time OS and uses e2 studio as an IDE. This document describes the procedure from build to execution of the sample program. The sample provided is a single application that can evaluate the following four functions: - CryptoTest: A program that automatically tests various cryptographic operation functions -- Benchmark: A program that measures the execution speed of various cryptographic operations +- Benchmark: A program that measures the execution speed of various cryptographic operations - TlsClient: A program that performs TLS communication with the opposite TLS server application - TlsServer: A program that performs TLS communication with the opposite TLS client application -Since the H/W settings and S/W settings for operating the evaluation board have already been prepared, the minimum settings are required to operate the sample application. In addition, the RootCA certificate and server-side certificate required for TLS communication have already been set for sample use only. +Since the H/W settings and S/W settings for operating the evaluation board have already been prepared, the minimum settings are required to operate the sample application. In addition, the RootCA certificate and server-side certificate required for TLS communication have already been set for sample use only. The following sections will walk you through the steps leading up to running the sample application. ## 2. Target H/W, components and libraries @@ -47,25 +47,25 @@ However, the FIT components themselves are not included in the distribution of t ## 3. Importing sample application project into e2Studio ---- -There is no need to create a new sample program. Since the project file is already prepared, please import the project from the IDE by following the steps below. +There is no need to create a new sample program. Since the project file is already prepared, please import the project from the IDE by following the steps below. -+ e2studio "File" menu> "Open project from file system ..."> "Directory (R) ..." Click the import source button and select the folder from which the project will be imported. Select the folder (Renesas/e2studio/{MCU}/{board-name-folder}/Simple) where this README file exists. -+ Three projects that can be imported are listed, but check only the three projects "test" and "wolfssl" and click the "Finish" button. ++ e2studio "File" menu> "Open project from file system ..."> "Directory (R) ..." Click the import source button and select the folder from which the project will be imported. Select the folder (Renesas/e2studio/{MCU}/{board-name-folder}/Simple) where this README file exists. ++ Three projects that can be imported are listed, but check only the three projects "test" and "wolfssl" and click the "Finish" button. -You should see the **test** and **wolfssl** 2 projects you imported into the project explorer. +You should see the **test** and **wolfssl** 2 projects you imported into the project explorer. ## 4. FIT module download and smart configurator file generation ---- You will need to get the required FIT modules yourself. Follow the steps below to get them. -1. Open the test project in Project Explorer and double-click the **test.scfg** file to open the Smart Configurator Perspective. +1. Open the test project in Project Explorer and double-click the **test.scfg** file to open the Smart Configurator Perspective. 2. Select the "Components" tab on the software component settings pane. Then click the "Add Component" button at the top right of the pane. The software component selection dialog will pop up. Click "Download the latest version of FIT driver and middleware" at the bottom of the dialog to get the modules. You can check the download destination folder by pressing "Basic settings...". 3. The latest version of the TSIP component may not be automatically obtained due to the delay in Renesas' support by the method in step 2 above. In that case, you can download it manually from the Renesas website. Unzip the downloaded component and store the files contained in the FIT Modules folder in the download destination folder of step 2. -4. Select the required FIT components shown from the list and press the "Finish" button. Repeat this operation until you have the required FIT components. +4. Select the required FIT components shown from the list and press the "Finish" button. Repeat this operation until you have the required FIT components. 5. Select the Components tab on the Software Component Settings pane and select the r_t4_rx component. In the settings pane on the right, specify the IP address of this board as the value of the "# IP address for ch0, when DHCP disable." Property (e.g. 192.168.1.9). @@ -80,7 +80,7 @@ The test project is a single sample application, but you can specify to perform - Benchmark: A program that measures the execution speed of various cryptographic operations - TlsClient: A program that performs TLS communication with the opposite TLS server application - TlsServer: A program that performs TLS communication with the opposite TLS client application -- +- Open the /test/src/wolfssl_simple_demo.h file and enable one of the following definitions: - #define CRYPT_TEST @@ -109,7 +109,7 @@ Now that the test application is ready to build. 5. Press the run button to run the test application. -6. CryptoTest, Benchmark, TLS_Client or TLS_Server After displaying the execution result according to the selected behavior, it enters an infinite loop, so if you think that the output has stopped, stop debugging. +6. CryptoTest, Benchmark, TLS_Client or TLS_Server After displaying the execution result according to the selected behavior, it enters an infinite loop, so if you think that the output has stopped, stop debugging. ## 7. Running test application as Client ----- @@ -176,7 +176,7 @@ Client message: Hello Server Note `-v 4` option in server execution command line means to use TLS 1.3. If you want to use smaller version of TLS than 1.3, `-v 4` needs to be removed from an exmeple server command options. ### 7.3 Run Client using TSIP driver -When it enables SIMPLE_TLS_TSIP_CLIENT, we can run TLS client including TSIP driver on the baord. +When it enables SIMPLE_TLS_TSIP_CLIENT, we can run TLS client including TSIP driver on the baord. In this case, we disable `#define WOLFSSL_TLS13` and `#define USE_ECC_CERT`. As a result, TLS communication between Client and Server use TLS 1.2 and RSA certificate. The table below shows the cipher suites that TSIP supports. @@ -185,7 +185,7 @@ The table below shows the cipher suites that TSIP supports. |:--|:--|:--| |TLS1.3|RSA/ECDSA certificate| | |||TLS_AES_128_GCM_SHA256| -|||TLS_AES_128_CCM_SHA256| +|||TLS_AES_128_CCM_SHA256| |TLS1.2|RSA certificate| |||TLS_RSA_WITH_AES_128_CBC_SHA| |||TLS_RSA_WITH_AES_256_CBC_SHA| @@ -213,7 +213,7 @@ $ ./examples/server/server -b -i ``` -When you run the test application, it makes a TLS connection with the server application by TLS1.2, then exchanges a simple string and displays the following on the standard output. +When you run the test application, it makes a TLS connection with the server application by TLS1.2, then exchanges a simple string and displays the following on the standard output. The cipher suites displayed depends on the combination of TLS version and certificate type. ``` @@ -285,7 +285,7 @@ If you want to use it for purposes beyond functional evaluation, you need to pre 2. RSA key pair required for RootCA certificate validation 3. The signature generated by the RootCA certificate with the private key in 2 above. -will become necessary. Please refer to the manual provided by Renesas for how to generate them. +will become necessary. Please refer to the manual provided by Renesas for how to generate them. ## 10. Limitations ---- diff --git a/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/README_JP.md b/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/README_JP.md index e870bba01..4bbdaeeac 100644 --- a/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/README_JP.md +++ b/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/README_JP.md @@ -212,7 +212,7 @@ TSIPドライバがサポートする暗号スイートは下記の一覧にな |:--|:--|:--| |TLS1.3|RSA/ECDSA certificate| | |||TLS_AES_128_GCM_SHA256| -|||TLS_AES_128_CCM_SHA256| +|||TLS_AES_128_CCM_SHA256| |TLS1.2|RSA certificate| |||TLS_RSA_WITH_AES_128_CBC_SHA| |||TLS_RSA_WITH_AES_256_CBC_SHA| @@ -334,4 +334,4 @@ wolfSSL_CTX_use_certificate_buffer あるいはwolfSSL_CTX_use_certificate_chain 上記制限1 ~ 4は次版以降のTSIPによって改善が見込まれています。 ## 11. サポート -ご質問・ご要望は、info@wolfssl.jp まで日本語でお知らせください。 \ No newline at end of file +ご質問・ご要望は、info@wolfssl.jp まで日本語でお知らせください。 diff --git a/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/client/simple_tcp_client.c b/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/client/simple_tcp_client.c index b45157faa..68cd8c866 100644 --- a/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/client/simple_tcp_client.c +++ b/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/client/simple_tcp_client.c @@ -88,11 +88,11 @@ void simple_tcp_client( ) #define BUFF_SIZE 256 static const char sendBuff[]= "Hello Server\n" ; - + char rcvBuff[BUFF_SIZE] = {0}; - + static T_IPV4EP my_addr = { 0, 0 }; - + T_IPV4EP dst_addr; if((dst_addr.ipaddr = getIPaddr(SIMPLE_TCPSEVER_IP)) == 0){ @@ -109,7 +109,7 @@ void simple_tcp_client( ) goto out; } - if (my_IOSend((char*)sendBuff, strlen(sendBuff), (void*)&cepid) != + if (my_IOSend((char*)sendBuff, strlen(sendBuff), (void*)&cepid) != strlen(sendBuff)) { printf("ERROR TCP write \n"); goto out; @@ -129,4 +129,4 @@ void simple_tcp_client( ) tcp_cls_cep(cepid, TMO_FEVR); return; -} \ No newline at end of file +} diff --git a/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/server/simple_tls_server.c b/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/server/simple_tls_server.c index 55892f491..1066e536f 100644 --- a/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/server/simple_tls_server.c +++ b/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/server/simple_tls_server.c @@ -123,18 +123,18 @@ void wolfSSL_TLS_server_init() #if !defined(NO_FILESYSTEM) ret = wolfSSL_CTX_use_PrivateKey_file(server_ctx, key, 0); #else - ret = wolfSSL_CTX_use_PrivateKey_buffer(server_ctx, key, sizeof_key, + ret = wolfSSL_CTX_use_PrivateKey_buffer(server_ctx, key, sizeof_key, SSL_FILETYPE_ASN1); #endif if (ret != SSL_SUCCESS) { printf("Error %d loading server-key!\n", ret); return; } - + /* Register callbacks */ wolfSSL_SetIORecv(server_ctx, my_IORecv); wolfSSL_SetIOSend(server_ctx, my_IOSend); - + } void wolfSSL_TLS_server( ) diff --git a/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/test_main.c b/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/test_main.c index 2fb3d2489..276ab79a7 100644 --- a/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/test_main.c +++ b/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/test_main.c @@ -259,7 +259,7 @@ void main(void) #if defined(SIMPLE_TLS_TSIP_CLIENT) SetTsiptlsKey(); #endif - + do { /* simply use TCP */ #if defined(SIMPLE_TCP_CLIENT) diff --git a/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/wolfssl_simple_demo.h b/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/wolfssl_simple_demo.h index d8e035d8d..ff328622e 100644 --- a/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/wolfssl_simple_demo.h +++ b/IDE/Renesas/e2studio/RX72N/EnvisionKit/Simple/test/src/wolfssl_simple_demo.h @@ -36,9 +36,9 @@ /* cannot enable with other definition */ /* simplest tcp client*/ /*#define SIMPLE_TCP_CLIENT */ -/* software TLS client */ +/* software TLS client */ /* #define SIMPLE_TLS_CLIENT */ -/* use TSIP Acceleration */ +/* use TSIP Acceleration */ /*#define SIMPLE_TLS_TSIP_CLIENT*/ /* simplest tcp server */ diff --git a/IDE/Renesas/e2studio/RX72N/EnvisionKit/wolfssl_demo/wolfssl_demo.c b/IDE/Renesas/e2studio/RX72N/EnvisionKit/wolfssl_demo/wolfssl_demo.c index 56f07cf90..e6ae9709e 100644 --- a/IDE/Renesas/e2studio/RX72N/EnvisionKit/wolfssl_demo/wolfssl_demo.c +++ b/IDE/Renesas/e2studio/RX72N/EnvisionKit/wolfssl_demo/wolfssl_demo.c @@ -201,7 +201,7 @@ static void Tls_client_init() char *cert = "./certs/ca-cert.pem"; #endif #else - #if defined(USE_ECC_CERT) && defined(USE_CERT_BUFFERS_256) + #if defined(USE_ECC_CERT) && defined(USE_CERT_BUFFERS_256) const unsigned char *cert = ca_ecc_cert_der_256; #define SIZEOF_CERT sizeof_ca_ecc_cert_der_256 #else @@ -216,7 +216,7 @@ static void Tls_client_init() wolfSSL_Init(); /* Create and initialize WOLFSSL_CTX */ - if ((client_ctx = + if ((client_ctx = wolfSSL_CTX_new(wolfSSLv23_client_method_ex((void *)NULL))) == NULL) { printf("ERROR: failed to create WOLFSSL_CTX\n"); return; @@ -228,7 +228,7 @@ static void Tls_client_init() /* load root CA certificate */ #if defined(NO_FILESYSTEM) - if (wolfSSL_CTX_load_verify_buffer(client_ctx, cert, + if (wolfSSL_CTX_load_verify_buffer(client_ctx, cert, SIZEOF_CERT, SSL_FILETYPE_ASN1) != SSL_SUCCESS) { printf("ERROR: can't load certificate data\n"); return; @@ -239,7 +239,7 @@ static void Tls_client_init() return NULL; } #endif - + #if defined(WOLFSSL_TLS13) && defined(WOLFSSL_RENESAS_TSIP_TLS) if (wolfSSL_CTX_UseSupportedCurve(client_ctx, WOLFSSL_ECC_SECP256R1) @@ -311,7 +311,7 @@ static void Tls_client(void *pvParam) if (ret == 0) { ssl = wolfSSL_new(ctx); if (ssl == NULL) { - msg(pcName, p->id, "ERROR wolfSSL_new: %d\n", + msg(pcName, p->id, "ERROR wolfSSL_new: %d\n", wolfSSL_get_error(ssl, 0)); ret = -1; } @@ -345,7 +345,7 @@ static void Tls_client(void *pvParam) if (ret == 0) { /* associate socket with ssl object */ if (wolfSSL_set_fd(ssl, (int)socket) != WOLFSSL_SUCCESS) { - msg(pcName, p->id, "ERROR wolfSSL_set_fd: %d\n", + msg(pcName, p->id, "ERROR wolfSSL_set_fd: %d\n", wolfSSL_get_error(ssl, 0)); ret = -1; } @@ -404,11 +404,11 @@ static void Tls_client(void *pvParam) } } #endif /* WOLFSSL_CHECK_SIG_FAULTS */ - + #else /* Client authentication using RSA certificate can be handled by TSIP. * Note that the internal verification of the signature process requires - * not only the client's private key but also its public key, so pass them + * not only the client's private key but also its public key, so pass them * using tsip_use_PrivateKey_buffer_TLS and tsip_use_PublicKey_buffer_TLS * respectively. */ @@ -435,9 +435,9 @@ static void Tls_client(void *pvParam) #else #if defined(USE_ECC_CERT) if (ret == 0) { - err = wolfSSL_use_PrivateKey_buffer(ssl, + err = wolfSSL_use_PrivateKey_buffer(ssl, ecc_clikey_der_256, - sizeof_ecc_clikey_der_256, + sizeof_ecc_clikey_der_256, WOLFSSL_FILETYPE_ASN1); if (err != SSL_SUCCESS) { printf("ERROR wolfSSL_use_PrivateKey_buffer: %d\n", @@ -446,10 +446,10 @@ static void Tls_client(void *pvParam) } } #else - if (ret == 0) { + if (ret == 0) { err = wolfSSL_use_PrivateKey_buffer(ssl, client_key_der_2048, sizeof_client_key_der_2048, WOLFSSL_FILETYPE_ASN1); - + if (err != SSL_SUCCESS) { printf("ERROR wolfSSL_use_PrivateKey_buffer: %d\n", wolfSSL_get_error(ssl, 0)); @@ -464,7 +464,7 @@ static void Tls_client(void *pvParam) #endif if (ret == 0) { if (wolfSSL_connect(ssl) != WOLFSSL_SUCCESS) { - msg(pcName, p->id, "ERROR wolfSSL_connect: %d\n", + msg(pcName, p->id, "ERROR wolfSSL_connect: %d\n", wolfSSL_get_error(ssl, 0)); ret = -1; } @@ -473,9 +473,9 @@ static void Tls_client(void *pvParam) wolfSSL_Debugging_OFF(); #endif if (ret == 0) { - if (wolfSSL_write(ssl, sendBuff, strlen(sendBuff)) != + if (wolfSSL_write(ssl, sendBuff, strlen(sendBuff)) != strlen(sendBuff)) { - msg(pcName, p->id, "ERROR wolfSSL_write: %d\n", + msg(pcName, p->id, "ERROR wolfSSL_write: %d\n", wolfSSL_get_error(ssl, 0)); ret = -1; } @@ -483,7 +483,7 @@ static void Tls_client(void *pvParam) if (ret == 0) { if ((ret=wolfSSL_read(ssl, rcvBuff, BUFF_SIZE -1)) < 0) { - msg(pcName, p->id, "ERROR wolfSSL_read: %d\n", + msg(pcName, p->id, "ERROR wolfSSL_read: %d\n", wolfSSL_get_error(ssl, 0)); ret = -1; } @@ -493,7 +493,7 @@ static void Tls_client(void *pvParam) ret = 0; } } - + #if defined(TLS_MULTITHREAD_TEST) out: #endif @@ -600,7 +600,7 @@ static void Tls_client_demo(void) tsip_inform_cert_sign((const byte*)ca_ecc_cert_der_sig); #else - + /* Root CA cert has RSA public key */ tsip_inform_cert_sign((const byte*)ca_cert_der_sig); @@ -639,7 +639,7 @@ static void Tls_client_demo(void) printf(" %s connecting to %d port\n", info[j].name, info[j].port); - xReturned = xTaskCreate(Tls_client, info[j].name, + xReturned = xTaskCreate(Tls_client, info[j].name, THREAD_STACK_SIZE, &info[j], 3, NULL); if (xReturned != pdPASS) { printf("Failed to create task\n"); @@ -647,7 +647,7 @@ static void Tls_client_demo(void) } for (j = i; j < (i+2); j++) { - xSemaphoreGiveFromISR(info[j].xBinarySemaphore, + xSemaphoreGiveFromISR(info[j].xBinarySemaphore, &xHigherPriorityTaskWoken); } @@ -695,7 +695,7 @@ static void Tls_client_demo(void) #endif /* TLS_CLIENT */ /* Demo entry function called by iot_demo_runner - * To run this entry function as an aws_iot_demo, define this as + * To run this entry function as an aws_iot_demo, define this as * DEMO_entryFUNCTION in aws_demo_config.h. */ void wolfSSL_demo_task(bool awsIotMqttMode, diff --git a/IDE/Renesas/e2studio/RZN2L/include.am b/IDE/Renesas/e2studio/RZN2L/include.am index af40725cb..88ccadfc7 100644 --- a/IDE/Renesas/e2studio/RZN2L/include.am +++ b/IDE/Renesas/e2studio/RZN2L/include.am @@ -14,4 +14,4 @@ EXTRA_DIST+= IDE/Renesas/e2studio/RZN2L/test/src/serial_io/.gitignore EXTRA_DIST+= IDE/Renesas/e2studio/RZN2L/test/src/wolfCrypt/.gitignore EXTRA_DIST+= IDE/Renesas/e2studio/RZN2L/test/src/wolfSSL/.gitignore EXTRA_DIST+= IDE/Renesas/e2studio/RZN2L/common/wolfssl_demo.h -EXTRA_DIST+= IDE/Renesas/e2studio/RZN2L/common/user_settings.h \ No newline at end of file +EXTRA_DIST+= IDE/Renesas/e2studio/RZN2L/common/user_settings.h diff --git a/IDE/Renesas/e2studio/RZN2L/test/src/test/wolf_client.c b/IDE/Renesas/e2studio/RZN2L/test/src/test/wolf_client.c index 227d75f48..7353bc1af 100644 --- a/IDE/Renesas/e2studio/RZN2L/test/src/test/wolf_client.c +++ b/IDE/Renesas/e2studio/RZN2L/test/src/test/wolf_client.c @@ -58,14 +58,14 @@ void wolfSSL_TLS_client_init() printf("ERROR: failed to create WOLFSSL_CTX\n"); return; } - + #if !defined(NO_FILESYSTEM) if (wolfSSL_CTX_load_verify_locations(client_ctx, cert, 0) != SSL_SUCCESS) { printf("ERROR: can't load \"%s\"\n", cert); return NULL; } #else - if (wolfSSL_CTX_load_verify_buffer(client_ctx, cert, SIZEOF_CERT, + if (wolfSSL_CTX_load_verify_buffer(client_ctx, cert, SIZEOF_CERT, SSL_FILETYPE_ASN1) != SSL_SUCCESS){ printf("ERROR: can't load certificate data\n"); return; @@ -83,13 +83,13 @@ int wolfSSL_TLS_client_do(void *pvParam) socklen_t xSize = sizeof(struct freertos_sockaddr); xSocket_t xClientSocket = NULL; struct freertos_sockaddr xRemoteAddress; - + WOLFSSL_CTX *ctx = (WOLFSSL_CTX *)p->ctx; WOLFSSL *ssl = NULL; #define BUFF_SIZE 256 static const char sendBuff[]= "Hello Server\n" ; - + char rcvBuff[BUFF_SIZE] = {0}; /* Client Socket Setup */ @@ -128,10 +128,10 @@ int wolfSSL_TLS_client_do(void *pvParam) printf(" Error [%d]: wolfSSL_set_fd.\n",ret); } - printf(" Cipher : %s\n", + printf(" Cipher : %s\n", (p->cipher == NULL) ? "NULL" : p->cipher); /* use specific cipher */ - if (p->cipher != NULL && wolfSSL_set_cipher_list(ssl, p->cipher) + if (p->cipher != NULL && wolfSSL_set_cipher_list(ssl, p->cipher) != WOLFSSL_SUCCESS) { printf(" client can't set cipher list 1"); goto out; @@ -150,7 +150,7 @@ int wolfSSL_TLS_client_do(void *pvParam) wolfSSL_Debugging_OFF(); #endif - if (wolfSSL_write(ssl, sendBuff, (int)strlen(sendBuff)) + if (wolfSSL_write(ssl, sendBuff, (int)strlen(sendBuff)) != (int)strlen(sendBuff)) { printf(" ERROR SSL write: %d\n", wolfSSL_get_error(ssl, 0)); goto out; 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 795d8286e..0944a5ca8 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 @@ -112,7 +112,7 @@ FSPSM_ST gCbInfo_a; /* for multi testing */ uint8_t rsa1024_wrapped_key2[RSIP_BYTE_SIZE_WRAPPED_KEY_RSA_1024_PRIVATE ]; uint8_t rsa2048_wrapped_key1[RSIP_BYTE_SIZE_WRAPPED_KEY_RSA_2048_PUBLIC]; uint8_t rsa2048_wrapped_key2[RSIP_BYTE_SIZE_WRAPPED_KEY_RSA_2048_PRIVATE ]; - + FSPSM_RSA1024_WPB_KEY* g_user_rsa1024_public_key = (FSPSM_RSA1024_WPB_KEY*)rsa1024_wrapped_key1; FSPSM_RSA1024_WPI_KEY* g_user_rsa1024_private_key = @@ -139,7 +139,7 @@ static int rsip_aes128_cbc_test(int prnt, FSPSM_AES_PWKEY aes_key) word32 keySz = (word32)(128/8); int ret = 0; - WOLFSSL_SMALL_STACK_STATIC const byte msg[] = { + WOLFSSL_SMALL_STACK_STATIC const byte msg[] = { /* "Now is the time for all " w/o trailing 0 */ 0x6e,0x6f,0x77,0x20,0x69,0x73,0x20,0x74, 0x68,0x65,0x20,0x74,0x69,0x6d,0x65,0x20, @@ -153,7 +153,7 @@ static int rsip_aes128_cbc_test(int prnt, FSPSM_AES_PWKEY aes_key) if (prnt) { printf(" rsip_aes_cbc_test() "); } - + ret = wc_AesInit(aes, NULL, devId1); if (ret == 0) { ret = wc_AesSetKey(aes, (byte*)aes_key, keySz, @@ -189,7 +189,7 @@ static int rsip_aes128_cbc_test(int prnt, FSPSM_AES_PWKEY aes_key) if (prnt) { RESULT_STR(ret) } - + return ret; } @@ -197,7 +197,7 @@ static void tskAes128_Cbc_Test(void *pvParam) { int ret = 0; Info *p = (Info*)pvParam; - + while (exit_loop == 0) { ret = rsip_aes128_cbc_test(0, p->aes_key); vTaskDelay(10/portTICK_PERIOD_MS); @@ -236,7 +236,7 @@ static int rsip_aes256_cbc_test(int prnt, FSPSM_AES_PWKEY aes_key) if (prnt) printf(" rsip_aes256_test() "); - + if (wc_AesInit(enc, NULL, devId1) != 0) { ret = -1; goto out; @@ -288,7 +288,7 @@ out: if (prnt) { RESULT_STR(ret) } - + return ret; } @@ -296,7 +296,7 @@ static void tskAes256_Cbc_Test(void *pvParam) { int ret = 0; Info *p = (Info*)pvParam; - + while (exit_loop == 0) { ret = rsip_aes256_cbc_test(0, p->aes_key); vTaskDelay(10/portTICK_PERIOD_MS); @@ -378,7 +378,7 @@ static int rsip_aesgcm256_test(int prnt, FSPSM_AES_PWKEY aes256_key) if (prnt) { printf(" rsip_aes256_gcm_test() "); } - + XMEMSET(resultT, 0, sizeof(resultT)); XMEMSET(resultC, 0, sizeof(resultC)); XMEMSET(resultP, 0, sizeof(resultP)); @@ -402,7 +402,7 @@ static int rsip_aesgcm256_test(int prnt, FSPSM_AES_PWKEY aes256_key) /* AES-GCM encrypt and decrypt both use AES encrypt internally */ result = wc_AesGcmEncrypt(enc, resultC, p, sizeof(p), - (byte*)iv1, sizeof(iv1), + (byte*)iv1, sizeof(iv1), resultT, sizeof(resultT), a, sizeof(a)); @@ -417,7 +417,7 @@ static int rsip_aesgcm256_test(int prnt, FSPSM_AES_PWKEY aes256_key) ret = -7; goto out; } - + result = wc_AesGcmDecrypt(dec, resultP, resultC, sizeof(c1), iv1, sizeof(iv1), resultT, sizeof(resultT), a, sizeof(a)); @@ -447,7 +447,7 @@ static int rsip_aesgcm256_test(int prnt, FSPSM_AES_PWKEY aes256_key) } result = wc_AesGcmDecrypt(enc, resultP, resultC, sizeof(p), - iv1, sizeof(iv1), resultT + 1, sizeof(resultT) - 1, + iv1, sizeof(iv1), resultT + 1, sizeof(resultT) - 1, a, sizeof(a)); if (result != 0) { @@ -464,11 +464,11 @@ static int rsip_aesgcm256_test(int prnt, FSPSM_AES_PWKEY aes256_key) out: wc_AesFree(enc); wc_AesFree(dec); - + if (prnt) { RESULT_STR(ret) } - + return ret; } @@ -476,7 +476,7 @@ static void tskAes256_Gcm_Test(void *pvParam) { int ret = 0; Info *p = (Info*)pvParam; - + while (exit_loop == 0) { ret = rsip_aesgcm256_test(0, p->aes_key); vTaskDelay(10/portTICK_PERIOD_MS); @@ -592,7 +592,7 @@ static int rsip_aesgcm128_test(int prnt, FSPSM_AES_PWKEY aes128_key) ret = -4; goto out; } - + result = wc_AesGcmDecrypt(enc, resultP, resultC, sizeof(c3), iv3, sizeof(iv3), resultT, sizeof(t3), a3, sizeof(a3)); @@ -610,11 +610,11 @@ static int rsip_aesgcm128_test(int prnt, FSPSM_AES_PWKEY aes128_key) out: wc_AesFree(enc); wc_AesFree(dec); - + if (prnt) { RESULT_STR(ret) } - + return ret; } @@ -622,7 +622,7 @@ static void tskAes128_Gcm_Test(void *pvParam) { int ret = 0; Info *p = (Info*)pvParam; - + while (exit_loop == 0) { ret = rsip_aesgcm128_test(0, p->aes_key); vTaskDelay(10/portTICK_PERIOD_MS); @@ -649,7 +649,7 @@ static void tskAes128_Gcm_Test(void *pvParam) static int rsip_rsa_test(int prnt, int keySize) { int ret = 0; - + RsaKey *key = (RsaKey *)XMALLOC(sizeof *key, NULL, DYNAMIC_TYPE_TMP_BUFFER); WC_RNG rng; const char inStr [] = TEST_STRING; @@ -661,7 +661,7 @@ static int rsip_rsa_test(int prnt, int keySize) byte *in2 = NULL; byte *out= NULL; byte *out2 = NULL; - + in = (byte*)XMALLOC(inLen, NULL, DYNAMIC_TYPE_TMP_BUFFER); in2 = (byte*)XMALLOC(inLen, NULL, DYNAMIC_TYPE_TMP_BUFFER); out= (byte*)XMALLOC(outSz, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -672,19 +672,19 @@ static int rsip_rsa_test(int prnt, int keySize) ret = -1; goto out; } - + XMEMSET(&rng, 0, sizeof(rng)); XMEMSET(key, 0, sizeof *key); XMEMCPY(in, inStr, inLen); XMEMCPY(in2, inStr2, inLen); XMEMSET(out, 0, outSz); XMEMSET(out2, 0, outSz); - + ret = wc_InitRsaKey_ex(key, NULL, 7890/* fixed devid for TSIP/SCE*/); if (ret != 0) { goto out; } - + if ((ret = wc_InitRng(&rng)) != 0) goto out; @@ -695,7 +695,7 @@ static int rsip_rsa_test(int prnt, int keySize) if ((ret = wc_MakeRsaKey(key, keySize, 65537, &rng)) != 0) { goto out; } - + ret = wc_RsaPublicEncrypt(in, inLen, out, outSz, key, &rng); if (ret < 0) { goto out; @@ -722,7 +722,7 @@ out: 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; } @@ -730,7 +730,7 @@ out: static int rsip_rsa_SignVerify_test(int prnt, int keySize) { int ret = 0; - + RsaKey *key = (RsaKey *)XMALLOC(sizeof *key, NULL, DYNAMIC_TYPE_TMP_BUFFER); WC_RNG rng; word32 sigSz; @@ -754,7 +754,7 @@ static int rsip_rsa_SignVerify_test(int prnt, int keySize) ret = -1; goto out; } - + XMEMSET(&rng, 0, sizeof(rng)); XMEMSET(key, 0, sizeof *key); XMEMCPY(in, inStr, inLen); @@ -764,10 +764,10 @@ static int rsip_rsa_SignVerify_test(int prnt, int keySize) if (ret != 0) { goto out; } - + if ((ret = wc_InitRng(&rng)) != 0) goto out; - + if ((ret = wc_RsaSetRNG(key, &rng)) != 0) goto out; @@ -775,7 +775,7 @@ static int rsip_rsa_SignVerify_test(int prnt, int keySize) if ((ret = wc_MakeRsaKey(key, keySize, 65537, &rng)) != 0) { goto out; } - + gCbInfo.keyflgs_crypt.bits.message_type = 0; ret = wc_RsaSSL_Sign(in, inLen, out, outSz, key, &rng); if (ret < 0) { @@ -803,7 +803,7 @@ static int rsip_rsa_SignVerify_test(int prnt, int keySize) XFREE(in, NULL, DYNAMIC_TYPE_TMP_BUFFER); XFREE(in2, NULL, DYNAMIC_TYPE_TMP_BUFFER); XFREE(out, NULL, DYNAMIC_TYPE_TMP_BUFFER); - + return ret; } #endif @@ -855,7 +855,7 @@ int rsip_crypt_sha256_multitest() int num = 0; int i; BaseType_t xRet; - + #ifndef NO_SHA256 num+=2; #endif @@ -865,7 +865,7 @@ int rsip_crypt_sha256_multitest() exit_semaph = xSemaphoreCreateCounting((UBaseType_t)num, 0); xRet = pdPASS; - + #ifndef NO_SHA256 xRet = xTaskCreate(tskSha256_Test1, "sha256_test1", STACK_SIZE, NULL, 2, NULL); @@ -887,15 +887,15 @@ int rsip_crypt_sha256_multitest() } } } - + vSemaphoreDelete(exit_semaph); - + if ((xRet == pdPASS) && (sha256_multTst_rslt1 == 0 && sha256_multTst_rslt2 == 0)) ret = 0; else ret = -1; - + RESULT_STR(ret) return ret; @@ -912,7 +912,7 @@ int rsip_crypt_AesCbc_multitest() Info info_aes256_1; Info info_aes256_2; BaseType_t xRet; - + #if defined(HAVE_AES_CBC) && defined(WOLFSSL_AES_128) num+=2; #endif @@ -925,7 +925,7 @@ int rsip_crypt_AesCbc_multitest() exit_semaph = xSemaphoreCreateCounting((UBaseType_t)num, 0); xRet = pdPASS; - + #if defined(HAVE_AES_CBC) && defined(WOLFSSL_AES_128) XMEMCPY(&info_aes1.aes_key, &g_user_aes128_key_index1, sizeof(FSPSM_AES_PWKEY)); @@ -954,7 +954,7 @@ int rsip_crypt_AesCbc_multitest() xRet = xTaskCreate(tskAes256_Cbc_Test, "aes256_cbc_test2", STACK_SIZE, &info_aes256_2, 3, NULL); #endif - + if (xRet == pdPASS) { printf(" Waiting for completing tasks ... "); vTaskDelay(10000/portTICK_PERIOD_MS); @@ -968,7 +968,7 @@ int rsip_crypt_AesCbc_multitest() } } } - + vSemaphoreDelete(exit_semaph); if ((xRet == pdPASS) && @@ -993,7 +993,7 @@ int rsip_crypt_AesGcm_multitest() Info info_aes256_1; Info info_aes256_2; BaseType_t xRet; - + #if defined(WOLFSSL_AES_128) num+=2; #endif @@ -1007,7 +1007,7 @@ int rsip_crypt_AesGcm_multitest() exit_semaph = xSemaphoreCreateCounting((UBaseType_t)num, 0); xRet = pdPASS; - + #if defined(WOLFSSL_AES_128) XMEMCPY(&info_aes1.aes_key, &g_user_aes128_key_index1, sizeof(FSPSM_AES_PWKEY)); @@ -1052,7 +1052,7 @@ int rsip_crypt_AesGcm_multitest() } } } - + vSemaphoreDelete(exit_semaph); if ((xRet == pdPASS) && @@ -1076,7 +1076,7 @@ int rsip_crypt_Sha_AesCbcGcm_multitest() Info info_aes256cbc; Info info_aes256gcm; BaseType_t xRet; - + #ifndef NO_SHA256 num+=2; #endif @@ -1098,45 +1098,45 @@ int rsip_crypt_Sha_AesCbcGcm_multitest() exit_semaph = xSemaphoreCreateCounting((UBaseType_t)num, 0); xRet = pdPASS; - + #ifndef NO_SHA256 - xRet = xTaskCreate(tskSha256_Test1, "sha256_test1", + xRet = xTaskCreate(tskSha256_Test1, "sha256_test1", STACK_SIZE, NULL, 3, NULL); if (xRet == pdPASS) - xRet = xTaskCreate(tskSha256_Test2, "sha256_test2", + xRet = xTaskCreate(tskSha256_Test2, "sha256_test2", STACK_SIZE, NULL, 3, NULL); #endif #if defined(WOLFSSL_AES_128) - XMEMCPY(&info_aes128cbc.aes_key, &g_user_aes128_key_index1, + XMEMCPY(&info_aes128cbc.aes_key, &g_user_aes128_key_index1, sizeof(FSPSM_AES_PWKEY)); if (xRet == pdPASS) - xRet = xTaskCreate(tskAes128_Cbc_Test, "aes128_cbc_test1", + xRet = xTaskCreate(tskAes128_Cbc_Test, "aes128_cbc_test1", STACK_SIZE, &info_aes128cbc, 3, NULL); #endif #if defined(WOLFSSL_AES_128) - XMEMCPY(&info_aes128gcm.aes_key, &g_user_aes128_key_index2, + XMEMCPY(&info_aes128gcm.aes_key, &g_user_aes128_key_index2, sizeof(FSPSM_AES_PWKEY)); if (xRet == pdPASS) - xRet = xTaskCreate(tskAes128_Gcm_Test, "aes128_gcm_test2", + xRet = xTaskCreate(tskAes128_Gcm_Test, "aes128_gcm_test2", STACK_SIZE, &info_aes128gcm, 3, NULL); #endif #if defined(WOLFSSL_AES_256) - XMEMCPY(&info_aes256cbc.aes_key, &g_user_aes256_key_index1, + XMEMCPY(&info_aes256cbc.aes_key, &g_user_aes256_key_index1, sizeof(FSPSM_AES_PWKEY)); if (xRet == pdPASS) - xRet = xTaskCreate(tskAes256_Cbc_Test, "aes256_cbc_test1", + xRet = xTaskCreate(tskAes256_Cbc_Test, "aes256_cbc_test1", STACK_SIZE, &info_aes256cbc, 3, NULL); #endif #if defined(WOLFSSL_AES_256) - XMEMCPY(&info_aes256gcm.aes_key, &g_user_aes256_key_index2, + XMEMCPY(&info_aes256gcm.aes_key, &g_user_aes256_key_index2, sizeof(FSPSM_AES_PWKEY)); if (xRet == pdPASS) - xRet = xTaskCreate(tskAes256_Gcm_Test, "aes256_gcm_test2", + xRet = xTaskCreate(tskAes256_Gcm_Test, "aes256_gcm_test2", STACK_SIZE, &info_aes256gcm, 3, NULL); #endif @@ -1153,19 +1153,19 @@ int rsip_crypt_Sha_AesCbcGcm_multitest() } } } - + vSemaphoreDelete(exit_semaph); - - if ((xRet == pdPASS) && + + if ((xRet == pdPASS) && (Aes128_Gcm_multTst_rslt == 0 && Aes256_Gcm_multTst_rslt == 0) && (sha256_multTst_rslt1 == 0 && sha256_multTst_rslt2 == 0)) { - + ret = 0; } else { ret = -1; } - + RESULT_STR(ret) return ret; @@ -1177,13 +1177,13 @@ int rsip_crypt_test() fsp_err_t rsip_error_code = FSP_SUCCESS; /* Generate AES sce Key */ - + if (rsip_error_code == FSP_SUCCESS) { #if defined(WOLFSSL_RENESAS_RSIP_CRYPTONLY) /* set up Crypt Call back */ Clr_CallbackCtx(&gCbInfo); Clr_CallbackCtx(&gCbInfo_a); - + /* sets wrapped aes key */ gCbInfo.wrapped_key_aes128 = g_user_aes128_key_index1; gCbInfo.wrapped_key_aes256 = g_user_aes256_key_index1; @@ -1192,14 +1192,14 @@ int rsip_crypt_test() gCbInfo.wrapped_key_rsapub1024 = g_user_rsa1024_public_key; gCbInfo.wrapped_key_rsapri2048 = g_user_rsa2048_private_key; gCbInfo.wrapped_key_rsapub2048 = g_user_rsa2048_public_key; - + RSIP_KeyGeneration(&gCbInfo); - + /* Key generation for multi testing */ gCbInfo_a.wrapped_key_aes128 = g_user_aes128_key_index2; gCbInfo_a.wrapped_key_aes256 = g_user_aes256_key_index2; RSIP_KeyGeneration(&gCbInfo_a); - + /* set callback ctx */ ret = wc_CryptoCb_CryptInitRenesasCmn(NULL, &gCbInfo); @@ -1276,27 +1276,27 @@ int rsip_crypt_test() if (ret == 0) { ret = rsip_aesgcm256_test(1, g_user_aes256_key_index1); } - + if (ret == 0) { printf(" multi sha thread test\n"); ret = rsip_crypt_sha256_multitest(); } - + if (ret == 0) { printf(" multi Aes cbc thread test\n"); ret = rsip_crypt_AesCbc_multitest(); } - + if (ret == 0) { printf(" multi Aes Gcm thread test\n"); ret = rsip_crypt_AesGcm_multitest(); } - + if (ret == 0) { printf("rsip_crypt_Sha_AesCbcGcm_multitest\n"); ret = rsip_crypt_Sha_AesCbcGcm_multitest(); } - + #if defined(WOLFSSL_RENESAS_RSIP_CRYPTONLY) Clr_CallbackCtx(&gCbInfo); Clr_CallbackCtx(&gCbInfo_a); diff --git a/IDE/STARCORE/starcore_test.c b/IDE/STARCORE/starcore_test.c index 966b4b69f..69eefbca2 100644 --- a/IDE/STARCORE/starcore_test.c +++ b/IDE/STARCORE/starcore_test.c @@ -20,7 +20,7 @@ */ -#include +#include #include #ifndef WOLFSSL_USER_SETTINGS @@ -135,12 +135,12 @@ int process_a_file(char* fName) } return ret; } -#endif +#endif void check_ret(int ret) { if(ret != 0) { - exit(-1); + exit(-1); } } diff --git a/IDE/STARCORE/user_settings.h b/IDE/STARCORE/user_settings.h index df74dbee7..f5e390770 100644 --- a/IDE/STARCORE/user_settings.h +++ b/IDE/STARCORE/user_settings.h @@ -561,7 +561,7 @@ extern "C" { #undef NO_FILESYSTEM /* #define NO_FILESYSTEM */ - + #undef NO_WRITE_TEMP_FILES #define NO_WRITE_TEMP_FILES @@ -570,7 +570,7 @@ extern "C" { #undef NO_WRITEV #define NO_WRITEV - + #undef WOLFSSL_NO_SOCK #define WOLFSSL_NO_SOCK @@ -594,10 +594,10 @@ extern "C" { #undef NO_MD4 #define NO_MD4 - + #undef WOLFSSL_NO_SHAKE128 #define WOLFSSL_NO_SHAKE128 - + #undef WOLFSSL_NO_SHAKE256 #define WOLFSSL_NO_SHAKE256 diff --git a/IDE/STM32Cube/default_conf.ftl b/IDE/STM32Cube/default_conf.ftl index d7a68aac4..d565bb497 100644 --- a/IDE/STM32Cube/default_conf.ftl +++ b/IDE/STM32Cube/default_conf.ftl @@ -334,15 +334,6 @@ extern ${variable.value} ${variable.name}; #define NO_SESSION_CACHE #endif -/* Post Quantum - * Note: PQM4 is compatible with STM32. The project can be found at: - * https://github.com/mupq/pqm4 - */ -#if defined(WOLF_CONF_PQM4) && WOLF_CONF_PQM4 == 1 - #define HAVE_PQM4 -#endif - - /* ------------------------------------------------------------------------- */ /* Crypto */ /* ------------------------------------------------------------------------- */ @@ -534,6 +525,33 @@ extern ${variable.value} ${variable.name}; #define NO_MD5 #endif +/* ------------------------------------------------------------------------- */ +/* Post-Quantum Crypto */ +/* ------------------------------------------------------------------------- */ +/* NOTE: this is after the hashing section to override the potential SHA3 undef + * above. */ +#if defined(WOLF_CONF_KYBER) && WOLF_CONF_KYBER == 1 +#undef WOLFSSL_EXPERIMENTAL_SETTINGS +#define WOLFSSL_EXPERIMENTAL_SETTINGS + +#undef WOLFSSL_HAVE_KYBER +#define WOLFSSL_HAVE_KYBER + +#undef WOLFSSL_WC_KYBER +#define WOLFSSL_WC_KYBER + +#undef WOLFSSL_NO_SHAKE128 +#undef WOLFSSL_SHAKE128 +#define WOLFSSL_SHAKE128 + +#undef WOLFSSL_NO_SHAKE256 +#undef WOLFSSL_SHAKE256 +#define WOLFSSL_SHAKE256 + +#undef WOLFSSL_SHA3 +#define WOLFSSL_SHA3 +#endif /* WOLF_CONF_KYBER */ + /* ------------------------------------------------------------------------- */ /* Crypto Acceleration */ /* ------------------------------------------------------------------------- */ diff --git a/IDE/STM32Cube/main.c b/IDE/STM32Cube/main.c index ddf81cbd3..0acdb389c 100644 --- a/IDE/STM32Cube/main.c +++ b/IDE/STM32Cube/main.c @@ -138,11 +138,11 @@ static void SystemClock_Config(void) RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - /** Configure the main internal regulator output voltage + /** Configure the main internal regulator output voltage */ __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); - /** Initializes the CPU, AHB and APB buses clocks + /** Initializes the CPU, AHB and APB buses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; @@ -157,7 +157,7 @@ static void SystemClock_Config(void) if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } - /** Initializes the CPU, AHB and APB buses clocks + /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; @@ -325,7 +325,7 @@ void Error_Handler(void) * @retval None */ void assert_failed(uint8_t *file, uint32_t line) -{ +{ /* User can add his own implementation to report the file name and line number, tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ } @@ -336,7 +336,7 @@ void assert_failed(uint8_t *file, uint32_t line) /* Working _sbrk example for .ld based libC malloc/free */ /* Replace this with one in Core/Src/sysmem.c */ /* Symbols defined in the linker script */ -extern uint8_t _end; +extern uint8_t _end; extern uint8_t _estack; extern uint32_t _Min_Stack_Size; void* _sbrk(ptrdiff_t incr) diff --git a/IDE/STM32Cube/wolfssl_example.c b/IDE/STM32Cube/wolfssl_example.c index d356af5e7..342e8ee9d 100644 --- a/IDE/STM32Cube/wolfssl_example.c +++ b/IDE/STM32Cube/wolfssl_example.c @@ -1750,7 +1750,7 @@ static int tls13_uart_client(void) wolfSSL_SetIOReadCtx(ssl, tbuf); -#ifdef HAVE_PQC +#ifdef WOLFSSL_HAVE_KYBER if (wolfSSL_UseKeyShare(ssl, WOLFSSL_KYBER_LEVEL1) != WOLFSSL_SUCCESS) { printf("wolfSSL_UseKeyShare Error!!"); } diff --git a/IDE/VS-AZURE-SPHERE/client/client.c b/IDE/VS-AZURE-SPHERE/client/client.c index 920b8b7b6..d23e0f957 100644 --- a/IDE/VS-AZURE-SPHERE/client/client.c +++ b/IDE/VS-AZURE-SPHERE/client/client.c @@ -1,4 +1,4 @@ -/* client.c +/* client.c * * Copyright (C) 2006-2024 wolfSSL Inc. * diff --git a/IDE/VS-AZURE-SPHERE/server/server.c b/IDE/VS-AZURE-SPHERE/server/server.c index 39938a9c9..70208fe5e 100644 --- a/IDE/VS-AZURE-SPHERE/server/server.c +++ b/IDE/VS-AZURE-SPHERE/server/server.c @@ -1,4 +1,4 @@ -/* server.c +/* server.c * * Copyright (C) 2006-2024 wolfSSL Inc. * diff --git a/IDE/VisualDSP/user_settings.h b/IDE/VisualDSP/user_settings.h index 40790b7e0..dd67bd8ac 100644 --- a/IDE/VisualDSP/user_settings.h +++ b/IDE/VisualDSP/user_settings.h @@ -481,7 +481,7 @@ extern "C" { /* Seed Source */ /* Size of returned HW RNG value */ -#if 0 +#if 0 #define CUSTOM_RAND_TYPE unsigned int extern unsigned int my_rng_seed_gen(void); #undef CUSTOM_RAND_GENERATE @@ -690,7 +690,7 @@ extern "C" { int argc; char** argv; int return_code; - struct fssShellInfo* info; + struct fssShellInfo* info; } wolfArgs; #define printf FCL_PRINTF diff --git a/IDE/WIN-SRTP-KDF-140-3/resource.h b/IDE/WIN-SRTP-KDF-140-3/resource.h index e92769c50..691fa7654 100644 --- a/IDE/WIN-SRTP-KDF-140-3/resource.h +++ b/IDE/WIN-SRTP-KDF-140-3/resource.h @@ -3,7 +3,7 @@ // Used by wolfssl-fips.rc // Next default values for new objects -// +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 101 diff --git a/IDE/WIN/user_settings_dtls.h b/IDE/WIN/user_settings_dtls.h index 06880e413..ff6f3ac1e 100644 --- a/IDE/WIN/user_settings_dtls.h +++ b/IDE/WIN/user_settings_dtls.h @@ -8,8 +8,8 @@ /* DTLS configuration including DTLS v.1.3 which requires TLS v.1.3. */ -/* The below DTLS configurations can be copied in to another user_settings.h - file that may have other settings that need to be preserved. +/* The below DTLS configurations can be copied in to another user_settings.h + file that may have other settings that need to be preserved. */ #define WOLFSSL_TLS13 #define WOLFSSL_DTLS diff --git a/IDE/WIN10/resource.h b/IDE/WIN10/resource.h index e92769c50..691fa7654 100644 --- a/IDE/WIN10/resource.h +++ b/IDE/WIN10/resource.h @@ -3,7 +3,7 @@ // Used by wolfssl-fips.rc // Next default values for new objects -// +// #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 101 diff --git a/IDE/WORKBENCH/README.md b/IDE/WORKBENCH/README.md index 656504579..d551b5ed9 100644 --- a/IDE/WORKBENCH/README.md +++ b/IDE/WORKBENCH/README.md @@ -27,7 +27,7 @@ then "Browse" and select: ``` Click "OK" then "OK" again. -4. Create a new `/user_settings.h` file and add your custom +4. Create a new `/user_settings.h` file and add your custom settings. Below is an example but you can expand the settings. For more details, see https://github.com/wolfSSL/wolfssl/blob/master/examples/configs/user_settings_template.h diff --git a/IDE/XCODE/README.md b/IDE/XCODE/README.md index f76f4f7d4..2401eae31 100644 --- a/IDE/XCODE/README.md +++ b/IDE/XCODE/README.md @@ -8,27 +8,27 @@ This directory contains the following files: 4. `wolfssl-FIPS.xcodeproj` -- project to build wolfSSL and wolfCrypt-FIPS if available 5. `user_settings.h` -- custom library settings, which are shared across projects -The library will output as `libwolfssl_osx.a` or 'libwolfssl_ios.a` depending on -the target. It will also copy the wolfSSL/wolfCrypt (and the CyaSSL/CtaoCrypt -compatibility) headers into an `include` directory located in +The library will output as `libwolfssl_osx.a` or 'libwolfssl_ios.a` depending on +the target. It will also copy the wolfSSL/wolfCrypt (and the CyaSSL/CtaoCrypt +compatibility) headers into an `include` directory located in `Build/Products/Debug` or `Build/Products/Release`. -For the library and testsuite to link properly the build location needs to be +For the library and testsuite to link properly the build location needs to be configured as realitive to workspace. 1. File -> Workspace Settings (or Xcode -> Preferences -> Locations -> Locations) 2. Derived Data -> Advanced 3. Custom -> Relative to Workspace 4. Products -> Build/Products -These Xcode projects define the `WOLFSSL_USER_SETTINGS` preprocessor -to enable the `user_settings.h` file for setting macros across +These Xcode projects define the `WOLFSSL_USER_SETTINGS` preprocessor +to enable the `user_settings.h` file for setting macros across multiple projects. If needed the Xcode preprocessors can be modified with these steps: 1. Click on the Project in "Project Navigator". 2. Click on the "Build Settings" tab. 3. Scroll down to the "Apple LLVM 6.0 - Preprocessing" section. -4. Open the disclosure for "Preprocessor Macros" and use the "+" and +4. Open the disclosure for "Preprocessor Macros" and use the "+" and "-" buttons to modify. Remember to do this for both Debug and Release. ## wolfSSL diff --git a/IDE/apple-universal/wolfssl-multiplatform/wolfssl-multiplatform/simple_client_example.c b/IDE/apple-universal/wolfssl-multiplatform/wolfssl-multiplatform/simple_client_example.c index d97bf559f..8efd0b410 100644 --- a/IDE/apple-universal/wolfssl-multiplatform/wolfssl-multiplatform/simple_client_example.c +++ b/IDE/apple-universal/wolfssl-multiplatform/wolfssl-multiplatform/simple_client_example.c @@ -40,7 +40,7 @@ int simple_client_example(void) WOLFSSL_CTX* ctx; WOLFSSL* ssl; int sockfd, ret; - + /* Resolve the server address */ struct addrinfo hints, *server_addr; memset(&hints, 0, sizeof(hints)); @@ -84,7 +84,7 @@ int simple_client_example(void) close(sockfd); return 1; } - + /* Load CA certificate into WOLFSSL_CTX * NOTE: CERT_PATH macro is set relative to Xcode $(PROJECT_DIR) environment * variable in the preprocessor macros section of the project build settings diff --git a/IDE/apple-universal/wolfssl-multiplatform/wolfssl-multiplatform/wolfssl_test_driver.c b/IDE/apple-universal/wolfssl-multiplatform/wolfssl-multiplatform/wolfssl_test_driver.c index 20f605ff7..e7ee8629e 100644 --- a/IDE/apple-universal/wolfssl-multiplatform/wolfssl-multiplatform/wolfssl_test_driver.c +++ b/IDE/apple-universal/wolfssl-multiplatform/wolfssl-multiplatform/wolfssl_test_driver.c @@ -42,21 +42,21 @@ void wolfssl_test(void) { int ret; test_func_args args = {0}; - + #ifdef WC_RNG_SEED_CB wc_SetSeed_Cb(wc_GenerateSeed); #endif - + printf("Run wolfCrypt Test:\n"); ret = wolfcrypt_test(&args); printf("\nResult of wolfcrypt_test() = %d\n\n", ret); - + printf("Run wolfCrypt Benchmark:\n"); ret = benchmark_test(&args); printf("\nResult of benchmark_test() = %d\n\n", ret); - + printf("Run simple client test:\n"); ret = simple_client_example(); printf("\nResult of simple_client_test() = %d\n\n", ret); - + } diff --git a/IDE/iotsafe-raspberrypi/README.md b/IDE/iotsafe-raspberrypi/README.md index 286ac5537..c70b29677 100644 --- a/IDE/iotsafe-raspberrypi/README.md +++ b/IDE/iotsafe-raspberrypi/README.md @@ -139,4 +139,4 @@ Run the built `./main.bin` to print the help usage. An example to run the demo connecting to a server: ``` ./main.bin -ip -h -p -t 25 -d /dev/ttyUSB0|/dev/tty/ACM0 -``` \ No newline at end of file +``` diff --git a/IDE/iotsafe/README.md b/IDE/iotsafe/README.md index e594d03e9..3f772a818 100644 --- a/IDE/iotsafe/README.md +++ b/IDE/iotsafe/README.md @@ -14,14 +14,14 @@ Note: The BG96 was tested using firmware `BG96MAR02A08M1G_01.012.01.012`. If hav ### Description -This example firmware will run an example TLS 1.2 server using wolfSSL, and a +This example firmware will run an example TLS 1.2 server using wolfSSL, and a TLS 1.2 client, on the same host, using an IoT-safe applet supporting the [IoT.05-v1-IoT standard](https://www.gsma.com/iot/wp-content/uploads/2019/12/IoT.05-v1-IoT-Security-Applet-Interface-Description.pdf). The client and server routines alternate their execution in a single-threaded, cooperative loop. -Client and server communicate to each other using memory buffers to establish a +Client and server communicate to each other using memory buffers to establish a TLS session without the use of TCP/IP sockets. ### IoT-Safe interface @@ -59,7 +59,7 @@ wolfSSL_iotsafe_on(cli_ssl, PRIVKEY_ID, ECDH_KEYPAIR_ID, PEER_PUBKEY_ID, PEER_CE The applet that has been tested with this demo has the current configuration: - Key slot | Name | Description + Key slot | Name | Description -------|--------|------------------ 0x02 | `PRIVKEY_ID` | pre-provisioned with client ECC key 0x03 | `ECDH_KEYPAIR_ID` | can store a keypair generated in the applet, used for shared key derivation @@ -68,7 +68,7 @@ The applet that has been tested with this demo has the current configuration: The following file is used to read the client's certificate: - + File Slot | Name | Description ----------|------|------------ 0x03 | `CRT_FILE_ID` | pre-provisioned with client certificate @@ -81,7 +81,7 @@ software to upload the firmware `image.bin` to the target board. 1) Using the STM32CubeProgrammer open the `image.elf` and program to flash. 2) Using ST-Link virtual serial port connect at 115220 -3) Hit reset button. +3) Hit reset button. 4) The output should look similar to below: ``` diff --git a/IDE/iotsafe/devices.c b/IDE/iotsafe/devices.c index 83c6b5887..aa78a7b70 100644 --- a/IDE/iotsafe/devices.c +++ b/IDE/iotsafe/devices.c @@ -62,10 +62,10 @@ static void usart1_init(void) GPIO_MODE(GPIOB_BASE) = reg | (0x02 << (USART1_PIN_TX * 2)); reg = GPIO_PUPD(GPIOG_BASE) & (0x03 << (USART1_PIN_RX * 2)); - + reg = GPIO_PUPD(GPIOB_BASE) & (0x03 << (USART1_PIN_TX * 2)); GPIO_PUPD(GPIOB_BASE) = reg | (0x01 << (USART1_PIN_TX * 2)); - + #if RTSCTS reg = GPIO_MODE(GPIOG_BASE) & ~(0x03 << (USART1_PIN_RTS * 2)); GPIO_MODE(GPIOG_BASE) = reg | (0x02 << (USART1_PIN_RTS * 2)); @@ -376,7 +376,7 @@ static void stmod_pin_init(void) /* RST pin */ reg = GPIO_MODE(STMOD_MODEM_RST_PORT) & ~(0x03 << (STMOD_MODEM_RST_PIN * 2)); GPIO_MODE(STMOD_MODEM_RST_PORT) = reg | (0x01 << (STMOD_MODEM_RST_PIN * 2)); - + /* DTR pin */ reg = GPIO_MODE(STMOD_MODEM_DTR_PORT) & ~(0x03 << (STMOD_MODEM_DTR_PIN * 2)); GPIO_MODE(STMOD_MODEM_DTR_PORT) = reg | (0x01 << (STMOD_MODEM_DTR_PIN * 2)); diff --git a/IDE/iotsafe/startup.c b/IDE/iotsafe/startup.c index 2b0123a30..0e3425193 100644 --- a/IDE/iotsafe/startup.c +++ b/IDE/iotsafe/startup.c @@ -99,7 +99,7 @@ void isr_usagefault(void) /* Panic. */ while(1) ;; } - + void isr_empty(void) { @@ -131,7 +131,7 @@ void (* const IV[])(void) = 0, // reserved isr_empty, // PendSV isr_systick, // SysTick - + isr_empty, // NVIC_WWDG_IRQ 0 isr_empty, // PVD_IRQ 1 isr_empty, // TAMP_STAMP_IRQ 2 diff --git a/IDE/mynewt/setup.sh b/IDE/mynewt/setup.sh index f7b32e81d..cb3aed091 100755 --- a/IDE/mynewt/setup.sh +++ b/IDE/mynewt/setup.sh @@ -36,7 +36,7 @@ newt pkg new crypto/wolfssl echo "create apps/wolfcrypttest pkg" /bin/rm -rf apps/wolfcrypttest newt pkg new -t app apps/wolfcrypttest -/bin/rm -rf apps/wolfcrypttest/include +/bin/rm -rf apps/wolfcrypttest/include /bin/rm -rf apps/wolfcrypttest/src /bin/mkdir -p apps/wolfcrypttest/src diff --git a/IDE/zephyr/include.am b/IDE/zephyr/include.am index 54648d465..e35ff53e7 100644 --- a/IDE/zephyr/include.am +++ b/IDE/zephyr/include.am @@ -2,4 +2,4 @@ # included from Top Level Makefile.am # All paths should be given relative to the root -EXTRA_DIST+= IDE/zephyr/README.md \ No newline at end of file +EXTRA_DIST+= IDE/zephyr/README.md diff --git a/README.md b/README.md index 8ab5a2806..28aac2669 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # wolfSSL Embedded SSL/TLS Library -The [wolfSSL embedded SSL library](https://www.wolfssl.com/products/wolfssl/) +The [wolfSSL embedded SSL library](https://www.wolfssl.com/products/wolfssl/) (formerly CyaSSL) is a lightweight SSL/TLS library written in ANSI C and targeted for embedded, RTOS, and resource-constrained environments - primarily because of its small size, speed, and feature set. It is commonly used in diff --git a/certs/ca-key-pkcs8-attribute.der b/certs/ca-key-pkcs8-attribute.der new file mode 100644 index 000000000..692a8cccf Binary files /dev/null and b/certs/ca-key-pkcs8-attribute.der differ diff --git a/certs/include.am b/certs/include.am index dd87e3265..d4417fe8e 100644 --- a/certs/include.am +++ b/certs/include.am @@ -6,6 +6,7 @@ EXTRA_DIST += \ certs/ca-cert-chain.der \ certs/ca-cert.pem \ certs/ca-key.pem \ + certs/ca-key-pkcs8-attribute.der \ certs/client-cert.pem \ certs/client-keyEnc.pem \ certs/client-key.pem \ diff --git a/cmake/Config.cmake.in b/cmake/Config.cmake.in index 19d60ed7e..99d5ed8f0 100644 --- a/cmake/Config.cmake.in +++ b/cmake/Config.cmake.in @@ -1,3 +1,3 @@ -@PACKAGE_INIT@ - -include ( "${CMAKE_CURRENT_LIST_DIR}/wolfssl-targets.cmake" ) +@PACKAGE_INIT@ + +include ( "${CMAKE_CURRENT_LIST_DIR}/wolfssl-targets.cmake" ) diff --git a/configure.ac b/configure.ac index 450523f3e..a304db825 100644 --- a/configure.ac +++ b/configure.ac @@ -1337,6 +1337,9 @@ do 87) ENABLED_MLDSA87=yes ;; + draft|fips204-draft) + AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_DILITHIUM_FIPS204_DRAFT" + ;; *) AC_MSG_ERROR([Invalid choice for DILITHIUM [all,make,sign,verify,verify-only,small,44,65,87]: $ENABLED_DILITHIUM.]) break;; diff --git a/doc/QUIC.md b/doc/QUIC.md index 3ab3f8de1..e0de42589 100644 --- a/doc/QUIC.md +++ b/doc/QUIC.md @@ -8,7 +8,7 @@ TLS works on top of the Internet's TCP protocol stack. The TCP is shipped as par and accessible via system calls and APIs. TCP itself is not secured by TLS, only the data sent via it is protected. TCP does not have to know anything about TLS. -QUIC, on the other hand, is always protected by TLS. A QUIC implementation does always need an +QUIC, on the other hand, is always protected by TLS. A QUIC implementation does always need an implementation of the TLS protocol, specifically TLSv1.3. It does this in new ways and TLS implementations need to accommodate these. Those specifics have been added to wolfSSL. @@ -51,13 +51,13 @@ The above configuration has also been added to [curl](https://github.com/curl/cu ### why? -Why all these different blocks? +Why all these different blocks? The separation of HTTP/3 and QUIC is natural when you think about the relationship between TCP and HTTP/1.1. Like TCP, QUIC can and will carry other protocols. HTTP/3 is only the first one. Most likely 'DNS over QUIC' (DoQ) is the next popular, replacing DoH. The separation of QUIC's "crypto" parts from its other protocol enabling functions is a matter of security. In its experimental beginnings, QUIC had its own security design. With the emerging TLSv1.3 and all it improvements, plus decades of experience, it seemed rather unwise to have something separate in QUIC. -Therefore, the complete TLSv1.3 handshake became part of the QUIC protocol, with some restrictions and simplifications (UDP based QUIC does not accommodate broken TCP middle boxes). With the need for a complete TLSv1.3 stack, QUIC implementers happily make use of existing TLS libraries. +Therefore, the complete TLSv1.3 handshake became part of the QUIC protocol, with some restrictions and simplifications (UDP based QUIC does not accommodate broken TCP middle boxes). With the need for a complete TLSv1.3 stack, QUIC implementers happily make use of existing TLS libraries. ## wolfSSL API @@ -76,7 +76,7 @@ A QUIC protocol handler installs these via `wolfSSL_CTX_set_quic_method()` or `w ``` DATA ---recv+decrypt---+ - v + v wolfSSL_provide_quic_data(ssl, ...) wolfSSL_do_handshake(ssl); +-> add_handshake_data_callback(REPLY) diff --git a/doc/dox_comments/header_files-ja/arc4.h b/doc/dox_comments/header_files-ja/arc4.h index bf3f8151f..4c1e6ee91 100644 --- a/doc/dox_comments/header_files-ja/arc4.h +++ b/doc/dox_comments/header_files-ja/arc4.h @@ -1,7 +1,7 @@ /*! - \ingroup ARC4 + \ingroup ARC4 \brief この関数は、バッファ内の入力メッセージを暗号化し、出力バッファーに暗号文を配置するか、またはバッファーから暗号文を復号化したり、ARC4暗号化を使用して、出力バッファーOUTを出力したりします。この関数は暗号化と復号化の両方に使用されます。この方法が呼び出される可能性がある場合は、まずWC_ARC4SETKEYを使用してARC4構造を初期化する必要があります。 - \return none + \return none \param arc4 メッセージの処理に使用されるARC4構造へのポインタ \param out 処理されたメッセージを保存する出力バッファへのポインタ \param in プロセスするメッセージを含む入力バッファへのポインタ @@ -24,9 +24,9 @@ int wc_Arc4Process(Arc4* arc4, byte* out, const byte* in, word32 length); /*! - \ingroup ARC4 + \ingroup ARC4 \brief この関数はARC4オブジェクトのキーを設定し、それを暗号として使用するために初期化します。WC_ARC4PROCESSを使用した暗号化に使用する前に呼び出される必要があります。 - \return none + \return none \param arc4 暗号化に使用されるARC4構造へのポインタ \param key ARC4構造を初期化するためのキー _Example_ diff --git a/doc/dox_comments/header_files-ja/asn_public.h b/doc/dox_comments/header_files-ja/asn_public.h index 164108fe4..0cade01b4 100644 --- a/doc/dox_comments/header_files-ja/asn_public.h +++ b/doc/dox_comments/header_files-ja/asn_public.h @@ -1870,7 +1870,7 @@ int wc_Asn1PrintOptions_Init(Asn1PrintOptions* opts); \return 0 成功時に返します。 \return BAD_FUNC_ARG asn1がNULLの場合に返されます。 \return BAD_FUNC_ARG valが範囲外の場合に返されます。 - + \param opts Asn1PrintOptions構造体へのポインタ \param opt 設定する情報へのポインタ \param val 設定値 diff --git a/doc/dox_comments/header_files-ja/blake2.h b/doc/dox_comments/header_files-ja/blake2.h index 61dad75a5..3e5f97601 100644 --- a/doc/dox_comments/header_files-ja/blake2.h +++ b/doc/dox_comments/header_files-ja/blake2.h @@ -1,5 +1,5 @@ /*! - \ingroup BLAKE2 + \ingroup BLAKE2 \brief この関数はBlake2 Hash関数で使用するためのBlake2b構造を初期化します。 \return 0 Blake2B構造の初期化に成功し、ダイジェストサイズを設定したときに返されます。 \param b2b 初期化するためにBlake2b構造へのポインタ @@ -14,7 +14,7 @@ int wc_InitBlake2b(Blake2b* b2b, word32 digestSz); /*! - \ingroup BLAKE2 + \ingroup BLAKE2 \brief この関数は、与えられた入力データとBlake2Bハッシュを更新します。この関数は、wc_initblake2bの後に呼び出され、最後のハッシュ:wc_blake2bfinalの準備ができているまで繰り返します。 \return 0 与えられたデータを使用してBlake2B構造を正常に更新すると返されます。 \return -1 入力データの圧縮中に障害が発生した場合 @@ -40,7 +40,7 @@ int wc_InitBlake2b(Blake2b* b2b, word32 digestSz); int wc_Blake2bUpdate(Blake2b* b2b, const byte* data, word32 sz); /*! - \ingroup BLAKE2 + \ingroup BLAKE2 \brief この関数は、以前に供給された入力データのBlake2bハッシュを計算します。出力ハッシュは長さREQUESTSZ、あるいは要求された場合はB2B構造のDigestSZを使用します。この関数は、wc_initblake2bの後に呼び出され、wc_blake2bupdateは必要な各入力データに対して処理されています。 \return 0 Blake2B Hashの計算に成功したときに返されました \return -1 blake2bハッシュを解析している間に失敗がある場合 diff --git a/doc/dox_comments/header_files-ja/bn.h b/doc/dox_comments/header_files-ja/bn.h index 30afb2b4d..eb2749a42 100644 --- a/doc/dox_comments/header_files-ja/bn.h +++ b/doc/dox_comments/header_files-ja/bn.h @@ -1,5 +1,5 @@ /*! - \ingroup openSSL + \ingroup openSSL \brief この関数は、次の数学「R =(A ^ P)%M」を実行します。 \return SSL_SUCCESS 数学操作をうまく実行します。 \return SSL_FAILURE エラーケースに遭遇した場合 diff --git a/doc/dox_comments/header_files-ja/camellia.h b/doc/dox_comments/header_files-ja/camellia.h index 5371a79ed..c07af016d 100644 --- a/doc/dox_comments/header_files-ja/camellia.h +++ b/doc/dox_comments/header_files-ja/camellia.h @@ -1,5 +1,5 @@ /*! - \ingroup Camellia + \ingroup Camellia \brief この関数は、Camelliaオブジェクトのキーと初期化ベクトルを設定し、それを暗号として使用するために初期化します。 \return 0 キーと初期化ベクトルを正常に設定すると返されます \return BAD_FUNC_ARG 入力引数の1つがエラー処理がある場合に返されます @@ -27,7 +27,7 @@ int wc_CamelliaSetKey(Camellia* cam, const byte* key, word32 len, const byte* iv); /*! - \ingroup Camellia + \ingroup Camellia \brief この関数は、Camelliaオブジェクトの初期化ベクトルを設定します。 \return 0 キーと初期化ベクトルを正常に設定すると返されます \return BAD_FUNC_ARG 入力引数の1つがエラー処理がある場合に返されます @@ -46,7 +46,7 @@ int wc_CamelliaSetKey(Camellia* cam, int wc_CamelliaSetIV(Camellia* cam, const byte* iv); /*! - \ingroup Camellia + \ingroup Camellia \brief この機能は、提供されたCamelliaオブジェクトを使用して1ブロック暗号化します。それはバッファーの最初の16バイトブロックを解析し、暗号化結果をバッファアウトに格納します。この機能を使用する前に、WC_CAMELLIASETKEYを使用してCamelliaオブジェクトを初期化する必要があります。 \return none いいえ返します。 \param cam 暗号化に使用する椿構造へのポインタ @@ -66,7 +66,7 @@ int wc_CamelliaEncryptDirect(Camellia* cam, byte* out, const byte* in); /*! - \ingroup Camellia + \ingroup Camellia \brief この機能は、提供されたCamelliaオブジェクトを使用して1ブロック復号化します。それはバッファ内の最初の16バイトブロックを解析し、それを復号化し、結果をバッファアウトに格納します。この機能を使用する前に、WC_CAMELLIASETKEYを使用してCamelliaオブジェクトを初期化する必要があります。 \return none いいえ返します。 \param cam 暗号化に使用する椿構造へのポインタ @@ -86,7 +86,7 @@ int wc_CamelliaDecryptDirect(Camellia* cam, byte* out, const byte* in); /*! - \ingroup Camellia + \ingroup Camellia \brief この関数は、バッファーの平文を暗号化し、その出力をバッファOUTに格納します。暗号ブロックチェーン(CBC)を使用してCamelliaを使用してこの暗号化を実行します。 \return none いいえ返します。 \param cam 暗号化に使用する椿構造へのポインタ @@ -107,7 +107,7 @@ int wc_CamelliaCbcEncrypt(Camellia* cam, byte* out, const byte* in, word32 sz); /*! - \ingroup Camellia + \ingroup Camellia \brief この関数は、バッファ内の暗号文を復号化し、その出力をバッファOUTに格納します。暗号ブロックチェーン(CBC)を搭載したCamelliaを使用してこの復号化を実行します。 \return none いいえ返します。 \param cam 暗号化に使用する椿構造へのポインタ diff --git a/doc/dox_comments/header_files-ja/chacha.h b/doc/dox_comments/header_files-ja/chacha.h index 171256ea2..dea2a6cc5 100644 --- a/doc/dox_comments/header_files-ja/chacha.h +++ b/doc/dox_comments/header_files-ja/chacha.h @@ -1,5 +1,5 @@ /*! - \ingroup ChaCha + \ingroup ChaCha \brief この関数はChachaオブジェクトの初期化ベクトル(nonce)を設定し、暗号として使用するために初期化します。WC_CHACHA_SETKEYを使用して、キーが設定された後に呼び出されるべきです。暗号化の各ラウンドに差し違いを使用する必要があります。 \return 0 初期化ベクトルを正常に設定すると返されます \return BAD_FUNC_ARG CTX入力引数の処理中にエラーが発生した場合 @@ -21,7 +21,7 @@ int wc_Chacha_SetIV(ChaCha* ctx, const byte* inIv, word32 counter); /*! - \ingroup ChaCha + \ingroup ChaCha \brief この関数は、バッファ入力からテキストを処理し、暗号化または復号化し、結果をバッファ出力に格納します。 \return 0 入力の暗号化または復号化に成功したときに返されます \return BAD_FUNC_ARG CTX入力引数の処理中にエラーが発生した場合 @@ -46,7 +46,7 @@ int wc_Chacha_Process(ChaCha* ctx, byte* cipher, const byte* plain, word32 msglen); /*! - \ingroup ChaCha + \ingroup ChaCha \brief この関数はChachaオブジェクトのキーを設定し、それを暗号として使用するために初期化します。NONCEをWC_CHACHA_SETIVで設定する前に、WC_CHACHA_PROCESSを使用した暗号化に使用する前に呼び出す必要があります。 \return 0 キーの設定に成功したときに返されます \return BAD_FUNC_ARG CTX入力引数の処理中にエラーが発生した場合、またはキーが16または32バイトの長さがある場合 diff --git a/doc/dox_comments/header_files-ja/cmac.h b/doc/dox_comments/header_files-ja/cmac.h index 6dc1dc9d6..401949a03 100644 --- a/doc/dox_comments/header_files-ja/cmac.h +++ b/doc/dox_comments/header_files-ja/cmac.h @@ -204,4 +204,4 @@ int wc_AesCmacVerify(const byte* check, word32 checkSz, ret = wc_CMAC_Grow(cmac、in、inSz) \endcode */ -int wc_CMAC_Grow(Cmac* cmac, const byte* in, int inSz); \ No newline at end of file +int wc_CMAC_Grow(Cmac* cmac, const byte* in, int inSz); diff --git a/doc/dox_comments/header_files-ja/coding.h b/doc/dox_comments/header_files-ja/coding.h index 7205bd0bd..2abcf3248 100644 --- a/doc/dox_comments/header_files-ja/coding.h +++ b/doc/dox_comments/header_files-ja/coding.h @@ -1,5 +1,5 @@ /*! - \ingroup Base_Encoding + \ingroup Base_Encoding \brief この機能は、与えられたBASS64符号化入力、IN、および出力バッファを出力バッファOUTに格納します。また、変数outlen内の出力バッファに書き込まれたサイズも設定します。 \return 0 Base64エンコード入力の復号化に成功したときに返されます \return BAD_FUNC_ARG 復号化された入力を保存するには、出力バッファが小さすぎる場合は返されます。 @@ -26,7 +26,7 @@ int Base64_Decode(const byte* in, word32 inLen, byte* out, word32* outLen); /*! - \ingroup Base_Encoding + \ingroup Base_Encoding \brief この機能は与えられた入力を符号化し、符号化結果を出力バッファOUTに格納します。エスケープ%0A行末の代わりに、従来の '\ N'行の終わりを持つデータを書き込みます。正常に完了すると、この機能はまた、出力バッファに書き込まれたバイト数に統一されます。 \return 0 Base64エンコード入力の復号化に成功したときに返されます \return BAD_FUNC_ARG 出力バッファが小さすぎてエンコードされた入力を保存する場合は返されます。 @@ -53,7 +53,7 @@ int Base64_Encode(const byte* in, word32 inLen, byte* out, word32* outLen); /*! - \ingroup Base_Encoding + \ingroup Base_Encoding \brief この機能は与えられた入力を符号化し、符号化結果を出力バッファOUTに格納します。それは '\ n "行の終わりではなく、%0aエスケープ行の終わりを持つデータを書き込みます。正常に完了すると、この機能はまた、出力バッファに書き込まれたバイト数に統一されます。 \return 0 Base64エンコード入力の復号化に成功したときに返されます \return BAD_FUNC_ARG 出力バッファが小さすぎてエンコードされた入力を保存する場合は返されます。 @@ -80,7 +80,7 @@ int Base64_EncodeEsc(const byte* in, word32 inLen, byte* out, word32* outLen); /*! - \ingroup Base_Encoding + \ingroup Base_Encoding \brief この機能は与えられた入力を符号化し、符号化結果を出力バッファOUTに格納します。それは新しい行なしでデータを書き込みます。正常に完了すると、この関数はまた、出力バッファに書き込まれたバイト数に統一されたものを設定します \return 0 Base64エンコード入力の復号化に成功したときに返されます \return BAD_FUNC_ARG 出力バッファが小さすぎてエンコードされた入力を保存する場合は返されます。 @@ -106,7 +106,7 @@ int Base64_Encode_NoNl(const byte* in, word32 inLen, byte* out, word32* outLen); /*! - \ingroup Base_Encoding + \ingroup Base_Encoding \brief この機能は、与えられたBASE16符号化入力、IN、および出力バッファへの結果を記憶する。また、変数outlen内の出力バッファに書き込まれたサイズも設定します。 \return 0 Base16エンコード入力の復号にうまく復号化したときに返されます \return BAD_FUNC_ARG 出力バッファが復号化された入力を保存するにも小さすぎる場合、または入力長が2つの倍数でない場合に返されます。 @@ -132,7 +132,7 @@ int Base64_Encode_NoNl(const byte* in, word32 inLen, byte* out, int Base16_Decode(const byte* in, word32 inLen, byte* out, word32* outLen); /*! - \ingroup Base_Encoding + \ingroup Base_Encoding \brief BASE16出力へのエンコード入力。 \return 0 成功 \return BAD_FUNC_ARG IN、OUT、またはoutlenがNULLの場合、またはoutlenがInlen Plus 1を超えている場合は返します。 diff --git a/doc/dox_comments/header_files-ja/compress.h b/doc/dox_comments/header_files-ja/compress.h index aee9fed37..a52265203 100644 --- a/doc/dox_comments/header_files-ja/compress.h +++ b/doc/dox_comments/header_files-ja/compress.h @@ -1,5 +1,5 @@ /*! - \ingroup Compression + \ingroup Compression \brief この関数は、ハフマン符号化を用いて与えられた入力データを圧縮し、出力をOUTに格納する。出力バッファは、圧縮が可能でないことが存在するため、出力バッファが入力バッファよりも大きいはずです。これはまだルックアップテーブルを必要とします。出力バッファに対してSRCSZ + 0.1%+ 12を割り当てることをお勧めします。 \return On 入力データの圧縮に成功し、出力バッファに格納されているバイト数を返します。 \return COMPRESS_INIT_E 圧縮のためにストリームの初期化中にエラーがある場合 @@ -24,7 +24,7 @@ int wc_Compress(byte* out, word32 outSz, const byte* in, word32 inSz, word32 flags); /*! - \ingroup Compression + \ingroup Compression \brief この関数は、ハフマン符号化を用いて所定の圧縮データを解凍し、出力をOUTに格納する。 \return Success 入力データの解凍に成功した場合は、出力バッファに格納されているバイト数を返します。 \return COMPRESS_INIT_E: 圧縮のためにストリームの初期化中にエラーがある場合 diff --git a/doc/dox_comments/header_files-ja/cryptocb.h b/doc/dox_comments/header_files-ja/cryptocb.h index 24ee2233e..3b8e3dbd9 100644 --- a/doc/dox_comments/header_files-ja/cryptocb.h +++ b/doc/dox_comments/header_files-ja/cryptocb.h @@ -1,5 +1,5 @@ /*! - \ingroup CryptoCb + \ingroup CryptoCb \brief この関数は、Crypto Operationsをキーストア、Secure Element、HSM、PKCS11またはTPMなどの外部ハードウェアにオフロードするための固有のデバイス識別子(DEVID)とコールバック関数を登録します。CryptoコールバックのSTSAFEの場合は、wolfcrypt / src / port / st / stsafe.cとwolfssl_stsafe_cryptodevcb関数を参照してください。TPMベースのCryptoコールバックの例では、wolftpm src / tpm2_wrap.cのwolftpm2_cryptodevcb関数を参照してください。 \return CRYPTOCB_UNAVAILABLE ソフトウェア暗号を使用するためにフォールバックする \return 0 成功のために @@ -73,7 +73,7 @@ int wc_CryptoCb_RegisterDevice(int devId, CryptoDevCallbackFunc cb, void* ctx); /*! - \ingroup CryptoCb + \ingroup CryptoCb \brief この関数は、固有のデバイス識別子(devid)コールバック関数を除外します。 \return none いいえ返します。 _Example_ diff --git a/doc/dox_comments/header_files-ja/curve25519.h b/doc/dox_comments/header_files-ja/curve25519.h index 5ddc615a9..7f7150327 100644 --- a/doc/dox_comments/header_files-ja/curve25519.h +++ b/doc/dox_comments/header_files-ja/curve25519.h @@ -1,5 +1,5 @@ /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数は、与えられたサイズ(Keysize)の指定された乱数発生器RNGを使用してCurve25519キーを生成し、それを指定されたCurve25519_Key構造体に格納します。キー構造がWC_CURVE25519_INIT()を介して初期化された後に呼び出されるべきです。 \return 0 キーの生成に成功し、それを指定されたCurve25519_Key構造体に格納します。 \return ECC_BAD_ARG_E 入力キーサイズがCurve25519キー(32バイト)のキーシェイズに対応していない場合は返されます。 @@ -27,7 +27,7 @@ int wc_curve25519_make_key(WC_RNG* rng, int keysize, curve25519_key* key); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数は、秘密の秘密鍵と受信した公開鍵を考えると、共有秘密鍵を計算します。生成された秘密鍵をバッファアウトに保存し、ounlentの秘密鍵の変数を割り当てます。ビッグエンディアンのみをサポートします。 \return 0 共有秘密鍵を正常に計算したときに返されました。 \return BAD_FUNC_ARG 渡された入力パラメータのいずれかがNULLの場合に返されます。 @@ -59,7 +59,7 @@ int wc_curve25519_shared_secret(curve25519_key* private_key, byte* out, word32* outlen); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数は、秘密の秘密鍵と受信した公開鍵を考えると、共有秘密鍵を計算します。生成された秘密鍵をバッファアウトに保存し、ounlentの秘密鍵の変数を割り当てます。ビッグ・リトルエンディアンの両方をサポートします。 \return 0 共有秘密鍵を正常に計算したときに返されました。 \return BAD_FUNC_ARG 渡された入力パラメータのいずれかがNULLの場合に返されます。 @@ -94,7 +94,7 @@ int wc_curve25519_shared_secret_ex(curve25519_key* private_key, byte* out, word32* outlen, int endian); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数はCurve25519キーを初期化します。構造のキーを生成する前に呼び出されるべきです。 \return 0 Curve25519_Key構造体の初期化に成功しました。 \return BAD_FUNC_ARG キーがNULLのときに返されます。 @@ -110,7 +110,7 @@ int wc_curve25519_shared_secret_ex(curve25519_key* private_key, int wc_curve25519_init(curve25519_key* key); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数はCurve25519オブジェクトを解放します。 _Example_ \code @@ -125,7 +125,7 @@ int wc_curve25519_init(curve25519_key* key); void wc_curve25519_free(curve25519_key* key); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数はCurve25519秘密鍵のみをインポートします。(ビッグエンディアン)。 \return 0 秘密鍵のインポートに成功しました。 \return BAD_FUNC_ARG キーまたはPRIVがNULLの場合は返します。 @@ -153,7 +153,7 @@ int wc_curve25519_import_private(const byte* priv, word32 privSz, curve25519_key* key); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief CURVE25519秘密鍵のインポートのみ。(大きなエンディアン)。 \return 0 秘密鍵のインポートに成功しました。 \return BAD_FUNC_ARG キーまたはPRIVがNULLの場合は返します。 @@ -184,7 +184,7 @@ int wc_curve25519_import_private_ex(const byte* priv, word32 privSz, curve25519_key* key, int endian); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数は、パブリック秘密鍵ペアをCurve25519_Key構造体にインポートします。ビッグエンディアンのみ。 \return 0 Curve25519_Key構造体へのインポートに返されます \return BAD_FUNC_ARG 入力パラメータのいずれかがNULLの場合に返します。 @@ -221,7 +221,7 @@ int wc_curve25519_import_private_raw(const byte* priv, word32 privSz, const byte* pub, word32 pubSz, curve25519_key* key); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数は、パブリック秘密鍵ペアをCurve25519_Key構造体にインポートします。ビッグ・リトルエンディアンの両方をサポートします。 \return 0 Curve25519_Key構造体へのインポートに返されます \return BAD_FUNC_ARG 入力パラメータのいずれかがNULLの場合に返します。 @@ -260,7 +260,7 @@ int wc_curve25519_import_private_raw_ex(const byte* priv, word32 privSz, curve25519_key* key, int endian); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数はCurve25519_Key構造体から秘密鍵をエクスポートし、それを指定されたアウトバッファに格納します。また、エクスポートされたキーのサイズになるように概要を設定します。ビッグエンディアンのみ。 \return 0 Curve25519_Key構造体から秘密鍵を正常にエクスポートしました。 \return BAD_FUNC_ARG 入力パラメータがNULLの場合に返されます。 @@ -291,7 +291,7 @@ int wc_curve25519_export_private_raw(curve25519_key* key, byte* out, word32* outLen); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数はCurve25519_Key構造体から秘密鍵をエクスポートし、それを指定されたアウトバッファに格納します。また、エクスポートされたキーのサイズになるように概要を設定します。それがビッグ・リトルエンディアンかを指定できます。 \return 0 Curve25519_Key構造体から秘密鍵を正常にエクスポートしました。 \return BAD_FUNC_ARG 入力パラメータがNULLの場合に返されます。 @@ -324,7 +324,7 @@ int wc_curve25519_export_private_raw_ex(curve25519_key* key, byte* out, word32* outLen, int endian); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数は、指定されたバッファから公開鍵をインポートし、それをCurve25519_Key構造体に格納します。 \return 0 公開鍵をCurve25519_Key構造体に正常にインポートしました。 \return ECC_BAD_ARG_E InLenパラメータがキー構造のキーサイズと一致しない場合に返されます。 @@ -358,7 +358,7 @@ int wc_curve25519_import_public(const byte* in, word32 inLen, curve25519_key* key); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数は、指定されたバッファから公開鍵をインポートし、それをCurve25519_Key構造体に格納します。 \return 0 公開鍵をCurve25519_Key構造体に正常にインポートしました。 \return ECC_BAD_ARG_E InLenパラメータがキー構造のキーサイズと一致しない場合に返されます。 @@ -393,7 +393,7 @@ int wc_curve25519_import_public_ex(const byte* in, word32 inLen, curve25519_key* key, int endian); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数は、公開鍵バッファが指定されたエンディアンに対して有効なCurve2519キー値を保持していることを確認します。 \return 0 公開鍵の値が有効なときに返されます。 \return ECC_BAD_ARG_E 公開鍵の値が無効な場合は返されます。 @@ -420,7 +420,7 @@ int wc_curve25519_import_public_ex(const byte* in, word32 inLen, int wc_curve25519_check_public(const byte* pub, word32 pubSz, int endian); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数は指定されたキー構造から公開鍵をエクスポートし、結果をアウトバッファに格納します。ビッグエンディアンのみ。 \return 0 Curve25519_Key構造体から公開鍵を正常にエクスポートする上で返されます。 \return ECC_BAD_ARG_E outlenがcurve25519_pub_key_sizeより小さい場合に返されます。 @@ -449,7 +449,7 @@ int wc_curve25519_check_public(const byte* pub, word32 pubSz, int endian); int wc_curve25519_export_public(curve25519_key* key, byte* out, word32* outLen); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数は指定されたキー構造から公開鍵をエクスポートし、結果をアウトバッファに格納します。ビッグ・リトルエンディアンの両方をサポートします。 \return 0 Curve25519_Key構造体から公開鍵を正常にエクスポートする上で返されます。 \return ECC_BAD_ARG_E outlenがcurve25519_pub_key_sizeより小さい場合に返されます。 @@ -481,7 +481,7 @@ int wc_curve25519_export_public_ex(curve25519_key* key, byte* out, word32* outLen, int endian); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief Export Curve25519キーペア。ビッグエンディアンのみ。 \return 0 Curve25519_Key構造体からキーペアのエクスポートに成功しました。 \return BAD_FUNC_ARG 入力パラメータがNULLの場合に返されます。 @@ -516,7 +516,7 @@ int wc_curve25519_export_key_raw(curve25519_key* key, byte* pub, word32 *pubSz); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief Export Curve25519キーペア。ビッグ・リトルエンディアン。 \return 0 Curve25519_Key構造体からキーペアのエクスポートに成功しました。 \return BAD_FUNC_ARG 入力パラメータがNULLの場合に返されます。 @@ -555,7 +555,7 @@ int wc_curve25519_export_key_raw_ex(curve25519_key* key, int endian); /*! - \ingroup Curve25519 + \ingroup Curve25519 \brief この関数は与えられたキー構造のキーサイズを返します。 \return Success 有効な初期化されたCurve25519_Key構造体を考慮すると、キーのサイズを返します。 \return 0 キーがNULLの場合は返されます diff --git a/doc/dox_comments/header_files-ja/curve448.h b/doc/dox_comments/header_files-ja/curve448.h index 4a6a1d2e7..d6d8a307a 100644 --- a/doc/dox_comments/header_files-ja/curve448.h +++ b/doc/dox_comments/header_files-ja/curve448.h @@ -1,5 +1,5 @@ /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数は、与えられたサイズ(Keysize)のサイズの指定された乱数発生器RNGを使用してCurve448キーを生成し、それを指定されたCurve448_Key構造体に格納します。キー構造がWC_CURVE448_INIT()を介して初期化された後に呼び出されるべきです。 \return 0 キーの生成に成功し、それを指定されたCurve448_Key構造体に格納します。 \return ECC_BAD_ARG_E 入力キーサイズがCurve448キー(56バイト)のキーシェイズに対応していない場合は返されます。 @@ -27,7 +27,7 @@ int wc_curve448_make_key(WC_RNG* rng, int keysize, curve448_key* key); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数は、秘密の秘密鍵と受信した公開鍵を考えると、共有秘密鍵を計算します。生成された秘密鍵をバッファアウトに保存し、ounlentの秘密鍵の変数を割り当てます。ビッグエンディアンのみをサポートします。 \return 0 共有秘密鍵を正常に計算する上で返却されました \return BAD_FUNC_ARG 渡された入力パラメーターのいずれかがNULLの場合に返されます @@ -58,7 +58,7 @@ int wc_curve448_shared_secret(curve448_key* private_key, byte* out, word32* outlen); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数は、秘密の秘密鍵と受信した公開鍵を考えると、共有秘密鍵を計算します。生成された秘密鍵をバッファアウトに保存し、ounlentの秘密鍵の変数を割り当てます。ビッグ・リトルエンディアンの両方をサポートします。 \return 0 共有秘密鍵を正常に計算したときに返されました。 \return BAD_FUNC_ARG 渡された入力パラメータのいずれかがNULLの場合に返されます。 @@ -92,7 +92,7 @@ int wc_curve448_shared_secret_ex(curve448_key* private_key, byte* out, word32* outlen, int endian); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数はCurve448キーを初期化します。構造のキーを生成する前に呼び出されるべきです。 \return 0 Curve448_Key構造体の初期化に成功しました。 \return BAD_FUNC_ARG キーがNULLのときに返されます。 @@ -108,7 +108,7 @@ int wc_curve448_shared_secret_ex(curve448_key* private_key, int wc_curve448_init(curve448_key* key); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数はCurve448オブジェクトを解放します。 _Example_ \code @@ -123,7 +123,7 @@ int wc_curve448_init(curve448_key* key); void wc_curve448_free(curve448_key* key); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数はCurve448秘密鍵のみをインポートします。(ビッグエンディアン)。 \return 0 秘密鍵のインポートに成功しました。 \return BAD_FUNC_ARG キーまたはPRIVがNULLの場合は返します。 @@ -151,7 +151,7 @@ int wc_curve448_import_private(const byte* priv, word32 privSz, curve448_key* key); /*! - \ingroup Curve448 + \ingroup Curve448 \brief CURVE448秘密鍵のインポートのみ。(ビッグエンディアン)。 \return 0 秘密鍵のインポートに成功しました。 \return BAD_FUNC_ARG キーまたはPRIVがNULLの場合は返します。 @@ -182,7 +182,7 @@ int wc_curve448_import_private_ex(const byte* priv, word32 privSz, curve448_key* key, int endian); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数は、public-秘密鍵のペアをCurve448_Key構造体にインポートします。ビッグエンディアンのみ。 \return 0 Curve448_Key構造体へのインポート時に返されます。 \return BAD_FUNC_ARG 入力パラメータのいずれかがNULLの場合に返します。 @@ -219,7 +219,7 @@ int wc_curve448_import_private_raw(const byte* priv, word32 privSz, const byte* pub, word32 pubSz, curve448_key* key); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数は、public-秘密鍵のペアをCurve448_Key構造体にインポートします。ビッグ・リトルエンディアンの両方をサポートします。 \return 0 Curve448_Key構造体へのインポート時に返されます。 \return BAD_FUNC_ARG 入力パラメータのいずれかがNULLの場合に返します。 @@ -259,7 +259,7 @@ int wc_curve448_import_private_raw_ex(const byte* priv, word32 privSz, curve448_key* key, int endian); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数はCurve448_Key構造体から秘密鍵をエクスポートし、それを指定されたバッファに格納します。また、エクスポートされたキーのサイズになるように概要を設定します。ビッグエンディアンのみ。 \return 0 Curve448_Key構造体から秘密鍵を正常にエクスポートする上で返されました。 \return BAD_FUNC_ARG 入力パラメータがNULLの場合に返されます。 @@ -290,7 +290,7 @@ int wc_curve448_export_private_raw(curve448_key* key, byte* out, word32* outLen); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数はCurve448_Key構造体から秘密鍵をエクスポートし、それを指定されたバッファに格納します。また、エクスポートされたキーのサイズになるように概要を設定します。それが大きいかリトルエンディアンかを指定できます。 \return 0 Curve448_Key構造体から秘密鍵を正常にエクスポートする上で返されました。 \return BAD_FUNC_ARG 入力パラメータがNULLの場合に返されます。 @@ -323,7 +323,7 @@ int wc_curve448_export_private_raw_ex(curve448_key* key, byte* out, word32* outLen, int endian); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数は、指定されたバッファから公開鍵をインポートし、それをCurve448_Key構造体に格納します。 \return 0 公開鍵をCurve448_Key構造体に正常にインポートしました。 \return ECC_BAD_ARG_E InLenパラメータがキー構造のキーサイズと一致しない場合に返されます。 @@ -357,7 +357,7 @@ int wc_curve448_import_public(const byte* in, word32 inLen, curve448_key* key); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数は、指定されたバッファから公開鍵をインポートし、それをCurve448_Key構造体に格納します。 \return 0 公開鍵をCurve448_Key構造体に正常にインポートしました。 \return ECC_BAD_ARG_E InLenパラメータがキー構造のキーサイズと一致しない場合に返されます。 @@ -392,7 +392,7 @@ int wc_curve448_import_public_ex(const byte* in, word32 inLen, curve448_key* key, int endian); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数は、公開鍵バッファがエンディアン順序付けを与えられた有効なCurve448キー値を保持することを確認します。 \return 0 公開鍵の値が有効なときに返されます。 \return ECC_BAD_ARG_E 公開鍵の値が無効な場合は返されます。 @@ -419,7 +419,7 @@ int wc_curve448_import_public_ex(const byte* in, word32 inLen, int wc_curve448_check_public(const byte* pub, word32 pubSz, int endian); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数は指定されたキー構造から公開鍵をエクスポートし、結果をアウトバッファに格納します。ビッグエンディアンのみ。 \return 0 Curve448_Key構造体から公開鍵のエクスポートに成功しました。 \return ECC_BAD_ARG_E outlenがcurve448_pub_key_sizeより小さい場合に返されます。 @@ -449,7 +449,7 @@ int wc_curve448_check_public(const byte* pub, word32 pubSz, int endian); int wc_curve448_export_public(curve448_key* key, byte* out, word32* outLen); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数は指定されたキー構造から公開鍵をエクスポートし、結果をアウトバッファに格納します。ビッグ・リトルエンディアンの両方をサポートします。 \return 0 Curve448_Key構造体から公開鍵のエクスポートに成功しました。 \return ECC_BAD_ARG_E outlenがcurve448_pub_key_sizeより小さい場合に返されます。 @@ -481,7 +481,7 @@ int wc_curve448_export_public_ex(curve448_key* key, byte* out, word32* outLen, int endian); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数は指定されたキー構造からキーペアをエクスポートし、結果をアウトバッファに格納します。ビッグエンディアンのみ。 \return 0 Curve448_Key構造体からキーペアのエクスポートに成功しました。 \return BAD_FUNC_ARG 入力パラメータがNULLの場合に返されます。 @@ -516,7 +516,7 @@ int wc_curve448_export_key_raw(curve448_key* key, byte* pub, word32 *pubSz); /*! - \ingroup Curve448 + \ingroup Curve448 \brief Curve448キーペアをエクスポートします。ビッグ、またはリトルエンディアン。 \brief この関数は指定されたキー構造からキーペアをエクスポートし、結果をアウトバッファに格納します。ビッグ、またはリトルエンディアン。 \return 0 成功 @@ -556,7 +556,7 @@ int wc_curve448_export_key_raw_ex(curve448_key* key, int endian); /*! - \ingroup Curve448 + \ingroup Curve448 \brief この関数は与えられたキー構造のキーサイズを返します。 \return Success 有効な初期化されたCurve448_Key構造体を考慮すると、キーのサイズを返します。 \return 0 キーがNULLの場合は返されます。 diff --git a/doc/dox_comments/header_files-ja/des3.h b/doc/dox_comments/header_files-ja/des3.h index c7f57aba0..a8829ef43 100644 --- a/doc/dox_comments/header_files-ja/des3.h +++ b/doc/dox_comments/header_files-ja/des3.h @@ -1,5 +1,5 @@ /*! - \ingroup 3DES + \ingroup 3DES \brief この関数は、引数として与えられたDES構造体のキーと初期化ベクトル(IV)を設定します。また、これらがまだ初期化されていない場合は、暗号化と復号化に必要なバッファーのスペースを初期化して割り当てます。注:IVが指定されていない場合(i.e.iv == null)初期化ベクトルは、デフォルトのIV 0になります。 \return 0 DES構造体のキーと初期化ベクトルを正常に設定する \param des 初期化するDES構造へのポインタ @@ -24,7 +24,7 @@ int wc_Des_SetKey(Des* des, const byte* key, const byte* iv, int dir); /*! - \ingroup 3DES + \ingroup 3DES \brief この関数は、引数として与えられたDES構造体の初期化ベクトル(IV)を設定します。NULL IVを渡したら、初期化ベクトルを0に設定します。 \return none いいえ返します。 \param des IVを設定するためのDES構造へのポインタ @@ -41,7 +41,7 @@ int wc_Des_SetKey(Des* des, const byte* key, void wc_Des_SetIV(Des* des, const byte* iv); /*! - \ingroup 3DES + \ingroup 3DES \brief この関数は入力メッセージを暗号化し、結果を出力バッファーに格納します。暗号ブロックチェーンチェーン(CBC)モードでDES暗号化を使用します。 \return 0 与えられた入力メッセージの暗号化に成功したときに返されます \param des 暗号化に使用するDES構造へのポインタ @@ -66,7 +66,7 @@ int wc_Des_CbcEncrypt(Des* des, byte* out, const byte* in, word32 sz); /*! - \ingroup 3DES + \ingroup 3DES \brief この関数は入力暗号文を復号化し、結果の平文を出力バッファーに出力します。暗号ブロックチェーンチェーン(CBC)モードでDES暗号化を使用します。 \return 0 与えられた暗号文を正常に復号化したときに返されました \param des 復号化に使用するDES構造へのポインタ @@ -91,7 +91,7 @@ int wc_Des_CbcDecrypt(Des* des, byte* out, const byte* in, word32 sz); /*! - \ingroup 3DES + \ingroup 3DES \brief この関数は入力メッセージを暗号化し、結果を出力バッファーに格納します。電子コードブック(ECB)モードでDES暗号化を使用します。 \return 0: 与えられた平文を正常に暗号化すると返されます。 \param des 暗号化に使用するDES構造へのポインタ @@ -115,7 +115,7 @@ int wc_Des_EcbEncrypt(Des* des, byte* out, const byte* in, word32 sz); /*! - \ingroup 3DES + \ingroup 3DES \brief この関数は入力メッセージを暗号化し、結果を出力バッファーに格納します。電子コードブック(ECB)モードでDES3暗号化を使用します。警告:ほぼすべてのユースケースでECBモードは安全性が低いと考えられています。可能な限りECB APIを直接使用しないでください。 \return 0 与えられた平文を正常に暗号化すると返されます \param des3 暗号化に使用するDES3構造へのポインタ @@ -139,7 +139,7 @@ int wc_Des3_EcbEncrypt(Des3* des, byte* out, const byte* in, word32 sz); /*! - \ingroup 3DES + \ingroup 3DES \brief この関数は、引数として与えられたDES3構造のキーと初期化ベクトル(IV)を設定します。また、これらがまだ初期化されていない場合は、暗号化と復号化に必要なバッファーのスペースを初期化して割り当てます。注:IVが指定されていない場合(i.e.iv == null)初期化ベクトルは、デフォルトのIV 0になります。 \return 0 DES構造体のキーと初期化ベクトルを正常に設定する \param des3 初期化するDES3構造へのポインタ @@ -165,7 +165,7 @@ int wc_Des3_SetKey(Des3* des, const byte* key, const byte* iv,int dir); /*! - \ingroup 3DES + \ingroup 3DES \brief この関数は、引数として与えられたDES3構造の初期化ベクトル(IV)を設定します。NULL IVを渡したら、初期化ベクトルを0に設定します。 \return none いいえ返します。 \param des IVを設定するためのDES3構造へのポインタ @@ -184,7 +184,7 @@ int wc_Des3_SetKey(Des3* des, const byte* key, int wc_Des3_SetIV(Des3* des, const byte* iv); /*! - \ingroup 3DES + \ingroup 3DES \brief この関数は入力メッセージを暗号化し、結果を出力バッファーに格納します。暗号ブロックチェーン(CBC)モードでトリプルDES(3DES)暗号化を使用します。 \return 0 与えられた入力メッセージの暗号化に成功したときに返されます \param des 暗号化に使用するDES3構造へのポインタ @@ -209,7 +209,7 @@ int wc_Des3_CbcEncrypt(Des3* des, byte* out, const byte* in,word32 sz); /*! - \ingroup 3DES + \ingroup 3DES \brief この関数は入力暗号文を復号化し、結果の平文を出力バッファーに出力します。暗号ブロックチェーン(CBC)モードでトリプルDES(3DES)暗号化を使用します。 \return 0 与えられた暗号文を正常に復号化したときに返されました \param des 復号化に使用するDES3構造へのポインタ diff --git a/doc/dox_comments/header_files-ja/dh.h b/doc/dox_comments/header_files-ja/dh.h index 45dda386b..e8db7eae7 100644 --- a/doc/dox_comments/header_files-ja/dh.h +++ b/doc/dox_comments/header_files-ja/dh.h @@ -1,5 +1,5 @@ /*! - \ingroup Diffie-Hellman + \ingroup Diffie-Hellman \brief この関数は、Diffie-Hellman Exchangeプロトコルを使用して安全な秘密鍵を交渉するのに使用するためのDiffie-Hellmanキーを初期化します。 \return none いいえ返します。 _Example_ @@ -13,7 +13,7 @@ int wc_InitDhKey(DhKey* key); /*! - \ingroup Diffie-Hellman + \ingroup Diffie-Hellman \brief この関数は、Diffie-Hellman Exchangeプロトコルを使用して安全な秘密鍵をネゴシエートするために使用された後にDiffie-Hellmanキーを解放します。 \return none いいえ返します。 _Example_ @@ -28,7 +28,7 @@ int wc_InitDhKey(DhKey* key); void wc_FreeDhKey(DhKey* key); /*! - \ingroup Diffie-Hellman + \ingroup Diffie-Hellman \brief この関数はdiffie-hellmanパブリックパラメータに基づいてパブリック/秘密鍵ペアを生成し、PRIVSの秘密鍵とPubの公開鍵を格納します。初期化されたDiffie-Hellmanキーと初期化されたRNG構造を取ります。 \return BAD_FUNC_ARG この関数への入力の1つを解析するエラーがある場合に返されます \return RNG_FAILURE_E RNGを使用して乱数を生成するエラーが発生した場合 @@ -63,7 +63,7 @@ int wc_DhGenerateKeyPair(DhKey* key, WC_RNG* rng, byte* priv, word32* privSz, byte* pub, word32* pubSz); /*! - \ingroup Diffie-Hellman + \ingroup Diffie-Hellman \brief この関数は、ローカル秘密鍵と受信した公開鍵に基づいて合意された秘密鍵を生成します。交換の両側で完了した場合、この関数は対称通信のための秘密鍵の合意を生成します。共有秘密鍵の生成に成功すると、書かれた秘密鍵のサイズは仲間に保存されます。 \return 0 合意された秘密鍵の生成に成功しました \return MP_INIT_E 共有秘密鍵の生成中にエラーが発生した場合に返却される可能性があります @@ -100,7 +100,7 @@ int wc_DhAgree(DhKey* key, byte* agree, word32* agreeSz, word32 pubSz); /*! - \ingroup Diffie-Hellman + \ingroup Diffie-Hellman \brief この機能は、DERフォーマットのキーを含む与えられた入力バッファからDiffie-Hellmanキーをデコードします。結果をDHKEY構造体に格納します。 \return 0 入力キーの復号に成功したときに返されます \return ASN_PARSE_E 入力のシーケンスを解析したエラーがある場合に返されます @@ -128,7 +128,7 @@ int wc_DhKeyDecode(const byte* input, word32* inOutIdx, DhKey* key, word32); /*! - \ingroup Diffie-Hellman + \ingroup Diffie-Hellman \brief この関数は、入力秘密鍵パラメータを使用してDHKEY構造体のキーを設定します。WC_DHKEYDECODEとは異なり、この関数は入力キーがDERフォーマットでフォーマットされ、代わりにPARSED入力パラメータP(Prime)とG(Base)を受け入れる必要はありません。 \return 0 鍵の設定に成功しました \return BAD_FUNC_ARG 入力パラメータのいずれかがNULLに評価された場合に返されます。 @@ -157,7 +157,7 @@ int wc_DhSetKey(DhKey* key, const byte* p, word32 pSz, const byte* g, word32 gSz); /*! - \ingroup Diffie-Hellman + \ingroup Diffie-Hellman \brief この関数は、与えられた入力バッファからDiffie-HellmanパラメータP(Prime)とG(ベース)をフォーマットされています。 \return 0 DHパラメータの抽出に成功しました \return ASN_PARSE_E DERフォーマットのDH証明書の解析中にエラーが発生した場合に返されます。 @@ -187,7 +187,7 @@ int wc_DhParamsLoad(const byte* input, word32 inSz, byte* p, word32* pInOutSz, byte* g, word32* gInOutSz); /*! - \ingroup Diffie-Hellman + \ingroup Diffie-Hellman \sa wc_Dh_ffdhe3072_Get \sa wc_Dh_ffdhe4096_Get \sa wc_Dh_ffdhe6144_Get @@ -196,7 +196,7 @@ int wc_DhParamsLoad(const byte* input, word32 inSz, byte* p, const DhParams* wc_Dh_ffdhe2048_Get(void); /*! - \ingroup Diffie-Hellman + \ingroup Diffie-Hellman \sa wc_Dh_ffdhe2048_Get \sa wc_Dh_ffdhe4096_Get \sa wc_Dh_ffdhe6144_Get @@ -205,7 +205,7 @@ const DhParams* wc_Dh_ffdhe2048_Get(void); const DhParams* wc_Dh_ffdhe3072_Get(void); /*! - \ingroup Diffie-Hellman + \ingroup Diffie-Hellman \sa wc_Dh_ffdhe2048_Get \sa wc_Dh_ffdhe3072_Get \sa wc_Dh_ffdhe6144_Get @@ -214,7 +214,7 @@ const DhParams* wc_Dh_ffdhe3072_Get(void); const DhParams* wc_Dh_ffdhe4096_Get(void); /*! - \ingroup Diffie-Hellman + \ingroup Diffie-Hellman \sa wc_Dh_ffdhe2048_Get \sa wc_Dh_ffdhe3072_Get \sa wc_Dh_ffdhe4096_Get @@ -223,7 +223,7 @@ const DhParams* wc_Dh_ffdhe4096_Get(void); const DhParams* wc_Dh_ffdhe6144_Get(void); /*! - \ingroup Diffie-Hellman + \ingroup Diffie-Hellman \sa wc_Dh_ffdhe2048_Get \sa wc_Dh_ffdhe3072_Get \sa wc_Dh_ffdhe4096_Get @@ -232,13 +232,13 @@ const DhParams* wc_Dh_ffdhe6144_Get(void); const DhParams* wc_Dh_ffdhe8192_Get(void); /*! - \ingroup Diffie-Hellman + \ingroup Diffie-Hellman */ int wc_DhCheckKeyPair(DhKey* key, const byte* pub, word32 pubSz, const byte* priv, word32 privSz); /*! - \ingroup Diffie-Hellman + \ingroup Diffie-Hellman */ int wc_DhCheckPrivKey(DhKey* key, const byte* priv, word32 pubSz); diff --git a/doc/dox_comments/header_files-ja/doxygen_groups.h b/doc/dox_comments/header_files-ja/doxygen_groups.h index e3009c31f..41c8495a9 100644 --- a/doc/dox_comments/header_files-ja/doxygen_groups.h +++ b/doc/dox_comments/header_files-ja/doxygen_groups.h @@ -154,7 +154,7 @@ -# Set the RSK and, optionally precomputation table: wc_SetSakkeRsk() -# Derive SSV and auth data: wc_DeriveSakkeSSV() -# Free SAKKE Key: wc_FreeSakkeKey() - + \defgroup SAKKE_Setup Setup SAKKE Key Operations for establishing a SAKKE key. diff --git a/doc/dox_comments/header_files-ja/dsa.h b/doc/dox_comments/header_files-ja/dsa.h index 64ae4733d..066a0a2e5 100644 --- a/doc/dox_comments/header_files-ja/dsa.h +++ b/doc/dox_comments/header_files-ja/dsa.h @@ -1,5 +1,5 @@ /*! - \ingroup DSA + \ingroup DSA \brief この関数は、デジタル署名アルゴリズム(DSA)を介した認証に使用するためにDSAKEYオブジェクトを初期化します。 \return 0 成功に戻りました。 \return BAD_FUNC_ARG NULLキーが渡された場合に返されます。 @@ -14,7 +14,7 @@ int wc_InitDsaKey(DsaKey* key); /*! - \ingroup DSA + \ingroup DSA \brief この関数は、使用された後にdsakeyオブジェクトを解放します。 \return none いいえ返します。 _Example_ @@ -29,7 +29,7 @@ int wc_InitDsaKey(DsaKey* key); void wc_FreeDsaKey(DsaKey* key); /*! - \ingroup DSA + \ingroup DSA \brief この機能は入力ダイジェストに署名し、結果を出力バッファーに格納します。 \return 0 入力ダイジェストに正常に署名したときに返されました \return MP_INIT_E DSA署名の処理にエラーがある場合は返される可能性があります。 @@ -67,7 +67,7 @@ int wc_DsaSign(const byte* digest, byte* out, DsaKey* key, WC_RNG* rng); /*! - \ingroup DSA + \ingroup DSA \brief この関数は、秘密鍵を考えると、ダイジェストの署名を検証します。回答パラメータでキーが正しく検証されているかどうか、正常な検証に対応する1、および失敗した検証に対応する0が格納されます。 \return 0 検証要求の処理に成功したときに返されます。注:これは、署名が検証されていることを意味するわけではなく、関数が成功したというだけです。 \return MP_INIT_E DSA署名の処理にエラーがある場合は返される可能性があります。 @@ -106,7 +106,7 @@ int wc_DsaVerify(const byte* digest, const byte* sig, DsaKey* key, int* answer); /*! - \ingroup DSA + \ingroup DSA \brief この機能は、DSA公開鍵を含むDERフォーマットの証明書バッファを復号し、与えられたDSakey構造体にキーを格納します。また、入力読み取りの長さに応じてINOUTIDXパラメータを設定します。 \return 0 dsakeyオブジェクトの公開鍵を正常に設定する \return ASN_PARSE_E 証明書バッファを読みながらエンコーディングにエラーがある場合 @@ -133,7 +133,7 @@ int wc_DsaPublicKeyDecode(const byte* input, word32* inOutIdx, DsaKey* key, word32 inSz); /*! - \ingroup DSA + \ingroup DSA \brief この機能は、DSA秘密鍵を含むDERフォーマットの証明書バッファをデコードし、指定されたDSakey構造体にキーを格納します。また、入力読み取りの長さに応じてINOUTIDXパラメータを設定します。 \return 0 dsakeyオブジェクトの秘密鍵を正常に設定するに返されました \return ASN_PARSE_E 証明書バッファを読みながらエンコーディングにエラーがある場合 @@ -160,7 +160,7 @@ int wc_DsaPrivateKeyDecode(const byte* input, word32* inOutIdx, DsaKey* key, word32 inSz); /*! - \ingroup DSA + \ingroup DSA \brief DSAKEYキーをDERフォーマット、出力への書き込み(Inlen)、書き込まれたバイトを返します。 \return outLen 成功、書かれたバイト数 \return BAD_FUNC_ARG キーまたは出力はNULLまたはキー - >タイプがDSA_PRIVATEではありません。 @@ -187,7 +187,7 @@ int wc_DsaPrivateKeyDecode(const byte* input, word32* inOutIdx, int wc_DsaKeyToDer(DsaKey* key, byte* output, word32 inLen); /*! - \ingroup DSA + \ingroup DSA \brief DSAキーを作成します。 \return MP_OKAY 成功 \return BAD_FUNC_ARG RNGまたはDSAのどちらかがnullです。 @@ -212,7 +212,7 @@ int wc_DsaKeyToDer(DsaKey* key, byte* output, word32 inLen); int wc_MakeDsaKey(WC_RNG *rng, DsaKey *dsa); /*! - \ingroup DSA + \ingroup DSA \brief FIPS 186-4は、modulus_size値の有効な値を定義します(1024,160)(2048,256)(3072,256) \return 0 成功 \return BAD_FUNC_ARG RNGまたはDSAはNULLまたはMODULUS_SIZEが無効です。 diff --git a/doc/dox_comments/header_files-ja/ed448.h b/doc/dox_comments/header_files-ja/ed448.h index d1f20f23d..b75d27e37 100644 --- a/doc/dox_comments/header_files-ja/ed448.h +++ b/doc/dox_comments/header_files-ja/ed448.h @@ -1,5 +1,5 @@ /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、秘密鍵からED448公開鍵を生成します。公開鍵をバッファPubkeyに格納し、Pubkeyszでこのバッファに書き込まれたバイトを設定します。 \return 0 公開鍵の作成に成功したときに返されます。 \return BAD_FUNC_ARG IFIキーまたはPubKeyがNULLに評価された場合、または指定されたキーサイズが57バイトではない場合(ED448には57バイトのキーがあります)。 @@ -31,7 +31,7 @@ int wc_ed448_make_public(ed448_key* key, unsigned char* pubKey, word32 pubKeySz); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は新しいED448キーを生成し、それをキーに格納します。 \return 0 ED448_Keyを正常に作成したときに返されます。 \return BAD_FUNC_ARG RNGまたはKeyがNULLに評価された場合、または指定されたキーサイズが57バイトではない場合(ED448には57バイトのキーがあります)。 @@ -58,7 +58,7 @@ int wc_ed448_make_public(ed448_key* key, unsigned char* pubKey, int wc_ed448_make_key(WC_RNG* rng, int keysize, ed448_key* key); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、ED448_Keyオブジェクトを使用したメッセージに正解を保証します。 \return 0 メッセージの署名を正常に生成すると返されます。 \return BAD_FUNC_ARG 入力パラメータのいずれかがNULLに評価された場合、または出力バッファが小さすぎて生成された署名を保存する場合は返されます。 @@ -94,7 +94,7 @@ int wc_ed448_sign_msg(const byte* in, word32 inlen, byte* out, word32 *outlen, ed448_key* key); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、Ed448_Keyオブジェクトを使用してメッセージダイジェストに署名して信頼性を保証します。コンテキストは署名されたデータの一部として含まれています。ハッシュは、署名計算前のプリハッシュメッセージです。メッセージダイジェストを作成するために使用されるハッシュアルゴリズムはShake-256でなければなりません。 \return 0 メッセージダイジェストの署名を正常に生成すると返されます。 \return BAD_FUNC_ARG 返された入力パラメータはNULLに評価されます。出力バッファが小さすぎて生成された署名を保存するには小さすぎます。 @@ -135,7 +135,7 @@ int wc_ed448ph_sign_hash(const byte* hash, word32 hashLen, byte* out, const byte* context, byte contextLen); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、ED448_Keyオブジェクトを使用したメッセージに正解を保証します。コンテキストは署名されたデータの一部として含まれています。署名計算の前にメッセージは事前にハッシュされています。 \return 0 メッセージの署名を正常に生成すると返されます。 \return BAD_FUNC_ARG 返された入力パラメータはNULLに評価されます。出力バッファが小さすぎて生成された署名を保存するには小さすぎます。 @@ -176,7 +176,7 @@ int wc_ed448ph_sign_msg(const byte* in, word32 inLen, byte* out, byte contextLen); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、メッセージのED448署名を確認して信頼性を確保します。文脈はデータ検証済みの一部として含まれています。答えはRESを介して返され、有効な署名に対応する1、無効な署名に対応する0を返します。 \return 0 署名検証と認証を正常に実行したときに返されます。 \return BAD_FUNC_ARG いずれかの入力パラメータがNULLに評価された場合、またはSIGLENが署名の実際の長さと一致しない場合に返されます。 @@ -214,7 +214,7 @@ int wc_ed448_verify_msg(const byte* sig, word32 siglen, const byte* msg, const byte* context, byte contextLen); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、メッセージのダイジェストのED448シグネチャを検証して、信頼性を確保します。文脈はデータ検証済みの一部として含まれています。ハッシュは、署名計算前のプリハッシュメッセージです。メッセージダイジェストを作成するために使用されるハッシュアルゴリズムはShake-256でなければなりません。答えはRESを介して返され、有効な署名に対応する1、無効な署名に対応する0を返します。 \return 0 署名検証と認証を正常に実行したときに返されます。 \return BAD_FUNC_ARG いずれかの入力パラメータがNULLに評価された場合、またはSIGLENが署名の実際の長さと一致しない場合に返されます。 @@ -252,7 +252,7 @@ int wc_ed448ph_verify_hash(const byte* sig, word32 siglen, const byte* hash, const byte* context, byte contextLen); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、メッセージのED448署名を確認して信頼性を確保します。文脈はデータ検証済みの一部として含まれています。検証前にメッセージがプリハッシュされています。答えはRESを介して返され、有効な署名に対応する1、無効な署名に対応する0を返します。 \return 0 署名検証と認証を正常に実行したときに返されます。 \return BAD_FUNC_ARG いずれかの入力パラメータがNULLに評価された場合、またはSIGLENが署名の実際の長さと一致しない場合に返されます。 @@ -290,7 +290,7 @@ int wc_ed448ph_verify_msg(const byte* sig, word32 siglen, const byte* msg, const byte* context, byte contextLen); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、メッセージ検証で将来の使用のためにED448_Keyオブジェクトを初期化します。 \return 0 ED448_Keyオブジェクトの初期化に成功したら返されます。 \return BAD_FUNC_ARG キーがNULLの場合は返されます。 @@ -306,7 +306,7 @@ int wc_ed448ph_verify_msg(const byte* sig, word32 siglen, const byte* msg, int wc_ed448_init(ed448_key* key); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、それが使用された後にED448オブジェクトを解放します。 _Example_ \code @@ -321,7 +321,7 @@ int wc_ed448_init(ed448_key* key); void wc_ed448_free(ed448_key* key); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、公開鍵を含むバッファからPublic ED448_Keyペアをインポートします。この関数は圧縮キーと非圧縮キーの両方を処理します。 \return 0 ED448_Keyのインポートに成功しました。 \return BAD_FUNC_ARG INまたはKEYがNULLに評価されている場合、またはINLENがED448キーのサイズより小さい場合に返されます。 @@ -346,7 +346,7 @@ void wc_ed448_free(ed448_key* key); int wc_ed448_import_public(const byte* in, word32 inLen, ed448_key* key); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、ed448秘密鍵をバッファからのみインポートします。 \return 0 ED448秘密鍵のインポートに成功しました。 \return BAD_FUNC_ARG INまたはKEYがNULLに評価された場合、またはPRIVSZがED448_KEY_SIZEよりも小さい場合に返されます。 @@ -373,7 +373,7 @@ int wc_ed448_import_private_only(const byte* priv, word32 privSz, ed448_key* key); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、一対のバッファからパブリック/プライベートED448キーペアをインポートします。この関数は圧縮キーと非圧縮キーの両方を処理します。 \return 0 ED448キーのインポートに成功しました。 \return BAD_FUNC_ARG INまたはKEYがNULLに評価された場合、またはPROVSZがED448_KEY_SIZEまたはPUBSZのいずれかがeD448_PUB_KEY_SIZEよりも小さい場合に返されます。 @@ -404,7 +404,7 @@ int wc_ed448_import_private_key(const byte* priv, word32 privSz, const byte* pub, word32 pubSz, ed448_key* key); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、ED448_Key構造体から秘密鍵をエクスポートします。公開鍵をバッファアウトに格納し、ounterenでこのバッファに書き込まれたバイトを設定します。 \return 0 公開鍵のエクスポートに成功したら返されます。 \return BAD_FUNC_ARG いずれかの入力値がNULLに評価された場合に返されます。 @@ -432,7 +432,7 @@ int wc_ed448_import_private_key(const byte* priv, word32 privSz, int wc_ed448_export_public(ed448_key* key, byte* out, word32* outLen); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、ED448_Key構造体からの秘密鍵のみをエクスポートします。秘密鍵をバッファアウトに格納し、outlenにこのバッファに書き込まれたバイトを設定します。 \return 0 秘密鍵のエクスポートに成功したら返されます。 \return ECC_BAD_ARG_E いずれかの入力値がNULLに評価された場合に返されます。 @@ -459,7 +459,7 @@ int wc_ed448_export_public(ed448_key* key, byte* out, word32* outLen); int wc_ed448_export_private_only(ed448_key* key, byte* out, word32* outLen); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、ED448_Key構造体からキーペアをエクスポートします。キーペアをバッファOUTに格納し、ounterenでこのバッファに書き込まれたバイトを設定します。 \return 0 キーペアのエクスポートに成功したら返されます。 \return ECC_BAD_ARG_E いずれかの入力値がNULLに評価された場合に返されます。 @@ -490,7 +490,7 @@ int wc_ed448_export_private_only(ed448_key* key, byte* out, word32* outLen); int wc_ed448_export_private(ed448_key* key, byte* out, word32* outLen); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、ED448_Key構造体とは別にプライベートキーと公開鍵をエクスポートします。秘密鍵をバッファーPrivに格納し、PRIVSZでこのバッファに書き込まれたバイトを設定します。公開鍵をバッファPUBに格納し、Pubszでこのバッファに書き込まれたバイトを設定します。 \return 0 キーペアのエクスポートに成功したら返されます。 \return ECC_BAD_ARG_E いずれかの入力値がNULLに評価された場合に返されます。 @@ -524,7 +524,7 @@ int wc_ed448_export_key(ed448_key* key, byte* pub, word32 *pubSz); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、ed448_key構造体の公開鍵をチェックします。 \return 0 プライベートキーと公開鍵が一致した場合に返されます。 \return BAD_FUNC_ARGS 与えられたキーがNULLの場合に返されます。 @@ -549,7 +549,7 @@ int wc_ed448_check_key(ed448_key* key); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、ED448秘密鍵のサイズ - 57バイトを返します。 \return ED448_KEY_SIZE 有効な秘密鍵のサイズ(57バイト)。 \return BAD_FUNC_ARGS 与えられたキーがNULLの場合に返されます。 @@ -569,7 +569,7 @@ int wc_ed448_check_key(ed448_key* key); int wc_ed448_size(ed448_key* key); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、秘密鍵サイズ(secret + public)をバイト単位で返します。 \return ED448_PRV_KEY_SIZE 秘密鍵のサイズ(114バイト)。 \return BAD_FUNC_ARG key引数がnullの場合は返します。 @@ -590,7 +590,7 @@ int wc_ed448_size(ed448_key* key); int wc_ed448_priv_size(ed448_key* key); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は圧縮鍵サイズをバイト単位で返します(公開鍵)。 \return ED448_PUB_KEY_SIZE 圧縮公開鍵のサイズ(57バイト)。 \return BAD_FUNC_ARG key引数がnullの場合は返します。 @@ -610,7 +610,7 @@ int wc_ed448_priv_size(ed448_key* key); int wc_ed448_pub_size(ed448_key* key); /*! - \ingroup ED448 + \ingroup ED448 \brief この関数は、ED448シグネチャのサイズ(バイト数114)を返します。 \return ED448_SIG_SIZE ED448シグネチャ(114バイト)のサイズ。 \return BAD_FUNC_ARG key引数がnullの場合は返します。 diff --git a/doc/dox_comments/header_files-ja/error-crypt.h b/doc/dox_comments/header_files-ja/error-crypt.h index c558c33be..e660d1f32 100644 --- a/doc/dox_comments/header_files-ja/error-crypt.h +++ b/doc/dox_comments/header_files-ja/error-crypt.h @@ -1,5 +1,5 @@ /*! - \ingroup Error + \ingroup Error \brief この関数は、特定のバッファ内の特定のエラーコードのエラー文字列を格納します。 \return none いいえ返します。 \param error 文字列を取得するためのエラーコード @@ -17,7 +17,7 @@ void wc_ErrorString(int err, char* buff); /*! - \ingroup Error + \ingroup Error \brief この関数は、特定のエラーコードのエラー文字列を返します。 \return string エラーコードのエラー文字列を文字列リテラルとして返します。 _Example_ diff --git a/doc/dox_comments/header_files-ja/evp.h b/doc/dox_comments/header_files-ja/evp.h index 93355400e..d6fef8e5d 100644 --- a/doc/dox_comments/header_files-ja/evp.h +++ b/doc/dox_comments/header_files-ja/evp.h @@ -1,5 +1,5 @@ /*! - \ingroup openSSL + \ingroup openSSL \brief それぞれのwolfssl_evp_cipherポインタのゲッター関数。最初にプログラム内でwolfssl_evp_init()を1回呼び出す必要があります。wolfssl_des_ecbマクロは、wolfssl_evp_des_ede3_ecb()に対して定義する必要があります。 \return pointer DES EDE3操作のためのwolfssl_evp_cipherポインタを返します。 _Example_ @@ -14,7 +14,7 @@ const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_des_ede3_ecb(void); /*! - \ingroup openSSL + \ingroup openSSL \brief それぞれのwolfssl_evp_cipherポインタのゲッター関数。最初にプログラム内でwolfssl_evp_init()を1回呼び出す必要があります。wolfssl_des_ecbマクロは、wolfssl_evp_des_ecb()に対して定義する必要があります。 \return pointer DES操作のためのwolfssl_evp_cipherポインタを返します。 _Example_ @@ -28,7 +28,7 @@ const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_des_ede3_ecb(void); const WOLFSSL_EVP_CIPHER* wolfSSL_EVP_des_cbc(void); /*! - \ingroup openSSL + \ingroup openSSL \brief wolfssl_evp_md_ctxを初期化する機能。この関数はwolfssl_engineがwolfssl_engineを使用しないため、wolfssl_evp_digestinit()のラッパーです。 \return SSL_SUCCESS 正常に設定されている場合。 \return SSL_FAILURE 成功しなかった場合 @@ -56,7 +56,7 @@ int wolfSSL_EVP_DigestInit_ex(WOLFSSL_EVP_MD_CTX* ctx, WOLFSSL_ENGINE *impl); /*! - \ingroup openSSL + \ingroup openSSL \brief wolfssl_evp_cipher_ctxを初期化する機能。この関数はwolfssl_engineがwolfssl_engineを使用しないため、wolfssl_ciphinit()のラッパーです。 \return SSL_SUCCESS 正常に設定されている場合。 \return SSL_FAILURE 成功しなかった場合 @@ -96,7 +96,7 @@ int wolfSSL_EVP_CipherInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx, int enc); /*! - \ingroup openSSL + \ingroup openSSL \brief wolfssl_evp_cipher_ctxを初期化する機能。WolfSSLはWOLFSSL_ENGINEを使用しないため、この関数はwolfssl_evp_ciphinit()のラッパーです。暗号化フラグを暗号化するように設定します。 \return SSL_SUCCESS 正常に設定されている場合。 \return SSL_FAILURE 成功しなかった場合 @@ -128,7 +128,7 @@ int wolfSSL_EVP_EncryptInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx, const unsigned char* iv); /*! - \ingroup openSSL + \ingroup openSSL \brief wolfssl_evp_cipher_ctxを初期化する機能。WolfSSLはWOLFSSL_ENGINEを使用しないため、この関数はwolfssl_evp_ciphinit()のラッパーです。暗号化フラグを復号化するように設定します。 \return SSL_SUCCESS 正常に設定されている場合。 \return SSL_FAILURE 成功しなかった場合 @@ -169,7 +169,7 @@ int wolfSSL_EVP_DecryptInit_ex(WOLFSSL_EVP_CIPHER_CTX* ctx, const unsigned char* iv); /*! - \ingroup openSSL + \ingroup openSSL \brief データを暗号化/復号化する機能。バッファ内では暗号化または復号化され、OUTバッファが結果を保持します。OUTORは暗号化/復号化された情報の長さになります。 \return SSL_SUCCESS 成功した場合 \return SSL_FAILURE 成功しなかった場合 @@ -201,7 +201,7 @@ int wolfSSL_EVP_CipherUpdate(WOLFSSL_EVP_CIPHER_CTX *ctx, const unsigned char *in, int inl); /*! - \ingroup openSSL + \ingroup openSSL \brief この関数は、パディングを追加する最終暗号化操作を実行します。wolfssl_evp_ciph_no_paddingフラグがwolfssl_evp_cipher_ctx構造に設定されている場合、1が返され、暗号化/復号化は行われません。PADDING FLAGがSETIパディングを追加して暗号化すると、暗号化にCTXが設定されていると、復号化されたときにパディング値がチェックされます。 \return 1 成功に戻りました。 \return 0 失敗に遭遇した場合 @@ -221,7 +221,7 @@ int wolfSSL_EVP_CipherFinal(WOLFSSL_EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); /*! - \ingroup openSSL + \ingroup openSSL \brief WolfSSL EVP_CIPHER_CTX構造キー長の設定機能 \return SSL_SUCCESS 正常に設定されている場合。 \return SSL_FAILURE キーの長さを設定できなかった場合。 @@ -239,7 +239,7 @@ int wolfSSL_EVP_CIPHER_CTX_set_key_length(WOLFSSL_EVP_CIPHER_CTX* ctx, int keylen); /*! - \ingroup openSSL + \ingroup openSSL \brief これはCTXブロックサイズのGetter関数です。 \return size ctx-> block_sizeを返します。 _Example_ @@ -253,7 +253,7 @@ int wolfSSL_EVP_CIPHER_CTX_set_key_length(WOLFSSL_EVP_CIPHER_CTX* ctx, int wolfSSL_EVP_CIPHER_CTX_block_size(const WOLFSSL_EVP_CIPHER_CTX *ctx); /*! - \ingroup openSSL + \ingroup openSSL \brief これは暗号のブロックサイズのゲッター関数です。 \return size ブロックサイズを返します。 _Example_ @@ -266,7 +266,7 @@ int wolfSSL_EVP_CIPHER_CTX_block_size(const WOLFSSL_EVP_CIPHER_CTX *ctx); int wolfSSL_EVP_CIPHER_block_size(const WOLFSSL_EVP_CIPHER *cipher); /*! - \ingroup openSSL + \ingroup openSSL \brief WolfSSL evp_cipher_ctx構造の設定機能 \return none いいえ返します。 \param ctx フラグを設定する構造 @@ -283,7 +283,7 @@ int wolfSSL_EVP_CIPHER_block_size(const WOLFSSL_EVP_CIPHER *cipher); void wolfSSL_EVP_CIPHER_CTX_set_flags(WOLFSSL_EVP_CIPHER_CTX *ctx, int flags); /*! - \ingroup openSSL + \ingroup openSSL \brief WolfSSL evp_cipher_ctx構造のクリア機能 \return none いいえ返します。 \param ctx フラグをクリアするための構造 @@ -300,7 +300,7 @@ void wolfSSL_EVP_CIPHER_CTX_set_flags(WOLFSSL_EVP_CIPHER_CTX *ctx, int flags); void wolfSSL_EVP_CIPHER_CTX_clear_flags(WOLFSSL_EVP_CIPHER_CTX *ctx, int flags); /*! - \ingroup openSSL + \ingroup openSSL \brief wolfssl_evp_cipher_ctx構造のためのセッター機能パディングを使用する。 \return SSL_SUCCESS 正常に設定されている場合。 \return BAD_FUNC_ARG NULL引数が渡された場合。 @@ -317,7 +317,7 @@ int wolfSSL_EVP_CIPHER_CTX_set_padding(WOLFSSL_EVP_CIPHER_CTX *c, int pad); /*! - \ingroup openSSL + \ingroup openSSL \brief wolfssl_evp_cipher_ctx構造のゲッター関数廃止予定のV1.1.0 \return unsigned フラグ/モードの長い。 _Example_ diff --git a/doc/dox_comments/header_files-ja/hash.h b/doc/dox_comments/header_files-ja/hash.h index e7ab99a7b..82ca76b70 100644 --- a/doc/dox_comments/header_files-ja/hash.h +++ b/doc/dox_comments/header_files-ja/hash.h @@ -1,5 +1,5 @@ /*! - \ingroup wolfCrypt + \ingroup wolfCrypt \brief この関数は提供されたwc_hashtypeのOIDを返します。 \return OID 戻り値0を超えてください \return HASH_TYPE_E ハッシュ型はサポートされていません。 @@ -18,7 +18,7 @@ int wc_HashGetOID(enum wc_HashType hash_type); /*! - \ingroup wolfCrypt + \ingroup wolfCrypt \brief この関数は、hash_typeのダイジェスト(出力)のサイズを返します。返品サイズは、WC_HASHに提供される出力バッファが十分に大きいことを確認するために使用されます。 \return Success 正の戻り値は、ハッシュのダイジェストサイズを示します。 \return Error hash_typeがサポートされていない場合はhash_type_eを返します。 @@ -36,7 +36,7 @@ int wc_HashGetOID(enum wc_HashType hash_type); int wc_HashGetDigestSize(enum wc_HashType hash_type); /*! - \ingroup wolfCrypt + \ingroup wolfCrypt \brief この関数は、提供されたデータバッファ上にハッシュを実行し、提供されたハッシュバッファにそれを返します。 \return 0 そうでなければ、それ以外の誤り(bad_func_argやbuffer_eなど)。 \param hash_type "wc_hash_type_sha256"などの "enum wc_hashtype"からのハッシュ型。 @@ -61,7 +61,7 @@ int wc_Hash(enum wc_HashType hash_type, byte* hash, word32 hash_len); /*! - \ingroup MD5 + \ingroup MD5 \brief 利便性機能は、すべてのハッシュを処理し、その結果をハッシュに入れます。 \return 0 データを正常にハッシュしたときに返されます。 \return Memory_E メモリエラー、メモリを割り当てることができません。これは、小さなスタックオプションが有効になっているだけです。 @@ -86,7 +86,7 @@ int wc_Hash(enum wc_HashType hash_type, int wc_Md5Hash(const byte* data, word32 len, byte* hash); /*! - \ingroup SHA + \ingroup SHA \brief 利便性機能は、すべてのハッシュを処理し、その結果をハッシュに入れます。 \return 0 うまく返されました...。 \return Memory_E メモリエラー、メモリを割り当てることができません。これは、小さなスタックオプションが有効になっているだけです。 @@ -103,7 +103,7 @@ int wc_Md5Hash(const byte* data, word32 len, byte* hash); int wc_ShaHash(const byte* data, word32 len, byte* hash); /*! - \ingroup SHA + \ingroup SHA \brief 利便性機能は、すべてのハッシュを処理し、その結果をハッシュに入れます。 \return 0 うまく返されました... \return Memory_E メモリエラー、メモリを割り当てることができません。これは、小さなスタックオプションが有効になっているだけです。 @@ -120,7 +120,7 @@ int wc_ShaHash(const byte* data, word32 len, byte* hash); int wc_Sha256Hash(const byte* data, word32 len, byte* hash); /*! - \ingroup SHA + \ingroup SHA \brief 利便性機能は、すべてのハッシュを処理し、その結果をハッシュに入れます。 \return 0 成功 \return <0 エラー @@ -137,7 +137,7 @@ int wc_Sha256Hash(const byte* data, word32 len, byte* hash); int wc_Sha224Hash(const byte* data, word32 len, byte* hash); /*! - \ingroup SHA + \ingroup SHA \brief 利便性機能は、すべてのハッシュを処理し、その結果をハッシュに入れます。 \return 0 入力されたデータを正常にハッシュしたときに返されます \return Memory_E メモリエラー、メモリを割り当てることができません。これは、小さなスタックオプションが有効になっているだけです。 @@ -154,7 +154,7 @@ int wc_Sha224Hash(const byte* data, word32 len, byte* hash); int wc_Sha512Hash(const byte* data, word32 len, byte* hash); /*! - \ingroup SHA + \ingroup SHA \brief 利便性機能は、すべてのハッシュを処理し、その結果をハッシュに入れます。 \return 0 データを正常にハッシュしたときに返されます \return Memory_E メモリエラー、メモリを割り当てることができません。これは、小さなスタックオプションが有効になっているだけです。 diff --git a/doc/dox_comments/header_files-ja/iotsafe.h b/doc/dox_comments/header_files-ja/iotsafe.h index 13f30fe5a..3a839eff7 100644 --- a/doc/dox_comments/header_files-ja/iotsafe.h +++ b/doc/dox_comments/header_files-ja/iotsafe.h @@ -1,5 +1,5 @@ /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief この関数は与えられたコンテキストでのIoTセーフサポートを有効にします。 \param ctx IOTセーフサポートを有効にする必要があるWOLFSSL_CTXオブジェクトへのポインタ \return 0 成功した @@ -19,7 +19,7 @@ int wolfSSL_CTX_iotsafe_enable(WOLFSSL_CTX *ctx); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief この関数は、IOT-SAFE TLSコールバックを特定のSSLセッションに接続します。 \brief スロットのIDが1バイトの長さの場合、SSLセッションをIoT-Safeアプレットに接続するように呼び出す必要があります。IOTセーフスロットのIDが2バイト以上の場合、\ REF WOLFSSL_IOTSAFE_ON_EX「WOLFSSL_IOTSAFE_ON_EX()」を使用する必要があります。 \param ssl コールバックが有効になるWolfSSLオブジェクトへのポインタ @@ -55,7 +55,7 @@ int wolfSSL_iotsafe_on(WOLFSSL *ssl, byte privkey_id, /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief この関数は、IOT-SAFE TLSコールバックを特定のSSLセッションに接続します。これは、IOTセーフスロットのIDを参照で渡すことができ、IDフィールドの長さをパラメータ "id_size"で指定できます。 \param ssl コールバックが有効になるWolfSSLオブジェクトへのポインタ \param privkey_id ホストの秘密鍵を含むIoTセーフアプレットスロットのIDへのポインタ @@ -100,7 +100,7 @@ int wolfSSL_iotsafe_on_ex(WOLFSSL *ssl, byte *privkey_id, /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief AT + CSIMコマンドのリードコールバックを関連付けます。この入力関数は通常、モデムと通信するUARTチャネルの読み取りイベントに関連付けられています。読み取りコールバックが関連付けられているのは、同時にIoT-Safeサポートを使用するすべてのコンテキストのグローバルと変更です。 _Example_ \code @@ -116,7 +116,7 @@ int wolfSSL_iotsafe_on_ex(WOLFSSL *ssl, byte *privkey_id, void wolfIoTSafe_SetCSIM_read_cb(wolfSSL_IOTSafe_CSIM_read_cb rf); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief AT + CSIMコマンドの書き込みコールバックを関連付けます。この出力関数は通常、モデムと通信するUARTチャネル上のライトイベントに関連付けられています。Write Callbackが関連付けられているのは、同時にIoT-Safeサポートを使用するすべてのコンテキストのグローバルと変更です。 _Example_ \code @@ -131,7 +131,7 @@ void wolfIoTSafe_SetCSIM_write_cb(wolfSSL_IOTSafe_CSIM_write_cb wf); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief IOTセーフ機能getrandomを使用して、指定されたサイズのランダムなバッファを生成します。この関数は、WolfCrypt RNGオブジェクトによって自動的に使用されます。 \param out ランダムなバイトシーケンスが格納されているバッファ。 \param sz 生成するランダムシーケンスのサイズ(バイト単位) @@ -140,7 +140,7 @@ int wolfIoTSafe_GetRandom(unsigned char* out, word32 sz); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief IOT-Safeアプレット上のファイルに保存されている証明書をインポートし、ローカルにメモリに保存します。1バイトのファイルIDフィールドで動作します。 \param id 証明書が保存されているIOTセーフ・アプレットのファイルID \param output 証明書がインポートされるバッファー @@ -171,7 +171,7 @@ int wolfIoTSafe_GetCert(uint8_t id, unsigned char *output, unsigned long sz); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief IOT-Safeアプレット上のファイルに保存されている証明書をインポートし、ローカルにメモリに保存します。\ ref wolfiotsafe_getcert "wolfiotsafe_getcert"と同等です。ただし、2バイト以上のファイルIDで呼び出すことができます。 \param id 証明書が保存されているIOT-SAFEアプレットのファイルIDへのポインタ \param id_sz ファイルIDのサイズ:バイト数 @@ -207,7 +207,7 @@ int wolfIoTSafe_GetCert(uint8_t id, unsigned char *output, unsigned long sz); int wolfIoTSafe_GetCert_ex(uint8_t *id, uint16_t id_sz, unsigned char *output, unsigned long sz); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief IOTセーフアプレットに格納されているECC 256ビットの公開鍵をECC_Keyオブジェクトにインポートします。 \param key IOT-SAFEアプレットからインポートされたキーを含むECC_KEYオブジェクト \param id 公開鍵が保存されているIOTセーフアプレットのキーID @@ -218,7 +218,7 @@ int wolfIoTSafe_GetCert_ex(uint8_t *id, uint16_t id_sz, unsigned char *output, u int wc_iotsafe_ecc_import_public(ecc_key *key, byte key_id); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief ECC_KEYオブジェクトからIOT-SAFEアプレットへの書き込み可能なパブリックキースロットにECC 256ビット公開鍵をエクスポートします。 \param key エクスポートする鍵を含むecc_keyオブジェクト \param id 公開鍵が保存されているIOTセーフアプレットのキーID @@ -230,7 +230,7 @@ int wc_iotsafe_ecc_export_public(ecc_key *key, byte key_id); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief ECC_KEYオブジェクトからIOT-SAFEアプレットへの書き込み可能なパブリックキースロットにECC 256ビット公開鍵をエクスポートします。\ ref WC_IOTSAFE_ECC_IMPORT_PUBLIC「WC_IOTSAFE_ECC_IMPORT_PUBLIC」と同等のものは、2バイト以上のキーIDで呼び出すことができる点を除きます。 \param key エクスポートする鍵を含むecc_keyオブジェクト \param id 公開鍵が保存されるIOTセーフアプレットのキーIDへのポインタ @@ -242,7 +242,7 @@ int wc_iotsafe_ecc_export_public(ecc_key *key, byte key_id); int wc_iotsafe_ecc_import_public_ex(ecc_key *key, byte *key_id, word16 id_size); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief ECC 256ビットキーをECC_KEYオブジェクトからIOTセーフアプレットに書き込み可能なプライベートキースロットにエクスポートします。 \param key エクスポートする鍵を含むecc_keyオブジェクト \param id 秘密鍵が保存されるIOTセーフアプレットのキーID @@ -254,7 +254,7 @@ int wc_iotsafe_ecc_import_public_ex(ecc_key *key, byte *key_id, word16 id_size); int wc_iotsafe_ecc_export_private(ecc_key *key, byte key_id); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief ECC 256ビットキーをECC_KEYオブジェクトからIOTセーフアプレットに書き込み可能なプライベートキースロットにエクスポートします。\ ref WC_IOTSAFE_ECC_EXPORT_PRIVATE「WC_IOTSAFE_ECC_EXPORT_PRIVATE」を除き、2バイト以上のキーIDを呼び出すことができる点を除き、 \param key エクスポートする鍵を含むecc_keyオブジェクト \param id 秘密鍵が保存されるIOTセーフアプレットのキーIDへのポインタ @@ -267,7 +267,7 @@ int wc_iotsafe_ecc_export_private(ecc_key *key, byte key_id); int wc_iotsafe_ecc_export_private_ex(ecc_key *key, byte *key_id, word16 id_size); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief 事前計算された256ビットハッシュに署名して、IOT-SAFEアプレットに、以前に保存されたプライベートキー、またはプリプロビジョニングされています。 \param in サインするメッセージハッシュを含むバッファへのポインタ \param inlen 署名するメッセージの長さ @@ -282,7 +282,7 @@ int wc_iotsafe_ecc_export_private_ex(ecc_key *key, byte *key_id, word16 id_size) int wc_iotsafe_ecc_sign_hash(byte *in, word32 inlen, byte *out, word32 *outlen, byte key_id); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief 事前計算された256ビットハッシュに署名して、IOT-SAFEアプレットに、以前に保存されたプライベートキー、またはプリプロビジョニングされています。\ ref wc_iotsafe_ecc_sign_hash "wc_iotsafe_ecc_sign_hash"と同等です。ただし、2バイト以上のキーIDで呼び出すことができます。 \param in サインするメッセージハッシュを含むバッファへのポインタ \param inlen 署名するメッセージの長さ @@ -298,7 +298,7 @@ int wc_iotsafe_ecc_sign_hash(byte *in, word32 inlen, byte *out, word32 *outlen, int wc_iotsafe_ecc_sign_hash_ex(byte *in, word32 inlen, byte *out, word32 *outlen, byte *key_id, word16 id_size); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief 予め計算された256ビットハッシュに対するECCシグネチャを、IOT-SAFEアプレット内のプリプロビジョニング、またはプロビジョニングされたプリプロビジョニングを使用します。結果はRESに書き込まれます。1が有効で、0が無効です。注:有効なテストに戻り値を使用しないでください。Resのみを使用してください。 \return 0 成功すると(署名が無効であっても) \return < 故障の場合は0 @@ -313,7 +313,7 @@ int wc_iotsafe_ecc_sign_hash_ex(byte *in, word32 inlen, byte *out, word32 *outle int wc_iotsafe_ecc_verify_hash(byte *sig, word32 siglen, byte *hash, word32 hashlen, int *res, byte key_id); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief 予め計算された256ビットハッシュに対するECCシグネチャを、IOT-SAFEアプレット内のプリプロビジョニング、またはプロビジョニングされたプリプロビジョニングを使用します。結果はRESに書き込まれます。1が有効で、0が無効です。注:有効なテストに戻り値を使用しないでください。Resのみを使用してください。\ ref WC_IOTSAFE_ECC_VERIFY_HASH "WC_IOTSAFE_ECC_VERIFY_HASH"を除き、2バイト以上のキーIDで呼び出すことができる点を除きます。 \return 0 成功すると(署名が無効であっても) \return < 故障の場合は0 @@ -329,7 +329,7 @@ int wc_iotsafe_ecc_verify_hash(byte *sig, word32 siglen, byte *hash, word32 hash int wc_iotsafe_ecc_verify_hash_ex(byte *sig, word32 siglen, byte *hash, word32 hashlen, int *res, byte *key_id, word16 id_size); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief ECC 256ビットのキーペアを生成し、それを(書き込み可能な)スロットにIOTセーフなアプレットに保存します。 \param key_id ECCキーペアがIOTセーフアプレットに格納されているスロットのID。 \return 0 成功すると @@ -340,7 +340,7 @@ int wc_iotsafe_ecc_verify_hash_ex(byte *sig, word32 siglen, byte *hash, word32 h int wc_iotsafe_ecc_gen_k(byte key_id); /*! - \ingroup IoTSafe + \ingroup IoTSafe \brief ECC 256ビットのキーペアを生成し、それを(書き込み可能な)スロットにIOTセーフなアプレットに保存します。\ ref wc_iotsafe_ecc_gen_k "wc_iotsafe_ecc_gen_k"と同等です。ただし、2バイト以上のキーIDで呼び出すことができます。 \param key_id ECCキーペアがIOTセーフアプレットに格納されているスロットのID。 \param id_size キーIDサイズ diff --git a/doc/dox_comments/header_files-ja/logging.h b/doc/dox_comments/header_files-ja/logging.h index 1f6a57233..47b61417e 100644 --- a/doc/dox_comments/header_files-ja/logging.h +++ b/doc/dox_comments/header_files-ja/logging.h @@ -1,5 +1,5 @@ /*! - \ingroup Logging + \ingroup Logging \brief この関数は、WolfSSLログメッセージを処理するために使用されるロギングコールバックを登録します。デフォルトでは、システムがIT fprintf()をSTDERRにサポートしている場合は、この関数を使用することによって、ユーザーによって何でも実行できます。 \return Success 成功した場合、この関数は0を返します。 \return BAD_FUNC_ARG 関数ポインタが提供されていない場合に返されるエラーです。 @@ -24,7 +24,7 @@ int wolfSSL_SetLoggingCb(wolfSSL_Logging_cb log_function); /*! - \ingroup Debug + \ingroup Debug \brief ビルド時にロギングが有効になっている場合、この関数は実行時にロギングをオンにします。ビルド時にログ記録を有効にするには--enable-debugまたはdebug_wolfsslを定義します。 \return 0 成功すると。 \return NOT_COMPILED_IN このビルドに対してロギングが有効になっていない場合は返されるエラーです。 @@ -38,7 +38,7 @@ int wolfSSL_SetLoggingCb(wolfSSL_Logging_cb log_function); int wolfSSL_Debugging_ON(void); /*! - \ingroup Debug + \ingroup Debug \brief この関数はランタイムロギングメッセージをオフにします。彼らがすでに消えている場合は、行動はとられません。 \return none いいえ返します。 _Example_ diff --git a/doc/dox_comments/header_files-ja/md2.h b/doc/dox_comments/header_files-ja/md2.h index b96f50452..07d854502 100644 --- a/doc/dox_comments/header_files-ja/md2.h +++ b/doc/dox_comments/header_files-ja/md2.h @@ -1,5 +1,5 @@ /*! - \ingroup MD2 + \ingroup MD2 \brief この関数はMD2を初期化します。これはWC_MD2HASHによって自動的に呼び出されます。 \return 0 初期化に成功したときに返されます _Example_ @@ -20,7 +20,7 @@ void wc_InitMd2(Md2*); /*! - \ingroup MD2 + \ingroup MD2 \brief 長さLENの提供されたバイト配列を絶えずハッシュするように呼び出すことができます。 \return 0 データをダイジェストに正常に追加すると返されます。 \param md2 暗号化に使用するMD2構造へのポインタ @@ -46,7 +46,7 @@ void wc_InitMd2(Md2*); void wc_Md2Update(Md2* md2, const byte* data, word32 len); /*! - \ingroup MD2 + \ingroup MD2 \brief データのハッシュを確定します。結果はハッシュに入れられます。 \return 0 ファイナライズに成功したときに返されます。 \param md2 暗号化に使用するMD2構造へのポインタ @@ -71,7 +71,7 @@ void wc_Md2Update(Md2* md2, const byte* data, word32 len); void wc_Md2Final(Md2* md2, byte* hash); /*! - \ingroup MD2 + \ingroup MD2 \brief 利便性機能は、すべてのハッシュを処理し、その結果をハッシュに入れます。 \return 0 データを正常にハッシュしたときに返されます。 \return Memory_E メモリエラー、メモリを割り当てることができません。これは、小さなスタックオプションが有効になっているだけです。 diff --git a/doc/dox_comments/header_files-ja/md4.h b/doc/dox_comments/header_files-ja/md4.h index b7a203330..be9e537ee 100644 --- a/doc/dox_comments/header_files-ja/md4.h +++ b/doc/dox_comments/header_files-ja/md4.h @@ -1,5 +1,5 @@ /*! - \ingroup MD4 + \ingroup MD4 \brief この関数はMD4を初期化します。これはWC_MD4HASHによって自動的に呼び出されます。 \return 0 初期化に成功したときに返されます _Example_ @@ -20,7 +20,7 @@ void wc_InitMd4(Md4*); /*! - \ingroup MD4 + \ingroup MD4 \brief 長さLENの提供されたバイト配列を絶えずハッシュするように呼び出すことができます。 \return 0 データをダイジェストに正常に追加すると返されます。 \param md4 暗号化に使用するMD4構造へのポインタ @@ -46,7 +46,7 @@ void wc_InitMd4(Md4*); void wc_Md4Update(Md4* md4, const byte* data, word32 len); /*! - \ingroup MD4 + \ingroup MD4 \brief データのハッシュを確定します。結果はハッシュに入れられます。 \return 0 ファイナライズに成功したときに返されます。 \param md4 暗号化に使用するMD4構造へのポインタ diff --git a/doc/dox_comments/header_files-ja/md5.h b/doc/dox_comments/header_files-ja/md5.h index 68c9b6e5d..78bdb8bd6 100644 --- a/doc/dox_comments/header_files-ja/md5.h +++ b/doc/dox_comments/header_files-ja/md5.h @@ -1,5 +1,5 @@ /*! - \ingroup MD5 + \ingroup MD5 \brief この関数はMD5を初期化します。これはWC_MD5HASHによって自動的に呼び出されます。 \return 0 初期化に成功したときに返されます。 \return BAD_FUNC_ARG MD5構造がNULL値として渡された場合に返されます。 @@ -28,7 +28,7 @@ int wc_InitMd5(wc_Md5*); /*! - \ingroup MD5 + \ingroup MD5 \brief 長さLENの提供されたバイト配列を絶えずハッシュするように呼び出すことができます。 \return 0 データをダイジェストに正常に追加すると返されます。 \return BAD_FUNC_ARG MD5構造がNULLの場合、またはデータがNULLで、LENがゼロより大きい場合に返されます。DATAパラメーターがNULLでLENがゼロの場合、関数はエラーを返してはいけません。 @@ -61,7 +61,7 @@ int wc_InitMd5(wc_Md5*); int wc_Md5Update(wc_Md5* md5, const byte* data, word32 len); /*! - \ingroup MD5 + \ingroup MD5 \brief データのハッシュを確定します。結果はハッシュに入れられます。MD5構造体がリセットされます。注:この関数は、habe_intel_qaが定義されている場合にintelqasymmd5()を呼び出す結果も返します。 \return 0 ファイナライズに成功したときに返されます。 \return BAD_FUNC_ARG MD5構造またはハッシュポインタがNULLで渡された場合に返されます。 @@ -93,7 +93,7 @@ int wc_Md5Update(wc_Md5* md5, const byte* data, word32 len); int wc_Md5Final(wc_Md5* md5, byte* hash); /*! - \ingroup MD5 + \ingroup MD5 \brief MD5構造をリセットします。注:これは、wolfssl_ti_hashが定義されている場合にのみサポートされています。 \return none いいえ返します。 _Example_ @@ -118,7 +118,7 @@ int wc_Md5Final(wc_Md5* md5, byte* hash); void wc_Md5Free(wc_Md5*); /*! - \ingroup MD5 + \ingroup MD5 \brief ハッシュデータを取得します。結果はハッシュに入れられます。MD5構造はリセットされません。 \return none いいえリターン \param md5 暗号化に使用するMD5構造へのポインタ。 diff --git a/doc/dox_comments/header_files-ja/memory.h b/doc/dox_comments/header_files-ja/memory.h index ecad955ab..e7e838f73 100644 --- a/doc/dox_comments/header_files-ja/memory.h +++ b/doc/dox_comments/header_files-ja/memory.h @@ -1,5 +1,5 @@ /*! - \ingroup Memory + \ingroup Memory \brief この関数はmalloc()と似ていますが、WolfSSLが使用するように構成されているメモリ割り当て関数を呼び出します。デフォルトでは、WolfSSLはmalloc()を使用します。これは、WolfSSLメモリ抽象化レイヤを使用して変更できます - wolfssl_setAllocator()を参照してください。注WOLFSSL_MALLOCは、WOLFSSLによって直接呼び出されませんが、代わりにMacro XMallocによって呼び出されます。デフォルトのビルドの場合、size引数のみが存在します。wolfssl_static_memoryビルドを使用する場合は、ヒープとタイプ引数が含まれます。 \return pointer 成功した場合、この関数は割り当てられたメモリへのポインタを返します。 \return error エラーがある場合は、NULLが返されます。 @@ -19,7 +19,7 @@ void* wolfSSL_Malloc(size_t size, void* heap, int type); /*! - \ingroup Memory + \ingroup Memory \brief この関数はfree()と似ていますが、WolfSSLが使用するように構成されているメモリフリー機能を呼び出します。デフォルトでは、WolfSSLはfree()を使用します。これは、WolfSSLメモリ抽象化レイヤを使用して変更できます - wolfssl_setAllocator()を参照してください。注WOLFSSL_FREEはWOLFSSLによって直接呼び出されませんが、代わりにマクロXFreeによって呼び出されます。デフォルトのビルドの場合、PTR引数のみが存在します。wolfssl_static_memoryビルドを使用する場合は、ヒープとタイプ引数が含まれます。 \return none いいえ返します。 \param ptr 解放されるメモリへのポインタ。 @@ -43,7 +43,7 @@ void* wolfSSL_Malloc(size_t size, void* heap, int type); void wolfSSL_Free(void *ptr, void* heap, int type); /*! - \ingroup Memory + \ingroup Memory \brief この関数はREALLOC()と似ていますが、WolfSSLが使用するように構成されているメモリ再割り当て機能を呼び出します。デフォルトでは、WolfSSLはRealLoc()を使用します。これは、WolfSSLメモリ抽象化レイヤを使用して変更できます - wolfssl_setAllocator()を参照してください。注WOLFSSL_REALLOCはWOLFSSLによって直接呼び出されませんが、代わりにマクロXreallocによって呼び出されます。デフォルトのビルドの場合、size引数のみが存在します。wolfssl_static_memoryビルドを使用する場合は、ヒープとタイプ引数が含まれます。 \return pointer 成功した場合、この関数はマイポイントを再割り当てするためのポインタを返します。これはPTRと同じポインタ、または新しいポインタの場所であり得る。 \return Null エラーがある場合は、NULLが返されます。 @@ -65,7 +65,7 @@ void wolfSSL_Free(void *ptr, void* heap, int type); void* wolfSSL_Realloc(void *ptr, size_t size, void* heap, int type); /*! - \ingroup Memory + \ingroup Memory \brief この機能は、WolfSSLが使用する割り当て関数を登録します。デフォルトでは、システムがそれをサポートしている場合、Malloc / FreeとRealLocが使用されます。この機能を使用すると、実行時にユーザーは独自のメモリハンドラをインストールできます。 \return Success 成功した場合、この関数は0を返します。 \return BAD_FUNC_ARG 関数ポインタが提供されていない場合に返されるエラーです。 @@ -101,7 +101,7 @@ int wolfSSL_SetAllocators(wolfSSL_Malloc_cb, wolfSSL_Realloc_cb); /*! - \ingroup Memory + \ingroup Memory \brief この機能は、静的メモリ機能が使用されている場合(--enable-staticMemory)の場合に使用できます。メモリの「バケット」に最適なバッファサイズを示します。これにより、パーティション化された後に追加の未使用のメモリが終了しないように、バッファサイズを計算する方法が可能になります。返された値は、正の場合、使用するコンピュータのバッファサイズです。 \return Success バッファサイズ計算を正常に完了すると、正の値が返されます。この返された値は最適なバッファサイズです。 \return Failure すべての負の値はエラーの場合と見なされます。 @@ -124,7 +124,7 @@ int wolfSSL_SetAllocators(wolfSSL_Malloc_cb, int wolfSSL_StaticBufferSz(byte* buffer, word32 sz, int flag); /*! - \ingroup Memory + \ingroup Memory \brief この機能は、静的メモリ機能が使用されている場合(--enable-staticMemory)の場合に使用できます。メモリの各パーティションに必要なパディングのサイズを示します。このパディングサイズは、メモリアライメントのために追加のメモリ管理構造を含む必要があるサイズになります。 \return On 正常なメモリパディング計算戻り値は正の値になります \return All 負の値はエラーケースと見なされます。 diff --git a/doc/dox_comments/header_files-ja/pem.h b/doc/dox_comments/header_files-ja/pem.h index 3b322644e..e94085e7d 100644 --- a/doc/dox_comments/header_files-ja/pem.h +++ b/doc/dox_comments/header_files-ja/pem.h @@ -1,5 +1,5 @@ /*! - \ingroup openSSL + \ingroup openSSL \brief この関数は、PEM形式のwolfssl_bio構造体にキーを書き込みます。 \return SSL_SUCCESS 成功すると。 \return SSL_FAILURE 失敗すると。 diff --git a/doc/dox_comments/header_files-ja/pkcs7.h b/doc/dox_comments/header_files-ja/pkcs7.h index 85d1b68cf..924ae4f3f 100644 --- a/doc/dox_comments/header_files-ja/pkcs7.h +++ b/doc/dox_comments/header_files-ja/pkcs7.h @@ -1,5 +1,5 @@ /*! - \ingroup PKCS7 + \ingroup PKCS7 \brief この関数は、DERフォーマットの証明書を使用してPKCS7構造を初期化します。空のPKCS7構造を初期化するには、NULL CERTとCERTSZの場合は0を渡すことができます。 \return 0 PKCS7構造の初期化に成功しました \return MEMORY_E xmallocでメモリを割り当てるエラーがある場合 @@ -33,7 +33,7 @@ int wc_PKCS7_InitWithCert(PKCS7* pkcs7, byte* cert, word32 certSz); /*! - \ingroup PKCS7 + \ingroup PKCS7 \brief この関数は、PKCS7の初期化装置によって割り当てられたメモリを解放します。 \return none いいえ返します。 _Example_ @@ -48,7 +48,7 @@ int wc_PKCS7_InitWithCert(PKCS7* pkcs7, byte* cert, word32 certSz); void wc_PKCS7_Free(PKCS7* pkcs7); /*! - \ingroup PKCS7 + \ingroup PKCS7 \brief この関数はPKCS7データコンテンツタイプを構築し、PKCS7構造をパーセル可能なPKCS7データパケットを含むバッファにエンコードします。 \return Success PKCS7データをバッファに正常にエンコードすると、PKCS7構造内の索引を返します。このインデックスは、出力バッファに書き込まれたバイトにも対応しています。 \return BUFFER_E 指定されたバッファがエンコードされた証明書を保持するのに十分な大きさでない場合に返されます @@ -81,7 +81,7 @@ int wc_PKCS7_EncodeData(PKCS7* pkcs7, byte* output, word32 outputSz); /*! - \ingroup PKCS7 + \ingroup PKCS7 \brief この関数はPKCS7署名付きデータコンテンツタイプを構築し、PKCS7構造をPARSable PKCS7署名付きデータパケットを含むバッファにエンコードします。 \return Success PKCS7データをバッファに正常にエンコードすると、PKCS7構造内の索引を返します。このインデックスは、出力バッファに書き込まれたバイトにも対応しています。 \return BAD_FUNC_ARG PKCS7構造が署名付きデータパケットを生成するための1つ以上の要求要素が欠落している場合に返されます。 @@ -135,9 +135,9 @@ int wc_PKCS7_EncodeSignedData(PKCS7* pkcs7, byte* output, word32 outputSz); /*! - \ingroup PKCS7 + \ingroup PKCS7 \brief この関数は、PKCS7の署名付きデータコンテンツタイプを構築し、PKCS7構造をエンコードし、Parsable PKCS7署名付きデータパケットを含むヘッダーおよびフッターバッファにエンコードします。これにはコンテンツは含まれません。ハッシュを計算してデータに提供する必要があります - \return 0=Success + \return 0=Success \return BAD_FUNC_ARG PKCS7構造が署名付きデータパケットを生成するための1つ以上の要求要素が欠落している場合に返されます。 \return MEMORY_E メモリの割り当て中にエラーが発生した場合に返されます \return PUBLIC_KEY_E 公開鍵の解析中にエラーがある場合 @@ -194,7 +194,7 @@ int wc_PKCS7_EncodeSignedData(PKCS7* pkcs7, wc_HashFree(&hash, hashType); } - ret = wc_PKCS7_EncodeSignedData_ex(&pkcs7, hashBuf, hashSz, pkcs7HeadBuff, + ret = wc_PKCS7_EncodeSignedData_ex(&pkcs7, hashBuf, hashSz, pkcs7HeadBuff, &pkcs7HeadSz, pkcs7FootBuff, &pkcs7FootSz); if ( ret != 0 ) { // error encoding into output buffer @@ -205,12 +205,12 @@ int wc_PKCS7_EncodeSignedData(PKCS7* pkcs7, \sa wc_PKCS7_InitWithCert \sa wc_PKCS7_VerifySignedData_ex */ -int wc_PKCS7_EncodeSignedData_ex(PKCS7* pkcs7, const byte* hashBuf, - word32 hashSz, byte* outputHead, word32* outputHeadSz, byte* outputFoot, +int wc_PKCS7_EncodeSignedData_ex(PKCS7* pkcs7, const byte* hashBuf, + word32 hashSz, byte* outputHead, word32* outputHeadSz, byte* outputFoot, word32* outputFootSz); /*! - \ingroup PKCS7 + \ingroup PKCS7 \brief この関数は、送信されたPKCS7の署名付きデータメッセージを取り、証明書リストと証明書失効リストを抽出してから署名を検証します。与えられたPKCS7構造に抽出されたコンテンツを格納します。 \return 0 メッセージから情報を抽出することに成功しました \return BAD_FUNC_ARG 入力パラメータの1つが無効な場合は返されます @@ -263,7 +263,7 @@ int wc_PKCS7_VerifySignedData(PKCS7* pkcs7, /*! - \ingroup PKCS7 + \ingroup PKCS7 \brief この機能は、送信されたPKCS7署名付きデータメッセージをHASH /ヘッダー/フッターとして取り出してから、証明書リストと証明書失効リストを抽出してから、署名を検証します。与えられたPKCS7構造に抽出されたコンテンツを格納します。 \return 0 メッセージから情報を抽出することに成功しました \return BAD_FUNC_ARG 入力パラメータの1つが無効な場合は返されます @@ -321,7 +321,7 @@ int wc_PKCS7_VerifySignedData(PKCS7* pkcs7, wc_HashFree(&hash, hashType); } - ret = wc_PKCS7_VerifySignedData_ex(&pkcs7, hashBuf, hashSz, pkcs7HeadBuff, + ret = wc_PKCS7_VerifySignedData_ex(&pkcs7, hashBuf, hashSz, pkcs7HeadBuff, sizeof(pkcs7HeadBuff), pkcs7FootBuff, sizeof(pkcs7FootBuff)); if ( ret != 0 ) { // error encoding into output buffer @@ -332,12 +332,12 @@ int wc_PKCS7_VerifySignedData(PKCS7* pkcs7, \sa wc_PKCS7_InitWithCert \sa wc_PKCS7_EncodeSignedData_ex */ -int wc_PKCS7_VerifySignedData_ex(PKCS7* pkcs7, const byte* hashBuf, - word32 hashSz, byte* pkiMsgHead, word32 pkiMsgHeadSz, byte* pkiMsgFoot, +int wc_PKCS7_VerifySignedData_ex(PKCS7* pkcs7, const byte* hashBuf, + word32 hashSz, byte* pkiMsgHead, word32 pkiMsgHeadSz, byte* pkiMsgFoot, word32 pkiMsgFootSz); /*! - \ingroup PKCS7 + \ingroup PKCS7 \brief この関数は、PKCS7構造を編集し、PKCS7構造を符号化し、Parsable PKCS7エンベロープデータパケットを含むバッファに編集します。 \return Success エンベロープデータ形式でメッセージを正常にエンコードする上で返信され、出力バッファに書き込まれたサイズを返します。 \return BAD_FUNC_ARG: 入力パラメータの1つが無効な場合、またはPKCS7構造が必要な要素を欠落している場合 @@ -376,7 +376,7 @@ int wc_PKCS7_EncodeEnvelopedData(PKCS7* pkcs7, byte* output, word32 outputSz); /*! - \ingroup PKCS7 + \ingroup PKCS7 \brief この関数はPKCS7エンベロープデータコンテンツタイプをアントラップして復号化し、メッセージを出力にデコードします。渡されたPKCS7オブジェクトの秘密鍵を使用してメッセージを復号化します。 \return On メッセージから情報を抽出するには、出力に書き込まれたバイト数を返します。 \return BAD_FUNC_ARG 入力パラメータの1つが無効な場合は返されます diff --git a/doc/dox_comments/header_files-ja/poly1305.h b/doc/dox_comments/header_files-ja/poly1305.h index e7af5fbf2..905a30025 100644 --- a/doc/dox_comments/header_files-ja/poly1305.h +++ b/doc/dox_comments/header_files-ja/poly1305.h @@ -1,5 +1,5 @@ /*! - \ingroup Poly1305 + \ingroup Poly1305 \brief この関数は、Poly1305コンテキスト構造のキーを設定し、ハッシュに初期化します。注:セキュリティを確保するために、WC_POLY1305FINALでメッセージハッシュを生成した後に新しいキーを設定する必要があります。 \return 0 キーを正常に設定し、Poly1305構造の初期化 \return BAD_FUNC_ARG 与えられたキーが32バイトの長さでない場合、またはPoly1305コンテキストがNULLの場合 @@ -18,7 +18,7 @@ int wc_Poly1305SetKey(Poly1305* poly1305, const byte* key, word32 kySz); /*! - \ingroup Poly1305 + \ingroup Poly1305 \brief この関数は、Poly1305構造を持つハッシュにメッセージを更新します。 \return 0 ハッシュへのメッセージの更新に成功しました \return BAD_FUNC_ARG Poly1305構造がNULLの場合に返されます @@ -42,7 +42,7 @@ int wc_Poly1305SetKey(Poly1305* poly1305, const byte* key, int wc_Poly1305Update(Poly1305* poly1305, const byte* m, word32 bytes); /*! - \ingroup Poly1305 + \ingroup Poly1305 \brief この関数は入力メッセージのハッシュを計算し、結果をMACに格納します。この後、キーをリセットする必要があります。 \return 0 最後のMacの計算に成功した \return BAD_FUNC_ARG Poly1305構造がNULLの場合に返されます @@ -68,7 +68,7 @@ int wc_Poly1305Update(Poly1305* poly1305, const byte* m, word32 bytes); int wc_Poly1305Final(Poly1305* poly1305, byte* tag); /*! - \ingroup Poly1305 + \ingroup Poly1305 \brief 鍵がロードされ、最近のTLS AEADパディング方式を使用してMAC(タグ)を作成する初期化されたPoly1305構造体を取ります。 \return 0 成功 \return BAD_FUNC_ARG CTX、INPUT、またはTAGがNULLの場合、または追加がNULLで、ADDSZが0より大きい場合、またはTAGSZがWC_POLY1305_MAC_SZより小さい場合に返されます。 diff --git a/doc/dox_comments/header_files-ja/psa.h b/doc/dox_comments/header_files-ja/psa.h index fed655db9..15c359b84 100644 --- a/doc/dox_comments/header_files-ja/psa.h +++ b/doc/dox_comments/header_files-ja/psa.h @@ -1,5 +1,5 @@ /*! - \ingroup PSA + \ingroup PSA \brief この関数は、与えられたコンテキストでのPSAサポートを可能にします。 \param ctx PSAサポートを有効にする必要があるWOLFSSL_CTXオブジェクトへのポインタ \return WOLFSSL_SUCCESS 成功した @@ -19,7 +19,7 @@ int wolfSSL_CTX_psa_enable(WOLFSSL_CTX *ctx); /*! - \ingroup PSA + \ingroup PSA \brief 与えられたSSLセッションのPSAコンテキストを設定する機能 \param ssl CTXが有効になるWolfSSLへのポインタ \param ctx Struct PSA_SSL_CTXへのポインタ(SSLセッションに固有である必要があります) @@ -41,14 +41,14 @@ int wolfSSL_CTX_psa_enable(WOLFSSL_CTX *ctx); int wolfSSL_set_psa_ctx(WOLFSSL *ssl, struct psa_ssl_ctx *ctx); /*! - \ingroup PSA + \ingroup PSA \brief この関数はPSAコンテキストによって使用されるリソースを解放します \sa wolfSSL_set_psa_ctx */ void wolfSSL_free_psa_ctx(struct psa_ssl_ctx *ctx); /*! - \ingroup PSA + \ingroup PSA \brief この関数は、SSLセッションによって使用される秘密鍵を設定します \param ctx 構造体PSA_SSL_CTXへのポインタ _Example_ diff --git a/doc/dox_comments/header_files-ja/random.h b/doc/dox_comments/header_files-ja/random.h index b513d6d5d..372014708 100644 --- a/doc/dox_comments/header_files-ja/random.h +++ b/doc/dox_comments/header_files-ja/random.h @@ -1,5 +1,5 @@ /*! - \ingroup Random + \ingroup Random \brief Init Global WhiteWood Netrandomのコンテキスト \return 0 成功 \return BAD_FUNC_ARG configfileがnullまたはタイムアウトのどちらかが否定的です。 @@ -21,7 +21,7 @@ int wc_InitNetRandom(const char* configFile, wnr_hmac_key hmac_cb, int timeout); /*! - \ingroup Random + \ingroup Random \brief 無料のGlobal WhiteWood Netrandomコンテキスト。 \return 0 成功 \return BAD_MUTEX_E Wnr_Mutexでミューテックスをロックするエラー @@ -38,7 +38,7 @@ int wc_InitNetRandom(const char* configFile, wnr_hmac_key hmac_cb, int timeout) int wc_FreeNetRandom(void); /*! - \ingroup Random + \ingroup Random \brief RNGのシード(OSから)とキー暗号を取得します。割り当てられたRNG-> DRBG(決定論的ランダムビットジェネレータ)が割り当てられます(WC_FREERNGで割り当てられている必要があります)。これはブロッキング操作です。 \return 0 成功しています。 \return MEMORY_E XMallocに失敗しました @@ -74,7 +74,7 @@ int wc_FreeNetRandom(void); int wc_InitRng(WC_RNG*); /*! - \ingroup Random + \ingroup Random \brief 疑似ランダムデータのSZバイトを出力にコピーします。必要に応じてRNG(ブロッキング)します。 \return 0 成功した \return BAD_FUNC_ARG 入力はNULLまたはSZがMAX_REQUEST_LENを超えています @@ -106,7 +106,7 @@ int wc_InitRng(WC_RNG*); int wc_RNG_GenerateBlock(WC_RNG* rng, byte* b, word32 sz); /*! - \ingroup Random + \ingroup Random \brief 新しいWC_RNG構造を作成します。 \return WC_RNG 成功の構造 \return NULL 誤りに @@ -130,7 +130,7 @@ int wc_RNG_GenerateBlock(WC_RNG* rng, byte* b, word32 sz); WC_RNG* wc_rng_new(byte* nonce, word32 nonceSz, void* heap) /*! - \ingroup Random + \ingroup Random \brief wc_rng_generateBlockを呼び出して、疑似ランダムデータのバイトをbにコピーします。必要に応じてRNGが再販されます。 \return 0 成功した \return BAD_FUNC_ARG 入力はNULLまたはSZがMAX_REQUEST_LENを超えています @@ -162,7 +162,7 @@ WC_RNG* wc_rng_new(byte* nonce, word32 nonceSz, void* heap) int wc_RNG_GenerateByte(WC_RNG* rng, byte* b); /*! - \ingroup Random + \ingroup Random \brief RNGがDRGBを安全に解放するために必要なときに呼び出されるべきです。ゼロとXfrees RNG-DRBG。 \return 0 成功した \return BAD_FUNC_ARG RNGまたはRNG-> DRGB NULL @@ -189,7 +189,7 @@ int wc_RNG_GenerateByte(WC_RNG* rng, byte* b); int wc_FreeRng(WC_RNG*); /*! - \ingroup Random + \ingroup Random \brief RNGを安全に自由に解放するためにRNGが不要になったときに呼び出されるべきです。 _Example_ \code @@ -212,7 +212,7 @@ int wc_FreeRng(WC_RNG*); WC_RNG* wc_rng_free(WC_RNG* rng); /*! - \ingroup Random + \ingroup Random \brief DRBGの機能を作成しテストします。 \return 0 成功した \return BAD_FUNC_ARG ELTOPYAと出力はNULLにしないでください。Reseed Set EntropybがNULLでなければならない場合 diff --git a/doc/dox_comments/header_files-ja/ripemd.h b/doc/dox_comments/header_files-ja/ripemd.h index 478171afe..73f4e4402 100644 --- a/doc/dox_comments/header_files-ja/ripemd.h +++ b/doc/dox_comments/header_files-ja/ripemd.h @@ -1,5 +1,5 @@ /*! - \ingroup RIPEMD + \ingroup RIPEMD \brief この関数は、RIPemdのダイジェスト、バッファ、LOLEN ,HILENを初期化することによってRIPemd構造を初期化します。 \return 0 機能の実行に成功したことに戻ります。RIPEMD構造が初期化されます。 \return BAD_FUNC_ARG RIPEMD構造がNULLの場合に返されます。 @@ -18,7 +18,7 @@ int wc_InitRipeMd(RipeMd*); /*! - \ingroup RIPEMD + \ingroup RIPEMD \brief この関数はデータ入力のRIPemdダイジェストを生成し、結果をRIPemd-> Digestバッファに格納します。WC_RIPEMDUPDATEを実行した後、生成されたRIPemd-> Digestを既知の認証タグに比較してメッセージの信頼性を比較する必要があります。 \return 0 機能の実行に成功したことに戻ります。 \return BAD_FUNC_ARG RIPEMD構造がNULLの場合、またはデータがNULLで、LENがゼロでない場合に返されます。データがNULLであり、LENが0の場合、この関数は実行されるはずです。 @@ -42,7 +42,7 @@ int wc_InitRipeMd(RipeMd*); int wc_RipeMdUpdate(RipeMd* ripemd, const byte* data, word32 len); /*! - \ingroup RIPEMD + \ingroup RIPEMD \brief この関数は計算されたダイジェストをハッシュにコピーします。無傷のブロックがある場合、この方法ではブロックを0Sでパッケージし、ハッシュにコピーする前にそのブロックのラウンドをダイジェストに含めます。RIPEMDの状態がリセットされます。 \return 0 機能の実行に成功したことに戻ります。RIPEMD構造の状態がリセットされました。 \return BAD_FUNC_ARG RIPEMD構造体またはハッシュパラメータがNULLの場合に返されます。 diff --git a/doc/dox_comments/header_files-ja/sha.h b/doc/dox_comments/header_files-ja/sha.h index be7e24aad..ce199690e 100644 --- a/doc/dox_comments/header_files-ja/sha.h +++ b/doc/dox_comments/header_files-ja/sha.h @@ -1,5 +1,5 @@ /*! - \ingroup SHA + \ingroup SHA \brief この関数はSHAを初期化します。これは自動的にWC_Shahashによって呼び出されます。 \return 0 初期化に成功したときに返されます _Example_ @@ -20,7 +20,7 @@ int wc_InitSha(wc_Sha*); /*! - \ingroup SHA + \ingroup SHA \brief 長さLENの提供されたバイト配列を絶えずハッシュするように呼び出すことができます。 \return 0 データをダイジェストに正常に追加すると返されます。 \param sha 暗号化に使用するSHA構造へのポインタ @@ -46,7 +46,7 @@ int wc_InitSha(wc_Sha*); int wc_ShaUpdate(wc_Sha* sha, const byte* data, word32 len); /*! - \ingroup SHA + \ingroup SHA \brief データのハッシュを確定します。結果はハッシュに入れられます。SHA構造体の状態をリセットします。 \return 0 ファイナライズに成功したときに返されます。 \param sha 暗号化に使用するSHA構造へのポインタ @@ -71,7 +71,7 @@ int wc_ShaUpdate(wc_Sha* sha, const byte* data, word32 len); int wc_ShaFinal(wc_Sha* sha, byte* hash); /*! - \ingroup SHA + \ingroup SHA \brief 初期化されたSHA構造体によって使用されるメモリをクリーンアップするために使用されます。注:これは、wolfssl_ti_hashが定義されている場合にのみサポートされています。 \return No 戻り値。 _Example_ @@ -88,7 +88,7 @@ int wc_ShaFinal(wc_Sha* sha, byte* hash); void wc_ShaFree(wc_Sha*); /*! - \ingroup SHA + \ingroup SHA \brief ハッシュデータを取得します。結果はハッシュに入れられます。SHA構造体の状態をリセットしません。 \return 0 ファイナライズに成功したときに返されます。 \param sha 暗号化に使用するSHA構造へのポインタ diff --git a/doc/dox_comments/header_files-ja/sha256.h b/doc/dox_comments/header_files-ja/sha256.h index a717ee868..6cedcec1e 100644 --- a/doc/dox_comments/header_files-ja/sha256.h +++ b/doc/dox_comments/header_files-ja/sha256.h @@ -1,5 +1,5 @@ /*! - \ingroup SHA + \ingroup SHA \brief この関数はSHA256を初期化します。これはWC_SHA256HASHによって自動的に呼び出されます。 \return 0 初期化に成功したときに返されます _Example_ @@ -20,7 +20,7 @@ int wc_InitSha256(wc_Sha256*); /*! - \ingroup SHA + \ingroup SHA \brief 長さLENの提供されたバイト配列を絶えずハッシュするように呼び出すことができます。 \return 0 データをダイジェストに正常に追加すると返されます。 \param sha256 暗号化に使用するSHA256構造へのポインタ @@ -46,7 +46,7 @@ int wc_InitSha256(wc_Sha256*); int wc_Sha256Update(wc_Sha256* sha, const byte* data, word32 len); /*! - \ingroup SHA + \ingroup SHA \brief データのハッシュを確定します。結果はハッシュに入れられます。SHA256構造体の状態をリセットします。 \return 0 ファイナライズに成功したときに返されます。 \param sha256 暗号化に使用するSHA256構造へのポインタ @@ -71,7 +71,7 @@ int wc_Sha256Update(wc_Sha256* sha, const byte* data, word32 len); int wc_Sha256Final(wc_Sha256* sha256, byte* hash); /*! - \ingroup SHA + \ingroup SHA \brief SHA256構造をリセットします。注:これは、wolfssl_ti_hashが定義されている場合にのみサポートされています。 \return none いいえ返します。 _Example_ @@ -96,7 +96,7 @@ int wc_Sha256Final(wc_Sha256* sha256, byte* hash); void wc_Sha256Free(wc_Sha256*); /*! - \ingroup SHA + \ingroup SHA \brief ハッシュデータを取得します。結果はハッシュに入れられます。SHA256構造体の状態をリセットしません。 \return 0 ファイナライズに成功したときに返されます。 \param sha256 暗号化に使用するSHA256構造へのポインタ @@ -118,7 +118,7 @@ void wc_Sha256Free(wc_Sha256*); int wc_Sha256GetHash(wc_Sha256* sha256, byte* hash); /*! - \ingroup SHA + \ingroup SHA \brief SHA224構造を初期化するために使用されます。 \return 0 成功 \return 1 SHA224がNULLなので、エラーが返されました。 @@ -137,7 +137,7 @@ int wc_Sha256GetHash(wc_Sha256* sha256, byte* hash); int wc_InitSha224(wc_Sha224*); /*! - \ingroup SHA + \ingroup SHA \brief 長さLENの提供されたバイト配列を絶えずハッシュするように呼び出すことができます。 \return 0 成功 \return 1 関数が失敗した場合はエラーが返されます。 @@ -165,7 +165,7 @@ int wc_InitSha224(wc_Sha224*); int wc_Sha224Update(wc_Sha224* sha224, const byte* data, word32 len); /*! - \ingroup SHA + \ingroup SHA \brief データのハッシュを確定します。結果はハッシュに入れられます。SHA224構造体の状態をリセットします。 \return 0 成功 \return <0 エラー diff --git a/doc/dox_comments/header_files-ja/sha512.h b/doc/dox_comments/header_files-ja/sha512.h index 50af2373a..6d8a835d3 100644 --- a/doc/dox_comments/header_files-ja/sha512.h +++ b/doc/dox_comments/header_files-ja/sha512.h @@ -1,5 +1,5 @@ /*! - \ingroup SHA + \ingroup SHA \brief この関数はSHA512を初期化します。これはWC_SHA512HASHによって自動的に呼び出されます。 \return 0 初期化に成功したときに返されます _Example_ @@ -20,7 +20,7 @@ int wc_InitSha512(wc_Sha512*); /*! - \ingroup SHA + \ingroup SHA \brief 長さLENの提供されたバイト配列を絶えずハッシュするように呼び出すことができます。 \return 0 データをダイジェストに正常に追加すると返されます。 \param sha512 暗号化に使用するSHA512構造へのポインタ @@ -46,7 +46,7 @@ int wc_InitSha512(wc_Sha512*); int wc_Sha512Update(wc_Sha512* sha, const byte* data, word32 len); /*! - \ingroup SHA + \ingroup SHA \brief データのハッシュを確定します。結果はハッシュに入れられます。 \return 0 ハッシュを確定するとうまく返されました。 \param sha512 暗号化に使用するSHA512構造へのポインタ @@ -71,7 +71,7 @@ int wc_Sha512Update(wc_Sha512* sha, const byte* data, word32 len); int wc_Sha512Final(wc_Sha512* sha512, byte* hash); /*! - \ingroup SHA + \ingroup SHA \brief この関数はSHA384を初期化します。これはWC_SHA384HASHによって自動的に呼び出されます。 \return 0 初期化に成功したときに返されます _Example_ @@ -92,7 +92,7 @@ int wc_Sha512Final(wc_Sha512* sha512, byte* hash); int wc_InitSha384(wc_Sha384*); /*! - \ingroup SHA + \ingroup SHA \brief 長さLENの提供されたバイト配列を絶えずハッシュするように呼び出すことができます。 \return 0 データをダイジェストに正常に追加すると返されます。 \param sha384 暗号化に使用するSHA384構造へのポインタ @@ -118,7 +118,7 @@ int wc_InitSha384(wc_Sha384*); int wc_Sha384Update(wc_Sha384* sha, const byte* data, word32 len); /*! - \ingroup SHA + \ingroup SHA \brief データのハッシュを確定します。結果はハッシュに入れられます。 \return 0 ファイナライズに成功したときに返されます。 \param sha384 暗号化に使用するSHA384構造へのポインタ diff --git a/doc/dox_comments/header_files-ja/signature.h b/doc/dox_comments/header_files-ja/signature.h index b9c1a3c51..1017faf86 100644 --- a/doc/dox_comments/header_files-ja/signature.h +++ b/doc/dox_comments/header_files-ja/signature.h @@ -1,5 +1,5 @@ /*! - \ingroup Signature + \ingroup Signature \brief この関数は、結果のシグネチャの最大サイズを返します。 \return Returns sig_type_e sig_typeがサポートされていない場合sig_typeが無効な場合はbad_func_argを返します。正の戻り値は、署名の最大サイズを示します。 \param sig_type wc_signature_type_eccまたはwc_signature_type_rsaなどの署名型列挙型値。 @@ -24,7 +24,7 @@ int wc_SignatureGetSize(enum wc_SignatureType sig_type, const void* key, word32 key_len); /*! - \ingroup Signature + \ingroup Signature \brief この関数は、データをハッシュし、結果のハッシュとキーを使用して署名を使用して署名を使用して署名を検証します。 \return 0 成功 \return SIG_TYPE_E -231、署名タイプが有効/利用可能です @@ -65,7 +65,7 @@ int wc_SignatureVerify( const void* key, word32 key_len); /*! - \ingroup Signature + \ingroup Signature \brief この関数は、キーを使用してデータから署名を生成します。まずデータのハッシュを作成し、キーを使用してハッシュに署名します。 \return 0 成功 \return SIG_TYPE_E -231、署名タイプが有効/利用可能です diff --git a/doc/dox_comments/header_files-ja/siphash.h b/doc/dox_comments/header_files-ja/siphash.h index 2027a611b..59cccf776 100644 --- a/doc/dox_comments/header_files-ja/siphash.h +++ b/doc/dox_comments/header_files-ja/siphash.h @@ -1,6 +1,6 @@ /*! - \ingroup SipHash + \ingroup SipHash \brief この関数は、MacサイズのキーでSiphashを初期化します。 \return 0 初期化に成功したときに返されます \return BAD_FUNC_ARG SiphashまたはキーがNULLのときに返されます @@ -31,7 +31,7 @@ int wc_InitSipHash(SipHash* siphash, const unsigned char* key, unsigned char outSz); /*! - \ingroup SipHash + \ingroup SipHash \brief 長さLENの提供されたバイト配列を絶えずハッシュするように呼び出すことができます。 \return 0 Macにデータを追加したら、返されます \return BAD_FUNC_ARG Siphashがnullのとき返されました @@ -62,7 +62,7 @@ int wc_SipHashUpdate(SipHash* siphash, const unsigned char* in, word32 inSz); /*! - \ingroup SipHash + \ingroup SipHash \brief データのMacingを確定します。結果が出入りする。 \return 0 ファイナライズに成功したときに返されます。 \return BAD_FUNC_ARG SiphashのOUTがNULLのときに返されます @@ -93,7 +93,7 @@ int wc_SipHashFinal(SipHash* siphash, unsigned char* out, unsigned char outSz); /*! - \ingroup SipHash + \ingroup SipHash \brief この機能はSiphashを使用してデータを1ショットして、キーに基づいてMACを計算します。 \return 0 Macingに成功したときに返されました \return BAD_FUNC_ARG キーまたはOUTがNULLのときに返されます diff --git a/doc/dox_comments/header_files-ja/ssl.h b/doc/dox_comments/header_files-ja/ssl.h index 5efe2b62f..e3b55c7f3 100644 --- a/doc/dox_comments/header_files-ja/ssl.h +++ b/doc/dox_comments/header_files-ja/ssl.h @@ -2464,9 +2464,9 @@ int wolfSSL_CTX_GetDevId(WOLFSSL_CTX* ctx, WOLFSSL* ssl); \ingroup Setup \brief この関数はSSLセッションキャッシュ機能を有効または無効にします。 動作はモードに使用される値によって異なります。 - モードの値は次のとおりです: - SSL_SESS_CACHE_OFF - セッションキャッシングを無効にします。デフォルトでセッションキャッシングがオンになっています。 - SSL_SESS_CACHE_NO_AUTO_CLEAR - セッションキャッシュのオートフラッシュを無効にします。デフォルトで自動フラッシングはオンになっています。 + モードの値は次のとおりです: + SSL_SESS_CACHE_OFF - セッションキャッシングを無効にします。デフォルトでセッションキャッシングがオンになっています。 + SSL_SESS_CACHE_NO_AUTO_CLEAR - セッションキャッシュのオートフラッシュを無効にします。デフォルトで自動フラッシングはオンになっています。 \return SSL_SUCCESS 成功に戻ります。 \param ctx wolfSSL_CTX_new()で作成されたSSLコンテキストへのポインタ。 @@ -10877,7 +10877,7 @@ WOLFSSL_METHOD *wolfTLSv1_3_method_ex(void* heap); WOLFSSL_METHOD *wolfTLSv1_3_method(void); /*! - \ingroup Setup + \ingroup Setup \brief この関数はクライアント側で呼び出される場合には、サーバー側にCertificateメッセージで送信できる証明書タイプを設定します。 サーバー側で呼び出される場合には、受入れ可能なクライアント証明書タイプを設定します。 Raw Public Key 証明書を送受信したい場合にはこの関数を使って証明書タイプを設定しなければなりません。 @@ -10910,7 +10910,7 @@ WOLFSSL_METHOD *wolfTLSv1_3_method(void); int wolfSSL_CTX_set_client_cert_type(WOLFSSL_CTX* ctx, const char* buf, int len); /*! - \ingroup Setup + \ingroup Setup \brief この関数はサーバー側で呼び出される場合には、クライアント側にCertificateメッセージで送信できる証明書タイプを設定します。 クライアント側で呼び出される場合には、受入れ可能なサーバー証明書タイプを設定します。 Raw Public Key 証明書を送受信したい場合にはこの関数を使って証明書タイプを設定しなければなりません。 @@ -10944,7 +10944,7 @@ int wolfSSL_CTX_set_client_cert_type(WOLFSSL_CTX* ctx, const char* buf, int len) int wolfSSL_CTX_set_server_cert_type(WOLFSSL_CTX* ctx, const char* buf, int len); /*! - \ingroup Setup + \ingroup Setup \brief この関数はクライアント側で呼び出される場合には、サーバー側にCertificateメッセージで送信できる証明書タイプを設定します。 サーバー側で呼び出される場合には、受入れ可能なクライアント証明書タイプを設定します。 Raw Public Key 証明書を送受信したい場合にはこの関数を使って証明書タイプを設定しなければなりません。 @@ -10978,7 +10978,7 @@ int wolfSSL_CTX_set_server_cert_type(WOLFSSL_CTX* ctx, const char* buf, int len) int wolfSSL_set_client_cert_type(WOLFSSL* ssl, const char* buf, int len); /*! - \ingroup Setup + \ingroup Setup \brief この関数はサーバー側で呼び出される場合には、クライアント側にCertificateメッセージで送信できる証明書タイプを設定します。 クライアント側で呼び出される場合には、受入れ可能なサーバー証明書タイプを設定します。 Raw Public Key 証明書を送受信したい場合にはこの関数を使って証明書タイプを設定しなければなりません。 @@ -11012,7 +11012,7 @@ int wolfSSL_set_client_cert_type(WOLFSSL* ssl, const char* buf, int len); int wolfSSL_set_server_cert_type(WOLFSSL* ssl, const char* buf, int len); /*! - \ingroup SSL + \ingroup SSL \brief この関数はハンドシェーク終了後に呼び出し、相手とのネゴシエーションの結果得られたクライアント証明書のタイプを返します。 ネゴシエーションが発生しない場合には戻り値としてWOLFSSL_SUCCESSが返されますが、 証明書タイプとしてはWOLFSSL_CERT_TYPE_UNKNOWNが返されます。 @@ -11040,7 +11040,7 @@ int wolfSSL_set_server_cert_type(WOLFSSL* ssl, const char* buf, int len); int wolfSSL_get_negotiated_client_cert_type(WOLFSSL* ssl, int* tp); /*! - \ingroup SSL + \ingroup SSL \brief この関数はハンドシェーク終了後に呼び出し、相手とのネゴシエーションの結果得られたサーバー証明書のタイプを返します。 ネゴシエーションが発生しない場合には戻り値としてWOLFSSL_SUCCESSが返されますが、証明書タイプとしてはWOLFSSL_CERT_TYPE_UNKNOWNが返されます。 \return WOLFSSL_SUCCESS 成功時にかえります。tpに返された証明書タイプはWOLFSSL_CERT_TYPE_X509, @@ -11213,7 +11213,7 @@ int wolfSSL_dtls_cid_is_enabled(WOLFSSL* ssl); \brief このコネクションで他のピアに対してレコードを送信するためのコネクションIDをセットします。 RFC9146とRFC9147を参照してください。コネクションIDは最大値がDTLS_CID_MAX_SIZEでなければなりません。 - DTLS_CID_MAX_SIZEはビルド時に値を指定が可能ですが255バイトをこえることはできません。 + DTLS_CID_MAX_SIZEはビルド時に値を指定が可能ですが255バイトをこえることはできません。 \return WOLFSSL_SUCCESS コネクションIDがセットできた場合に返されます。それ以外はエラーコードが返されます。 diff --git a/doc/dox_comments/header_files-ja/tfm.h b/doc/dox_comments/header_files-ja/tfm.h index 94facaf38..63412d026 100644 --- a/doc/dox_comments/header_files-ja/tfm.h +++ b/doc/dox_comments/header_files-ja/tfm.h @@ -1,5 +1,5 @@ /*! - \ingroup Math + \ingroup Math \brief この関数は、整数の最大サイズのランタイムFastMath設定をチェックします。FP_SIZEが正しく機能するために、FP_SIZEが各ライブラリーに一致しなければならないため、ユーザーがWolfCryptライブラリを独立して使用している場合に重要です。このチェックはCheckFastMathSettings()として定義されています。これは、CheckRuntimeFastMathとFP_SIZEを比較するだけで、ミスマッチがある場合は0を返します。 \return FP_SIZE 数学ライブラリで利用可能な最大サイズに対応するFP_SIZEを返します。 _Example_ diff --git a/doc/dox_comments/header_files-ja/types.h b/doc/dox_comments/header_files-ja/types.h index 1988f06f3..b8f64b589 100644 --- a/doc/dox_comments/header_files-ja/types.h +++ b/doc/dox_comments/header_files-ja/types.h @@ -1,5 +1,5 @@ /*! - \ingroup Memory + \ingroup Memory \brief これは実際には関数ではなく、むしろプリプロセッサマクロであり、ユーザーは自分のMalloc、Realloc、および標準のCメモリ関数の代わりに自由な関数に置き換えることができます。外部メモリ機能を使用するには、xmalloc_userを定義します。これにより、メモリ機能をフォームの外部関数に置き換えます.extern void * xmalloc(size_t n、void * heap、int型); extern void * XrealLoc(void * p、size_t n、void *ヒープ、int型)。 extern void xfree(void * p、void * heap、int型); wolfssl_malloc、wolfssl_realloc、wolfssl_freeの代わりに基本的なCメモリ機能を使用するには、NO_WOLFSSL_MEMORYを定義します。これにより、メモリ関数が次のものに置き換えられます。#define Xmalloc(s、h、t)((void)h、(void)t、malloc((s)))#define xfree(p、h、t){void * xp =(p); if((xp))free((xp)); #define xrealloc(p、n、h、t)Realloc((p)、(n))これらのオプションのどれも選択されていない場合、システムはデフォルトで使用されます。 WolfSSLメモリ機能ユーザーはコールバックフックを介してカスタムメモリ機能を設定できます(Wolfssl_Malloc、WolfSSL_Realloc、wolfssl_freeを参照)。このオプションは、メモリ関数を次のものに置き換えます。#define xmalloc(s、h、t)((void)H、(Void)T、wolfssl_malloc((s)))#define xfree(p、h、t){void * XP =(P); if((xp))wolfssl_free((xp)); #define xrealloc(p、n、h、t)wolfssl_realloc((p)、(n)) \return pointer 成功したメモリへのポインタを返します \return NULL 失敗した @@ -21,7 +21,7 @@ void* XMALLOC(size_t n, void* heap, int type); /*! - \ingroup Memory + \ingroup Memory \brief これは実際には関数ではなく、むしろプリプロセッサマクロであり、ユーザーは自分のMalloc、Realloc、および標準のCメモリ関数の代わりに自由な関数に置き換えることができます。外部メモリ機能を使用するには、xmalloc_userを定義します。これにより、メモリ機能をフォームの外部関数に置き換えます.extern void * xmalloc(size_t n、void * heap、int型); extern void * XrealLoc(void * p、size_t n、void *ヒープ、int型)。 extern void xfree(void * p、void * heap、int型); wolfssl_malloc、wolfssl_realloc、wolfssl_freeの代わりに基本的なCメモリ機能を使用するには、NO_WOLFSSL_MEMORYを定義します。これにより、メモリ関数が次のものに置き換えられます。#define Xmalloc(s、h、t)((void)h、(void)t、malloc((s)))#define xfree(p、h、t){void * xp =(p); if((xp))free((xp)); #define xrealloc(p、n、h、t)Realloc((p)、(n))これらのオプションのどれも選択されていない場合、システムはデフォルトで使用されます。 WolfSSLメモリ機能ユーザーはコールバックフックを介してカスタムメモリ機能を設定できます(Wolfssl_Malloc、WolfSSL_Realloc、wolfssl_freeを参照)。このオプションは、メモリ関数を次のものに置き換えます。#define xmalloc(s、h、t)((void)H、(Void)T、wolfssl_malloc((s)))#define xfree(p、h、t){void * XP =(P); if((xp))wolfssl_free((xp)); #define xrealloc(p、n、h、t)wolfssl_realloc((p)、(n)) \return Return 成功したメモリを割り当てるポインタ \return NULL 失敗した @@ -42,7 +42,7 @@ void* XMALLOC(size_t n, void* heap, int type); void* XREALLOC(void *p, size_t n, void* heap, int type); /*! - \ingroup Memory + \ingroup Memory \brief これは実際には関数ではなく、むしろプリプロセッサマクロであり、ユーザーは自分のMalloc、Realloc、および標準のCメモリ関数の代わりに自由な関数に置き換えることができます。外部メモリ機能を使用するには、xmalloc_userを定義します。これにより、メモリ機能をフォームの外部関数に置き換えます.extern void * xmalloc(size_t n、void * heap、int型); extern void * XrealLoc(void * p、size_t n、void *ヒープ、int型)。 extern void xfree(void * p、void * heap、int型); wolfssl_malloc、wolfssl_realloc、wolfssl_freeの代わりに基本的なCメモリ機能を使用するには、NO_WOLFSSL_MEMORYを定義します。これにより、メモリ関数が次のものに置き換えられます。#define Xmalloc(s、h、t)((void)h、(void)t、malloc((s)))#define xfree(p、h、t){void * xp =(p); if((xp))free((xp)); #define xrealloc(p、n、h、t)Realloc((p)、(n))これらのオプションのどれも選択されていない場合、システムはデフォルトで使用されます。 WolfSSLメモリ機能ユーザーはコールバックフックを介してカスタムメモリ機能を設定できます(Wolfssl_Malloc、WolfSSL_Realloc、wolfssl_freeを参照)。このオプションは、メモリ関数を次のものに置き換えます。#define xmalloc(s、h、t)((void)H、(Void)T、wolfssl_malloc((s)))#define xfree(p、h、t){void * XP =(P); if((xp))wolfssl_free((xp)); #define xrealloc(p、n、h、t)wolfssl_realloc((p)、(n)) \return none いいえ返します。 \param p 無料のアドレスへのポインタ @@ -63,7 +63,7 @@ void* XREALLOC(void *p, size_t n, void* heap, int type); void XFREE(void *p, void* heap, int type); /*! - \ingroup Math + \ingroup Math \brief この関数はコンパイル時クラスの設定をチェックします。設定が正しく機能するためのライブラリ間のライブラリ間で一致する必要があるため、ユーザーがWolfCryptライブラリを独立して使用している場合は重要です。このチェックはCheckCtcSettings()として定義されています。これは、CheckRuntimeSettingsとCTC_Settingsを比較するだけで、ミスマッチがある場合は0、または1が一致した場合は1を返します。 \return settings 実行時CTC_SETTINGS(コンパイル時設定)を返します。 _Example_ diff --git a/doc/dox_comments/header_files-ja/wc_encrypt.h b/doc/dox_comments/header_files-ja/wc_encrypt.h index 2f0f230af..e209928b2 100644 --- a/doc/dox_comments/header_files-ja/wc_encrypt.h +++ b/doc/dox_comments/header_files-ja/wc_encrypt.h @@ -1,5 +1,5 @@ /*! - \ingroup AES + \ingroup AES \brief 入力バッファーから暗号を復号化し、AESでCipher Block Chainingを使用して出力バッファに出力バッファーに入れます。この関数は、AES構造を初期化する必要はありません。代わりに、キーとIV(初期化ベクトル)を取り、これらを使用してAESオブジェクトを初期化してから暗号テキストを復号化します。 \return 0 メッセージの復号化に成功しました \return BAD_ALIGN_E ブロック整列エラーに戻りました @@ -33,7 +33,7 @@ int wc_AesCbcDecryptWithKey(byte* out, const byte* in, word32 inSz, const byte* iv); /*! - \ingroup 3DES + \ingroup 3DES \brief この関数は入力暗号文を復号化し、結果の平文を出力バッファーに出力します。暗号ブロックチェーンチェーン(CBC)モードでDES暗号化を使用します。この関数は、wc_des_cbcdecryptの代わりに、ユーザーがDES構造体を直接インスタンス化せずにメッセージを復号化できるようにします。 \return 0 与えられた暗号文を正常に復号化したときに返されました \return MEMORY_E DES構造体の割り当てスペースが割り当てられている場合に返された @@ -62,7 +62,7 @@ int wc_Des_CbcDecryptWithKey(byte* out, const byte* key, const byte* iv); /*! - \ingroup 3DES + \ingroup 3DES \brief この関数は入力平文を暗号化し、結果の暗号文を出力バッファーに出力します。暗号ブロックチェーンチェーン(CBC)モードでDES暗号化を使用します。この関数は、WC_DES_CBCENCRYPTの代わりになり、ユーザーがDES構造を直接インスタンス化せずにメッセージを暗号化できます。 \return 0 データの暗号化に成功した後に返されます。 \return MEMORY_E DES構造体にメモリを割り当てるエラーがある場合は返されます。 @@ -90,7 +90,7 @@ int wc_Des_CbcEncryptWithKey(byte* out, const byte* key, const byte* iv); /*! - \ingroup 3DES + \ingroup 3DES \brief この関数は入力平文を暗号化し、結果の暗号文を出力バッファーに出力します。暗号ブロックチェーン(CBC)モードでトリプルDES(3DES)暗号化を使用します。この関数は、WC_DES3_CBCENCRYPTの代わりになり、ユーザーがDES3構造を直接インスタンス化せずにメッセージを暗号化できます。 \return 0 データの暗号化に成功した後に返されます。 \return MEMORY_E DES構造体にメモリを割り当てるエラーがある場合は返されます。 @@ -121,7 +121,7 @@ int wc_Des3_CbcEncryptWithKey(byte* out, const byte* key, const byte* iv); /*! - \ingroup 3DES + \ingroup 3DES \brief この関数は入力暗号文を復号化し、結果の平文を出力バッファーに出力します。暗号ブロックチェーン(CBC)モードでトリプルDES(3DES)暗号化を使用します。この関数は、wc_des3_cbcdecryptの代わりに、ユーザーがDES3構造を直接インスタンス化せずにメッセージを復号化できるようにします。 \return 0 与えられた暗号文を正常に復号化したときに返されました \return MEMORY_E DES構造体の割り当てスペースが割り当てられている場合に返された diff --git a/doc/dox_comments/header_files-ja/wc_port.h b/doc/dox_comments/header_files-ja/wc_port.h index 9a725cdca..9d0c370c6 100644 --- a/doc/dox_comments/header_files-ja/wc_port.h +++ b/doc/dox_comments/header_files-ja/wc_port.h @@ -1,5 +1,5 @@ /*! - \ingroup wolfCrypt + \ingroup wolfCrypt \brief WolfCryptによって使用されるリソースを初期化するために使用されます。 \return 0 成功すると。 \return <0 initリソースが失敗すると。 @@ -15,7 +15,7 @@ int wolfCrypt_Init(void); /*! - \ingroup wolfCrypt + \ingroup wolfCrypt \brief WolfCryptによって使用されるリソースをクリーンアップするために使用されます。 \return 0 成功すると。 \return <0 リソースのクリーンアップが失敗したとき。 diff --git a/doc/dox_comments/header_files-ja/wolfio.h b/doc/dox_comments/header_files-ja/wolfio.h index 65e0a5cc3..135af87aa 100644 --- a/doc/dox_comments/header_files-ja/wolfio.h +++ b/doc/dox_comments/header_files-ja/wolfio.h @@ -1,5 +1,5 @@ /*! - \brief + \brief \return Success この関数は、読み取られたバイト数を返します。 \return WOLFSSL_CBIO_ERR_WANT_READ 最後のエラーがsocket_ewouldbolcokまたはsocket_eagainであれば、メッセージを返されます。 \return WOLFSSL_CBIO_ERR_TIMEOUT "Socket Timeout"メッセージを返しました。 @@ -30,7 +30,7 @@ int EmbedReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx); /*! - \brief + \brief \return Success この関数は送信されたバイト数を返します。 \return WOLFSSL_CBIO_ERR_WANT_WRITE 最後のエラーがsocket_ewouldblockまたはsocket_eagainであれば、 "Block"メッセージを返します。 \return WOLFSSL_CBIO_ERR_CONN_RST 最後のエラーがsocket_econnresetの場合、 "Connection Reset"メッセージで返されます。 @@ -58,7 +58,7 @@ int EmbedReceive(WOLFSSL* ssl, char* buf, int sz, void* ctx); int EmbedSend(WOLFSSL* ssl, char* buf, int sz, void* ctx); /*! - \brief + \brief \return Success この関数は、実行が成功した場合に読み込まれたNBバイトを返します。 \return WOLFSSL_CBIO_ERR_WANT_READ 接続が拒否された場合、または「ブロック」エラーが発生した場合は機能にスローされました。 \return WOLFSSL_CBIO_ERR_TIMEOUT ソケットがタイムアウトした場合は返されます。 @@ -89,7 +89,7 @@ int EmbedSend(WOLFSSL* ssl, char* buf, int sz, void* ctx); int EmbedReceiveFrom(WOLFSSL* ssl, char* buf, int sz, void*); /*! - \brief + \brief \return Success この関数は送信されたバイト数を返します。 \return WOLFSSL_CBIO_ERR_WANT_WRITE 最後のエラーがsocket_ewouldblockまたはsocket_eagainエラーの場合、 "Block"メッセージを返します。 \return WOLFSSL_CBIO_ERR_CONN_RST 最後のエラーがsocket_econnresetの場合、 "Connection Reset"メッセージで返されます。 @@ -119,7 +119,7 @@ int EmbedReceiveFrom(WOLFSSL* ssl, char* buf, int sz, void*); int EmbedSendTo(WOLFSSL* ssl, char* buf, int sz, void* ctx); /*! - \brief + \brief \return Success この関数は、バッファにコピーされたバイト数を返します。 \return GEN_COOKIE_E getPeernameがEmbedGenerateCookieに失敗した場合に返されます。 \param ssl wolfssl_new()を使用して作成されたWolfSSL構造へのポインタ。 @@ -145,7 +145,7 @@ int EmbedGenerateCookie(WOLFSSL* ssl, unsigned char* buf, int sz, void*); /*! - \brief + \brief \return none いいえ返します。 \param ctx ヒープヒントへのvoidポインタ。 _Example_ @@ -222,7 +222,7 @@ void wolfSSL_SetIOReadCtx( WOLFSSL* ssl, void *ctx); void wolfSSL_SetIOWriteCtx(WOLFSSL* ssl, void *ctx); /*! - \ingroup IO + \ingroup IO \brief この関数は、WolfSSL構造体のIOCB_READCTXメンバーを返します。 \return pointer この関数は、wolfssl構造体のiocb_readctxメンバーへのvoidポインタを返します。 \return NULL wolfssl構造体がNULLの場合に返されます。 @@ -245,7 +245,7 @@ void wolfSSL_SetIOWriteCtx(WOLFSSL* ssl, void *ctx); void* wolfSSL_GetIOReadCtx( WOLFSSL* ssl); /*! - \ingroup IO + \ingroup IO \brief この関数は、WolfSSL構造のIOCB_WRITECTXメンバーを返します。 \return pointer この関数は、WolfSSL構造のIOCB_WRITECTXメンバーへのvoidポインタを返します。 \return NULL wolfssl構造体がNULLの場合に返されます。 @@ -303,7 +303,7 @@ void wolfSSL_SetIOReadFlags( WOLFSSL* ssl, int flags); void wolfSSL_SetIOWriteFlags(WOLFSSL* ssl, int flags); /*! - \ingroup IO + \ingroup IO \brief この関数は、wolfssl構造内のnxctx構造体のNxSocketメンバーとNXWAITメンバーを設定します。 \return none いいえ返します。 \param ssl wolfssl_new()を使用して作成されたWolfSSL構造へのポインタ。 @@ -347,7 +347,7 @@ void wolfSSL_SetIO_NetX(WOLFSSL* ssl, NX_TCP_SOCKET* nxsocket, void wolfSSL_CTX_SetGenCookie(WOLFSSL_CTX* ctx, CallbackGenCookie cb); /*! - \ingroup Setup + \ingroup Setup \brief この関数は、WolfSSL構造のIOCB_COOKIECTXメンバーを返します。 \return pointer この関数は、iocb_cookiectxに格納されているvoidポインタ値を返します。 \return NULL WolfSSL構造体がNULLの場合 @@ -369,7 +369,7 @@ void* wolfSSL_GetCookieCtx(WOLFSSL* ssl); /*! - \ingroup Setup + \ingroup Setup \brief この関数は、WolfSSLがWolfSSL_ISOTPでコンパイルされている場合に使用する場合は、WolfSSLの場合はISO-TPコンテキストを設定します。 \return 0 成功すると、故障のwolfssl_cbio_err_general \param ssl wolfsslコンテキスト diff --git a/doc/dox_comments/header_files/asn_public.h b/doc/dox_comments/header_files/asn_public.h index e7505e228..30ea784b0 100644 --- a/doc/dox_comments/header_files/asn_public.h +++ b/doc/dox_comments/header_files/asn_public.h @@ -1662,7 +1662,7 @@ void wc_SetCert_Free(Cert* cert); \return Length of traditional private key on success. \return Negative values on failure. - \param input Buffer containing unencrypted PKCS#8 private key. + \param input Buffer containing unencrypted PKCS#8 private key. \param inOutIdx Index into the input buffer. On input, it should be a byte offset to the beginning of the the PKCS#8 buffer. On output, it will be the byte offset to the traditional private key within the input buffer. @@ -1691,7 +1691,7 @@ int wc_GetPkcs8TraditionalOffset(byte* input, \brief This function takes in a DER private key and converts it to PKCS#8 format. Also used in creating PKCS#12 shrouded key bags. See RFC 5208. - + \return The size of the PKCS#8 key placed into out on success. \return LENGTH_ONLY_E if out is NULL, with required output buffer size in outSz. @@ -1840,7 +1840,7 @@ int wc_DecryptPKCS8Key(byte* input, word32 sz, const char* password, \brief This function takes a traditional, DER key, converts it to PKCS#8 format, and encrypts it. It uses wc_CreatePKCS8Key and wc_EncryptPKCS8Key - to do this. + to do this. \return The size of the encrypted key placed in out on success. \return LENGTH_ONLY_E if out is NULL, with required output buffer size in @@ -2199,7 +2199,7 @@ int wc_Asn1PrintOptions_Init(Asn1PrintOptions* opts); \return 0 on success. \return BAD_FUNC_ARG when asn1 is NULL. \return BAD_FUNC_ARG when val is out of range for option. - + \param opts The ASN.1 options for printing. \param opt An option to set value for. \param val The value to set. diff --git a/doc/dox_comments/header_files/cryptocb.h b/doc/dox_comments/header_files/cryptocb.h index 152f8823e..35cc88ef2 100644 --- a/doc/dox_comments/header_files/cryptocb.h +++ b/doc/dox_comments/header_files/cryptocb.h @@ -1,14 +1,14 @@ /*! \ingroup CryptoCb - \brief This function registers a unique device identifier (devID) and - callback function for offloading crypto operations to external + \brief This function registers a unique device identifier (devID) and + callback function for offloading crypto operations to external hardware such as Key Store, Secure Element, HSM, PKCS11 or TPM. For STSAFE with Crypto Callbacks example see wolfcrypt/src/port/st/stsafe.c and the wolfSSL_STSAFE_CryptoDevCb function. - For TPM based crypto callbacks example see the wolfTPM2_CryptoDevCb + For TPM based crypto callbacks example see the wolfTPM2_CryptoDevCb function in wolfTPM src/tpm2_wrap.c \return CRYPTOCB_UNAVAILABLE to fallback to using software crypto @@ -90,7 +90,7 @@ int wc_CryptoCb_RegisterDevice(int devId, CryptoDevCallbackFunc cb, void* ctx); /*! \ingroup CryptoCb - \brief This function un-registers a unique device identifier (devID) + \brief This function un-registers a unique device identifier (devID) callback function. \return none No returns. diff --git a/doc/dox_comments/header_files/doxygen_groups.h b/doc/dox_comments/header_files/doxygen_groups.h index 709d462b1..5cac25e2d 100644 --- a/doc/dox_comments/header_files/doxygen_groups.h +++ b/doc/dox_comments/header_files/doxygen_groups.h @@ -154,7 +154,7 @@ -# Set the RSK and, optionally precomputation table: wc_SetSakkeRsk() -# Derive SSV and auth data: wc_DeriveSakkeSSV() -# Free SAKKE Key: wc_FreeSakkeKey() - + \defgroup SAKKE_Setup Setup SAKKE Key Operations for establishing a SAKKE key. diff --git a/doc/dox_comments/header_files/ed25519.h b/doc/dox_comments/header_files/ed25519.h index b4176da9b..41705ce33 100644 --- a/doc/dox_comments/header_files/ed25519.h +++ b/doc/dox_comments/header_files/ed25519.h @@ -8,7 +8,7 @@ \return 0 Returned upon successfully making the public key. \return BAD_FUNC_ARG Returned if key or pubKey evaluate to NULL, or if the specified key size is not 32 bytes (Ed25519 has 32 byte keys). - \return ECC_PRIV_KEY_E returned if the ed25519_key object does not have + \return ECC_PRIV_KEY_E returned if the ed25519_key object does not have the private key in it. \return MEMORY_E Returned if there is an error allocating memory during function execution. diff --git a/doc/dox_comments/header_files/memory.h b/doc/dox_comments/header_files/memory.h index 02dbf4e41..fbc2172fc 100644 --- a/doc/dox_comments/header_files/memory.h +++ b/doc/dox_comments/header_files/memory.h @@ -4,9 +4,9 @@ \brief This function is similar to malloc(), but calls the memory allocation function which wolfSSL has been configured to use. By default, wolfSSL uses malloc(). This can be changed using the wolfSSL memory - abstraction layer - see wolfSSL_SetAllocators(). Note wolfSSL_Malloc is not + abstraction layer - see wolfSSL_SetAllocators(). Note wolfSSL_Malloc is not called directly by wolfSSL, but instead called by macro XMALLOC. - For the default build only the size argument exists. If using + For the default build only the size argument exists. If using WOLFSSL_STATIC_MEMORY build then heap and type arguments are included. \return pointer If successful, this function returns a pointer to @@ -37,9 +37,9 @@ void* wolfSSL_Malloc(size_t size, void* heap, int type); \brief This function is similar to free(), but calls the memory free function which wolfSSL has been configured to use. By default, wolfSSL uses free(). This can be changed using the wolfSSL memory abstraction - layer - see wolfSSL_SetAllocators(). Note wolfSSL_Free is not + layer - see wolfSSL_SetAllocators(). Note wolfSSL_Free is not called directly by wolfSSL, but instead called by macro XFREE. - For the default build only the ptr argument exists. If using + For the default build only the ptr argument exists. If using WOLFSSL_STATIC_MEMORY build then heap and type arguments are included. \return none No returns. @@ -73,8 +73,8 @@ void wolfSSL_Free(void *ptr, void* heap, int type); \brief This function is similar to realloc(), but calls the memory re-allocation function which wolfSSL has been configured to use. By default, wolfSSL uses realloc(). This can be changed using the - wolfSSL memory abstraction layer - see wolfSSL_SetAllocators(). - Note wolfSSL_Realloc is not called directly by wolfSSL, but instead called + wolfSSL memory abstraction layer - see wolfSSL_SetAllocators(). + Note wolfSSL_Realloc is not called directly by wolfSSL, but instead called by macro XREALLOC. For the default build only the size argument exists. If using WOLFSSL_STATIC_MEMORY build then heap and type arguments are included. diff --git a/doc/dox_comments/header_files/pkcs7.h b/doc/dox_comments/header_files/pkcs7.h index 0a329085e..5b70953ef 100644 --- a/doc/dox_comments/header_files/pkcs7.h +++ b/doc/dox_comments/header_files/pkcs7.h @@ -205,8 +205,8 @@ int wc_PKCS7_EncodeSignedData(PKCS7* pkcs7, \brief This function builds the PKCS7 signed data content type, encoding the PKCS7 structure into a header and footer buffer containing a parsable PKCS7 - signed data packet. This does not include the content. - A hash must be computed and provided for the data + signed data packet. This does not include the content. + A hash must be computed and provided for the data \return 0=Success \return BAD_FUNC_ARG Returned if the PKCS7 structure is missing one or @@ -244,11 +244,11 @@ int wc_PKCS7_EncodeSignedData(PKCS7* pkcs7, \param hashSz size of the digest \param outputHead pointer to the buffer in which to store the encoded certificate header - \param outputHeadSz pointer populated with size of output header buffer + \param outputHeadSz pointer populated with size of output header buffer and returns actual size \param outputFoot pointer to the buffer in which to store the encoded certificate footer - \param outputFootSz pointer populated with size of output footer buffer + \param outputFootSz pointer populated with size of output footer buffer and returns actual size _Example_ @@ -285,7 +285,7 @@ int wc_PKCS7_EncodeSignedData(PKCS7* pkcs7, wc_HashFree(&hash, hashType); } - ret = wc_PKCS7_EncodeSignedData_ex(&pkcs7, hashBuf, hashSz, pkcs7HeadBuff, + ret = wc_PKCS7_EncodeSignedData_ex(&pkcs7, hashBuf, hashSz, pkcs7HeadBuff, &pkcs7HeadSz, pkcs7FootBuff, &pkcs7FootSz); if ( ret != 0 ) { // error encoding into output buffer @@ -297,8 +297,8 @@ int wc_PKCS7_EncodeSignedData(PKCS7* pkcs7, \sa wc_PKCS7_InitWithCert \sa wc_PKCS7_VerifySignedData_ex */ -int wc_PKCS7_EncodeSignedData_ex(PKCS7* pkcs7, const byte* hashBuf, - word32 hashSz, byte* outputHead, word32* outputHeadSz, byte* outputFoot, +int wc_PKCS7_EncodeSignedData_ex(PKCS7* pkcs7, const byte* hashBuf, + word32 hashSz, byte* outputHead, word32* outputHeadSz, byte* outputFoot, word32* outputFootSz); /*! @@ -382,9 +382,9 @@ int wc_PKCS7_VerifySignedData(PKCS7* pkcs7, /*! \ingroup PKCS7 - \brief This function takes in a transmitted PKCS7 signed data message as - hash/header/footer, then extracts the certificate list and certificate - revocation list, and then verifies the signature. It stores the extracted + \brief This function takes in a transmitted PKCS7 signed data message as + hash/header/footer, then extracts the certificate list and certificate + revocation list, and then verifies the signature. It stores the extracted content in the given PKCS7 structure. \return 0 Returned on successfully extracting the information @@ -426,10 +426,10 @@ int wc_PKCS7_VerifySignedData(PKCS7* pkcs7, certificates \param hashBuf pointer to computed hash for the content data \param hashSz size of the digest - \param pkiMsgHead pointer to the buffer containing the signed message header + \param pkiMsgHead pointer to the buffer containing the signed message header to verify and decode \param pkiMsgHeadSz size of the signed message header - \param pkiMsgFoot pointer to the buffer containing the signed message footer + \param pkiMsgFoot pointer to the buffer containing the signed message footer to verify and decode \param pkiMsgFootSz size of the signed message footer @@ -463,7 +463,7 @@ int wc_PKCS7_VerifySignedData(PKCS7* pkcs7, wc_HashFree(&hash, hashType); } - ret = wc_PKCS7_VerifySignedData_ex(&pkcs7, hashBuf, hashSz, pkcs7HeadBuff, + ret = wc_PKCS7_VerifySignedData_ex(&pkcs7, hashBuf, hashSz, pkcs7HeadBuff, sizeof(pkcs7HeadBuff), pkcs7FootBuff, sizeof(pkcs7FootBuff)); if ( ret != 0 ) { // error encoding into output buffer @@ -475,8 +475,8 @@ int wc_PKCS7_VerifySignedData(PKCS7* pkcs7, \sa wc_PKCS7_InitWithCert \sa wc_PKCS7_EncodeSignedData_ex */ -int wc_PKCS7_VerifySignedData_ex(PKCS7* pkcs7, const byte* hashBuf, - word32 hashSz, byte* pkiMsgHead, word32 pkiMsgHeadSz, byte* pkiMsgFoot, +int wc_PKCS7_VerifySignedData_ex(PKCS7* pkcs7, const byte* hashBuf, + word32 hashSz, byte* pkiMsgHead, word32 pkiMsgHeadSz, byte* pkiMsgFoot, word32 pkiMsgFootSz); /*! diff --git a/doc/dox_comments/header_files/rsa.h b/doc/dox_comments/header_files/rsa.h index 9f099c1ed..2245052f3 100644 --- a/doc/dox_comments/header_files/rsa.h +++ b/doc/dox_comments/header_files/rsa.h @@ -333,6 +333,12 @@ int wc_RsaPrivateDecrypt(const byte* in, word32 inLen, byte* out, if (ret < 0) { return -1; } + if (ret != inLen) { + return -1; + } + if (XMEMCMP(in, plain, ret) != 0) { + return -1; + } \endcode \sa wc_RsaPad @@ -403,6 +409,12 @@ int wc_RsaSSL_VerifyInline(byte* in, word32 inLen, byte** out, if (ret < 0) { return -1; } + if (ret != inLen) { + return -1; + } + if (XMEMCMP(in, plain, ret) != 0) { + return -1; + } \endcode \sa wc_RsaSSL_Sign diff --git a/doc/dox_comments/header_files/types.h b/doc/dox_comments/header_files/types.h index 65faa10a5..6f1ecee26 100644 --- a/doc/dox_comments/header_files/types.h +++ b/doc/dox_comments/header_files/types.h @@ -23,14 +23,14 @@ #define XMALLOC(s, h, t) ((void)h, (void)t, wolfSSL_Malloc((s))) #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp));} #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n)) - + \return pointer Return a pointer to allocated memory on success \return NULL on failure - + \param s size of memory to allocate - \param h (used by custom XMALLOC function) pointer to the heap to use + \param h (used by custom XMALLOC function) pointer to the heap to use \param t memory allocation types for user hints. See enum in types.h - + _Example_ \code int* tenInts = XMALLOC(sizeof(int)*10, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -39,7 +39,7 @@ return MEMORY_E; } \endcode - + \sa wolfSSL_Malloc \sa wolfSSL_Realloc \sa wolfSSL_Free @@ -75,19 +75,19 @@ void* XMALLOC(size_t n, void* heap, int type); \return Return a pointer to allocated memory on success \return NULL on failure - + \param p pointer to the address to reallocate \param n size of memory to allocate - \param h (used by custom XREALLOC function) pointer to the heap to use + \param h (used by custom XREALLOC function) pointer to the heap to use \param t memory allocation types for user hints. See enum in types.h - + _Example_ \code int* tenInts = (int*)XMALLOC(sizeof(int)*10, NULL, DYNAMIC_TYPE_TMP_BUFFER); int* twentyInts = (int*)XREALLOC(tenInts, sizeof(int)*20, NULL, DYNAMIC_TYPE_TMP_BUFFER); \endcode - + \sa wolfSSL_Malloc \sa wolfSSL_Realloc \sa wolfSSL_Free @@ -123,9 +123,9 @@ void* XREALLOC(void *p, size_t n, void* heap, int type); \return none No returns. \param p pointer to the address to free - \param h (used by custom XFREE function) pointer to the heap to use + \param h (used by custom XFREE function) pointer to the heap to use \param t memory allocation types for user hints. See enum in types.h - + _Example_ \code int* tenInts = XMALLOC(sizeof(int) * 10, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -134,7 +134,7 @@ void* XREALLOC(void *p, size_t n, void* heap, int type); return MEMORY_E; } \endcode - + \sa wolfSSL_Malloc \sa wolfSSL_Realloc \sa wolfSSL_Free diff --git a/doc/formats/html/html_changes/customdoxygen.css b/doc/formats/html/html_changes/customdoxygen.css index 2c553fdea..478f7cf54 100644 --- a/doc/formats/html/html_changes/customdoxygen.css +++ b/doc/formats/html/html_changes/customdoxygen.css @@ -418,7 +418,7 @@ p.formulaDsp { } img.formulaDsp { - + } img.formulaInl { diff --git a/doc/formats/html/html_changes/doxygen.css b/doc/formats/html/html_changes/doxygen.css index c49b43f3e..ee1bde225 100644 --- a/doc/formats/html/html_changes/doxygen.css +++ b/doc/formats/html/html_changes/doxygen.css @@ -321,7 +321,7 @@ p.formulaDsp { } img.formulaDsp { - + } img.formulaInl { diff --git a/examples/client/client.c b/examples/client/client.c index 0f4f3fae7..b8adcc192 100644 --- a/examples/client/client.c +++ b/examples/client/client.c @@ -3225,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 diff --git a/examples/configs/user_settings_stm32.h b/examples/configs/user_settings_stm32.h index 20f0d5cfa..c3fdcfffb 100644 --- a/examples/configs/user_settings_stm32.h +++ b/examples/configs/user_settings_stm32.h @@ -119,8 +119,8 @@ extern "C" { /*---------- WOLF_CONF_TEST -----------*/ #define WOLF_CONF_TEST 1 -/*---------- WOLF_CONF_PQM4 -----------*/ -#define WOLF_CONF_PQM4 0 +/*---------- WOLF_CONF_KYBER -----------*/ +#define WOLF_CONF_kYBER 0 /* ------------------------------------------------------------------------- */ /* Hardware platform */ @@ -373,14 +373,6 @@ extern "C" { #define NO_SESSION_CACHE #endif -/* Post Quantum - * Note: PQM4 is compatible with STM32. The project can be found at: - * https://github.com/mupq/pqm4 - */ -#if defined(WOLF_CONF_PQM4) && WOLF_CONF_PQM4 == 1 - #define HAVE_PQM4 -#endif - /* ------------------------------------------------------------------------- */ /* Crypto */ /* ------------------------------------------------------------------------- */ @@ -576,6 +568,35 @@ extern "C" { #define NO_MD5 #endif +/* ------------------------------------------------------------------------- */ +/* Post-Quantum Crypto */ +/* ------------------------------------------------------------------------- */ + +/* + * NOTE: this is after the hashing section to override the potential SHA3 undef + * above. */ +#if defined(WOLF_CONF_KYBER) && WOLF_CONF_KYBER == 1 +#undef WOLFSSL_EXPERIMENTAL_SETTINGS +#define WOLFSSL_EXPERIMENTAL_SETTINGS + +#undef WOLFSSL_HAVE_KYBER +#define WOLFSSL_HAVE_KYBER + +#undef WOLFSSL_WC_KYBER +#define WOLFSSL_WC_KYBER + +#undef WOLFSSL_NO_SHAKE128 +#undef WOLFSSL_SHAKE128 +#define WOLFSSL_SHAKE128 + +#undef WOLFSSL_NO_SHAKE256 +#undef WOLFSSL_SHAKE256 +#define WOLFSSL_SHAKE256 + +#undef WOLFSSL_SHA3 +#define WOLFSSL_SHA3 +#endif /* WOLF_CONF_KYBER */ + /* ------------------------------------------------------------------------- */ /* Benchmark / Test */ /* ------------------------------------------------------------------------- */ diff --git a/examples/server/server.c b/examples/server/server.c index d98136532..2f42a909e 100644 --- a/examples/server/server.c +++ b/examples/server/server.c @@ -2684,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 diff --git a/linuxkm/linuxkm_wc_port.h b/linuxkm/linuxkm_wc_port.h index 68592582a..109e499a7 100644 --- a/linuxkm/linuxkm_wc_port.h +++ b/linuxkm/linuxkm_wc_port.h @@ -461,8 +461,11 @@ struct Signer *GetCA(void *signers, unsigned char *hash); #ifndef NO_SKID struct Signer *GetCAByName(void* signers, unsigned char *hash); - #endif - #endif + #ifdef HAVE_OCSP + struct Signer* GetCAByKeyHash(void* vp, const unsigned char* keyHash); + #endif /* HAVE_OCSP */ + #endif /* NO_SKID */ + #endif /* !WOLFCRYPT_ONLY && !NO_CERTS */ #if defined(__PIE__) && !defined(USE_WOLFSSL_LINUXKM_PIE_REDIRECT_TABLE) #error "compiling -fPIE requires PIE redirect table." @@ -629,8 +632,11 @@ typeof(GetCA) *GetCA; #ifndef NO_SKID typeof(GetCAByName) *GetCAByName; - #endif - #endif + #ifdef HAVE_OCSP + typeof(GetCAByKeyHash) *GetCAByKeyHash; + #endif /* HAVE_OCSP */ + #endif /* NO_SKID */ + #endif /* !WOLFCRYPT_ONLY && !NO_CERTS */ #ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES typeof(dump_stack) *dump_stack; @@ -778,8 +784,11 @@ #define GetCA (wolfssl_linuxkm_get_pie_redirect_table()->GetCA) #ifndef NO_SKID #define GetCAByName (wolfssl_linuxkm_get_pie_redirect_table()->GetCAByName) - #endif - #endif + #ifdef HAVE_OCSP + #define GetCAByKeyHash (wolfssl_linuxkm_get_pie_redirect_table()->GetCAByKeyHash) + #endif /* HAVE_OCSP */ + #endif /* NO_SKID */ + #endif /* !WOLFCRYPT_ONLY && !NO_CERTS */ #ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES #define dump_stack (wolfssl_linuxkm_get_pie_redirect_table()->dump_stack) diff --git a/linuxkm/lkcapi_glue.c b/linuxkm/lkcapi_glue.c index c7e0683a1..faf88fd56 100644 --- a/linuxkm/lkcapi_glue.c +++ b/linuxkm/lkcapi_glue.c @@ -2025,7 +2025,7 @@ static int aes_xts_128_test(void) } #if defined(DEBUG_VECTOR_REGISTER_ACCESS) && defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesXtsEncrypt(aes, buf, p2, sizeof(p2), i2, sizeof(i2)); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); if (ret != 0) @@ -2068,7 +2068,7 @@ static int aes_xts_128_test(void) } #if defined(DEBUG_VECTOR_REGISTER_ACCESS) && defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesXtsEncrypt(aes, buf, p1, sizeof(p1), i1, sizeof(i1)); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); if (ret != 0) @@ -2090,7 +2090,7 @@ static int aes_xts_128_test(void) } #if defined(DEBUG_VECTOR_REGISTER_ACCESS) && defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); XMEMSET(cipher, 0, AES_XTS_128_TEST_BUF_SIZ); ret = wc_AesXtsEncrypt(aes, cipher, pp, sizeof(pp), i1, sizeof(i1)); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); @@ -2116,7 +2116,7 @@ static int aes_xts_128_test(void) } #if defined(DEBUG_VECTOR_REGISTER_ACCESS) && defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); XMEMSET(buf, 0, AES_XTS_128_TEST_BUF_SIZ); ret = wc_AesXtsDecrypt(aes, buf, cipher, sizeof(pp), i1, sizeof(i1)); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); @@ -2139,7 +2139,7 @@ static int aes_xts_128_test(void) } #if defined(DEBUG_VECTOR_REGISTER_ACCESS) && defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); XMEMSET(buf, 0, AES_XTS_128_TEST_BUF_SIZ); ret = wc_AesXtsDecrypt(aes, buf, c1, sizeof(c1), i1, sizeof(i1)); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); diff --git a/linuxkm/module_hooks.c b/linuxkm/module_hooks.c index f2255b108..ffe22f3b6 100644 --- a/linuxkm/module_hooks.c +++ b/linuxkm/module_hooks.c @@ -577,8 +577,11 @@ static int set_up_wolfssl_linuxkm_pie_redirect_table(void) { wolfssl_linuxkm_pie_redirect_table.GetCA = GetCA; #ifndef NO_SKID wolfssl_linuxkm_pie_redirect_table.GetCAByName = GetCAByName; -#endif -#endif +#ifdef HAVE_OCSP +wolfssl_linuxkm_pie_redirect_table.GetCAByKeyHash = GetCAByKeyHash; +#endif /* HAVE_OCSP */ +#endif /* NO_SKID */ +#endif /* !WOLFCRYPT_ONLY && !NO_CERTS */ #ifdef WOLFSSL_DEBUG_BACKTRACE_ERROR_CODES wolfssl_linuxkm_pie_redirect_table.dump_stack = dump_stack; diff --git a/m4/ax_debug.m4 b/m4/ax_debug.m4 index 94e4c9cb6..42808535b 100644 --- a/m4/ax_debug.m4 +++ b/m4/ax_debug.m4 @@ -14,23 +14,23 @@ # # Copyright (C) 2012 Brian Aker # All rights reserved. -# +# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: -# +# # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. -# +# # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following disclaimer # in the documentation and/or other materials provided with the # distribution. -# +# # * The names of its contributors may not be used to endorse or # promote products derived from this software without specific prior # written permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff --git a/m4/ax_harden_compiler_flags.m4 b/m4/ax_harden_compiler_flags.m4 index d9ae175c0..d4377a70e 100644 --- a/m4/ax_harden_compiler_flags.m4 +++ b/m4/ax_harden_compiler_flags.m4 @@ -19,23 +19,23 @@ # # Copyright (C) 2012 Brian Aker # All rights reserved. -# +# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: -# +# # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. -# +# # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following disclaimer # in the documentation and/or other materials provided with the # distribution. -# +# # * The names of its contributors may not be used to endorse or # promote products derived from this software without specific prior # written permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff --git a/m4/ax_vcs_checkout.m4 b/m4/ax_vcs_checkout.m4 index 4636b58ed..63d5e9bea 100644 --- a/m4/ax_vcs_checkout.m4 +++ b/m4/ax_vcs_checkout.m4 @@ -16,23 +16,23 @@ # # Copyright (C) 2012 Brian Aker # All rights reserved. -# +# # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: -# +# # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. -# +# # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following disclaimer # in the documentation and/or other materials provided with the # distribution. -# +# # * The names of its contributors may not be used to endorse or # promote products derived from this software without specific prior # written permission. -# +# # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff --git a/mqx/wolfcrypt_test/Sources/main.c b/mqx/wolfcrypt_test/Sources/main.c index 040a2bf3c..0276c7c80 100644 --- a/mqx/wolfcrypt_test/Sources/main.c +++ b/mqx/wolfcrypt_test/Sources/main.c @@ -58,7 +58,7 @@ typedef struct func_args { /*TASK*----------------------------------------------------------------- * Function Name : Main_task * Comments : - * This task opens the SD card device and runs the + * This task opens the SD card device and runs the * wolfCrypt test functions located in test.c. *END------------------------------------------------------------------*/ @@ -69,7 +69,7 @@ void Main_task(uint32_t initial_data) char filesystem_name[] = "a:"; char partman_name[] = "pm:"; MQX_FILE_PTR com_handle, sdcard_handle, filesystem_handle, partman_handle; - + ret = sdcard_open(&com_handle, &sdcard_handle, &partman_handle, &filesystem_handle, partman_name, filesystem_name); if (ret != 0) { @@ -77,9 +77,9 @@ void Main_task(uint32_t initial_data) _mqx_exit(1); } printf("SD card installed to %s\n", filesystem_name); - + wolfcrypt_test(&args); - + ret = sdcard_close(&sdcard_handle, &partman_handle, &filesystem_handle, partman_name, filesystem_name); if (ret != 0) { @@ -87,7 +87,7 @@ void Main_task(uint32_t initial_data) _mqx_exit(1); } printf("SD card uninstalled.\n"); - + _mqx_exit(0); } diff --git a/scripts/external.test b/scripts/external.test index abef437a0..970f6ad6d 100755 --- a/scripts/external.test +++ b/scripts/external.test @@ -16,24 +16,28 @@ if ! ./examples/client/client -V | grep -q 3; then fi # cloudflare seems to change CAs quickly, disabled by default -if test -n "$WOLFSSL_EXTERNAL_TEST"; then - - BUILD_FLAGS="$(./examples/client/client '-#')" - if echo "$BUILD_FLAGS" | fgrep -q -e ' -DWOLFSSL_SNIFFER '; then - echo 'skipping WOLFSSL_EXTERNAL_TEST because -DWOLFSSL_SNIFFER configuration of build is incompatible.' - exit 77 - fi - - if echo "$BUILD_FLAGS" | fgrep -v -q -e ' -DHAVE_ECC '; then - echo 'skipping WOLFSSL_EXTERNAL_TEST because -UHAVE_ECC configuration of build is incompatible.' - exit 77 - fi - - echo "WOLFSSL_EXTERNAL_TEST set, running test..." -else - echo "WOLFSSL_EXTERNAL_TEST NOT set, won't run" +if ! test -n "$WOLFSSL_EXTERNAL_TEST"; then + echo "WOLFSSL_EXTERNAL_TEST not set, won't run" exit 77 fi +if test "$WOLFSSL_EXTERNAL_TEST" == "0"; then + echo "WOLFSSL_EXTERNAL_TEST is defined to zero, won't run" + exit 77 +fi + + +BUILD_FLAGS="$(./examples/client/client '-#')" +if echo "$BUILD_FLAGS" | fgrep -q -e ' -DWOLFSSL_SNIFFER '; then + echo 'skipping WOLFSSL_EXTERNAL_TEST because -DWOLFSSL_SNIFFER configuration of build is incompatible.' + exit 77 +fi + +if echo "$BUILD_FLAGS" | fgrep -v -q -e ' -DHAVE_ECC '; then + echo 'skipping WOLFSSL_EXTERNAL_TEST because -UHAVE_ECC configuration of build is incompatible.' + exit 77 +fi + +echo "WOLFSSL_EXTERNAL_TEST set, running test..." # is our desired server there? "${SCRIPT_DIR}"/ping.test $server 2 diff --git a/scripts/google.test b/scripts/google.test index e2b0c63d4..5e3e8f0f9 100755 --- a/scripts/google.test +++ b/scripts/google.test @@ -10,6 +10,10 @@ if ! test -n "$WOLFSSL_EXTERNAL_TEST"; then echo "WOLFSSL_EXTERNAL_TEST not set, won't run" exit 77 fi +if test "$WOLFSSL_EXTERNAL_TEST" == "0"; then + echo "WOLFSSL_EXTERNAL_TEST is defined to zero, won't run" + exit 77 +fi if ! ./examples/client/client -V | grep -q 3; then echo 'skipping google.test because TLS1.2 is not available.' 1>&2 diff --git a/scripts/ocsp-stapling.test b/scripts/ocsp-stapling.test index 90b7332a9..731334c3d 100755 --- a/scripts/ocsp-stapling.test +++ b/scripts/ocsp-stapling.test @@ -11,6 +11,12 @@ if [[ -z "${RETRIES_REMAINING-}" ]]; then export RETRIES_REMAINING=2 fi +if test "$WOLFSSL_EXTERNAL_TEST" == "0"; then + echo 'skipping oscp-stapling.test because WOLFSSL_EXTERNAL_TEST is \ + defined to the value 0.' + exit 77 +fi + if ! ./examples/client/client -V | grep -q 3; then echo 'skipping ocsp-stapling.test because TLS1.2 is not available.' 1>&2 exit 77 diff --git a/scripts/ocsp.test b/scripts/ocsp.test index 0131b0bfd..74764de90 100755 --- a/scripts/ocsp.test +++ b/scripts/ocsp.test @@ -50,7 +50,7 @@ else fi server=www.google.com -ca=${SCRIPT_DIR}/../certs/external/ca-google-root.pem +ca=certs/external/ca-google-root.pem if [ "$AM_BWRAPPED" != "yes" ]; then # is our desired server there? diff --git a/src/bio.c b/src/bio.c index 8496b894b..b2504dfb9 100644 --- a/src/bio.c +++ b/src/bio.c @@ -453,8 +453,9 @@ static int wolfSSL_BIO_BASE64_write(WOLFSSL_BIO* bio, const void* data, } } else { - if (Base64_Encode((const byte*)data, inLen, NULL, &sz) != - LENGTH_ONLY_E) { + if (Base64_Encode((const byte*)data, inLen, NULL, &sz) + != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) + { WOLFSSL_MSG("Error with base64 get length"); return WOLFSSL_FATAL_ERROR; } diff --git a/src/include.am b/src/include.am index 3bd53273f..36607f5ce 100644 --- a/src/include.am +++ b/src/include.am @@ -992,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 e72a85f0e..5a362b637 100644 --- a/src/internal.c +++ b/src/internal.c @@ -2563,7 +2563,7 @@ void wolfSSL_CRYPTO_cleanup_ex_data(WOLFSSL_CRYPTO_EX_DATA* ex_data) #if defined(WOLFSSL_TLS13) && defined(HAVE_ECH) /* free all ech configs in the list */ -static void FreeEchConfigs(WOLFSSL_EchConfig* configs, void* heap) +void FreeEchConfigs(WOLFSSL_EchConfig* configs, void* heap) { WOLFSSL_EchConfig* working_config = configs; WOLFSSL_EchConfig* next_config; @@ -3268,9 +3268,13 @@ void InitSuites(Suites* suites, ProtocolVersion pv, int keySz, word16 haveRSA, int haveRSAsig = 1; #ifdef WOLFSSL_DTLS - /* If DTLS v1.2 or later than set tls1_2 flag */ - if (pv.major == DTLS_MAJOR && pv.minor <= DTLSv1_2_MINOR) { - tls1_2 = 1; + if (pv.major == DTLS_MAJOR) { + dtls = 1; + tls = 1; + /* May be dead assignments dependent upon configuration */ + (void) dtls; + (void) tls; + tls1_2 = pv.minor <= DTLSv1_2_MINOR; } #endif @@ -3381,17 +3385,6 @@ void InitSuites(Suites* suites, ProtocolVersion pv, int keySz, word16 haveRSA, haveRSAsig = 0; /* can't have RSA sig if don't have RSA */ #endif -#ifdef WOLFSSL_DTLS - if (pv.major == DTLS_MAJOR) { - dtls = 1; - tls = 1; - /* May be dead assignments dependent upon configuration */ - (void) dtls; - (void) tls; - tls1_2 = pv.minor <= DTLSv1_2_MINOR; - } -#endif - #ifdef HAVE_RENEGOTIATION_INDICATION if (side == WOLFSSL_CLIENT_END) { suites->suites[idx++] = CIPHER_BYTE; @@ -7512,6 +7505,9 @@ int InitSSL(WOLFSSL* ssl, WOLFSSL_CTX* ctx, int writeDup) #if defined(HAVE_ENCRYPT_THEN_MAC) && !defined(WOLFSSL_AEAD_ONLY) ssl->options.disallowEncThenMac = ctx->disallowEncThenMac; #endif +#if defined(WOLFSSL_TLS13) && defined(HAVE_ECH) + ssl->options.disableECH = ctx->disableECH; +#endif /* default alert state (none) */ ssl->alert_history.last_rx.code = -1; @@ -40374,7 +40370,7 @@ static int DefTicketEncCb(WOLFSSL* ssl, byte key_name[WOLFSSL_TICKET_NAME_SZ], lenErrMask = 0 - (SECRET_LEN != args->sigSz); args->lastErr = (ret & (~lenErrMask)) | - (RSA_PAD_E & lenErrMask); + (WC_NO_ERR_TRACE(RSA_PAD_E) & lenErrMask); ret = 0; break; } /* rsa_kea */ diff --git a/src/ocsp.c b/src/ocsp.c index 28dde6148..761e5c023 100644 --- a/src/ocsp.c +++ b/src/ocsp.c @@ -852,7 +852,7 @@ void wolfSSL_OCSP_BASICRESP_free(WOLFSSL_OCSP_BASICRESP* basicResponse) int wolfSSL_OCSP_basic_verify(WOLFSSL_OCSP_BASICRESP *bs, WOLF_STACK_OF(WOLFSSL_X509) *certs, WOLFSSL_X509_STORE *st, unsigned long flags) { - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); #ifdef WOLFSSL_SMALL_STACK DecodedCert *cert; #else @@ -1432,7 +1432,7 @@ WOLFSSL_OCSP_REQ_CTX* wolfSSL_OCSP_REQ_CTX_new(WOLFSSL_BIO *bio, int maxline) DYNAMIC_TYPE_OPENSSL); if (ret != NULL) { XMEMSET(ret, 0, sizeof(*ret)); - ret->buf = (byte*)XMALLOC(maxline, NULL, DYNAMIC_TYPE_OPENSSL); + 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()); diff --git a/src/pk.c b/src/pk.c index 0c74cc8aa..34cdf8d5b 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 @@ -12342,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/ssl.c b/src/ssl.c index 19c2ee89d..1eca6af16 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -553,6 +553,18 @@ int wolfSSL_CTX_GetEchConfigs(WOLFSSL_CTX* ctx, byte* output, return GetEchConfigsEx(ctx->echConfigs, output, outputLen); } +void wolfSSL_CTX_SetEchEnable(WOLFSSL_CTX* ctx, byte enable) +{ + if (ctx != NULL) { + ctx->disableECH = !enable; + if (ctx->disableECH) { + TLSX_Remove(&ctx->extensions, TLSX_ECH, ctx->heap); + FreeEchConfigs(ctx->echConfigs, ctx->heap); + ctx->echConfigs = NULL; + } + } +} + /* set the ech config from base64 for our client ssl object, base64 is the * format ech configs are sent using dns records */ int wolfSSL_SetEchConfigsBase64(WOLFSSL* ssl, char* echConfigs64, @@ -942,6 +954,18 @@ int wolfSSL_GetEchConfigs(WOLFSSL* ssl, byte* output, word32* outputLen) return GetEchConfigsEx(ssl->echConfigs, output, outputLen); } +void wolfSSL_SetEchEnable(WOLFSSL* ssl, byte enable) +{ + if (ssl != NULL) { + ssl->options.disableECH = !enable; + if (ssl->options.disableECH) { + TLSX_Remove(&ssl->extensions, TLSX_ECH, ssl->heap); + FreeEchConfigs(ssl->echConfigs, ssl->heap); + ssl->echConfigs = NULL; + } + } +} + /* get the raw ech configs from our linked list of ech config structs */ int GetEchConfigsEx(WOLFSSL_EchConfig* configs, byte* output, word32* outputLen) { @@ -2881,8 +2905,9 @@ static int wolfSSL_read_internal(WOLFSSL* ssl, void* data, int sz, int peek) /* make sure bidirectional TLS shutdown completes */ if (ssl->error == WOLFSSL_ERROR_SYSCALL || ssl->options.shutdownDone) { /* ask the underlying transport the connection is closed */ - if (ssl->CBIORecv(ssl, (char*)data, 0, ssl->IOCB_ReadCtx) == - WOLFSSL_CBIO_ERR_CONN_CLOSE) { + if (ssl->CBIORecv(ssl, (char*)data, 0, ssl->IOCB_ReadCtx) + == WC_NO_ERR_TRACE(WOLFSSL_CBIO_ERR_CONN_CLOSE)) + { ssl->options.isClosed = 1; ssl->error = WOLFSSL_ERROR_ZERO_RETURN; } @@ -3400,7 +3425,7 @@ int wolfSSL_UseALPN(WOLFSSL* ssl, char *protocol_name_list, char *list, *ptr, **token; word16 len; int idx = 0; - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_ENTER("wolfSSL_UseALPN"); @@ -5102,6 +5127,42 @@ Signer* GetCA(void* vp, byte* hash) return ret; } +#if defined(HAVE_OCSP) +Signer* GetCAByKeyHash(void* vp, const byte* keyHash) +{ + WOLFSSL_CERT_MANAGER* cm = (WOLFSSL_CERT_MANAGER*)vp; + Signer* ret = NULL; + Signer* signers; + int row; + + if (cm == NULL || keyHash == NULL) + return NULL; + + /* try lookup using keyHash as subjKeyID first */ + ret = GetCA(vp, (byte*)keyHash); + if (ret != NULL && XMEMCMP(ret->subjectKeyHash, keyHash, KEYID_SIZE) == 0) { + return ret; + } + + /* if we can't find the cert, we have to scan the full table */ + if (wc_LockMutex(&cm->caLock) != 0) + return NULL; + + /* Unfortunately we need to look through the entire table */ + for (row = 0; row < CA_TABLE_SIZE && ret == NULL; row++) { + for (signers = cm->caTable[row]; signers != NULL; + signers = signers->next) { + if (XMEMCMP(signers->subjectKeyHash, keyHash, KEYID_SIZE) == 0) { + ret = signers; + break; + } + } + } + + wc_UnLockMutex(&cm->caLock); + return ret; +} +#endif #ifdef WOLFSSL_AKID_NAME Signer* GetCAByAKID(void* vp, const byte* issuer, word32 issuerSz, const byte* serial, word32 serialSz) @@ -6209,7 +6270,7 @@ static int check_cert_key(DerBuffer* cert, DerBuffer* key, DerBuffer* altKey, #endif word32 size; byte* buff; - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_ENTER("check_cert_key"); @@ -8480,10 +8541,6 @@ static int wolfSSL_parse_cipher_list(WOLFSSL_CTX* ctx, WOLFSSL* ssl, } /* list contains ciphers either only for TLS 1.3 or <= TLS 1.2 */ - if (suites->suiteSz == 0) { - WOLFSSL_MSG("Warning suites->suiteSz = 0 set to WOLFSSL_MAX_SUITE_SZ"); - suites->suiteSz = WOLFSSL_MAX_SUITE_SZ; - } #ifdef WOLFSSL_SMALL_STACK if (suites->suiteSz > 0) { suitesCpy = (byte*)XMALLOC(suites->suiteSz, NULL, @@ -8510,6 +8567,12 @@ static int wolfSSL_parse_cipher_list(WOLFSSL_CTX* ctx, WOLFSSL* ssl, return WOLFSSL_FAILURE; } + /* The idea in this section is that OpenSSL has two API to set ciphersuites. + * - SSL_CTX_set_cipher_list for setting TLS <= 1.2 suites + * - SSL_CTX_set_ciphersuites for setting TLS 1.3 suites + * Since we direct both API here we attempt to provide API compatibility. If + * we only get suites from <= 1.2 or == 1.3 then we will only update those + * suites and keep the suites from the other group. */ for (i = 0; i < suitesCpySz && suites->suiteSz <= (WOLFSSL_MAX_SUITE_SZ - SUITE_LEN); i += 2) { /* Check for duplicates */ @@ -10466,7 +10529,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl) static int wolfSSL_ex_wrapper(WOLFSSL* ssl, HandShakeCallBack hsCb, TimeoutCallBack toCb, WOLFSSL_TIMEVAL timeout) { - int ret = WOLFSSL_FATAL_ERROR; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR); int oldTimerOn = 0; /* was timer already on */ WOLFSSL_TIMEVAL startTime; WOLFSSL_TIMEVAL endTime; @@ -12190,8 +12253,9 @@ int wolfSSL_get_peer_tmp_key(const WOLFSSL* ssl, WOLFSSL_EVP_PKEY** pkey) int sz; PRIVATE_KEY_UNLOCK(); - if (wc_ecc_export_x963(ssl->peerEccKey, NULL, &derSz) != - LENGTH_ONLY_E) { + if (wc_ecc_export_x963(ssl->peerEccKey, NULL, &derSz) + != WC_NO_ERR_TRACE(LENGTH_ONLY_E)) + { WOLFSSL_MSG("get ecc der size failed"); PRIVATE_KEY_LOCK(); return WOLFSSL_FAILURE; @@ -14375,9 +14439,6 @@ const char* wolfSSL_get_curve_name(WOLFSSL* ssl) return "P384_KYBER_LEVEL3"; case WOLFSSL_P521_KYBER_LEVEL5: return "P521_KYBER_LEVEL5"; -#elif defined(HAVE_PQM4) - case WOLFSSL_KYBER_LEVEL1: - return "KYBER_LEVEL1"; #elif defined(WOLFSSL_WC_KYBER) #ifdef WOLFSSL_KYBER512 case WOLFSSL_KYBER_LEVEL1: @@ -15481,7 +15542,7 @@ int wolfSSL_ERR_GET_REASON(unsigned long err) /* Nginx looks for this error to know to stop parsing certificates. * Same for HAProxy. */ if (err == ((ERR_LIB_PEM << 24) | PEM_R_NO_START_LINE) || - ((err & 0xFFFFFFL) == -ASN_NO_PEM_HEADER) || + ((err & 0xFFFFFFL) == -WC_NO_ERR_TRACE(ASN_NO_PEM_HEADER)) || ((err & 0xFFFL) == PEM_R_NO_START_LINE )) return PEM_R_NO_START_LINE; if (err == ((ERR_LIB_SSL << 24) | -SSL_R_HTTP_REQUEST)) diff --git a/src/ssl_asn1.c b/src/ssl_asn1.c index 4578b0fcf..22b36b577 100644 --- a/src/ssl_asn1.c +++ b/src/ssl_asn1.c @@ -3986,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"); @@ -3994,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; @@ -4012,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"); @@ -4021,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. */ @@ -4042,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. diff --git a/src/ssl_bn.c b/src/ssl_bn.c index d4ecee4f2..acd0e05ea 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_misc.c b/src/ssl_misc.c index 38fa51146..9a5f4b042 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/tls.c b/src/tls.c index fd69a1d57..08ae784a0 100644 --- a/src/tls.c +++ b/src/tls.c @@ -52,7 +52,7 @@ #include #ifdef WOLFSSL_WC_KYBER #include -#elif defined(HAVE_LIBOQS) || defined(HAVE_PQM4) +#elif defined(HAVE_LIBOQS) #include #endif #endif @@ -1830,7 +1830,7 @@ static int TLSX_ALPN_ParseAndSet(WOLFSSL *ssl, const byte *input, word16 length, byte isRequest) { word16 size = 0, offset = 0, wlen; - int r = BUFFER_ERROR; + int r = WC_NO_ERR_TRACE(BUFFER_ERROR); const byte *s; if (OPAQUE16_LEN > length) @@ -9458,9 +9458,6 @@ static int TLSX_KeyShare_IsSupported(int namedGroup) } break; } - #elif defined(HAVE_PQM4) - case WOLFSSL_KYBER_LEVEL1: - break; #endif #endif default: @@ -9529,8 +9526,6 @@ static const word16 preferredGroup[] = { WOLFSSL_P256_KYBER_LEVEL1, WOLFSSL_P384_KYBER_LEVEL3, WOLFSSL_P521_KYBER_LEVEL5, -#elif defined(HAVE_PQM4) - WOLFSSL_KYBER_LEVEL1, #endif WOLFSSL_NAMED_GROUP_INVALID }; @@ -12083,6 +12078,11 @@ static int TLSX_ECH_Parse(WOLFSSL* ssl, const byte* readBuf, word16 size, if (size == 0) return BAD_FUNC_ARG; + if (ssl->options.disableECH) { + WOLFSSL_MSG("TLSX_ECH_Parse: ECH disabled. Ignoring."); + return 0; + } + if (msgType == encrypted_extensions) { ret = wolfSSL_SetEchConfigs(ssl, readBuf, size); @@ -13166,8 +13166,6 @@ static int TLSX_PopulateSupportedGroups(WOLFSSL* ssl, TLSX** extensions) if (ret == WOLFSSL_SUCCESS) ret = TLSX_UseSupportedCurve(extensions, WOLFSSL_P521_KYBER_LEVEL5, ssl->heap); -#elif defined(HAVE_PQM4) - ret = TLSX_UseSupportedCurve(extensions, WOLFSSL_KYBER_LEVEL1, ssl->heap); #endif /* HAVE_LIBOQS */ #endif /* WOLFSSL_HAVE_KYBER */ @@ -13588,18 +13586,21 @@ int TLSX_PopulateExtensions(WOLFSSL* ssl, byte isServer) #endif #if defined(HAVE_ECH) /* GREASE ECH */ - if (ssl->echConfigs == NULL) { - ret = GREASE_ECH_USE(&(ssl->extensions), ssl->heap, ssl->rng); - } - else if (ssl->echConfigs != NULL) { - ret = ECH_USE(ssl->echConfigs, &(ssl->extensions), ssl->heap, - ssl->rng); + if (!ssl->options.disableECH) { + if (ssl->echConfigs == NULL) { + ret = GREASE_ECH_USE(&(ssl->extensions), ssl->heap, + ssl->rng); + } + else if (ssl->echConfigs != NULL) { + ret = ECH_USE(ssl->echConfigs, &(ssl->extensions), + ssl->heap, ssl->rng); + } } #endif } #if defined(HAVE_ECH) else if (IsAtLeastTLSv1_3(ssl->version)) { - if (ssl->ctx->echConfigs != NULL) { + if (ssl->ctx->echConfigs != NULL && !ssl->options.disableECH) { ret = SERVER_ECH_USE(&(ssl->extensions), ssl->heap, ssl->ctx->echConfigs); @@ -13789,7 +13790,8 @@ int TLSX_GetRequestSize(WOLFSSL* ssl, byte msgType, word32* pLength) } #endif #if defined(HAVE_ECH) - if (ssl->options.useEch == 1 && msgType == client_hello) { + if (ssl->options.useEch == 1 && !ssl->options.disableECH + && msgType == client_hello) { ret = TLSX_GetSizeWithEch(ssl, semaphore, msgType, &length); if (ret != 0) return ret; @@ -14034,7 +14036,8 @@ int TLSX_WriteRequest(WOLFSSL* ssl, byte* output, byte msgType, word32* pOffset) #endif #endif #if defined(WOLFSSL_TLS13) && defined(HAVE_ECH) - if (ssl->options.useEch == 1 && msgType == client_hello) { + if (ssl->options.useEch == 1 && !ssl->options.disableECH + && msgType == client_hello) { ret = TLSX_WriteWithEch(ssl, output, semaphore, msgType, &offset); if (ret != 0) diff --git a/src/tls13.c b/src/tls13.c index 93e566a88..4b7f053cc 100644 --- a/src/tls13.c +++ b/src/tls13.c @@ -4415,7 +4415,7 @@ int SendTls13ClientHello(WOLFSSL* ssl) /* find length of outer and inner */ #if defined(HAVE_ECH) - if (ssl->options.useEch == 1) { + if (ssl->options.useEch == 1 && !ssl->options.disableECH) { TLSX* echX = TLSX_Find(ssl->extensions, TLSX_ECH); if (echX == NULL) return -1; @@ -4566,7 +4566,7 @@ int SendTls13ClientHello(WOLFSSL* ssl) #if defined(HAVE_ECH) /* write inner then outer */ - if (ssl->options.useEch == 1) { + if (ssl->options.useEch == 1 && !ssl->options.disableECH) { /* set the type to inner */ args->ech->type = ECH_TYPE_INNER; @@ -4626,7 +4626,7 @@ int SendTls13ClientHello(WOLFSSL* ssl) #if defined(HAVE_ECH) /* encrypt and pack the ech innerClientHello */ - if (ssl->options.useEch == 1) { + if (ssl->options.useEch == 1 && !ssl->options.disableECH) { ret = TLSX_FinalizeEch(args->ech, args->output + RECORD_HEADER_SZ + HANDSHAKE_HEADER_SZ, (word32)(args->sendSz - (RECORD_HEADER_SZ + HANDSHAKE_HEADER_SZ))); @@ -4656,11 +4656,9 @@ int SendTls13ClientHello(WOLFSSL* ssl) { #if defined(HAVE_ECH) /* compute the inner hash */ - if (ssl->options.useEch == 1) { + if (ssl->options.useEch == 1 && !ssl->options.disableECH) ret = EchHashHelloInner(ssl, args->ech); - } #endif - /* compute the outer hash */ if (ret == 0) ret = HashOutput(ssl, args->output, (int)args->idx, 0); @@ -5475,7 +5473,7 @@ int DoTls13ServerHello(WOLFSSL* ssl, const byte* input, word32* inOutIdx, #if defined(HAVE_ECH) /* check for acceptConfirmation and HashInput with 8 0 bytes */ - if (ssl->options.useEch == 1) { + if (ssl->options.useEch == 1 && !ssl->options.disableECH) { ret = EchCheckAcceptance(ssl, input, args->serverRandomOffset, (int)helloSz); if (ret != 0) return ret; @@ -6935,7 +6933,7 @@ int DoTls13ClientHello(WOLFSSL* ssl, const byte* input, word32* inOutIdx, goto exit_dch; #if defined(HAVE_ECH) - if (ssl->ctx->echConfigs != NULL) { + if (ssl->ctx->echConfigs != NULL && !ssl->options.disableECH) { /* save the start of the buffer so we can use it when parsing ech */ echX = TLSX_Find(ssl->extensions, TLSX_ECH); @@ -7407,7 +7405,7 @@ int SendTls13ServerHello(WOLFSSL* ssl, byte extMsgType) #endif /* WOLFSSL_DTLS13 */ { #if defined(HAVE_ECH) - if (ssl->ctx->echConfigs != NULL) { + if (ssl->ctx->echConfigs != NULL && !ssl->options.disableECH) { echX = TLSX_Find(ssl->extensions, TLSX_ECH); if (echX == NULL) diff --git a/src/x509.c b/src/x509.c index 59f52665c..7240c7fb1 100644 --- a/src/x509.c +++ b/src/x509.c @@ -367,38 +367,6 @@ int wolfSSL_sk_X509_EXTENSION_push(WOLFSSL_STACK* sk,WOLFSSL_X509_EXTENSION* ext return wolfSSL_sk_push(sk, ext); } -/* 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); -} - static WOLFSSL_STACK* generateExtStack(const WOLFSSL_X509 *x) { int numOfExt, i; @@ -872,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 @@ -892,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; @@ -3654,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 || @@ -5042,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) @@ -7073,7 +7090,7 @@ int wolfSSL_X509_LOOKUP_load_file(WOLFSSL_X509_LOOKUP* lookup, { #if !defined(NO_FILESYSTEM) && \ (defined(WOLFSSL_PEM_TO_DER) || defined(WOLFSSL_DER_TO_PEM)) - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); XFILE fp; long sz; byte* pem = NULL; diff --git a/sslSniffer/sslSnifferTest/README_WIN.md b/sslSniffer/sslSnifferTest/README_WIN.md index 4215ff7e7..a58bf96e2 100644 --- a/sslSniffer/sslSnifferTest/README_WIN.md +++ b/sslSniffer/sslSnifferTest/README_WIN.md @@ -27,4 +27,4 @@ -For details on usage, see [sniffer README.md](../README.md#command-line-options) for more details. +For details on usage, see [sniffer README.md](../README.md#command-line-options) for more details. diff --git a/tests/api.c b/tests/api.c index c24fb339b..28a767674 100644 --- a/tests/api.c +++ b/tests/api.c @@ -2181,7 +2181,7 @@ static int test_wolfSSL_CTX_load_verify_locations(void) /* load ca cert */ #ifdef NO_RSA ExpectIntEQ(wolfSSL_CTX_load_verify_locations(ctx, caCertFile, NULL), - WS_RETURN_CODE(ASN_UNKNOWN_OID_E,WOLFSSL_FAILURE)); + WS_RETURN_CODE(WC_NO_ERR_TRACE(ASN_UNKNOWN_OID_E),WC_NO_ERR_TRACE(WOLFSSL_FAILURE))); #else /* Skip the following test without RSA certs. */ ExpectIntEQ(wolfSSL_CTX_load_verify_locations(ctx, caCertFile, NULL), WOLFSSL_SUCCESS); @@ -2741,7 +2741,7 @@ static int test_wolfSSL_CertManagerLoadCABuffer(void) #if defined(NO_WOLFSSL_CLIENT) && defined(NO_WOLFSSL_SERVER) ExpectIntEQ(ret, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); #elif defined(NO_RSA) - ExpectIntEQ(ret, ASN_UNKNOWN_OID_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(ASN_UNKNOWN_OID_E)); #else ExpectIntEQ(ret, WOLFSSL_SUCCESS); #endif @@ -2750,7 +2750,7 @@ static int test_wolfSSL_CertManagerLoadCABuffer(void) #if defined(NO_WOLFSSL_CLIENT) && defined(NO_WOLFSSL_SERVER) ExpectIntEQ(ret, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); #elif defined(NO_RSA) - ExpectIntEQ(ret, ASN_UNKNOWN_OID_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(ASN_UNKNOWN_OID_E)); #elif !(WOLFSSL_LOAD_VERIFY_DEFAULT_FLAGS & WOLFSSL_LOAD_FLAG_DATE_ERR_OKAY) && \ !defined(NO_ASN_TIME) ExpectIntEQ(ret, WC_NO_ERR_TRACE(ASN_AFTER_DATE_E)); @@ -2774,7 +2774,7 @@ static int test_wolfSSL_CertManagerLoadCABuffer_ex(void) #if defined(NO_WOLFSSL_CLIENT) && defined(NO_WOLFSSL_SERVER) ExpectIntEQ(ret, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); #elif defined(NO_RSA) - ExpectIntEQ(ret, ASN_UNKNOWN_OID_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(ASN_UNKNOWN_OID_E)); #else ExpectIntEQ(ret, WOLFSSL_SUCCESS); #endif @@ -2784,7 +2784,7 @@ static int test_wolfSSL_CertManagerLoadCABuffer_ex(void) #if defined(NO_WOLFSSL_CLIENT) && defined(NO_WOLFSSL_SERVER) ExpectIntEQ(ret, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); #elif defined(NO_RSA) - ExpectIntEQ(ret, ASN_UNKNOWN_OID_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(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) @@ -13562,7 +13562,7 @@ static int test_override_x509(int preverify, WOLFSSL_X509_STORE_CTX* store) { EXPECT_DECLS; #ifndef OPENSSL_COMPATIBLE_DEFAULTS - ExpectIntEQ(store->error, ASN_VERSION_E); + ExpectIntEQ(store->error, WC_NO_ERR_TRACE(ASN_VERSION_E)); #else ExpectIntEQ(store->error, 0); #endif @@ -16569,7 +16569,7 @@ static int test_wc_Md5HmacSetKey(void) #if defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION >= 5) ExpectIntEQ(ret, WC_NO_ERR_TRACE(BAD_FUNC_ARG)); #elif defined(HAVE_FIPS) - ExpectIntEQ(ret, HMAC_MIN_KEYLEN_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(HMAC_MIN_KEYLEN_E)); #else ExpectIntEQ(ret, 0); #endif @@ -16620,7 +16620,7 @@ static int test_wc_ShaHmacSetKey(void) ret = wc_HmacSetKey(&hmac, WC_SHA, (byte*)keys[0], 0); #ifdef HAVE_FIPS - ExpectIntEQ(ret, HMAC_MIN_KEYLEN_E); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(HMAC_MIN_KEYLEN_E)); #else ExpectIntEQ(ret, 0); #endif @@ -16668,7 +16668,7 @@ static int test_wc_Sha224HmacSetKey(void) (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); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(HMAC_MIN_KEYLEN_E)); #else ExpectIntEQ(ret, 0); #endif @@ -16716,7 +16716,7 @@ static int test_wc_Sha256HmacSetKey(void) (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); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(HMAC_MIN_KEYLEN_E)); #else ExpectIntEQ(ret, 0); #endif @@ -16765,7 +16765,7 @@ static int test_wc_Sha384HmacSetKey(void) (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); + ExpectIntEQ(ret, WC_NO_ERR_TRACE(HMAC_MIN_KEYLEN_E)); #else ExpectIntEQ(ret, 0); #endif @@ -18058,7 +18058,7 @@ static int test_wc_Sm4Gcm(void) GCM_NONCE_MIN_SZ, tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), 0); ExpectIntEQ(wc_Sm4GcmDecrypt(&sm4, in, out, SM4_BLOCK_SIZE * 2, nonce, GCM_NONCE_MAX_SZ, tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), - SM4_GCM_AUTH_E); + WC_NO_ERR_TRACE(SM4_GCM_AUTH_E)); /* Check valid values of tag size - wc_Sm4GcmEncrypt/wc_Sm4GcmDecrypt. */ for (i = WOLFSSL_MIN_AUTH_TAG_SZ; i < SM4_BLOCK_SIZE; i++) { @@ -18234,7 +18234,7 @@ static int test_wc_Sm4Ccm(void) } ExpectIntEQ(wc_Sm4CcmDecrypt(&sm4, in, out, SM4_BLOCK_SIZE, nonce, CCM_NONCE_MIN_SZ, tag, SM4_BLOCK_SIZE, aad, sizeof(aad)), - SM4_CCM_AUTH_E); + WC_NO_ERR_TRACE(SM4_CCM_AUTH_E)); /* Check invalid values of tag size - wc_Sm4CcmEncrypt/wc_Sm4CcmDecrypt. */ for (i = 0; i < 4; i++) { @@ -18849,15 +18849,15 @@ static int test_wc_Rc2SetKey(void) ExpectIntEQ(wc_Rc2SetKey(&rc2, NULL, (word32) sizeof(key40) / sizeof(byte), iv, 40), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); /* key size == 0 */ - ExpectIntEQ(wc_Rc2SetKey(&rc2, key40, 0, iv, 40), WC_KEY_SIZE_E); + ExpectIntEQ(wc_Rc2SetKey(&rc2, key40, 0, iv, 40), WC_NO_ERR_TRACE(WC_KEY_SIZE_E)); /* key size > 128 */ - ExpectIntEQ(wc_Rc2SetKey(&rc2, key40, 129, iv, 40), WC_KEY_SIZE_E); + ExpectIntEQ(wc_Rc2SetKey(&rc2, key40, 129, iv, 40), WC_NO_ERR_TRACE(WC_KEY_SIZE_E)); /* effective bits == 0 */ ExpectIntEQ(wc_Rc2SetKey(&rc2, key40, (word32)sizeof(key40) / sizeof(byte), - iv, 0), WC_KEY_SIZE_E); + iv, 0), WC_NO_ERR_TRACE(WC_KEY_SIZE_E)); /* effective bits > 1024 */ ExpectIntEQ(wc_Rc2SetKey(&rc2, key40, (word32)sizeof(key40) / sizeof(byte), - iv, 1025), WC_KEY_SIZE_E); + iv, 1025), WC_NO_ERR_TRACE(WC_KEY_SIZE_E)); #endif return EXPECT_RESULT(); } /* END test_wc_Rc2SetKey */ @@ -19457,7 +19457,7 @@ static int test_wc_AesGcmEncryptDecrypt(void) #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)), - AES_GCM_AUTH_E); + WC_NO_ERR_TRACE(AES_GCM_AUTH_E)); #else ExpectIntEQ(wc_AesGcmDecrypt(&aes, dec, enc, sizeof(enc)/sizeof(byte), iv, sizeof(iv)/sizeof(byte), resultT, sizeof(resultT) + 1, a, sizeof(a)), @@ -32104,7 +32104,7 @@ static int test_wc_dilithium_sign(void) 0); ExpectIntEQ(wc_dilithium_sign_msg(msg, 32, sig, &sigLen, key, &rng), 0); #ifdef WOLFSSL_DILITHIUM_CHECK_KEY - ExpectIntEQ(wc_dilithium_check_key(importKey), PUBLIC_KEY_E); + ExpectIntEQ(wc_dilithium_check_key(importKey), WC_NO_ERR_TRACE(PUBLIC_KEY_E)); #endif wc_dilithium_free(importKey); @@ -32355,6 +32355,7 @@ static int test_wc_dilithium_sign_vfy(void) { EXPECT_DECLS; #if defined(HAVE_DILITHIUM) && defined(WOLFSSL_WC_DILITHIUM) && \ + !defined(WOLFSSL_DILITHIUM_FIPS204_DRAFT) && \ !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) && \ !defined(WOLFSSL_DILITHIUM_NO_SIGN) && !defined(WOLFSSL_DILITHIUM_NO_VERIFY) dilithium_key* key; @@ -32556,14 +32557,14 @@ static int test_wc_dilithium_check_key(void) 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); + ExpectIntEQ(wc_dilithium_check_key(checkKey), WC_NO_ERR_TRACE(PUBLIC_KEY_E)); pubCheckKey[0] ^= 0x80; /* Modify encoded t1. */ pubCheckKey[48] ^= 0x80; ExpectIntEQ(wc_dilithium_import_key(privCheckKey, privCheckKeyLen,pubCheckKey, pubCheckKeyLen, checkKey), 0); - ExpectIntEQ(wc_dilithium_check_key(checkKey), PUBLIC_KEY_E); + ExpectIntEQ(wc_dilithium_check_key(checkKey), WC_NO_ERR_TRACE(PUBLIC_KEY_E)); pubCheckKey[48] ^= 0x80; } @@ -33443,7 +33444,7 @@ static int test_wc_dilithium_der(void) ExpectIntEQ(wc_Dilithium_PublicKeyToDer(NULL, der , DILITHIUM_MAX_DER_SIZE, 0), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key , der , 0 , - 0), BUFFER_E ); + 0), WC_NO_ERR_TRACE(BUFFER_E)); /* Get length only. */ ExpectIntEQ(wc_Dilithium_PublicKeyToDer(key , NULL, 0 , 0), pubLen); @@ -33481,7 +33482,7 @@ static int test_wc_dilithium_der(void) ExpectIntEQ(wc_Dilithium_KeyToDer(NULL, der , DILITHIUM_MAX_DER_SIZE), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); ExpectIntEQ(wc_Dilithium_KeyToDer(key , der , 0 ), - BUFFER_E ); + WC_NO_ERR_TRACE(BUFFER_E)); /* Get length only. */ ExpectIntEQ(wc_Dilithium_KeyToDer(key , NULL, DILITHIUM_MAX_DER_SIZE), keyDerLen); @@ -33568,6 +33569,7 @@ static int test_wc_dilithium_make_key_from_seed(void) #if defined(HAVE_DILITHIUM) && defined(WOLFSSL_WC_DILITHIUM) && \ !defined(WOLFSSL_DILITHIUM_NO_MAKE_KEY) dilithium_key* key; +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT #ifndef WOLFSSL_NO_ML_DSA_44 static const byte seed_44[] = { 0x93, 0xEF, 0x2E, 0x6E, 0xF1, 0xFB, 0x08, 0x99, @@ -35772,6 +35774,2212 @@ static int test_wc_dilithium_make_key_from_seed(void) 0xDA, 0xC1, 0x7F, 0x93, 0x6F, 0x54, 0xC4, 0xC7 }; #endif /* WOLFSSL_NO_ML_DSA_87 */ +#else +#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 + }; + 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 + }; + 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 + }; +#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 + }; + 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 + }; + 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 + }; +#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 + }; + 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 + }; + 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 + }; +#endif /* WOLFSSL_NO_ML_DSA_87 */ +#endif key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); ExpectNotNull(key); @@ -35810,7 +38018,8 @@ static int test_wc_dilithium_sig_kats(void) { EXPECT_DECLS; #if defined(HAVE_DILITHIUM) && defined(WOLFSSL_WC_DILITHIUM) && \ - !defined(WOLFSSL_DILITHIUM_NO_SIGN) + !defined(WOLFSSL_DILITHIUM_NO_SIGN) && \ + !defined(WOLFSSL_DILITHIUM_FIPS204_DRAFT) dilithium_key* key; #ifndef WOLFSSL_NO_ML_DSA_44 static const byte sk_44[] = { @@ -40627,6 +42836,7 @@ static int test_wc_dilithium_verify_kats(void) !defined(WOLFSSL_DILITHIUM_NO_VERIFY) dilithium_key* key; int res; +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT #ifndef WOLFSSL_NO_ML_DSA_44 static const byte pk_44[] = { 0x09, 0xB4, 0x88, 0x7D, 0x97, 0xBC, 0xF6, 0x37, @@ -42726,6 +44936,2107 @@ static int test_wc_dilithium_verify_kats(void) 0x00, 0x00, 0x00, 0x02, 0x0F, 0x16, 0x1B, 0x1F, 0x29, 0x2E, 0x36 }; +#endif +#else +#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 + }; + 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 + }; + 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, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x18, 0x32, 0x3B + }; +#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 + }; + 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 + }; + 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, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x08, 0x0E, 0x12, 0x19, 0x20 + }; +#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 + }; + 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 + }; + 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, + 0x00, 0x00, 0x00, 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 + }; +#endif #endif key = (dilithium_key*)XMALLOC(sizeof(*key), NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -45980,7 +50291,7 @@ static int test_wc_PKCS7_BER(void) #ifndef NO_RSA #ifdef WOLFSSL_SP_MATH ExpectIntEQ(wc_PKCS7_DecodeEnvelopedData(pkcs7, berContent, - sizeof(berContent), decoded, sizeof(decoded)), WC_KEY_SIZE_E); + sizeof(berContent), decoded, sizeof(decoded)), WC_NO_ERR_TRACE(WC_KEY_SIZE_E)); #else ExpectIntGT(wc_PKCS7_DecodeEnvelopedData(pkcs7, berContent, sizeof(berContent), decoded, sizeof(decoded)), 0); @@ -48391,6 +52702,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 @@ -52851,10 +57165,9 @@ static int test_wolfSSL_EVP_MD_size(void) /* error case */ wolfSSL_EVP_MD_CTX_init(&mdCtx); - ExpectIntEQ(wolfSSL_EVP_DigestInit(&mdCtx, ""), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wolfSSL_EVP_MD_size(wolfSSL_EVP_MD_CTX_md(&mdCtx)), - WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wolfSSL_EVP_MD_CTX_block_size(&mdCtx), WC_NO_ERR_TRACE(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 */ @@ -55753,7 +60066,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); @@ -55765,8 +60077,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)); @@ -62750,6 +67064,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); @@ -62758,7 +67076,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. @@ -65186,6 +69503,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); @@ -67173,9 +71497,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), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wolfSSL_EVP_PKEY_keygen(ctx, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); - ExpectIntEQ(wolfSSL_EVP_PKEY_keygen(NULL, NULL), WC_NO_ERR_TRACE(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); @@ -70225,6 +74549,7 @@ static int test_wc_GetPkcs8TraditionalOffset(void) int derSz = 0; word32 inOutIdx; const char* path = "./certs/server-keyPkcs8.der"; + const char* pathAttributes = "./certs/ca-key-pkcs8-attribute.der"; XFILE file = XBADFILE; byte der[2048]; @@ -70232,6 +74557,7 @@ static int test_wc_GetPkcs8TraditionalOffset(void) ExpectIntGT(derSz = (int)XFREAD(der, 1, sizeof(der), file), 0); if (file != XBADFILE) XFCLOSE(file); + file = XBADFILE; /* reset file to avoid warning of use after close */ /* valid case */ inOutIdx = 0; @@ -70253,6 +74579,16 @@ static int test_wc_GetPkcs8TraditionalOffset(void) inOutIdx = 0; ExpectIntEQ(length = wc_GetPkcs8TraditionalOffset(der, &inOutIdx, (word32)derSz), WC_NO_ERR_TRACE(ASN_PARSE_E)); + + /* test parsing with attributes */ + ExpectTrue((file = XFOPEN(pathAttributes, "rb")) != XBADFILE); + ExpectIntGT(derSz = (int)XFREAD(der, 1, sizeof(der), file), 0); + if (file != XBADFILE) + XFCLOSE(file); + + inOutIdx = 0; + ExpectIntGT(length = wc_GetPkcs8TraditionalOffset(der, &inOutIdx, + (word32)derSz), 0); #endif /* NO_ASN */ return EXPECT_RESULT(); } @@ -76483,6 +80819,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); @@ -79860,6 +84255,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); @@ -81510,7 +85917,7 @@ static void test_AEAD_limit_client(WOLFSSL* ssl) /* Connection should fail with a DECRYPT_ERROR */ ret = wolfSSL_read(ssl, msgBuf, sizeof(msgBuf)); AssertIntEQ(ret, WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); - AssertIntEQ(wolfSSL_get_error(ssl, ret), DECRYPT_ERROR); + AssertIntEQ(wolfSSL_get_error(ssl, ret), WC_NO_ERR_TRACE(DECRYPT_ERROR)); test_AEAD_done = 1; } @@ -83348,7 +87755,7 @@ static int test_wolfSSL_EVP_sm3(void) ExpectTrue(mdCtx != NULL); /* Invalid Parameters */ - ExpectIntEQ(EVP_DigestInit(NULL, md), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(EVP_DigestInit(NULL, md), WC_NO_ERR_TRACE(WOLFSSL_FAILURE)); /* Valid Parameters */ ExpectIntEQ(EVP_DigestInit(mdCtx, md), WOLFSSL_SUCCESS); @@ -83755,6 +88162,77 @@ static int test_CryptoCb_Func(int thisDevId, wc_CryptoInfo* info, void* ctx) info->pk.rsa.type, ret, *info->pk.rsa.outLen); #endif } + #ifdef WOLF_CRYPTO_CB_RSA_PAD + else if (info->pk.type == WC_PK_TYPE_RSA_PKCS || + info->pk.type == WC_PK_TYPE_RSA_PSS || + info->pk.type == WC_PK_TYPE_RSA_OAEP) { + RsaKey key; + + if (info->pk.rsa.type == RSA_PUBLIC_ENCRYPT || + info->pk.rsa.type == RSA_PUBLIC_DECRYPT) { + /* Have all public key ops fall back to SW */ + return CRYPTOCB_UNAVAILABLE; + } + + if (info->pk.rsa.padding == NULL) { + return BAD_FUNC_ARG; + } + + /* Initialize key */ + ret = load_pem_key_file_as_der(privKeyFile, &pDer, + &keyFormat); + if (ret != 0) { + return ret; + } + + ret = wc_InitRsaKey(&key, HEAP_HINT); + if (ret == 0) { + word32 keyIdx = 0; + /* load RSA private key and perform private transform */ + ret = wc_RsaPrivateKeyDecode(pDer->buffer, &keyIdx, + &key, pDer->length); + } + /* Perform RSA operation */ + if ((ret == 0) && (info->pk.type == WC_PK_TYPE_RSA_PKCS)) { + #if !defined(WOLFSSL_RSA_PUBLIC_ONLY) && !defined(WOLFSSL_RSA_VERIFY_ONLY) + ret = wc_RsaSSL_Sign(info->pk.rsa.in, info->pk.rsa.inLen, + info->pk.rsa.out, *info->pk.rsa.outLen, &key, + info->pk.rsa.rng); + #else + ret = CRYPTOCB_UNAVAILABLE; + #endif + } + if ((ret == 0) && (info->pk.type == WC_PK_TYPE_RSA_PSS)) { + #ifdef WC_RSA_PSS + ret = wc_RsaPSS_Sign_ex(info->pk.rsa.in, info->pk.rsa.inLen, + info->pk.rsa.out, *info->pk.rsa.outLen, + info->pk.rsa.padding->hash, info->pk.rsa.padding->mgf, + info->pk.rsa.padding->saltLen, &key, info->pk.rsa.rng); + #else + ret = CRYPTOCB_UNAVAILABLE; + #endif + } + if ((ret == 0) && (info->pk.type == WC_PK_TYPE_RSA_OAEP)) { + #if !defined(WC_NO_RSA_OAEP) || defined(WC_RSA_NO_PADDING) + ret = wc_RsaPrivateDecrypt_ex( + info->pk.rsa.in, info->pk.rsa.inLen, + info->pk.rsa.out, *info->pk.rsa.outLen, + &key, WC_RSA_OAEP_PAD, info->pk.rsa.padding->hash, + info->pk.rsa.padding->mgf, info->pk.rsa.padding->label, + info->pk.rsa.padding->labelSz); + #else + ret = CRYPTOCB_UNAVAILABLE; + #endif + } + + if (ret > 0) { + *info->pk.rsa.outLen = ret; + } + + wc_FreeRsaKey(&key); + wc_FreeDer(&pDer); pDer = NULL; + } + #endif /* ifdef WOLF_CRYPTO_CB_RSA_PAD */ #endif /* !NO_RSA */ #ifdef HAVE_ECC if (info->pk.type == WC_PK_TYPE_EC_KEYGEN) { @@ -86009,7 +90487,7 @@ static int test_harden_no_secure_renegotiation(void) test_wolfSSL_client_server_nofail(&client_cbs, &server_cbs); ExpectIntEQ(client_cbs.return_code, TEST_FAIL); - ExpectIntEQ(client_cbs.last_err, SECURE_RENEGOTIATION_E); + ExpectIntEQ(client_cbs.last_err, WC_NO_ERR_TRACE(SECURE_RENEGOTIATION_E)); ExpectIntEQ(server_cbs.return_code, TEST_FAIL); ExpectTrue(server_cbs.last_err == WC_NO_ERR_TRACE(SOCKET_ERROR_E) || server_cbs.last_err == WC_NO_ERR_TRACE(FATAL_ERROR)); @@ -87363,7 +91841,7 @@ static int test_wolfSSL_dtls13_null_cipher(void) *ptr = 'H'; /* bad messages should be ignored in DTLS */ ExpectIntEQ(wolfSSL_read(ssl_s, buf, sizeof(buf)), -1); - ExpectIntEQ(ssl_s->error, WANT_READ); + ExpectIntEQ(ssl_s->error, WC_NO_ERR_TRACE(WANT_READ)); } wolfSSL_free(ssl_c); @@ -88040,7 +92518,7 @@ static void test_dtls_downgrade_scr_server_on_result(WOLFSSL* ssl) char msgBuf[sizeof(testMsg)]; if (wolfSSL_is_server(ssl)) { AssertIntEQ(wolfSSL_Rehandshake(ssl), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); - AssertIntEQ(wolfSSL_get_error(ssl, -1), APP_DATA_READY); + AssertIntEQ(wolfSSL_get_error(ssl, -1), WC_NO_ERR_TRACE(APP_DATA_READY)); AssertIntEQ(wolfSSL_read(ssl, msgBuf, sizeof(msgBuf)), sizeof(msgBuf)); AssertIntEQ(wolfSSL_Rehandshake(ssl), WOLFSSL_SUCCESS); AssertIntEQ(wolfSSL_write(ssl, testMsg, sizeof(testMsg)), @@ -88100,7 +92578,7 @@ static void test_dtls_downgrade_scr_on_result(WOLFSSL* ssl) char msgBuf[sizeof(testMsg)]; if (wolfSSL_is_server(ssl)) { AssertIntEQ(wolfSSL_Rehandshake(ssl), WC_NO_ERR_TRACE(WOLFSSL_FATAL_ERROR)); - AssertIntEQ(wolfSSL_get_error(ssl, -1), APP_DATA_READY); + AssertIntEQ(wolfSSL_get_error(ssl, -1), WC_NO_ERR_TRACE(APP_DATA_READY)); AssertIntEQ(wolfSSL_read(ssl, msgBuf, sizeof(msgBuf)), sizeof(msgBuf)); AssertIntEQ(wolfSSL_Rehandshake(ssl), WOLFSSL_SUCCESS); AssertIntEQ(wolfSSL_write(ssl, testMsg, sizeof(testMsg)), @@ -88883,6 +93361,20 @@ static int test_dtls_frag_ch(void) /* Expect quietly dropping fragmented first CH */ ExpectIntEQ(test_ctx.c_len, 0); +#if defined(WOLFSSL_TLS13) && defined(HAVE_ECH) + /* Disable ECH as it pushes it over our MTU */ + wolfSSL_SetEchEnable(ssl_c, 0); +#endif + + /* Limit options to make the CH a fixed length */ + /* See wolfSSL_parse_cipher_list for reason why we provide 1.3 AND 1.2 + * ciphersuite. This is only necessary when building with OPENSSL_EXTRA. */ + ExpectTrue(wolfSSL_set_cipher_list(ssl_c, "TLS13-AES256-GCM-SHA384" +#ifdef OPENSSL_EXTRA + ":DHE-RSA-AES256-GCM-SHA384" +#endif + )); + /* CH1 */ ExpectIntEQ(wolfSSL_negotiate(ssl_c), -1); ExpectIntEQ(wolfSSL_get_error(ssl_c, -1), WOLFSSL_ERROR_WANT_READ); @@ -89171,7 +93663,7 @@ static int test_tls13_early_data(void) if (params[i].isUdp) { ExpectIntEQ(wolfSSL_connect(ssl_c), -1); - ExpectIntEQ(wolfSSL_get_error(ssl_c, -1), APP_DATA_READY); + ExpectIntEQ(wolfSSL_get_error(ssl_c, -1), WC_NO_ERR_TRACE(APP_DATA_READY)); /* Read server 0.5-RTT data */ ExpectIntEQ(wolfSSL_read(ssl_c, msgBuf, sizeof(msgBuf)), sizeof(msg4)); @@ -89490,7 +93982,7 @@ static int test_write_dup(void) ExpectNotNull(ssl_c2 = wolfSSL_write_dup(ssl_c)); ExpectIntEQ(wolfSSL_write(ssl_c, hiWorld, sizeof(hiWorld)), - WRITE_DUP_WRITE_E); + WC_NO_ERR_TRACE(WRITE_DUP_WRITE_E)); ExpectIntEQ(wolfSSL_write(ssl_c2, hiWorld, sizeof(hiWorld)), sizeof(hiWorld)); @@ -89500,7 +93992,7 @@ static int test_write_dup(void) sizeof(hiWorld)); ExpectIntEQ(wolfSSL_read(ssl_c2, readData, sizeof(readData)), - WRITE_DUP_READ_E); + WC_NO_ERR_TRACE(WRITE_DUP_READ_E)); ExpectIntEQ(wolfSSL_read(ssl_c, readData, sizeof(readData)), sizeof(hiWorld)); diff --git a/tests/quic.c b/tests/quic.c index bc93c4a7d..77533c87a 100644 --- a/tests/quic.c +++ b/tests/quic.c @@ -944,7 +944,7 @@ static int QuicConversation_start(QuicConversation *conv, const byte *data, else { ret = wolfSSL_connect(conv->client->ssl); if (ret != WOLFSSL_SUCCESS) { - AssertIntEQ(wolfSSL_get_error(conv->client->ssl, 0), SSL_ERROR_WANT_READ); + AssertIntEQ(wolfSSL_get_error(conv->client->ssl, 0), WC_NO_ERR_TRACE(SSL_ERROR_WANT_READ)); } if (pwritten) *pwritten = 0; } @@ -959,9 +959,9 @@ static int QuicConversation_step(QuicConversation *conv, int may_fail) if (!conv->started) { n = wolfSSL_connect(conv->client->ssl); if (n != WOLFSSL_SUCCESS - && wolfSSL_get_error(conv->client->ssl, 0) != SSL_ERROR_WANT_READ) { + && wolfSSL_get_error(conv->client->ssl, 0) != WC_NO_ERR_TRACE(SSL_ERROR_WANT_READ)) { if (may_fail) return 0; - AssertIntEQ(SSL_ERROR_WANT_READ, wolfSSL_get_error(conv->client->ssl, 0)); + AssertIntEQ(WC_NO_ERR_TRACE(SSL_ERROR_WANT_READ), wolfSSL_get_error(conv->client->ssl, 0)); } conv->started = 1; } @@ -969,9 +969,9 @@ static int QuicConversation_step(QuicConversation *conv, int may_fail) QuicTestContext_forward(conv->server, conv->client, conv->rec_log, sizeof(conv->rec_log)); n = wolfSSL_quic_read_write(conv->client->ssl); if (n != WOLFSSL_SUCCESS - && wolfSSL_get_error(conv->client->ssl, 0) != SSL_ERROR_WANT_READ) { + && wolfSSL_get_error(conv->client->ssl, 0) != WC_NO_ERR_TRACE(SSL_ERROR_WANT_READ)) { if (may_fail) return 0; - AssertIntEQ(SSL_ERROR_WANT_READ, wolfSSL_get_error(conv->client->ssl, 0)); + AssertIntEQ(WC_NO_ERR_TRACE(SSL_ERROR_WANT_READ), wolfSSL_get_error(conv->client->ssl, 0)); } return 1; } @@ -985,9 +985,9 @@ static int QuicConversation_step(QuicConversation *conv, int may_fail) (int)(sizeof(conv->early_data) - conv->early_data_len), &written); if (n < 0) { - if (wolfSSL_get_error(conv->server->ssl, 0) != SSL_ERROR_WANT_READ) { + if (wolfSSL_get_error(conv->server->ssl, 0) != WC_NO_ERR_TRACE(SSL_ERROR_WANT_READ)) { if (may_fail) return 0; - AssertIntEQ(wolfSSL_get_error(conv->server->ssl, 0), SSL_ERROR_WANT_READ); + AssertIntEQ(wolfSSL_get_error(conv->server->ssl, 0), WC_NO_ERR_TRACE(SSL_ERROR_WANT_READ)); } } else if (n > 0) { @@ -1001,9 +1001,9 @@ static int QuicConversation_step(QuicConversation *conv, int may_fail) { n = wolfSSL_quic_read_write(conv->server->ssl); if (n != WOLFSSL_SUCCESS - && wolfSSL_get_error(conv->server->ssl, 0) != SSL_ERROR_WANT_READ) { + && wolfSSL_get_error(conv->server->ssl, 0) != WC_NO_ERR_TRACE(SSL_ERROR_WANT_READ)) { if (may_fail) return 0; - AssertIntEQ(wolfSSL_get_error(conv->server->ssl, 0), SSL_ERROR_WANT_READ); + AssertIntEQ(wolfSSL_get_error(conv->server->ssl, 0), WC_NO_ERR_TRACE(SSL_ERROR_WANT_READ)); } } return 1; @@ -1065,7 +1065,7 @@ static int test_quic_client_hello(int verbose) { /* Without any QUIC transport params, this needs to fail */ AssertTrue(wolfSSL_set_quic_transport_params(tctx.ssl, NULL, 0) == WOLFSSL_SUCCESS); AssertTrue(wolfSSL_quic_read_write(tctx.ssl) != 0); - AssertIntEQ(wolfSSL_get_error(tctx.ssl, 0), QUIC_TP_MISSING_E); + AssertIntEQ(wolfSSL_get_error(tctx.ssl, 0), WC_NO_ERR_TRACE(QUIC_TP_MISSING_E)); QuicTestContext_free(&tctx); /* Set transport params, expect both extensions */ @@ -1075,7 +1075,7 @@ static int test_quic_client_hello(int verbose) { "wolfssl.com", sizeof("wolfssl.com")-1); #endif AssertTrue(wolfSSL_connect(tctx.ssl) != 0); - AssertIntEQ(wolfSSL_get_error(tctx.ssl, 0), SSL_ERROR_WANT_READ); + AssertIntEQ(wolfSSL_get_error(tctx.ssl, 0), WC_NO_ERR_TRACE(SSL_ERROR_WANT_READ)); check_quic_client_hello_tp(&tctx.output, 1, 1); QuicTestContext_free(&tctx); @@ -1339,8 +1339,8 @@ static int test_quic_key_share(int verbose) { == WOLFSSL_SUCCESS); QuicConversation_init(&conv, &tclient, &tserver); QuicConversation_fail(&conv); - AssertIntEQ(wolfSSL_get_error(tserver.ssl, 0), SSL_ERROR_WANT_READ); - AssertIntEQ(wolfSSL_get_error(tclient.ssl, 0), BAD_KEY_SHARE_DATA); + AssertIntEQ(wolfSSL_get_error(tserver.ssl, 0), WC_NO_ERR_TRACE(SSL_ERROR_WANT_READ)); + AssertIntEQ(wolfSSL_get_error(tclient.ssl, 0), WC_NO_ERR_TRACE(BAD_KEY_SHARE_DATA)); QuicTestContext_free(&tclient); QuicTestContext_free(&tserver); printf(" test_quic_key_share: no match ok\n"); diff --git a/tests/srp.c b/tests/srp.c index 0a41361ce..649a86efc 100644 --- a/tests/srp.c +++ b/tests/srp.c @@ -126,11 +126,11 @@ static void test_SrpInit(void) Srp srp; /* invalid params */ - AssertIntEQ(BAD_FUNC_ARG, wc_SrpInit(NULL, SRP_TYPE_TEST_DEFAULT, + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpInit(NULL, SRP_TYPE_TEST_DEFAULT, SRP_CLIENT_SIDE)); /* // NOLINTBEGIN(clang-analyzer-optin.core.EnumCastOutOfRange) */ - AssertIntEQ(BAD_FUNC_ARG, wc_SrpInit(&srp, (SrpType)255, SRP_CLIENT_SIDE)); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpInit(&srp, SRP_TYPE_TEST_DEFAULT, + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpInit(&srp, (SrpType)255, SRP_CLIENT_SIDE)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpInit(&srp, SRP_TYPE_TEST_DEFAULT, (SrpSide)255)); /* // NOLINTEND(clang-analyzer-optin.core.EnumCastOutOfRange) */ @@ -147,8 +147,8 @@ static void test_SrpSetUsername(void) AssertIntEQ(0, wc_SrpInit(&srp, SRP_TYPE_TEST_DEFAULT, SRP_CLIENT_SIDE)); /* invalid params */ - AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetUsername(NULL, username, usernameSz)); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetUsername(&srp, NULL, usernameSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpSetUsername(NULL, username, usernameSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpSetUsername(&srp, NULL, usernameSz)); /* success */ AssertIntEQ(0, wc_SrpSetUsername(&srp, username, usernameSz)); @@ -165,7 +165,7 @@ static void test_SrpSetParams(void) AssertIntEQ(0, wc_SrpInit(&srp, SRP_TYPE_TEST_DEFAULT, SRP_CLIENT_SIDE)); /* invalid call order */ - AssertIntEQ(SRP_CALL_ORDER_E, wc_SrpSetParams(&srp, + AssertIntEQ(WC_NO_ERR_TRACE(SRP_CALL_ORDER_E), wc_SrpSetParams(&srp, srp_N, sizeof(srp_N), srp_g, sizeof(srp_g), srp_salt, sizeof(srp_salt))); @@ -174,19 +174,19 @@ static void test_SrpSetParams(void) AssertIntEQ(0, wc_SrpSetUsername(&srp, username, usernameSz)); /* invalid params */ - AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetParams(NULL, + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpSetParams(NULL, srp_N, sizeof(srp_N), srp_g, sizeof(srp_g), srp_salt, sizeof(srp_salt))); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetParams(&srp, + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpSetParams(&srp, NULL, sizeof(srp_N), srp_g, sizeof(srp_g), srp_salt, sizeof(srp_salt))); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetParams(&srp, + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpSetParams(&srp, srp_N, sizeof(srp_N), NULL, sizeof(srp_g), srp_salt, sizeof(srp_salt))); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetParams(&srp, + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpSetParams(&srp, srp_N, sizeof(srp_N), srp_g, sizeof(srp_g), NULL, sizeof(srp_salt))); @@ -215,9 +215,9 @@ static void test_SrpSetPassword(void) AssertIntEQ(0, wc_SrpSetUsername(&srp, username, usernameSz)); /* invalid call order */ - AssertIntEQ(SRP_CALL_ORDER_E, + AssertIntEQ(WC_NO_ERR_TRACE(SRP_CALL_ORDER_E), wc_SrpSetPassword(&srp, password, passwordSz)); - AssertIntEQ(SRP_CALL_ORDER_E, + AssertIntEQ(WC_NO_ERR_TRACE(SRP_CALL_ORDER_E), wc_SrpGetVerifier(&srp, v, &vSz)); /* fix call order */ @@ -226,16 +226,16 @@ static void test_SrpSetPassword(void) srp_salt, sizeof(srp_salt))); /* invalid params */ - AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetPassword(NULL, password, passwordSz)); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetPassword(&srp, NULL, passwordSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpSetPassword(NULL, password, passwordSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpSetPassword(&srp, NULL, passwordSz)); /* success */ AssertIntEQ(0, wc_SrpSetPassword(&srp, password, passwordSz)); /* invalid params */ - AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetVerifier(NULL, v, &vSz)); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetVerifier(&srp, NULL, &vSz)); - AssertIntEQ(BUFFER_E, wc_SrpGetVerifier(&srp, v, &vSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpGetVerifier(NULL, v, &vSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpGetVerifier(&srp, NULL, &vSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BUFFER_E), wc_SrpGetVerifier(&srp, v, &vSz)); /* success */ vSz = sizeof(v); @@ -244,14 +244,14 @@ static void test_SrpSetPassword(void) AssertIntEQ(0, XMEMCMP(srp_verifier, v, vSz)); /* invalid params - client side srp */ - AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetVerifier(&srp, v, vSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpSetVerifier(&srp, v, vSz)); wc_SrpTerm(&srp); AssertIntEQ(0, wc_SrpInit(&srp, SRP_TYPE_SHA, SRP_SERVER_SIDE)); /* invalid params */ - AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetVerifier(NULL, v, vSz)); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpSetVerifier(&srp, NULL, vSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpSetVerifier(NULL, v, vSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpSetVerifier(&srp, NULL, vSz)); /* success */ AssertIntEQ(0, wc_SrpSetVerifier(&srp, v, vSz)); @@ -273,16 +273,16 @@ static void test_SrpGetPublic(void) srp_salt, sizeof(srp_salt))); /* invalid call order */ - AssertIntEQ(SRP_CALL_ORDER_E, wc_SrpGetPublic(&srp, pub, &pubSz)); + AssertIntEQ(WC_NO_ERR_TRACE(SRP_CALL_ORDER_E), wc_SrpGetPublic(&srp, pub, &pubSz)); /* fix call order */ AssertIntEQ(0, wc_SrpSetPassword(&srp, password, passwordSz)); /* invalid params */ - AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetPublic(NULL, pub, &pubSz)); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetPublic(&srp, NULL, &pubSz)); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetPublic(&srp, pub, NULL)); - AssertIntEQ(BUFFER_E, wc_SrpGetPublic(&srp, pub, &pubSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpGetPublic(NULL, pub, &pubSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpGetPublic(&srp, NULL, &pubSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpGetPublic(&srp, pub, NULL)); + AssertIntEQ(WC_NO_ERR_TRACE(BUFFER_E), wc_SrpGetPublic(&srp, pub, &pubSz)); /* success */ pubSz = sizeof(pub); @@ -300,7 +300,7 @@ static void test_SrpGetPublic(void) srp_salt, sizeof(srp_salt))); /* invalid call order */ - AssertIntEQ(SRP_CALL_ORDER_E, wc_SrpGetPublic(&srp, pub, &pubSz)); + AssertIntEQ(WC_NO_ERR_TRACE(SRP_CALL_ORDER_E), wc_SrpGetPublic(&srp, pub, &pubSz)); /* fix call order */ AssertIntEQ(0, wc_SrpSetVerifier(&srp, srp_verifier, sizeof(srp_verifier))); @@ -328,7 +328,7 @@ static void test_SrpComputeKey(void) AssertIntEQ(0, wc_SrpInit(&srv, SRP_TYPE_SHA, SRP_SERVER_SIDE)); /* invalid call order */ - AssertIntEQ(SRP_CALL_ORDER_E, wc_SrpComputeKey(&cli, + AssertIntEQ(WC_NO_ERR_TRACE(SRP_CALL_ORDER_E), wc_SrpComputeKey(&cli, clientPubKey, clientPubKeySz, serverPubKey, serverPubKeySz)); @@ -354,19 +354,19 @@ static void test_SrpComputeKey(void) AssertIntEQ(0, XMEMCMP(serverPubKey, srp_B, serverPubKeySz)); /* invalid params */ - AssertIntEQ(BAD_FUNC_ARG, wc_SrpComputeKey(NULL, + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpComputeKey(NULL, clientPubKey, clientPubKeySz, serverPubKey, serverPubKeySz)); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpComputeKey(&cli, + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpComputeKey(&cli, NULL, clientPubKeySz, serverPubKey, serverPubKeySz)); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpComputeKey(&cli, + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpComputeKey(&cli, clientPubKey, 0, serverPubKey, serverPubKeySz)); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpComputeKey(&cli, + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpComputeKey(&cli, clientPubKey, clientPubKeySz, NULL, serverPubKeySz)); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpComputeKey(&cli, + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpComputeKey(&cli, clientPubKey, clientPubKeySz, serverPubKey, 0)); @@ -432,16 +432,16 @@ static void test_SrpGetProofAndVerify(void) /* invalid params */ serverProofSz = 0; - AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetProof(NULL, clientProof,&clientProofSz)); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetProof(&cli, NULL, &clientProofSz)); - AssertIntEQ(BAD_FUNC_ARG, wc_SrpGetProof(&cli, clientProof,NULL)); - AssertIntEQ(BUFFER_E, wc_SrpGetProof(&srv, serverProof,&serverProofSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpGetProof(NULL, clientProof,&clientProofSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpGetProof(&cli, NULL, &clientProofSz)); + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpGetProof(&cli, clientProof,NULL)); + AssertIntEQ(WC_NO_ERR_TRACE(BUFFER_E), wc_SrpGetProof(&srv, serverProof,&serverProofSz)); - AssertIntEQ(BAD_FUNC_ARG, + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpVerifyPeersProof(NULL, clientProof, clientProofSz)); - AssertIntEQ(BAD_FUNC_ARG, + AssertIntEQ(WC_NO_ERR_TRACE(BAD_FUNC_ARG), wc_SrpVerifyPeersProof(&cli, NULL, clientProofSz)); - AssertIntEQ(BUFFER_E, + AssertIntEQ(WC_NO_ERR_TRACE(BUFFER_E), wc_SrpVerifyPeersProof(&srv, serverProof, serverProofSz)); serverProofSz = SRP_MAX_DIGEST_SIZE; diff --git a/wolfcrypt/benchmark/README.md b/wolfcrypt/benchmark/README.md index 6e2bed942..269b9af9d 100644 --- a/wolfcrypt/benchmark/README.md +++ b/wolfcrypt/benchmark/README.md @@ -11,9 +11,9 @@ Tool for performing cryptographic algorithm benchmarking. Compile with the following options for fixed units. Otherwise the units will auto-scale. See `-base10` parameter option, below. -`-DWOLFSSL_BENCHMARK_FIXED_UNITS_GB` for GB/GiB -`-DWOLFSSL_BENCHMARK_FIXED_UNITS_MB` for MB/MiB -`-DWOLFSSL_BENCHMARK_FIXED_UNITS_KB` for KB/KiB +`-DWOLFSSL_BENCHMARK_FIXED_UNITS_GB` for GB/GiB +`-DWOLFSSL_BENCHMARK_FIXED_UNITS_MB` for MB/MiB +`-DWOLFSSL_BENCHMARK_FIXED_UNITS_KB` for KB/KiB `-DWOLFSSL_BENCHMARK_FIXED_UNITS_B` for Bytes To set the output to always be CSV: diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index c35809119..d018e05b2 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -172,7 +172,7 @@ #ifdef WOLFSSL_WC_KYBER #include #endif - #if defined(HAVE_LIBOQS) || defined(HAVE_PQM4) + #if defined(HAVE_LIBOQS) #include #endif #endif @@ -3671,7 +3671,7 @@ static void* benchmarks_do(void* args) #endif if (wc_ecc_get_curve_size_from_id(curveId) != - ECC_BAD_ARG_E) { + WC_NO_ERR_TRACE(ECC_BAD_ARG_E)) { bench_ecc_curve(curveId); if (csv_format != 1) { printf("\n"); diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index 06dfa0df5..e99852296 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -5652,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; @@ -5675,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; @@ -5710,7 +5710,7 @@ int EncodeObjectId(const word16* in, word32 inSz, byte* out, word32* outSz) } /* return length */ - *outSz = len; + *outSz = (word32)len; return 0; } @@ -6882,8 +6882,9 @@ static const ASNItem pkcs8KeyASN[] = { /* PKEY_ALGO_PARAM_SEQ */ { 2, ASN_SEQUENCE, 1, 0, 1 }, #endif /* PKEY_DATA */ { 1, ASN_OCTET_STRING, 0, 0, 0 }, - /* attributes [0] Attributes OPTIONAL */ - /* [[2: publicKey [1] PublicKey OPTIONAL ]] */ +/* OPTIONAL Attributes IMPLICIT [0] */ + { 1, ASN_CONTEXT_SPECIFIC | 0, 1, 0, 1 }, +/* [[2: publicKey [1] PublicKey OPTIONAL ]] */ }; enum { PKCS8KEYASN_IDX_SEQ = 0, @@ -6896,6 +6897,7 @@ enum { PKCS8KEYASN_IDX_PKEY_ALGO_PARAM_SEQ, #endif PKCS8KEYASN_IDX_PKEY_DATA, + PKCS8KEYASN_IDX_PKEY_ATTRIBUTES, WOLF_ENUM_DUMMY_LAST_ELEMENT(PKCS8KEYASN_IDX) }; @@ -7306,7 +7308,9 @@ int wc_CreatePKCS8Key(byte* out, word32* outSz, byte* key, word32 keySz, *outSz = tmpSz + sz; return (int)(tmpSz + sz); #else - DECL_ASNSETDATA(dataASN, pkcs8KeyASN_Length); + /* pkcs8KeyASN_Length-1, the -1 is because we are not adding the optional + * set of attributes */ + DECL_ASNSETDATA(dataASN, pkcs8KeyASN_Length-1); int sz = 0; int ret = 0; word32 keyIdx = 0; @@ -7327,7 +7331,7 @@ int wc_CreatePKCS8Key(byte* out, word32* outSz, byte* key, word32 keySz, ret = ASN_PARSE_E; } - CALLOC_ASNSETDATA(dataASN, pkcs8KeyASN_Length, ret, NULL); + CALLOC_ASNSETDATA(dataASN, pkcs8KeyASN_Length-1, ret, NULL); if (ret == 0) { /* Only support default PKCS #8 format - v0. */ @@ -7353,7 +7357,7 @@ int wc_CreatePKCS8Key(byte* out, word32* outSz, byte* key, word32 keySz, SetASN_Buffer(&dataASN[PKCS8KEYASN_IDX_PKEY_DATA], key, keySz); /* Get the size of the DER encoding. */ - ret = SizeASN_Items(pkcs8KeyASN, dataASN, pkcs8KeyASN_Length, &sz); + ret = SizeASN_Items(pkcs8KeyASN, dataASN, pkcs8KeyASN_Length-1, &sz); } if (ret == 0) { /* Always return the calculated size. */ @@ -7366,7 +7370,7 @@ int wc_CreatePKCS8Key(byte* out, word32* outSz, byte* key, word32 keySz, } if (ret == 0) { /* Encode PKCS #8 key into buffer. */ - SetASN_Items(pkcs8KeyASN, dataASN, pkcs8KeyASN_Length, out); + SetASN_Items(pkcs8KeyASN, dataASN, pkcs8KeyASN_Length-1, out); ret = sz; } @@ -13476,12 +13480,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) { @@ -13500,7 +13504,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) { @@ -13508,7 +13512,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)); } } @@ -28121,9 +28125,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 @@ -28447,8 +28451,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 { @@ -32486,7 +32490,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; @@ -32522,7 +32526,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; @@ -36770,7 +36774,7 @@ static int DecodeBasicOcspResponse(byte* source, word32* ioIndex, int sigValid = -1; #ifndef NO_SKID - ca = GetCA(cm, resp->single->issuerKeyHash); + ca = GetCAByKeyHash(cm, resp->single->issuerKeyHash); #else ca = GetCA(cm, resp->single->issuerHash); #endif @@ -36911,7 +36915,7 @@ static int DecodeBasicOcspResponse(byte* source, word32* ioIndex, /* Response didn't have a certificate - lookup CA. */ #ifndef NO_SKID - ca = GetCA(cm, resp->single->issuerKeyHash); + ca = GetCAByKeyHash(cm, resp->single->issuerKeyHash); #else ca = GetCA(cm, resp->single->issuerHash); #endif @@ -38724,7 +38728,7 @@ end: tbsParams = GetASNItem_Addr(dataASN[CRLASN_IDX_TBS_SIGALGO_PARAMS], buff); - tbsParamsSz = + tbsParamsSz =(int) GetASNItem_Length(dataASN[CRLASN_IDX_TBS_SIGALGO_PARAMS], buff); } @@ -38732,7 +38736,7 @@ end: sigParams = GetASNItem_Addr(dataASN[CRLASN_IDX_SIGALGO_PARAMS], buff); - sigParamsSz = + sigParamsSz = (int) GetASNItem_Length(dataASN[CRLASN_IDX_SIGALGO_PARAMS], buff); dcrl->sigParamsIndex = @@ -38759,7 +38763,7 @@ end: 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; } diff --git a/wolfcrypt/src/chacha.c b/wolfcrypt/src/chacha.c index b87418a72..1bad41dfb 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; -#endif /* WOLFSSL_ARMASM && !WOLFSSL_ARMASM_NO_NEON */ + 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 /* HAVE_CHACHA && HAVE_XCHACHA */ diff --git a/wolfcrypt/src/cryptocb.c b/wolfcrypt/src/cryptocb.c index e3c62a86f..d510bb438 100644 --- a/wolfcrypt/src/cryptocb.c +++ b/wolfcrypt/src/cryptocb.c @@ -418,6 +418,62 @@ int wc_CryptoCb_Rsa(const byte* in, word32 inLen, byte* out, return wc_CryptoCb_TranslateErrorCode(ret); } +#ifdef WOLF_CRYPTO_CB_RSA_PAD +int wc_CryptoCb_RsaPad(const byte* in, word32 inLen, byte* out, + word32* outLen, int type, RsaKey* key, WC_RNG* rng, + RsaPadding *padding) +{ + int ret = WC_NO_ERR_TRACE(CRYPTOCB_UNAVAILABLE); + CryptoCb* dev; + int pk_type; + + if (key == NULL) + return ret; + + /* locate registered callback */ + dev = wc_CryptoCb_FindDevice(key->devId, WC_ALGO_TYPE_PK); + + if (padding) { + switch(padding->pad_type) { +#ifndef NO_PKCS11_RSA_PKCS + case WC_RSA_PKCSV15_PAD: + pk_type = WC_PK_TYPE_RSA_PKCS; + break; + case WC_RSA_PSS_PAD: + pk_type = WC_PK_TYPE_RSA_PSS; + break; + case WC_RSA_OAEP_PAD: + pk_type = WC_PK_TYPE_RSA_OAEP; + break; +#endif /* NO_PKCS11_RSA_PKCS */ + default: + pk_type = WC_PK_TYPE_RSA; + } + } else { + pk_type = WC_PK_TYPE_RSA; + } + + if (dev && dev->cb) { + wc_CryptoInfo cryptoInfo; + XMEMSET(&cryptoInfo, 0, sizeof(cryptoInfo)); + cryptoInfo.algo_type = WC_ALGO_TYPE_PK; + cryptoInfo.pk.type = pk_type; + cryptoInfo.pk.rsa.in = in; + cryptoInfo.pk.rsa.inLen = inLen; + cryptoInfo.pk.rsa.out = out; + cryptoInfo.pk.rsa.outLen = outLen; + cryptoInfo.pk.rsa.type = type; + cryptoInfo.pk.rsa.key = key; + cryptoInfo.pk.rsa.rng = rng; + cryptoInfo.pk.rsa.padding = padding; + + ret = dev->cb(dev->devId, &cryptoInfo, dev->ctx); + } + + return wc_CryptoCb_TranslateErrorCode(ret); +} +#endif + #ifdef WOLFSSL_KEY_GEN int wc_CryptoCb_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng) { diff --git a/wolfcrypt/src/dilithium.c b/wolfcrypt/src/dilithium.c index 91b1d99d6..da465efcc 100644 --- a/wolfcrypt/src/dilithium.c +++ b/wolfcrypt/src/dilithium.c @@ -149,6 +149,7 @@ #endif #include +#include #include #include #ifdef NO_INLINE @@ -353,6 +354,9 @@ static int dilithium_shake256(wc_Shake* shake256, const byte* data, return ret; } +#if !defined(WOLFSSL_DILITHIUM_FIPS204_DRAFT) || \ + (!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) @@ -390,7 +394,9 @@ static int dilithium_hash256(wc_Shake* shake256, const byte* data1, return ret; } +#endif +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT #if !defined(WOLFSSL_DILITHIUM_NO_SIGN) || !defined(WOLFSSL_DILITHIUM_NO_VERIFY) /* 256-bit hash of context and message using SHAKE-256. * @@ -580,6 +586,7 @@ static int dilithium_get_hash_oid(int hash, byte* oidBuffer, word32* oidLen) return ret; } #endif +#endif /* !WOLFSSL_DILITHIUM_FIPS204_DRAFT */ #ifndef WOLFSSL_DILITHIUM_SMALL /* 128-bit hash using SHAKE-128. @@ -2779,8 +2786,14 @@ 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. */ +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT ret = dilithium_shake256(shake256, seed, seedLen, block, DILITHIUM_GEN_C_BLOCK_BYTES); +#else + (void)seedLen; + ret = dilithium_shake256(shake256, seed, DILITHIUM_SEED_SZ, block, + DILITHIUM_GEN_C_BLOCK_BYTES); +#endif } if (ret == 0) { /* Copy first 8 bytes of first hash block as random sign bits. */ @@ -5465,7 +5478,9 @@ static int dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) sword32* s2 = NULL; sword32* t = NULL; byte* pub_seed = key->k; +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT byte kl[2]; +#endif /* Allocate memory for large intermediates. */ #ifdef WC_DILITHIUM_CACHE_MATRIX_A @@ -5526,12 +5541,19 @@ static int dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) #endif if (ret == 0) { +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT 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); +#else + /* 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); +#endif } if (ret == 0) { /* Step 7; Alg 22 Step 1: Copy public seed into public key. */ @@ -5615,7 +5637,9 @@ static int dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) byte* pub_seed = key->k; unsigned int r; unsigned int s; +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT byte kl[2]; +#endif /* Allocate memory for large intermediates. */ if (ret == 0) { @@ -5644,12 +5668,19 @@ static int dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) } if (ret == 0) { +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT 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); +#else + /* 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); +#endif } if (ret == 0) { byte* priv_seed = key->k + DILITHIUM_PUB_SEED_SZ; @@ -6708,6 +6739,7 @@ static int dilithium_sign_with_seed_mu(dilithium_key* key, #endif } +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT /* Sign a message with the key and a seed. * * FIPS 204. 5.2: Algorithm 2 ML-DSA.Sign(sk, M, ctx) @@ -6758,6 +6790,7 @@ static int dilithium_sign_ctx_msg_with_seed(dilithium_key* key, return ret; } +#endif /* Sign a message with the key and a seed. * @@ -6807,6 +6840,7 @@ static int dilithium_sign_msg_with_seed(dilithium_key* key, const byte* seed, return ret; } +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT /* Sign a message with the key and a random number generator. * * FIPS 204. 5.2: Algorithm 2 ML-DSA.Sign(sk, M, ctx) @@ -6870,6 +6904,7 @@ static int dilithium_sign_ctx_msg(dilithium_key* key, WC_RNG* rng, return ret; } +#endif /* Sign a message with the key and a random number generator. * @@ -6932,6 +6967,7 @@ static int dilithium_sign_msg(dilithium_key* key, WC_RNG* rng, return ret; } +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT /* 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) @@ -7052,6 +7088,7 @@ static int dilithium_sign_ctx_hash(dilithium_key* key, WC_RNG* rng, return ret; } +#endif #endif /* !WOLFSSL_DILITHIUM_NO_SIGN */ @@ -7277,15 +7314,14 @@ static int dilithium_verify_mu(dilithium_key* key, const byte* mu, #ifndef WOLFSSL_DILITHIUM_VERIFY_NO_MALLOC byte* block = NULL; #endif - byte tr[DILITHIUM_TR_SZ]; byte* w1e = NULL; - byte* commit_calc = tr; + byte commit_calc[DILITHIUM_TR_SZ]; int valid = 0; sword32 hi; unsigned int r; byte o; byte* encW1; - byte* seed = tr; + byte* seed = commit_calc; /* Ensure the signature is the right size for the parameters. */ if (sigLen != params->sigSz) { @@ -7499,11 +7535,6 @@ static int dilithium_verify_mu(dilithium_key* key, const byte* mu, } } } - 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, @@ -7522,6 +7553,7 @@ static int dilithium_verify_mu(dilithium_key* key, const byte* mu, #endif /* !WOLFSSL_DILITHIUM_VERIFY_SMALL_MEM */ } +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT /* Verify signature of message using public key. * * @param [in, out] key Dilithium key. @@ -7567,6 +7599,7 @@ static int dilithium_verify_ctx_msg(dilithium_key* key, const byte* ctx, return ret; } +#endif /* Verify signature of message using public key. * @@ -7611,6 +7644,7 @@ static int dilithium_verify_msg(dilithium_key* key, const byte* msg, return ret; } +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT /* Verify signature of message using public key. * * @param [in, out] key Dilithium key. @@ -7665,6 +7699,7 @@ static int dilithium_verify_ctx_hash(dilithium_key* key, const byte* ctx, return ret; } +#endif #endif /* WOLFSSL_DILITHIUM_NO_VERIFY */ #elif defined(HAVE_LIBOQS) @@ -7910,6 +7945,7 @@ int wc_dilithium_make_key_from_seed(dilithium_key* key, const byte* seed) #endif #ifndef WOLFSSL_DILITHIUM_NO_SIGN +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT /* Sign the message using the dilithium private key. * * ctx [in] Context of signature. @@ -7966,6 +8002,7 @@ int wc_dilithium_sign_ctx_msg(const byte* ctx, byte ctxLen, const byte* msg, return ret; } +#endif /* Sign the message using the dilithium private key. * @@ -8017,6 +8054,7 @@ int wc_dilithium_sign_msg(const byte* msg, word32 msgLen, byte* sig, return ret; } +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT /* Sign the message hash using the dilithium private key. * * ctx [in] Context of signature. @@ -8107,6 +8145,7 @@ int wc_dilithium_sign_ctx_msg_with_seed(const byte* ctx, byte ctxLen, return ret; } +#endif /* Sign the message using the dilithium private key. * @@ -8144,6 +8183,7 @@ int wc_dilithium_sign_msg_with_seed(const byte* msg, word32 msgLen, byte* sig, return ret; } +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT /* Sign the message using the dilithium private key. * * ctx [in] Context of signature. @@ -8190,9 +8230,11 @@ int wc_dilithium_sign_ctx_hash_with_seed(const byte* ctx, byte ctxLen, return ret; } +#endif #endif /* !WOLFSSL_DILITHIUM_NO_SIGN */ #ifndef WOLFSSL_DILITHIUM_NO_VERIFY +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT /* Verify the message using the dilithium public key. * * sig [in] Signature to verify. @@ -8236,6 +8278,7 @@ int wc_dilithium_verify_ctx_msg(const byte* sig, word32 sigLen, const byte* ctx, return ret; } +#endif /* Verify the message using the dilithium public key. * @@ -8287,6 +8330,7 @@ int wc_dilithium_verify_msg(const byte* sig, word32 sigLen, const byte* msg, return ret; } +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT /* Verify the message using the dilithium public key. * * sig [in] Signature to verify. @@ -8333,6 +8377,7 @@ int wc_dilithium_verify_ctx_hash(const byte* sig, word32 sigLen, return ret; } +#endif #endif /* WOLFSSL_DILITHIUM_NO_VERIFY */ /* Initialize the dilithium private/public key. diff --git a/wolfcrypt/src/ecc.c b/wolfcrypt/src/ecc.c index eeb91c2ba..f834ef06e 100644 --- a/wolfcrypt/src/ecc.c +++ b/wolfcrypt/src/ecc.c @@ -236,14 +236,6 @@ ECC Curve Sizes: #define RESTORE_VECTOR_REGISTERS() WC_DO_NOTHING #endif -#if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL) - #define GEN_MEM_ERR MP_MEM -#elif defined(USE_FAST_MATH) - #define GEN_MEM_ERR FP_MEM -#else - #define GEN_MEM_ERR MP_MEM -#endif - #if !defined(WOLFSSL_ATECC508A) && !defined(WOLFSSL_ATECC608A) && \ !defined(WOLFSSL_CRYPTOCELL) && !defined(WOLFSSL_SILABS_SE_ACCEL) && \ !defined(WOLFSSL_KCAPI_ECC) && !defined(WOLFSSL_SE050) && \ @@ -8204,12 +8196,12 @@ int ecc_mul2add(ecc_point* A, mp_int* kA, /* allocate memory */ tA = (unsigned char*)XMALLOC(ECC_BUFSIZE, heap, DYNAMIC_TYPE_ECC_BUFFER); if (tA == NULL) { - return GEN_MEM_ERR; + return MP_MEM; } tB = (unsigned char*)XMALLOC(ECC_BUFSIZE, heap, DYNAMIC_TYPE_ECC_BUFFER); if (tB == NULL) { XFREE(tA, heap, DYNAMIC_TYPE_ECC_BUFFER); - return GEN_MEM_ERR; + return MP_MEM; } #endif @@ -8218,7 +8210,7 @@ int ecc_mul2add(ecc_point* A, mp_int* kA, if (key == NULL) { XFREE(tB, heap, DYNAMIC_TYPE_ECC_BUFFER); XFREE(tA, heap, DYNAMIC_TYPE_ECC_BUFFER); - return GEN_MEM_ERR; + return MP_MEM; } #endif #ifdef WOLFSSL_SMALL_STACK @@ -8230,7 +8222,7 @@ int ecc_mul2add(ecc_point* A, mp_int* kA, #ifdef WOLFSSL_SMALL_STACK_CACHE XFREE(key, heap, DYNAMIC_TYPE_ECC_BUFFER); #endif - return GEN_MEM_ERR; + return MP_MEM; } #endif #ifdef WOLFSSL_SMALL_STACK_CACHE @@ -12471,7 +12463,7 @@ static int add_entry(int idx, ecc_point *g) /* allocate base and LUT */ fp_cache[idx].g = wc_ecc_new_point(); if (fp_cache[idx].g == NULL) { - return GEN_MEM_ERR; + return MP_MEM; } /* copy x and y */ @@ -12480,7 +12472,7 @@ static int add_entry(int idx, ecc_point *g) (mp_copy(g->z, fp_cache[idx].g->z) != MP_OKAY)) { wc_ecc_del_point(fp_cache[idx].g); fp_cache[idx].g = NULL; - return GEN_MEM_ERR; + return MP_MEM; } for (x = 0; x < (1U<x, R->x) != MP_OKAY) || (mp_copy(fp_cache[idx].LUT[z]->y, R->y) != MP_OKAY) || (mp_copy(&fp_cache[idx].mu, R->z) != MP_OKAY)) { - err = GEN_MEM_ERR; + err = MP_MEM; break; } first = 0; @@ -13069,7 +13061,7 @@ static int accel_fp_mul2add(int idx1, int idx2, if ((mp_copy(fp_cache[idx1].LUT[zA]->x, R->x) != MP_OKAY) || (mp_copy(fp_cache[idx1].LUT[zA]->y, R->y) != MP_OKAY) || (mp_copy(&fp_cache[idx1].mu, R->z) != MP_OKAY)) { - err = GEN_MEM_ERR; + err = MP_MEM; break; } first = 0; @@ -13084,7 +13076,7 @@ static int accel_fp_mul2add(int idx1, int idx2, if ((mp_copy(fp_cache[idx2].LUT[zB]->x, R->x) != MP_OKAY) || (mp_copy(fp_cache[idx2].LUT[zB]->y, R->y) != MP_OKAY) || (mp_copy(&fp_cache[idx2].mu, R->z) != MP_OKAY)) { - err = GEN_MEM_ERR; + err = MP_MEM; break; } first = 0; diff --git a/wolfcrypt/src/evp.c b/wolfcrypt/src/evp.c index bff1947df..bcd87b428 100644 --- a/wolfcrypt/src/evp.c +++ b/wolfcrypt/src/evp.c @@ -1725,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) { @@ -1764,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) @@ -2046,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) @@ -2306,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; } @@ -2318,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; } @@ -3444,7 +3445,7 @@ int wolfSSL_EVP_PKEY_keygen(WOLFSSL_EVP_PKEY_CTX *ctx, WOLFSSL_ENTER("wolfSSL_EVP_PKEY_keygen"); if (ctx == NULL || ppkey == NULL) { - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; } pkey = *ppkey; @@ -3454,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) { @@ -3835,8 +3836,9 @@ static int DH_param_check(WOLFSSL_DH* dh_key) dh_key->q != NULL) { if (ret == WOLFSSL_SUCCESS && - wolfSSL_BN_mod_exp(num1, dh_key->g, dh_key->q, dh_key->p, ctx) == - WOLFSSL_FAILURE) { + wolfSSL_BN_mod_exp(num1, dh_key->g, dh_key->q, dh_key->p, ctx) + == WC_NO_ERR_TRACE(WOLFSSL_FAILURE)) + { WOLFSSL_MSG("BN_mod_exp failed"); ret = WOLFSSL_FAILURE; } @@ -4146,9 +4148,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; } @@ -4347,7 +4350,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; } } @@ -4539,7 +4542,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); } @@ -4551,7 +4554,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); } @@ -4561,7 +4564,7 @@ int wolfSSL_EVP_DigestSignFinal(WOLFSSL_EVP_MD_CTX *ctx, unsigned char *sig, { unsigned char digest[WC_MAX_DIGEST_SIZE]; unsigned int hashLen; - int ret = WOLFSSL_FAILURE; + int ret = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); WOLFSSL_ENTER("EVP_DigestSignFinal"); @@ -4664,7 +4667,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); } @@ -4676,7 +4679,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); } @@ -9351,7 +9354,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"); @@ -9376,7 +9379,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); @@ -10496,7 +10499,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; } @@ -10594,7 +10597,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; @@ -10911,7 +10914,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 @@ -10977,7 +10980,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) @@ -10986,7 +10989,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 @@ -11062,7 +11065,7 @@ int wolfSSL_EVP_MD_size(const WOLFSSL_EVP_MD* type) } #endif - return BAD_FUNC_ARG; + return WOLFSSL_FAILURE; } #endif /* OPENSSL_EXTRA || HAVE_CURL */ @@ -11345,7 +11348,7 @@ static int PrintPubKeyRSA(WOLFSSL_BIO* out, const byte* pkey, int pkeySz, int indent, int bitlen, ASN1_PCTX* pctx) { byte buff[8] = { 0 }; - int res = WOLFSSL_FAILURE; + int res = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); word32 inOutIdx = 0; word32 nSz; /* size of modulus */ word32 eSz; /* size of public exponent */ @@ -11697,7 +11700,7 @@ static int PrintPubKeyDSA(WOLFSSL_BIO* out, const byte* pkey, int pkeySz, byte buff[8] = { 0 }; int length; - int res = WOLFSSL_FAILURE; + int res = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); word32 inOutIdx = 0; word32 oid; byte tagFound; @@ -11915,7 +11918,7 @@ static int PrintPubKeyDH(WOLFSSL_BIO* out, const byte* pkey, int pkeySz, { byte buff[8] = { 0 }; - int res = WOLFSSL_FAILURE; + int res = WC_NO_ERR_TRACE(WOLFSSL_FAILURE); word32 length; word32 inOutIdx; word32 oid; diff --git a/wolfcrypt/src/ext_kyber.c b/wolfcrypt/src/ext_kyber.c index 4f1a754df..0c2cb2b43 100644 --- a/wolfcrypt/src/ext_kyber.c +++ b/wolfcrypt/src/ext_kyber.c @@ -168,12 +168,6 @@ int wc_KyberKey_PrivateKeySize(KyberKey* key, word32* len) } } #endif /* HAVE_LIBOQS */ -#ifdef HAVE_PQM4 - (void)key; - if (ret == 0) { - *len = PQM4_PRIVATE_KEY_LENGTH; - } -#endif /* HAVE_PQM4 */ return ret; } @@ -216,12 +210,6 @@ int wc_KyberKey_PublicKeySize(KyberKey* key, word32* len) } } #endif /* HAVE_LIBOQS */ -#ifdef HAVE_PQM4 - (void)key; - if (ret == 0) { - *len = PQM4_PUBLIC_KEY_LENGTH; - } -#endif /* HAVE_PQM4 */ return ret; } @@ -264,12 +252,6 @@ int wc_KyberKey_CipherTextSize(KyberKey* key, word32* len) } } #endif /* HAVE_LIBOQS */ -#ifdef HAVE_PQM4 - (void)key; - if (ret == 0) { - *len = PQM4_CIPHERTEXT_LENGTH; - } -#endif /* HAVE_PQM4 */ return ret; } @@ -301,7 +283,7 @@ int wc_KyberKey_SharedSecretSize(KyberKey* key, word32* len) /** * Make a Kyber key object using a random number generator. * - * NOTE: rng is ignored. OQS and PQM4 don't use our RNG. + * NOTE: rng is ignored. OQS doesn't use our RNG. * * @param [in, out] key Kyber key ovject. * @param [in] rng Random number generator. @@ -362,14 +344,6 @@ int wc_KyberKey_MakeKey(KyberKey* key, WC_RNG* rng) wolfSSL_liboqsRngMutexUnlock(); OQS_KEM_free(kem); #endif /* HAVE_LIBOQS */ -#ifdef HAVE_PQM4 - if (ret == 0) { - if (crypto_kem_keypair(key->pub, key->priv) != 0) { - WOLFSSL_MSG("PQM4 keygen failure"); - ret = BAD_FUNC_ARG; - } - } -#endif /* HAVE_PQM4 */ if (ret != 0) { ForceZero(key, sizeof(*key)); @@ -394,7 +368,7 @@ int wc_KyberKey_MakeKeyWithRandom(KyberKey* key, const unsigned char* rand, { (void)rand; (void)len; - /* OQS and PQM4 don't support external randomness. */ + /* OQS doesn't support external randomness. */ return wc_KyberKey_MakeKey(key, NULL); } @@ -471,14 +445,6 @@ int wc_KyberKey_Encapsulate(KyberKey* key, unsigned char* ct, unsigned char* ss, wolfSSL_liboqsRngMutexUnlock(); OQS_KEM_free(kem); #endif /* HAVE_LIBOQS */ -#ifdef HAVE_PQM4 - if (ret == 0) { - if (crypto_kem_enc(ct, ss, key->pub) != 0) { - WOLFSSL_MSG("PQM4 Encapsulation failure."); - ret = BAD_FUNC_ARG; - } - } -#endif /* HAVE_PQM4 */ return ret; } @@ -501,7 +467,7 @@ int wc_KyberKey_EncapsulateWithRandom(KyberKey* key, unsigned char* ct, { (void)rand; (void)len; - /* OQS and PQM4 don't support external randomness. */ + /* OQS doesn't support external randomness. */ return wc_KyberKey_Encapsulate(key, ct, ss, NULL); } @@ -577,14 +543,6 @@ int wc_KyberKey_Decapsulate(KyberKey* key, unsigned char* ss, OQS_KEM_free(kem); #endif /* HAVE_LIBOQS */ -#ifdef HAVE_PQM4 - if (ret == 0) { - if (crypto_kem_dec(ss, ct, key->priv) != 0) { - WOLFSSL_MSG("PQM4 Decapsulation failure."); - ret = BAD_FUNC_ARG; - } - } -#endif /* HAVE_PQM4 */ return ret; diff --git a/wolfcrypt/src/kdf.c b/wolfcrypt/src/kdf.c index 690774474..1bb338e80 100644 --- a/wolfcrypt/src/kdf.c +++ b/wolfcrypt/src/kdf.c @@ -84,11 +84,9 @@ int wc_PRF(byte* result, word32 resLen, const byte* secret, word32 lastTime; int ret = 0; #ifdef WOLFSSL_SMALL_STACK - byte* previous; byte* current; Hmac* hmac; #else - byte previous[P_HASH_MAX_SIZE]; /* max size */ byte current[P_HASH_MAX_SIZE]; /* max size */ Hmac hmac[1]; #endif @@ -153,19 +151,16 @@ int wc_PRF(byte* result, word32 resLen, const byte* secret, lastTime = times - 1; #ifdef WOLFSSL_SMALL_STACK - previous = (byte*)XMALLOC(P_HASH_MAX_SIZE, heap, DYNAMIC_TYPE_DIGEST); - 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) { - XFREE(previous, heap, DYNAMIC_TYPE_DIGEST); + current = (byte*)XMALLOC(P_HASH_MAX_SIZE, heap, DYNAMIC_TYPE_DIGEST); + hmac = (Hmac*)XMALLOC(sizeof(Hmac), heap, DYNAMIC_TYPE_HMAC); + if (current == NULL || hmac == NULL) { XFREE(current, heap, DYNAMIC_TYPE_DIGEST); XFREE(hmac, heap, DYNAMIC_TYPE_HMAC); return MEMORY_E; } #endif #ifdef WOLFSSL_CHECK_MEM_ZERO - XMEMSET(previous, 0xff, P_HASH_MAX_SIZE); - wc_MemZero_Add("wc_PRF previous", previous, P_HASH_MAX_SIZE); + XMEMSET(current, 0xff, P_HASH_MAX_SIZE); wc_MemZero_Add("wc_PRF current", current, P_HASH_MAX_SIZE); wc_MemZero_Add("wc_PRF hmac", hmac, sizeof(Hmac)); #endif @@ -176,53 +171,53 @@ int wc_PRF(byte* result, word32 resLen, const byte* secret, if (ret == 0) ret = wc_HmacUpdate(hmac, seed, seedLen); /* A0 = seed */ if (ret == 0) - ret = wc_HmacFinal(hmac, previous); /* A1 */ + ret = wc_HmacFinal(hmac, current); /* A1 */ if (ret == 0) { word32 i; word32 idx = 0; for (i = 0; i < times; i++) { - ret = wc_HmacUpdate(hmac, previous, len); + ret = wc_HmacUpdate(hmac, current, len); if (ret != 0) break; ret = wc_HmacUpdate(hmac, seed, seedLen); if (ret != 0) break; - ret = wc_HmacFinal(hmac, current); - if (ret != 0) - break; + if ((i != lastTime) || !lastLen) { + ret = wc_HmacFinal(hmac, &result[idx]); + if (ret != 0) + break; + idx += len; - if ((i == lastTime) && lastLen) + ret = wc_HmacUpdate(hmac, current, len); + if (ret != 0) + break; + ret = wc_HmacFinal(hmac, current); + if (ret != 0) + break; + } + else { + ret = wc_HmacFinal(hmac, current); + if (ret != 0) + break; XMEMCPY(&result[idx], current, min(lastLen, P_HASH_MAX_SIZE)); - else { - XMEMCPY(&result[idx], current, len); - idx += len; - ret = wc_HmacUpdate(hmac, previous, len); - if (ret != 0) - break; - ret = wc_HmacFinal(hmac, previous); - if (ret != 0) - break; } } } wc_HmacFree(hmac); } - ForceZero(previous, P_HASH_MAX_SIZE); - ForceZero(current, P_HASH_MAX_SIZE); - ForceZero(hmac, sizeof(Hmac)); + ForceZero(current, P_HASH_MAX_SIZE); + ForceZero(hmac, sizeof(Hmac)); #if defined(WOLFSSL_CHECK_MEM_ZERO) - wc_MemZero_Check(previous, P_HASH_MAX_SIZE); - wc_MemZero_Check(current, P_HASH_MAX_SIZE); - wc_MemZero_Check(hmac, sizeof(Hmac)); + wc_MemZero_Check(current, P_HASH_MAX_SIZE); + wc_MemZero_Check(hmac, sizeof(Hmac)); #endif #ifdef WOLFSSL_SMALL_STACK - XFREE(previous, heap, DYNAMIC_TYPE_DIGEST); - XFREE(current, heap, DYNAMIC_TYPE_DIGEST); + XFREE(current, heap, DYNAMIC_TYPE_DIGEST); XFREE(hmac, heap, DYNAMIC_TYPE_HMAC); #endif diff --git a/wolfcrypt/src/pkcs7.c b/wolfcrypt/src/pkcs7.c index 81b289051..e6fa08c21 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); @@ -1314,12 +1314,12 @@ static int wc_PKCS7_SignerInfoSetSID(PKCS7* pkcs7, byte* in, int inSz) XFREE(pkcs7->signerInfo->sid, pkcs7->heap, DYNAMIC_TYPE_PKCS7); pkcs7->signerInfo->sid = NULL; - pkcs7->signerInfo->sid = (byte*)XMALLOC(inSz, pkcs7->heap, + 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; } @@ -1464,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; } @@ -1479,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; @@ -1500,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; } @@ -1564,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; } @@ -1672,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; @@ -1705,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; @@ -1716,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; @@ -2095,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; @@ -2106,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 @@ -2276,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 || @@ -2289,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) { @@ -2327,21 +2331,21 @@ static int wc_PKCS7_BuildDigestInfo(PKCS7* pkcs7, byte* flatSignedAttribs, 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; @@ -2487,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); @@ -2524,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; @@ -2561,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)); } @@ -2616,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; @@ -2631,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); @@ -2646,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); @@ -2670,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 */ @@ -2696,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); @@ -2918,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); @@ -2971,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 { @@ -3130,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) { @@ -3176,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); @@ -3196,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; } } } @@ -3211,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; } } @@ -3227,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; @@ -3268,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) { @@ -3299,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; } @@ -3307,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) { @@ -3326,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) { @@ -3351,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 @@ -3428,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; } @@ -3670,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); @@ -4337,15 +4346,15 @@ static int wc_PKCS7_BuildSignedDataDigest(PKCS7* pkcs7, byte* signedAttrib, 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 */ @@ -4739,7 +4748,7 @@ static int wc_PKCS7_SetPublicKeyOID(PKCS7* pkcs7, int sigOID) return ASN_SIG_KEY_E; } - return pkcs7->publicKeyOID; + return (int)pkcs7->publicKeyOID; } @@ -4771,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) @@ -4784,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); @@ -4806,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; @@ -4821,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) { @@ -4911,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) { @@ -4967,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 { @@ -4981,7 +4990,7 @@ static int wc_PKCS7_ParseSignerInfo(PKCS7* pkcs7, byte* in, word32 inSz, ret = ASN_PARSE_E; } pkcs7->hashOID = (int)hashOID; - pkcs7->hashParamsAbsent = absentParams; + pkcs7->hashParamsAbsent = (absentParams != 0); /* Get the IMPLICIT[0] SET OF signedAttributes */ localIdx = idx; @@ -5002,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 */ @@ -5131,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)--; @@ -5361,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; @@ -5503,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; @@ -5513,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; } @@ -5582,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; @@ -5616,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; @@ -5716,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; @@ -5748,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; @@ -5800,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, @@ -6065,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; } } @@ -6143,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; @@ -6180,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; @@ -6202,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 @@ -6212,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); @@ -6231,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; @@ -6251,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 && @@ -6273,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; @@ -6313,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 - @@ -6373,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 { @@ -6385,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; } } @@ -6402,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 */ @@ -6497,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; @@ -6514,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; @@ -7050,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; } @@ -7077,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 */ @@ -7132,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; @@ -7432,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 */ @@ -7456,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; } @@ -7481,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 */ @@ -7492,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 */ @@ -7522,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; @@ -7783,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); @@ -7797,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 */ @@ -7833,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 @@ -7945,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 @@ -7964,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 @@ -7984,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; @@ -8191,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); @@ -8252,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); @@ -8423,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); @@ -8462,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); @@ -8617,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; } @@ -8633,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; @@ -8652,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); } @@ -8713,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); @@ -8722,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 */ @@ -8768,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; } @@ -8811,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) { @@ -8901,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); @@ -8921,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) { @@ -9064,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; @@ -9080,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 */ @@ -9112,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 */ @@ -9133,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; @@ -9209,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); @@ -9345,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; @@ -9373,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); @@ -9395,7 +9415,7 @@ int wc_PKCS7_AddRecipient_KEKRI(PKCS7* pkcs7, int keyWrapOID, byte* kek, #endif return timeSz; } - totalSz += timeSz; + totalSz += (word32)timeSz; } #endif @@ -9406,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; @@ -9439,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); @@ -9454,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); @@ -9683,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); @@ -9709,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); @@ -9735,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 */ @@ -9757,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) { @@ -9842,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); @@ -9868,7 +9890,7 @@ 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) { XFREE(encryptedContent, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -9890,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); @@ -9909,13 +9931,13 @@ 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; } @@ -10061,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; } @@ -10114,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) @@ -10178,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 @@ -10300,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); } @@ -10406,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; @@ -10467,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; @@ -10507,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 */ @@ -10566,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; } @@ -10616,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; } } @@ -10651,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"); @@ -10743,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; } @@ -10856,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 @@ -10969,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) { @@ -10995,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; } @@ -11035,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) { @@ -11063,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); @@ -11071,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); @@ -11082,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); @@ -11110,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; @@ -11188,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) { @@ -11204,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) { @@ -11250,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) { @@ -12297,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; @@ -12358,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; @@ -12383,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) { @@ -12397,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 */ @@ -12421,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); @@ -12729,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; } @@ -12787,10 +12817,11 @@ 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, @@ -12819,7 +12850,8 @@ 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); XFREE(aadBuffer, pkcs7->heap, DYNAMIC_TYPE_TMP_BUFFER); @@ -12830,10 +12862,11 @@ int wc_PKCS7_EncodeAuthEnvelopedData(PKCS7* pkcs7, byte* output, 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); @@ -12846,8 +12879,8 @@ int wc_PKCS7_EncodeAuthEnvelopedData(PKCS7* pkcs7, byte* output, /* 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; @@ -12883,15 +12916,15 @@ 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); @@ -12903,19 +12936,21 @@ int wc_PKCS7_EncodeAuthEnvelopedData(PKCS7* pkcs7, byte* output, 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); @@ -12939,67 +12974,67 @@ int wc_PKCS7_EncodeAuthEnvelopedData(PKCS7* pkcs7, byte* output, 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; } XFREE(flatUnauthAttribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -13246,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 */ @@ -13302,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); } } @@ -13358,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; @@ -13385,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; @@ -13442,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; @@ -13491,8 +13527,8 @@ authenv_atrbend: } if (ret == 0) { - XMEMCPY(authTag, &pkiMsg[idx], authTagSz); - idx += authTagSz; + XMEMCPY(authTag, &pkiMsg[idx], (word32)authTagSz); + idx += (word32)authTagSz; } if (ret == 0 && authAttrib != NULL) { @@ -13517,14 +13553,14 @@ authenv_atrbend: /* 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); } } @@ -13548,7 +13584,7 @@ authenv_atrbend: break; } else { - XMEMCPY(nonce, pkcs7->stream->nonce, nonceSz); + XMEMCPY(nonce, pkcs7->stream->nonce, (word32)nonceSz); } } @@ -13560,7 +13596,7 @@ authenv_atrbend: break; } else { - XMEMCPY(authTag, pkcs7->stream->tag, authTagSz); + XMEMCPY(authTag, pkcs7->stream->tag, (word32)authTagSz); } } @@ -13580,8 +13616,9 @@ authenv_atrbend: /* 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; @@ -13593,7 +13630,7 @@ authenv_atrbend: } /* copy plaintext to output */ - XMEMCPY(output, encryptedContent, encryptedContentSz); + XMEMCPY(output, encryptedContent, (word32)encryptedContentSz); /* free memory, zero out keys */ ForceZero(encryptedContent, (word32)encryptedContentSz); @@ -13736,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); @@ -13780,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); @@ -13791,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 */ @@ -13815,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); @@ -13845,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); @@ -13873,36 +13912,36 @@ int wc_PKCS7_EncodeEncryptedData(PKCS7* pkcs7, byte* output, word32 outputSz) 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; } XFREE(attribs, pkcs7->heap, DYNAMIC_TYPE_PKCS7); @@ -14167,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; @@ -14188,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; } @@ -14217,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); } @@ -14248,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); @@ -14351,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; @@ -14387,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/port/Espressif/README.md b/wolfcrypt/src/port/Espressif/README.md index 40114f9fd..b2f9d60f5 100644 --- a/wolfcrypt/src/port/Espressif/README.md +++ b/wolfcrypt/src/port/Espressif/README.md @@ -160,10 +160,10 @@ ECDSA 256 sign 4 ops took 1.101 sec, avg 275.250 ms, 3.633 ops/sec ECDSA 256 verify 2 ops took 1.092 sec, avg 546.000 ms, 1.832 ops/sec ``` -Condition : -- Model : ESP32-WROOM-32 -- CPU Speed: 240Mhz -- ESP-IDF : v3.3-beta1-39-g6cb37ecc5(commit hash : 6cb37ecc5) +Condition : +- Model : ESP32-WROOM-32 +- CPU Speed: 240Mhz +- ESP-IDF : v3.3-beta1-39-g6cb37ecc5(commit hash : 6cb37ecc5) - OS : Ubuntu 18.04.1 LTS (Bionic Beaver) ## Support diff --git a/wolfcrypt/src/port/arm/armv8-32-aes-asm_c.c b/wolfcrypt/src/port/arm/armv8-32-aes-asm_c.c index f8ba89ac0..97edaf4a9 100644 --- a/wolfcrypt/src/port/arm/armv8-32-aes-asm_c.c +++ b/wolfcrypt/src/port/arm/armv8-32-aes-asm_c.c @@ -411,7 +411,7 @@ void AES_invert_key(unsigned char* ks_p, word32 rounds_p) static const uint32_t L_AES_ARM32_rcon[] = { 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000, 0x40000000, 0x80000000, - 0x1b000000, 0x36000000, + 0x1b000000, 0x36000000, }; void AES_set_encrypt_key(const unsigned char* key, word32 len, unsigned char* ks); diff --git a/wolfcrypt/src/port/atmel/README.md b/wolfcrypt/src/port/atmel/README.md index 1a7664394..01b11a040 100644 --- a/wolfcrypt/src/port/atmel/README.md +++ b/wolfcrypt/src/port/atmel/README.md @@ -24,7 +24,7 @@ Requires the Microchip CryptoAuthLib library. The examples in `wolfcrypt/src/por * `WOLFSSL_ATECC_TFLXTLS`: Enable support for Microchip TrustFLEX with custom PKI module configuration * `WOLFSSL_ATECC_DEBUG`: Enable wolfSSL ATECC debug messages. * `WOLFSSL_ATMEL`: Enables ASF hooks seeding random data using the `atmel_get_random_number` function. -* `WOLFSSL_ATMEL_TIME`: Enables the built-in `atmel_get_curr_time_and_date` function get getting time from ASF RTC. +* `WOLFSSL_ATMEL_TIME`: Enables the built-in `atmel_get_curr_time_and_date` function get getting time from ASF RTC. * `ATECC_GET_ENC_KEY`: Macro to define your own function for getting the encryption key. * `ATECC_SLOT_I2C_ENC`: Macro for the default encryption key slot. Can also get via the slot callback with `ATMEL_SLOT_ENCKEY`. * `ATECC_MAX_SLOT`: Macro for the maximum dynamically allocated slots. @@ -35,7 +35,7 @@ Requires the Microchip CryptoAuthLib library. The examples in `wolfcrypt/src/por `#define HAVE_PK_CALLBACKS` `#define WOLFSSL_ATECC_PKCB` -or +or `./configure CFLAGS="-DWOLFSSL_ATECC608A"` `#define WOLFSSL_ATECC608A` diff --git a/wolfcrypt/src/port/autosar/README.md b/wolfcrypt/src/port/autosar/README.md index 004989ae9..39fd501fa 100644 --- a/wolfcrypt/src/port/autosar/README.md +++ b/wolfcrypt/src/port/autosar/README.md @@ -31,15 +31,15 @@ There is an example test case located at wolfcrypt/src/port/autsar/example.c. Af ## 4.0 API Implemented -- Std_ReturnType Csm_Decrypt(uint32 jobId, - Crypto_OperationModeType mode, const uint8* dataPtr, uint32 dataLength, - uint8* resultPtr, uint32* resultLengthPtr); -- Std_ReturnType Csm_Encrypt(uint32 jobId, - Crypto_OperationModeType mode, const uint8* dataPtr, uint32 dataLength, - uint8* resultPtr, uint32* resultLengthPtr); -- Std_ReturnType Csm_KeyElementSet(uint32 keyId, uint32 keyElementId, - const uint8* keyPtr, uint32 keyLength); -- Std_ReturnType Csm_RandomGenerate( uint32 jobId, uint8* resultPtr, +- Std_ReturnType Csm_Decrypt(uint32 jobId, + Crypto_OperationModeType mode, const uint8* dataPtr, uint32 dataLength, + uint8* resultPtr, uint32* resultLengthPtr); +- Std_ReturnType Csm_Encrypt(uint32 jobId, + Crypto_OperationModeType mode, const uint8* dataPtr, uint32 dataLength, + uint8* resultPtr, uint32* resultLengthPtr); +- Std_ReturnType Csm_KeyElementSet(uint32 keyId, uint32 keyElementId, + const uint8* keyPtr, uint32 keyLength); +- Std_ReturnType Csm_RandomGenerate( uint32 jobId, uint8* resultPtr, uint32* resultLengthPtr); -Along with the structures necessary for these API. \ No newline at end of file +Along with the structures necessary for these API. diff --git a/wolfcrypt/src/port/kcapi/README.md b/wolfcrypt/src/port/kcapi/README.md index 459b0ec87..a325fe37b 100644 --- a/wolfcrypt/src/port/kcapi/README.md +++ b/wolfcrypt/src/port/kcapi/README.md @@ -27,7 +27,7 @@ cd libkcapi autoreconf -i -./configure --enable-kcapi-test \ +./configure --enable-kcapi-test \ --enable-kcapi-speed \ --enable-kcapi-hasher \ --enable-kcapi-rngapp \ diff --git a/wolfcrypt/src/port/riscv/riscv-64-sha512.c b/wolfcrypt/src/port/riscv/riscv-64-sha512.c index b5b7f213d..143dcc4a6 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/README.md b/wolfcrypt/src/port/st/README.md index af7c8b66a..8bdb8c9e0 100644 --- a/wolfcrypt/src/port/st/README.md +++ b/wolfcrypt/src/port/st/README.md @@ -73,7 +73,7 @@ At the wolfCrypt level we also support ECC native API's for `wc_ecc_*` using the `./configure --enable-pkcallbacks CFLAGS="-DWOLFSSL_STSAFEA100"` -or +or `#define HAVE_PK_CALLBACKS` `#define WOLFSSL_STSAFEA100` diff --git a/wolfcrypt/src/rsa.c b/wolfcrypt/src/rsa.c index 04291ae7c..bcfc81485 100644 --- a/wolfcrypt/src/rsa.c +++ b/wolfcrypt/src/rsa.c @@ -2392,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); @@ -2423,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); @@ -2454,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); @@ -2551,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; @@ -3112,6 +3127,9 @@ static int wc_RsaFunction_ex(const byte* in, word32 inLen, byte* out, int ret = 0; (void)rng; (void)checkSmallCt; +#if defined(WOLF_CRYPTO_CB) && defined(WOLF_CRYPTO_CB_RSA_PAD) + RsaPadding padding; +#endif if (key == NULL || in == NULL || inLen == 0 || out == NULL || outLen == NULL || *outLen == 0 || type == RSA_TYPE_UNKNOWN) { @@ -3123,7 +3141,18 @@ static int wc_RsaFunction_ex(const byte* in, word32 inLen, byte* out, if (key->devId != INVALID_DEVID) #endif { + #if defined(WOLF_CRYPTO_CB_RSA_PAD) + /* If we are here, either the RSA PAD callback was already called + * and returned that it could not implement for that padding scheme, + * or this is a public verify operation. Either way indicate to the + * callback that this should be a raw RSA operation with no padding.*/ + XMEMSET(&padding, 0, sizeof(RsaPadding)); + padding.pad_type = WC_RSA_NO_PAD; + ret = wc_CryptoCb_RsaPad(in, inLen, out, + outLen, type, key, rng, &padding); + #else ret = wc_CryptoCb_Rsa(in, inLen, out, outLen, type, key, rng); + #endif #ifndef WOLF_CRYPTO_CB_ONLY_RSA if (ret != WC_NO_ERR_TRACE(CRYPTOCB_UNAVAILABLE)) return ret; @@ -3231,6 +3260,9 @@ static int RsaPublicEncryptEx(const byte* in, word32 inLen, byte* out, int ret = 0; int sz; int state; +#if defined(WOLF_CRYPTO_CB) && defined(WOLF_CRYPTO_CB_RSA_PAD) + RsaPadding padding; +#endif if (in == NULL || inLen == 0 || out == NULL || key == NULL) { return BAD_FUNC_ARG; @@ -3327,6 +3359,29 @@ static int RsaPublicEncryptEx(const byte* in, word32 inLen, byte* out, #endif #endif /* WOLFSSL_SE050 */ + #if defined(WOLF_CRYPTO_CB) && defined(WOLF_CRYPTO_CB_RSA_PAD) + if (key->devId != INVALID_DEVID) { + XMEMSET(&padding, 0, sizeof(RsaPadding)); + padding.pad_value = pad_value; + padding.pad_type = pad_type; + padding.hash = hash; + padding.mgf = mgf; + padding.label = label; + padding.labelSz = labelSz; + padding.saltLen = saltLen; + ret = wc_CryptoCb_RsaPad(in, inLen, out, &outLen, rsa_type, key, rng, + &padding); + + if (ret != WC_NO_ERR_TRACE(CRYPTOCB_UNAVAILABLE)) { + if (ret < 0) { + break; + } + + ret = outLen; + break; + } + } + #endif key->state = RSA_STATE_ENCRYPT_PAD; ret = wc_RsaPad_ex(in, inLen, out, (word32)sz, pad_value, rng, pad_type, hash, mgf, label, labelSz, saltLen, @@ -3406,6 +3461,9 @@ static int RsaPrivateDecryptEx(const byte* in, word32 inLen, byte* out, { int ret = WC_NO_ERR_TRACE(RSA_WRONG_TYPE_E); byte* pad = NULL; +#if defined(WOLF_CRYPTO_CB) && defined(WOLF_CRYPTO_CB_RSA_PAD) + RsaPadding padding; +#endif if (in == NULL || inLen == 0 || out == NULL || key == NULL) { return BAD_FUNC_ARG; @@ -3516,6 +3574,25 @@ static int RsaPrivateDecryptEx(const byte* in, word32 inLen, byte* out, FALL_THROUGH; case RSA_STATE_DECRYPT_EXPTMOD: +#if defined(WOLF_CRYPTO_CB) && defined(WOLF_CRYPTO_CB_RSA_PAD) + if ((key->devId != INVALID_DEVID) && (rsa_type != RSA_PUBLIC_DECRYPT)) { + /* Everything except verify goes to crypto cb if + * WOLF_CRYPTO_CB_RSA_PAD defined */ + XMEMSET(&padding, 0, sizeof(RsaPadding)); + padding.pad_value = pad_value; + padding.pad_type = pad_type; + padding.hash = hash; + padding.mgf = mgf; + padding.label = label; + padding.labelSz = labelSz; + padding.saltLen = saltLen; + ret = wc_CryptoCb_RsaPad(in, inLen, out, + &outLen, rsa_type, key, rng, &padding); + if (ret != WC_NO_ERR_TRACE(CRYPTOCB_UNAVAILABLE)) { + break; + } + } +#endif #if !defined(WOLFSSL_RSA_VERIFY_ONLY) && !defined(WOLFSSL_RSA_VERIFY_INLINE) && \ !defined(WOLFSSL_NO_MALLOC) ret = wc_RsaFunction_ex(key->data, inLen, key->data, &key->dataLen, diff --git a/wolfcrypt/src/sha256.c b/wolfcrypt/src/sha256.c index 2ba9ca62d..136369151 100644 --- a/wolfcrypt/src/sha256.c +++ b/wolfcrypt/src/sha256.c @@ -1255,6 +1255,9 @@ static int InitSha256(wc_Sha256* sha256) { word32 S[8], t0, t1; int i; + #ifdef USE_SLOW_SHA256 + int j; + #endif word32 W[WC_SHA256_BLOCK_SIZE/sizeof(word32)]; /* Copy digest to working vars */ @@ -1268,6 +1271,16 @@ static int InitSha256(wc_Sha256* sha256) S[7] = sha256->digest[7]; i = 0; + #ifdef USE_SLOW_SHA256 + for (j = 0; j < 16; j++) { + RND1(j); + } + for (i = 16; i < 64; i += 16) { + for (j = 0; j < 16; j++) { + RNDN(j); + } + } + #else RND1( 0); RND1( 1); RND1( 2); RND1( 3); RND1( 4); RND1( 5); RND1( 6); RND1( 7); RND1( 8); RND1( 9); RND1(10); RND1(11); @@ -1279,6 +1292,7 @@ static int InitSha256(wc_Sha256* sha256) RNDN( 8); RNDN( 9); RNDN(10); RNDN(11); RNDN(12); RNDN(13); RNDN(14); RNDN(15); } + #endif /* Add the working vars back into digest */ sha256->digest[0] += S[0]; diff --git a/wolfcrypt/src/sp_int.c b/wolfcrypt/src/sp_int.c index 8c727d738..ee2a41b19 100644 --- a/wolfcrypt/src/sp_int.c +++ b/wolfcrypt/src/sp_int.c @@ -168,7 +168,7 @@ This library provides single precision (SP) integer math functions. do { \ ALLOC_SP_INT(n, s, err, h); \ if ((err) == MP_OKAY) { \ - (n)->size = (s); \ + (n)->size = (sp_size_t)(s); \ } \ } \ while (0) @@ -187,7 +187,7 @@ This library provides single precision (SP) integer math functions. do { \ ALLOC_SP_INT(n, s, err, h); \ if ((err) == MP_OKAY) { \ - (n)->size = (unsigned int)(s); \ + (n)->size = (sp_size_t)(s); \ } \ } \ while (0) @@ -222,19 +222,17 @@ This library provides single precision (SP) integer math functions. /* Declare a variable that will be assigned a value on XMALLOC. */ #define DECL_SP_INT_ARRAY(n, s, c) \ DECL_DYN_SP_INT_ARRAY(n, s, c) -#else - #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ !defined(WOLFSSL_SP_NO_DYN_STACK) - /* Declare a variable on the stack with the required data size. */ - #define DECL_SP_INT_ARRAY(n, s, c) \ - byte n##d[MP_INT_SIZEOF(s) * (c)]; \ - sp_int* (n)[c] = { NULL, } - #else - /* Declare a variable on the stack. */ - #define DECL_SP_INT_ARRAY(n, s, c) \ - sp_int n##d[c]; \ - sp_int* (n)[c] - #endif + /* Declare a variable on the stack with the required data size. */ + #define DECL_SP_INT_ARRAY(n, s, c) \ + byte n##d[MP_INT_SIZEOF(s) * (c)]; \ + sp_int* (n)[c] = { NULL, } +#else + /* Declare a variable on the stack. */ + #define DECL_SP_INT_ARRAY(n, s, c) \ + sp_int n##d[c]; \ + sp_int* (n)[c] #endif /* Dynamically allocate just enough data to support multiple sp_ints of the @@ -255,10 +253,10 @@ do { \ else { \ int n##ii; \ (n)[0] = n##d; \ - (n)[0]->size = (s); \ + (n)[0]->size = (sp_size_t)(s); \ for (n##ii = 1; n##ii < (int)(c); n##ii++) { \ (n)[n##ii] = MP_INT_NEXT((n)[n##ii-1], s); \ - (n)[n##ii]->size = (s); \ + (n)[n##ii]->size = (sp_size_t)(s); \ } \ } \ } \ @@ -270,47 +268,45 @@ while (0) !defined(WOLFSSL_SP_NO_MALLOC) #define ALLOC_SP_INT_ARRAY(n, s, c, err, h) \ ALLOC_DYN_SP_INT_ARRAY(n, s, c, err, h) -#else - #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ !defined(WOLFSSL_SP_NO_DYN_STACK) - /* Data declared on stack that supports multiple sp_ints of the - * required size. Use pointers into data to make up array and set sizes. - */ - #define ALLOC_SP_INT_ARRAY(n, s, c, err, h) \ - do { \ - if (((err) == MP_OKAY) && ((s) > SP_INT_DIGITS)) { \ - (err) = MP_VAL; \ - } \ - if ((err) == MP_OKAY) { \ - int n##ii; \ - (n)[0] = (sp_int*)n##d; \ - ((sp_int_minimal*)(n)[0])->size = (s); \ - for (n##ii = 1; n##ii < (int)(c); n##ii++) { \ - (n)[n##ii] = MP_INT_NEXT((n)[n##ii-1], s); \ - ((sp_int_minimal*)(n)[n##ii])->size = (s); \ - } \ + /* Data declared on stack that supports multiple sp_ints of the + * required size. Use pointers into data to make up array and set sizes. + */ + #define ALLOC_SP_INT_ARRAY(n, s, c, err, h) \ + do { \ + if (((err) == MP_OKAY) && ((s) > SP_INT_DIGITS)) { \ + (err) = MP_VAL; \ + } \ + if ((err) == MP_OKAY) { \ + int n##ii; \ + (n)[0] = (sp_int*)n##d; \ + ((sp_int_minimal*)(n)[0])->size = (sp_size_t)(s); \ + for (n##ii = 1; n##ii < (int)(c); n##ii++) { \ + (n)[n##ii] = MP_INT_NEXT((n)[n##ii-1], s); \ + ((sp_int_minimal*)(n)[n##ii])->size = (sp_size_t)(s); \ } \ } \ - while (0) - #else - /* Data declared on stack that supports multiple sp_ints of the - * required size. Set into array and set sizes. - */ - #define ALLOC_SP_INT_ARRAY(n, s, c, err, h) \ - do { \ - if (((err) == MP_OKAY) && ((s) > SP_INT_DIGITS)) { \ - (err) = MP_VAL; \ - } \ - if ((err) == MP_OKAY) { \ - int n##ii; \ - for (n##ii = 0; n##ii < (int)(c); n##ii++) { \ - (n)[n##ii] = &n##d[n##ii]; \ - (n)[n##ii]->size = (s); \ - } \ + } \ + while (0) +#else + /* Data declared on stack that supports multiple sp_ints of the + * required size. Set into array and set sizes. + */ + #define ALLOC_SP_INT_ARRAY(n, s, c, err, h) \ + do { \ + if (((err) == MP_OKAY) && ((s) > SP_INT_DIGITS)) { \ + (err) = MP_VAL; \ + } \ + if ((err) == MP_OKAY) { \ + int n##ii; \ + for (n##ii = 0; n##ii < (int)(c); n##ii++) { \ + (n)[n##ii] = &n##d[n##ii]; \ + (n)[n##ii]->size = (sp_size_t)(s); \ } \ } \ - while (0) - #endif + } \ + while (0) #endif /* Free data variable that was dynamically allocated. */ @@ -4862,7 +4858,7 @@ static void _sp_init_size(sp_int* a, unsigned int size) #endif _sp_zero((sp_int*)am); - a->size = size; + a->size = (sp_size_t)size; } /* Initialize the multi-precision number to be zero with a given max size. @@ -5217,8 +5213,8 @@ int sp_exch(sp_int* a, sp_int* b) ALLOC_SP_INT(t, a->used, err, NULL); if (err == MP_OKAY) { /* Cache allocated size of a and b. */ - unsigned int asize = a->size; - unsigned int bsize = b->size; + sp_size_t asize = a->size; + sp_size_t bsize = b->size; /* Copy all of SP int: t <- a, a <- b, b <- t. */ XMEMCPY(t, a, MP_INT_SIZEOF(a->used)); XMEMCPY(a, b, MP_INT_SIZEOF(b->used)); @@ -5254,9 +5250,9 @@ int sp_cond_swap_ct_ex(sp_int* a, sp_int* b, int cnt, int swap, sp_int* t) sp_int_digit mask = (sp_int_digit)0 - (sp_int_digit)swap; /* XOR other fields in sp_int into temp - mask set when swapping. */ - t->used = (a->used ^ b->used) & (unsigned int)mask; + t->used = (a->used ^ b->used) & (sp_size_t)mask; #ifdef WOLFSSL_SP_INT_NEGATIVE - t->sign = (a->sign ^ b->sign) & (unsigned int)mask; + t->sign = (a->sign ^ b->sign) & (sp_uint8)mask; #endif /* XOR requested words into temp - mask set when swapping. */ @@ -5722,7 +5718,7 @@ int sp_cnt_lsb(const sp_int* a) unsigned int j; /* Count least significant words that are zero. */ - for (i = 0; i < a->used && a->dp[i] == 0; i++, bc += SP_WORD_SIZE) { + for (i = 0; (i < a->used) && (a->dp[i] == 0); i++, bc += SP_WORD_SIZE) { } /* Use 4-bit table to get count. */ @@ -5793,7 +5789,7 @@ int sp_set_bit(sp_int* a, int i) { int err = MP_OKAY; /* Get index of word to set. */ - unsigned int w = (unsigned int)(i >> SP_WORD_SHIFT); + sp_size_t w = (sp_size_t)(i >> SP_WORD_SHIFT); /* Check for valid number and and space for bit. */ if ((a == NULL) || (i < 0) || (w >= a->size)) { @@ -6329,7 +6325,7 @@ static int _sp_mul_d(const sp_int* a, sp_int_digit d, sp_int* r, unsigned int o) } } /* Update number of words in result. */ - r->used = o; + r->used = (sp_size_t)o; /* In case n is zero. */ sp_clamp(r); @@ -7060,7 +7056,7 @@ static void _sp_div_2(const sp_int* a, sp_int* r) /* Last word only needs to be shifted down. */ r->dp[i] = a->dp[i] >> 1; /* Set used to be all words seen. */ - r->used = (unsigned int)i + 1; + r->used = (sp_size_t)i + 1; /* Remove leading zeros. */ sp_clamp(r); #ifdef WOLFSSL_SP_INT_NEGATIVE @@ -7136,7 +7132,7 @@ int sp_div_2_mod_ct(const sp_int* a, const sp_int* m, sp_int* r) #endif /* Mask to apply to modulus. */ sp_int_digit mask = (sp_int_digit)0 - (a->dp[0] & 1); - unsigned int i; + sp_size_t i; #if 0 sp_print(a, "a"); @@ -7211,7 +7207,7 @@ int sp_div_2_mod_ct(const sp_int* a, const sp_int* m, sp_int* r) */ static void _sp_add_off(const sp_int* a, const sp_int* b, sp_int* r, int o) { - unsigned int i = 0; + sp_size_t i = 0; #ifndef SQR_MUL_ASM sp_int_word t = 0; #else @@ -7332,10 +7328,10 @@ static void _sp_add_off(const sp_int* a, const sp_int* b, sp_int* r, int o) /* Put in carry. */ #ifndef SQR_MUL_ASM r->dp[i] = (sp_int_digit)t; - r->used += (t != 0); + r->used = (sp_size_t)(r->used + (sp_size_t)(t != 0)); #else r->dp[i] = l; - r->used += (l != 0); + r->used = (sp_size_t)(r->used + (sp_size_t)(l != 0)); #endif /* Remove leading zeros. */ @@ -7359,8 +7355,8 @@ static void _sp_add_off(const sp_int* a, const sp_int* b, sp_int* r, int o) static void _sp_sub_off(const sp_int* a, const sp_int* b, sp_int* r, unsigned int o) { - unsigned int i = 0; - unsigned int j; + sp_size_t i = 0; + sp_size_t j; #ifndef SQR_MUL_ASM sp_int_sword t = 0; #else @@ -7375,7 +7371,7 @@ static void _sp_sub_off(const sp_int* a, const sp_int* b, sp_int* r, } } else { - i = o; + i = (sp_size_t)o; } /* Index to add at is the offset now. */ @@ -7569,7 +7565,7 @@ static int _sp_addmod(const sp_int* a, const sp_int* b, const sp_int* m, { int err = MP_OKAY; /* Calculate used based on digits used in a and b. */ - unsigned int used = ((a->used >= b->used) ? a->used + 1 : b->used + 1); + sp_size_t used = ((a->used >= b->used) ? a->used + 1 : b->used + 1); DECL_SP_INT(t, used); /* Allocate a temporary SP int to hold sum. */ @@ -7690,7 +7686,7 @@ static int _sp_submod(const sp_int* a, const sp_int* b, const sp_int* m, FREE_SP_INT_ARRAY(t, NULL); #else /* WOLFSSL_SP_INT_NEGATIVE */ - unsigned int used = ((a->used >= b->used) ? a->used + 1 : b->used + 1); + sp_size_t used = ((a->used >= b->used) ? a->used + 1 : b->used + 1); DECL_SP_INT(t, used); ALLOC_SP_INT_SIZE(t, used, err, NULL); @@ -7766,12 +7762,12 @@ int sp_submod(const sp_int* a, const sp_int* b, const sp_int* m, sp_int* r) static void sp_clamp_ct(sp_int* a) { int i; - unsigned int used = a->used; - unsigned int mask = (unsigned int)-1; + sp_size_t used = a->used; + sp_size_t mask = (sp_size_t)-1; for (i = (int)a->used - 1; i >= 0; i--) { - used -= ((unsigned int)(a->dp[i] == 0)) & mask; - mask &= (unsigned int)0 - (a->dp[i] == 0); + used = (sp_size_t)(used - ((a->dp[i] == 0) & mask)); + mask &= (sp_size_t)(0 - (a->dp[i] == 0)); } a->used = used; } @@ -7807,7 +7803,7 @@ int sp_addmod_ct(const sp_int* a, const sp_int* b, const sp_int* m, sp_int* r) sp_int_digit mask; sp_int_digit mask_a = (sp_int_digit)-1; sp_int_digit mask_b = (sp_int_digit)-1; - unsigned int i; + sp_size_t i; /* Check result is as big as modulus. */ if (m->used > r->size) { @@ -8044,7 +8040,7 @@ static void _sp_submod_ct(const sp_int* a, const sp_int* b, const sp_int* m, } /* Result will always have digits equal to or less than those in * modulus. */ - r->used = i; + r->used = (sp_size_t)i; #ifdef WOLFSSL_SP_INT_NEGATIVE r->sign = MP_ZPOS; #endif /* WOLFSSL_SP_INT_NEGATIVE */ @@ -8153,7 +8149,7 @@ int sp_lshd(sp_int* a, int s) /* Back fill with zeros. */ XMEMSET(a->dp, 0, (size_t)s * SP_WORD_SIZEOF); /* Update used. */ - a->used += (unsigned int)s; + a->used += (sp_size_t)s; /* Remove leading zeros. */ sp_clamp(a); } @@ -8182,7 +8178,7 @@ static int sp_lshb(sp_int* a, int n) if (a->used != 0) { /* Calculate number of digits to shift. */ - unsigned int s = (unsigned int)n >> SP_WORD_SHIFT; + sp_size_t s = (sp_size_t)n >> SP_WORD_SHIFT; /* Ensure number has enough digits for result. */ if (a->used + s >= a->size) { @@ -8240,14 +8236,14 @@ void sp_rshd(sp_int* a, int c) /* Do shift if we have an SP int. */ if ((a != NULL) && (c > 0)) { /* Make zero if shift removes all digits. */ - if ((unsigned int)c >= a->used) { + if ((sp_size_t)c >= a->used) { _sp_zero(a); } else { - unsigned int i; + sp_size_t i; /* Update used digits count. */ - a->used -= (unsigned int)c; + a->used -= (sp_size_t)c; /* Move digits down. */ for (i = 0; i < a->used; i++, c++) { a->dp[i] = a->dp[c]; @@ -8270,7 +8266,7 @@ int sp_rshb(const sp_int* a, int n, sp_int* r) { int err = MP_OKAY; /* Number of digits to shift down. */ - unsigned int i = (unsigned int)(n >> SP_WORD_SHIFT); + sp_size_t i = (sp_size_t)(n >> SP_WORD_SHIFT); if ((a == NULL) || (n < 0)) { err = MP_VAL; @@ -8284,7 +8280,7 @@ int sp_rshb(const sp_int* a, int n, sp_int* r) err = MP_VAL; } else if (err == MP_OKAY) { - unsigned int j; + sp_size_t j; /* Number of bits to shift in digits. */ n &= SP_WORD_SIZE - 1; @@ -8302,12 +8298,12 @@ int sp_rshb(const sp_int* a, int n, sp_int* r) } else { /* Move the bits down starting at least significant digit. */ - for (j = 0; i < a->used-1; i++, j++) + for (j = 0; i < a->used - 1; i++, j++) r->dp[j] = (a->dp[i] >> n) | (a->dp[i+1] << (SP_WORD_SIZE - n)); /* Most significant digit has no higher digit to pull from. */ r->dp[j] = a->dp[i] >> n; /* Set the count of used digits. */ - r->used = j + (r->dp[j] > 0); + r->used = (sp_size_t)(j + (r->dp[j] > 0)); } #ifdef WOLFSSL_SP_INT_NEGATIVE if (sp_iszero(r)) { @@ -8331,7 +8327,7 @@ int sp_rshb(const sp_int* a, int n, sp_int* r) !defined(WOLFSSL_RSA_PUBLIC_ONLY)) static void _sp_div_same_size(sp_int* a, const sp_int* d, sp_int* r) { - unsigned int i; + sp_size_t i; /* Compare top digits of dividend with those of divisor up to last. */ for (i = d->used - 1; i > 0; i--) { @@ -8369,12 +8365,12 @@ static void _sp_div_same_size(sp_int* a, const sp_int* d, sp_int* r) static int _sp_div_impl(sp_int* a, const sp_int* d, sp_int* r, sp_int* trial) { int err = MP_OKAY; - unsigned int i; + sp_size_t i; #ifdef WOLFSSL_SP_SMALL int c; #else - unsigned int j; - unsigned int o; + sp_size_t j; + sp_size_t o; #ifndef SQR_MUL_ASM sp_int_sword sw; #else @@ -8387,7 +8383,7 @@ static int _sp_div_impl(sp_int* a, const sp_int* d, sp_int* r, sp_int* trial) sp_int_digit dt; /* Set result size to clear. */ - r->used = a->used - d->used + 1; + r->used = (sp_size_t)(a->used - d->used + 1); /* Set all potentially used digits to zero. */ for (i = 0; i < r->used; i++) { r->dp[i] = 0; @@ -8560,8 +8556,8 @@ static int _sp_div(const sp_int* a, const sp_int* d, sp_int* r, sp_int* rem, sp_int* tr = NULL; sp_int* trial = NULL; #ifdef WOLFSSL_SP_INT_NEGATIVE - unsigned int signA = MP_ZPOS; - unsigned int signD = MP_ZPOS; + sp_uint8 signA = MP_ZPOS; + sp_uint8 signD = MP_ZPOS; #endif /* WOLFSSL_SP_INT_NEGATIVE */ /* Intermediates will always be less than or equal to dividend. */ DECL_SP_INT_ARRAY(td, used, 4); @@ -8655,7 +8651,7 @@ static int _sp_div(const sp_int* a, const sp_int* d, sp_int* r, sp_int* rem, tr = td[3]; _sp_init_size(sa, used); - _sp_init_size(tr, a->used - d->used + 2); + _sp_init_size(tr, (unsigned int)(a->used - d->used + 2)); #endif sd = td[0]; trial = td[1]; @@ -8936,7 +8932,7 @@ static int _sp_mul_nxn(const sp_int* a, const sp_int* b, sp_int* r) t[0] = h; h = 0; o = 0; - for (k = 1; k <= a->used - 1; k++) { + for (k = 1; k <= (unsigned int)a->used - 1; k++) { j = (int)k; dp = a->dp; for (; j >= 0; dp++, j--) { @@ -8947,8 +8943,8 @@ static int _sp_mul_nxn(const sp_int* a, const sp_int* b, sp_int* r) h = o; o = 0; } - for (; k <= (a->used - 1) * 2; k++) { - i = k - (b->used - 1); + for (; k <= ((unsigned int)a->used - 1) * 2; k++) { + i = k - (sp_size_t)(b->used - 1); dp = &b->dp[b->used - 1]; for (; i < a->used; i++, dp--) { SP_ASM_MUL_ADD(l, h, o, a->dp[i], dp[0]); @@ -8960,7 +8956,7 @@ static int _sp_mul_nxn(const sp_int* a, const sp_int* b, sp_int* r) } r->dp[k] = l; XMEMCPY(r->dp, t, a->used * sizeof(sp_int_digit)); - r->used = k + 1; + r->used = (sp_size_t)(k + 1); sp_clamp(r); } @@ -8982,9 +8978,9 @@ static int _sp_mul_nxn(const sp_int* a, const sp_int* b, sp_int* r) static int _sp_mul(const sp_int* a, const sp_int* b, sp_int* r) { int err = MP_OKAY; - unsigned int i; + sp_size_t i; int j; - unsigned int k; + sp_size_t k; #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) sp_int_digit* t = NULL; #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ @@ -9012,7 +9008,7 @@ static int _sp_mul(const sp_int* a, const sp_int* b, sp_int* r) t[0] = h; h = 0; o = 0; - for (k = 1; k <= b->used - 1; k++) { + for (k = 1; k <= (sp_size_t)(b->used - 1); k++) { i = 0; j = (int)k; for (; (i < a->used) && (j >= 0); i++, j--) { @@ -9023,9 +9019,9 @@ static int _sp_mul(const sp_int* a, const sp_int* b, sp_int* r) h = o; o = 0; } - for (; k <= (a->used - 1) + (b->used - 1); k++) { + for (; k <= (sp_size_t)((a->used - 1) + (b->used - 1)); k++) { j = (int)(b->used - 1); - i = k - (unsigned int)j; + i = k - (sp_size_t)j; for (; (i < a->used) && (j >= 0); i++, j--) { SP_ASM_MUL_ADD(l, h, o, a->dp[i], b->dp[j]); } @@ -9035,7 +9031,7 @@ static int _sp_mul(const sp_int* a, const sp_int* b, sp_int* r) o = 0; } t[k] = l; - r->used = k + 1; + r->used = (sp_size_t)(k + 1); XMEMCPY(r->dp, t, r->used * sizeof(sp_int_digit)); sp_clamp(r); } @@ -9058,9 +9054,9 @@ static int _sp_mul(const sp_int* a, const sp_int* b, sp_int* r) static int _sp_mul(const sp_int* a, const sp_int* b, sp_int* r) { int err = MP_OKAY; - unsigned int i; + sp_size_t i; int j; - unsigned int k; + sp_size_t k; #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) sp_int_digit* t = NULL; #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ @@ -9093,8 +9089,8 @@ static int _sp_mul(const sp_int* a, const sp_int* b, sp_int* r) o = 0; #endif for (k = 1; k <= (a->used - 1) + (b->used - 1); k++) { - i = k - (b->used - 1); - i &= (((unsigned int)i >> (sizeof(i) * 8 - 1)) - 1U); + i = k - (sp_size_t)(b->used - 1); + i &= (sp_size_t)(((unsigned int)i >> (sizeof(i) * 8 - 1)) - 1U); j = (int)(k - i); for (; (i < a->used) && (j >= 0); i++, j--) { w = (sp_int_word)a->dp[i] * b->dp[j]; @@ -9117,7 +9113,7 @@ static int _sp_mul(const sp_int* a, const sp_int* b, sp_int* r) #endif } t[k] = (sp_int_digit)l; - r->used = k + 1; + r->used = (sp_size_t)(k + 1); XMEMCPY(r->dp, t, r->used * sizeof(sp_int_digit)); sp_clamp(r); } @@ -11738,7 +11734,7 @@ int sp_mul(const sp_int* a, const sp_int* b, sp_int* r) { int err = MP_OKAY; #ifdef WOLFSSL_SP_INT_NEGATIVE - unsigned int sign = MP_ZPOS; + sp_uint8 sign = MP_ZPOS; #endif if ((a == NULL) || (b == NULL) || (r == NULL)) { @@ -12131,7 +12127,7 @@ static int _sp_invmod_div(const sp_int* a, const sp_int* m, sp_int* x, ALLOC_SP_INT(d, m->used + 1, err, NULL); if (err == MP_OKAY) { - mp_init(d); + sp_init_size(d, m->used + 1); /* 1. x = m, y = a, b = 1, c = 0 */ if (a != y) { @@ -12293,7 +12289,7 @@ static int _sp_invmod(const sp_int* a, const sp_int* m, sp_int* r) err = sp_init_size(b, m->used + 1); } if (err == MP_OKAY) { - err = sp_init_size(c, 2 * m->used + 1); + err = sp_init_size(c, (sp_size_t)(2 * m->used + 1)); } if (err == MP_OKAY) { @@ -12497,12 +12493,12 @@ static int _sp_invmod_mont_ct(const sp_int* a, const sp_int* m, sp_int* r, t = pre[CT_INV_MOD_PRE_CNT + 0]; e = pre[CT_INV_MOD_PRE_CNT + 1]; /* Space for sqr and mul result. */ - _sp_init_size(t, m->used * 2 + 1); + _sp_init_size(t, (sp_size_t)(m->used * 2 + 1)); /* e = mod - 2 */ - _sp_init_size(e, m->used + 1); + _sp_init_size(e, (sp_size_t)(m->used + 1)); /* Create pre-computation results: ((2^(1..8))-1).a. */ - _sp_init_size(pre[0], m->used * 2 + 1); + _sp_init_size(pre[0], (sp_size_t)(m->used * 2 + 1)); /* 1. pre[0] = 2^0 * a mod m * Start with 1.a = a. */ @@ -12513,7 +12509,7 @@ static int _sp_invmod_mont_ct(const sp_int* a, const sp_int* m, sp_int* r, for (i = 1; (err == MP_OKAY) && (i < CT_INV_MOD_PRE_CNT); i++) { /* 2.1 pre[i-1] = ((pre[i-1] ^ 2) * a) mod m */ /* Previous value ..1 -> ..10 */ - _sp_init_size(pre[i], m->used * 2 + 1); + _sp_init_size(pre[i], (sp_size_t)(m->used * 2 + 1)); err = sp_sqr(pre[i-1], pre[i]); if (err == MP_OKAY) { err = _sp_mont_red(pre[i], m, mp, 0); @@ -12739,10 +12735,10 @@ static int _sp_exptmod_ex(const sp_int* b, const sp_int* e, int bits, #endif if (err == MP_OKAY) { /* Initialize temporaries. */ - _sp_init_size(t[0], 2 * m->used + 1); - _sp_init_size(t[1], 2 * m->used + 1); + _sp_init_size(t[0], (sp_size_t)(m->used * 2 + 1)); + _sp_init_size(t[1], (sp_size_t)(m->used * 2 + 1)); #ifndef WC_NO_CACHE_RESISTANT - _sp_init_size(t[2], 2 * m->used + 1); + _sp_init_size(t[2], (sp_size_t)(m->used * 2 + 1)); #endif /* 2. t[0] = b mod m @@ -12970,10 +12966,10 @@ static int _sp_exptmod_mont_ex(const sp_int* b, const sp_int* e, int bits, ALLOC_SP_INT_ARRAY(t, m->used * 2 + 1, 4, err, NULL); if (err == MP_OKAY) { /* Initialize temporaries. */ - _sp_init_size(t[0], m->used * 2 + 1); - _sp_init_size(t[1], m->used * 2 + 1); - _sp_init_size(t[2], m->used * 2 + 1); - _sp_init_size(t[3], m->used * 2 + 1); + _sp_init_size(t[0], (sp_size_t)(m->used * 2 + 1)); + _sp_init_size(t[1], (sp_size_t)(m->used * 2 + 1)); + _sp_init_size(t[2], (sp_size_t)(m->used * 2 + 1)); + _sp_init_size(t[3], (sp_size_t)(m->used * 2 + 1)); /* 1. Ensure base is less than modulus. */ if (_sp_cmp_abs(b, m) != MP_LT) { @@ -13512,9 +13508,9 @@ static int _sp_exptmod_base_2(const sp_int* e, int digits, const sp_int* m, a = d[0]; tr = d[1]; - _sp_init_size(a, m->used * 2 + 1); + _sp_init_size(a, (sp_size_t)(m->used * 2 + 1)); #endif - _sp_init_size(tr, m->used * 2 + 1); + _sp_init_size(tr, (sp_size_t)(m->used * 2 + 1)); } @@ -13974,10 +13970,10 @@ static int _sp_exptmod_nct(const sp_int* b, const sp_int* e, const sp_int* m, /* Initialize all allocated */ for (i = 0; i < preCnt; i++) { - _sp_init_size(t[i], m->used * 2 + 1); + _sp_init_size(t[i], (sp_size_t)(m->used * 2 + 1)); } - _sp_init_size(tr, m->used * 2 + 1); - _sp_init_size(bm, m->used * 2 + 1); + _sp_init_size(tr, (sp_size_t)(m->used * 2 + 1)); + _sp_init_size(bm, (sp_size_t)(m->used * 2 + 1)); /* 1. Ensure base is less than modulus. */ if (_sp_cmp_abs(b, m) != MP_LT) { @@ -14432,8 +14428,8 @@ int sp_div_2d(const sp_int* a, int e, sp_int* r, sp_int* rem) } if ((err == MP_OKAY) && (rem != NULL)) { /* Set used and mask off top digit of remainder. */ - rem->used = ((unsigned int)e + SP_WORD_SIZE - 1) >> - SP_WORD_SHIFT; + rem->used = (sp_size_t)((e + SP_WORD_SIZE - 1) >> + SP_WORD_SHIFT); e &= SP_WORD_MASK; if (e > 0) { rem->dp[rem->used - 1] &= ((sp_int_digit)1 << e) - 1; @@ -14467,7 +14463,7 @@ int sp_div_2d(const sp_int* a, int e, sp_int* r, sp_int* rem) int sp_mod_2d(const sp_int* a, int e, sp_int* r) { int err = MP_OKAY; - unsigned int digits = ((unsigned int)e + SP_WORD_SIZE - 1) >> SP_WORD_SHIFT; + sp_size_t digits = (sp_size_t)((e + SP_WORD_SIZE - 1) >> SP_WORD_SHIFT); if ((a == NULL) || (r == NULL) || (e < 0)) { err = MP_VAL; @@ -14548,7 +14544,8 @@ int sp_mul_2d(const sp_int* a, int e, sp_int* r) /* Ensure result has enough allocated digits for result. */ if ((err == MP_OKAY) && - ((unsigned int)(sp_count_bits(a) + e) > r->size * SP_WORD_SIZE)) { + ((unsigned int)(sp_count_bits(a) + e) > + (unsigned int)r->size * SP_WORD_SIZE)) { err = MP_VAL; } @@ -14598,9 +14595,9 @@ int sp_mul_2d(const sp_int* a, int e, sp_int* r) static int _sp_sqr(const sp_int* a, sp_int* r) { int err = MP_OKAY; - unsigned int i; + sp_size_t i; int j; - unsigned int k; + sp_size_t k; #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) sp_int_digit* t = NULL; #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ @@ -14640,7 +14637,7 @@ static int _sp_sqr(const sp_int* a, sp_int* r) t[0] = h; h = 0; o = 0; - for (k = 1; k < (a->used + 1) / 2; k++) { + for (k = 1; k < (sp_size_t)((a->used + 1) / 2); k++) { i = k; j = (int)(k - 1); for (; (j >= 0); i++, j--) { @@ -14652,7 +14649,7 @@ static int _sp_sqr(const sp_int* a, sp_int* r) o = 0; SP_ASM_SQR_ADD(l, h, o, a->dp[k]); - i = k + 1; + i = (sp_size_t)(k + 1); j = (int)(k - 1); for (; (j >= 0); i++, j--) { SP_ASM_MUL_ADD2(l, h, o, a->dp[i], a->dp[j]); @@ -14674,7 +14671,7 @@ static int _sp_sqr(const sp_int* a, sp_int* r) o = 0; SP_ASM_SQR_ADD(l, h, o, a->dp[k]); - i = k + 1; + i = (sp_size_t)(k + 1); j = (int)(k - 1); for (; (i < a->used); i++, j--) { SP_ASM_MUL_ADD2(l, h, o, a->dp[i], a->dp[j]); @@ -14687,7 +14684,8 @@ static int _sp_sqr(const sp_int* a, sp_int* r) p = r->dp; } r->dp[k * 2 - 1] = l; - XMEMCPY(r->dp, t, (((a->used + 1) / 2) * 2 + 1) * sizeof(sp_int_digit)); + XMEMCPY(r->dp, t, (size_t)(((a->used + 1) / 2) * 2 + 1) * + sizeof(sp_int_digit)); } if (err == MP_OKAY) { @@ -14712,9 +14710,9 @@ static int _sp_sqr(const sp_int* a, sp_int* r) static int _sp_sqr(const sp_int* a, sp_int* r) { int err = MP_OKAY; - unsigned int i; + sp_size_t i; int j; - unsigned int k; + sp_size_t k; #if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_SP_NO_MALLOC) sp_int_digit* t = NULL; #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ @@ -14752,7 +14750,7 @@ static int _sp_sqr(const sp_int* a, sp_int* r) #ifdef SP_WORD_OVERFLOW o = 0; #endif - for (k = 1; k <= (a->used - 1) * 2; k++) { + for (k = 1; k <= (sp_size_t)((a->used - 1) * 2); k++) { i = k / 2; j = (int)(k - i); if (i == (unsigned int)j) { @@ -14795,7 +14793,7 @@ static int _sp_sqr(const sp_int* a, sp_int* r) #endif } t[k] = (sp_int_digit)l; - r->used = k + 1; + r->used = (sp_size_t)(k + 1); XMEMCPY(r->dp, t, r->used * sizeof(sp_int_digit)); sp_clamp(r); } @@ -17148,7 +17146,7 @@ static int _sp_mont_red(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) /* Adding numbers into m->used * 2 digits - zero out unused digits. */ #ifndef WOLFSSL_NO_CT_OPS if (ct) { - for (i = 0; i < m->used * 2; i++) { + for (i = 0; i < (unsigned int)m->used * 2; i++) { a->dp[i] &= (sp_int_digit) (sp_int_sdigit)ctMaskIntGTE((int)(a->used-1), (int)i); @@ -17157,7 +17155,7 @@ static int _sp_mont_red(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) else #endif /* !WOLFSSL_NO_CT_OPS */ { - for (i = a->used; i < m->used * 2; i++) { + for (i = a->used; i < (unsigned int)m->used * 2; i++) { a->dp[i] = 0; } } @@ -17195,7 +17193,7 @@ static int _sp_mont_red(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) /* 2.1. mu = (mp * DigitMask(a, i)) & WORD_MASK */ mu = mp * a->dp[i]; /* 2.2. If i == NumDigits(m)-1 and mask != 0 then mu & = mask */ - if ((i == m->used - 1) && (mask != 0)) { + if ((i == (unsigned int)m->used - 1) && (mask != 0)) { mu &= mask; } @@ -17205,7 +17203,7 @@ static int _sp_mont_red(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) a->dp[i] = (sp_int_digit)w; w >>= SP_WORD_SIZE; /* 2.4. For j = 1 up to NumDigits(m)-2 */ - for (j = 1; j < m->used - 1; j++) { + for (j = 1; j < (unsigned int)m->used - 1; j++) { /* 2.4.1 a += mu * DigitMask(m, j) */ w += a->dp[i + j]; w += (sp_int_word)mu * m->dp[j]; @@ -17227,7 +17225,7 @@ static int _sp_mont_red(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) a->dp[m->used * 2 - 1] = (sp_int_digit)o; o >>= SP_WORD_SIZE; a->dp[m->used * 2] = (sp_int_digit)o; - a->used = m->used * 2 + 1; + a->used = (sp_size_t)(m->used * 2 + 1); } if (!ct) { @@ -17276,7 +17274,7 @@ static int _sp_mont_red(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) #ifndef WOLFSSL_NO_CT_OPS if (ct) { - for (i = 0; i < m->used * 2; i++) { + for (i = 0; i < (unsigned int)m->used * 2; i++) { a->dp[i] &= (sp_int_digit) (sp_int_sdigit)ctMaskIntGTE((int)(a->used-1), (int)i); @@ -17285,7 +17283,7 @@ static int _sp_mont_red(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) else #endif { - for (i = a->used; i < m->used * 2; i++) { + for (i = a->used; i < (unsigned int)m->used * 2; i++) { a->dp[i] = 0; } } @@ -17306,7 +17304,7 @@ static int _sp_mont_red(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) SP_ASM_ADDC(l, h, a->dp[1]); a->dp[1] = l; a->dp[2] = h; - a->used = m->used * 2 + 1; + a->used = (sp_size_t)(m->used * 2 + 1); /* mp is SP_WORD_SIZE */ bits = SP_WORD_SIZE; } @@ -17456,7 +17454,7 @@ static int _sp_mont_red(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) h = 0; SP_ASM_MUL_ADD_NO(l, h, mu, *(md++)); l = h; - for (j = 1; j + 1 < m->used - 1; j += 2) { + for (j = 1; j + 1 < (unsigned int)m->used - 1; j += 2) { h = 0; SP_ASM_ADDC(l, h, ad[j]); SP_ASM_MUL_ADD_NO(l, h, mu, *(md++)); @@ -17466,7 +17464,7 @@ static int _sp_mont_red(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) SP_ASM_MUL_ADD_NO(h, l, mu, *(md++)); ad[j] = h; } - for (; j < m->used - 1; j++) { + for (; j < (unsigned int)m->used - 1; j++) { h = 0; SP_ASM_ADDC(l, h, ad[j]); SP_ASM_MUL_ADD_NO(l, h, mu, *(md++)); @@ -17517,7 +17515,7 @@ static int _sp_mont_red(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) /* 2.1. mu = (mp * DigitMask(a, i)) & WORD_MASK */ mu = mp * ad[0]; /* 2.2. If i == NumDigits(m)-1 and mask != 0 then mu & = mask */ - if ((i == m->used - 1) && (mask != 0)) { + if ((i == (unsigned int)m->used - 1) && (mask != 0)) { mu &= mask; } @@ -17528,7 +17526,7 @@ static int _sp_mont_red(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) ad[0] = l; l = h; /* 2.4. If i == NumDigits(m)-1 and mask != 0 then mu & = mask */ - for (j = 1; j + 1 < m->used - 1; j += 2) { + for (j = 1; j + 1 < (unsigned int)m->used - 1; j += 2) { h = 0; /* 2.4.1. a += mu * DigitMask(m, j) */ SP_ASM_ADDC(l, h, ad[j + 0]); @@ -17540,7 +17538,7 @@ static int _sp_mont_red(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) SP_ASM_MUL_ADD_NO(h, l, mu, *(md++)); ad[j + 1] = h; } - for (; j < m->used - 1; j++) { + for (; j < (unsigned int)m->used - 1; j++) { h = 0; /* 2.4.1. a += mu * DigitMask(m, j) */ SP_ASM_ADDC(l, h, ad[j]); @@ -17563,7 +17561,7 @@ static int _sp_mont_red(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) SP_ASM_ADDC(l, h, a->dp[m->used * 2 - 1]); a->dp[m->used * 2 - 1] = l; a->dp[m->used * 2] = h; - a->used = m->used * 2 + 1; + a->used = (sp_size_t)(m->used * 2 + 1); } if (!ct) { @@ -17634,7 +17632,7 @@ int sp_mont_red_ex(sp_int* a, const sp_int* m, sp_int_digit mp, int ct) * * Used when performing Montgomery Reduction. * m must be odd. - * Jeffrey Hurchalla’s method. + * Jeffrey Hurchalla's method. * https://arxiv.org/pdf/2204.04342.pdf * * @param [in] m SP integer that is the modulus. @@ -17715,7 +17713,7 @@ int sp_mont_norm(sp_int* norm, const sp_int* m) if (err == MP_OKAY) { /* Find top bit and ensure norm has enough space. */ bits = (unsigned int)sp_count_bits(m); - if (bits >= norm->size * SP_WORD_SIZE) { + if (bits >= (unsigned int)norm->size * SP_WORD_SIZE) { err = MP_VAL; } } @@ -17802,7 +17800,7 @@ int sp_read_unsigned_bin(sp_int* a, const byte* in, word32 inSz) int i; int j = 0; - a->used = (inSz + SP_WORD_SIZEOF - 1) / SP_WORD_SIZEOF; + a->used = (sp_size_t)((inSz + SP_WORD_SIZEOF - 1) / SP_WORD_SIZEOF); #if defined(BIG_ENDIAN_ORDER) && !defined(WOLFSSL_SP_INT_DIGIT_ALIGN) /* Data endian matches representation of number. @@ -17930,7 +17928,7 @@ int sp_to_unsigned_bin_len(const sp_int* a, byte* out, int outSz) d >>= 8; /* Stop if the output buffer is filled. */ if (j < 0) { - if ((i < a->used - 1) || (d > 0)) { + if ((i < (unsigned int)a->used - 1) || (d > 0)) { err = MP_VAL; } break; @@ -18004,7 +18002,7 @@ int sp_to_unsigned_bin_len_ct(const sp_int* a, byte* out, int outSz) out[j--] = (byte)(d & mask); d >>= 8; } - mask &= (sp_int_digit)0 - (i < a->used - 1); + mask &= (sp_int_digit)0 - (i < (unsigned int)a->used - 1); i += (unsigned int)(1 & mask); } } @@ -18020,7 +18018,7 @@ int sp_to_unsigned_bin_len_ct(const sp_int* a, byte* out, int outSz) i = 0; for (j = outSz - 1; j >= 0; j--) { out[j] = a->dp[i] & mask; - mask &= (sp_int_digit)0 - (i < a->used - 1); + mask &= (sp_int_digit)0 - (i < (unsigned int)a->used - 1); i += (unsigned int)(1 & mask); } } @@ -18076,7 +18074,7 @@ static int _sp_read_radix_16(sp_int* a, const char* in) int err = MP_OKAY; int i; unsigned int s = 0; - unsigned int j = 0; + sp_size_t j = 0; sp_int_digit d; /* Skip whitespace at end of line */ int eol_done = 0; @@ -18206,7 +18204,7 @@ int sp_read_radix(sp_int* a, const char* in, int radix) { int err = MP_OKAY; #ifdef WOLFSSL_SP_INT_NEGATIVE - unsigned int sign = MP_ZPOS; + sp_uint8 sign = MP_ZPOS; #endif if ((a == NULL) || (in == NULL)) { @@ -18683,7 +18681,7 @@ int sp_rand_prime(sp_int* r, int len, WC_RNG* rng, void* heap) r->sign = MP_ZPOS; #endif /* WOLFSSL_SP_INT_NEGATIVE */ /* Set number of digits that will be used. */ - r->used = digits; + r->used = (sp_size_t)digits; #if defined(WOLFSSL_SP_MATH_ALL) || defined(BIG_ENDIAN_ORDER) /* Calculate number of bits in last digit. */ bits = (len * 8) & SP_WORD_MASK; @@ -19020,7 +19018,7 @@ static int _sp_prime_trials(const sp_int* a, int trials, int* result) _sp_init_size(n1, a->used + 1); _sp_init_size(r, a->used + 1); - _sp_init_size(b, a->used * 2 + 1); + _sp_init_size(b, (sp_size_t)(a->used * 2 + 1)); /* Do requested number of trials of Miller-Rabin test. */ for (i = 0; i < trials; i++) { @@ -19144,8 +19142,8 @@ static int _sp_prime_random_trials(const sp_int* a, int trials, int* result, _sp_init_size(c , a->used + 1); _sp_init_size(n1, a->used + 1); - _sp_init_size(b , a->used * 2 + 1); - _sp_init_size(r , a->used * 2 + 1); + _sp_init_size(b , (sp_size_t)(a->used * 2 + 1)); + _sp_init_size(r , (sp_size_t)(a->used * 2 + 1)); _sp_sub_d(a, 2, c); diff --git a/wolfcrypt/src/tfm.c b/wolfcrypt/src/tfm.c index 753c747be..fc8578569 100644 --- a/wolfcrypt/src/tfm.c +++ b/wolfcrypt/src/tfm.c @@ -321,7 +321,7 @@ int fp_mul(fp_int *A, fp_int *B, fp_int *C) goto clean; /* success */ break; - case WC_HW_WAIT_E: /* MP_HW_BUSY math HW busy, fall back */ + case WC_NO_ERR_TRACE(WC_HW_WAIT_E): /* MP_HW_BUSY math HW busy, fall back */ case MP_HW_FALLBACK: /* forced fallback from HW to SW */ case MP_HW_VALIDATION_ACTIVE: /* use SW to compare to HW */ /* fall back to software, below */ @@ -3125,9 +3125,9 @@ int fp_exptmod(fp_int * G, fp_int * X, fp_int * P, fp_int * Y) return retHW; break; - case WC_HW_WAIT_E: /* MP_HW_BUSY math HW busy, fall back */ + case WC_NO_ERR_TRACE(WC_HW_WAIT_E): /* MP_HW_BUSY math HW busy, fall back */ case MP_HW_FALLBACK: /* forced fallback from HW to SW */ - case MP_HW_VALIDATION_ACTIVE: /* use SW to compare to HW */ + case WC_NO_ERR_TRACE(MP_HW_VALIDATION_ACTIVE): /* use SW to compare to HW */ /* use software calc */ break; @@ -3227,7 +3227,7 @@ int fp_exptmod_ex(fp_int * G, fp_int * X, int digits, fp_int * P, fp_int * Y) return retHW; break; - case WC_HW_WAIT_E: /* MP_HW_BUSY math HW busy, fall back */ + case WC_NO_ERR_TRACE(WC_HW_WAIT_E): /* MP_HW_BUSY math HW busy, fall back */ case MP_HW_FALLBACK: /* forced fallback from HW to SW */ case MP_HW_VALIDATION_ACTIVE: /* use SW to compare to HW */ /* use software calc */ @@ -3328,7 +3328,7 @@ int fp_exptmod_nct(fp_int * G, fp_int * X, fp_int * P, fp_int * Y) return retHW; break; - case WC_HW_WAIT_E: /* MP_HW_BUSY math HW busy, fall back */ + case WC_NO_ERR_TRACE(WC_HW_WAIT_E): /* MP_HW_BUSY math HW busy, fall back */ case MP_HW_FALLBACK: /* forced fallback from HW to SW */ case MP_HW_VALIDATION_ACTIVE: /* use SW to compare to HW */ /* use software calc */ @@ -3440,7 +3440,7 @@ int fp_sqr(fp_int *A, fp_int *B) goto clean; /* success */ break; - case WC_HW_WAIT_E: /* MP_HW_BUSY math HW busy, fall back */ + case WC_NO_ERR_TRACE(WC_HW_WAIT_E): /* MP_HW_BUSY math HW busy, fall back */ case MP_HW_FALLBACK: /* forced fallback from HW to SW */ case MP_HW_VALIDATION_ACTIVE: /* use SW to compare to HW */ /* fall back to software, below */ @@ -4698,7 +4698,7 @@ int mp_mulmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d) /* successfully computed in HW */ break; - case WC_HW_WAIT_E: /* MP_HW_BUSY math HW busy, fall back */ + case WC_NO_ERR_TRACE(WC_HW_WAIT_E): /* MP_HW_BUSY math HW busy, fall back */ case MP_HW_FALLBACK: /* forced fallback from HW to SW */ case MP_HW_VALIDATION_ACTIVE: /* use SW to compare to HW */ /* use software calc */ diff --git a/wolfcrypt/src/wc_pkcs11.c b/wolfcrypt/src/wc_pkcs11.c index 78d78dc1a..8ccb47187 100644 --- a/wolfcrypt/src/wc_pkcs11.c +++ b/wolfcrypt/src/wc_pkcs11.c @@ -552,7 +552,7 @@ static int Pkcs11Slot_FindByTokenName(Pkcs11Dev* dev, PKCS11_RV("C_GetTokenInfo", rv); if (rv == CKR_OK && XMEMCMP(tinfo.label, tokenName, tokenNameSz) == 0) { - ret = slot[index]; + ret = (int)slot[index]; break; } } @@ -1413,7 +1413,7 @@ int wc_Pkcs11StoreKey(Pkcs11Token* token, int type, int clear, void* key) #ifdef HAVE_ECC case PKCS11_KEY_TYPE_EC: { ecc_key* eccKey = (ecc_key*)key; - int ret2 = NOT_COMPILED_IN; + int ret2 = WC_NO_ERR_TRACE(NOT_COMPILED_IN); #ifndef NO_PKCS11_ECDH if ((eccKey->flags & WC_ECC_FLAG_DEC_SIGN) == 0) { @@ -1809,6 +1809,84 @@ static int Pkcs11RsaPrivateKey(Pkcs11Session* session, RsaKey* rsaKey, return ret; } +/** + * Get the hash length associated with the WolfCrypt hash type. + * + * @param [in] hType Hash Type. + * @return -1 if hash type not recognized. + * @return hash length on success. + */ +int wc_hash2sz(int hType) +{ + switch(hType) { + case WC_HASH_TYPE_SHA: + return 20; + case WC_HASH_TYPE_SHA224: + return 24; + case WC_HASH_TYPE_SHA256: + return 32; + case WC_HASH_TYPE_SHA384: + return 48; + case WC_HASH_TYPE_SHA512: + return 64; + default: + /* unsupported WC_HASH_TYPE_XXXX */ + return -1; + } +} + +/** + * Get PKCS11 hash mechanism associated with the WolfCrypt hash type. + * + * @param [in] hType Hash Type. + * @return 0 if hash type not recognized. + * @return PKCS11 mechanism on success. + */ +CK_MECHANISM_TYPE wc_hash2ckm(int hType) +{ + switch(hType) { + case WC_HASH_TYPE_SHA: + return CKM_SHA_1; + case WC_HASH_TYPE_SHA224: + return CKM_SHA224; + case WC_HASH_TYPE_SHA256: + return CKM_SHA256; + case WC_HASH_TYPE_SHA384: + return CKM_SHA384; + case WC_HASH_TYPE_SHA512: + return CKM_SHA512; + default: + /* unsupported WC_HASH_TYPE_XXXX */ + return 0UL; + } +} + +/** + * Get PKCS11 MGF hash mechanism associated with the WolfCrypt MGF hash type. + * + * @param [in] mgf MGF Type. + * @return 0 if MGF type not recognized. + * @return PKCS11 MGF hash mechanism on success. + */ +CK_MECHANISM_TYPE wc_mgf2ckm(int mgf) +{ + switch(mgf) { + case WC_MGF1SHA1: + return CKG_MGF1_SHA1; + case WC_MGF1SHA224: + return CKG_MGF1_SHA224; + case WC_MGF1SHA256: + return CKG_MGF1_SHA256; + case WC_MGF1SHA384: + return CKG_MGF1_SHA384; + case WC_MGF1SHA512: + return CKG_MGF1_SHA512; + default: + /* unsupported WC_MGF1XXXX */ + return 0x0UL; + } +} + /** * Exponentiate the input with the public part of the RSA key. * Used in public encrypt and decrypt. @@ -1822,9 +1900,13 @@ static int Pkcs11RsaEncrypt(Pkcs11Session* session, wc_CryptoInfo* info, CK_OBJECT_HANDLE key) { int ret = 0; + CK_MECHANISM_TYPE mechanism = 0x0UL; CK_RV rv; CK_MECHANISM mech; CK_ULONG outLen; +#ifdef WOLF_CRYPTO_CB_RSA_PAD + CK_RSA_PKCS_OAEP_PARAMS oaepParams; +#endif WOLFSSL_MSG("PKCS#11: RSA Public Key Operation"); @@ -1832,12 +1914,37 @@ static int Pkcs11RsaEncrypt(Pkcs11Session* session, wc_CryptoInfo* info, ret = BAD_FUNC_ARG; } + switch(info->pk.type) { +#ifdef WOLF_CRYPTO_CB_RSA_PAD + case WC_PK_TYPE_RSA_PKCS: + mechanism = CKM_RSA_PKCS; + break; + case WC_PK_TYPE_RSA_OAEP: + mechanism = CKM_RSA_PKCS_OAEP; + break; +#endif + case WC_PK_TYPE_RSA: + mechanism = CKM_RSA_X_509; + break; + } + if (ret == 0) { /* Raw RSA encrypt/decrypt operation. */ - mech.mechanism = CKM_RSA_X_509; + mech.mechanism = mechanism; mech.ulParameterLen = 0; mech.pParameter = NULL; +#ifdef WOLF_CRYPTO_CB_RSA_PAD + if (mechanism == CKM_RSA_PKCS_OAEP) { + XMEMSET(&oaepParams, 0, sizeof(oaepParams)); + mech.ulParameterLen = sizeof(CK_RSA_PKCS_OAEP_PARAMS); + mech.pParameter = &oaepParams; + oaepParams.source = CKZ_DATA_SPECIFIED; + oaepParams.hashAlg = wc_hash2ckm(info->pk.rsa.padding->hash); + oaepParams.mgf = wc_mgf2ckm(info->pk.rsa.padding->mgf); + } +#endif + rv = session->func->C_EncryptInit(session->handle, &mech, key); PKCS11_RV("C_EncryptInit", rv); if (rv != CKR_OK) { @@ -1875,9 +1982,13 @@ static int Pkcs11RsaDecrypt(Pkcs11Session* session, wc_CryptoInfo* info, CK_OBJECT_HANDLE key) { int ret = 0; + CK_MECHANISM_TYPE mechanism = 0x0UL; CK_RV rv; CK_MECHANISM mech; CK_ULONG outLen; +#ifdef WOLF_CRYPTO_CB_RSA_PAD + CK_RSA_PKCS_OAEP_PARAMS oaepParams; +#endif WOLFSSL_MSG("PKCS#11: RSA Private Key Operation"); @@ -1885,12 +1996,37 @@ static int Pkcs11RsaDecrypt(Pkcs11Session* session, wc_CryptoInfo* info, ret = BAD_FUNC_ARG; } + switch(info->pk.type) { +#ifdef WOLF_CRYPTO_CB_RSA_PAD + case WC_PK_TYPE_RSA_PKCS: + mechanism = CKM_RSA_PKCS; + break; + case WC_PK_TYPE_RSA_OAEP: + mechanism = CKM_RSA_PKCS_OAEP; + break; +#endif + case WC_PK_TYPE_RSA: + mechanism = CKM_RSA_X_509; + break; + } + if (ret == 0) { /* Raw RSA encrypt/decrypt operation. */ - mech.mechanism = CKM_RSA_X_509; + mech.mechanism = mechanism; mech.ulParameterLen = 0; mech.pParameter = NULL; +#ifdef WOLF_CRYPTO_CB_RSA_PAD + if (mechanism == CKM_RSA_PKCS_OAEP) { + XMEMSET(&oaepParams, 0, sizeof(oaepParams)); + mech.ulParameterLen = sizeof(CK_RSA_PKCS_OAEP_PARAMS); + mech.pParameter = &oaepParams; + oaepParams.source = CKZ_DATA_SPECIFIED; + oaepParams.hashAlg = wc_hash2ckm(info->pk.rsa.padding->hash); + oaepParams.mgf = wc_mgf2ckm(info->pk.rsa.padding->mgf); + } +#endif + rv = session->func->C_DecryptInit(session->handle, &mech, key); PKCS11_RV("C_DecryptInit", rv); if (rv != CKR_OK) { @@ -1933,6 +2069,12 @@ static int Pkcs11RsaSign(Pkcs11Session* session, wc_CryptoInfo* info, CK_RV rv; CK_MECHANISM mech; CK_ULONG outLen; + CK_MECHANISM_TYPE mechanism; +#ifdef WOLF_CRYPTO_CB_RSA_PAD + CK_RSA_PKCS_PSS_PARAMS pssParams; + int hLen; + int saltLen; +#endif WOLFSSL_MSG("PKCS#11: RSA Private Key Operation"); @@ -1940,12 +2082,67 @@ static int Pkcs11RsaSign(Pkcs11Session* session, wc_CryptoInfo* info, ret = BAD_FUNC_ARG; } + switch(info->pk.type) { +#ifdef WOLF_CRYPTO_CB_RSA_PAD + case WC_PK_TYPE_RSA_PKCS: + mechanism = CKM_RSA_PKCS; + break; + case WC_PK_TYPE_RSA_PSS: + mechanism = CKM_RSA_PKCS_PSS; + break; +#endif /* WOLF_CRYPTO_CB_RSA_PAD */ + default: + mechanism = CKM_RSA_X_509; + break; + } + if (ret == 0) { /* Raw RSA encrypt/decrypt operation. */ - mech.mechanism = CKM_RSA_X_509; + mech.mechanism = mechanism; mech.ulParameterLen = 0; mech.pParameter = NULL; +#ifdef WOLF_CRYPTO_CB_RSA_PAD + if (mechanism == CKM_RSA_PKCS_PSS) { + mech.ulParameterLen = sizeof(CK_RSA_PKCS_PSS_PARAMS); + mech.pParameter = &pssParams; + pssParams.hashAlg = wc_hash2ckm(info->pk.rsa.padding->hash); + pssParams.mgf = wc_mgf2ckm(info->pk.rsa.padding->mgf); + + saltLen = info->pk.rsa.padding->saltLen; + hLen = wc_hash2sz(info->pk.rsa.padding->hash); + + /* Same salt length code as rsa.c */ + if (saltLen == RSA_PSS_SALT_LEN_DEFAULT) + saltLen = hLen; +#ifndef WOLFSSL_PSS_LONG_SALT + else if (saltLen > hLen) { + return PSS_SALTLEN_E; + } +#endif +#ifndef WOLFSSL_PSS_SALT_LEN_DISCOVER + else if (saltLen < RSA_PSS_SALT_LEN_DEFAULT) { + return PSS_SALTLEN_E; + } +#else + else if (saltLen == RSA_PSS_SALT_LEN_DISCOVER) { + saltLen = *(info->pk.rsa.outLen) - hLen - 2; + if (saltLen < 0) { + return PSS_SALTLEN_E; + } + } + else if (saltLen < RSA_PSS_SALT_LEN_DISCOVER) { + return PSS_SALTLEN_E; + } +#endif + if (*(info->pk.rsa.outLen) - hLen < (word32)(saltLen + 2)) { + return PSS_SALTLEN_E; + } + + pssParams.sLen = saltLen; + } +#endif /* WOLF_CRYPTO_CB_RSA_PAD */ + rv = session->func->C_SignInit(session->handle, &mech, key); PKCS11_RV("C_SignInit", rv); if (rv != CKR_OK) { @@ -1984,13 +2181,31 @@ static int Pkcs11Rsa(Pkcs11Session* session, wc_CryptoInfo* info) int ret = 0; CK_RV rv; CK_MECHANISM_INFO mechInfo; + CK_MECHANISM_TYPE mechanism = 0x0UL; int sessionKey = 0; CK_OBJECT_HANDLE key; RsaKey* rsaKey = info->pk.rsa.key; int type = info->pk.rsa.type; + switch(info->pk.type) { +#ifndef NO_PKCS11_RSA_PKCS + case WC_PK_TYPE_RSA_PKCS: + mechanism = CKM_RSA_PKCS; + break; + case WC_PK_TYPE_RSA_PSS: + mechanism = CKM_RSA_PKCS_PSS; + break; + case WC_PK_TYPE_RSA_OAEP: + mechanism = CKM_RSA_PKCS_OAEP; + break; +#endif /* NO_PKCS11_RSA_PKCS */ + case WC_PK_TYPE_RSA: + mechanism = CKM_RSA_X_509; + break; + } + /* Check operation is supported. */ - rv = session->func->C_GetMechanismInfo(session->slotId, CKM_RSA_X_509, + rv = session->func->C_GetMechanismInfo(session->slotId, mechanism, &mechInfo); PKCS11_RV("C_GetMechanismInfo", rv); if (rv != CKR_OK) { @@ -2023,7 +2238,7 @@ static int Pkcs11Rsa(Pkcs11Session* session, wc_CryptoInfo* info) } else if (type == RSA_PUBLIC_DECRYPT) { WOLFSSL_MSG("PKCS#11: Public Decrypt"); - if ((mechInfo.flags & CKF_DECRYPT) != 0) { + if ((mechInfo.flags & CKF_ENCRYPT) != 0) { ret = Pkcs11RsaEncrypt(session, info, key); } else { @@ -3783,6 +3998,11 @@ int wc_Pkcs11_CryptoDevCb(int devId, wc_CryptoInfo* info, void* ctx) switch (info->pk.type) { #ifndef NO_RSA case WC_PK_TYPE_RSA: + #ifdef WOLF_CRYPTO_CB_RSA_PAD + case WC_PK_TYPE_RSA_PKCS: + case WC_PK_TYPE_RSA_PSS: + case WC_PK_TYPE_RSA_OAEP: + #endif ret = Pkcs11OpenSession(token, &session, readWrite); if (ret == 0) { ret = Pkcs11Rsa(&session, info); diff --git a/wolfcrypt/src/wolfmath.c b/wolfcrypt/src/wolfmath.c index b7853dd8f..ce36b602c 100644 --- a/wolfcrypt/src/wolfmath.c +++ b/wolfcrypt/src/wolfmath.c @@ -149,10 +149,10 @@ int mp_cond_copy(mp_int* a, int copy, mp_int* b) for (; i < b->used; i++) { b->dp[i] ^= (get_digit(a, (int)i) ^ get_digit(b, (int)i)) & mask; } - b->used ^= (a->used ^ b->used) & (unsigned int)mask; + b->used ^= (a->used ^ b->used) & (mp_size_t)mask; #if (!defined(WOLFSSL_SP_MATH) && !defined(WOLFSSL_SP_MATH_ALL)) || \ defined(WOLFSSL_SP_INT_NEGATIVE) - b->sign ^= (a->sign ^ b->sign) & (unsigned int)mask; + b->sign ^= (mp_sign_t)(a->sign ^ b->sign) & (mp_sign_t)mask; #endif } @@ -196,7 +196,7 @@ int mp_rand(mp_int* a, int digits, WC_RNG* rng) ret = BAD_FUNC_ARG; } if (ret == MP_OKAY) { - a->used = (word32)digits; + a->used = (mp_size_t)digits; } #endif /* fill the data with random bytes */ diff --git a/wolfcrypt/test/README.md b/wolfcrypt/test/README.md index bcf877f9a..167556644 100644 --- a/wolfcrypt/test/README.md +++ b/wolfcrypt/test/README.md @@ -53,7 +53,7 @@ Test complete ## Windows Visual Studio -For building wolfCrypt test project in Visual Studio open the `test.sln`. For newer Visual Studio version it may prompt for a one-way upgrade. Then you may have to right-click on the solution and choose `Retarget solution` to update the project files for your Visual Studio version. +For building wolfCrypt test project in Visual Studio open the `test.sln`. For newer Visual Studio version it may prompt for a one-way upgrade. Then you may have to right-click on the solution and choose `Retarget solution` to update the project files for your Visual Studio version. If you see an error about `rc.exe` then you'll need to update the "Target Platform Version". You can do this by right-clicking on the test project -> General -> "Target Platform Version" and changing to 8.1 (needs to match the wolfssl library project). diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index d1acf3b23..90cb4ce89 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -314,7 +314,7 @@ const byte const_byte_array[] = "A+Gd\0\0\0"; #ifdef WOLFSSL_WC_KYBER #include #endif -#if defined(HAVE_LIBOQS) || defined(HAVE_PQM4) +#if defined(HAVE_LIBOQS) #include #endif #endif @@ -2563,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); } @@ -2572,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); @@ -2617,8 +2617,8 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t error_test(void) * The string is that error strings are not available. */ WOLFSSL_ENTER("error_test NO_ERROR_STRINGS"); - errStr = wc_GetErrorString(OPEN_RAN_E); - wc_ErrorString(OPEN_RAN_E, out); + errStr = wc_GetErrorString(WC_NO_ERR_TRACE(OPEN_RAN_E)); + wc_ErrorString(WC_NO_ERR_TRACE(OPEN_RAN_E), out); if (XSTRCMP(errStr, unknownStr) != 0) return WC_TEST_RET_ENC_NC; if (XSTRCMP(out, unknownStr) != 0) @@ -10433,7 +10433,7 @@ static wc_test_ret_t aes_xts_128_test(void) #if defined(DEBUG_VECTOR_REGISTER_ACCESS_AESXTS) && \ defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesXtsEncrypt(aes, buf, p2, sizeof(p2), i2, sizeof(i2)); #if defined(WOLFSSL_ASYNC_CRYPT) ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE); @@ -10487,7 +10487,7 @@ static wc_test_ret_t aes_xts_128_test(void) #if defined(DEBUG_VECTOR_REGISTER_ACCESS_AESXTS) && \ defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesXtsEncrypt(aes, buf, p1, sizeof(p1), i1, sizeof(i1)); #if defined(WOLFSSL_ASYNC_CRYPT) ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE); @@ -10538,7 +10538,7 @@ static wc_test_ret_t aes_xts_128_test(void) #if defined(DEBUG_VECTOR_REGISTER_ACCESS_AESXTS) && \ defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); XMEMSET(cipher, 0, sizeof(cipher)); ret = wc_AesXtsEncrypt(aes, cipher, pp, sizeof(pp), i1, sizeof(i1)); #if defined(WOLFSSL_ASYNC_CRYPT) @@ -10590,7 +10590,7 @@ static wc_test_ret_t aes_xts_128_test(void) #if defined(DEBUG_VECTOR_REGISTER_ACCESS_AESXTS) && \ defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); XMEMSET(buf, 0, sizeof(buf)); ret = wc_AesXtsDecrypt(aes, buf, cipher, sizeof(pp), i1, sizeof(i1)); #if defined(WOLFSSL_ASYNC_CRYPT) @@ -10643,7 +10643,7 @@ static wc_test_ret_t aes_xts_128_test(void) #if defined(DEBUG_VECTOR_REGISTER_ACCESS_AESXTS) && \ defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); XMEMSET(buf, 0, sizeof(buf)); ret = wc_AesXtsDecrypt(aes, buf, c1, sizeof(c1), i1, sizeof(i1)); #if defined(WOLFSSL_ASYNC_CRYPT) @@ -11133,7 +11133,7 @@ static wc_test_ret_t aes_xts_192_test(void) #if defined(DEBUG_VECTOR_REGISTER_ACCESS_AESXTS) && \ defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesXtsEncrypt(aes, buf, p2, sizeof(p2), i2, sizeof(i2)); #if defined(WOLFSSL_ASYNC_CRYPT) ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE); @@ -11187,7 +11187,7 @@ static wc_test_ret_t aes_xts_192_test(void) #if defined(DEBUG_VECTOR_REGISTER_ACCESS_AESXTS) && \ defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesXtsEncrypt(aes, buf, p1, sizeof(p1), i1, sizeof(i1)); #if defined(WOLFSSL_ASYNC_CRYPT) ret = wc_AsyncWait(ret, &aes->aes.asyncDev, WC_ASYNC_FLAG_NONE); @@ -11238,7 +11238,7 @@ static wc_test_ret_t aes_xts_192_test(void) #if defined(DEBUG_VECTOR_REGISTER_ACCESS_AESXTS) && \ defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); XMEMSET(cipher, 0, sizeof(cipher)); ret = wc_AesXtsEncrypt(aes, cipher, pp, sizeof(pp), i1, sizeof(i1)); #if defined(WOLFSSL_ASYNC_CRYPT) @@ -11290,7 +11290,7 @@ static wc_test_ret_t aes_xts_192_test(void) #if defined(DEBUG_VECTOR_REGISTER_ACCESS_AESXTS) && \ defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); XMEMSET(buf, 0, sizeof(buf)); ret = wc_AesXtsDecrypt(aes, buf, cipher, sizeof(pp), i1, sizeof(i1)); #if defined(WOLFSSL_ASYNC_CRYPT) @@ -11343,7 +11343,7 @@ static wc_test_ret_t aes_xts_192_test(void) #if defined(DEBUG_VECTOR_REGISTER_ACCESS_AESXTS) && \ defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); XMEMSET(buf, 0, sizeof(buf)); ret = wc_AesXtsDecrypt(aes, buf, c1, sizeof(c1), i1, sizeof(i1)); #if defined(WOLFSSL_ASYNC_CRYPT) @@ -12640,12 +12640,12 @@ static wc_test_ret_t aesecb_test(void) #if defined(DEBUG_VECTOR_REGISTER_ACCESS) && defined(WC_C_DYNAMIC_FALLBACK) XMEMSET(cipher, 0, AES_BLOCK_SIZE); - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesSetKey(enc, niKey, sizeof(niKey), cipher, AES_ENCRYPTION); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesEcbEncrypt(enc, cipher, niPlain, AES_BLOCK_SIZE); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); if (ret != 0) @@ -12662,7 +12662,7 @@ static wc_test_ret_t aesecb_test(void) XMEMSET(cipher, 0, AES_BLOCK_SIZE); ret = wc_AesSetKey(enc, niKey, sizeof(niKey), cipher, AES_ENCRYPTION); - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesEcbEncrypt(enc, cipher, niPlain, AES_BLOCK_SIZE); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); if (ret != 0) @@ -12683,12 +12683,12 @@ static wc_test_ret_t aesecb_test(void) #if defined(DEBUG_VECTOR_REGISTER_ACCESS) && defined(WC_C_DYNAMIC_FALLBACK) XMEMSET(plain, 0, AES_BLOCK_SIZE); - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesSetKey(dec, niKey, sizeof(niKey), plain, AES_DECRYPTION); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesEcbDecrypt(dec, plain, niCipher, AES_BLOCK_SIZE); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); if (ret != 0) @@ -12707,7 +12707,7 @@ static wc_test_ret_t aesecb_test(void) ret = wc_AesSetKey(dec, niKey, sizeof(niKey), plain, AES_DECRYPTION); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesEcbDecrypt(dec, plain, niCipher, AES_BLOCK_SIZE); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); if (ret != 0) @@ -13363,13 +13363,13 @@ static wc_test_ret_t aesctr_test(Aes* enc, Aes* dec, byte* cipher, byte* plain) } } - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesCtrEncrypt(enc, cipher, testVec[i].plain, testVec[i].len); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); if (ret != 0) { ERROR_OUT(WC_TEST_RET_ENC_I(i), out); } - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesCtrEncrypt(dec, plain, cipher, testVec[i].len); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); if (ret != 0) { @@ -13388,7 +13388,7 @@ static wc_test_ret_t aesctr_test(Aes* enc, Aes* dec, byte* cipher, byte* plain) for (i = 0; i < AES_CTR_TEST_LEN; i++) { if (testVec[i].key != NULL) { - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesSetKeyDirect(enc, testVec[i].key, testVec[i].keySz, testVec[i].iv, AES_ENCRYPTION); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); @@ -13396,7 +13396,7 @@ static wc_test_ret_t aesctr_test(Aes* enc, Aes* dec, byte* cipher, byte* plain) ERROR_OUT(WC_TEST_RET_ENC_I(i), out); } /* Ctr only uses encrypt, even on key setup */ - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesSetKeyDirect(dec, testVec[i].key, testVec[i].keySz, testVec[i].iv, AES_ENCRYPTION); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); @@ -13750,7 +13750,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t aes_test(void) #if defined(DEBUG_VECTOR_REGISTER_ACCESS) && defined(WC_C_DYNAMIC_FALLBACK) /* Iterate from one AES_BLOCK_SIZE of bigMsg through the whole * message by AES_BLOCK_SIZE for each size of AES key. */ - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); for (keySz = 16; keySz <= 32; keySz += 8) { for (msgSz = AES_BLOCK_SIZE; msgSz <= sizeof(bigMsg); @@ -14320,7 +14320,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t aes256_test(void) #endif XMEMSET(cipher, 0, AES_BLOCK_SIZE); - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesCbcEncrypt(enc, cipher, msg, (int) sizeof(msg)); #if defined(WOLFSSL_ASYNC_CRYPT) ret = wc_AsyncWait(ret, &enc->asyncDev, WC_ASYNC_FLAG_NONE); @@ -14330,7 +14330,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t aes256_test(void) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); #ifdef HAVE_AES_DECRYPT XMEMSET(plain, 0, AES_BLOCK_SIZE); - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesCbcDecrypt(dec, plain, cipher, (int) sizeof(cipher)); #if defined(WOLFSSL_ASYNC_CRYPT) ret = wc_AsyncWait(ret, &dec->asyncDev, WC_ASYNC_FLAG_NONE); @@ -14347,13 +14347,13 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t aes256_test(void) ERROR_OUT(WC_TEST_RET_ENC_NC, out); #endif - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesSetKey(enc, key, keySz, iv, AES_ENCRYPTION); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); #ifdef HAVE_AES_DECRYPT - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesSetKey(dec, key, keySz, iv, AES_DECRYPTION); WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(0); if (ret != 0) @@ -14479,7 +14479,7 @@ static wc_test_ret_t aesgcm_default_test_helper(byte* key, int keySz, byte* iv, ERROR_OUT(WC_TEST_RET_ENC_NC, out); #if defined(DEBUG_VECTOR_REGISTER_ACCESS) && defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesGcmEncrypt(enc, resultC, plain, plainSz, iv, ivSz, resultT, tagSz, aad, aadSz); #if defined(WOLFSSL_ASYNC_CRYPT) @@ -14514,7 +14514,7 @@ static wc_test_ret_t aesgcm_default_test_helper(byte* key, int keySz, byte* iv, } #if defined(DEBUG_VECTOR_REGISTER_ACCESS) && defined(WC_C_DYNAMIC_FALLBACK) - WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(SYSLIB_FAILED_E); + WC_DEBUG_SET_VECTOR_REGISTERS_RETVAL(WC_NO_ERR_TRACE(SYSLIB_FAILED_E)); ret = wc_AesGcmDecrypt(dec, resultP, resultC, cipherSz, iv, ivSz, resultT, tagSz, aad, aadSz); #if defined(WOLFSSL_ASYNC_CRYPT) @@ -25546,7 +25546,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t openssl_test(void) return WC_TEST_RET_ENC_NC; } - if (EVP_CIPHER_CTX_block_size(NULL) != WC_NO_ERR_TRACE(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) @@ -25557,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) != WC_NO_ERR_TRACE(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) @@ -25575,10 +25575,8 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t openssl_test(void) return WC_TEST_RET_ENC_NC; if (EVP_CIPHER_CTX_set_padding(NULL, 0) != - WC_NO_ERR_TRACE(BAD_FUNC_ARG)) - { + 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; if (EVP_CIPHER_CTX_set_padding(en, 1) != WOLFSSL_SUCCESS) @@ -37760,7 +37758,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t ed448_test(void) #endif /* HAVE_ED448 */ #ifdef WOLFSSL_HAVE_KYBER -#ifdef WOLFSSL_WC_KYBER /* OQS and PQM4 do not support KATs */ +#ifdef WOLFSSL_WC_KYBER /* OQS does not support KATs */ #ifdef WOLFSSL_KYBER512 static wc_test_ret_t kyber512_kat(void) { @@ -41946,8 +41944,13 @@ static wc_test_ret_t dilithium_param_vfy_test(int param, const byte* pubKey, if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT ret = wc_dilithium_verify_ctx_msg(sig, sigLen, NULL, 0, msg, (word32)sizeof(msg), &res, key); +#else + ret = wc_dilithium_verify_msg(sig, sigLen, msg, (word32)sizeof(msg), &res, + key); +#endif if (ret != 0) ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out); if (res != 1) @@ -41962,6 +41965,7 @@ out: static wc_test_ret_t dilithium_param_44_vfy_test(void) { WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_44_pub_key[] = { +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT 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, @@ -42072,8 +42076,143 @@ static wc_test_ret_t dilithium_param_44_vfy_test(void) 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 +#else + 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 +#endif }; WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_44_sig[] = { +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT 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, @@ -42276,6 +42415,250 @@ static wc_test_ret_t dilithium_param_44_vfy_test(void) 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 +#else + 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 +#endif }; return dilithium_param_vfy_test(WC_ML_DSA_44, ml_dsa_44_pub_key, @@ -42288,6 +42671,7 @@ 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[] = { +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT 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, @@ -42451,8 +42835,207 @@ static wc_test_ret_t dilithium_param_65_vfy_test(void) 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 +#else + 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 +#endif }; WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_65_sig[] = { +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT 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, @@ -42729,6 +43312,339 @@ static wc_test_ret_t dilithium_param_65_vfy_test(void) 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 +#else + 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 +#endif }; return dilithium_param_vfy_test(WC_ML_DSA_65, ml_dsa_65_pub_key, @@ -42741,6 +43657,7 @@ 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[] = { +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT 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, @@ -42957,8 +43874,271 @@ static wc_test_ret_t dilithium_param_87_vfy_test(void) 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 +#else + 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 +#endif }; WOLFSSL_SMALL_STACK_STATIC const byte ml_dsa_87_sig[] = { +#ifndef WOLFSSL_DILITHIUM_FIPS204_DRAFT 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, @@ -43345,6 +44525,471 @@ static wc_test_ret_t dilithium_param_87_vfy_test(void) 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 +#else + 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 +#endif }; return dilithium_param_vfy_test(WC_ML_DSA_87, ml_dsa_87_pub_key, diff --git a/wolfssl/internal.h b/wolfssl/internal.h index 9e57ab0c4..582ab1de8 100644 --- a/wolfssl/internal.h +++ b/wolfssl/internal.h @@ -3088,6 +3088,8 @@ WOLFSSL_LOCAL int GetEchConfig(WOLFSSL_EchConfig* config, byte* output, WOLFSSL_LOCAL int GetEchConfigsEx(WOLFSSL_EchConfig* configs, byte* output, word32* outputLen); + +WOLFSSL_LOCAL void FreeEchConfigs(WOLFSSL_EchConfig* configs, void* heap); #endif struct TLSX { @@ -3806,6 +3808,9 @@ struct WOLFSSL_CTX { #endif #if defined(WOLFSSL_DTLS) && defined(WOLFSSL_SCTP) byte dtlsSctp:1; /* DTLS-over-SCTP mode */ +#endif +#if defined(WOLFSSL_TLS13) && defined(HAVE_ECH) + byte disableECH:1; #endif word16 minProto:1; /* sets min to min available */ word16 maxProto:1; /* sets max to max available */ @@ -4957,7 +4962,8 @@ struct Options { word16 useDtlsCID:1; #endif /* WOLFSSL_DTLS_CID */ #if defined(WOLFSSL_TLS13) && defined(HAVE_ECH) - word16 useEch:1; + word16 useEch:1; /* Do we have a valid config */ + byte disableECH:1; /* Did the user disable ech */ #endif #ifdef WOLFSSL_SEND_HRR_COOKIE word16 cookieGood:1; @@ -6460,6 +6466,9 @@ WOLFSSL_LOCAL WC_RNG* WOLFSSL_RSA_GetRNG(WOLFSSL_RSA *rsa, WC_RNG **tmpRNG, WOLFSSL_LOCAL Signer* GetCAByAKID(void* vp, const byte* issuer, word32 issuerSz, const byte* serial, word32 serialSz); #endif + #if defined(HAVE_OCSP) && !defined(GetCAByKeyHash) + WOLFSSL_LOCAL Signer* GetCAByKeyHash(void* vp, const byte* keyHash); + #endif #if !defined(NO_SKID) && !defined(GetCAByName) WOLFSSL_LOCAL Signer* GetCAByName(void* cm, byte* hash); #endif diff --git a/wolfssl/openssl/ec.h b/wolfssl/openssl/ec.h index 39faf95f2..c7b0cfffa 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 diff --git a/wolfssl/openssl/pem.h b/wolfssl/openssl/pem.h index 27cc12dea..0cfaedd0d 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, @@ -252,6 +254,7 @@ int wolfSSL_PEM_write_DHparams(XFILE fp, WOLFSSL_DH* dh); #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 diff --git a/wolfssl/openssl/ssl.h b/wolfssl/openssl/ssl.h index 1a9943756..b4c211416 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 @@ -565,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 @@ -878,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 diff --git a/wolfssl/ssl.h b/wolfssl/ssl.h index 9adc0be00..63b2a8ed5 100644 --- a/wolfssl/ssl.h +++ b/wolfssl/ssl.h @@ -988,6 +988,8 @@ WOLFSSL_API int wolfSSL_CTX_GenerateEchConfig(WOLFSSL_CTX* ctx, WOLFSSL_API int wolfSSL_CTX_GetEchConfigs(WOLFSSL_CTX* ctx, byte* output, word32* outputLen); +WOLFSSL_API void wolfSSL_CTX_SetEchEnable(WOLFSSL_CTX* ctx, byte enable); + WOLFSSL_API int wolfSSL_SetEchConfigsBase64(WOLFSSL* ssl, char* echConfigs64, word32 echConfigs64Len); @@ -996,6 +998,8 @@ WOLFSSL_API int wolfSSL_SetEchConfigs(WOLFSSL* ssl, const byte* echConfigs, WOLFSSL_API int wolfSSL_GetEchConfigs(WOLFSSL* ssl, byte* echConfigs, word32* echConfigsLen); + +WOLFSSL_API void wolfSSL_SetEchEnable(WOLFSSL* ssl, byte enable); #endif /* WOLFSSL_TLS13 && HAVE_ECH */ #ifdef HAVE_POLY1305 @@ -1642,6 +1646,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); @@ -2826,6 +2832,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); @@ -2965,6 +2973,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, @@ -4497,7 +4507,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 diff --git a/wolfssl/test.h b/wolfssl/test.h index 888d7f1ae..0fb23c196 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 dd549696d..39ac82eae 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. diff --git a/wolfssl/wolfcrypt/chacha.h b/wolfssl/wolfcrypt/chacha.h index c3af0507a..987dc9fb1 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/cryptocb.h b/wolfssl/wolfcrypt/cryptocb.h index 4b53db9d3..4ec42ecbb 100644 --- a/wolfssl/wolfcrypt/cryptocb.h +++ b/wolfssl/wolfcrypt/cryptocb.h @@ -75,7 +75,7 @@ #include #ifdef WOLFSSL_WC_KYBER #include -#elif defined(HAVE_LIBOQS) || defined(HAVE_PQM4) +#elif defined(HAVE_LIBOQS) #include #endif #endif @@ -118,6 +118,9 @@ typedef struct wc_CryptoInfo { int type; RsaKey* key; WC_RNG* rng; + #ifdef WOLF_CRYPTO_CB_RSA_PAD + RsaPadding *padding; + #endif } rsa; #ifdef WOLFSSL_KEY_GEN struct { @@ -481,6 +484,11 @@ WOLFSSL_API void wc_CryptoCb_InfoString(wc_CryptoInfo* info); WOLFSSL_LOCAL int wc_CryptoCb_Rsa(const byte* in, word32 inLen, byte* out, word32* outLen, int type, RsaKey* key, WC_RNG* rng); +#ifdef WOLF_CRYPTO_CB_RSA_PAD +WOLFSSL_LOCAL int wc_CryptoCb_RsaPad(const byte* in, word32 inLen, byte* out, + word32* outLen, int type, RsaKey* key, WC_RNG* rng, RsaPadding *padding); +#endif + #ifdef WOLFSSL_KEY_GEN WOLFSSL_LOCAL int wc_CryptoCb_MakeRsaKey(RsaKey* key, int size, long e, WC_RNG* rng); diff --git a/wolfssl/wolfcrypt/ext_kyber.h b/wolfssl/wolfcrypt/ext_kyber.h index 95b22a1a8..6e7f6908e 100644 --- a/wolfssl/wolfcrypt/ext_kyber.h +++ b/wolfssl/wolfcrypt/ext_kyber.h @@ -29,8 +29,8 @@ #ifdef WOLFSSL_HAVE_KYBER #include -#if !defined(HAVE_LIBOQS) && !defined(HAVE_PQM4) -#error "This code requires liboqs or pqm4" +#if !defined(HAVE_LIBOQS) +#error "This code requires liboqs" #endif #if defined(WOLFSSL_WC_KYBER) @@ -41,15 +41,6 @@ #include #define EXT_KYBER_MAX_PRIV_SZ OQS_KEM_kyber_1024_length_secret_key #define EXT_KYBER_MAX_PUB_SZ OQS_KEM_kyber_1024_length_public_key -#elif defined(HAVE_PQM4) - #include "api_kyber.h" - #define PQM4_PUBLIC_KEY_LENGTH CRYPTO_PUBLICKEYBYTES - #define PQM4_PRIVATE_KEY_LENGTH CRYPTO_SECRETKEYBYTES - #define PQM4_SHARED_SECRET_LENGTH CRYPTO_BYTES - #define PQM4_CIPHERTEXT_LENGTH CRYPTO_CIPHERTEXTBYTES - - #define EXT_KYBER_MAX_PRIV_SZ PQM4_PRIVATE_KEY_LENGTH - #define EXT_KYBER_MAX_PUB_SZ PQM4_PUBLIC_KEY_LENGTH #endif struct KyberKey { diff --git a/wolfssl/wolfcrypt/integer.h b/wolfssl/wolfcrypt/integer.h index 27e020017..927a1f6c2 100644 --- a/wolfssl/wolfcrypt/integer.h +++ b/wolfssl/wolfcrypt/integer.h @@ -222,6 +222,9 @@ typedef int mp_err; #define WOLF_BIGINT_DEFINED #endif +#define mp_size_t int +#define mp_sign_t int + /* the mp_int structure */ typedef struct mp_int { int used, alloc, sign; diff --git a/wolfssl/wolfcrypt/rsa.h b/wolfssl/wolfcrypt/rsa.h index 5db1a23c2..1f9f0222a 100644 --- a/wolfssl/wolfcrypt/rsa.h +++ b/wolfssl/wolfcrypt/rsa.h @@ -274,6 +274,20 @@ struct RsaKey { #endif /* HAVE_FIPS */ +#if defined(WOLF_CRYPTO_CB) && defined(WOLF_CRYPTO_CB_RSA_PAD) +struct RsaPadding { + byte pad_value; + int pad_type; + enum wc_HashType hash; + int mgf; + byte* label; + word32 labelSz; + int saltLen; + int unpadded; +}; +typedef struct RsaPadding RsaPadding; +#endif + WOLFSSL_API int wc_InitRsaKey(RsaKey* key, void* heap); WOLFSSL_API int wc_InitRsaKey_ex(RsaKey* key, void* heap, int devId); WOLFSSL_API int wc_FreeRsaKey(RsaKey* key); diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index 60562d321..a1e4b9004 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -3281,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 @@ -3514,14 +3514,6 @@ extern void uITRON4_free(void *p) ; #endif #endif -#ifdef HAVE_PQM4 -#define HAVE_PQC -#define WOLFSSL_HAVE_KYBER -#define WOLFSSL_KYBER512 -#define WOLFSSL_NO_KYBER768 -#define WOLFSSL_NO_KYBER1024 -#endif - #if (defined(HAVE_LIBOQS) || \ defined(HAVE_LIBXMSS) || \ defined(HAVE_LIBLMS) || \ @@ -3530,15 +3522,10 @@ extern void uITRON4_free(void *p) ; #error Experimental settings without WOLFSSL_EXPERIMENTAL_SETTINGS #endif -#if defined(HAVE_PQC) && !defined(HAVE_LIBOQS) && !defined(HAVE_PQM4) && \ - !defined(WOLFSSL_HAVE_KYBER) +#if defined(HAVE_PQC) && !defined(HAVE_LIBOQS) && !defined(WOLFSSL_HAVE_KYBER) #error Please do not define HAVE_PQC yourself. #endif -#if defined(HAVE_PQC) && defined(HAVE_LIBOQS) && defined(HAVE_PQM4) -#error Please do not define both HAVE_LIBOQS and HAVE_PQM4. -#endif - #if defined(HAVE_PQC) && defined(WOLFSSL_DTLS13) && \ !defined(WOLFSSL_DTLS_CH_FRAG) #warning "Using DTLS 1.3 + pqc without WOLFSSL_DTLS_CH_FRAG will probably" \ diff --git a/wolfssl/wolfcrypt/sp_int.h b/wolfssl/wolfcrypt/sp_int.h index 626af9e0b..5cf0cf464 100644 --- a/wolfssl/wolfcrypt/sp_int.h +++ b/wolfssl/wolfcrypt/sp_int.h @@ -698,7 +698,7 @@ typedef struct sp_ecc_ctx { if ((a)->used > 0) { \ for (ii = (int)(a)->used - 1; ii >= 0 && (a)->dp[ii] == 0; ii--) { \ } \ - (a)->used = (unsigned int)(ii + 1); \ + (a)->used = (mp_size_t)(ii + 1); \ } \ } while (0) @@ -770,8 +770,8 @@ typedef struct sp_ecc_ctx { /* The number of bytes to a sp_int with 'cnt' digits. * Must have at least one digit. */ -#define MP_INT_SIZEOF(cnt) \ - (sizeof(sp_int_minimal) + (((cnt) <= 1) ? 0 : ((cnt) - 1)) * \ +#define MP_INT_SIZEOF(cnt) \ + (sizeof(sp_int_minimal) + (((cnt) <= 1) ? 0 : ((size_t)((cnt) - 1))) * \ sizeof(sp_int_digit)) /* The address of the next sp_int after one with 'cnt' digits. */ #define MP_INT_NEXT(t, cnt) \ @@ -780,7 +780,7 @@ typedef struct sp_ecc_ctx { /* Calculate the number of words required to support a number of bits. */ #define MP_BITS_CNT(bits) \ - ((((bits) + SP_WORD_SIZE - 1) / SP_WORD_SIZE) * 2 + 1) + ((unsigned int)(((((bits) + SP_WORD_SIZE - 1) / SP_WORD_SIZE) * 2 + 1))) #ifdef WOLFSSL_SMALL_STACK /* @@ -865,6 +865,20 @@ while (0) #define WOLF_BIGINT_DEFINED #endif +#if SP_INT_DIGITS < (65536 / SP_WORD_SIZEOF) +/* Type for number of digits. */ +typedef word16 sp_size_t; +#else +/* Type for number of digits. */ +typedef unsigned int sp_size_t; +#endif + +/* Type for number of digits. */ +#define mp_size_t sp_size_t +#ifdef WOLFSSL_SP_INT_NEGATIVE + typedef sp_uint8 sp_sign_t; + #define mp_sign_t sp_sign_t +#endif /** * SP integer. @@ -873,12 +887,12 @@ while (0) */ typedef struct sp_int { /** Number of words that contain data. */ - unsigned int used; + sp_size_t used; /** Maximum number of words in data. */ - unsigned int size; + sp_size_t size; #ifdef WOLFSSL_SP_INT_NEGATIVE /** Indicates whether number is 0/positive or negative. */ - unsigned int sign; + sp_sign_t sign; #endif #ifdef HAVE_WOLF_BIGINT /** Unsigned binary (big endian) representation of number. */ @@ -889,12 +903,16 @@ typedef struct sp_int { } sp_int; typedef struct sp_int_minimal { - unsigned int used; - unsigned int size; + /** Number of words that contain data. */ + sp_size_t used; + /** Maximum number of words in data. */ + sp_size_t size; #ifdef WOLFSSL_SP_INT_NEGATIVE - unsigned int sign; + /** Indicates whether number is 0/positive or negative. */ + sp_uint8 sign; #endif #ifdef HAVE_WOLF_BIGINT + /** Unsigned binary (big endian) representation of number. */ struct WC_BIGINT raw; #endif /** First digit of number. */ diff --git a/wolfssl/wolfcrypt/tfm.h b/wolfssl/wolfcrypt/tfm.h index ecb01ae97..a9b0df2a9 100644 --- a/wolfssl/wolfcrypt/tfm.h +++ b/wolfssl/wolfcrypt/tfm.h @@ -379,6 +379,9 @@ while (0) #define WOLF_BIGINT_DEFINED #endif +#define mp_size_t int +#define mp_sign_t int + /* a FP type */ typedef struct fp_int { int used; diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h index 4696b065b..1a2eb6efa 100644 --- a/wolfssl/wolfcrypt/types.h +++ b/wolfssl/wolfcrypt/types.h @@ -1263,6 +1263,9 @@ typedef struct w64wrapper { #undef _WC_PK_TYPE_MAX #define _WC_PK_TYPE_MAX WC_PK_TYPE_PQC_SIG_CHECK_PRIV_KEY #endif + WC_PK_TYPE_RSA_PKCS = 25, + WC_PK_TYPE_RSA_PSS = 26, + WC_PK_TYPE_RSA_OAEP = 27, WC_PK_TYPE_MAX = _WC_PK_TYPE_MAX }; diff --git a/wolfssl/wolfcrypt/wc_pkcs11.h b/wolfssl/wolfcrypt/wc_pkcs11.h index 8cdd87e61..0b8942b33 100644 --- a/wolfssl/wolfcrypt/wc_pkcs11.h +++ b/wolfssl/wolfcrypt/wc_pkcs11.h @@ -97,6 +97,10 @@ WOLFSSL_API int wc_Pkcs11StoreKey(Pkcs11Token* token, int type, int clear, WOLFSSL_API int wc_Pkcs11_CryptoDevCb(int devId, wc_CryptoInfo* info, void* ctx); +WOLFSSL_LOCAL int wc_hash2sz(int); +WOLFSSL_LOCAL CK_MECHANISM_TYPE wc_hash2ckm(int); +WOLFSSL_LOCAL CK_MECHANISM_TYPE wc_mgf2ckm(int); + #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/wolfssl/wolfcrypt/wc_port.h b/wolfssl/wolfcrypt/wc_port.h index d07dbb1b3..0e5110ff3 100644 --- a/wolfssl/wolfcrypt/wc_port.h +++ b/wolfssl/wolfcrypt/wc_port.h @@ -1266,8 +1266,13 @@ WOLFSSL_ABI WOLFSSL_API int wolfCrypt_Cleanup(void); #ifndef WOLFSSL_NO_FENCE #ifdef XFENCE /* use user-supplied XFENCE definition. */ - #elif defined(__GNUC__) && (__GNUC__ >= 4) + #elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) + #include + #define XFENCE() atomic_thread_fence(__ATOMIC_SEQ_CST) + #elif defined(__GNUC__) && (__GNUC__ >= 4) && (__GNUC__ < 5) #define XFENCE() __sync_synchronize() + #elif (defined(__GNUC__) && (__GNUC__ >= 5)) || defined (__clang__) + #define XFENCE() __atomic_thread_fence(__ATOMIC_SEQ_CST) #elif defined (__i386__) || defined(__x86_64__) #define XFENCE() XASM_VOLATILE("lfence") #elif (defined (__arm__) && (__ARM_ARCH > 6)) || defined(__aarch64__) diff --git a/wrapper/Ada/alire.toml b/wrapper/Ada/alire.toml index 7a963a78a..53b0e9464 100644 --- a/wrapper/Ada/alire.toml +++ b/wrapper/Ada/alire.toml @@ -1,8 +1,8 @@ name = "wolfssl" description = "WolfSSL encryption library and its Ada bindings" -version = "5.7.0" +version = "5.7.2" -authors = ["Fernando Oleo Blanco"] +authors = ["WolfSSL Team "] maintainers = ["Fernando Oleo Blanco "] maintainers-logins = ["Irvise"] licenses = "GPL-2.0-only" diff --git a/wrapper/Ada/user_settings.h b/wrapper/Ada/user_settings.h index b6559a8c9..00f06a0fa 100644 --- a/wrapper/Ada/user_settings.h +++ b/wrapper/Ada/user_settings.h @@ -34,6 +34,8 @@ extern "C" { #endif +#include + /* Usually comes from configure -> config.h */ #define HAVE_SYS_TIME_H diff --git a/wrapper/CSharp/README.md b/wrapper/CSharp/README.md index 4a2c1455e..21310463a 100644 --- a/wrapper/CSharp/README.md +++ b/wrapper/CSharp/README.md @@ -81,7 +81,7 @@ mono client.exe To enable SNI, just pass the `-S` argument with the specified hostname to the client: ``` -mono client.exe -S hostname +mono client.exe -S hostname ``` And run the server with the `-S` flag: diff --git a/zephyr/CMakeLists.txt b/zephyr/CMakeLists.txt index 905f6cf11..b13d9941a 100644 --- a/zephyr/CMakeLists.txt +++ b/zephyr/CMakeLists.txt @@ -13,10 +13,10 @@ if(CONFIG_WOLFSSL) endif() zephyr_include_directories( - ${ZEPHYR_CURRENT_MODULE_DIR} - ${ZEPHYR_CURRENT_MODULE_DIR}/wolfssl - ${ZEPHYR_CURRENT_MODULE_DIR}/zephyr - ) + ${ZEPHYR_CURRENT_MODULE_DIR} + ${ZEPHYR_CURRENT_MODULE_DIR}/wolfssl + ${ZEPHYR_CURRENT_MODULE_DIR}/zephyr + ) zephyr_library() zephyr_library_sources(${ZEPHYR_CURRENT_MODULE_DIR}/zephyr/zephyr_init.c) @@ -164,8 +164,8 @@ if(CONFIG_WOLFSSL) zephyr_library_link_libraries(wolfSSL) - target_compile_definitions(wolfSSL INTERFACE WOLFSSL_ZEPHYR) - target_compile_definitions(wolfSSL INTERFACE WOLFSSL_USER_SETTINGS) + target_compile_definitions(wolfSSL INTERFACE WOLFSSL_ZEPHYR) + target_compile_definitions(wolfSSL INTERFACE WOLFSSL_USER_SETTINGS) if(CONFIG_WOLFSSL_DEBUG) target_compile_definitions(wolfSSL INTERFACE DEBUG_WOLFSSL) zephyr_library_compile_options(-g3 -O0) @@ -177,8 +177,8 @@ if(CONFIG_WOLFSSL) # therefore susceptible to bit rot target_include_directories(wolfSSL INTERFACE - ${CONFIG_WOLFSSL_INSTALL_PATH} - ) + ${CONFIG_WOLFSSL_INSTALL_PATH} + ) zephyr_link_libraries( wolfssl_external